Полет в стратосферу. Ломаем Struts через Action-приложение и мастерим Forward Shell

В этой статье я покажу, как захватить стратосферу, а точнее — получить рут на виртуалке Stratosphere с CTF-площадки Hack The Box. На этот раз мы повоюем с фреймворком Apache Struts для получения RCE-уязвимости в веб-приложении, рассмотрим в действии редко обсуждаемую, но очень полезную концепцию получения удаленной сессии Forward Shell, а также поиграем с угоном библиотеки и эксплуатацией функции eval() для скрипта на Python.

Несмотря на то что Stratosphere не слишком сложна (5,2 балла из 10), прохождение этой ВМ доставило мне немало удовольствия благодаря возможности попрактиковаться с редко встречаемой техникой Forward Shell.

Помимо этого, вот с чем мы столкнемся на пути к флагу суперпользователя:

  • разведка и сбор информации об используемом ПО для обнаружения фреймворка Apache Struts;
  • выявление слабых мест Struts для атаки на веб-приложение, построенное на Java EE и Action;
  • поиск удобного способа взаимодействия с хостом в условиях беспощадно фильтруемого исходящего трафика HTTP;
  • обнаружение слабого пароля для базы данных MySQL и извлечение из нее авторизационных данных пользователя для подключения к машине по SSH;
  • два способа эксплуатации уязвимого приложения на Python: абъюз функции eval() и «угон» импортируемого модуля.

Разведка

Приступим, пожалуй. Сначала заглядываем в открытые порты с помощью героя всех фильмов про хакеров — сканера Nmap.

root@kali:~# nmap -n -Pn -sV -sC -oA nmap/stratosphere 10.10.10.64
root@kali:~# cat nmap/stratosphere.nmap
# Nmap 7.70 scan initiated Sat Aug 10 23:56:34 2019 as: nmap -n -v -Pn -sV -sC -oA nmap/initial 10.10.10.64
Nmap scan report for 10.10.10.64
Host is up (0.054s latency).
Not shown: 997 filtered ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.4p1 Debian 10+deb9u2 (protocol 2.0)
| ssh-hostkey:
| 2048 5b:16:37:d4:3c:18:04:15:c4:02:01:0d:db:07:ac:2d (RSA)
| 256 e3:77:7b:2c:23:b0:8d:df:38:35:6c:40:ab:f6:81:50 (ECDSA)
|_ 256 d7:6b:66:9c:19:fc:aa:66:6c:18:7a:cc:b5:87:0e:40 (ED25519)
80/tcp open http
| fingerprint-strings:
| [ ....................................................... ]
| [ ............ [содержимое строки-отпечатка] ............ ]
| [ ....................................................... ]
| GetRequest:
| [ ....................................................... ]
| [ ................ [ответ на GET-запрос] ................ ]
| [ ....................................................... ]
| http-methods:
| Supported Methods: GET HEAD POST PUT DELETE OPTIONS
|_ Potentially risky methods: PUT DELETE
|_http-title: Stratosphere
8080/tcp open http-proxy
| fingerprint-strings:
| [ ....................................................... ]
| [ ............ [содержимое строки-отпечатка] ............ ]
| [ ....................................................... ]
| GetRequest:
| [ ....................................................... ]
| [ ................ [ответ на GET-запрос] ................ ]
| [ ....................................................... ]
| http-methods:
| Supported Methods: GET HEAD POST PUT DELETE OPTIONS
|_ Potentially risky methods: PUT DELETE
|_http-open-proxy: Proxy might be redirecting requests
|_http-title: Stratosphere
2 services unrecognized despite returning data. If you know the service/version, please submit the following fingerprints at https://nmap.org/cgi-bin/submit.cgi?new-service :
==============NEXT SERVICE FINGERPRINT (SUBMIT INDIVIDUALLY)==============
| [ ....................................................... ]
| [ .... [отпечаток неопознанного сервиса на порте 80] .... ]
| [ ....................................................... ]
==============NEXT SERVICE FINGERPRINT (SUBMIT INDIVIDUALLY)==============
| [ ....................................................... ]
| [ ... [отпечаток неопознанного сервиса на порте 8080] ... ]
| [ ....................................................... ]
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Read data files from: /usr/bin/../share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Sat Aug 10 23:56:59 2019 -- 1 IP address (1 host up) scanned in 24.41 seconds

root@kali:~# gobuster dir -u ‘http://10.10.10.64’ -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -e -o gobuster/stratosphere.gobuster
===============================================================
Gobuster v3.0.1
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@_FireFart_)
===============================================================
[+] Url: http://10.10.10.64
[+] Threads: 10
[+] Wordlist: /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt
[+] Status codes: 200,204,301,302,307,401,403
[+] User Agent: gobuster/3.0.1
[+] Expanded: true
[+] Timeout: 10s
===============================================================
2019/08/11 00:44:24 Starting gobuster
===============================================================
http://10.10.10.64/manager (Status: 302)
http://10.10.10.64/Monitoring (Status: 302)
Progress: 13738 / 220561 (6.23%)^C
[!] Keyboard interrupt detected, terminating.
===============================================================
2019/08/11 00:45:39 Finished
===============================================================

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *