作者:萍聚20121018 | 来源:互联网 | 2023-06-02 10:16
盲注的概念:
1.何为盲注:盲注就是在SQL注入过程中,找到注入点后,执行SQL语句后,选择的数据或者错误信息不能回显到前端页面。
需要利用一些方法进行判断或则猜测,这个过程称之为盲注。
2.盲注的分类:
1)基于报错显示的盲注
2)基于布尔判断的盲注
3)基于时间延迟的盲注
盲注常用的SQL函数:
1.substr(string,start,length)
功能:截取字符串功能
返回值:为截取后的字符串
参数:string为操作字符串,start为开始位置,length为截取长度。
举例1:
$ret = substr("hello kali",2,4);
ret = "ello";
举例2:
substr(database(),1,1)>'a' //判断数据库名第一位是否大于a;再查看其他位进行判断。
2.mid(column_name,start,length)
功能:截取字符串功能(和substr功能和参数一样)
返回值:为截取后的字符串
参数:column_name为操作字符串,start为开始位置,length为截取长度。
举例1:
$ret = mid("hello kali",2,4);
ret = "ello";
举例2:
mid(database(),1,1)>'a' //判断数据库名第一位是否大于a;再查看其他位进行判断。
3.left(string,n)
功能:返回字符串string最左边的n个字符串
返回值:string最左边的n个字符串。
参数:string为操作字符串,n为开始位置,length为截取长度。
举例1:
$ret = left("redhat",3);
ret = "red"
举例2:
left(database(),2)='sa' //判断数据库名前2个字符是否为sa;再查看其他位进行判断。
4.right(string,n)
功能:返回字符串string最右边的n个字符串。
返回值:string最右边的n个字符串。
参数:string为操作字符串,n为开始位置,length为截取长度。
举例1:
$ret = right("redhat",3);
ret = "hat";
举例2:
right(database(),1)>'a' //判断数据库名最后一个字符是否大于a;再查看其他位进行判断。
5.ord(char)
功能:char为字符,用于返回字符的ascii码,有时候服务器会对单引号进行转义,使用ASCII码就不用使用单引号参数。
参数:char为操作
返回值:返回字符char的ascii码
举例1:
$ret = char('a')
ret = 97;
举例2:
ord(mid(database(),1,1))>114 //意为检测database()的第一位ASCII码是否大于114,也就是'r'。
6.length(string)
功能:截取字符串的长度
参数:string为操作字符串
返回值:返回字符串string的长度
举例1:
$ret = length("hello");
ret = 5;
举例2:
length(database())>5 //判断数据库名长度大于5
7.cast(expression as type)
功能:将任何类型的值转换为具有指定类型的值
参数:sxpression为操作字符串,type为转化类型
返回值:返回的是转化后的值
举例1:
$ret = cast('12' as int);
ret = 12;
cast函数通常和mid和ord函数一起配合使用
8.ifnull(str1,str2)
功能:根据第一个参数是否为null返回具体的值,ifnull里有两个数,如果第一个不是null,返回str1,如果str1=null,返回str2
参数:str1和str2为操作字符串
返回值:根据第一个参数是否为null返回具体的值
举例1:
$ret1 = ifnull("hello","nihao");
$ret2 = ifnull("null","nihao");
ret1 = "hello";
ret2 = "nihao";
9.ascii(str)
功能:str为字符或者字符串,用于返回字符或字符串最左边的ascii码,有时候服务器会对单引号进行转义,使用ASCII码就不用使用单引号参数;(功能和ord一样)
参数:char为操作
返回值:返回字符char的ascii码
举例1:
$ret = ascii('a');
ret = 97;
举例2:
ascii(mid(database(),1,1))>114 //意为检测database()的第一位ASCII码是否大于114,也就是 'r'
什么是ascii码?
在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,每个人都可以约定自己的一套(这就叫编码),而大家如果要像互相通信而不造成混乱,那么大家就必须使用相同的编码规则; ASCII码使用指定的7位或8位二进制数组合来表示128或256种可能的字符,标准ASCII码也叫急促ASCII码,使用7位二进制数(剩下的1位二进制位0)来表示所有的大写和小写字母,数字0到9,标点符号,以及在美式英语中使用的特殊控制字符。
简单的介绍一下ASCII码,具体详解,可以查找相关的文章或视频。