Как использовать мой PHP-код с SQL-инъекцией

Я работаю над проектом, в котором нам нужно написать страницу входа с помощью PHP, а затем использовать ее с помощью SQL-инъекции, прежде чем исправлять уязвимость. До сих пор я написал страницу входа в систему, которая подключается к базе данных и выполняет поиск, чтобы увидеть, существует ли пользователь, если он существует, он может войти в систему.

Однако, независимо от того, что я пробовал, я не могу использовать их для распечатки других пользователей, обхода паролей и т. Д., И я не уверен, почему (плохо знакомый с PHP). Я не делал никакой дезинфекции.

Форма ввода HTML:

<form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<p><font face = "Arial" size="4" color="#6b8e23">Login Menu</font></p>
<input type="text" name="username" placeholder="Username" />
<div><input type="password" name="password" placeholder="password" /></div>
<input type="submit" name="Login" value="Login"></input>

<?php
// connect to database
$host = "localhost";
$username = 'root';
$password = '';
$dbname = "accounts";
$con = mysqli_connect($host, $username, $password, $dbname);

//check to ensure connection exists !DEBUG!
if (!$con) {
    die("Connection Failed: " . mysqli_connect_error());
    ?>
    <p><font face = "Arial" size="4" color="#ff4500">No Connection</font></p>
    <?php
} else {
    ?>
    <p><font face = "Arial" size="4" color="#ff4500">Connection established with sql server </font></p>
<?php
}

//if the form has been submitted
if (isset($_POST['Login']))
{
    //user login details
    $user = $_POST['username'];
    $pass = $_POST['password'];

    if($user != "" && $pass != "")
    {
        $sql_query = "SELECT count(*) as cntUser FROM users where usernames='".$user."' AND passwords='".$pass."'";

        $result = mysqli_query($con, $sql_query);
        $row = mysqli_fetch_array($result);
        $count = $row['cntUser'];

        if($count > 0)
        {
            $_SESSION['username'] = $user;
            ?>
            <p><font face = "Arial" size="4" color="#ff4500">User Found</font></p>
            <?php
        } else {
            ?>
            <p><font face = "Arial" size="4" color="#ff4500">No User by that name</font></p>
            <?php
        }
    }
}
?>

Спасибо, что прочитали об этом, застряли на некоторое время, и я просто не могу понять это!

1 ответ

Решение

Все дело в обработке значений логина и пароля. Пока они не избежали, злоумышленник может отправлять значения с одинарной кавычкой. В результате следующие символы будут интерпретироваться как часть SQL-запроса. Я предлагаю распечатать полный SQL-запрос, встроенный в ваш скрипт.

Например, введя

"ИЛИ ИСТИННЫЕ ИЛИ пароли ="

поскольку пароль заставит его войти в систему, не зная, какой пароль, поскольку запрос станет:

SELECT count (*) в качестве cntUser ОТ пользователей, где usernames='root' AND passwords='' OR TRUE OR passwords=''

Другие вопросы по тегам