SQL注入之堆叠查询注入学习笔记 一、什么是堆叠查询注入堆叠查询注入是SQL注入中比较特殊的一种类型。它的核心逻辑是在原有的SQL语句结束后使用分号;作为分隔符将多条SQL语句拼接在一起执行。 与之前学过的所有注入类型都不同堆叠查询注入的目标不再是“获取数据”而是“执行多条任意SQL语句”。堆叠查询注入的适用场景堆叠查询注入在以下场景中特别有效目标数据库支持多语句执行MySQL的mysqli扩展默认支持PDO默认不支持注入点位于SQL语句的末尾可以闭合后添加新语句攻击者希望执行数据操作增删改查或提权操作目标网站的数据库用户有较高的执行权限堆叠查询注入的核心要素堆叠查询注入需要满足以下几个条件注入点存在且能够正常闭合原有SQL语句数据库驱动支持多语句执行当前数据库用户有执行多条语句的权限攻击者能够获取到新语句执行后的结果或观察到执行效果堆叠查询注入与联合查询注入的本质区别联合查询注入和堆叠查询注入虽然都涉及多条SQL语句但它们的本质完全不同。联合查询注入的 UNION SELECT 是在一条 SELECT 语句内部将两个查询结果合并最终数据库只执行了一条 SELECT 语句。而堆叠查询注入是通过分号将多条完整的SQL语句串联数据库会依次执行每一条语句。两者的攻击目标和实现方式都有根本性的差异。二、堆叠查询注入的基本原理1 . 分号的作用在SQL中分号;是语句结束的标志。在支持多语句执行的数据库中多个以分号分隔的SQL语句可以依次执行。正常SQL语句SELECT*FROMusersWHEREid1堆叠查询注入后的SQL语句SELECT*FROMusersWHEREid1;DROPTABLEusers;当数据库执行这个语句时会先执行 SELECT 查询然后再执行 DROP TABLE 删除表操作。2 .堆叠查询注入的典型Payload查询数据id1;SELECT*FROMadmin插入数据id1;INSERTINTOadmin(username,password)VALUES(hacker,123456)修改数据id1;UPDATEadminSETpassword123456WHEREusernameadmin删除数据id1;DELETEFROMadminWHEREusernameadmin创建表id1;CREATETABLEtest(idINT,nameVARCHAR(100))删除表id1;DROPTABLEtest3 . 堆叠查询注入的信息获取方式堆叠查询注入的一个显著特点是后续语句的执行结果通常不会直接返回到页面上。如果执行的是 SELECT 语句查询结果可能不会显示如果执行的是 INSERT、UPDATE、DELETE、DROP 等操作只能通过观察页面变化或数据库变化来判断是否执行成功。获取执行结果的方法· 观察页面是否出现变化如数据被修改后的显示变化· 观察数据库中的数据是否被修改· 通过报错信息判断语句是否执行成功· 结合其他注入手法如联合查询、报错注入来读取执行结果在某些情况下如果堆叠查询注入配合文件操作可以将查询结果写入服务器上的文件中然后通过访问该文件来获取数据。三、不同数据库对堆叠查询注入的支持情况堆叠查询注入并非在所有数据库中都能使用不同数据库的支持程度差异很大。1 .MySQLMySQL的多语句执行取决于数据库驱动。使用 mysqli 扩展时默认支持多语句执行通过 mysqli_multi_query() 函数而使用 PDO 时默认不支持需要在连接时设置 PDO::MYSQL_ATTR_MULTI_STATEMENTS 为 true 才能启用。在实际的Web应用中如果开发者在代码中使用了 mysqli_multi_query() 或类似的函数并且没有对用户输入进行有效过滤就可能存在堆叠查询注入漏洞。2 .PostgreSQLPostgreSQL原生支持多语句执行使用分号分隔即可。PostgreSQL的堆叠查询注入能力非常强大支持执行系统命令通过 COPY 语句等高级操作。3 .SQL ServerSQL Server同样支持多语句执行。在SQL Server中堆叠查询注入通常与 xp_cmdshell 等扩展存储过程配合使用可以执行操作系统命令危害极大。4 .OracleOracle数据库对堆叠查询注入的支持较为特殊。Oracle默认不支持使用分号分隔多条语句执行但在某些特定条件下如使用PL/SQL块仍然可以实现类似的效果。四、堆叠查询注入的高级利用方式1 .时间盲注与堆叠查询注入的结合当堆叠查询注入无法直接获取数据时可以结合时间盲注技术来判断语句执行情况。id1;SELECTIF(11,SLEEP(5),0)2 .文件操作MySQL在MySQL中如果当前用户拥有 FILE 权限可以通过堆叠查询注入进行文件读写操作。读取服务器文件id1;SELECTLOAD_FILE(/etc/passwd)写入WebShellid1;SELECT?php eval($_POST[cmd]); ?INTOOUTFILE/var/www/html/shell.php3 .提权操作在某些情况下堆叠查询注入可以用来创建具有管理员权限的数据库用户或者修改现有用户的权限。创建新用户id1;CREATEUSERhackerlocalhostIDENTIFIEDBYpassword;GRANTALLPRIVILEGESON*.*TOhackerlocalhost五、堆叠查询注入的防御措施堆叠查询注入的防御思路与其他注入类型有所不同因为它的核心是利用了多语句执行的功能。最根本的防御措施是禁止多语句执行。 在数据库连接配置中不启用多语句执行功能或者直接使用不支持多语句执行的API如PDO默认配置可以从根本上杜绝堆叠查询注入。具体防御方案在PHP的PDO中不设置 PDO::MYSQL_ATTR_MULTI_STATEMENTS 为 true使用默认配置即可防御在Java的JDBC中使用 Statement 时禁用多语句执行或直接使用 PreparedStatement 进行参数化查询使用参数化查询PreparedStatement替代动态拼接SQL语句对用户输入进行严格过滤过滤分号等特殊字符应用最小权限原则数据库连接账号仅授予必要权限避免使用高权限账号

