0x00:简介
首先先简单的说一下 xml,看一下它的全名称,叫 Xtensible Markup Language,即可扩展的标记语言,可直接理解为内容可自定义扩展,标签可自定义扩展。其实就是一个文本格式的文件,以 xml 结尾,里面的标签内容可以自定义。它具有很清晰的层次结构,便于阅读,经常被用来做配置文件和存储数据。web 中用 xml 格式来传输数据和处理的功能也有很多。而后端没有对 xml 传来的数据做严格的检查时即会造成 xml 注入。
以下是一个基本的 xml 格式:
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title>aaa</title>
<price>111</price>
</book>
<book>
<title>bbb</title>
<price>222</price>
</book>
<book>
<title>ccc</title>
<price>333</price>
</book>
</bookstore>
第一行是 xml 文件的声明,然后是 xml 的内容,例子中的 bookstore 书店是根元素,其他元素都在 bookstore 标签中,book 标签有两个子元素,分别是书名 title,价格 price,和 html 的结构很像。
0x01:测试方法
例如一个 web 应用,使用进行用户注册时,会以 xml 来存储数据到 xmldb 数据库中,当用户填写用户名,密码和邮箱时,后台存储的文件格式及内容如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<users>
<username>lurenjia</username>
<password>lurenjia</password>
<userid>0</userid>
<mail>lurenjia@lurenjia.com</mail>
</users>
xml 注入时可以先试一下 xml 中的一些有特殊作用的字符,好比测试 sql 注入我们可能先会输入一些单引号双引号等,测试 xss 时可能先输入尖括号等符号来大概看一下效果。
单引号(‘):如果被注入的标签是属性值的一部分,那么输入单引号会引起 xml 解析异常。
<node attrib='$inputValue'/>
当用户输入的值为 test'时,以上代码就变成了