目录
一、环境
二、漏洞讲解
三、靶场讲解
四、可利用协议
4.1 dict协议
4.2 file协议
4.3 gopher协议
五、看一道ctf题吧(长亭的比赛)
5.1环境
5.2开始测试
编辑
一、环境
pikachu,这里我直接docker拉取的,我只写原理,靶场都是随便找的
docker run --name piakchu -d -p 8000:80 area39/pikachu
二、漏洞讲解
SSRF(Server-Side Request Forgery:服务器端请求伪造)
其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制
导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据
数据流:攻击者----->服务器---->目标地址
根据后台使用的函数的不同,对应的影响和利用方法又有不一样
PHP中下面函数的使用不当会导致SSRF: file_get_contents() fsockopen() curl_exec()如果一定要通过后台服务器远程去对用户指定("或者预埋在前端的请求")的地址进行资源请求,则请做好目标地址的过滤。
三、靶场讲解
首先点进来是一首诗,点击后url后面会有参数,请求本地的一个资源,?url=http://127.0.0.1/vul/ssrf/ssrf_info/info1.php
去看看源码吧,用vscode直接远程连接docker里面
请求的东西在这里
代码不等于空就执行,最后curl_exec执行
比如访问百度,就会把百度加载出来,那这有什么用呢????有什么危害
可以通过各种协议读取文件等等,我们一个一个研究
四、可利用协议
4.1 dict协议
dict 协议是一个在线网络字典协议,这个协议是用来架设一个字典服务的。不过貌似用的比较少,所以网上基本没啥资料(包括谷歌上)。可以看到用这个协议架设的服务可以用 telnet 来登陆,说明这个协议应该是基于 tcp 协议开发的。
所以像 mysql 的服务,因为也是基于 tcp 协议开发,所以用 dict 协议的方式打开也能强行读取一些 mysql 服务的返回内容,比如我本地开的mysql我们尝试读取
利用点在于,可以探测内网端口(比如我们渗透的时候遇到的不出网协议),fastcgi,redis
pass:readis【6379】未授权访问(写入webshell,物理路径,写入任务计划(反弹webshell),写入公钥(直接登录服务器))很盛行,因为低版本90%的人基本上不会设置密码,但到2024年有些企业很注意这个点了,大部分人也开始设置了
4.2 file协议
读取文件
包括php连接文件,可以读出来mysql的账号和密码
4.3 gopher协议
可以发送发送gopher get
请求
我们gethub上面开源了一款工具叫做gopherus这个工具
可以攻击点就这么多,可以想象这个漏洞的危害,已经可以直接写一句话木马了
我刚刚克隆了一下这个工具给大家展示一下作用
问反弹shell还是写入phpshell
而这个协议最重要的还是物理路径,如果网站的debug没关的话,也许我们日常挖洞的时候可以爆出来,我docker里面做测试我已经知道本地物理路径这里只展示
我们来看一下它写入解码后的一个值是 ,很明显可以看到它在将我写入的内容存入到shell.php这个目录下,相当于是内存数据落盘
来看看反弹shell是怎么回事
任务计划root权限
还有一个写公钥的功能它并没有,但这个也合理正常来说公钥是我们自己生成的,用-t就可以了,这样就可以实现免密登录了
五、看一道ctf题吧(长亭的比赛)
5.1环境
自己网上找,名字web-ssrfme.md
5.2开始测试
访问如下,限制了协议file、dict、localhost,不能探测内网端口和文件
访问是可以但是没什么用
当我们去探测内网端口的时候直接nonono
但是它给了提示可以用info打印出phpinfo,可以看出使用的是apache7.0
看出它的docker里面的ip
那我们去访问一下看看,又打印了一次,那我可以用它来探测端口,3306和6379都没有反应,好像什么服务都没装
bp爆破探测一下看看
但是不好的消息是好像只开放了80,那没必要在这个服务器浪费时间了
手工探测一下0.1,0.3等等,先看看,很明显0.2和0.1是有服务器的,但0.1是默认html文件对我们用处不大去看看0.2吧
爆破0.2很明显有6379和80端口
那我们就需要考虑传webshell但是我们不知道物理路径,先猜吧/var/www/html ,用刚才的Gopherus工具生成个payload
很明显并没有写进去
用上帝视角去看一下updload给的权限这么高,很明显就是上面我们所讲的
但正常做题我们并没有上帝视角,一般都是用gethub上面开源的目录等等,我们做题只模拟,假设我们字典只有这五个
用bp抓包,然后爆破,假设我们扫出来了,那我们gopherus的目录就要变了,我们接着写入才有可能会成功
还是没有成功,很快就结束了,并没有下一步动作
考虑一下二次编码
再次测试,很明显已经成功实现了
但是我们发现id并没有进行一个执行
排一下错,我们上帝视角改一下看看
这样是执行成功了
那说明我们写的解析有问题,重新写下看看
这下是ok的,那就证明正常解法就是如此,那我正常入侵的时候写webshell和反弹shell也ok