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。

这个漏洞威力也很大,因为你控制了对方的数据库,如此灵活的条件,势必会引发更多花样的攻击手段。

这个漏洞给我的感受就是:“没有绝对的安全”。

【转载请注明出处】



时间: 2024-08-29 05:10:48

Drupal 7.31 SQL注入分析及POC的相关文章

[CVE-2014-3704]Drupal 7.31 SQL注入漏洞分析与复现

不是很新的漏洞,记录下自己的复现思路 漏洞影响: Drupal 7.31 Drupal是一个开源内容管理平台,为数百万个网站和应用程序提供支持. 它是由世界各地积极和多样化的社区建立,使用和支持的. 0x01漏洞复现 复现环境: 1) Apache2.4 2) Php 7.0 3) drupal 7.31 https://www.drupal.org/drupal-7.31-release-notes(点击下载) 环境打包在目录下安装即可 中间遇到的问题: 解决方法:关闭extersion=ph

Drupal 7.31 SQL注入漏洞利用具体解释及EXP

 有意迟几天放出来这篇文章以及程序,只是看样子Drupal的这个洞没有引起多少重视,所以我也没有必要按着不发了,只是说实话这个洞威力挺大的.当然.这也是Drupal本身没有意料到的. 0x00 首先.这个漏洞真的非常大.并且Drupal用的也比較多.应该能够扫出非常多漏洞主机,可是做批量可能会对对方站点造成非常大的损失.所以我也就仅仅是写个Exp.只是.这个洞好像不怎么被重视.这也是极为不合适. 0x01 关于漏洞的原理和POC在我的博客上已经有文章进行解释.这里仅仅是着重说一下利用过程.配

Drupal 7.31 SQL注入漏洞利用详解及EXP

 有意迟几天放出来这篇文章以及程序,不过看样子Drupal的这个洞没有引起多少重视,所以我也没有必要按着不发了,不过说实话这个洞威力挺大的,当然,这也是Drupal本身没有意料到的. 0x00 首先,这个漏洞真的很大,而且Drupal用的也比较多,应该可以扫出很多漏洞主机,但是做批量可能会对对方网站造成很大的损失,所以我也就只是写个Exp.不过,这个洞好像不怎么被重视,这也是极为不合适. 0x01 关于漏洞的原理和POC在我的博客上已经有文章进行解释,这里只是着重说一下利用过程.配合POC的

Discuz 5.x/6.x/7.x投票SQL注入分析

看乌云有人爆了这个漏洞:http://www.wooyun.org/bugs/wooyun-2014-071516感觉应该是editpost.inc.php里投票的漏洞.因为dz已经确定不会再修补7.x以前的漏洞了,所以直接贴细节吧 .问题出在 editpost.inc.php的281行,对用户提交的polloption数组直接解析出来带入SQL语句,因为默认只对数组值过滤,而不过滤键,所以会导致一个DELETE注入. ? 1 2 3 4 5 6 7 8 9 10 11 $pollarray['

DRUPAL-PSA-CORE-2014-005 && CVE-2014-3704 Drupal 7.31 SQL Injection Vulnerability /includes/database/database.inc Analysis

目录 1. 漏洞描述 2. 漏洞触发条件 3. 漏洞影响范围 4. 漏洞代码分析 5. 防御方法 6. 攻防思考 1. 漏洞描述 Use Drupal to build everything from personal blogs to enterprise applications. Thousands of add-on modules and designs let you build any site you can imagine. Join us!Drupal是使用PHP语言编写的开

动态分析小示例| 08CMS SQL 注入分析

i春秋作家:yanzm 0×00 背景 本周,拿到一个源码素材是08cms的,这个源码在官网中没有开源下载,需要进行购买,由某师傅提供的,审计的时候发现这个CMS数据传递比较复杂,使用静态分析的方式不好操作,刚好这周小三上位(换了新电脑),就直接安装下phpstorm+xdebug+xdebug-ext(火狐)进行动态分析,本篇主要是以SQL注入漏洞为例子,进行动态分析的演练,当然源码还有其他漏洞待挖掘,期待师傅们一起交流讨论. 0×01 审计过程 动态分析环境配置 动态分析组合:phpstor

java程序中sql注入分析及优化方案

先来看看百度百科的解释: 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句.比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到sql注入攻击. 1.java程序

PHP中 简单的SQL注入分析

SQL注入原理:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 以下介绍SQL注入方式: 首先建表如下: 1 create database sqltest charset utf8 2 3 create table test ( 4 id int,5 name varchar(10), 6 age tinyint unsigned7 )engine=myisam charset=utf8 插入数据如下 我们分成字段为数值类型和

Drupal 7.31 SQL Injection Exp

#-*- coding:utf-8 -*- import urllib2,sys import hashlib # Calculate a non-truncated Drupal 7 compatible password hash. # The consumer of these hashes must truncate correctly. class DrupalHash: def __init__(self, stored_hash, password): self.itoa64 =