数据包:
测试参数:username,测试payload:
‘
‘ or ‘1‘=‘1
‘ or ‘1‘=‘2
响应结果都未发生任何变化,借助sqlmap测试,结果一样:
尝试在or前面进行简单的fuzz,结果为:
发现‘ or 1=1 or ‘1‘=‘1可以直接登录系统,也就是说此处是存在sql注入的,构造payload,借助sqlmap检测
进一步分析,or 1=1 为true,说明后边or ‘1‘=‘1语句在数据库中执行结果为false,猜测也许在or ‘1‘=‘1后边还有其它未知的字符,尝试用burp测试了下,未找到。那既然这样,当时就想到直接后边and ‘1‘=‘1应该也行吧(无脑image),结果发现是错误的,查了下资料,and的优先级大于or,所以如果‘ or 1=1 and ‘1‘=‘1,会先执行 1=1 and ‘1‘=‘1 ,显然这个结果是false,然后or false,结果也是个false喽。
最后贴个sql运算符的优先级顺序图吧: