对 zend framework xxe injection 的分析

前几天网上爆出一个zend framework 漏洞 作者:mkods

具体描述如下: https://www.sec-consult.com/files/20120626-0_zend_framework_xxe_injection.txt ; 根据描述,该漏洞是发生在zend 框架 xmlrpc模块的一个 xxe(XML external entity) injection漏洞,利用这个漏洞可以读取服务器上任意文件,例如php文件源代码; xmlrpc是提供rpc (远程过程调用)服务的一个模块,采用xml语言在服务端跟客户端之间进行数据交互;问题就出在服务端跟客户端对xml的解析上;

网上已经有文章证明了这个漏洞,并给出了成功读出”/etc/passwd”文件的截图;但我没看明白具体是如何爆出文件内容的; 为了明白这个漏洞到底如何利用,以及成功利用需要什么条件,我写了个简单的程序测试; 既然是rpc服务,那就得有一个客户端,一个服务端; 服务端提供了一个程序hello,当有客户端向服务端请求执行hello函数时,服务端就会执行hello函数,并把运行结果”this is a zend framework xmlrpc helloword”返回给客户端; 具体代码如下

服务端代码server.php:
对 zend framework xxe injection 的分析

客户端代码client.php
对 zend framework xxe injection 的分析

把代码server.php、client.php部署到apache,开启wireshark抓包,然后在浏览器访问http://localhost/zendtest/client.php,页面成功显示来自server.php的字符串

对 zend framework xxe injection 的分析

打开wireshark 查看这个过程中产生的数据包

对 zend framework xxe injection 的分析

执行流程是这样的
浏览器——>client.php——->server.php;
server.php——–>client.php->浏览器;
最关键的两个数据包:第4个数据包是client.php请求server.php执行hello函数的post数据;第5个数据包是server.php返回给client.php的数据;
包内容如下:

数据包4:

数据包5:

对 zend framework xxe injection 的分析

通过查看数据包,熟悉了 zend_xmlrpc的工作流程,以及所发数据的格式及意思; 现在我们根据已知格式来构造会触发漏洞的数据包:

对 zend framework xxe injection 的分析

该恶意数据包的目的是读取服务端系统的 “/etc/passwd”文件;

为了测试方便,我写了一个python脚本向server.php发包,代码如下:

对 zend framework xxe injection 的分析

执行这个python脚本,返回结果如下:

对 zend framework xxe injection 的分析

成功爆出了”/etc/passwd”文件的内容;
现在来整理下该漏洞产生的流程:
1: server.php 收到xml数据,交给zend_xmlrpc_server:

对 zend framework xxe injection 的分析

2:Zend_Xmlrpc_server模块直接使用 new simpleXMLElement($xml)解析xml,并创建实例;解析后的xml实例为:

对 zend framework xxe injection 的分析

3:zend_xmlrpc_server读取methodname的值(即红色字体文字)作为客户端请求执行的函数;

4: 由于请求的函数不存在,zend_xmlrpc_server返回错误信息 xxx does not exits;(xxx为 /etc/passwd 的内容)
由此泄漏了”/etc/passwd”的内容

zend framework的新版本修复了这个漏洞,截图中红线处的代码是补丁代码:

对 zend framework xxe injection 的分析

执行 libxml_disable_entity_loader(true),这样SimpleXMLElement在解析xml的时候就不会解析entity;也就防止了文件泄漏的产生

分类:默认分类 时间:2012-01-08 人气:11
本文关键词:
分享到:

