• 万能密码注入解析


      无敌的我又回来了,今天这个文章是对后台万能密码or登陆的一个解析

      start my perform:

        Ok,先贴本地的代码

          

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4     <title>万能密码登陆</title>
     5     <meta charset="utf-8">
     6 </head>
     7 <body>
     8     <form action="" method="POST">
     9         <input type="hidden" name="hid" value="1">
    10         账号:<input type="text" name="username"><br>
    11         密码:<input type="password" name="password"><br>
    12         <input type="submit" value="登陆">
    13     </form>
    14     <?php
    15         if(isset($_POST['hid'])){
    16             $username = !empty($_POST['username'])?$_POST['username']:"";
    17             $password = !empty($_POST['password'])?$_POST['password']:"";
    18             if($username == "" || $password == ""){
    19                 ?>
    20                 <script type="text/javascript">
    21                     alert("账号或密码不能为空!!!");
    22                 </script>
    23                 <?php
    24                 exit();
    25             }
    26             mysql_connect("127.0.0.1","root","root");        //链接数据库
    27             mysql_select_db("sqli");                        //选择数据
    28             mysql_query("set names utf8");                    //设置字符集
    29             /*
    30                 创建数据表
    31                 create table admin(
    32                     id int primary key auto_increment,
    33                     username varchar(10),
    34                     password char(32)        -- 因为等下插入的密码是经过md5加密的,所以这里长度是32
    35                 )charset utf8;
    36                 admin 加密 21232f297a57a5a743894a0e4a801fc3
    37                 插入测试数据
    38                 insert into admin values(null,'admin','21232f297a57a5a743894a0e4a801fc3');
    39             */
    40             $password = md5($password);
    41             $sql = "select * from admin where username = '$username' and password = '$password'";
    42             mysql_query($sql);            //执行SQL语句
    43             if(mysql_affected_rows()>0){            //如果上一次执行的SQL语句影响的行号大于0,就继续执行
    44                 ?>
    45                 <script type="text/javascript">
    46                     alert("登陆成功");
    47                 </script>
    48                 <?php
    49             }else{
    50                 ?>
    51                 <script type="text/javascript">
    52                     alert("登陆失败");
    53                 </script>
    54                 <?php
    55             }        
    56     ?>
    57 </body>
    58 </html>
    View Code

        我们在数据库里的内容是admin admin(密码,是被加密的)

       账号密码正确弹框,不正确也弹框.

       测试一下:

        成功:

          

        失败:

          

        OK,我们在账号处输入' or 1=1 #  密码随便

          

        可以看到这个密码是可以登陆上去的,我们来看一下代入到SQL执行的语句

          首先,他代入进去的SQL语句是:select * from admin where username = '$username' and password = '$password'

          我们通过提交构成的语句:select * from admin where username = ' 'or 1=1 #'

          分析:

            我们提交了' or 1=1 #   前面的单引号闭合了sql中的单引号,然后or 1=1 #注释掉了后面的单引号

            简化语句:select * from admin where username = '' or 1=1,不管username是否等于空,or 1=1都是真,所以这条语句的返回也是true,构成了万能密码注入

        欢饮各位一起交流学习

                  ----学无止境

          

  • 相关阅读:
    PKU 学生的反馈 20091
    PKU 学生的反馈 2009 –2
    中国队有进步
    刚发现博客园又遇到了问题
    今日计划
    Delphi中使用多线程
    在老ASP中使用对象的对象生存期问题
    ASP与Javascript
    ASP & VBScript的错误处理
    对前一段时间学习网络和多线程编程的总结
  • 原文地址:https://www.cnblogs.com/Miracle-reproduction/p/7236265.html
Copyright © 2020-2023  润新知