1. About SSRF
SSRF, Server-Side Request Forgery, 服务器端请求伪造
和CSRF做好区分。
漏洞原因:服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据。
PHP中下面函数的使用不当会导致SSRF:
file_get_contents();
fsockopen();
curl_exec();
2. 靶场练习
pikachu
ssrf(curl)
题目放出一个链接:
<a href="ssrf_curl.php?url=http://10.10.10.133/pk/vul/ssrf/ssrf_info/info1.php">累了吧,来读一首诗吧</a>
点击后,url变成了http://10.10.10.133//pk/vul/ssrf/ssrf_curl.php?url=http://10.10.10.133/pk/vul/ssrf/ssrf_info/info1.php
在服务段c盘放个php.ini配置文件,也能访问, 导致信息泄露。
http://10.10.10.133/pk/vul/ssrf/ssrf_curl.php?url=file://c:/php.ini
看下源码:
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(file_get_content)
c://info.ini 也能访问。
直接看下源码:
if(isset($_GET['file']) && $_GET['file'] !=null){
$filename = $_GET['file'];
$str = file_get_contents($filename);
echo $str;
}
需要了解下php协议,而php://filter 是一种元封装器, 用于数据流打开时的筛选过滤应用
https://www.php.net/manual/zh/wrappers.php.php
可用过滤器:https://www.php.net/manual/en/filters.php
元封装器经常结合其它漏洞完成利用。
注释里的payload对ssrf.php进行了base64加密,可以把前端的内容用工具解密一下。
编码的原因是防止文件内容被浏览器解析导致不能正常显示(目标是获取信息)
和文件包含漏洞不同,ssrf包含的文件不会执行(只是fread而已)。
|