SQL注入之简单的联合查询实践
2022/3/20 19:31:08
本文主要是介绍SQL注入之简单的联合查询实践,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
联合查询注入
1.注入前提
页面中有显示位
2.前置知识
union 操作符
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。
说明:UNION 会去重 UNION ALL 不去重
select 的一些特性
1.select 之后可以接一串数字 如 1,2,3,abc 等等这些字符串 也不一定从小到大到, 也可以是重复的,想获取多少列就写几个
2.select语句在指明要查询的内容属性(如select id)后,要加from指明是从哪个数据库表中获得数据,在数据库环境中我们一般会先写一句use xxxdatabase,之后写select from语句直接加当前数据库中的表名就可以了。如果我们没有声明使用哪个数据库,也可以直接写 select xxxx from security.users(假设要从security数据库的users表中获取数据)。而select直接加数字串时,可以不写后面的表名,那么它输出的内容就是我们select后的数字,这时我们写的一串数字就是一个数组,这时select实际上没有向任何一个数据库查询数据,即查询命令不指向任何数据库的表。返回值就是我们输入的这个数组,这时它是个1行n列的表,表的属性名和值都是我们输入的数组
演示如下
3.操作过程
当我们通过 order by 判断了字段的个数,下一步我们就可以使用联合查询了。前面已经提到 联合查询 需要 两边的字段个数保持一致的,以下面的数据库为例,联合查询时可以在 union select 后面随便跟 3个用逗号隔开的字符或数字。我们现在需要判断的是,这个库中的哪些字段会回显到页面上。
下面是一个演示案例:
这是数据库中的信息。
这里直接在php中模拟注入吧。
第一次的查询语句为
@$sql = 'select * from tset where id=1';
页面回显情况:
现在使用第二个查询语句
'select * from tset where id=1 union select 1,2,3';
页面回显情况:
这里就比较异或 ?? 不应该啊 回显没有变?
在数据库中直接查询 可以看到 这里会查询到两个结果,但页面为啥就显示一个呢?
后来查了下源代码中
mysqli_fetch_array()函数
意思是只取一行结果,那后面的当然不会显示出来了
所以为了不必要的麻烦 一般会将 union 前面的查询结果为空,那么就可以输出 union 后的信息了。
这里把 sql2的语句改为 1 and 1=2 1=2是一个恒假的式子,所以前面的不会执行
再次查看页面回显 可以看到 回显已经改变了
接下将 回显位置改变为查询语句就可以了。这里不再演示。
参考博客:
SELECT 1,2,3...的含义及其在SQL注入中的用法_BUAA小细腿的博客-CSDN博客
这篇关于SQL注入之简单的联合查询实践的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-09必试!帮 J 人团队解决物流错发漏发的软件神器!
- 2025-01-09不容小觑!助力 J 人物流客服安抚情绪的软件!
- 2025-01-09为什么医疗团队协作离不开智能文档工具?
- 2025-01-09惊叹:J 人团队用啥软件让物流服务快又准?
- 2025-01-09如何利用数据分析工具优化项目资源分配?4种工具推荐
- 2025-01-09多学科协作难?这款文档工具可以帮你省心省力
- 2025-01-09团队中的技术项目经理TPM:工作内容与资源优化策略
- 2025-01-09JIT生产管理法:优化流程,提升竞争力的秘诀
- 2025-01-092024全球互联网流量分析报告
- 2025-01-09如何提升学校行政管理中的进度追踪效率?4个实用策略和3款工具推荐