2015-11-15 2 views
2

Я пытаюсь использовать уязвимость Shellshock в своей системе и столкнулся с интересной проблемой. Я использовал «wget» для использования этой уязвимости. Команда, которую я использую, следующая:Невозможно использовать уязвимость shellshock для всех файлов

wget -U "() { test;};echo \"Content-type: text/plain\"; echo; echo; /bin/cat /etc/passwd" http://somesite.com/some-script.cgi 

Использование вышеуказанной команды, эта уязвимость отображается как ожидалось. Однако, когда я пытаюсь wget файл, который не является .cgi-файлом, эта уязвимость не отображается и загружается только файл.

Из чего я понимаю, wget должен установить строку User-Agent в значение, переданное в команде, которая должна запускать код /bin/cat /etc/passwd, и я не вижу, как это имеет какое-либо отношение к характеру загружаемого файла.

Заранее спасибо.

+0

Какой сервер работает на somesite.com? – choroba

+0

У меня есть apache2 работает. – Rabee

+0

Проверяет ли apache2 User-Agent статические страницы? Запускает ли для них новую оболочку? – choroba

ответ

2

Для того, чтобы использовать shellshock bug следующие шаги должны произойти:

  1. вы должны получить целевой сервер, чтобы придать определенную строку в environment variable и

  2. после установки среды переменная, цель должна (прямо или косвенно) запускать (уязвимую версию) оболочку bash.

Один из способов это может произойти, когда веб-сервер выполняет внешнюю программу через Common Gateway Interface (CGI), и внешняя программа является либо сценарий оболочки Bash, или иначе вызывает Баш. Это происходит потому, что протокол CGI указывает, что заголовки исходного HTTP-запроса передаются во внешнюю программу в переменных среды с префиксом HTTP_ (например, HTTP_USER_AGENT для заголовка User-Agent). Так как злоумышленник может управлять этими заголовками, они также могут напрямую контролировать значения этих переменных окружения.

Однако при вызове внешней программы через CGI веб-серверу необходимо установить только те переменные среды . При доставке статического файла серверу нужно только прочитать этот файл с диска и отправить его клиенту; ему не нужно устанавливать какие-либо переменные среды или вызывать любые внешние инструменты, такие как bash.

+0

Справа. Поэтому мой вопрос заключается в том, что когда я использую «wget» для получения файла с веб-сервера, ему нужно только прочитать файл, даже если файл является .cgi-файлом. Почему на эксплойт влияет тип загружаемого файла? – Rabee

+1

Сценарий CGI (который, я полагаю, ваш веб-сервер настроен для обработки файлов с помощью .cgi suffix as), не просто считывается с диска и отправляется вам как есть - скорее, он * выполняется * сервером , и ваш * выход * отправлен вам. Если исполняемый файл является сценарием bash (т. Е. Текстовым файлом, начинающимся с '#!/Bin/bash'), тогда выполнение этого приведет к тому, что ОС вызовет bash и, следовательно, потенциально вызовет ошибку shellshock. Для получения дополнительной информации о том, как работают скрипты CGI, вы можете взглянуть на ссылки Википедии, которые я включил в свой ответ. –

+0

Ах ладно. Теперь это очищает. Я как бы понимаю, как работают скрипты cgi, но я не знал, что они исполняются, когда вы их запустили, и их вывод был получен. Я думал, что сам файл был извлечен. – Rabee

Смежные вопросы