SQL注入--盲注及报错注入
盲注查询
盲注其实就是没有回显,不能直观地得到结果来调整注入数据,只能通过其他方式来得到是否注入成功,主要是利用了一些数据库内置函数来达到的
布尔盲注
布尔很明显Ture跟Fales,也就是说它只会根据你的注入信息返回Ture跟Fales
其实登录处的注入就是布尔型的,万能密码就是构造一个永真的查询,比如下面的
select user from test where passwd=‘{injuct}’; #构造永真,即令where的条件用于为真 select user from test where passwd=‘aa‘or’1’=‘1’; #注入的数据是aa‘or’1’=‘1
密码输入无论是否正确,查询都成立。
布尔盲注其实就是利用了这种,我们什么时候需要采用这种呢
1)当没有数据输出点时,我们没有办法直观的判断注入的sql执行情况,
2)有正确或者错误的两种返回,比如查询正确返回一个页面,失败返回另一个页面,但是没有数据
时间盲注
界面返回值只有一种,true 无论输入任何值 返回情况都会按正常的来处理。加入特定的时间函数,通过查看web页面返回的时间差来判断注入的语句是否正确。
利用的内置函数
sleep(n):将程序挂起一段时间 n为n秒 if(expr1,expr2,expr3):判断语句 如果第一个语句正确就执行第二个语句如果错误执行第三个语句
注入的语句
select user from test where passwd=‘aa‘and (if(ascii(substr(database(),1,1))>100,sleep(10),null)); #注入的数据是aa‘and (if(ascii(substr(database(),1,1))>100,sleep(10),null));--+
我们什么时候需要采用这种呢
1)当没有数据输出点时,我们没有办法直观的判断注入的sql执行情况,
2)无论查询结果都返回同一个数据,无法判断SQL语句执行情况
基于错误查询
有如下报错注入方法
#报错注入floor (select 1 from (select count(*),concat((payload[]),floor(rand()*2))a from information_schema.columns group by a)b)limit 0,1 #报错注入extractvalue select extractvalue(1,concat(0x5c,([payload]))) #报错注入updatexml select 1=(updatexml(1,concat(0x3a,([payload])),1))
floor报错注入
floot是区镇函数,返回小于或等于 x 的最大整数
上面floor报错例子中floor中传入的是一个rand函数(返回 0 到 1 的随机数)。
floor报错注入主要利用的group by的机制,下面先来了解一下原理:
group by key的原理是循环读取数据的每一行,将结果保存于临时表中。读取每一行的key时,如果key存在于临时表中,则不在临时表中更新临时表中的数据;如果该key不存在于临时表中,则在临时表中插入key所在行的数据。group by floor(random(0)2)出错的原因是key是个随机数,检测临时表中key是否存在时计算了一下floor(random(0)2)可能为0,如果此时临时表只有key为1的行不存在key为0的行,那么数据库要将该条记录插入临时表,由于是随机数,插时又要计算一下随机值,此时 floor(random(0)*2)结果可能为1,就会导致插入时冲突而报错。即检测时和插入时两次计算了随机数的值不一致,导致插入时与原本已存在的产生冲突的错误。
主要检测时和插入时两次计算的所以输不一致就会报错。
extractvalue报错注入
ExtractValue(xml_frag, xpath_expr)
ExtractValue()
接受两个字符串参数,
一个XML标记片段 xml_frag
一个XPath表达式 xpath_expr(也称为 定位器);
第一个参数可以传入目标xml文档,第二个参数是用Xpath路径法表示的查找路径
原理
如果Xpath格式语法书写错误的话,就会报错。这里就是利用这个特性来获得我们想要知道的内容。
updatexml报错注入
首先了解下updatexml()函数
UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc 第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。 第三个参数:new_value,String格式,替换查找到的符合条件的数据 函数作用:改变文档中符合条件的节点的值
原理
如果XPath_string的值不符合xpath的语法格式则会报错,报错信息会提示这个数据错误
所以我们就在这个参数里注入我们的返回数据结果