XML注入、XXE、XPath注入原理与防御

XML:可扩展标记语言,用来传输数据和存储数据,它的标签没有被定义,需要自行定义标签

是W3C的推荐标准

 

XML与HTML的差异

XML用来传输和存储数据,其焦点是数据的内容

HTML用来显示数据,其焦点是数据的外观

 

XML基本构造

 

XML注入是通过改写xml的数据内容来实现的

 

<USER role="guest">User1</USER><USER role=“admin”>User2 </USER>

 

XML外部实体注入(XXE)

Document Type Definition: 用于验证xml文档是否有效

 

 

三个部分:第一部分为XML声明,第二部分为文档类型定义,第三部分为文档元素

第二部分“ELEMENT”为声明,声明第三部分,“ENTITY”为实体引用,第三部分将ab替换为第二部分实体的值。如果此时ab值为本地文件路径或远程文件的链接,就会得到文件内容。

 

攻击实例;

.1.<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE UserInfo[<!ENTITY name SYSTEM "file:///D:/Entity/1.txt">]><aa>&name;</aa>

 

2.<?php

$xml=<<<EOF

<?xml version="1.0" ?>

<!DOCTYPE ANY[

<!ENTITY xxe SYSTEM "file:///D:/Entity/1.txt">

]>

<x>&xxe;</x>

EOF;

$data = simplexml_load_string($xml);

print_r($data)

?>

总体为两部分,第一部分整体的值都给变量$xml,第二部分是将第一部分的内容发送到XML解析引擎中,输出结果。

实际操作1:http://127.0.0.1:8086/xmlentity.php,发送该请求,会获取D盘Entity文件家中1.txt文档中的信息。

实际操作2:http://127.0.0.1:8086/xmlentity1.php?xml=(攻击实例1中代码的URL编码),执行结果同1

 

XML之XPath

XPatn将文档中所有的内容当成节点,用于识别,选择和匹配XML文档中的各个组成部分

XPath实例

<users>

<user id="u001">

<name>张三</name>

<gender>男</gender>

<age>33</age>

</user>

<user id="u002">

<name>李四</name>

<gender>男</gender>

<age>33</age>

</user>

</users>

 

/users: 指向users元素

/users/user:指向users下的user元素

/users/user/..:指向users元素

/users/user/@id: 得到所有user元素的id属性

/users/user[1]:第一个user元素

/users/user[age>20]: age小于20的user元素

使用//代表后代节点

使用.表示当前节点

使用..表示上一级节点(父节点)

 

XPath注入

如果程序没有验证用户查询输入,就会发生XPath注入,可提交恶意的请求来修改查询语句。导致:事物逻辑和认证绕过,获取后端XML数据库内容。

认证过程是如下形式

/user[username=”sa” and password=”123456!”]

攻击者可以提交以下输入(知道正确的用户名)

username:  sa"or "1" ="1

password:  anything

则查询会变为:/user[username="sa"or "1"="1"and anything]

username="sa" or [true and flase]

usename="sa" or flase

返回“sa”

 

提交以下输入(不知道正确的用户名)

/user[username=”non_existing"or "1"="1” or "1" ="1“ and

password=”anything”]

 

执行会显示成如下的形式:

username="non_existing" or TRUE or [True AND False]

 

结果是:

username="non_existing" or TRUE or FALSE.

结果会以第一个节点的身份登录系统

 

 

XML注入、XXE、XPath注入防御

XXE:过滤用户提交的XML数据。关键词:<!DOCTYPE <!ENTITY SYSTEM PUBLIC

XML注入:用户参数进行处理,对XML操作,必须对格式字符进行转义处理。

XPath注入:与预防sql注入基本一致,尤其是/ ^ " ; & < > () 等字符的过滤

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值