pikachu-SSRF
概述
SSRF(Server-Side Request Forgery:服务器端请求伪造)
其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制
导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据
数据流:攻击者----->服务器---->目标地址
根据后台使用的函数的不同,对应的影响和利用方法又有不一样
PHP中下面函数的使用不当会导致SSRF: file_get_contents() fsockopen() curl_exec()
如果一定要通过后台服务器远程去对用户指定("或者预埋在前端的请求")的地址进行资源请求,则请做好目标地址的过滤。
SSRF(curl)
打开pikachu,点击页面a标签,可以看到上传了一个url到后台
我们直接查看后端代码,可以看到它是用get获取了前端的url请求,curl_init函数会对它进行初始化,然后curl_exec函数会去执行请求,最终又将请求结果返回到前端。
接着我们将上传的url修改为http://www.badiu.com,可以看到页面显示出了百度的数据库 (它的流程和分析的源代码流程是一样的,前端传入参数,后端通过curl_exec去请求百度,最后把请求返回的百度数据返回到前端)
这样我们可以把 url 中的内容改成内网的其他服务器上地址和端口,探测内网的其他信息,我们也可以通过SSRF漏洞读取服务器的文件
比如我们读取pikachu/test/hacker.txt文件,我们将url修改为 http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?url=http://127.0.0.1/pikachu/test/hacker.txt
成功获取到文件信息。
SSRF(file_get_content)
同样点击pikachu上的a标签
查看后端代码,与前面逻辑大体相同,不同之处是它这里使用file_get_contents函数进行文件的读取执行,而file_get_contents函数可以对本地文件进行读取,也可以对远程文件进行读取。
同样的我们将上传的参数换成www.badiu.com
与前面相同,我们也可以读取pikachu/test/hacker.txt文件 http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?url=http://127.0.0.1/pikachu/test/hacker.txt
我们也可以制造恶意的payload去获取后台的PHP源码 php://filter/read=convert.base64-encode/resource=ssrf.php
可以看到成功获取了转换后php的base64编码,将base64进行解码,获取到了源码