(39.1)【XML漏洞专题】必备的基础知识、利用原理、构建规则

目录

一、简介:

二、XML与HTML

三、XML原理:

3.1、XML特点:

3.2、XML构建模块:

3.3、实体引用

3.4、XML可解析的协议

3.5、实体

3.5.1、参数实体:

3.5.2、其余实体

3.6、XML验证

四、DTD原理:

4.1、DTD(Document TypeDefinition)

4.2、分类

4.3、内部DTD的使用

4.3.1、定义:

4.3.2、语法:

4.4、外部DTD的使用

4.4.1、定义:

4.4.2、语法:

4.5、DTD-实体

4.5.1、定义:

4.5.2、分类:

4.5.3、内部实体

4.5.4、外部实体

4.5.5、参数实体

五、产生的原因:

六、XML注入:

6.1、原理:

 七、XEE漏洞利用


(像它一样自律,还有什么办不到呢) 


一、简介:

1、XML是应用程序的(面向服务的)核心,将来也有潜力

常用于从客户端向服务器提交数据。然后, 服务器端应用程序将处理这些数据,并且可能会返回一个包含XML或任何其他格式数据的响应。在使用异步请求在后台进行通信的基于Ajax的应用程序中, 这种行为最为常见。浏览器扩展组件和其他客户端技术也可能会用到XML

——————

XML规范允许使用外部引用来定义实体, XML解析器将动态提取这些实体的值。这些外部实体定义采用URL格式,并可以引用外部Web URL或本地文件系统上的资源。XML解析器将提取指定URL或文件的内容,并将其作为己定义实体的值。如果应用程序在其响应中返回任何使用外部定义的实体的XML数据, 则指定文件或URL的内容将在该响应中返回。

——————

特点:利用容易、代码灵活、易受攻击、应用广

——————

将XML作为攻击对象,可以利用强制解析攻击、XEE(xml外部实体攻击)、XML dos(xdos)攻击……


二、XML与HTML

XML:传输和存储数据(数据的内容)

— — — —

HTML:在前端显示数据,(展示数据,即外观)

— — — —

XML是数据的传输工具,数据和页面设计相分离


三、XML原理:

3.1、XML特点:

元素都须有关闭标签、标签对大小写敏感、元素必须被正确的嵌套、文档必须有根元素、属性值须加引号。

— — — — — —

3.2、XML构建模块:

元素,主要构建模块,元素可包含文本、其他元素或是空的。

属性,元素的额外信息

实体,用来定义普通文本的变量,还可对实体引。

PCDATA,被解析的字符数据,被解析器检查实体并标记。

CDATA,字符数据,不会被解析的文本。

— — — — — —

3.3、实体引用

 eg:把字符 “<” 放XML元素中,解析器会把它当作新元素的开始,所以会导致发生错误

为了避免发送此类的错误,用实体引用`<`来代替”<”字符

XML中,有5个预定义的实体引用。

— — — — — —

3.4、XML可解析的协议

libxml2

file、http、ftp

PHP

file、http、ftp、php、glob、data...

JAVA

file、http、ftp、https、jar、gopher...

.NET

file、http、ftp、https

— — — — — —

3.5、实体

3.5.1、参数实体:

只用于 DTD 和文档的内部子集中,使用百分号(%)+实体名称进行申明和引用

3.5.2、其余实体

在DTD中申明,XML中引用,实体名称申明,用&实体名称引用

字符实体

用十进制格式或十六进制格式,来指定任意 Unicode 字符

命名实体

在 DTD 或内部子集(即 <!DOCTYPE> 语句中一部分)中声明,在文档中用作引用。在解析过程中,实体引用将由它表示替代

外部实体

外部文件的内容,将被插入在引用点

— — — — — —

3.6、XML验证

通过 DTD进行验证,对XML的语法的合法进行判断(合法-->"形式良好")


四、DTD原理:

4.1、DTD(Document TypeDefinition)

文档类型定义。用来约束xml的文档格式(根元素、子元素、属性……的类型、个数、值等),保证XML是一个有效的XML(解析时DTD与XML中的不符就会报错)

— — — — — —

4.2、分类

DTD分内部和外部两种

内部DTD:DTD定义在XML文件中声明

外部DTD:定义在外部的DTD文件中引用

— — — — — —

eg:

<?xml version="1.0"?>

<!--定义此文档是 note 类型的文档-->

