Продолжаем серию постов, связанных с расширением возможностей BloodHound. Сегодня рассмотрим способ добавления результатов атаки распыления пароля в базу BloodHound. Тема не является новой, другие варианты можно почитать здесь и здесь.
BloodHound – это популярный инструмент, который используется для сбора и анализа данных во время проведения пентеста внутренней инфраструктуры на базе Active Directory. Этот инструмент позволяет визуализировать некорректные настройки объектов Active Directory и строить цепочки атак. Основная его особенность — использование теории графов при анализе данных.
Предыдущие наши посты по теме расширения возможностей BloodHound здесь и здесь.
В атаке распыления пароля один пароль подставляется ко всем учетным записям. Это снижает риск блокировки учетки, но все же не стоит злоупотреблять это техникой. Добавление результатов такой атаки в базу BloodHound, возможно, покажет новые пути компрометации домена.
Допустим, мы обнаружили пароль пользователя в атрибуте Description или в результате атаки Kerberoasting. Чтобы отразить это в BloodHound, можно выполнить следующий запрос Cypher:
MATCH (u:User {name:”USER@WINDOMAIN.LOCAL”}) SET u.ClearTextPassword = “Qwerty123” SET u.owned = True
После выполнения этого запроса в свойствах объекта добавится новое поле свойств ClearTextPassword с указанным паролем. В BloodHound оно будет отображаться в разделе EXTRA PROPERTIES:
![](https://habrastorage.org/getpro/habr/upload_files/9ff/a9c/6bf/9ffa9c6bf1bd97be8f8e2b259644305e.jpg)
Для атак распыления подходят шаблонизированные пароли. В качестве инструмента можно использовать DomainPasswordSpray. Синтаксис запуска будет следующим:
Invoke-DomainPasswordSpray -Password Qwerty123
В результате будут получены учетные записи, имеющие такой же пароль:
![](https://habrastorage.org/getpro/habr/upload_files/291/8fc/2f6/2918fc2f61722308574933849aaec1a9.jpg)
Если записей будет немного, их можно добавить вручную с помощью запроса Cypher, используемого выше. Но если запросов будет много, вводить их вручную неудобно и в данной ситуации можно изменить вывод в самом PowerShell-скрипте, который сразу будет создавать строку запроса Cypher.
Найти строку вывода информации в консоль (строка 550)
Write-Host -ForegroundColor Green "[*] SUCCESS! User:$User Password:$Password"
И изменить ее на следующую:
Write-Host -ForegroundColor Green "MATCH (u :User) WHERE u.name =~ '(?i)$User`@$DomainObject' SET u.ClearTextPassword = '$Password' SET u.owned = True;"
После запуска измененной версии скрипта будет получен следующий результат:
Достаточно скопировать полученные данные и вставить их в строку запросов Neo4j Brower и выполнить. Проверить, что все создалось корректно, можно с помощью запроса:
MATCH (u:User) WHERE u.ClearTextPassword = "Qwerty123" RETURN u.name,u.ClearTextPassword
![](https://habrastorage.org/getpro/habr/upload_files/3e9/26e/739/3e926e739416fe8beaff96e1d30c6f55.jpg)
Теперь можно построить новые пути компрометации. Например, до группы доменных администраторов, запрос Cypher будет выглядеть так:
MATCH p=AllShortestPaths((u:User)-[*1..]->(g: Group {name:"DOMAIN ADMINS@WINDOMAIN.LOCAL"})) WHERE u.owned = True RETURN p
![](https://habrastorage.org/getpro/habr/upload_files/588/068/28d/58806828dd26ba61e628671e11f75496.jpg)
Заключительным шагом станет создание связи SharePasswordWith между всеми объектами, которые имею одинаковый пароль. Запрос Cypher будет таким:
MATCH (n:User) WHERE n.ClearTextPassword = "Qwerty123"
MATCH (m:User) WHERE m.ClearTextPassword = "Qwerty123"
FOREACH (_ IN CASE WHEN n <> m THEN [1] END | MERGE (n)-[r:SharePasswordWith]->(m))
Стоит рассмотреть его более подробно. Первые два запроса создают одинаковые списки пользователей с одинаковым паролем. Третий запрос выполняет всю трудную работу: берет два списка сравнивает их, чтобы не было совпадения узлов, и создает связь SharePasswordWith.
Проверить, что все связи создались корректно, можно, выполнив следующий запрос Cypher:
MATCH p=(u1:User)-[r:SharePasswordWith]-(u2:User) return p
![](https://habrastorage.org/getpro/habr/upload_files/6b8/069/9ef/6b80699ef4e8527eed387001107f91c0.jpg)
Повторив запрос поиска коротких путей до группы администраторов домена, получим следующую картину:
![](https://habrastorage.org/getpro/habr/upload_files/eae/0f5/0a1/eae0f50a189d6ba612072161745319e2.jpg)
Необходимо помнить, что интерфейс BloodHound ничего не знает о новых созданных связях. Поэтому можно добавить новые связи в const fullEdgeList (31 строка) в файле AppContainer.jsx и заново скомпилировать программу.
На этом все, до новых встреч!
Автор: Дмитрий Неверов, руководитель группы анализа защищенности внутренней инфраструктуры, «Ростелеком-Солар»
ссылка на оригинал статьи https://habr.com/ru/articles/719714/
Добавить комментарий