SSRF漏洞
SSRF(Server-Side Request Forgery:服务器端请求伪造)
其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制
导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据
数据流:攻击者----->服务器---->目标地址
根据后台使用的函数的不同,对应的影响和利用方法又有不一样
PHP中下面函数的使用不当会导致SSRF:
file_get_contents()
fsockopen()
curl_exec()
如果一定要通过后台服务器远程去对用户指定("或者预埋在前端的请求")的地址进行资源请求,则请做好目标地址的过滤。
打开页面后有一个超链接,点一下。注意到URL里面有一个地址
http://123.56.245.68:83/vul/ssrf/ssrf_curl.php?url=http://127.0.0.1/vul/vul/ssrf/ssrf_info/info1.php
从源码可以看到这里的这部分功能是通过curl_exec()函数执行url传过来参数给的地址,然后将参数返回前端。如果url参数被替换成http://xxxx或者curl支持的其他协议等都会被curl执行(**curl支持telnet ftp ftps dict file ldap等**)
那么我们来修改它的地址:
这里就直接把百度的数据显示出来了。
当然,我们也可以测试端口是否开放。(针对内网)
3、SSRF(file_get_content)
file_get_content()函数是用于将文件的内容读入到一个字符串中的首选方法,逻辑和前面一样。它支持读取远程文件或者本地文件,也支持多种协议。更多的,它还支持php伪协议,我们可以利用伪协议方法读取本地源码。
方案1:直接子修改地址 注意:写的是http://baidu.com,是http,不是https
方案2:读取页面源码-payload
Base64解码