Невозможно использовать уязвимость в виде шелл-шока для всех файлов.
Я пытался использовать уязвимость Shellshock в моей системе и столкнулся с интересной проблемой. Я использовал 'wget', чтобы использовать уязвимость. Команда, которую я использую, выглядит следующим образом:
wget -U "() { test;};echo \"Content-type: text/plain\"; echo; echo; /bin/cat /etc/passwd" http://somesite.com/some-script.cgi
Используя приведенную выше команду, уязвимость отображается, как и ожидалось. Однако, когда я пытаюсь создать файл, который не является файлом.cgi, уязвимость не отображается, и загружается только файл.
Из того, что я понимаю, wget должен установить строку User-Agent в значение, переданное в команде, которая должна выполнить код /bin/cat /etc/passwd
и я не понимаю, как это связано с характером загружаемого файла.
Заранее спасибо.
1 ответ
Для того, чтобы использовать ошибку "Снаряды", необходимо выполнить следующие шаги:
вы должны заставить целевой сервер вставлять определенную строку в переменную окружения, и
после установки переменной среды цель должна (прямо или косвенно) запустить (уязвимую версию) оболочку bash.
Один из способов это может произойти, когда веб-сервер выполняет внешнюю программу через Common Gateway Interface (CGI), а внешняя программа либо является сценарием оболочки bash, либо иным образом вызывает bash. Это происходит потому, что протокол CGI указывает, что заголовки из исходного HTTP-запроса передаются внешней программе в переменных среды с префиксом HTTP_
(например HTTP_USER_AGENT
для заголовка User-Agent). Поскольку злоумышленник может контролировать эти заголовки, он также может напрямую контролировать значения этих переменных среды.
Тем не менее, веб-сервер должен устанавливать эти переменные среды только при вызове внешней программы через CGI. При доставке статического файла серверу нужно только прочитать этот файл с диска и отправить его обратно клиенту; ему не нужно устанавливать какие-либо переменные окружения или вызывать какие-либо внешние инструменты, такие как bash.