联合查询注入
SELECT id FROM users WHERE user_id='$id'
在通常输入的位置,我们进行修改输入以下参数,
?id=-1'union+select+1+--+
因为单引号,闭合了前面的单引号,拼接后SQL查询语句就变成了如下
SELECT id FROM users WHERE user_id='-1'union select 1 --'
服务器对于加好进行了转义,在用户查询页面输出了不充分查询内容。在select语句后面,可以查询的内容很多,获取很多信息。通常需要染过一些特定字符。
报错注入
updatexml()函数
UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。
第三个参数:new_value,String格式,替换查找到的符合条件的数据 。
例子
select name from user where id=1 and updatexml(1,concat('~',(select database()),'~'),3);
因为 updatexml的 第一个和第三个参数不满足 参数要求格式,导致concat 后括号的内容以报错形式展示出来。
不可回显的注入
通常是因开发者将报错信息屏蔽或者正确与否存在同样的回显导致的,有布尔盲注和基于时间盲注两种
布尔盲注通常使用有些判断真假的语句来进行判定。通常在查询语句后面 添加 and 1=1和 and 1=2 。 因为 1=1 不影响运行,但是1=2为假,没有正常的回显
常用函数
截取函数
ubstr() 函数是字符串截取函数,在盲注中我们一般逐位获取数据,这时候就需要使用subtr函数按位截取。使用方法∶substr(str,start,length)。这里的str为被截取的字符串,start为开始截取的位置,length为截substr() 取的长度。在盲注时,我们一般只截取一位,如substruser(user(),1),这样可以从user函数返回数据的第一位开始的偏移位置截取一位,之后我们只要修改位置参数即可获取其他的数据
left()函数 是左截取函数,lef的用法为lef(sr,length)。这里的str是被截取的字符串,length为被截取的长度。在育注中可以使用len(user(),1)来左截取一位字符。但是,如果是lef(user(),2),则会将user()的前两位都截取出来,这样的话,我们需要在匹配输出的字符串之前增加前缀,把之前几次的结果添加到这次的结果之前。
right()函数 是右截取函数。使用方法与left函数类似
转换函数
ascii()函数 的作用是将字符串转换为ASCII码.使用中通常与substr函数相结合,如 asci(substr(user(),1,1),这样可以获得user()的第一位字符的 ASCII码
Hex()函数 可以将字符串的值转换为十六进制的值
f()函数 是盲注中经常使用的函数,if函数的作用与1=1和1=2的原理类似。如果我们要盲注的对象为假,则可以通过if的返回结果对页面进行控制。使用方法为if(cond,Ture_result,False_resut)其中,cond为判断条件,Ture_result为真时的返回结果,False_result为假时的返回结果。
时间盲注:
时间盲注是当服务器拼接了我们注入的sql语句后,无论正确与否都会显示同样的回显。错误信息被过滤,可以通过页面响应时间进行按位判断数据。