相关文章

  • Magento eCommerce Platform XXE Injection利用 2012-01-21

    0x2 今天看packetstormsecurity时看到了这个漏洞的细节:http://packetstormsecurity.org/files/114710/Magento-eCommerce-Platform-XXE-Injection.html 利用方法其中也说的很明白: Proof of concept: ----------------- Magento uses a vulnerable Zend_XmlRpc_Server() class (Zend\XmlRpc\Server

  • Ubuntu 10.10 配置 Zend Framework 2013-02-07

    第一步,打开apache的rewrite模块,因为在UBUNTU下使用apache必须执行这一步 复制代码 代码如下: sudo a2enmod rewrite #激活rewrite模块 sudo /etc/init.d/apache2 restart #激活后要重启apache服务器 第二步,安装Zend Framework 复制代码 代码如下: sudo apt-get install zend-framework 系统会自动安装依赖包,包括bin还有php5-cli。成功安装后Zend库的

  • Ubuntu10.10 Zend FrameWork配置方法及helloworld显示 2013-05-02

    一、大概思路 1.1、 (备注:安装Zend Framework,其附带apache2和php5) 1.2、 二、Zend Framework配置 2.1、安装Zend Framework 在ubuntu10.10的软件中心安装zf. 2.2、激活apache的rewrite模块 命令行输入:sudo a2enmod rewrite 2.3、配置PHP5路径 配置include_path路径信息,修改/etc/php5/con.d目录下的zend-framework.ini 终端输入:sudo

  • 解析如何使用Zend Framework 连接数据库 2014-05-20

    本篇文章是对如何使用Zend Framework 连接数据库的方法进行了详细的分析介绍,需要的朋友参考下 复制代码 代码如下: $db = Zend_Db::factory('Pdo_Mysql', array( 'host' => '127.0.0.1', 'username' => 'root', 'password' => '123456', 'dbname' => 'mysql' )); 直接连接MYSQL 返回一个数据库连接对象 读取配置文件中的配置并连接 复制

  • 艾格中国(Etam)zend framework任意文件读取漏洞及修复 2014-02-18

    URL:http://www.etam.com.cn/api/xmlrpc post数据: <?xml version="1.0"?> <!DOCTYPE foo [ <!ELEMENT methodName ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd" >]> <methodCall> <methodName>&xxe;</methodName> <

  • codeforces Variable Shadowing 2014 NEERC Southern Subregional M 贪心策略 2012-04-27

    传送门:2014 NEERC Southern Subregional M 按要求输出所有出现重复定义情况时的错误信息 (1)每遇到一个{,就进入下一层 (2)每遇到一个字母,首先判断上面层次中是否有该字母的定义,若有则输出错误信息,然后记录下该层次并记录该点的行列位置 (3)每遇到一个},就退回上一层,然后把该层中所有的字母定义位置删去 /****************************************************** * File Name: m.cpp * Au

  • PHP生成图表pChart入门教程 2013-02-07

    pChart是一个开源的图表生成库,主要涉及3个Class:pChart.class, pData.class, pCache.class,可生成20多种简单或复杂的图表,支持PNG,JPG,GIF通用图片格式。数据源可以来自于Database,CSV,当然也可以手写。使用该程序PHP需要开启GD服务,先来看看pChart的工作流程: 主要分为三步: * 读取用于生成图表数据(数据库、文件) * 设计图表样式(圆角、底色等) * 制作标签、题目、图例并生成图表 下面看一个简单的柱状图表: 代码如

  • 概率dp HDU 3853 2013-08-25

    H - LOOPS Time Limit:5000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Status Practice HDU 3853 Appoint description: System Crawler (2014-10-22) Description Akemi Homura is a Mahou Shoujo (Puella Magi/Magical Girl). Homura wants to

  • 无法启动此程序,因为计算机丢失php_mbstring.dll 2013-12-01

    本文章来给大家介绍关于无法启动此程序,因为计算机丢失php_mbstring.dll的解决办法,希望此方法对各位同学有所帮助。 在使用命令行创建Zend FrameWork项目的时候,计算机提醒“无法启动此程序,因为计算机丢失php_mbstring.dll。尝试重新安装该程序以解决问题。”解决这个问题的方法是: sublime text2 保存php文件提示“无法启动此程序,因为计算机中丢失php_pdo.dll 尝试重新安装该程序以解决此问题” 请教大神这是什么原因 装的插件有 首先,你要确

Copyright (C) quwantang.com, All Rights Reserved.

趣玩堂 版权所有 京ICP备15002868号

processed in 0.049 (s). 11 q(s)