freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

SQL注入系列篇之union联合注入
第59号实验室 2023-04-27 11:57:58 204621
所属地 浙江省

一:union注入概念

我们知道,SQL语句的union联合查询常用格式如下

select 1,2,3 from table_name1 union select 4,5,6 from table_name2;

而在注入过程中,我们把union select 4,5,6 from table_name2部分称作是union注入部分,它的主要特点是通过union和前面一条SQL语句拼接,并构造其列数与前面的SQL语句列数相同,如1,2,3==4,5,6均为3列。我们把这种注入方式称为union注入


二:union注入利用流程

这里我用DVWA靶机环境的SQL Injection部分做演示。输入1 发送正常请求得到返回值

1. 判断注入点类型

在本篇文章我们重点放在构造union注入部分,探测注入点类型这里就简单过一下。依次输入3-2;1 and 1=1; 1” and “1”=”1;1’ and ‘1’=’1; 查看回显页面可知,该输入点存在单引号的字符型注入。可根据1’ and ‘1’=’1;1’ and ‘1’=’2 的输入结果判断

1' and '1'='1

1' and '1'='2

2. 判断后台SQL的列数

在概念部分我们知道union注入的关键点之一就是要判断原SQL的列数,这里我们可以通过order by n #来判断。n 表示列数,#表示注释,用于注释点order by n后面部分的SQL。依次输入1’ order by 5#;1’ order by 3#;1’ order by 2#

1' order by 5#1' order by 2#

在1’ order by 5#时,由于原SQL列数少于5,所以报错,在不断减小n的值之后,直到n=2时不再报错,此时可以判断原SQL的列数为2

3. union注入探测

首先构造输入,使输入能正确拼接在后台原始SQL中。输入 1’ union select 1,2 #

1' union select 1,2 #

1’ 部分表示与原始SQL的单引号拼接成完整字符
union 部分表示与原始SQL语句拼接
select 1,2 部分是SQL注入攻击者可以控制写的SQL,其中一定要保持只有2列
# 部分注释掉原始SQL的后半部分
执行成功后,我们可以在select 1,2部分进行变形,如select user(),database()。即在输入点输入 1’ union select user(),database()#。得到用户名和数据库名

1' union select user(),database()#

接下来我们可以尝试获取所有表名,列名,表中数据等等。以获取表名为例,在输入点输入1’ union select group_concat(table_name),database() from information_schema.tables where table_schema = database() #

1' union select group_concat(table_name),database() from information_schema.tables where table_schema = database() #

通过这条语句我们得到了当前数据库名dvwa下的所有表名,含有guestbook;users两个表。只要适当修改SQL就可获取表的数据


三:后台SQL及拼接后的原型

从dvwa后台可知,处理该请求的后台语句如下

后台SQL为”SELECT first_name, last_name FROM users WHERE user_id = ‘$id’;” ,将用户输入$id直接拼接在原始SQL中,所以我们构造的部分输入到数据库中执行时的完整SQL如下


四:总结

union注入攻击,通过union或union all连接,将自己写的SQL拼接到原始SQL中,从而达到执行任意SQL语句的效果。

# SQL注入 # web安全 # 漏洞分析 # 漏洞复现
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 第59号实验室 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
第59号实验室 LV.4
这家伙太懒了,还未填写个人描述!
  • 16 文章数
  • 16 关注者
XSS跨站脚本攻击剖析与防御
2023-07-28
报错注入的原理分析
2023-07-25
基于时间的盲注
2023-07-19
文章目录