"MATCH (m {objectid:'$ObjectSID'})
MATCH (n {objectid:'$ID'}) MERGE
(m)-[r: WriteUserAccountControl]->(n) SET r.isacl=TRUE;"
}
}
}
}
}
После запуска скрипта получим три строки Cypher-запроса, которые необходимо загрузить в базу. Так как запросов немного, то для загрузки данных воспользуемся браузером neo4j.
Рис. 4.46. Результат сбора информации
Если сейчас мы попытаемся проверить связи между объектами в BloodHound с помощью формы поиска путей, мы ничего не увидим. Необходимо добавить связи в код BloodHound.
Добавление новых связей в BloodHoundОткрываем файл
AppContainer.jsx
, который находится в src
, находим массив fullEdgeList
и добавляем новые связи:…
const fullEdgeList = [
…
'SeRemoteInteractiveLogonRight',
'SeInteractiveLogonRight',
'WriteScriptPath',
'WriteUserAccountControl',
'WriteGPLink'
];
…
Сохраняем файл и открываем файл
index.js
в том же каталоге, находим строчку global.appStore
, двигаемся до edgeScheme
и добавляем:…
global.appStore = {
dagre: true,
…
edgeScheme:{
…
SeRemoteInteractiveLogonRight:'tapered',
SeInteractiveLogonRight:'tapered'
,WriteScriptPath:'tapered',
UserAccountControl:'tapered',
WriteGPLink:'tapered',
},
…
Находим строчку
lowResPalette
и в edgeScheme
добавляем:…
lowResPalette:{
…
edgeScheme:{
…
SeRemoteInteractiveLogonRight:'line',
SeInteractiveLogonRight:'line'
,WriteScriptPath:'line',
WriteUserAccountControl:'line',
WriteGPLink:'line'
},
…
Находим строчку
if (typeof conf.get('edgeincluded')
и там тоже добавляем наши связи:…
if (typeof conf.get('edgeincluded') === 'undefined') {
conf.set('edgeincluded', {
…
SeRemoteInteractiveLogonRight: true,
SeInteractiveLogonRight: true
,WriteScriptPath: true,
WriteUserAccountControl: true,
WriteGPLink: true,
});
…
Сохраняем измененный файл и собираем приложение:
npm run build: win32
Запускаем обновленную версию BloodHound и проверяем пути от
user
до office
.
Рис. 4.47. Короткий путь от user до office
Изменение формы Добавление связейВ качестве дополнения возможностей BloodHound добавим новые связи в форму Добавление связей, в разделе интерфейса BloodHound мы уже сталкивались с этой формой.
Переходим в директорию
src\components\Modals
и открываем на редактирование файл AddEdgeModal.jsx.
Находим строчку Edge Type
и ниже всех в списке имен связей добавляем наши новые связи:…
Edge Type
value={edgeValue}
…
DumpSMSAPassword
Control
…
Сохраняем измененный файл и собираем приложение:
npm run build: win32
Запускаем обновленную версию BloodHound, на пустом месте нажимаем правую клавишу мыши и выбираем Add Edge. Нажмем на список типов узлов и увидим, что наши новые связи появились в этом списке.
Рис. 4.48. Добавление связей в форму
Добавление в фильтр запросовВыполним еще одно дополнение и добавим ACL для фильтрации запроса при использовании функции поиска путей.
Открываем файл
EdgeFilter.jsx,
расположенный в \src\components
\SearchContainer\EdgeFilter
, находим строку title='ACL Edges'
и добавляем в конце блока наши связи:…
title='ACL Edges'
edges={[
…
'WriteAccountRestrictions',
'WriteScriptPath',
'WriteUserAccountControl',
'WriteGPLink',
]}
sectionName='ACL'
…
Ниже, после строки
name='SyncLAPSPassword' />
, также добавим наши связи:…
title='Containers'
…
Сохраняем измененный файл и собираем приложение:
npm run build: win32
Запустим обновленную версию BloodHound. Откроем фильтры и увидим, что появились наши добавленные значения (рис. 4.49).
Рис. 4.49. Добавленные фильтры
Создание подсказкиКак уже говорилось в разделе об интерфейсе BloodHound, связи имеют подсказку по эксплуатации. И сейчас мы создадим подсказку для
WriteScriptPath
.Откроем файл
HelpModal
, расположенный в src\components\Modals
, и в конце импорта внешних файлов добавим:…
import AZLogicAppContributor from './HelpTexts/AZLogicAppContributor/AZLogicAppContributor';
import AZNodeResourceGroup from './HelpTexts/AZNodeResourceGroup/AZNodeResourceGroup';
import WriteScriptPath from './HelpTexts/WriteScriptPath/WriteScriptPath';
…
Находим строку
const components
и добавим в нее следующий код:…
const components = {
GenericAll: GenericAll,
…
AZNodeResourceGroup: AZNodeResourceGroup,
WriteScriptPath: WriteScriptPath,
};
…
Сохраняем файл.
Теперь переходим в директорию
src\components\Modals\HelpText
и сделаем копию директории AdminTo