Drupal 7.31 SQL注射分析POC
此漏洞昨日爆发 ,我们有时间去看看今天的代码。
于Drupal于,跑sql声明使用PDO型号,这是一般能够避免大部分的注射,由于使用占位符的sql语法语句是限制。
但是,这并不意味着绝对安全,。
在Drupal的user模块中,找到user.module:
$account = db_query("SELECT * FROM {users} WHERE name = :name AND status = 1", array(':name' => $form_state['values']['name']))->fetchObject();
这里的:name就是占位符,它的内容来源于后面的$form_state。
跟进这个db_query函数。看看是怎样处理表单数据的。
折腾完,找到了expandArguments函数,这个函数的作用就是用前面db_query的參数进行终于查询语句的获取,正是因为这个函数对$key值的处理不当导致了漏洞的产生。
POC:
name[0%20;update users set name%3d'owned',pass%3d'$S$DkIkdKLIvRK0iVHm99X7B/M8QC17E1Tp/kMOd1Ie8V/PgWjtAZld' where uid %3d 1;%23%20%20]=admin&name[0]=111111&pass=shit2&test2=test&form_build_id=&form_id=user_login_block&op=Log+in
POC中的name数组就是传到函数中的Array。然后使用expandArguments函数对其进行处理。
在处理的过程中。以这样的方式得到新的数组:
$new_keys[$key . '_' . $i] = $value;
最后获取query语句的时候。会用到这个$new_keys。
$query = preg_replace('#' . $key . '\b#', implode(', ', array_keys($new_keys)), $query);
那么问题就来了。假设能够控制这个$key,那么我们就能够构造出语句进行运行(注意:PDO模型能够多条运行语句)。
分析POC,对函数进行分析调试:
能够看到,expandArguments函数就是把传递进来的name一层一层分离。最后将key带入终于的sql语句生成过程。上图最后的query就是终于要运行的SQL语句,问题是PDO能够多条运行,所以update语句就会运行成功了。
归结于一句话:Drupal使用:name进行SQL语句拼接,expandArgument函数将:name变为:name0中,使用:name_$key0的方式完毕,这个$key是可控的,所以导致漏洞产生。
运行结果例如以下:
把我之前的admin用户给覆盖了。
POC中的密码是使用了drupal内置的一个生成脚本进行生成的,即scripts中的password-hash.sh。
这个漏洞威力也非常大,由于你控制了对方的数据库。如此灵活的条件。势必会引发很多其它花样的攻击手段。
这个漏洞给我的感受就是:“没有绝对的安全”。
【转载请注明出处】
版权声明:本文博主原创文章,博客,未经同意不得转载。
Drupal 7.31 SQL注射分析POC的更多相关文章
- [CVE-2014-3704]Drupal 7.31 SQL注入漏洞分析与复现
记录下自己的复现思路 漏洞影响: Drupal 7.31 Drupal是一个开源内容管理平台,为数百万个网站和应用程序提供支持. 0x01漏洞复现 复现环境: 1) Apache2.4 2) Php ...
- DRUPAL-PSA-CORE-2014-005 && CVE-2014-3704 Drupal 7.31 SQL Injection Vulnerability /includes/database/database.inc Analysis
目录 . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 Use Drupal to build everything from perso ...
- Drupal 7.31 SQL注入漏洞利用具体解释及EXP
有意迟几天放出来这篇文章以及程序,只是看样子Drupal的这个洞没有引起多少重视,所以我也没有必要按着不发了,只是说实话这个洞威力挺大的.当然.这也是Drupal本身没有意料到的. 0x00 首 ...
- Drupal 7.31 SQL Injection Exp
#-*- coding:utf-8 -*- import urllib2,sys import hashlib # Calculate a non-truncated Drupal 7 compa ...
- Drupal 7.31版本爆严重SQL注入漏洞
今早有国外安全研究人员在Twitter上曝出了Drupal 7.31版本的最新SQL注入漏洞,并给出了利用测试的EXP代码. 在本地搭建Drupal7.31的环境,经过测试,发现该利用代码可成功执行并 ...
- Zabbix的前台SQL注射漏洞利用
今年8月份Map在wooyun上发了个Zabbix某前台SQL注射漏洞 ,11月份才公开. 漏洞详情大约是这样的: 在zabbix前端存在一个SQL注射漏洞,由于zabbix前台可以在zabbix的s ...
- Mybatis解析动态sql原理分析
前言 废话不多说,直接进入文章. 我们在使用mybatis的时候,会在xml中编写sql语句. 比如这段动态sql代码: <update id="update" parame ...
- Spark SQL 源代码分析之 In-Memory Columnar Storage 之 in-memory query
/** Spark SQL源代码分析系列文章*/ 前面讲到了Spark SQL In-Memory Columnar Storage的存储结构是基于列存储的. 那么基于以上存储结构,我们查询cache ...
- Red Gate系列之七 SQL Search 1.1.6.1 Edition SQL查询分析工具使用教程
原文:Red Gate系列之七 SQL Search 1.1.6.1 Edition SQL查询分析工具使用教程 Red Gate系列之七 SQL Search 1.1.6.1 Edition SQL ...
随机推荐
- 2048 Puzzle游戏攻略
2048 Puzzle这是目前手机游戏的很火. 在地铁上经常看到的人玩这个游戏. 首先,简介2048 Puzzle游戏. 游戏界面是4X4广场格,每一方格可以放置在数字. 有四种移动数字的方法,向左. ...
- python K-means工具包初解
近期数据挖掘实验,写个K-means算法,写完也不是非常难,写的过程中想到python肯定有包,尽管师兄说不让用,只是自己也写完了,而用包的话,还不是非常熟,略微查找了下资料,学了下.另外,自己本身写 ...
- 使用MySQL Workbench建立数据库,建立新的表,向表中添加数据
使用MySQL Workbench建立数据库,建立新的表,向表中添加数据 初学数据库,记录一下所学的知识.我用的MySQL数据库,使用MySQL Workbench管理.下面简单介绍一下如何使用MyS ...
- 设置函数环境——setfenv(转)
当我们在全局环境中定义变量时经常会有命名冲突,尤其是在使用一些库的时候,变量声明可能会发生覆盖,这时候就需要一个非全局的环境来解决这问题.setfenv函数可以满足我们的需求. setfenv(f, ...
- Spark 1.0.0版本发布
前言 如今Spark终于迈出了里程碑一步,1.0.0标记的版本号出版物Spark1.0时代.1.0.0版本号不仅增加了非常多新特性.而且提供了更好的API支持.Spark SQL作为一个新的组件增加. ...
- 得到JAVA项目根文件夹
获得的相对路径 说明:相对路径(这并不说明什么时候相对谁)可以通过以下来获得(无论是一般java项目或web工程) String path = System.getProperty("use ...
- ATL 创COM物
我原来以前写dll创建过程,而直接使用LoadLibrary加载动态库. 但ATL提出了一个非常重要的特点是引入COM对象的概念. 首先. ATL active template library该活动 ...
- linux内存操作--ioremap和mmap学习笔记
最近做一些相关的视频输出,对于保留framebuffer内存使用情况不是很清楚,现在找了一些资料整理出,准备使用.if (希望看到使用) goto 用法: 对于一个系统来讲,会有非常多的外设,那 ...
- PKU A Simple Problem with Integers (段树更新间隔总和)
意甲冠军:一个典型的段树C,Q问题,有n的数量a[i] (1~n),C, a, b,c在[a,b]加c Q a b 求[a,b]的和. #include<cstdio> #include& ...
- Cocos2d-Java安装和配置跨平台游戏引擎以及相关的开发工具
假设认为博文图片不清晰.能够Ctrl+鼠标滚动缩放网页比例 Cocos2d-Java是什么? http://blog.csdn.net/touchsnow/article/details/387047 ...