看好你的门-攻击数据存储区(4)-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注入。

时间: 2024-10-27 07:48:20

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

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

首先需要声明,本文纯属一个毫无远见和真才实学的小小开发人员的愚昧见解,仅供用于web系统安全方面的参考. 本文部分内容来自互联网和翻译 1.一些多余的话 LDAP注入和SQL注入,原理上非常相似 但是LDAP往往包含很多的数据,相对来说,危害性更加大. 2.一些案例 这些案例不一定是LDAP造成的,但是性质基本上差不多 WooYun: 腾讯某服务配置不当内部海量敏感信息泄露! http://www.wooyun.org/bugs/wooyun-2013-045626 WooYun: 腾讯某研发中

看好你的门-保护数据存储区(1)-SQL注入防御

首先需要声明,本文纯属一个毫无远见和真才实学的小小开发人员的愚昧见解,仅供用于web系统安全方面的参考. 1.常用的SQL注入防御的方法 一个能连接数据库的应用. 1.对用户端输入的数据进行严格防范: 2.使用PreparedStatement执行Sql语句: 3.不仅仅要在页面层面进行验证,在服务端层面还要同步进行这些验证: 2.使用正则表达式屏蔽特殊字符 使用SQL注入攻击多在特殊字符上下手脚,如"'","*","/" ,"–&qu

看好你的门-保护数据存储区(2)-查看PreparedStatement最终执行的SQL

首先需要声明,本文纯属一个毫无远见和真才实学的小小开发人员的愚昧见解,仅供用于web系统安全方面的参考. 1.前提 很多同学都希望PreparedStatement 打印出最终执行的SQL,可能用于学习,也可能用于系统维护,也有可能用于其他的目标: 我也有这个想法和需求,但是经过多次实践和尝试,我发现在我的能力范围,我是无法实现的. 于是我找到了一个工具,log4jdbc ,这个工具能够切入JDBC层,对实际SQL执行前,把SQL抽出来. 这个工具相当强大,不过最终的运行结果会超出你的设想--.

选定的数据存储区出现问题,原因可能是服务器名称或凭据无效,或者权限不足

问题: ASP.NET Configuration site->安全,报错 "选定的数据存储区出现问题,原因可能是服务器名称或凭据无效,或者权限不足" 解决: 打开文件C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config 找到 <connectionStrings> <add name="LocalSqlServer" connectionString=&quo

看好你的门-攻击服务端(4)-HTTP参数注入攻击

首先需要声明,本文纯属一个毫无远见和真才实学的小小开发人员的愚昧见解,仅供用于web系统安全方面的参考. 1.HTTP参数注入攻击 如果用户提交的参数,被用做后端HTTP请求中的参数,这个时候就有可能会导致HTTP参数注入. 一个自己想出来的烂比方: 一个P2P的转账系统:钱(money),从哪里(from)到哪里去(to). 一个很简单的系统.开发的时候为了复用代码,加了一个判断字符(check),当然,这个判断字符(check)是不会出现在这个P2P的转账系统的文档系统中: 2.一个典型的容

看好你的门-验证机制被攻击(3)-智能化的蛮力攻击登陆

首先需要声明,本文纯属一个毫无远见和真才实学的小小开发人员的愚昧见解,仅供用于web系统安全方面的参考. 1. 简单说明 登陆功能的公开性,让无数的攻击者都试图猜测用户名和密码,从而获得未授权访问系统的权利. 作为系统的使用者,必须让自己的系统更加健壮,以应对狡猾的攻击者. 作为攻击者,需要去观察系统的各种细节情况,获得贴近实际的信息. 2. 智能化的蛮力攻击登陆步骤 我们首先需要有一个弱密码的系统,这样才可以去尝试蛮力攻击. 1. 用自己的某个合法账号进行尝试:比如提交几次错误的登陆,看收到什

【JDK源码分析】String的存储区与不可变性(转)

// ... literals are interned by the compiler // and thus refer to the same object String s1 = "abcd"; String s2 = "abcd"; s1 == s2; // --> true // ... These two have the same value // but they are not the same object String s1 = new

单片机中C语言的程序与数据存储

单片机中C语言的程序与数据存储 一.五大内存分区: 内存分成5个区,它们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 1.栈区(stack):FIFO就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区.里面的变量通常是局部变量.函数参数等. 2.堆区(heap):就是那些由new分配的内存块,它们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete.如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收. 3.自由存储区:就是那些

Java程序员从笨鸟到菜鸟之(一百)sql注入攻击详解(一)sql注入原理详解

前段时间,在很多博客和微博中暴漏出了12306铁道部网站的一些漏洞,作为这么大的一个项目,要说有漏洞也不是没可能,但其漏洞确是一些菜鸟级程序员才会犯的错误.其实sql注入漏洞就是一个.作为一个菜鸟小程序员,我对sql注入的东西了解的也不深入,所以抽出时间专门学习了一下.现在把学习成果分享给大家,希望可以帮助大家学习.下面我们就来看一下. 一.什么是sql注入呢?         所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的