0x00前言
XXE 漏洞全称 XML External Entity Injection 即 xml 外部实体注入漏洞,XXE 漏洞发生在应用程序解析 xml 输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起 dos 攻击等危害。
XXE 漏洞触发的点往往是可以上传 xml 文件的位置,没有对上传的 xml 文件进行过滤,导致可上传恶意 xml 文件。
基本语法
-
所有 XML 元素都须有关闭标签
-
XML 标签对大小写敏感
-
XML 文档必须有根元素
-
XML 的属性值须加引号
在 XML 中,一些字符拥有特殊的意义,如果把这些字符放在XML元素中就会产生错误,所以必须用实体引用来代替
重点是XML验证中的DTD
DTD 简介:DTD 的作用是定义 XML 文档的结构。它使用一系列合法的元素来定义文档结构:
<!DOCTYPE note (to,from,heading,body)>
to (#PCDATA)>
from (#PCDATA)>
heading (#PCDATA)>
body (#PCDATA)>
]>
文档类型定义(DTD)可定义合法的 XML 文档构建模块。它使用一系列合法的元素来定义文档的结构。DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。
内部实体声明语法
<!ENTITY实体名称 "实体的值">
外部实体声明语法
<!ENTITY实体名称 SYSTEM "URI/URL">
实例:
1.内部实体声明
DTD 实例:
writer "Donald Duck.">
XML 实例:&writer;©right;
2.外部实体声明
DTD 实例:
writer SYSTEM "http://www.runoob.com/entities.dtd">
XML 实例:&writer;©right;
注:一个实体由三部分构成: 一个和号 (&), 一个实体名称, 以及一个分号(;)
特征:
Accept: application/xml, text/xml, */*; q=0.01
一般XXE利用分为两大场景:有回显和无回显。有回显的情况可以直接在页面中看到Payload的执行结果或现象,无回显的情况又称为blind xxe可以使用外带数据通道提取数据。
XXE-Lab是有回显的。
0x01正文
1.PHP-XXE
POC:
<user><username>&test;</username><password>admin</password></user>
全部代码:
分析:
$xmlfile = file_get_contents('php://input'); 用PHP伪协议来读取文件
将POC传入之后,做一个处理,对username、password做一个验证,而且在回显中需要有$username和$password参数
流程走向:
返回输出$creds,然后传入$username
结果:
- End -
原文始发于微信公众号(NS Demon团队):XXE-Lab笔记
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论