码迷,mamicode.com
首页 > 其他好文 > 详细

看好你的门-攻击数据存储区(4)-XPath注入攻击

时间:2015-03-11 09:22:02      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:安全   web安全   金融安全   xpath   

首先需要声明,本文纯属一个毫无远见和真才实学的小小开发人员的愚昧见解,仅供用于web系统安全方面的参考。

1、一些多余的话

XPath注入和SQL注入,原理上非常相似
但是XPath注入的对象主要是XML,相对来说,危害性更加大

2、保存用户信息的XML


<?xml version="1.0" encoding="utf-8" ?>
<root>
<user>
<id>1</id>
<username>admin</username>
<password>123</password>
</user>
<user>
<id>5</id>
<username>ffm</username>
<password>1</password>
</user>
</root>

3、潜在漏洞的匹配语句

XPathExpression expr = xpath.compile("//root/user[username/text()=‘"
                + username + "‘and password/text()=‘" + password  + "‘]");

类似这种拼装的语句,天生就有被攻击的可能性。

3、实现XPath注入的JAVA登陆验证源代码

package com.struts2;

import javax.xml.parsers.*;
import javax.xml.xpath.*;
import org.w3c.dom.*;

import com.opensymphony.xwork2.ActionSupport;
/**
 * 一个简单的XPath认证功能,仅用于说明情况
 * 
 * @author 范芳铭
 */
public class XPathLoginAction extends ActionSupport {
    public String execute() throws Exception {
        return "success";
    }

    public boolean getXPathInfo(String username, String password)
            throws Exception {
        DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
        domFactory.setNamespaceAware(true);
        DocumentBuilder builder = domFactory.newDocumentBuilder();
        XPathFactory factory = XPathFactory.newInstance();
        XPath xpath = factory.newXPath();
        Document doc = builder.parse("D:/ffm83/user.xml");
        XPathExpression expr = xpath.compile("//root/user[username/text()=‘"
                + username + "‘and password/text()=‘" + password  + "‘]");

        Object result = expr.evaluate(doc, XPathConstants.NODESET);
        NodeList nodes = (NodeList) result;
        if (nodes.getLength() >= 1) {
            System.out.println("登陆成功。");
            return true;
        }
        else {
            System.out.println("用户名或者密码错误,登陆失败。");
            return false;
        }
    }

    public static void main(String[] args) throws Exception {
        XPathLoginAction xpath = new XPathLoginAction();
        xpath.getXPathInfo("ffm", "1");
    }

}

5、运行情况

xpath.getXPathInfo(“ffm”, “1”);
登陆成功。

xpath.getXPathInfo(“ffm”, “2”);

用户名或者密码错误,登陆失败。

6、简单模拟攻击

在密码字段输入:’ or ‘1’=’1
xpath.getXPathInfo(“ffm”, “’ or ‘1’=’1”);
运行后发现:
登陆成功。

已经被成功进行XPath注入。

看好你的门-攻击数据存储区(4)-XPath注入攻击

标签:安全   web安全   金融安全   xpath   

原文地址:http://blog.csdn.net/ffm83/article/details/44194023

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!