登陆(用户名不存在)
登陆验证通常有两种方式:
- 直接对用户输入的账号名和密码进行查询------提示用户名或密码错误
- 针对用户输入的账号名进行查询对应的密码,再和用户输入的密码做比较------用户名错误时会提示用户名不存在
这里讨论第二种情况,验证代码逻辑可能如下:
select password from xx where username=xx;
if(password==pass)
then login
因此,可以使用如下联合查询方式将自定义字符注入password参数(令username为False):
再在密码框输入相应的密码即可绕过登陆。
堆叠注入–修改表名
强网杯2019随便注为例,环境在XCTF攻防世界supersqli。
过滤了大部分注入所需函数,尝试堆叠注入,通过互换表名,增添一个查询字段(猜测正常查询后台代码为where id=x
),通过正常查询获得flag。
payload:
-1';rename table words to word;rename table `1919810931114514` to words;alter table words add id int default 1%23