题目提示:这次是发一个HTTP POST请求.对了.ssrf是用php的curl实现的.并且会跟踪302跳转.
定义:Gopher是Internet上一个非常有名的信息查找系统,它将Internet上的文件组织成某种索引,很方便地将用户从Internet的一处带到另一处。在WWW出现之前,Gopher是Internet上最主要的信息检索工具,Gopher站点也是最主要的站点,使用tcp70端口。但在WWW出现后,Gopher失去了昔日的辉煌。现在它基本过时,人们很少再使用它;
URL:gopher://<host>:<port>/<gopher-path>_后接TCP数据流
POST请求里面发现有4个参数为必要参数:
POST /ssrf/base/post.php HTTP/1.1
host:192.168.0.109
Content-Type:application/x-www-form-urlencoded
Content-Length:11
curl函数的意义
例:
// 创建一个新cURL资源
$ch = curl_init(); $ch 由 curl_init() 返回的 cURL 句柄。
// 设置URL和相应的选项
curl_setopt($ch, CURLOPT_URL, "http://www.w3cschool.cc/");
curl_setopt($ch, CURLOPT_HEADER, 0);
// 抓取URL并把它传递给浏览器
curl_exec($ch);
// 关闭cURL资源,并且释放系统资源
curl_close($ch);
其余的curl函数用处 可以参考
构造如下payload进行ssrf,从目标机本地访问flag.php
一种是在bp上进行访问发现key; 一种是在题目环境里 查看源代码 发现key
构造Gopher数据
首先记住php接受数据的时候会对数据进行一次unicode解码
所以构造的数据要进行二次编码
构造的payload:
POST /flag.php HTTP/1.1
Host:127.0.0.1:80Content-Length:36 //此处的长度为key的长度
Content-Type:application/x-www-form-urlencoded
key=f91b51e0743019e5e94095c9960e757b //后面需要接一个回车表示结束
先进行第一次url编码
其中,需要将 %0A 替换成 %0D%0A ,因为%0A是linux系统的换行符,我们是Windows系统,因此需要换成 %0D%0A或%0d%0a
再进行第二次编码:
因为我们是通过curl的伪协议:gopher发送请求包,因此需要第二次编码
数据包准备好后,就可以向flag.php文件发送了
以上步骤用网上查到的脚本一步得出数据包
把得到的数据包放在url上 得出本题的flag
https:///qq_44418229/article/details/125221655
Gopher协议在SSRF漏洞中的深入研究(附视频讲解) - Margin的文章 - 知乎
https://zhuanlan.zhihu.com/p/112055947
主要参考资料:
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- ovod.cn 版权所有 湘ICP备2023023988号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务