`
yanyanquan
  • 浏览: 451162 次
  • 性别: Icon_minigender_1
  • 来自: 江门
社区版块
存档分类
最新评论

Xpath注入攻击及其防御技术研究

阅读更多
1 Xpath注入攻击概述
1.1 Xpath定义
    近年来在现代化电子商务,商场现代化系统中,XML技术被广泛的使用,开始出现针对XML数据信息的XPath注入攻击技术。注入攻击是指利用系统没有对其输入进行强制执行或检查的假设向计算机系统中引入(或 “注入”)代码的技术。注入代码的目的通常是绕过或修改程序的最初目标功能,如果被绕过的功能涉及系统安全,那么结果可能是灾难性的。在XML信息被大量使用,其数据的安全性显得非常重要,但是目前很少有研究人员研究XPath的注入攻击防御技术。
    XPath注入攻击是指利用XPath 解析器的松散输入和容错特性,能够在 URL、表单或其它信息上附带恶意的XPath 查询代码,以获得权限信息的访问权并更改这些信息。XPath注入攻击是针对Web服务应用新的攻击方法,它允许攻击者在事先不知道XPath查询相关知识的情况下,通过XPath查询得到一个XML文档的完整内容。
1.2 XPath注入攻击特点
    XPath注入攻击利用两种技术,即XPath扫描和XPath查询布尔化。通过该攻击,攻击者可以控制用来进行XPath查询的XML数据库。这种攻击可以有效地对付使用XPath查询(和XML数据库)来执行身份验证、查找或者其它操作。XPath注入攻击同SQL注入攻击类似,但和SQL注入攻击相比较,XPath在以下方面具有优势。
    (1) 广泛性。XPath注入攻击利用的是XPath语法,由于XPath是一种标准语言,因此只要是利用XPath语法的Web 应用程序如果未对输入的XPath查询做严格的处理都会存在XPath注入漏洞,所以可能在所有的XPath实现中都包含有该弱点,这和SQL注入攻击有很大区别。在SQL注入攻击过程中根据数据库支持的SQL语言不同,注入攻击的实现可能不同。
    (2)危害性大。XPath语言几乎可以引用XML文档的所有部分,而这样的引用一般没有访问控制限制。但在SQL注入攻击中,一个“用户”的权限可能被限制到某一特定的表、列或者查询,而XPath注入攻击可以保证得到完整的XML文档,即完整的数据库。只要Web服务应用具有基本的安全漏洞,即可构造针对XPath应用的自动攻击。
2 Xpath注入攻击原理
    XPath注入攻击主要是通过构建特殊的输入,这些输入往往是XPath语法中的一些组合,这些输入将作为参数传入Web 应用程序,通过执行XPath查询而执行入侵者想要的操作,下面以登录验证中的模块为例,说明 XPath注入攻击的实现原理。
    在Web 应用程序的登录验证程序中,一般有用户名(username)和密码(password)两个参数,程序会通过用户所提交输入的用户名和密码来执行授权操作。若验证数据存放在XML文件中,其原理是通过查找user表中的用户名(username)和密码(password)的结果来进行授权访问,例存在user.xml文件如下:
<users>
      <user>
          <firstname>Ben</firstname>
          <lastname>Elmore</lastname>
          <loginID>abc</loginID>
          <password>test123</password>
      </user>
      <user>
          <firstname>Shlomy</firstname>
          <lastname>Gantz</lastname>
          <loginID>xyz</loginID>
          <password>123test</password>
      </user>
    则在XPath中其典型的查询语句如下:
//users/user[loginID/text()='xyz' and password/text()='123test']
    但是,可以采用如下的方法实施注入攻击,绕过身份验证。如果用户传入一个 login 和 password,例如 loginID = 'xyz' 和 password = '123test',则该查询语句将返回 true。但如果用户传入类似 ' or 1=1 or ''=' 的值,那么该查询语句也会得到 true 返回值,因为 XPath 查询语句最终会变成如下代码:
//users/user[loginID/text()='' or 1=1 or ''='' and password/text()='' or 1=1 or ''='']
    这个字符串会在逻辑上使查询一直返回 true 并将一直允许攻击者访问系统。攻击者可以利用 XPath 在应用程序中动态地操作 XML 文档。攻击完成登录可以再通过XPath盲入技术获取最高权限帐号和其它重要文档信息。
3 XPath注入攻击防御技术
    目前专门的XPath攻击防御技术还不是太多,但是SQL注入攻击防御技术可以加以改进,应用到XPath注入攻击防御。具体技术总结如下:
    (1)数据提交到服务器上端,在服务端正式处理这批数据之前,对提交数据的合法性进行验证。
    (2)检查提交的数据是否包含特殊字符,对特殊字符进行编码转换或替换、删除敏感字符或字符串。
    (3)对于系统出现的错误信息,以IE错误编码信息替换,屏蔽系统本身的出错信息。
    (4)参数化XPath查询,将需要构建的XPath查询表达式,以变量的形式表示,变量不是可以执行的脚本。如下代码可以通过创建保存查询的外部文件使查询参数化:
    declare variable $loginID as xs:string external;
    declare variable $password as xs:string external;
    //users/user[@loginID=$loginID and @password= $password]
    (5)通过MD5、SSL等加密算法,对于数据敏感信息和在数据传输过程中加密,即使某些非法用户通过非法手法获取数据包,看到的也是加密后的信息。
4  XPath攻击防御模型
4.1  XPath攻击防御模型
    通过对XPath注入攻击技术的特点研究其原因,和前人提出的Xpath注入攻击检测与防御技术的基础上,作者建立一个优化的XPath攻击防御模型。如图1所示,其思想就是所有的验证都在服务器端验证,因为客户端验证可以通过脚本禁用等方法而绕过。当服务器接收到客户端提交过来的数据时,首先检测其客户端的IP是否在注入攻击数据库中,如果是则直接输出出错信息,如果不是则验证是否包含非法字符,如果用户是首次提交非法信息,则输出出错信息,如果用户是第二次提交,则输出出错信息并将该客户端的IP记入注入攻击数据库中,在两天之内禁止该用户访问,如果信息合法,则将用户信息提交给参数变量,执行安全的查询,输出结果。对于记入攻击数据库中的IP信息,两天后系统自动删除,这样可以防止是因为用户误操作而造成合法用户无法访问,和某些用户恶意的多次入侵的企图。




图1


    通过本模型的验证,系统可以自动进行入侵防御,减少人为的进行检测,节省大量的人力,系统核心代码如下:
……………………………………
//检测客户端IP是否在XPath注入攻击数据库中,如果是则禁止访问
String address=request.getRemoteAddr().toString();
String sqlString="select * from ipinjection where ip='"+address+"'";
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection cn=DriverManager.getConnection("jdbc:odbc:test","sa","ip");
Statement stmt=cn.createStatement();
ResultSet rs=stmt.executeQuery(sqlString);

if(rs.next()){
  out.println("非法用户,禁止进入本系统!");
  out.close();
}else{
//如果IP不在攻击数据库中,IP地址合法,则进行提交信息合法性验证。
  if(……………..){
    //提交信息合法,则通过参数化变量的形式,进行查询,防止进行恶决查询
    Document doc = new Builder().build("users.xml");
    XQuery xquery = new XQueryFactory().createXQuery(new File("
    dologin.xq"));
    Map vars = new HashMap();
    vars.put("loginid",username);
    vars.put("password",password);
    Nodes results = xquery.execute(doc,null,vars).toNodes();
    for (int i=0; i < results.size(); i++) {
    System.out.println(results.get(i).toXML());
}  }else{
    //如果提交信息非法,并且客户端是首次提交,则直接输出出错信息。 
    int count=Integer.parseInt(session.getAttribute("count").toString());
    if(count==0){
      out.println("您进行了非法操作,本系统将记录您的信息,如再次进行非法操作,本系统将锁定您的IP");
      session.setAttribute("count",new Integer(count+1));
      out.close();
    }
else{
    //如果提交信息非法,并且客户端是第二次提交,则直接输出出错信息。并将客户端IP记入攻击数据库中,禁止该用户再次进入系统。记入的数据两天后系统自动删除,以防止某此用户是误操作,造成无法访问系统的情况
  out.println("非法用户,本系统将禁止您进入!");
      sqlstring="inser into ipinjection(ip,host,attacktime,username,password,)
values('"+address+"','"+host+"','"+new Date()+"','"+username+"','"+password+"')";
      stmt.executeUpdate(sqlstring);
      out.close();
}    }  }}

4.2 使用方法与实际效果
    将所有的代码放入一个xpathinjection.jsp文件中,将该文件包含在需要验证信息的文件中,对于需要验证其它信息的,只需要将该代码进行简单修改,将其封装就可以验证其它的信息。通过实际测试,当入侵者在网页提交一些非法字符达到指定两次后,系统会自动屏蔽掉该IP 地址对网站的访问,并将攻击IP 地址、攻击时间、攻击者信息写入到数据库中,具有很好的防注入攻击效果。
5 结束语
    本文阐述了XPath注入攻击的概念,分析了XPath注入攻击的原理及其相关防御技术,根据防御技术特点,提出了一个自动防御模型,给出了相应的实现,取得了很好的实际效果。
    本文作者创新点:综合相应的注入防御技术,提出了一个自动防御模型,同时给出了模型的流程与具体实现,对于XPath的注入攻击防御具有一定的实用价值。
分享到:
评论

相关推荐

    测试XPath注入.docx

    XPath 注入是指攻击者通过提交恶意的 XPath 查询来破坏应用程序的逻辑或获取未授权访问的数据的安全漏洞。XPath 是一种用于导航 XML 文档并从中获取数据的解释型语言。许多时候,一个 XPath 表达式代表由一个文档...

    XPath注入漏洞利用工具XPath-XCat.zip

    XCat是一个命令行程序,用于辅助XPath注入漏洞的利用。XCat使用Python编写并开放源代码。XCat正常使用需要python的SimpleXMLWriter模块。 标签:XPath

    X-path注入.pdf

    尽管文档的其余部分由于OCR扫描的原因存在识别错误,不过基于已有的信息,我们可以推断文档详细探讨了XML和XPath注入攻击的机制、影响以及防御方法。这对于学习web安全和XML应用系统的开发者和安全专家来说,是一份...

    XPath-Injection:XPath注入脚本

    XPath注入是一种针对XML数据的攻击方式,通过构造恶意的XPath表达式来欺骗应用程序,获取未经授权的数据或者执行非预期的操作。这种攻击通常发生在应用接受用户输入的XPath查询,并直接用于解析XML文档时。在这个名...

    xxxpwn:高级 XPath 注入工具

    xxxpwn : XPath 过滤扩展工具 : 专为盲优化 XPath 1 注入攻击而设计 xxxpwn 使用各种 XPath 优化来查询来自存在 XPath 注入的位置提供的后端 XML 文档的自定义信息。 默认情况下,它会尝试检索整个远程数据库,尽管...

    xpath--java框架技术

    在Java框架中,XPath通常与其他技术结合使用,如DOM解析器(用于解析XML文档)和JAXB(用于XML与Java对象之间的绑定)。例如,当我们处理一个XML配置文件时,可能会先用XPath定位到配置项,然后用JAXB将其转换为Java...

    Xpath生成器,自动生成XPATH,C#版

    XPath(XML Path Language)是一种在XML文档中查找信息的语言,它是W3C组织制定的一种标准查询语言,用于选取XML文档中的节点,包括元素、属性、文本等。在本项目“Xpath生成器,自动生成XPATH,C#版”中,开发者...

    xcat:XPath注入工具

    自动化XXE攻击 可以使用OOB HTTP请求大大加快检索速度 自定义请求标头和正文 内置REPL外壳,支持: 读取任意文件 读取环境变量 列出目录 上载/下载文件(TM) 优化检索 如果可用,对unicode代码点使用二进制搜索 ...

    xpath-helper.zip

    XPath Helper 是一个强大的工具,主要用于协助开发者在XML或HTML文档中高效地定位和提取数据,尤其在Web爬虫开发中发挥...在学习和使用Python进行Web爬虫开发时,理解并熟练掌握XPath及其相关的库如lxml是至关重要的。

    IE下获取XPATH小工具源码_xpath_

    通过深入研究和理解这个C#小工具的源码,不仅可以提升对XPath的掌握,还能学习到C#中DOM操作和事件处理的相关知识,这对于Web开发或者XML处理的程序员来说是非常宝贵的技能。同时,这也是一次实践面向对象编程、用户...

    Xpath指南XPATH实例

    XPath,全称XML Path Language,是一种在XML文档中查找信息的语言。它被设计用来选取XML文档中的节点,包括元素、属性、文本等。XPath基于W3C标准,为XML处理提供了一种强大而灵活的方式。以下是对“XPath指南”中...

    XPath Helper版本2.0.2

    XPath Helper是一款非常实用的工具,尤其对于Web开发者和数据抓取者来说,它极大地简化了在网页中查找和提取信息的过程。版本2.0.2是这个插件的一个更新,旨在提供更稳定、高效的功能。XPath(XML Path Language)是...

    XPath教程

    此外,XPath还可以在其他XML处理技术中发挥作用,如XQuery、DOM解析等。通过熟练掌握XPath,开发者能够更高效地处理XML数据,提高XML文档的解析和操作能力。 总结来说,XPath是XML处理的重要工具,它简化了在XML...

    谷歌浏览器XPath2.0插件

    XPath(XML Path Language)是一种在XML文档中查找信息的语言,它允许我们通过路径表达式来选取节点,比如元素、属性和文本等。XPath 2.0是XPath的第二个主要版本,增加了更多的功能和优化。 在没有XPath Helper的...

    Xpath生成器,自动生成可用的Xpath。

    Xpath生成器,可以通过输入的文件,进行匹配,生成全部可用的Xpath,犹豫HTML中部分标签允许无结束,如:("LINK" ,"META","SCRIPT","IMG" ,"INPUT", "FORM")故已经被忽略,如有朋友发现其中有问题,请告诉我哦...

    xpath定位,xpath定位,xpath定位

    Selenium xpath,

    XPathHelper_2.0.2_xpath_

    XPathHelper 2.0.2 版本专注于XPath的查询与应用,特别适合于Web自动化测试和网页数据抓取。 XPath在Web开发中的主要用途有以下几点: 1. **元素定位**:XPath允许开发者通过路径表达式来选取XML或HTML文档中的...

    XPathHelper_2.0.2.zip

    XPathHelper_2.0.2.zip 是一个包含XPath Helper Chrome扩展程序的压缩文件,版本为2.0.2。XPath Helper是一款非常实用的工具,它专为Chrome浏览器设计,帮助开发者和网页爬虫工程师高效地测试和调试XPath表达式。...

    xpath的jar包

    XPath是W3C(万维网联盟)标准的一部分,其主要用途是为XSLT(XML样式表转换语言)提供数据选择功能,同时也被许多其他XML相关的技术如DOM(文档对象模型)和XQuery所采用。 XPath的jar包,例如`jaxen`,是Java实现...

Global site tag (gtag.js) - Google Analytics