XML注入(XXE)

版权声明:本文为原创文章,未经作者允许不得任何个人、组织、机构以任何形式与名义进行转载 https://blog.csdn.net/qq_23217779/article/details/88555513

XML所有元素都必须要有一个结束标志
大小写敏感
所有元素嵌套必须正确
所有的XML文档都必须要有一个根标志

XML包括XML声明,DTD文档类型定义(可选),文档元素
DTD即文档类型定义,用来为XML文档定义语义约束
DTD可以嵌入在XML文档中(内部声明),也可独立放在一个文件中(外部声明),由于其支持的类型有限,无法对元素或属性的内容进行详细规范,在可读性和可扩展性方面也比不上XML Schema

引用方式

	DTD内部声明
	<!DOCTYPE 根元素 [元素声明]>
	DTD外部引用
	<!DOCTYPE 根元素名称 SYSTEM "外部DTD的URI">
	引用公共DTD
	<!DOCTYPE 根元素名称 PUBLIC "DTD标识名" "公用DTD的URI">

DTD内部声明:

	<!ENTITY writer "me">
	XML:
	<author>&writer;</author>
	一个实体由三部分构成:
	一个&
	一个实体名称
	一个;
示例:<!DOCTYPE FOO [
<!ELEMENT foo ANY>
<!ENTITY xxe "Thinking">
<foo>&xxe;</foo>

DTD外部引用

示例:
<!DOCTYPE foo [
<!ELEMENT foo ANY>
<!ENTITY xxe SYSTEM "file:///c:/win.ini">
]>
<foo>&xxe;</foo>

引用公共DTD

	格式
	<!ENTITY 实体名称 PUBLIC "public_ID" "URI">
	示例
	<!ENTITY public_dtd PUBLIC "DTD_name" "DTD_location">
	在公共类型DTD加载的时候,首先会使用DTD_name来检索,如果无法找到,则通过DTD_location来寻找此公共DTD
	利用DTD_location。在一定的环境下可以用来做内网探测

XXE注入,即XML外部实体注入
通过XML实体,"SYSTEM"关键词导致XML解析器可以从本地文件或远程URI中读取数据。攻击者可以通过XML实体传递自己构造的恶意值,使处理程序解析它。当引用外部实体时,通过构造恶意内容,可导致读取任意文件,执行系统命令,探测内网端口等危害。

XXE分类
1.基础XXE注入:外部实体注入本地DTD
2.基于盲注的XXE注入:XML解析器在响应中不显示任何错误
3.基于错误的XXE注入:成功解析之后,XML解析器始终显示SAME响应,可用解析器将文件内容"打印"到错误响应中。

猜你喜欢

转载自blog.csdn.net/qq_23217779/article/details/88555513