SQL注入总结

一、万能密码:

什么是万能密码?

  用户进行用户名和密码验证时,网站需要查询数据库。查询数据库就是执行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

 

posted @ 2024-08-31 20:37  Heck1ng  阅读(34)  评论(0)    收藏  举报