Отчёт о тотальном изнасиловании gLark.Ru
(если у вас тонкая душевная организация и вы вот-вот расплачетесь)
Тут вся инфа, как мы нагнули этот говносайт gLark.Ru. Всякие дыры, векторы и прочая хуета. Статус у помойки: Сервак наш, админ сосёт хуй.
Вот на каком говне мамонта они сидят: CentOS 7, Apache 2.4.6 (mod_fcgid) + nginx, PHP 7.4.33 (php-fpm :9000), MariaDB, ISPmanager 5 (mgr5, :1500), Docker (Ollama, MCP-сервисы :8005/:8006). Юзер этой параши: glarkru (uid 529).
Качай спизженное добро
Вот тебе, блядь, все архивы и дампы, что мы вытащили из этой дырявой жопы. Качай, пока не прикрыли лавочку.
Полный архив
Всё, нахуй. Исходники, базы, конфиги - вся помойка в одном флаконе.
Скачать glark_dump_all.zipСкрипты сайта
Публичная часть и всякие служебные скрипты. Может, найдёшь чего интересного.
Скачать glarkru_scripts_full.zipПолный дамп сайта
Исходники ядра, всего говна на сайте (включая говносайты юзеров) и панели управления. Ебись как хочешь.
Скачать glarkru_site_dump.zipДамп Базы (Полный)
Вся басуха целиком. С юзерами, паролями и прочей личной хуйнёй.
Скачать db_tables_full.sqlДамп Базы (Для ссыкунов)
Та же база, но без данных юзеров. Если ссышься, но посмотреть охота.
Скачать db_tables_cleaned.sqlДыра №1: Ходим по файлам, как у себя дома Пиздец
Суть
Эти дебилы пытались фильтровать пути тупым `str_replace`, причём даже не по кругу. В итоге можно просто въебать в путь `...././//`, эта хуйня превращается в `../`, и ты, блядь, гуляешь по всему серваку, где твоей душе угодно.
Смотри на это убожество:
$path = str_replace('', "", $path);
$path = str_replace('//', "/", $path);
$path = str_replace('../', "", $path);
$path = str_replace('./', "", $path);
$path = str_replace('\..', "", $path);
$path = str_replace('\.', "", $path);
Как не быть таким же долбоёбом
Как починить: Выкинуть нахуй этот `str_replace` и юзать `realpath()`, а потом проверять, что конечный путь не вылез за пределы нужной папки. Это, блядь, азы.
Как не обосраться в будущем: Не изобретай, сука, велосипед для работы с путями. Запри юзера в его папке и не выпускай.
Дыра №2: FastCGI торчит наружу, еби-не хочу Пиздец
Суть
Какой-то мудак оставил php-fpm слушать порт без пароля. Можно подключиться, подсунуть свои переменные типа `SCRIPT_FILENAME` и выполнять любой PHP-код от имени юзера сайта. RCE в чистом виде, блядь.
Как не быть таким же долбоёбом
Как починить: Переключи эту залупу с TCP-порта на UNIX-сокет и настрой права. Если без порта никак, то пусть слушает только `127.0.0.1` и закрой его нахуй фаерволом от всех, кроме веб-сервера.
Как не обосраться в будущем: Хотя бы иногда смотри, какие порты у тебя открыты (`netstat -tulnp`), и не свети служебной хуйнёй в интернет.
Дыра №3: Пакуем в ZIP что угодно и качаем Пиздец
Суть
Функция архивации, сука, создаёт ZIP прямо в той папке, где ты находишься. Если скрестить это с первой дырой (Path Traversal), можно зазиповать любую папку на сервере (типа `/etc/`) и спокойно скачать архив через браузер. Гениально, блядь.
Смотри на это убожество:
$gen_name = $user->getData()->domain.'_'.date("Y-m-d_H_i_s").'.zip';
$zip = zip($FileIO->getRealPath(), $FileIO->getRealPath().'./'.$gen_name, $FileIO->getPath());
Как не быть таким же долбоёбом
Как починить: Создавай архивы в отдельной временной папке, из которой нет выхода. И проверяй каждый файл, который пихаешь в архив, чтоб он был из разрешённой директории.
Как не обосраться в будущем: Не мешай в одну кучу папки, куда можно срать временными файлами, и папки, доступные из веба.
Дыра №4: Пароли валяются прямо под ногами Пиздец
Суть
Все конфиги с паролями от базы, токенами и прочей хуетой просто лежат в папке сайта. Их можно прочитать через ту же дыру в файл-менеджере. Права на файлы, естественно, 777, чтоб наверняка.
Пример этого пиздеца:
[DataBase]
host="localhost"
login="glarkru"
pass="[СУПЕР_СЕКРЕТНЫЙ_ПАРОЛЬ_БЛЯДЬ]"
name="glarkru"
Как не быть таким же долбоёбом
Как починить: Вынеси, блядь, все конфиги за пределы папки `www/`. Поставь на них права `600`, чтобы никто кроме владельца их не прочитал. И смени все пароли, мудак.
Как не обосраться в будущем: Используй переменные окружения (.env), долбоёб, а не храни пароли в текстовых файлах в корне сайта.
Дыра №5: Ебём сервак через заголовок Host Пиздец
Суть
Какой-то сервис для поддоменов жрёт заголовок `Host` из запроса и использует его для построения путей на диске. Естественно, без фильтрации. Можно подсунуть `Host: ../../../tmp` и распаковать свой ZIP-архив с веб-шеллом куда-нибудь в `/tmp`.
Как не быть таким же долбоёбом
Как починить: Проверяй заголовок `Host` по белому списку доменов. Не верь ничему, что прилетает от пользователя, даже в заголовках.
Как не обосраться в будущем: Запомни, сука: любые данные от юзера, включая HTTP-заголовки — это яд. Фильтруй или умри.
Дыра №6: Бэкдоры и закладки от предыдущих ораторов Пиздец
Суть
Сервак — проходной двор. Тут уже до нас побывали и оставили кучу говна:
glark.ru/vesta.php— Левый API-скрипт с зашитыми паролями для управления сервером.apps/js/cache.php— Классический веб-шелл, чтобы команды выполнять.apps/js/reinject.sh— Скрипт, который по крону восстанавливает всю эту хуйню, если её удалить.
Как не быть таким же долбоёбом
Как починить: Снеси нахуй все эти файлы: `vesta.php`, `cache.php`, `hook.php`, `ds.php`, `reinject.sh`, `isp_payload.js` и `request_log.txt`. Почисти `crontab` и от рута, и от юзера сайта. Проверь `.htaccess`.
Как не обосраться в будущем: Поставь систему контроля целостности файлов (AIDE какой-нибудь) и смотри иногда, что у тебя в кроне прописано.
Дыра №7: Токен захардкожен, как у последнего мудака Почти пиздец
Суть
В каком-то служебном скрипте токен для доступа к внутренним сервисам просто вписан в код. Если кто-то спиздит исходники (а их уже спиздили, см. выше), то сможет от имени сервера дёргать внутренние API.
Как не быть таким же долбоёбом
Как починить: Вынеси этот ёбаный токен из кода в переменные окружения. И смени его, потому что старый уже у всех, кому не лень.
Как не обосраться в будущем: Используй сканеры кода, которые ищут пароли и токены. Они орут, когда видят, что какой-то дебил пытается закоммитить секреты в репозиторий.
Список дырок, куда совать
Вот список адресов и файлов, которые надо либо снести нахуй, либо закрыть доступ, пока не поздно:
| URL / Файл | Чем это грозит и как ебать | Что с этим делать |
|---|---|---|
https://glark.ru/filemgr.lm |
Можно лазить по всему серваку и читать/писать файлы | Починить фильтрацию путей, блядь! |
127.0.0.1:9000 (php-fpm) |
Удалённое выполнение кода через FastCGI | Перевести на UNIX-сокет или закрыть фаерволом |
https://glark.ru/api/ (vesta.php) |
Чёрный ход для админов, чтобы рулить аккаунтами | Удалить нахуй vesta.php |
https://glark.ru/apps/js/cache.php |
Обычный веб-шелл, оставленный кем-то | Удалить и проверить крон на наличие говна |
/srv/node_worker.php |
Светит токеном для внутренних сервисов | Сменить токен, вынести в .env |
https://glark.ru/pisp.php |
Внутренний API с утекшим токеном | Закрыть доступ, сменить ключи |
https://glark.ru/demo.php |
Светит всей инфой о сервере через phpinfo() | Удалить этот позор с продакшена |
https://glark.ru/request_log.txt |
Лог с паролями юзеров в открытом виде | Удалить и никогда так больше не делать |
https://glark.ru/phpmyadmin/ |
Старая, дырявая хуйня для управления базой | Закрыть доступ по IP или хотя бы паролем |