Перечисление целевой системы. Часть 2. Перечисление на основе хоста (перечисление служб).
____________________________________________________________________________________
Глава 2. ПЕРЕЧИСЛЕНИЕ НА ОСНОВЕ ХОСТА: ПЕРЕЧИСЛЕНИЕ СЛУЖБ.
- ПЕРЕЧИСЛЕНИЕ FTP.
- ПЕРЕЧИСЛЕНИЕ SMB.
- ПЕРЕЧИСЛЕНИЕ NFS.
- ПЕРЕЧИСЛЕНИЕ DNS.
- ПЕРЕЧИСЛЕНИЕ SMTP.
- ПЕРЕЧИСЛЕНИЕ IMAP/POP3.
- ПЕРЕЧИСЛЕНИЕ SNMP.
- ПЕРЕЧИСЛЕНИЕ ORACLE TNS.
- ПЕРЕЧИСЛЕНИЕ IPMI.
- ПЕРЕЧИСЛЕНИЕ SSH.
____________________________________________________________________________________
§ 2.1. ПЕРЕЧИСЛЕНИЕ FTP.
2.1.1) FTP (FILE TRANSFER PROTOCOL) — это сетевой протокол для удалённой передачи файлов по сети. Данный протокол работает на прикладном уровне в модели TCP/IP.
FTP-сервер работает по умолчанию через TCP-порт 21. Защищенные версии протокола FTP — FTPS и SFTP.
Более подробно о протоколе FTP можно почитать здесь.
ЭТАП 1. Сканировать порты целевой FTP-службы с помощью Nmap:
sudo nmap -sV -p21 -sC -A IPцелевойСистемы или nmap -sV IPцелевойСистемы
- -p21 — сканирует только порт 21, на котором по умолчанию работает FTP.
- -sC — применяются скрипты по умолчанию Nmap при сканировании.
- -A — применяется агрессивное сканирование.
ЭТАП 2. Использовать уязвимость анонимного входа на FTP-сервер, что войти в систему:
Как только мы введём команду выше, FTP-клиент предложит нам ввести имя пользователя и пароль:
- anonymous — имя пользователя для анонимного входа. Можно также использовать это имя, но с большой буквы Anonymous.
- [Enter] — заполнение пароля нужно пропустить, нажав на кнопку "Enter".
Если на FTP-сервер будет разрешен анонимный вход, то мы сможем войти в систему.
Если нам нужно просто скачать все файлы и папки с FTP-сервера, то можно это сделать с помощью команды:
wget -m --no-passive ftp://anonymous:anonymous@IPцелевойСистемы
Как только мы скачаем все файлы, создастся каталог с именем IP-адреса нашей цели. Все загруженные файлы будут хранится там.
Если FTP-сервер работает с шифрованием TLS/SSL, то войти в целевую систему нужно с помощью FTP-клиента openssl:
openssl s_client -connect IPцелевойСистемы:21 -starttls ftp
Мы также можем увидеть сертификат SSL на целевой системе.
* ( альтернативная уязвимость). Также существует эксплойт для некоторых версий серверов IN.FTPD и других FTP-серверов, которые на команду "cwd" возвращают разные ответы для существующих домашних каталогов и для несуществующих. Этим можно воспользоваться, поскольку мы можем выполнять команды cwd перед аутентификацией, и если есть домашний каталог, то вероятно к нему будет подключена учётная запись пользователя. Хотя эта ошибка встречается в основном в устаревших системах, о ней стоит знать как о способе использования FTP.
ЭТАП 3. Найти имена пользователей на FTP-сервере, которые нам понадобится, чтобы затем использовать их учётные записи для входа на FTP-сервер. В нашем случае, мы нашли интересный файл "PUBLIC_NOTICE.txt", который скачали с FTP-сервера на наш компьютер:
Далее открыв файл PUBLIC_NOTICE.txt, мы нашли имя пользователя «Mike» на FTP-сервере:
ЭТАП 4. Взломать пароля пользователя. Поскольку мы уже нашли на FTP-сервере пользователя под именем «Mike», то мы можем подобрать пароль для этого пользователя с помощью инструмента Hydra:
hydra -t 4 -l имяПользователя -P /usr/share/wordlists/rockyou.txt.gz -vV IPцелевойСистемы ftp
- -t 4 — количество параллельных подключений к цели.
- -l имяПользователя — указывает на пользователя, чью учетную запись мы хотим взломать. В нашем случае, это пользователь mike (имя пользователя нужно вписать с маленькой буквы).
- -P /usr/share/wordlists/rockyou.txt.gz — указывает на файл со списком паролей для взлома.
- -vV — устанавливает подробный вывод работы Hydra, показывающий комбинацию логин + пароль для каждой попытки.
- ftp — устанавливает протокол, на который будет нацелена Hydra. Например, если мы атакуем протокол telnet, то вместо ftp нужно записать telnet.
Готово! Мы получили пароль от учётной записи пользователя «mike». И теперь мы можем войти на FTP-сервер с помощью него:
* (альтернативная уязвимость). Поскольку FTP-протокол отправляет и получает данные в незашифрованном виде, то следовательно любые данные, отправленные по «каналу управления» или «каналу передачи данных» могут быть перехвачены и прочитаны. В случае MITM-атаки (человек посередине), пентестер может раскрыть всё, что отправляется через FTP-протокол. В данной статье объясняется процесс MITM-атаки с использованием ARP, чтобы заставить жертву отправить конфиденциальную информацию пентестеру, а не изначальному адресату.
§ 2.2. ПЕРЕЧИСЛЕНИЕ SMB.
2.2.1) SMB (SERVER MESSAGE BLOCK) — это сетевой протокол для удалённого доступа к файлам, принтерам и другим сетевым ресурсам, а также для обмена информацией между различными системными процессами. SMB работает по умолчанию через TCP-порты 445, 139 и UDP-порты 137, 138.
SAMBA — это реализация SMB-сервера, разработанная для операционных систем UNIX. SAMBA работает через сетевой протокол CIFS, являющийся реализацией протокола SMB. Это позволяет SAMBA взаимодействовать с новыми системами Windows, поскольку сам протокол SMB изначально разрабатывался под Windows.
CIFS работает исключительно через TCP-порт 445.
Более подробно о протоколе SMB можно почитать здесь.
ЭТАП 1. Сканировать порты целевой SMB-службы с помощью Nmap:
nmap -sV -sC -p139,445 IPцелевойСистемы
или
nmap --script smb-os-discovery.nse -p номерПорта IPцелевойСистемы
Мы нашли версию службы SMB (Samba smbd 4.6.2) и имя хоста (DEVSMB).
Вторая команда (--script smb-os-discovery.nse) просканирует службу SMB для определения версии ОС, имени компьютера, домена, рабочей группы и текущего времени (не всегда срабатывает эта команда).
ЭТАП 2. Перечисление общих ресурсов SMB на SMB-сервере.
Способ №1. Использовать инструмент Enum4Linux для поиска общих ресурсов (установлен по умолчанию в Kali и Parrot). Существует также изменённый вариант Enum4linux-ng.
Запустить перечисление общих ресурсов SMB можно с помощью команды:
enum4linux -параметр IPцелевойСистемы
- -U — получить список пользователей.
- -M — получить список машин.
- -N — получить дамп списка имен (отличается от -U и -M).
- -S — получить общий список.
- -P — получить информацию о политике паролей.
- -G — получить группу и список участников.
- -A
- -C
- -a — полное базовое перечисление (включает все вышеперечисленные параметры).
Enum4Linux нашёл несколько общих ресурсов в разделе "Share Enumeration":
Однако подключиться можно только к общему ресурсу sambashare, поскольку только для него выставлены нужные разрешения — "Mapping: OK, Listing: OK":
Этот общий ресурс SMB (sambashare) нам и понадобиться на 3-м этапе.
Способ №2. Использовать SMB-клиент для поиска общих ресурсов SMB:
smbclient -N -L \\\\IPцелевойСистемы или smbclient -N -L //IPцелевойСистемы
- -L — указывает, что хотим получить список общих ресурсов SMB на целевом хосте.
- -N — игнорирует запрос пароля.
Способ №3. Использовать инструмент CrackMapexec для поиска общих ресурсов SMB:
crackmapexec smb IPцелевойСистемы --shares -u '' -p ''
- -u '' -p '' — здесь расставлены одиночные кавычки, а не двойные. Эта часть команды означает, что мы оставляем пустыми ввод имени пользователя и пароля (-u 'пусто' -p 'пусто').
Подробнее об использовании Crackmapexec читать в данной инструкции.
Способ №4. Использовать инструмент SMBMap для поиска общих ресурсов:
smbmap -H IPцелевойСистемы или smbmap -H IPцелевойСистемы -r имяКаталога
Вторая команда позволяет также просматривать содержимое каталоги (если это разрешено).
Можно также скачать нужный файл из общего ресурса SMB с помощью команды:
smbmap -H IPцелевойСистемы --download "имяКаталога\имяФайла" или smbmap -H IPцелевойСистемы --upload имяФайла1 "имяКаталога\имяФайла"
ЭТАП 3. Перечисление пользователей на общем ресурсе SMB. Сделать это можно с помощью инструмента rpcclient:
rpcclient -U'%' IPцелевойСистемы
Мы получим командную строку, где нужно будет ввести команду:
Мы нашли двух пользователей на SMB-сервере (jason и robin).
Инструмент rpcclient предлагает также много других команд для перечисления разной информации на SMB-сервере. Эти команды можно посмотреть в руководстве rpcclient или памятке по SMB от Института SANS.
ЭТАП 4. Использовать уязвимость анонимного доступа к общим ресурсам SMB-сервера.
Способ №1. Использовать SMB-клиент для подключения к общему ресурсу:
smbclient //IPцелевойСистемы/общийРесурс -U произвольноеИмяПользователя -p порт
или
smbclient -U произвольноеИмяПользователя -p порт \\\\IPцелевойСистемы\\общийРесурс
- sambashare — общий ресурс, который мы нашли на 2-м этапе.
- -U sriki — имя пользователя, которое задаётся ПРОИЗВОЛЬНО !!!
- -p 445 — порт, на котором по умолчанию работает SMB-сервер.
- [Enter] — заполнение пароля нужно пропустить, нажав на кнопку "Enter".
Можно также подключиться к общему ресурсу с помощью другой команды:
smbclient //IPцелевойСистемы/общийРесурс -N -L
или
smbclient \\\\IPцелевойСистемы\\общийРесурс -N -L
- sambashare — это общий ресурс, который мы нашли на 2-м этапе.
- -L — указывает, что хотим получить список общих ресурсов на удалённом сервере.
- -N — игнорирует запрос пароля.
Получив доступ к общему ресурсу SMB, можно взаимодействовать с её файлами с помощью команд, которые во многом схожи с Windows-командами. Чтобы получить команды SMB-сервера нужно ввести команду help:
Способ № 2. Использовать инструмент RPCClient для подключения к общему ресурсу:
rpcclient -U "" IPцелевойСистемы
Получив доступ к общему ресурсу SMB, можно взаимодействовать с её файлами с помощью команд, рассмотренных здесь:
- srvinfo — получить информацию о SMB-сервере.
- enumdomains — перечислить все домены, которые развёрнуты в сети.
- querydominfo — предоставляет информацию о домене, сервере и пользователе в развернутых доменах.
- netshareenumall — перечисляет все доступные общие ресурсы.
- netsharegetinfo общийРесурс — предоставляет информацию о конкретном общем ресурсе.
- enumdomusers — перечисляет всех пользователей домена.
- queryuser ridПользователя — предоставляет информацию о конкретном пользователе. RID пользователя (user_rid) — так помечается пользователь в SMB-сервере (например, user_rid: 0x3e9).
- querygroup ridГруппы — предоставляет информацию о конкретной группе. RID группы (group_rid) — так помечается группа в SMB-сервере (например, group_rid: 0x201).
Однако может быть так, что не все команды будут доступны нам на SMB-сервере, в связи с определенными ограничениями для пользователей. В таком случае, мы не сможем применить команду querygroup ridГруппы и узнать, к каким группам был добавлен пользователь.
В этом случае, мы можем использовать цикл For с помощью Bash, чтобы найти группы на SMB-сервере:
for i in $(seq 500 1100);do rpcclient -N -U "" IPцелевойСистемы -c "queryuser 0x$(printf '%x\n' $i)" | grep "User Name\|user_rid\|group_rid" && echo "";done
Или же можем использовать Python-скрипт samrdump.py для поиска групп на SMB-сервере:
/usr/share/doc/python3-impacket/examples/samrdump.py IPцелевойСистемы
ЭТАП 5. Найти на SMB-сервере файлы с ssh-ключами пользователей, которые позволяют пройти аутентификацию на SSH-сервере от их имени.
Выведем список каталогов в общем ресурсе SMB с помощью команды dir или ls:
Нас интересует каталог .ssh, содержащий ключи аутентификации. Перейдём в этот каталог и выведем его содержимое:
В каталоге .ssh содержится три ssh-ключа, где нам нужен ключ id_rsa. Загрузим этот ssh-ключ на наш компьютер с помощью команды:
Ssh-ключ id_rsa скачается на наш компьютер:
* ( альтернативная уязвимость): также существует уязвимость CVE-2017-7494, которая позволяет удалённое выполнение кода с помощью SMB.
ЭТАП 6. Нужно изменить разрешение скачанного ssh-ключа на "600" с помощью следующей команды:
Теперь с помощью этого ssh-ключа нужно войти на SSH-серевер:
ssh -i имяКлюча имяПользователя@IPцелевойСистемы
Готово! Мы вошли на SSH-серевер от имени пользователя "cactus".
*ПРИМЕЧАНИЕ: Имя пользователя мы должны узнать покопавшись в файлах общего ресурса SMB. Сделать это можно с помощью инструмента rpcclient:
rpcclient -U'%' IPцелевойСистемы
Мы получим командную строку, где нужно будет ввести команду:
Мы нашли двух пользователей на SMB-сервере (cactus и robin).
Инструмент rpcclient предлагает также много других команд для перечисления разной информации на SMB-сервере. Эти команды можно посмотреть в документации rpcclient или шпаргалке от Института SANS.
§ 2.3. ПЕРЕЧИСЛЕНИЕ NFS.
2.3.1) NFS (NETWORK FILE SYSTEM) — это протокол сетевого доступа к файловым системам. NFS является интернет-стандартом, который управляет процессами в распределенной файловой системе (DFS).
Самая новая версия протокола NFS — NFSv4, который работает по умолчанию через UDP/ TCP-порт 2049.
Более подробно о протоколе NFS можно почитать здесь.
ЭТАП 1. Сканировать порты целевой NFS-службы с помощью Nmap:
sudo nmap --script nfs* IPцелевойСистемы -sV -p111,2049
или
sudo nmap -p111,2049 -sV -sC IPцелевойСистемы
Мы получили общий ресурс NFS "nfs-ls" и список всех запущенных управляемых служб RPC (удалённый вызов процедур), их названия и описания, а также порты, которые они используют. Это позволяет нам проверить, подключён ли целевой общий ресурс к сети на всех необходимых портах.
В общем ресурсе "nfs-ls" мы также видим два каталога: /var/nfs и /mnt/nfsshare. Это мы также можем подтвердить с помощью команды:
ЭТАП 2. Примонтировать общий ресурс NFS (nfs-ls) к нашему компьютеру. Для этого сначала создаём пустую папку на нашем компьютере (например, shareNFS), куда мы затем примонтируем "nfs-ls":
Затем примонтируем общий ресурс "nfs-ls" в нашу папку "shareNFS":
sudo mount -t nfs IPцелевойСистемы:/ ./shareNFS/ -o nolock
После успешного монтирования общего ресурса NFS к нашему компьютеру, мы затем сможем просматривать содержимое файлов общего ресурса прямо в нашем компьютере в папке "shareNFS".
Когда общий ресурс NFS станет ненужным, его нужно отмонтировать с помощью команды:
sudo umount ./папкаОбщегоРесурса
Мы отмонтировали общий ресурс NFS от нашей папки "shareNFS".
§ 2.4. ПЕРЕЧИСЛЕНИЕ DNS.
2.4.1) DNS (DOMAIN NAME SYSTEM) — это система доменных имен, которая преобразует IP-адреса в доменные имена. DNS является протоколом TCP/IP.
DNS является неотъемлемой частью Интернета и простым способом связи устройств в Интернете без запоминания сложного IP-адреса. Каждое устройство в Интернете имеет уникальный IP-адрес для связи с ним, и чтобы с этим IP-адресом было удобно работать, DNS преобразует IP-адрес в удобное доменное имя. И например, при посещении сайта вместо его IP-адреса (192.0.2.1), можно использовать его доменное имя (google.com).
DNS также хранит и выводит дополнительную информацию об услугах, связанных с доменом. Например, с помощью DNS-запросов можно определить какой компьютер служит сервером электронной почты для домена или как называются серверы доменных имен.
Более подробно о DNS можно почитать здесь.
ЭТАП 1. Перечислить целевой DNS-сервер с помощью Nmap:
nmap -p53 -Pn -sV -sC IPцелевойСистемы
ЭТАП 2. Перечислить все доступные DNS-записи на целевом DNS-сервере с помощью инструмента Dig:
dig any целевойДомен @целевойIP
Важно отметить, что DNS-сервер предоставит только те записи, которые он готов раскрыть. Поэтому не все записи могут быть показаны. Многие DNS-серверы даже игнорируют ANY-запросы для снижения нагрузки и предотвращения злоупотреблений согласно RFC 8482.
ЭТАП 3. Запросить у целевого DNS-сервера копию информации о его DNS-зоне. Сделать это можно с помощью процедуры передачи DNS-зоны (п. 5.5.2):
dig axfr серверИмен1 @серверИмен2
Мы запросили у одного сервера имён (10.129.14.128) передачу всех его записей на второй сервер имён (inlanefreight.htb).
Поскольку первый сервер имён (10.129.14.128) связан с поддоменом, то мы не смогли бы напрямую прочитать все его DNS-записи, ведь он работает внутри целевой сети. А поскольку мы передали все его DNS-записи второму серверу имён (10.129.14.128), который является публичным, то поэтому мы и смогли прочитать все DNS-записи первого сервер имён.
ПРИМЕЧАНИЕ: Если DNS-сервер настроен неправильно (нет ограничений IP-адресов, которые могут выполнять передачу DNS-зон), то мы сможем запросить у DNS-сервера копию информации о его DNS-зоне, поскольку передача DNS-зон не требует аутентификации.
Можно использовать инструмент Fierce для перечисления всех DNS-серверов корневого домена на предмет возможности передачи DNS-зоны:
ЭТАП 3 [ДОПОЛНИТЕЛЬНЫЙ: КОГДА DNS-СЕРВЕР НЕ РАЗРЕШАЕТ ПЕРЕДАЧУ DNS-ЗОНЫ]. Если на предыдущем этапе мы не смогли передать DNS-записи из сервера имён (10.129.14.128) на второй сервер имён (inlanefreight.htb).
Сначала нужно перечислить серверы имён на целевом DNS-сервере с помощью инструмента Dig:
dig ns целевойДомен @целевойIP
Мы нашли сервер имён ns.inlanefreight.htb для домена inlanefreight.htb.
Далее нужно перечислить поддомены целевого домена (inlanefreight.htb):
I) Перечислить поддомены с методом брутфорса c помощью инструмента Subbrute. Сначала данный инструмент нужно установить:
git clone https://github.com/TheRook/subbrute.git >> /dev/null 2>&1
Инструмент Subbrute установится на нашем компьютере в каталоге /subbrute. Вместе с ним также установятся словарь с DNS-преобразователями (resolvers.txt) и словарь с именами поддоменов (names.txt).
Можно всегда дополнить эти словари необходимой информацией. Нам, например, нужно добавить в словарь "resolvers.txt" сервер имён ns.inlanefreight.htb, который мы нашли выше.
Далее нужно запустить брутфорс поддоменов из каталога инструмента Subbrute:
./subbrute.py целевойДомен -s ./names.txt -r ./resolvers.txt
- -s ./names.txt — это словарь с именами поддоменов.
- -r ./resolvers.txt — это словарь с DNS-преобразователями.
Мы нашли один поддомен (hr.inlanefreight.htb), который связан с целевым доменом inlanefreight.com.
II) Перечислить поддомены методом брутфорса с помощью инструмента Sublist3r, предоставив предварительно созданный словарь с поддоменами.
III) Перечислить поддомены с помощью инструмента Subfinder:
Мы нашли один поддомен (hr.inlanefreight.htb), который связан с целевым доменом inlanefreight.com.
IV) Перечислить поддомены с помощью таких онлайн ресурсов, как DNSdumpster.
Найдя поддомен (hr.inlanefreight.htb), который связан с целевым доменом inlanefreight.com, можно теперь запросить передачу всех записей DNS-зоны из найденного поддомена на основной поддомен:
dig axfr серверИмен1 @серверИмен2
Мы запросили у одного сервера имён (hr.inlanefreight.htb) передачу всех его записей на второй сервер имён (inlanefreight.htb).
Поскольку первый сервер имён (hr.inlanefreight.htb) связан с поддоменом, то мы не смогли бы напрямую прочитать все его DNS-записи, поскольку он работает внутри целевой сети. А поскольку мы передали все его DNS-записи второму серверу имён (inlanefreight.htb), который является публичным, то поэтому мы и смогли прочитать все DNS-записи первого сервер имён.
ЭТАП 4. Перечислить отдельные A-записи с именами хостов целевого DNS-сервера. Сделать это можно найти с помощью брутфорс-атаки. Для этого нам понадобится список с именами хостов (например, Seclists).
Запустить брутфорс-атаку можно с помощью цикла for, который перечислит список A-записей на целевом DNS-сервере:
for sub in $(cat /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt);do dig $sub.целевойДомен @целевойIP | grep -v ';\|SOA' | sed -r '/^\s*$/d' | grep $sub | tee -a subdomains.txt;done
- /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt — список возможных имён хостов.
- sub.inlanefreight.htb — приставка sub заставляет искать поддомены целевого домена.
- @10.129.146.212 — целевой IP-адрес.
Вместо цикла цикл for, можно использовать инструмент DNSenum:
dnsenum --dnsserver целевойIP --enum -p 0 -s 0 -o subdomains.txt -f /usr/share/seclists/Discovery/DNS/fierce-hostlist.txt целевойДомен
- 10.129.12.108 — целевой IP-адрес.
- subdomains.txt — файл, в котором сохранятся найденные данные.
- /usr/share/seclists/Discovery/DNS/fierce-hostlist.txt — список возможных имён хостов.
- dev.inlanefreight.htb — целевой поддомен (вместо поддомена мы указали поддомен).
§ 2.5. ПЕРЕЧИСЛЕНИЕ SMTP.
2.5.1) SMTP (SIMPLE MAIL TRANSFER PROTOCOL) — это сетевой протокол для передачи электронной почты по IP-сети. SMTP используется для доставки почты между почтовым клиентом и SMTP-сервером или между двумя SMTP-серверами. SMTP часто используется с протоколами IMAP или POP3, которые позволяют получать и отправлять электронные письма.
- Почтовый сервер — это сервер, который обрабатывает и доставляет электронную почту по сети, обычно через Интернет. Почтовый сервер может получать электронные письма с клиентского устройства и отправлять их на другие почтовые серверы. Почтовый сервер также может доставлять электронные письма на клиентское устройство.
- Почтовый клиент — это устройство, на котором пользователь читает свою электронную почту (компьютеры, смартфоны и т.д.). Когда пользователь отправляет сообщение в своём почтовом клиенте, то клиент устанавливает соединение с SMTP-сервером в сети или в Интернете.
Более подробно о SMTP можно почитать здесь.
2.5.2) ПРОНИКНОВЕНИЕ НА SMTP-СЕРВЕР.
ЭТАП 1. Сканировать целевой SMTP-сервер с помощью Nmap:
sudo nmap IPцелевойСистемы -sC -sV -p25 или sudo nmap IPцелевойСистемы -sV
Однако Nmap может иногда выводить неполную или даже неверную информацию о версии службы SMTP, поэтому можно уточнить версию службы с помощью модуля MetaSploit smtp_version:
Можно также использовать скрипт smtp-open-relay для идентификации целевого SMTP-сервера как открытого ретранслятора с использованием 16 различных тестов:
sudo nmap IPцелевойСистемы -p25 --script smtp-open-relay -v
ЭТАП 2. Перечислить пользователей службы SMTP с помощью модуля Metasploit smtp_enum, который отправляет в уязвимую службу SMTP следующие команды:
- VRFY — подтверждение имен действительных пользователей.
- EXPN — показывает фактический адрес псевдонимов пользователя и списки электронной почты (списки рассылки).
Настроим модуль Metasploit smtp_enum и запустим атаку:
- use smtp_enum
- set RHOSTS IPцелевойСистемы
- set RPORT 25
- set USER_FILE /usr/share/wordlists/seclists/Usernames/top-usernames-shortlist.txt
Metasploit нашёл в службе SMTP пользователя под именем "administrator".
* ( альтернативная уязвимость). Для перечисления пользователей службы SMTP можно использовать инструмент smtp-user-enum, который работает ещё лучше на уровне операционной системы в Solaris через службу SMTP. Перечисление осуществляется путем проверки ответов на команды VRFY, EXPN, и RCPT TO VRFY.
Можно также перечислить пользователей службы SMTP c помощью Telnet (как?).
ЭТАП 3. Использовать найденное имя пользователя "administrator" для дальнейшего проникновения в целевую систему. Например, на 1-м этапе мы также нашли службу SSH, поэтому попробуем взломать её с помощью Hydra:
hydra -t 16 -l administrator -P /usr/share/wordlists/rockyou.txt.gz -vV IPцелевойСистемы ssh
- -t 16 — количество параллельных подключений к цели.
- -l administrator — указываем имя пользователя, который мы нашли на 2-м этапе в службе SMTP.
- -P /usr/share/wordlists/rockyou.txt.gz — это словарь с паролями для взлома.
- -vV — устанавливает подробный вывод работы Hydra, показывающий комбинацию логин + пароль для каждой попытки.
- ssh — устанавливает протокол, на который будет нацелена Hydra. Например, если мы атакуем протокол telnet, то вместо ftp нужно записать telnet.
Готово! Мы получили пароль от учётной записи пользователя administrator — "alejandro". И теперь мы можем войти на SSH-сервер с помощью этих двух значений:
§ 2.6. ПЕРЕЧИСЛЕНИЕ IMAP/POP3.
2.6.1) IMAP — это сетевой протокол для доступа и управления электронными сообщениями, которые хранятся на сервере электронной почты.
POP3 — это сетевой протокол для получения сообщений с сервера электронной почты. POP3 не имеет той же функциональности, что и IMAP, он обеспечивает только перечисление, извлечение и удаление электронных писем на почтовом сервере.
Более подробно о IMAP/POP3 можно почитать здесь.
2.6.2) ПЕРЕЧИСЛЕНИЕ IMAP/POP3.
ЭТАП 1. Сканировать целевой IMAP/POP3 с помощью Nmap:
sudo nmap IPцелевойСистемы -sV -p110,143,993,995 -sC
В результатах сканирования мы видим, что серверам IMAP и POP3 назначено доменное имя — dev.inlanefreight.htb, а сервер электронной почты принадлежит компании Inlanefreight Ltd, который находится в Лондоне.
ЭТАП 2. Если нам до взлома IMAP/POP3 удастся достать учётные данные одного из сотрудников компании, то мы сможем войти на почтовый сервер и прочитать или даже отправить отдельные сообщения.
Допустим, мы взломали службу SMTP и нашли там учётные данные пользователя (robin:robin). Мы можем использовать эти учётные данные для извлечения информации из служб IMAP/POP3:
curl -k 'imaps://IPцелевойСистемы' --user имяПользователя:пароль или curl -k 'pop3://IPцелевойСистемы' --user имяПользователя:пароль
Чтобы получить больше информации, нужно использовать параметр (-v):
curl -k 'imaps://IPцелевойСистемы' --user имяПользователя:пароль -v
Мы видим как происходит подключение, а также версию TLS для шифрования, дополнительные сведения о сертификате SSL и даже версию почтового сервера.
ЭТАП 3. Для взаимодействия с сервером POP3/IMAP по протоколу SSL можно использовать инструмент openssl (подключение может быть немного долгим):
openssl s_client --connect IPцелевойСистемы:imaps или openssl s_client --connect IPцелевойСистемы:pop3s
При подключении к IMAP/POP3 можно также увидеть много разной информации о целевом почтовом сервере. Для взаимодействия с сервером POP3/IMAP через протокол SSL можно также использовать инструмент ncat.
Мы подключились к IMAP, где затем нужно ввести там учётные данные для входа, которые мы должны найти ещё до взлома IMAP/POP3 (допустим, мы взломали службу SMTP и нашли там учётные данные пользователя robin:robin):
1 LOGIN имяПользователя пароль
Мы вошли на целевой почтовый сервер с чужими учётными данными "robin:robin". Далее там можно вводить команды IMAP для получения большей информации.
§ 2.7. ПЕРЕЧИСЛЕНИЕ SNMP.
2.7.1) SNMP — это сетевой протокол для мониторинга и управления сетевыми устройствами. Текущей версией протокола является SNMPv3.
К устройствам с поддержкой SNMP относятся маршрутизаторы, коммутаторы, серверы, устройства IoT и многие другие устройства, к которым также можно обратится с запросами и управлять ими с помощью протокола SNMP.
Кроме того, SNMP может использоваться и для обработки задач конфигурации и удалённого изменения настроек.
Более подробно об SNMP можно почитать здесь.
Стоит отметить, что если мы хотим больше узнать об SNMP, то лучшим способом будет самостоятельно настроить SNMP-службу на виртуальной машине и поэкспериментировать с ней, попробовать разные конфигурации.
ЭТАП 1. Сканировать целевой SNMP с помощью инструмента snmpwalk, который используется для запроса информации об OID:
snmpwalk -v2c -c public IPцелевойСистемы
В результатах сканирования можно найти электронную почту администратора, версию SNMP-сервера и прочую информацию. Мы также видим пакеты Python, которые были установлены в целевой системе.
Сканировать целевой SNMP можно с помощью инструмента onextyone, который используется для перебора имён строк сообщества из словаря:
onesixtyone -c /usr/share/seclists/Discovery/SNMP/snmp.txt IPцелевойСистемы
ЭТАП 2. Если мы на 1-м этапе сможем найти строку сообщества и SNMP-службу, которая не требует аутентификации (версии 1 и 2c), то мы сможем запросить внутреннюю системную информацию.
Узнав строку сообщества, мы можем использовать её для подбора отдельных OID и перечисления информации, связанной с ней с помощью инструмента braa:
(Я ХЗ С КОМАНДАМИ BRAA, НЕ ПОНЯЛ КАК ЭТИ КОМАНДЫ ПИСАТЬ. НУЖНО РАЗОБРАТЬСЯ С ПРАВОПИСАНИЕМ, Я ПРОСТО СКОПИРОВАЛ КОМАНДУ ИЗ HTB. ПОНЯТЬ КОМАНДЫ BRAA МОЖНО, ЕСЛИ НОРМАЛЬНО РАЗОБРАТЬСЯ СО СТРОКАМИ СООБЩЕСТВА/COMMUNITY STRINGS)
braa public@10.129.14.128:.1.3.6.*
- public — это строка сообщества/community strings.
- 10.129.14.128 — это IP-адрес целевой системы.
- .1.3.6.* — это хз что.
§ 2.8. ПЕРЕЧИСЛЕНИЕ ORACLE TNS.
2.8.1) ORACLE TNS (OTNS) — это протокол связи, который облегчает взаимодействие по сетям между базами данных Oracle и приложениями. Прослушиватель OTNS-сервера по умолчанию работает через TCP-порт 1521.
SID (SYSTEM IDENTIFIER) — это уникальное имя в Oracle RDBMS (СУБД), который идентифицирует конкретную базу данных. Когда клиент хочет подключится к конкретной базе данных Oracle, он указывает SID базы данных вместе со строкой подключения.
Более подробно об OTNS можно почитать здесь.
ЭТАП 1. Сканировать порт целевого прослушивателя OTNS с помощью Nmap:
sudo nmap -p1521 -sV IPцелевойСистемы --open
В результатах сканирования мы видим, что TCP-порт 1521 открыт и служба OTNS запущена.
ЭТАП 2. Перечислить SID-ы на целевом OTNS с помощью Nmap:
sudo nmap -p1521 -sV IPцелевойСистемы --open --script oracle-sid-brute
В результатах сканирования мы видим SID с именем "XE". Это и есть уникальное имя конкретной БД в Oracle RDBMS (субд).
Чтобы более подробно перечислить SID-ы на целевом OTNS, нужно использовать инструмент ODAT:
sudo odat all -s IPцелевойСистемы
- odat (oracle database attacking tool) — это инструмент для тестирования на проникновение, который позволяет удаленно проверять безопасность баз данных Oracle. ODAT может извлекать имена баз данных, версии, учётные записи пользователей, запущенные процессы, уязвимости, неправильные конфигурации и т.д. Установить инструмент ODAT можно с помощью команды "sudo apt install odat" или из Github.
- all — этот параметр использует все модули инструмента odat.
Мы нашли действительные учётные данные [scott : tiger] для подключения к базе данных Oracle.
ЭТАП 3. Подключиться к целевой базе данных Oracle с помощью инструмента SQLplus:
sqlplus имяПользователя/пароль@IPцелевойСистемы/SID
- scott/tiger — это действительные учётные данные для подключения к базе данных Oracle, которые мы нашли на 2-м этапе.
- 10.129.138.95 — это IP-адрес, на которой работает целевой OTNS.
- XE — это уникальное имя (SID) базы данных в целевой Oracle RDBMS (субд), которую мы нашли на 2-м этапе.
Мы успешно вошли в целевую базу данных Oracle с именем (sid) XE.
* ПРИМЕЧАНИЕ. Если при подключении к базе данных Oracle, SQLplus выдаёт такую ошибку: "sqlplus: error while loading shared libraries: libsqlplus.so: cannot open shared object file: No such file or directory", то нужно выполнить следующую команду:
sudo sh -c "echo /usr/lib/oracle/12.2/client64/lib > /etc/ld.so.conf.d/oracle-instantclient.conf";sudo ldconfig
После этого SQLplus перестанет выдавать ошибку.
ЭТАП 4. Перечислить целевую базу данных Oracle, к которой мы подключились на предыдущем этапе. Для взаимодействия с БД Oracle нужно использовать команды SQLplus:
- select table_name from all_tables; — вывести список всех доступных таблиц в текущей базе данных.
- select * from user_role_privs; — вывести привилегии текущего пользователя в базе данных.
- select name, password from sys.user$; — вывести хэши паролей из sys.user$.
Попробуем вывести привилегии текущего пользователя в базе данных Oracle:
select * from user_role_privs;
Мы видим, что у пользователя scott нет административных привилегий (ADM:NO).
Однако мы можем попробовать использовать эту учётную запись для входа в систему в качестве системного администратора базы данных (sysdba), что даст нам более высокие привилегии. Это возможно, когда пользователь имеет соответствующие привилегии (какие? DEF:YES?):
sqlplus имяПользователя/пароль@IPцелевойСистемы/SID as sysdba
- scott/tiger — это действительные учётные данные для подключения к базе данных Oracle, которые мы нашли на 2-м этапе.
- 10.129.138.95 — это IP-адрес, на которой работает целевой OTNS.
- XE — это уникальное имя (SID) базы данных в целевой Oracle RDBMS (субд), которую мы нашли на 2-м этапе.
- as sysdba — эта команда позволяет войти в базу данных Oracle в качестве системного администратора.
Когда снова выведем привилегии текущего пользователя в базе данных Oracle, то увидим что у нас теперь больше привилегий:
ЭТАП 5. Далее мы можем извлечь хэши паролей из sys.user$:
select name, password from sys.user$;
Можно также извлечь хэши паролей из БД Oracle, загрузив на целевую систему веб-оболочку. Однако для этого требуется, чтобы на целевом сервере был запущен веб-сервер, и следовательно нам нужно знать точное расположение корневого каталога этого веб-сервера.
Тем не менее, если мы знаем, с каким типом целевой системы мы имеем дело, то можно попробовать следующие пути по умолчанию:
Cоздадим простой текстовый файл со строкой, который будем загружать в целевую систему (как мы понимаем, вместо текстового файла можно будет загружать веб-оболочку):
echo "Hello peki-cheki" > webshell.txt
Мы создали текстовый файл (webshell.txt) со строкой "Hello peki-cheki".
Далее нужно загрузить созданный текстовый файл в целевую систему:
sudo odat utlfile -s IPцелевойСистемы -d SID -U scott -P tiger --sysdba --putFile C:\\inetpub\\wwwroot webshell.txt /home/gz/webshell.txt
- utlfile —
- -d XE — это уникальное имя (SID) базы данных в целевой Oracle RDBMS, которую мы нашли на 2-м этапе.
- -U scott — это имя пользователя для подключения к базе данных Oracle, который мы нашли на 2-м этапе.
- -P tiger — это пароль пользователя "scott", который мы нашли на 2-м этапе.
- --sysdba — эта команда позволяет выполнять команды в базе данных Oracle в качестве системного администратора.
- putFile C:\\inetpub\\wwwroot testing.txt — это корневой каталог целевого веб-сервера.
- webshell.txt — под каким именем будет сохранён загружаемый текстовый файл.
- /home/gz/webshell.txt — это месторасположение загружаемого текстового файла.
Мы загрузили текстовый файл "webshell.txt" в целевую систему. Можно проверить, работает ли загруженный файл с помощью инструмента curl:
curl -X GET http://IPцелевойСистемы/webshell.txt
Мы получили от целевого сервера ответ со строкой "Hello peki-cheki" из загруженного текстового файла (webshell.txt).
§ 2.9. ПЕРЕЧИСЛЕНИЕ IPMI.
2.9.1) IPMI (FILE TRANSFER PROTOCOL) — это набор стандартизированных спецификаций для аппаратных систем управления хостом, которые используются для управления и мониторинга системы. IPMI работает через UDP-порт 623.
Более подробно об IPMI можно почитать здесь.
ЭТАП 1. Сканировать целевой IPMI с помощью Nmap:
sudo nmap -sU --script ipmi-version -p 623 IPцелевойСистемы
- --script ipmi-version — это скрипт Nmap для сканирования IPMI.
- -p 623 — это порт на котором работает IPMI.
Сканировать целевой IPMI можно с помощью модуля Metasploit IPMI Information Discovery (auxiliary/scanner/ipmi/ipmi_version):
ЭТАП 2. Вытащить учётные данные по умолчанию из BMC. Часто администраторы не меняют имя учётной записи и пароль по умолчанию в BMC, поэтому их можно найти с помощью различных инструментов.
Рассмотрим учётные данные по умолчанию для некоторых производителей систем:
- [root:calvin] — Dell iDRAC.
- [Administrator:cлучайная строка из 8 символов, состоящая из цифр и заглавных букв] — HP iLO.
- [ADMIN:ADMIN] — Supermicro IPMI.
В IPMI 2.0 есть уязвимость протокола RAKP, когда в процессе аутентификации сервер отправляет клиенту солёный хэш SHA1/MD5 пароля пользователя до того, как произойдет аутентификация. Это может быть использовано для получения хеша пароля для любой! действительной учётной записи пользователя в BMC.
Эта уязвимость является критически важным компонентом спецификации IPMI. Клиенты могут использовать очень длинные, трудно взламываемые пароли или внедрять правила сегментации сети, чтобы ограничить прямой доступ к BMC.
Для извлечения хешей IPMI можно использовать модуль Metasploit IPMI 2.0 RAKP Remote SHA1 Password Hash Retrieval (auxiliary/scanner/ipmi/ipmi_dumphashes):
Metasploit извлёк имя учётной записи и хеш значение пароля (admin:1911...0438). Исходя из полученного результата можно сказать, что целевым производителем является HP iLO.
ЭТАП 3. Взломать найденный хеш пароля с помощью инструмента Hashcat. Если целевой производитель HP iLO (который мы нашли на 2-м этапе) использует заводской пароль по умолчанию, то можно использовать следующую команду, которая испробует все комбинации заглавных букв и цифр для создания восьмизначного пароля:
hashcat -m 7300 ipmi.txt -a 3 ?1?1?1?1?1?1?1?1 -1 ?d?u
- -m 7300 — это режим для взлома хешей паролей в автономном режиме.
- ipmi.txt — это файл с найденными хешами паролей (в нашем случае, мы нашли один хеш и записали его в файл "ipmi.txt").
- -a 3 ?1?1?1?1?1?1?1?1 — ???
- -1 ?d?u — ???
Однако, процесс взлома будет невероятно долгим, статус его завершения можно посмотреть в разделе Restore.Point. После завершения взлома расшифрованный хеш будет выведен в самом конце результатов сканирования.
Кроме того, взломать хеш пароля можно с помощью словаря, без использования комбинации заглавных букв и цифр:
hashcat -m 7300 ipmi.txt -a 3 /usr/share/wordlists/rockyou.txt -1 ?d?u
- -m 7300 — это режим для взлома хешей паролей в автономном режиме.
- ipmi.txt — это файл с найденными хешами паролей (в нашем случае, мы нашли один хеш и записали его в файл "ipmi.txt").
- -a 3 /usr/share/wordlists/rockyou.txt — это путь к словарю.
- -1 ?d?u — ???
Процесс взлома будет быстрым в отличие от предыдущего способа. Мы получили расшифрованный хеш пароля — trinity.
Важно не упускать из виду IPMI во время внутренних тестов на проникновение, поскольку мы не только можем получить доступ к веб-консоли BMC, но и ввести взломанный пароль BMC в других системах. Например, в одном из таких случаев, пентестеры получили хэш IPMI, взломали его в автономном режиме с помощью Hashcat и смогли подключиться через SSH ко многим критически важным серверам в среде от имени пользователя root и получить доступ к веб-консолям управления для различных инструментов мониторинга сети.
Мы могли бы попытаться войти в BMC с помощью выявленных учётных данных. Если бы пароль был чем-то более уникальным, то можно было бы проверить его повторное использование в других системах.
IPMI очень распространен в сетевых средах, поскольку сисадминам должны иметь возможность удалённого доступа к серверам в случае сбоя или выполнять определенные задачи по обслуживанию, для выполнения которых им традиционно пришлось бы физически находиться перед сервером. Эта простота администрирования сопряжена с риском раскрытия хэшей паролей кому-либо в сети и может привести к несанкционированному доступу, сбою системы и даже удалённому выполнению кода. Проверка IPMI должна быть частью внутреннего тестирования на проникновение для любой среды, которую мы оцениваем.
§ 2.10. ПЕРЕЧИСЛЕНИЕ SSH.
2.10.1) SSH (SECURE SHELL) — это сетевой протокол для удалённого управления операционной системой. SSH позволяет двум компьютерам устанавливать зашифрованное и прямое соединение в потенциально незащищенной сети, что предотвращает перехват потока данных третьими лицами. SSH работает по умолчанию через TCP-порт 22.
Более подробно об SSH можно почитать здесь.
ЭТАП 1. Сканировать целевой SSH-сервер с помощью инструмента ssh-audit (установить через команду "sudo apt install ssh-audit" или из GitHub):
Данный инструмент проверил конфигурацию на стороне клиента и сервера и показал некоторую общую информацию, а также алгоритмы шифрования используемые клиентом и сервером.
Мы видим баннер c версией сервера OpenSSH (SSH-2.0-OpenSSH_8.2p1). По умолчанию баннеры начинаются с версии протокола, который может быть использован для связи с сервером, а затем с версии самого сервера. SSH-2.0 означает, что можно использовать версию протокола SSH-2, а дело мы имеем с сервером OpenSSH версии 8.2p1.
____________________________________________________________
Подробный вывод конфигураций соединения с сервером OpenSSH также может содержать иную важную информацию.
ssh -v cry0l1t3@10.129.202.5 -o PreferredAuthentications=password
Для потенциальных атак методом подбора пароля мы можем указать метод аутентификации с помощью опции клиента SSH. PreferredAuthentications.
Для потенциальных атак методом "грубой силы" мы можем указать метод аутентификации с помощью опции SSH client PreferredAuthentications.
____________________________________________________________
ЭТАП 2. Сканировать инструмент Rsync на целевой системе с помощью Nmap:
sudo nmap -sV -p 873 IPцелевойСистемы
Мы видим, что Rsync работает с использованием протокола 31.
______________________________________________________________________________________
Rsync — это инструмент для локального и удалённого копирования файлов. Его используют для локального копирования файлов на нужный компьютер и на удалённый хост или с удалённого хоста. Rsync работает по умолчанию через порт 873 (TCP или UDP?).
Rsync использует алгоритм дельта-передачи (delta-transfer) данных, который уменьшает объём данных, передаваемых по сети, если версия файла уже существует на целевом хосте. Он отправляет только различия между исходным файлом и более старой версией файла, который находится на целевом сервере.
Rsync часто используется для резервного копирования и зеркалирования. Он находит файлы, которые необходимо передать, просматривая файлы, размер которых изменился или время последнего изменения файлов.
Rsync можно настроить на использование протокола SSH для безопасной передачи файлов путём добавления поверх установленного соединения с SSH-сервером.
В данном руководстве рассмотрены некоторые способы злоупотребления инструментом Rsync. Если мы обнаружим учётные данные во время пентеста и столкнёмся с Rsync на внутреннем (или внешнем) хосте, всегда стоит проверить повторное использование пароля, поскольку можно получить некоторые конфиденциальные файлы, которые могут быть использованы для получения удаленного доступа к целевой системе.
______________________________________________________________________________________
Далее нужно протестировать инструмент Rsync, чтобы посмотреть, к чему мы можем получить доступ:
Мы видим общий ресурс под названием "dev", который нужно перечислить:
rsync -av --list-only rsync://IPцелевойСистемы/dev
Мы нашли интересные файлы (build.sh и secrets.yaml), которые стоит извлечь для дальнейшего изучения. А также нашли каталог (.ssh), который может содержать SSH-ключи.
Отсюда можно синхронизировать все найденные файлы с нашим атакующим компьютером с помощью следующей команды:
rsync -av rsync://127.0.0.1/dev.
- 127.0.0.1 — это чей IP-адрес? Возможно вместо этого адреса нужно записать целевой IP-адрес или свой IP-адрес.
Если Rsync использует для передачи файлов протокола SSH, нужно включить в нашу команду параметр -e ssh или -e "ssh -p2222" (если для SSH используется нестандартный порт. Вместо порта 2222 может быть и другой порт).
Данное руководство поможет лучше понять, как передавать файлы с помощью Rsync через протокол SSH.
ЭТАП 3. Сканировать R-Services на целевой системе с помощью Nmap:
sudo nmap -sV -p 512,513,514 IPцелевойСистемы
Мы видим, что все три порта, на котором работают R-Services, открыты на целевой системе.
______________________________________________________________________________________
R-Services — это набор служб для обеспечения удалённого доступа или передачи команд между хостами Unix по протоколу TCP/IP. Эти службы работают через TCP-порты 512, 513, 514.
R-Services чаще всего используются коммерческими операционными системами, такими как Solaris, HP-UX и AIX. Хотя в настоящее время они встречаются реже, мы время от времени можем столкнуться с ними во время внутренних тестов на проникновение.
Первоначально r-services были фактическим стандартом для удалённого доступа между операционными системами Unix, пока они не были заменены протоколами и командами SSH из-за присущих им недостатков безопасности.
Основная проблема r-services и одна из главных причин по которой их заменили на протокол SSH — проблемы, связанные с контролем доступа. R-services полагаются на доверенную информацию, которую отправляет удалённый клиент на хост-компьютер, на котором клиенты пытаются пройти аутентификацию.
По умолчанию r-services используют Pluggable Authentication Modules (PAM) для аутентификации пользователей на удалённой системе. Но эту аутентификацию можно обойти с помощью системных файлов /etc/hosts.equiv и .rhosts, которые содержат список хостов (IP-адреса или имена хостов) и пользователей, которым доверяет локальный хост при попытке подключения с помощью r-commands.
Кроме того, r-services передают информацию между клиентом и сервером по сети в незашифрованном виде, что позволяет злоумышленникам перехватывать сетевой трафик с помощью MITM-атак.
R-Services доступны только с помощью набора программ — r-commands:
- rcp [rshd-демон] [TCP-порт 514] — копирует файл или каталог в двух направлениях: из локальной системы в удалённую систему (и наоборот) или из одной удалённой системы в другую удалённую систему. Работает как команда "cp" в Linux, но не выводит пользователю предупреждения о перезаписи существующих файлов в системе.
- rsh [rshd-демон] [TCP-порт 514] — открывает shell-оболочку на удалённом компьютере без процедуры входа в систему. Для проверки используются доверенные записи в файлах /etc/hosts.equiv и .rhosts.
- rexec [rexecd-демон] [TCP-порт 512] — позволяет пользователю запускать shell-команды на удалённом компьютере. Требуется аутентификация с использованием имени пользователя и пароля через незашифрованный сетевой сокет. Аутентификация переопределяется доверенными записями в файлах /etc/hosts.equiv и .rhosts.
- rlogin [rlogind-демон] [TCP-порт 513] — позволяет пользователю подключаться к удалённому хосту через сеть. Работает аналогично telnet, но может подключаться только к Unix-подобным хостам. Аутентификация переопределяется доверенными записями в файлах /etc/hosts.equiv и .rhosts.
- rstat
- ruptime
- rwho (remote who)
Файл /etc/hosts.equiv содержит список доверенных хостов и используется для предоставления доступа к другим системам в сети. Когда пользователи на одном из этих хостов пытаются получить доступ к системе, им автоматически предоставляется доступ без дальнейшей аутентификации.
Файл hosts.equiv распознается как глобальная конфигурация для всех пользователей в системе, тогда как файл .rhosts предоставляет конфигурацию для каждого пользователя.
Записи в этих файлах могут выглядеть следующим образом:
Оба файла соответствуют определенному синтаксису:
[имяПользователя] [имяХоста] или [имяПользователя] [IP-адрес]
Кроме того, модификатор + может использоваться в этих файлах в качестве подстановочного знака для указания чего угодно. В этом примере модификатор + позволяет любому внешнему пользователю получить доступ к r-commands из учетной записи пользователя htb-student через хост с IP-адресом 10.0.17.10.
Неправильные конфигурации в любом из этих файлов могут позволить злоумышленнику пройти аутентификацию как другой пользователь без учетных данных, то потенциально может привести к удалённому выполнению кода (RCE).
______________________________________________________________________________________
ЭТАП 4. Войти на целевой хост с помощью r-команды rlogin:
rlogin IPцелевойСистемы -l имяПользователя
- -l htb-student — это имя пользователя, который хранится в файле .rhosts на целевой системе (HTB не показал, как найти это имя пользователя, просто тупо вывел содержимое файла .rhosts в целевой системе с помощью команды "cat", как будто блять я на своём компе тоже могу ввести команду "cat" и она мне выведет содержимое файла .rhosts в целевой системе. Ебать)
Мы успешно вошли в целевую систему под учётной записью htb-student на удалённом хосте. Это случилось из-за неправильных настроек в файле .rhosts (см. выше неправильные настройки).
ЭТАП 5. После успешного входа в систему можно использовать r-команду rwho для вывода списка всех интерактивных сеансов в локальной сети путем отправки запросов на UDP-порт 513:
Из результатов мы видим, что пользователь "htb-student" аутентифицирован на хосте workstn01, а пользователь "root" аутентифицирован на хосте web01. Мы можем использовать это в своих интересах при определении потенциальных имен пользователей для использования при дальнейших атаках на хосты по сети.
Однако, демон rwho периодически передаёт информацию о вошедших в систему пользователях, поэтому может быть полезно отслеживать сетевой трафик.
Чтобы получить более подробную информацию обо всех вошедших в систему пользователях в сети можно использовать r-команду rusers:
Мы получили более подробный отчет обо всех вошедших в систему пользователях в сети, включая такую информацию, как имя пользователя; имя хоста компьютера, к которому был осуществлен доступ; TTY, в который вошел пользователь; дату и время входа пользователя в систему; количество времени с момента ввода пользователем данных на клавиатуре; удалённый хост, с которого пользователь вошёл в систему (если применимо).
ЭТАП 6. Если на целевом SSH-сервере у нас есть права для чтения каталогов с ssh-ключами, то мы можем использовать их для входа на SSH-сервер от чужого имени. Эти ssh-ключи находятся в следующих каталогах:
ЭТАП 1. Сначала нужно открыть на целевом SSH-сервере файл с ssh-ключами:
Затем нужно скопировать ssh-ключ и сохранить его на нашем компьютере в текстовом файле под именем id_rsa (обязательно с таким именем!):
ЭТАП 2. Нужно изменить разрешения для файла с ssh-ключами на более строгие, поскольку если ssh-ключи имеют слабые разрешения, то SSH-сервер не позволит им работать:
И теперь с этим преобразованным файлом с ssh-ключами можно войти на SSH-сервер:
ssh root@IPцелевойСистемы -i id_rsa
Готово! Мы вошли на SSH-сервер с правами root-пользователя. Вместо root-пользователя может быть иной другой пользователь, ключи которого мы найдём.
СПОСОБ №2. Данный способ предполагает, что у нас уже есть удалённый доступ к целевой системе.
ЭТАП 1. Сначала нужно создать новый ssh-ключ:
- key — файл с закрытым ssh-ключом для входа в SSH-сервер.
- key.pub — файл с открытым ssh-ключом, который выведен в терминале выше. Этот файл нельзя открыть просто так.
ЭТАП 2. Скопировать открытый ssh-ключ и вставить его на целевой системе в файл /root/.ssh/authorized_keys:
echo "ssh-rsa открытыйSSH-ключ gz@gz" >> /root/.ssh/authorized_keys
Мы вставили открытый ssh-ключ в целевую систему.
ЭТАП 3. Войти в SSH-сервер под именем root-пользователя, используя файл «key» с закрытым ssh-ключом: