web渗透xxe漏洞

本文详细介绍了XML(可扩展标记语言)及其特性,特别是外部实体注入(XEE)的安全风险,包括不安全的配置、DTD使用、实体定义和外部DTD引用。同时,文章强调了XML的用途、语法规则以及如何通过DTD确保其合法性。
摘要由CSDN通过智能技术生成
xxe
xml external entity 外部实体注入,用户输入恶意 xml 被后台解析了恶意语句
owasptop10-- 不安全的配置
xml 是什么??
XML 指可扩展标记语言( EXtensible Markup Language )。
XML 是一种很像 HTML 的标记语言。
XML 的设计宗旨是传输数据,而不是显示数据。
XML 标签没有被预定义。您需要自行定义标签。
XML 被设计为具有自我描述性。
语法
<?xml version="1.0" encoding="UTF-8"?>
<a>
<b> 1 </b>
<c> 2 </c>
</a>
①需要根节点
②标签用一 一对应的形式呈现,即每个标签需闭合
xml 声明(可选)
xml 对大小写敏感
⑤便签尽量不已 xml 开头
⑥名称中不包含空格
⑦不能以特殊符号开头
作用
①数据传输
②存储数据
xml 的合法性
xml 语法正确仅是格式、型正确
通过 dtd 验证 xml 是否合法
DTD(DOCUMENT TYPE DEFINITION) 文档类型定义
内部 DTD
DTD 文件包含于 xml
例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE user[<!ELEMENT user (username,password,age,class,school)>
<!ELEMENT username (#PCDATA)>
<!ELEMENT password (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT class (#PCDATA)>
<!ELEMENT school (#PCDATA)>]>
<user>
<username> zhang san </username>
<password> abc@123 </password>
<age> 1.9 </age>
<class> 家里蹲 </class>
<school> 1+1 </school>
</user>
!DOCTYPE 定义此文档为 user 类型文档
!ELEMENT 声明 user 中有那些元素,
!ELEMENT 声明元素类型,
PCDATA: 可被解析器解释的文本;
CDATA: 不会被解析器解释
外部 DTD
<!DOCTYPE root-element SYSTEM "filename">
例:
test.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE user SYSTEM "test.dtd">
<user>
<username> zhang san </username>
<password> abc@123 </password>
<age> 1.9 </age>
<class> 家里蹲 </class>
<school> 1+1 </school>
</user>
test.dtd
<!ELEMENT user (username,password,age,class,school)>
<!ELEMENT username (#PCDATA)>
<!ELEMENT password (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT class (#PCDATA)>
<!ELEMENT school (#PCDATA)>
DTD 实体
定义文本内容的变量
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE student[
<!ELEMENT student (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ENTITY a "zhangsan">
<!ENTITY b "8">
]>
<student>
<name> &a; </name>
<age> &b; </age>
</student>
注: & 实体名 ;
a b 相当于变量但以实体的方式表示 , 实体如: < 等,但在 xml 中实体名是可以自由定义的
还可以不定义元素直接写实体
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE student[
<!ENTITY a "zhangsan">
]>
<student>
<name> &a; </name>
</student>
外部实体
<!DOCTYPE root-element[<!ENTITY entity-name SYSTEM " 资源位置 ">]>
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE student[
<!ENTITY a SYSTEM "file://D:\phpstudy_pro\WWW\xxe\test4.dtd">
]>
<student>
<name> &a; </name>
</student>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ANY[
<!ENTITY a SYSTEM "file://D:\phpstudy_pro\WWW\xxe\test4.dtd">
]>
<name> &a; </name>
在外部 dtd 的基础上新增一个实体的约束即可
参数实体
<!ENTITY % 实体名称 " 实体值 ">
<!ENTITY % 实体名称 SYSTEM "URI">
例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ANY[
<!ENTITY % a SYSTEM "http://127.0.0.1/test.dtd">
%a;
]>
<name> &s; </name>
test.dtd
<!ENTITY s SYSTEM "file://xxxx">
为例 pikachu
pikachu 设置了一个通过 php 解析 xml 文件内容的页面
传入 xml 如下,通过参数实体获取敏感信息
  • 34
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值