【业务安全-04】万能用户名及万能密码实验

1 实验介绍

1.1 实验目的

由于网页服务端对代码的过滤不够严谨,可能会存在万能用户名或万能密码绕过的风险。
加深对网页代码和SQL代码的理解。

1.2 实验环境

实验靶机——win2008虚拟机:

<?php
include "../inc/dblink.inc.php"//将数据库连接的文件包含到此文件中
?>
<html>
<head>
    <meta charset="utf-8">
    <title>  登录----今日论坛</title>

</head>
<body>
    <h1>今日论坛BBS</h1>
    <?php
    if(isset($_POST['userSubmit'])){
        if($_POST['vcode']==$_COOKIE['vcode']){
            $userName=$_POST['userName'];
            $userPass=$_POST['userPass'];
            $sql="select * from users where name='".$userName."' && password='".md5($userPass)."'";
            if($results=mysqli_query($link,$sql)){
                if(mysqli_num_rows($results)>0){
                    setcookie('name',$userName,time()+3600*24, "/PHP/jrltbbs");
                    //注意cookie的路径,不同路径的cookie认为是两条cookie
                    echo "登录成功,返回<a href='../index.php'>首页</a>或<a href='./index.php'>个人中心</a>";
                }else{
                    echo "用户名或密码错误,<a href='./login.php'>请重新登录</a>";
                }
            }else{
                die("sql语句有误");
            }

        }else{
            echo "验证码错误,<a href='./login.php'>请重新登录</a>";
        }
    }else{
        $html=<<<HTML
       <form 
        method="post">
        用户名:<input type="text" name="userName"><br/>
        密码:<input type="password" name="userPass"><br/>
        验证码:<input type="text" name="vcode"> 
        <iframe src= "./vcode.php" width="100" height=30 frameboder="0"></iframe><br>
        <input type="submit" name="userSubmit"  value="登录">
    </form>
HTML;
        echo $html;
    }
    ?>
    <hr/>
</body>
</html>

<?php
mysqli_close($link);
?>

根据上述sql语句,可初步分析,关键变量是name,而不是password(无论输入啥,都会进行md5加密,无法进行Sql语句的拼接)

2 实验

2.1 实验分析

(1)上述代码第8行用于在数据库中检验客户端输入账号密码是否存在,而能否登录成功关键在于第10行 if 语句判断条件是否为真,也就是说只要构造的用户名或密码能让SQL语句能成功查询并返回结果,就能实现登录。
(2)由于SQL语句采用的是单引号闭合的方式,因此所构造的语句需要注意屏蔽前后的单引号.

2.2 实验过程

(1)输入网址http://172.16.1.1/PHP/jrltbbs/member/login.php进入网站的登录页面
在这里插入图片描述

(2)在登录界面输入用户名aaa' or 1=1#,密码随意,如下,点击登录。
在这里插入图片描述

(3)可以看到成功登录。
在这里插入图片描述
(4)点击个人中心,可以看到目前登录的账户是数据库中注册的第一个账号。
在这里插入图片描述
在这里插入图片描述

2.3 实验结果总结—万能用户名及万能密码

采用不同用户名及密码的组合进行实验结果如下。其中表中的万能用户名字母(如aaa和a),要注意用户是数据库中存在的还是不存在的,会导致结果不一样。

用户名密码结果分析
aaa’ or 1=1#随意成功采用单引号屏蔽变量前的单引号,采用#注释掉变量后续语句
aaa’ or ‘1’='1随意失败因为and的优先级比or的优先级高,语句先执行’1’=‘1’ and password = '随意’语句得到false,再执行name = ‘aaa’ or false,结果还是false,所以SQL语句无法查询到内容,登录失败.
a’ or ‘1’='1随意成功与上一组合不同的是,此处a是刚好碰到数据库中有该用户名,所以or语句执行成功,适合用于爆破特定用户名
a’#随意成功此处a是刚好碰到数据库中有该用户名,所以执行成功,适合用于爆破特定用户名
随意aaa’ or 1=1#失败由于密码字段在代码中被MD5编码过,无法实现语句构造的功能
随意aaa’ or ‘1’=‘1’失败同上

注意:当后台代码对输入参数进行过滤转换时,需要注意思考之前学过的各种绕过技巧。

3 总结

(1)加深理解SQL语句构造与绕过;
(2)掌握万能用户名与密码检测的方法。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值