<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>        <!--定义note元素有四个元素-->
<!ELEMENT to (#PCDATA)>        <!--定义to元素为”#PCDATA”类型-->
<!ELEMENT from (#PCDATA)>        <!--定义from元素为”#PCDATA”类型-->
<!ELEMENT head (#PCDATA)>        <!--定义head元素为”#PCDATA”类型-->
<!ELEMENT body (#PCDATA)>                <!--定义body元素为”#PCDATA”类型-->
]>
<note>
<to>xxx</to>
<from>xxx</from>
<head>xxx</head>
<body>xxx</body>
</note>

— — — — — —

属性声明语法:

<!ATTLIST 元素名称 属性名称 属性类型 默认值>

— — — — — —

4.3、内部DTD的使用

4.3.1、定义:

DTD 被包含在 XML 文件中,一般在<!DOCTYPE> 语句中

4.3.2、语法:

<!DOCTYPE 根元素 [元素声明]>

属性声明语法  <!ATTLIST 元素名称 属性名称 属性类型 默认值>

— — — — — —

eg:

<?xml version="1.0" encoding="utf-8"?>
<!--注释-->
<!DOCTYPE books [
    <!ELEMENT books (book+)>
    <!ELEMENT book (name,author,price)>
    <!ATTLIST book id CDATA #REQUIRED>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT author (#PCDATA)>
    <!ELEMENT price (#PCDATA)>
    
]>
<books>
    <book id="A01">         <!--books的子元素-->
        <name>HARKER</name>         <!--books的子元素-->
        <author>法外狂徒张三</author>         <!--books的子元素-->
        <price>30.00</price>         <!--books的子元素-->
    </book>        <!--book的结束-->
</books>        <!--books的结束-->

4.4、外部DTD的使用

4.4.1、定义:

DTD 被包含在 XML 文件的外部,首先需要创建一个外部的DTD文件,直接<!ELEMENT...>(不需要包括<!DOCTYPE...>)

— — — — — —

注:外部实体引用时的关键字“SYSTEM”、“PUBLIC”

SYSTEM表示私有的DTD,PUBLIC表示共有的DTD

4.4.2、语法:

<!DOCTYPE 根元素 SYSTEM "文件名">
— — — — — —

eg:

<?xml version="1.0" encoding="utf-8"?>
<!ELEMENT books (book+)>
<!ELEMENT book (name,author,price)>
<!ATTLIST book id CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>
 

然后在XML文档中引入外部的DTD:

<!DOCTYPE books SYSTEM "xxx.dtd">

4.5、DTD-实体

4.5.1、定义:

实体(类似变量),可用来存储数据,但不仅限于存储,用于定义引用普通文本、特殊字符的变量

eg:引用外部实体,即存储数据,还能从远程文件或网络中读取/调用数据

4.5.2、分类:

根据实体被定义的位置,分为内部实体和外部实体(和内部DTD和外部DTD一样)

内部实体:在XML文档中的DTD进行定义的实体

外部实体:定义在外部DTD文件中,并被引用到XML中的实体

— — — — — —

4.5.3、内部实体

语法:

<!ENTITY 实体名称 "实体的值">

eg:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books [
    <!ENTITY test "good night">
]>

<books>&test;</books>
— — — — — —

4.5.4、外部实体

定义:

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

声明外部实体:“SYSTEM”关键字,让xml解析器知道是一个外部实体,并从外部资源中获取内容并存储在内部实体,外部资源中存在语法、特殊符号,就可能会报错

外部实体引用支持http,file……协议,不同语言支持的协议不同,但有一些通用的协议,比如http、file、ftp……

— — — — — —

4.5.5、参数实体

定义:

<!ENTITY %实体名称 "值">

<!ENTITY %实体名称 SYSTEM "URL">

语法:

 %+(空格)+实体名,在 DTD 中定义

限制:

只有在 DTD 文件中,参数实体的声明才能引用其他实体,参数实体也可以外部引用

(总而言之,只能在DTD中声明)

eg:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books [
    <!ENTITY % xxe "hello">
    %xxe;

]>

<books></books>



五、产生的原因:

允许解析外部实体:攻击者创建一个包含外部实体的XML,通过构造恶意内容,使得其中的内容会被服务器端执行,从而达到任意文件读取、系统命令执行、内网端口探测、攻击内网网站……操作


六、XML注入:

 6.1、原理:

XML注入攻击(和SQL注入类似)

攻击者利用XML解析的漏洞,通过"<"、">"构造恶意的数据,如果没有做相关的转义处理,拼接XML里面,可以修改XML的数据格式、添加XML节点,达到恶意语句的执行

【XML漏洞专题】XML注入——查找、注入、防止SOAPicon-default.png?t=M7J4https://blog.csdn.net/qq_53079406/article/details/126438867?spm=1001.2014.3001.5501


 七、XEE漏洞利用

【XXE漏洞专题】XXE原理、产生、检测、危害、利用、示例icon-default.png?t=M7J4https://blog.csdn.net/qq_53079406/article/details/124360287?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166097378316782395398125%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=166097378316782395398125&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-124360287-null-null.nonecase&utm_term=39.2&spm=1018.2226.3001.4450

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑色地带(崛起)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值