XXE 攻击(2)

0x00 前言

在上一遍文章中提到了XML的格式定义DTD存在外部实体引用攻击,这次来学习一下主流的XML格式定义XML Schema,刚好最近上了java的spring培训,里面定义beans的时候主要配置的就是XML文档,所以也是时候再学学xml的相关知识了,网上很多相关文章,主要记录一些和安全相关的设置吧

0x01 XML Schema 基础

XML Schema 描述了 XML文档的结构,也是由 XML 编写,其中Schema可以理解为约束、概要,但不推荐使用中文进行记忆,Schema就是Schema

  • 一个普通的xml文档:
<?xml version="1.0"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
  • 一个XML Schema定义
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">

<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>

</xs:schema>
  1. 第一句代表xml版本号,1.0版本
  2. schema的根元素
  3. xmlns:xs=”http://www.w3.org/2001/XMLSchema“ 代表schema 中用到的元素和数据类型来自命名空间 “http://www.w3.org/2001/XMLSchema"。同时它还规定了来自命名空间http://www.w3.org/2001/XMLSchema“ 的元素和数据类型应该使用前缀 xs:
  4. targetNamespace=”http://www.runoob.com“ 显示被此 schema 定义的元素 (note, to, from, heading, body) 来自命名空间: “http://www.runoob.com"。
  5. xmlns=”http://www.runoob.com“ xmlns=”http://www.runoob.com
  6. elementFormDefault=”qualified” 指出任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定。
  7. 后面是各种元素定义,数据类型定义等

详细的关于XML Schema定义可以参考下面的链接

http://www.runoob.com/schema/schema-schema.html

  • xml文档引用上面定义的Schema:note.xsd(这是重点要理解的)
<?xml version="1.0"?>
<note
xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com note.xsd">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
  1. xmlns=”http://www.w3schools.com“ 定义了默认的命名空间,如果没有定义其他的命名空间,XML 文档会使用这个作为schema 验证器
  2. xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“ 定义了一个指定的命名空间,并把这个空间 alias - xsi(别名)
  3. xsi:schemaLocation=”http://www.w3schools.com note.xsd”> 定义了xsi的schemaLocation属性,格式为:namespace and XSD-location-URI,中间用换行符或者空格作为分隔符

下来来自stackoverflow的详细解释,好明白的讲解:

https://stackoverflow.com/questions/34202967/xmlns-xmlnsxsi-xsischemalocation-and-targetnamespace

0x02 XML Schema攻击的分类

XML Schema攻击分为,下面的没有怎么研究,希望日后可以补充,都是看家人的总结来的

1.schemaLocation

2.noNamespaceSchemaLocation

3.XInclude。

4.XSLT 攻击

refer link

https://mp.weixin.qq.com/s?__biz=MzIwNDI4MzAwOA==&mid=2650524176&idx=1&sn=e1f8ebb128ae248d69e2947e4ac9bcf2&scene=21#wechat_redirect