一.SSRF漏洞简介
SSRF(Sever-Side Request Forgery 服务器端请求伪造攻击)是一种由攻击者构造请求,由服务器端发起请求的安全漏洞。SSRF漏洞通过存在漏洞的服务器端作为代理通道攻击本地或远程服务器,获取与服务器端相连而与外网隔绝的内部系统。
二.SSRF漏洞原理
(1)漏洞形成
1.服务端提供了从其他服务器应用上获取数据的功能,根据用户指定的URL获取图片,下载文件,读取文件内容等
2.服务端未对用户指定的URL目标地址做过滤与限制
(2)漏洞攻击方式
1.ssrf.php源代码分析
在这段源代码中,程序获取GET参数url,通过curl_init()初始化curl组件,将参数url带入curl_setopt($ch,CURLOPT_URL,$url) 然后调用curl_exec()请求该url。
2.主要攻击方式
以下是常见的一些攻击方式
1.curl
http://localhost/ssrf/ssrf1.php?url=www.baidu.com(访问网站)
http://localhost/ssrf/ssrf1.php?url=file:///E:/peizhi.txt(访问文件)
http://localhost/ssrf/ssrf1.php?url=dict://127.0.0.1:3306(探测端口)
2.file_get_content
http://localhost/pikachu/vul/ssrf/ssrf_fgc.php?file=http://127.0.0.1:3306(探测端口)
http://localhost/ssrf/ssrf1.php?file=file:///E:/peizhi.txt(访问文件)
此外,如果PHP环境下安装了expect扩展,还可以通过expect协议执行系统命令:
http://localhost/ssrf/ssrf1.php?url=expect://id
(3)漏洞危害
SSRF漏洞的危害在于,攻击者可以通过控制服务器发送的请求,绕过防火墙和其他安全措施,直接访问内部资源。这可能导致数据泄露、服务器资源滥用、甚至远程代码执行等安全问题。
三.SSRF漏洞靶场演示
本次演示采用的是pikachu靶场,其中的SSRF漏洞分为curl和file_get_content两种类型。
以curl型为例:
点击链接,显示一首诗的原文
更改url的内容使其访问我们指定的网站:
(http://localhost/pikachu/vul/ssrf/ssrf_curl.php?url=www.baidu.com)
可以看到此时网页成功显示了百度的界面。利用file://协议获取文件也是同理。