`
yanyanquan
  • 浏览: 452807 次
  • 性别: 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的注入攻击防御具有一定的实用价值。
分享到:
评论

相关推荐

    免费的防止锁屏小软件,可用于域统一管控下的锁屏机制

    免费的防止锁屏小软件,可用于域统一管控下的锁屏机制

    Python代码实现带装饰的圣诞树控制台输出

    内容概要:本文介绍了一段简单的Python代码,用于在控制台中输出一棵带有装饰的圣诞树。具体介绍了代码结构与逻辑,包括如何计算并输出树形的各层,如何加入装饰元素以及打印树干。还提供了示例装饰字典,允许用户自定义圣诞树装饰位置。 适用人群:所有对Python编程有一定了解的程序员,尤其是想要学习控制台图形输出的开发者。 使用场景及目标:适用于想要掌握如何使用Python代码创建控制台艺术,特别是对于想要增加节日氛围的小项目。目标是帮助开发者理解和实现基本的字符串操作与格式化技巧,同时享受创造乐趣。 其他说明:本示例不仅有助于初学者理解基本的字符串处理和循环机制,而且还能激发学习者的编程兴趣,通过调整装饰物的位置和树的大小,可以让输出更加个性化和丰富。

    白色大气风格的设计师作品模板下载.zip

    白色大气风格的设计师作品模板下载.zip

    电商平台开发需求文档.doc

    电商平台开发需求文档.doc

    白色简洁风格的办公室室内设计门户网站模板下载.zip

    白色简洁风格的办公室室内设计门户网站模板下载.zip

    VB+access干部档案管理系统(源代码+系统)(20246t).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    VB+ACCESS服装专卖店管理系统设计(源代码+系统+开题报告+答辩PPT)(2024ra).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    (179065812)基于Android stduio的手机银行开发与设计-用于课程设计

    课程设计---基于Android stduio的手机银行开发与设计 现今,手机已经成为人们生活和工作的必备品,在手机各种系统中Android系统是人们用的比较多的系统。手机银行也是人们在生活中比较常用的功能之一。本项目基于Android的手机银行开发与设计主要功能有登录注册、转账、转账记录查询、修改及查询个人信息、添加好友、向好友转账的功能。本项目主要用Android Studio 开发,数据库SQLite数据库,和夜神模拟器。 基于Android stduio的手机银行开发与设计项目主要功能有登录注册、转账、转账记录查询、修改及查询个人信息、添加好友、向好友转账的功能。。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

    白色大气风格的婚礼现场倒计时模板下载.zip

    白色大气风格的婚礼现场倒计时模板下载.zip

    轮式移动机器人轨迹跟踪的MATHLAB程序,运用运动学和动力学模型的双闭环控制,借鉴自抗扰控制技术结合了非线性ESO,跟踪效果良好,控制和抗扰效果较优,可分享控制结构图 这段程序主要是一个小车的动力

    轮式移动机器人轨迹跟踪的MATHLAB程序,运用运动学和动力学模型的双闭环控制,借鉴自抗扰控制技术结合了非线性ESO,跟踪效果良好,控制和抗扰效果较优,可分享控制结构图。 这段程序主要是一个小车的动力学仿真程序,用于模拟小车在参考轨迹下的运动。下面我将对程序进行详细的分析解释。 首先,程序开始时使用`clear`、`clc`和`close all`命令来清除工作空间、命令窗口和图形窗口中的内容。 接下来,程序定义了一系列参数和变量,用于设置仿真的参数和存储仿真过程中的数据。这些参数包括小车的质量、车宽、驱动轮半径等,还有参考轨迹的振幅和频率,仿真步长,仿真时间等。 然后,程序定义了一些元胞数组,用于存储不同阶段的数据。这些数组包括参考轨迹位姿、真实运动轨迹位姿、参考轨迹一阶导数、参考轨迹速度、期望速度、真实速度、控制器输出的控制力矩、控制输入、期望速度与真实速度误差、摩擦值、外界扰动值、总扰动、位姿跟踪误差、扰动观测值等。 接下来,程序给这些变量赋初始值,包括小车的初始位姿和速度,初始速度,期望初始速度,控制器输出的控制力矩,扰动观测值等。 然后,程序进入一个循环,仿真时间从

    vb+ACCESS学生档案管理系统(论文+源代码)(2024ql).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    数据分析-31-疫情数据分析(包含代码和数据)

    这是一份来自开源的全球新冠肺炎数据集,每日时间序列汇总,包括确诊、死亡和治愈。所有数据来自每日病例报告。数据持续更新中。 由于数据集中没有美国的治愈数据,所以在统计全球的现有确诊人员和治愈率的时候会有很大误差,代码里面先不做这个处理,期待数据集的完善。

    白色大气风格的时装设计公司模板下载.zip

    白色大气风格的时装设计公司模板下载.zip

    白色大气风格的商务会议活动模板下载.rar

    白色大气风格的商务会议活动模板下载.rar

    vb+access工资管理系统(论文+程序+开题报告+外文翻译+答辩PPT)(2024k3).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    基于微信小程序的学生签到系统设计与实现ssm.zip

    本次开发一套基于微信小程序的生签到系统,有管理员,教师,学生三个角色。管理员功能有个人中心,学生管理,教师管理,签到管理,学生签到管理,班课信息管理,加入班课管理,请假信息管理,审批信息管理,销假信息管理,系统管理。教师和学生都可以在微信端注册和登录,教师可以管理签到信息,管理班课信息,审批请假信息,查看学生签到,查看加入班级,查看审批信息和销假信息。学生可以查看教师发布的学生签到信息,可以自己选择加入班课信息,添加请假信息,查看审批信息,进行销假操作。基于微信小程序的生签到系统服务端用Java开发的网站后台,接收并且处理微信小程序端传入的json数据,数据库用到了MySQL数据库作为数据的存储。

    技术资源分享-我的运维人生-《新年的奇妙团聚与希望之旅》

    **脚本描述**:本脚本围绕着新年这个充满欢乐与希望的时刻展开。故事发生在一个热闹的小镇,主要角色有在外打拼多年的年轻人小李,他的父母,以及一群充满活力的小镇居民。新年将至,小李踏上回家的旅途,满心期待与家人团聚。在小镇上,大家都在积极筹备新年,贴春联、挂灯笼、准备年夜饭。小李与家人重逢后,一起分享着彼此的故事和喜悦。同时,他们也和小镇居民一起举办了热闹的庆祝活动,在欢声笑语中迎接新年的到来。这个新年不仅让小李重新感受到了家的温暖,也让他对未来充满了信心和希望,他决定和小镇一起成长发展。通过这个脚本,展现新年带给人们的幸福、温暖和对未来的憧憬。

    Python 自动办公- Python分类汇总278张Excel表中的数据 Python源码

    Python 自动办公- Python分类汇总278张Excel表中的数据

    白色创意风格的用户信息登记源码下载.zip

    白色创意风格的用户信息登记源码下载.zip

    白色大气的音乐专辑博客整站网站模板下载.zip

    白色大气的音乐专辑博客整站网站模板下载.zip

Global site tag (gtag.js) - Google Analytics