10_SSRF漏洞
什么是SSRF漏洞?
SSRF (Server-Side Request Forgery,服务器端请求伪造)是一种由攻击者构造请求,由服务端发起请求的安全漏洞。一般情况下,SSRF攻击的目标是外网无法访问的内部系统(正因为请求是由服务端发起的,所以服务端能请求到与自身相连而与外网隔离的内部系统)。
漏洞原理
其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制。
导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据。
数据流:
攻击者----->服务器---->目标地址
根据后台使用的函数的不同,对应的影响和利用方法又有不一样 !
PHP中下面函数的使用不当就会导致SSRF漏洞:
file_get_contents()
fsockopen()
curl_exec()
如果一定要通过后台服务器远程去对用户指定(“或者预埋在前端的请求”)的地址进行资源请求,则请做好目标地址的过滤。
pikachu例子
我们从url上可以看到,当我们点击的时候网页自动帮我们提交一个url参数(在本地用phpstudy搭建的服务器)
http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?url=http://127.0.0.1/pikachu/vul/ssrf/ssrf_info/info1.php
那么如果说我们对这个url参数进行修改的话能不能访问到其他的内容???
http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?url=https://www.baidu.com/
也能跳转到百度首页,这个就是SSRF漏洞的利用了。
pikachu后台源码
if(isset($_GET['url']) && $_GET['url'] != null){
$URL = $_GET['url'];
$CH = curl_init($URL);
curl_setopt($CH, CURLOPT_HEADER, FALSE);
curl_setopt($CH, CURLOPT_SSL_VERIFYPEER, FALSE);
$RES = curl_exec($CH);
curl_close($CH) ;
echo $RES;
}
后台没有对输入的参数进行过滤检查等一系列安全措施,完完全全的相信用户的输入。
利用SSRF漏洞访问外部文件
那么同样,我们尝试一下能不能访问到后台的文件(前提要知道文件路径)
我在pikachu的目录下新建一个1.php的文件
<?php
echo "SSRF测试<br>";
echo "SSRF测试<br>";
echo "SSRF测试<br>";
echo "SSRF测试<br>";
echo "SSRF测试<br>";
echo "SSRF测试<br>";
echo "SSRF测试<br>";
echo "SSRF测试<br>";
?>
http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?url=http://127.0.0.1/pikachu/1.php
输入浏览器进行访问
同样也可以利用SSRF漏洞访问后台的文件。
漏洞修复建议
1.限制请求的端口只能为Web端口,只允许访问HTTP和HTTPS的请求。 2.限制不能访问内网的IP,以防止对内网进行攻击。 3.屏蔽返回的详细信息。
|