XML内容注入

一、介绍
XML注入主要分为内容注入和实体注入。
内容注入分为XML数据注入、样式表注入、XPATH/XQuery注入。

二、前提条件:有入口用户可修改XML

三、初步测试步骤
(1)检查系统设计文档/代码飞检/访谈,检查服务器文件,收集出所有的XML存储文件
(2)检查所有XML存储文件的外部输入位置(如web页面输入或修改参数值的位置),通过burpsuit绕过客户端校验,使提交的参数值包含<>/’=""之类的特殊字符
(3)检查后台XML存储文件是否直接存储了步骤2中的异常输入内容

四、注入方式
1、XML数据注入:
a)、假设如下图的XML被用于从客户端提交到Web服务端。price的值不可控,quantity和address项的值可控,即可以由用户自由输入。

<?xml version='1.0'?> 10 25.00
beijing
b)、在quantity的值中构造""

2、样式表注入
a)、除了注入数据到XML之外,作为XML注入的结果,使代码运行也是可能的。在XML文件中允许使用样式表,这种样式表能够把已有的XML数据转换成新的XML数据,这种新的XML文档通常以HTML的方式在Web浏览器中展现。
假设XML引用了一个超链接:Attacker Text,Attacker Text是用户可控,服务端利用XSLT语言将上述XML转换为如下的HTML,并传送给Web浏览器:<A HREF="“Attacker Text”">Attacker Text
b)、将Attacker Text改为""#"" οnclick="“alert(1)”" /><!-- 提交到服务器查看是否会引起XSS跨战脚本攻击。

3、XPATH/XQuery注入
a)、XPath和XQuery是能够查询XML文档的语言,类似于结构化查询语言(SQL),假设存在以下XML包含了姓名和社保号:

<?xml version='1.0'?> Tom Gallagher 123-45-6789 Bryan Jeffries 23-45-67890 Lawrence Landauer 012-345-6789 b)、系统通过以下语句查询XML数据,如: //*[contains(name,'Attacker-Data')]/name c)、Attacker-Data是用户可控制的,修改以上语句为 //*[contains(name,'x')] | //*| //*[contains(name,'y')]/name d)、因为加了|//*,|是或运算符,//*查询所有,查看是否返回所有数据。
发布了20 篇原创文章 · 获赞 0 · 访问量 188

猜你喜欢

转载自blog.csdn.net/weixin_42299862/article/details/104714931