一、SQL盲注概述
1.如果数据库运行返回结果时只反馈对错不会返回数据库中的信息 此时可以采用逻辑判断是否正确的盲注来获取信息。
2.盲注是不能通过直接显示的途径来获取数据库数据的方法。
在盲注中,攻击者根据其返回页面的不同来判断信息(可能是页面内容的不同,也可以是响应时间不同,一般分为三类)
盲注可以分为三类:
原理:
盲注查询是不需要返回结果的,仅判断语句是否正常执行即可,所以其返回可以看到一个布尔值,正常显示为true,报错或者是其他不正常显示为False
查询语句:
SELECT userid FROM nember WHERE u_name=$name AND u_pass=$pass
注入语句
name=-1' and(select mid(u_name,1,1)from member where userid = 1)='a'
原理:
某些查询不需要返回结果的,仅判断查询语句是否正确执行即可,可以使用sleep来进行时间盲注,取页面执行时间(结束时间-开始时间)来判断sleep函数是否正常执行,所以其是否正常执行可以看到一个布尔值,正常为True 报错False.
查询语句
SELECT userid FROM member WHERE u_name=$name AND u_pass=$pass;
注入语句
name=1' and (select mid(u_name,1,1) from member where userid=1)='a' and(select sleep3))
MySQL时间盲注几种延迟方法:
get_lock函数() 需要使用 mysql_pconnect函数来连接数据库。
在一个session中可以先锁定一个变量例如:select get_lock(‘do9gy’,1)。
然后通过另一个session再次执行get_lock(‘do9gy’,5)此时会产生5秒的延迟,其效果类似于sleep(5)。
1、二分法
返回正常说明长度小于10
and exists(select * from admin where id=1 and len(name)< 10)
返回正常说明长度大于5
and exists(select * from admin where id=1 and len(name)> 5)
返回正常说明密码第一个字符是应用('0'='48','a'='65','A‘=97)
and exists (select * from admin where id=1 and mid(password,1,1)>'a')
mid() 截取
mid(column_name,start,length)
rand() 产生一个随机函数
floor() 向下取整的函数
floor(rand(0)*2) 返回0或者1
floor(rand(0)*2) 返回0或者1
创建一个table
insert into table value(1,‘a’,‘b’) select floor(rand(0)*2) from tbale
1 .布尔型
(1)left(a,b)函数
(2)substr() 或 substring()函数
SBUSTR(str,pos)开始的位置,一直截取到最后。
SELECT SUBSTRING(‘chinese’,-3); //倒数第三个字符之后的子字符串-ese
(3)ord() mid()函数
(4)cast() 和 convert()函数
cast() convert() 函数可用来获取一个类型的值,并生产另一个类型的值。
> 可转换的类型 二进制,通带binary前缀的效果:BINARY 字符型,
> 可带参数:char()
> 日期:DATE
> 时间:time
> 日期时间型:datetime
> 浮点型:decimal
> 整数:signen
> 无符号整数:unsignen
(5)ifnull()函数
(6)sleep()或benchmark()
通过执行select sleep(n)可以让此语句执行n秒
条件:指定条件的记录存在时才会停止指定的秒数
列如:查询条件为name='pig’结果表明记录不存在,执行结果为0
(7).基于时间的盲注在使用延迟函数上可以有两个选择:
benchmark(count,expr)函数
sleep(time)函数
前者通过将expr语句执行 count次来到达延迟的目的,后者是直接延迟time时间
benchmark是一个内置函数,其作用是来测试一写函数的执行速度,benchmark()其中有两个参数,
第一个是执行次数,另一个是要执行的函数或者表达式。
3.Xpath类型函数(mysql version >= 5.1.5)
(1)updatexml() 函数功能:改变文档中符合条件的节点的值。
Updatexml(xml_documnet,XPath_string,new_value);
第一个参数:XML_document是string格式,为XML文档对象的名称
第二个参数:XPath_string(Xpath格式的字符串)
第三个参数:new_value,string格式,替换查找到的符合条件的数据
超过长度可以配合substr()
(2)extractvalue() 函数功能:对XML文档进行查询的函数,其实就是相当于HTML文件中标签查找元素。
语法:extractvalue(目标XML文件,XML路径)
第二个参数 xml中位置是可以操作的地方,xml文档中查找字符位置是用 /xxx/xxx/xxx…
这种格式,如果写入其他格式,就会报错,并且会返回写入的非法格式内容,而这个非法内容就是号想要查询的内容