0x00 盲注
盲注是不能通过直接显示的途径来获取数据库数据的方法,在盲注中,攻击者根据其返回页面的不同来判断信息。盲注一般可分为三类:Booleanbase、Timebase、Errorbase。
接下来介绍一些 sql 盲注中常用的函数。
0x01 limit()
limit()函数的作用是限制由 SELECT 语句返回的数据数量,用法是
SELECT column1, column2, columnN
FROM table_name
LIMIT [no of rows]
select * from user limit 2,1; //从第三行开始提取一行
其中各参数意义如下:
- column : 必要参数,要查询的字段名,可以同时查询多个。
- table_name : 必要参数,要查询的表名。
- no of rows : limit 之后的第一个数字代表行数(从 0 开始算)后面数字代表从这行要返回的行数。
和 offset 同时用时用法如下
SELECT column1, column2, columnN
FROM table_name
LIMIT [no of rows] OFFSET [row num]。
select * from user limit 1 offset 2 //从第三行开始提取一行
其中各参数意义如下:
- no of rows : 取到的行数。
- row num : 起始位置(从 0 开始算)
0x02 mid()
mid()函数的作用是截取字符串的一部分,用法是
mid(column_name,start[,length])
其中各参数的意义如下:
- column_name : 必要参数,要提取字符的字段。
- start : 必要参数,规定提取的起始位置,从 1 开始。
- length : 可选参数,要返回的字符长度,如果省略会返回剩余的全部文本。
如:
mid(database(),1,1)
返回数据库名的第一位。
mid(database(),1,1)>'a'
返回数据库名的第一位并与 a 的 ascii 作比较。
mid((SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE table_schema=0x76657374 LIMIT 0,1),1,1)
查找 test 数据库的第一个表名并提取表名的第一位。
0x03 substr()、substring()
substr()、substring()函数的作用也是截取字符串,用法同 mid()
substring(string, start, length)
substr(string, start, length)
其中各参数意义如下:
string : 必要参数,要提取字符的字段。
start : 必要参数,规定提取的起始位置,从1开始。
length : 可选参数,要返回的字符长度,如果省略会返回剩余的全部文本。
substr(DATABASE(),2,1)>'a'
返回数据库名的第二位并与 a 的 ascii 作比较。
substr((SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE table_schema=0x76657374 LIMIT 0,1),1,1)>'a'
查找 test 数据库的第一个表名并提取表名的第一位,然后有 a 的 ascii 作比较。
0x04 left()
left()函数的作用是得到字符串左部开始指定个数的字符。
left(string,n)
其中各参数意义如下:
string : 必要参数,要截取的字符串。
n : 必要参数,规定截取的长度,从1开始。
left(database(),1)>'a'
查看数据库名的第一位并和 a 的 ascii 作比较。
0x05 ord()
ord()函数的作用是返回字符串中第一个字符的 ASCII 值。
ord(string)
其中各参数意义如下:
string : 必要参数,要获取的字符串。
ord(mid(user(),1,1))=114
检测 user()的第一个字符是否等于 114,即是否等于 r,一般用来判断是否是 root 权限。
0x06 sleep()
sleep()函数的作用是让代码执行延迟若干秒。
sleep(seconds)
其中各参数意义如下:
seconds : 必要参数,延迟的秒数。
if(ascii(substr(database(),1,1))>'a',1,sleep(5))#
检测数据库的第一个字符的 ascii 和 a 比较,如果浏览器直接显示,说明比 a 大,如果浏览器五秒后才显示,说明比 a 小。
0x07 benchmark()
benchmark()函数的作用是重复执行指令。
benchmark(count,expr)
其中各参数意义如下:
count : 必要参数,重复的次数。
expr : 必要参数,执行的语句。
0x08 grunp_concat()
grunp_concat()函数的作用是连接字段字符串。
group_concat([DISTINCT] name [Order BY ASC/DESC 排序字段] [Separator '分隔符'])
其中各参数意义如下:
name : 要连接的字段
substr((select group_concat(schema_name) from information_schema.schemata limit 0,1),1,1)=105
0x09 总结
盲注是 sql 注入中十分常用的手段,而且盲注很多时候需要写脚本来实现,熟悉这些函数,结合前面的绕过方法,会让自己的脚本更加灵活。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于