Brute Force_low

<?php
/*isset函数在php中用来检测变量是否设置,该函数返回的是布尔类型的值,即true/false*/
if( isset( $_GET[ 'Login' ] ) ) {   
    // Get username
    $user = $_GET[ 'username' ];

    // Get password
    $pass = $_GET[ 'password' ];
    $pass = md5( $pass );

    // Check the database
    
    $query  = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";
    //SQL注入漏洞语句
    //$query  = "SELECT * FROM `users` WHERE user = '$user' 'or '1' ='1'# AND password = '$pass';";
    
    
    //is_object() 函数用于检测变量是否是一个对象。如果指定变量为对象,则返回 TRUE,否则返回 FALSE。
    //die() 函数输出一条消息,并退出当前脚本,
    //die(status)规定在退出脚本之前写入的消息或状态号。状态号不会被写入输出
    //如果 status 是字符串,则该函数会在退出前输出字符串。
    //如果 status 是整数,这个值会被用作退出状态。退出状态的值在 0 至 254 之间。退出状态 255 由 PHP 保留,不会被使用。状态 0 用于成功地终止程序。
    //mysqli_error(connection) 函数返回最近调用函数的最后一个错误描述。connection,必需。规定要使用的 MySQL 连接。
    //mysqli_connect_error() 函数返回上一次连接错误的错误描述。返回一个描述错误的字符串。如果没有错误发生则返回 NULL。
    $result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );
    /*********************************************************************************************
    mysqli_query------执行某个针对数据库的查询。针对其他成功的查询,将返回 TRUE。如果失败,则返回 FALSE。
    mysqli_query(connection,query,resultmode);
    connection:(必需。规定要使用的 MySQL 连接。)
    query:(必需,规定查询字符串。)
    
    resultmode(可选。一个常量。可以是下列值中的任意一个:
                MYSQLI_USE_RESULT(如果需要检索大量数据,请使用这个)
                MYSQLI_STORE_RESULT(默认))
    **************************************************************************************/
    

    if( $result && mysqli_num_rows( $result ) == 1 ) {
        //mysqli_num_rows(result) 函数返回结果集中行的数量。
        //result 必需。规定由 mysqli_query()、mysqli_store_result() 或 mysqli_use_result() 返回的结果集标识符。
        
        // Get users details 获取用户详细信息
        $row    = mysqli_fetch_assoc( $result );
        //mysqli_fetch_assoc(result) 函数从结果集中取得一行作为关联数组。
        //该函数返回的字段名是区分大小写的。
        //result  必需。规定由 mysqli_query()、mysqli_store_result() 或 mysqli_use_result() 返回的结果集标识符。
        
        $avatar = $row["avatar"];

        // Login successful
        echo "<p>Welcome to the password protected area {$user}</p>";
        echo "<img src="{$avatar}" />";
    }
    else {
        // Login failed
        echo "<pre><br />Username and/or password incorrect.</pre>";
    }

    ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}
//is_null() 函数用于检测变量是否为 NULL。如果指定变量为 NULL,则返回 TRUE,否则返回 FALSE。
//mysqli_close(connection) 函数关闭先前打开的数据库连接。必需。connection 规定要关闭的 MySQL 连接。

?>

可以看到,服务器只是验证了参数Login是否被设置(isset函数在php中用来检测变量是否设置,该函数返回的是布尔类型的值,即true/false),没有任何的防爆破机制,且对参数username、password没有做任何过滤,存在明显的sql注入漏洞。

原文地址:https://www.cnblogs.com/guiguxiaosheng/p/9189137.html