相关新闻

最新新闻

Docker容器中文乱码问题:从Locale配置到UTF-8支持的完整解决方案

Docker容器中文乱码问题:从Locale配置到UTF-8支持的完整解决方案

1. 问题缘起:当容器世界遇上中文字符最近在折腾一个需要处理中文数据的项目,环境是Docker容器。本来以为把应用打包进去就万事大吉,结果一运行,日志里全是问号“???”,从数据库读出来…

2026/8/13 10:49:30
新一版阳江铝telesto散热器深度测评:小机箱静音散热方案实战解析

新一版阳江铝telesto散热器深度测评:小机箱静音散热方案实战解析

都说铝te烂如石?no,那是你没玩过新一版阳江铝telesto测评! 最近在技术圈和硬件DIY社区,一个词反复被提及:“铝te”。如果你以为这又是哪个新出的AI框架或者编程语言,那可就错了。它指的是一种特定类型的铝…

2026/8/13 10:49:30
基于Hacker News API构建现代化前端阅读器:部署、功能与优化指南

基于Hacker News API构建现代化前端阅读器:部署、功能与优化指南

这次我们来看一个专门为 Hacker News 设计的阅读器项目。Hacker News(HN)作为全球知名的技术社区,其官方界面以极简和高效著称,但在阅读体验、内容筛选和个性化方面,仍有提升空间。这个开源项目正是为了解决这些问题而…

2026/8/13 10:49:30
RAG文档处理实战:深入解析Loader与Splitter的核心原理与调优技巧

RAG文档处理实战:深入解析Loader与Splitter的核心原理与调优技巧

1. 从一行代码到复杂系统:RAG文档处理的冰山一角“一行代码搞定文档加载和切分”,这大概是很多RAG(检索增强生成)框架在宣传时最吸引人的口号。无论是LangChain的RecursiveCharacterTextSplitter,还是LlamaIndex的Simp…

2026/8/13 10:49:30
Vue 3中keep-alive与路由缓存实践:解决列表页返回状态丢失问题

Vue 3中keep-alive与路由缓存实践:解决列表页返回状态丢失问题

1. 项目概述与核心痛点 在开发中后台管理系统或者内容型应用时,我们经常会遇到一个非常具体的用户体验问题:用户在一个列表页或详情页进行了复杂的筛选、翻页、滚动浏览等操作后,点击进入子页面查看详情或进行编辑。当用户完成操作&#xff0…

2026/8/13 10:49:30
Office Custom UI Editor:无需编程即可定制Office界面的完整指南

Office Custom UI Editor:无需编程即可定制Office界面的完整指南

Office Custom UI Editor:无需编程即可定制Office界面的完整指南 【免费下载链接】office-custom-ui-editor Standalone tool to edit custom UI part of Office open document file format 项目地址: https://gitcode.com/gh_mirrors/of/office-custom-ui-editor…

2026/8/13 10:44:30