网络安全/渗透测试/代码审计/
关注
SSRF漏洞原理与利用
什么是SSRF?
SSRF(Server-Side Request Forgery),服务器端请求伪造
;利用一个可以发起网络请求
的服务
,可以当做跳板
来攻击
其他服务。
Know IT, SSRF有什么能耐?
内外网的端口
和服务探测
主机本地敏感数据
的读取
内外网主机应用程序漏洞
的利用
…… 等等
怎么找到SSRF漏洞?
能够对外发起网络请求
的地方,就可能存在SSRF
漏洞
从远程服务器请求资源
(Upload from URL,Import & Export RSS feed)
数据库内置功能(Oracle、MongoDB、MSSQL、Postgres、CouchDB)
Webmail收取其他邮箱邮件(POP3/IMAP/SMTP)
文件处理
,编码处理
,属性信息处理
(ffpmg,ImageMaic,DOCX,PDF,XML处理器)
测试靶场PHP源码
代码语言:javascript复制<?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);
?>
SSRF漏洞的利用
访问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/
BurpSuite - Intruder模块探测内网端口
首先访问URL:
http://localhost/web/ssrf.php?url=127.0.0.1
然后打开BurpSuite
抓包:
数据包如下:
代码语言:javascript复制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实用手册
Start Attack:
Intruder attack 结果:
扫描/探测后,开放了:80、8080、912、902、3306端口
80
:HTTP
8080
:代理服务器
端口(因为打开了BurpSuite)
912
:虚拟机
监听端口
902
:Vmware
使用的端口
3306
:Mysql
服务默认端口
SSRF漏洞修复建议
过滤
返回信息,验证
远程服务器对请求的响应是比较容易的方法。如果web应用
是去获取某一种类型的文件。那么在把返回结果
展示给用户之前先验证返回的信息
是否符合标准
。
统一
错误信息,避免用户可以根据错误信息
来判断
远端服务器的端口状态
。
限制请求的端口为http
常用的端口,比如,80
,443
,8080
,8090
。
黑名单
内网ip。避免应用被用来获取获取内网数据,攻击内网。
禁用不需要的协议。仅仅允许http
和https
请求。可以防止类似于file:///
,gopher://
,ftp://
等引起的问题。