首页 > 代码库 > 其他小众类型输入攻击

其他小众类型输入攻击

一、XML注入:XXE Injection即XML External Entity Injection
XML最初设计的目的是弥补HTML的不足,后来逐渐用于网络数据的转换和描述。XML的设计宗旨是传输数据,而非显示数据。
XML是各种应用程序之间数据传输中最常用的工具。
[html] view plain copy
 
  1. <pre name="code" class="html"><pre name="code" class="html"><?xml version="1.0" encoding="UTF-8"?>  
  2. <manager>  
  3.     <admin id="1">  
  4.         <name>admin</name>  
  5.         <password>admin</password>  
  6.     </admin>  
  7.     <admin id="2">  
  8.         <name>root</name>  
  9.         <password>root</password>  
  10.     </admin>  
  11. </manager>  


攻击者如果恰好能掌控password字段,那么就会产生XML注入,如攻击者输入:
[html] view plain copy
 
  1. admin</password></admin><admin id="5"><name>hack</name><password>hacker  
XML注入时的两大要素为:标签闭合和获取XML表结构。

至今,XML注入还是比较少见的,而且XML注入修复也是比较简单的事情,只需要将预定义字符进行转义即可。

预定义字符

< &lt;
> &gt;
& &amp;
&apos;
" &quot;

二、XPath注入
XPath即为XML路径语言,XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。简单地说,XPath就是选取XML节点的一门语言。
XPath与SQL注入的方式类似。
[html] view plain copy
 
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <users>  
  3.     <user id="1">  
  4.         <name>admin</name>  
  5.         <password>admin888</password>  
  6.     </user>  
  7.     <user id="2">  
  8.         <name>root</name>  
  9.         <password>root123</password>  
  10.     </user>     
  11. </users>  
在查询时,输入XPath语句:
[plain] view plain copy
 
  1. //user[username/text()=‘admin‘ and password/text()=‘admin888‘]  
结果会返回
[plain] view plain copy
 
  1. Id:1  
  2. UserName:admin  
  3. PassWord:admin888  
假设我们可以控制XPath语句,那么使用or 1=1即可遍历全部节点,语句如下:
//user[username/text()=‘admin‘ and password/text()=‘‘ or ‘1‘=‘1‘]
结果会返回
[plain] view plain copy
 
  1. Id:1  
  2. UserName:admin  
  3. PassWord:admin888  
  4.   
  5.   
  6. Id:2  
  7. UserName:root  
  8. PassWord:root123  
对一些敏感信息,不要 使用XML传输,如果一定要使用XML,建议尽量使用密文传输,防御方法和XML注入一样,对关键字符转换。

三、JSON注入
JSON是一种轻量级的数据交换格式,它基于JavaScript的一个子集。简单地说,JSON可以将JavaScript中的对象转换为字符串,然后在函数、网络之间传递这个字符串。
JSON和XML存在竞争关系。在XML中需要许多开始标记和结束标记,而JSON简单明了。
[plain] view plain copy
 
  1. {"users":[  
  2.     {"UserName":"admin","PassWord":"admin888","email":"admin@example.com"}  
  3.     {"UserName":"root","PassWord":"root123","email":"root@example.com"}  
  4. ]}  
如果有恶意用户向JSON中注入恶意字符,那么JSON将解析失败,例如,输入的哦PassWord值为:admin"888
那么组装成的JSON数据位如下:"PassWord":"admin"888"。在password中的引号将会破坏整个JSON结构,导致JSON解析失败。

防御方法为对关键字符进行转义,也可使用第三方库,比如Java可使用JSON-lib.jar组建JSON数据。

 

四、HTTP参数污染:HPP即HTTP Parameter Pollution
HTTP请求中未规定不可以传输多个相同的参数项。当请求类似http://www.example.com/news.PHP?id=1&id=2&id=3时,不同脚本环境的取的参数也不同,有的取id=1,有的取id=3,有的三个参数都取。
HPP参数污染经常用来逃过一些Web应用防火墙(WAF)
简单地说,WAF在脚本还未接收到请求之前就开始对数据进行校验,如果未发现恶意代码,则交给脚本去处理,如果发现恶意代码,就进行拦截,不再交给脚本去处理。
例如,某个WAF防火墙定义数据中不允许出现select关键字,WAF取值验证时可能会选择第一项参数值,而脚本取值与WAF不同,这样就有可能绕过WAF的数据验证。
PHP:new.php?id=1&id=select username,password from admin -- 
ASP.NET: news.aspx?id=s&id=e&id=l&id=e&id=c&id=t

 
 

其他小众类型输入攻击