0x00 题目
访问题目url
可以看到大部分关键字都被过滤了和注释,而且连单引号也被过滤了,这就影响到闭合问题。
0x01 分析
一般来说,绕过单引号过滤,可以尝试宽字节注入,但此处的编码并不是GBK、GB2312等多字节编码。这里也没有对传入的数据进行编码,因此需要另寻他法。
首先猜测此处的sql语句为
select * from users where user='xxx' and pwd='xxx';
可以通过转义user
参数后面的单引号来闭合,如下所示
sql
select * from users where user='xxx\' and pwd='xxx';
此时相当于user参数的值为xxx\' and pwd=
接着构造pwd
参数,由于=、like、<、>
被过滤了,可以使用正则匹配进行注入。如以某字符串开头^
,以某字符串结尾$
。
pwd=/**/||/**/pwd/**/regexp/**/......
完整注入语句为
user=x\&pwd=/**/%7C%7C/**/pwd/**/regexp/**/"^x";%00
可通过burp的intruder模块进行爆破。
最终得到admin的密码,但是admin
是被过滤了的。
在这道题中,有两用户分别为Admin
和Licia
,因此尝试使用另一个用户来登录,再次通过爆破来获取Licia
的密码,但是通过使用Licia
的账号密码进行登录时并没有成功获取到flag。
此时脑洞大开,尝试了使用Admin
的密码进行登录,最后获取到了flag。