http://bmzclub.cn/challenges#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__); 
shell_exec — 通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。
shell_exec ( string $cmd ) : string
shell_exec()的执行效果和执行操作符反引号(``)是一样的
escapeshellarg — 把字符串转码为可以在 shell 命令里使用的参数
escapeshellarg ( string $arg ) : string
pathinfo() 返回一个关联数组包含有 path 的信息。返回关联数组还是字符串取决于 options。
pathinfo ( string $path , int $options = PATHINFO_DIRNAME | PATHINFO_BASENAME | PATHINFO_EXTENSION | PATHINFO_FILENAME ) : mixed
basename — 返回路径中的文件名部分
basename ( string $path , string $suffix = ? ) : string

首先解决下这里的沙箱路径问题,这里没有将$sandbox输出,所以需要自己计算出路径

$_SERVER["REMOTE_ADDR"]#是用户访问页面用的公网IP,百度输出IP直接搜索就能知道

在这里插入图片描述
最后的文件路径是:/sandbox/6dcb273e31b7c6e1cb3f2bb2b6b9236f/
在这里插入图片描述
Forbidden就对了Not Found就错了

例如构造?url=/&filename=mochu.html,然后访问/sandbox/6dcb273e31b7c6e1cb3f2bb2b6b9236f/mochu.html
在这里插入图片描述
然后当我尝试/?url=/flag&filename=flag.txt
然后再访问沙盒下的flag.txt
在这里插入图片描述

更多推荐