运算符优先级:
括号:()》 乘、除、求模运算符:*、/、% 》加减运算符:+、- ;》比较运算符:=、>、<、>=、<=、<>、!=、!>、!<> 》位运算符:^、&、|;》逻辑运算符:NOT;》逻辑运算符:AND;》逻辑运算符:OR。
DVWA low在这里插入图片描述
1、
$query = "SELECT * FROM `users` WHERE user = 'admin' OR '1' = '1' AND password = '$pass';";
sql语句中比较运算符的优先级要大于逻辑运算符的优先级
先判断’1’ = '1’结果为真
user = 'admin' OR 真 AND password = '$pass';";
sql语句中逻辑运算符and的优先级要大于or,所以语句首先判断
先判断真 AND password=’$pass’;结果为假
user='admin' OR 假
然后判断user = ‘admin’ OR 假结果为真
为真就完成了密码绕过
2、
$query = "SELECT * FROM `users` WHERE user = 'admin'#' AND password = '$pass';";
在sql语句中#表示注释当语句或字段后面的代码将不会被读取(短路)
前面的user='admin’成立,然后后面的password就被短路
此文章只不过是我自己遇到的问题没有任何其他的意思!
DWVA新手教程:https://www.freebuf.com/articles/web/116437.html
运算符优先级:
https://blog.csdn.net/xxlovemf/article/details/7438741?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param