<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>CyberSecrets</title><subtitle>Блог о наступательной безопасности.
Вся информация представлена в обучающих целях.</subtitle><author><name>CyberSecrets</name></author><id>https://teletype.in/atom/cyb3r53cr3t5</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/cyb3r53cr3t5?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@cyb3r53cr3t5?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=cyb3r53cr3t5"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/cyb3r53cr3t5?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-07-05T23:41:03.142Z</updated><entry><id>cyb3r53cr3t5:pentest_task_7</id><link rel="alternate" type="text/html" href="https://teletype.in/@cyb3r53cr3t5/pentest_task_7?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=cyb3r53cr3t5"></link><title>Задача для собеседования #7</title><published>2026-07-02T07:49:48.911Z</published><updated>2026-07-02T07:49:48.911Z</updated><category term="zadachi" label="Задачи"></category><summary type="html">&lt;img src=&quot;https://img1.teletype.in/files/88/05/88054658-315e-4338-a627-0f391204d5a8.png&quot;&gt;Задача с несколькими входящими данными, на мой взгляд достаточно интересная.</summary><content type="html">
  &lt;figure id=&quot;3opM&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/88/05/88054658-315e-4338-a627-0f391204d5a8.png&quot; width=&quot;573&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;i1vc&quot;&gt;Задача с несколькими входящими данными, на мой взгляд достаточно интересная.&lt;/p&gt;
  &lt;h2 id=&quot;TNbL&quot;&gt;Сценарий&lt;/h2&gt;
  &lt;p id=&quot;sz60&quot;&gt;После сбора информации обнаружилось, что группа &lt;code&gt;AUTHENTICATED USERS&lt;/code&gt; имеет права &lt;code&gt;GenericWrite&lt;/code&gt; на пользователя &lt;code&gt;USER-456&lt;/code&gt;. Сам пользователь не обладает никакими значимыми правами и доступами.&lt;/p&gt;
  &lt;p id=&quot;gGPT&quot;&gt;Изучение групповых политик показало, что существует групповая политика &lt;code&gt;WS LOCAL ADMIN&lt;/code&gt; с интересной записью.&lt;/p&gt;
  &lt;figure id=&quot;d8FJ&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/d5/97/d5975fb5-e8cc-43ee-b833-5b0d360f587e.png&quot; width=&quot;1061&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;V7BO&quot;&gt;Сама политика применяется &lt;code&gt;WS LOCAL ADMIN&lt;/code&gt; к OU &lt;code&gt;WORKSTATION&lt;/code&gt;, в которую входит рабочая станция &lt;code&gt;WS-567&lt;/code&gt;. На этой рабочей станции есть сессия пользователя &lt;code&gt;ADM_PETROV&lt;/code&gt;, входящего в группу &lt;code&gt;SERVER ADMINS&lt;/code&gt;.&lt;/p&gt;
  &lt;figure id=&quot;qB29&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/ce/2b/ce2b87a4-96af-47c5-bdf0-366fb412d0cc.png&quot; width=&quot;949&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;W7hU&quot;&gt;Дополнительные условия&lt;/h3&gt;
  &lt;ul id=&quot;dfw9&quot;&gt;
    &lt;li id=&quot;n05b&quot;&gt;Есть доменная учетная запись PENTESTER.&lt;/li&gt;
    &lt;li id=&quot;SnHY&quot;&gt;На всех хостах в сети установлены последние обновления.&lt;/li&gt;
    &lt;li id=&quot;ulje&quot;&gt;Настройки по умолчанию.&lt;/li&gt;
    &lt;li id=&quot;lKRr&quot;&gt;Уровень домена – 2016.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;rIHB&quot;&gt;Цель&lt;/h2&gt;
  &lt;ul id=&quot;8bi8&quot;&gt;
    &lt;li id=&quot;Ctp8&quot;&gt;Получить привилегии группы &lt;code&gt;SERVER ADMINS&lt;/code&gt;.&lt;/li&gt;
  &lt;/ul&gt;

</content></entry><entry><id>cyb3r53cr3t5:Tag_Tier_Zero</id><link rel="alternate" type="text/html" href="https://teletype.in/@cyb3r53cr3t5/Tag_Tier_Zero?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=cyb3r53cr3t5"></link><title>Tag_Tier_Zero и не только</title><published>2026-06-25T07:49:14.230Z</published><updated>2026-06-25T07:49:14.230Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/15/ef/15efb35b-71b9-430b-9833-96885ddd3a08.png"></media:thumbnail><category term="blood-hound" label="BloodHound"></category><tt:hashtag>bloodhound</tt:hashtag><tt:hashtag>внутрянка</tt:hashtag><tt:hashtag>cypher</tt:hashtag><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/74/9e/749e4d1e-8a54-4e57-a537-e153c12e5bde.png&quot;&gt;Добавление меток (label) или определенных свойств узлам позволяют группировать узлы по общему признаку и использовать их в запросах Cypher вместо общего перечисления. Так, например, для всех рабочих станций можно добавить метку &quot;Workstation&quot;, а для всех серверов &quot;Server&quot; и в зависимости от потребностей использовать эти метки в запросах.</summary><content type="html">
  &lt;figure id=&quot;Ec5y&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/74/9e/749e4d1e-8a54-4e57-a537-e153c12e5bde.png&quot; width=&quot;931&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;eUOu&quot;&gt;Добавление меток (label) или определенных свойств узлам позволяют группировать узлы по общему признаку и использовать их в запросах Cypher вместо общего перечисления. Так, например, для всех рабочих станций можно добавить метку &amp;quot;&lt;em&gt;Workstation&lt;/em&gt;&amp;quot;, а для всех серверов &amp;quot;&lt;em&gt;Server&lt;/em&gt;&amp;quot; и в зависимости от потребностей использовать эти метки в запросах.&lt;/p&gt;
  &lt;p id=&quot;010p&quot;&gt;Эволюция таких меток в BloodHound была следующей: в BloodHound Legacy использовались свойства &amp;quot;&lt;em&gt;n.highvalue&lt;/em&gt;&amp;quot; для определения узлов с высокими привилегиями &amp;quot;&lt;em&gt;n.owned&lt;/em&gt;&amp;quot; – скомпрометированный узел, в BloodHound CE начали использовать свойство &amp;quot;&lt;em&gt;n.system_tag&lt;/em&gt;&amp;quot;, в которой прописывались метки &amp;quot;&lt;em&gt;admin_tier_0&lt;/em&gt;&amp;quot; для привилегированных групп и &amp;quot;&lt;em&gt;owned&lt;/em&gt;&amp;quot; для скомпрометированных. С конца июля 2026 года будет использоваться только метки &amp;quot;&lt;em&gt;Tag_Tier_Zero&lt;/em&gt;&amp;quot; и &amp;quot;&lt;em&gt;Tag_Owned&lt;/em&gt;&amp;quot;. Это связанно с тем, что индексированные метки работают быстрее.&lt;/p&gt;
  &lt;p id=&quot;tPn2&quot;&gt;Если вы следите за обновлениями BloodHound CE учитывайте это в своих собственных Cypher запросах. Можно использовать универсальный подход в запросах:&lt;/p&gt;
  &lt;pre id=&quot;ghdo&quot;&gt;((n:Tag_Tier_Zero) OR COALESCE(n.system_tags, &amp;#x27;&amp;#x27;) CONTAINS &amp;#x27;admin_tier_0&amp;#x27; OR n.highvalue = TRUE)&lt;/pre&gt;
  &lt;p id=&quot;hUVe&quot;&gt;В этом случае будут проверяться все три варианта. Но для написания быстрых запросов нужно учитывать версию BloodHound.&lt;/p&gt;
  &lt;p id=&quot;Nm8U&quot;&gt;Но зачем останавливаться только на &amp;quot;&lt;em&gt;Tag_Tier_Zero&lt;/em&gt;&amp;quot;? В тировой модели три уровня: на нулевом находятся администраторы домена и им можно ходить только на контроллеры домена, на первом – администраторы серверов, приложений, баз данных и так далее, и они занимаются только серверной инфраструктурой, а на втором уровне это администраторы рабочих станций и всего, что связанно с пользовательским сегментом.&lt;/p&gt;
  &lt;p id=&quot;A8as&quot;&gt;Добавим новые метки &amp;quot;&lt;em&gt;Tag_Tier_One&lt;/em&gt;&amp;quot; и &amp;quot;&lt;em&gt;Tag_Tier_Two&amp;quot;&lt;/em&gt;, но для начала добавим новые индексы:&lt;/p&gt;
  &lt;pre id=&quot;PKU3&quot;&gt;CREATE INDEX IF NOT EXISTS FOR (n:Tag_Tier_One) ON (n.objectid);
CREATE INDEX IF NOT EXISTS FOR (n:Tag_Tier_One) ON (n.name);
CREATE INDEX IF NOT EXISTS FOR (n:Tag_Tier_Two) ON (n.objectid);
CREATE INDEX IF NOT EXISTS FOR (n:Tag_Tier_Two) ON (n.name);&lt;/pre&gt;
  &lt;p id=&quot;sLaT&quot;&gt;Итак, метки определены теперь нужно найти объекты, на которые можно эти метки установить. Делаем запрос на поиск всех групп, у которых в имени есть &lt;strong&gt;ADMIN&lt;/strong&gt;, но исключаем &amp;quot;Tag_Tier_Zero&amp;quot; и выводим имя и описание:&lt;/p&gt;
  &lt;pre id=&quot;lEYO&quot;&gt;MATCH (g:Group) WHERE g.name CONTAINS &amp;#x27;ADMIN&amp;#x27;
AND NOT ((g:Tag_Tier_Zero) OR COALESCE(g.system_tags, &amp;#x27;&amp;#x27;) CONTAINS &amp;#x27;admin_tier_0&amp;#x27; OR g.highvalue = TRUE)
RETURN g.name, g.description&lt;/pre&gt;
  &lt;p id=&quot;RMjT&quot;&gt;Поле description может нам помочь определить к какому уровню относится та или иная группа. А так по имени определяем уровень и устанавливаем новую метку, например мы нашли две группы &lt;strong&gt;SERVER_ADMINS&lt;/strong&gt; и &lt;strong&gt;WORKSTATION_ADMINS&lt;/strong&gt;.&lt;/p&gt;
  &lt;pre id=&quot;qIn1&quot;&gt;MATCH (g1:Group) WHERE g1.name STARTS WITH &amp;#x27;SERVER_ADMINS&amp;#x27; SET g:Tag_Tier_One
MATCH (g2:Group) WHERE g2.name STARTS WITH &amp;#x27;WORKSTATION_ADMINS&amp;#x27; SET g:Tag_Tier_Two&lt;/pre&gt;
  &lt;p id=&quot;loMS&quot;&gt;Добавим членам группы &lt;strong&gt;SERVER_ADMINS&lt;/strong&gt; ту же метку.&lt;/p&gt;
  &lt;pre id=&quot;ubvj&quot;&gt;MATCH (u:Base)-[r:MemberOf*1..]-&amp;gt;(g:Tag_Tier_One) SET u: Tag_Tier_One&lt;/pre&gt;
  &lt;p id=&quot;h9Pp&quot;&gt;Теперь можно использовать эти метки при построении путей, включать или исключать. Например, мы хотим посмотреть есть ли у нас короткие пути от группы доменных пользователей до группы доменных администраторов минуя все &amp;quot;&lt;em&gt;Tag_Tier_One&lt;/em&gt;&amp;quot; узлы:&lt;/p&gt;
  &lt;pre id=&quot;VO17&quot;&gt;MATCH p=AllShortestPaths((m:Group {name:&amp;quot;DOMAIN USERS@DOMAIN.LOCAL&amp;quot;})-[*]-&amp;gt;(n:Group {name:&amp;quot;DOMAIN ADMINS@DOMAIN.LOCAL&amp;quot;}))
WHERE ALL(x IN relationships(p) WHERE x.is_traversable = TRUE)
AND NONE(x in nodes(p) WHERE x:Tag_Tier_One)
RETURN p&lt;/pre&gt;
  &lt;p id=&quot;T5XU&quot;&gt;В этом запросе используется &lt;strong&gt;&lt;em&gt;is_traversable = TRUE&lt;/em&gt;&lt;/strong&gt;, чтобы не перечислять все проходимые ребра.&lt;/p&gt;
  &lt;p id=&quot;KzmN&quot;&gt;Стоит отметить, что в больших сетях могут использоваться сотни различных групп администраторов, но зачастую они разделены по регионам или городам, а функционал будет одинаковым, и поэтому будут иметь общий шаблон наименования. Если определить такой шаблон, то по факту групп администраторов останется в разы меньше.&lt;/p&gt;
  &lt;tt-tags id=&quot;sobN&quot;&gt;
    &lt;tt-tag name=&quot;bloodhound&quot;&gt;#bloodhound&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;внутрянка&quot;&gt;#внутрянка&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;cypher&quot;&gt;#cypher&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry><entry><id>cyb3r53cr3t5:filtering_local_group</id><link rel="alternate" type="text/html" href="https://teletype.in/@cyb3r53cr3t5/filtering_local_group?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=cyb3r53cr3t5"></link><title>Фильтрация локальных групп в BloodHound</title><published>2026-06-11T07:07:33.087Z</published><updated>2026-06-11T07:07:33.087Z</updated><category term="blood-hound" label="BloodHound"></category><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/72/23/7223fcdd-e9c1-4bd9-8ddf-15ff7c5d30bb.png&quot;&gt;В статье мы определили, что есть проходимые и непроходимые связи. Ребра локальных групп LocalToComputer и MemberOfLocalGroup являются непроходимыми. Исключая их мы можем потерять интересные маршруты. Исправим эту ситуацию.</summary><content type="html">
  &lt;figure id=&quot;OLsH&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/72/23/7223fcdd-e9c1-4bd9-8ddf-15ff7c5d30bb.png&quot; width=&quot;698&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;jWLv&quot;&gt;В &lt;a href=&quot;https://teletype.in/@cyb3r53cr3t5/traversable_relationships&quot; target=&quot;_blank&quot;&gt;статье&lt;/a&gt; мы определили, что есть проходимые и непроходимые связи. Ребра локальных групп &lt;strong&gt;&lt;em&gt;LocalToComputer&lt;/em&gt;&lt;/strong&gt; и &lt;strong&gt;&lt;em&gt;MemberOfLocalGroup&lt;/em&gt;&lt;/strong&gt; являются непроходимыми. Исключая их мы можем потерять интересные маршруты. Исправим эту ситуацию.&lt;/p&gt;
  &lt;p id=&quot;zRWi&quot;&gt;Добавим к нашему запросу, состоящему из проходимых ребер, эти два ребра:&lt;/p&gt;
  &lt;pre id=&quot;1lmr&quot;&gt;MATCH p=AllShortestPaths((m:Group {name:&amp;quot;DOMAIN USERS@DOMAIN.LOCAL&amp;quot;})-[r: AddMember|AddSelf|AdminTo|…|WriteSPN|LocalToComputer|MemberOfLocalGroup*1..]-&amp;gt;(n:Group {name:&amp;quot;DOMAIN ADMINS@DOMAIN.LOCAL&amp;quot;}))
RETURN p&lt;/pre&gt;
  &lt;p id=&quot;IsVb&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;QM9D&quot;&gt;Результат будет таким, как показано на рисунке в заголовке. Чаще всего будет встречаться локальная группа &lt;strong&gt;&lt;em&gt;USERS&lt;/em&gt;&lt;/strong&gt; на разных компьютерах. Эта группа позволяет локально подключаться к компьютеру, удаленное подключение невозможно, поэтому нужно исключить ее из нашего запроса.&lt;/p&gt;
  &lt;pre id=&quot;xETS&quot;&gt;MATCH (c)-[r:MemberOfLocalGroup]-&amp;gt;(b) WHERE b.objectid =~ &amp;#x27;(?i).*(-568|-545)&amp;#x27; WITH collect (b) AS excludeGroup
MATCH p=AllShortestPaths((m:Group {name:&amp;quot;DOMAIN USERS@DOMAIN.LOCAL&amp;quot;})-[r: AddMember|AddSelf|AdminTo|…|WriteSPN|LocalToComputer|MemberOfLocalGroup*1..]-&amp;gt;(n:Group {name:&amp;quot;DOMAIN ADMINS@DOMAIN.LOCAL&amp;quot;}))
WHERE NONE(x in nodes(p) WHERE x IN excludeGroup)
RETURN p&lt;/pre&gt;
  &lt;p id=&quot;Trkq&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;SgnB&quot;&gt;Первым запросом мы выбирает все локальные группы из базы, которые соответствуют нашему критерию (&lt;strong&gt;&lt;em&gt;users&lt;/em&gt;&lt;/strong&gt;, &lt;em&gt;iis_iusrs&lt;/em&gt;) и собираем их в коллекцию &lt;strong&gt;&lt;em&gt;excludeGroup&lt;/em&gt;&lt;/strong&gt;. В самом поиске всех коротких путей мы добавляем условие, что в графе не должно встречаться ни одного узла из коллекции &lt;strong&gt;&lt;em&gt;excludeGroup&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;
  &lt;p id=&quot;9jHx&quot;&gt;В результате мы получим более эксплуатируемых граф.&lt;/p&gt;
  &lt;figure id=&quot;uVWV&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/62/38/62382b14-f9ce-4055-8f30-7bf6306b07d4.png&quot; width=&quot;1090&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Opo2&quot;&gt;Дополнительно мы исключили из запроса группу &lt;strong&gt;&lt;em&gt;IIS_IUSRS&lt;/em&gt;&lt;/strong&gt;, этот список можно расширять, добавляя RID в запрос.&lt;/p&gt;
  &lt;p id=&quot;dkKu&quot;&gt;Если вы используете свойство &lt;strong&gt;&lt;em&gt;is_traversable&lt;/em&gt;&lt;/strong&gt;, то нам нужно добавить условие, что в запросе могут быть ребра &lt;strong&gt;&lt;em&gt;LocalToComputer&lt;/em&gt;&lt;/strong&gt; и &lt;strong&gt;&lt;em&gt;MemberOfLocalGroup&lt;/em&gt;&lt;/strong&gt;. И мы все также исключаем узлы с локальными группами из запроса.&lt;/p&gt;
  &lt;pre id=&quot;xGDn&quot;&gt;MATCH (c)-[r:MemberOfLocalGroup]-&amp;gt;(b) WHERE b.objectid =~ &amp;#x27;(?i).*(-568|-545)&amp;#x27; WITH collect (b) AS excludeGroup
MATCH p=AllShortestPaths((m:Group {name:&amp;quot;DOMAIN USERS@DOMAIN.LOCAL&amp;quot;})-[*]-&amp;gt;(n:Group {name:&amp;quot;DOMAIN ADMINS@DOMAIN.LOCAL&amp;quot;})) 
WHERE ANY(x IN relationships(p) WHERE x.is_traversable = TRUE OR type(x) = &amp;quot;LocalToComputer&amp;quot; OR type(x) = &amp;quot;MemberOfLocalGroup&amp;quot;) 
AND NONE(x in nodes(p) WHERE x IN excludeGroup)
RETURN p&lt;/pre&gt;
  &lt;p id=&quot;l5oV&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;rrBF&quot;&gt;Таким образом добавление непроходимых ребер для локальных групп и фильтрация по этим группам могут предоставить интересные маршруты для проведения работ.&lt;/p&gt;

</content></entry><entry><id>cyb3r53cr3t5:create_local_boxes_vagrant_for_goad</id><link rel="alternate" type="text/html" href="https://teletype.in/@cyb3r53cr3t5/create_local_boxes_vagrant_for_goad?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=cyb3r53cr3t5"></link><title>Создаем локальные боксы Vagrant для GOAD</title><published>2026-06-04T08:02:38.308Z</published><updated>2026-06-04T08:02:38.308Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/6c/e1/6ce18bd4-925a-432c-9717-4726a1a01c35.png"></media:thumbnail><category term="laboratoriya" label="Лаборатория"></category><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/39/ce/39ce5343-ff15-43d4-bf82-b2cbad8afe8b.png&quot;&gt;Я много слышал про GOAD, но никогда не разворачивал. И вот я решил посмотреть, что это такое в живую. Однако существует проблема Hashicorp запрещает доступ к образам с российских IP адресов. У меня нет возможности выкачивать несколько гигабайт через VPN, однако есть возможность скачать приложения vagrant и packer. Сегодня я расскажу, как с помощью них можно создать локальные боксы Vagrant для GOAD.</summary><content type="html">
  &lt;figure id=&quot;3Rhx&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/39/ce/39ce5343-ff15-43d4-bf82-b2cbad8afe8b.png&quot; width=&quot;639&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;pJDw&quot;&gt;Я много слышал про GOAD, но никогда не разворачивал. И вот решил посмотреть, что это такое в живую. Однако существует проблема Hashicorp запрещает доступ к образам с российских IP адресов. У меня нет возможности выкачивать несколько гигабайт через VPN, однако есть возможность скачать приложения vagrant и packer. Сегодня я расскажу, как с помощью них можно создать локальные боксы Vagrant для GOAD.&lt;/p&gt;
  &lt;p id=&quot;n1m7&quot;&gt;У меня локальная лаборатория на Windows с использованием VirtualBox в качестве гипервизора. Но техника будет работать и для VMWare со своими особенностями. Для самого GOAD я использовал WSL, но сейчас он нам не нужен. Скачиваем и устанавливаем приложение Vagrant с официального сайта. Клонируем GOAD из репозитория. Скачиваем Packer с официального сайте Hashicorp и распаковываем исполняемый файл в «&lt;em&gt;\GOAD\packer\vagrant\&lt;/em&gt;».&lt;/p&gt;
  &lt;p id=&quot;3CZM&quot;&gt;Для взаимодействия Packer с приложениями Vagrant и VirtualBox необходимо установить плагины:&lt;/p&gt;
  &lt;p id=&quot;oIQ9&quot;&gt;&lt;code&gt;.\packer.exe plugins install github.com/hashicorp/virtualbox&lt;br /&gt;.\packer plugins install github.com/hashicorp/vagrant&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;KSFj&quot;&gt;Для Vagrant тоже нужно установить несколько плагинов, возможно, не все они требуются для Packer, но для GOAD точно нужны:&lt;/p&gt;
  &lt;ul id=&quot;geHL&quot;&gt;
    &lt;li id=&quot;IZ7d&quot;&gt;vagrant-reload&lt;/li&gt;
    &lt;li id=&quot;K5bi&quot;&gt;micromachine&lt;/li&gt;
    &lt;li id=&quot;tu9O&quot;&gt;vagrant-vbguest&lt;/li&gt;
    &lt;li id=&quot;NZAb&quot;&gt;nori&lt;/li&gt;
    &lt;li id=&quot;MJNu&quot;&gt;winrm&lt;/li&gt;
    &lt;li id=&quot;YdXE&quot;&gt;winrm-fs&lt;/li&gt;
    &lt;li id=&quot;nFcR&quot;&gt;winrm-elevated&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;iZBe&quot;&gt;Чтобы не обращаться к сайту Hahicorp для установки плагинов пойдем на сайт &lt;a href=&quot;https://rubygems.org&quot; target=&quot;_blank&quot;&gt;https://rubygems.org&lt;/a&gt; и скачаем локально все необходимые плагины. Теперь чтобы установить плагины нужно выполнить команду для каждого файла:&lt;/p&gt;
  &lt;p id=&quot;cAhM&quot;&gt;&lt;code&gt;vagrant.exe plugin install --plugin-clean-sources &amp;lt;plugin_name&amp;gt;.gem&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;dPOJ&quot;&gt;Проверить что все плагины установлены можно командой:&lt;/p&gt;
  &lt;p id=&quot;OLx8&quot;&gt;&lt;code&gt;vagrant.exe plugin list&lt;/code&gt;&lt;/p&gt;
  &lt;figure id=&quot;UeSK&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b5/c7/b5c7892a-746a-4bc4-8f03-605bc7c871b2.png&quot; width=&quot;759&quot; /&gt;
    &lt;figcaption&gt;Список установленных плагинов Vagrant&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;fIOk&quot;&gt;Мы готовы к созданию боксов.&lt;/p&gt;
  &lt;p id=&quot;LQaM&quot;&gt;Авторы GOAD предоставили все необходимые конфигурационные файлы в «&lt;em&gt;\GOAD\packer\vagrant\&lt;/em&gt;» осталось только запастись терпением. В GOAD в основном используется Windows Server 2019 поэтому начну с него. Необходимо выполнить команду:&lt;/p&gt;
  &lt;p id=&quot;Ogf3&quot;&gt;&lt;code&gt;.\packer.exe build --only=virtualbox-iso windows_2019.json&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;RSqh&quot;&gt;Packer самостоятельно скачает образ Windows Server 2019 и запустит автоматическую настройку. Если во время загрузки происходит обрыв связи, то можно открыть файл «&lt;em&gt;windows_2019.json&lt;/em&gt;» внизу файла будет ссылка на загрузку и можно скачать образ обычным способом и тогда запуск команды немного измениться. Я специально переименовал ISO файл чтобы он был короче.&lt;/p&gt;
  &lt;p id=&quot;hziG&quot;&gt;&lt;code&gt;.\packer.exe build --only=virtualbox-iso --var iso_url=Windows_Server_2019.iso windows_2019.json&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;hsRN&quot;&gt;Если вы хотите использовать собственные ISO файлы нужно прописать ключи в «&lt;em&gt;Autounattend.xml&lt;/em&gt;» в директории «&lt;em&gt;answer_files&lt;/em&gt;», там есть целый блок, описывающий как это сделать. Но ознакомительной версии Windows достаточно для лаборатории.&lt;/p&gt;
  &lt;p id=&quot;5OyU&quot;&gt;Дожидаемся, когда завершится процесс сборки бокса, у меня со всеми обновлениями заняло около двух часов. Теперь необходимо добавить бокс в локальное хранилище Vagrant. Чтобы не менять конфигурационный файлы для лабораторий имя бокса взято из файла «G&lt;em&gt;OAD\ad\&amp;lt;lab&amp;gt;\providers\virtualbox&lt;/em&gt;». Хотя для некоторых лабораторий придется менять Vagrantfile чтобы установить версию &amp;quot;0&amp;quot; иначе будут попытки скачать бокс из Интернета.&lt;/p&gt;
  &lt;p id=&quot;oyiv&quot;&gt;&lt;code&gt;vagrant.exe box add /path/to/file.box --name &amp;quot;StefanScherer/windows_2019&amp;quot;&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;O3Bq&quot;&gt;Чтобы проверить, что наш бокс попал в локальное выполним команду:&lt;/p&gt;
  &lt;p id=&quot;xMDA&quot;&gt;&lt;code&gt;vagrant.exe box list&lt;/code&gt;&lt;/p&gt;
  &lt;figure id=&quot;Tc7p&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/df/52/df5284c9-d846-48f5-bb3c-45bf129cf57d.png&quot; width=&quot;742&quot; /&gt;
    &lt;figcaption&gt;Локальное хранилище боксов Vagrant&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;QNQ6&quot;&gt;Локальное хранилище находиться в профиле пользователя в директории «&lt;em&gt;vagrant.d&lt;/em&gt;»&lt;/p&gt;
  &lt;p id=&quot;mMrO&quot;&gt;Выполнив шаги по созданию боксов для других версий Windows, можно приступать к созданию лаборатории.&lt;/p&gt;
  &lt;p id=&quot;x8TY&quot;&gt;Еще раз повторюсь для VMWare будет таже самая история, но нужен другой плагин Packer для взаимодействия c VMWare и в команде &lt;em&gt;build&lt;/em&gt; измениться название гипервизора.&lt;/p&gt;

</content></entry><entry><id>cyb3r53cr3t5:solve_task_6</id><link rel="alternate" type="text/html" href="https://teletype.in/@cyb3r53cr3t5/solve_task_6?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=cyb3r53cr3t5"></link><title>Решение задачки #6</title><published>2026-05-28T07:35:05.235Z</published><updated>2026-05-28T07:35:05.235Z</updated><category term="zadachi" label="Задачи"></category><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/d6/9d/d69d277b-2e53-442d-8a71-51bea071b53f.jpeg&quot;&gt;Итак, у нас есть доменная учетная запись PENTESTER, с помощью которой мы можем обращаться к контроллеру домена. Есть сервисная учетная запись учетная запись SVC_SQL с SPN, и мы можем выполнить технику &quot;Kerberoasting&quot;. Однако по условиям задачи на эту учетную запись установлен сложный пароль и перебор пароля если и возможен, то займет много времени.</summary><content type="html">
  &lt;figure id=&quot;ZtW0&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/d6/9d/d69d277b-2e53-442d-8a71-51bea071b53f.jpeg&quot; width=&quot;447&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;mS5B&quot;&gt;Итак, у нас есть доменная учетная запись &lt;strong&gt;&lt;em&gt;PENTESTER&lt;/em&gt;&lt;/strong&gt;, с помощью которой мы можем обращаться к контроллеру домена. Есть сервисная учетная запись учетная запись &lt;em&gt;&lt;strong&gt;SVC_SQL&lt;/strong&gt;&lt;/em&gt; с SPN, и мы можем выполнить технику &amp;quot;&lt;em&gt;Kerberoasting&lt;/em&gt;&amp;quot;. Однако по условиям задачи на эту учетную запись установлен сложный пароль и перебор пароля если и возможен, то займет много времени.&lt;/p&gt;
  &lt;p id=&quot;EDvC&quot;&gt;Так же мы видим, что группа доменных компьютеров владеет сервером &lt;strong&gt;&lt;em&gt;SRV-SQL-01&lt;/em&gt;&lt;/strong&gt;. Это означает, что владелец объекта может назначать любые права для объекта &lt;em&gt;&lt;strong&gt;SRV-SQL-01&lt;/strong&gt;&lt;/em&gt;. Но для этого требуется учетная запись компьютера.&lt;/p&gt;
  &lt;p id=&quot;kH16&quot;&gt;По условию задачи все настройки установлены по умолчанию. А значит создаем объект компьютер и с помощью него назначаем себе любые привилегии на &lt;strong&gt;SRV-SQL-01&lt;/strong&gt;. Для удобства &amp;quot;&lt;em&gt;GenericAll&amp;quot;.&lt;/em&gt;&lt;/p&gt;
  &lt;p id=&quot;TlNE&quot;&gt;Назначив права, нам необходимо получить доступ на хост. Выбираем технику между &amp;quot;&lt;em&gt;Shadow Credentials&amp;quot;&lt;/em&gt; и &amp;quot;&lt;em&gt;RBCD&lt;/em&gt;&amp;quot;. Пароль сбросить мы не можем так, как в этом случае машина «выпадет» из домена.&lt;/p&gt;
  &lt;p id=&quot;s6Th&quot;&gt;После получения доступа на хост с правами локального администратора, делаем дамп LSA и извлекаем из него секреты. В результате мы получим пароль от сервисной учетной записи &lt;strong&gt;&lt;em&gt;SVC_SQL&lt;/em&gt;&lt;/strong&gt; в открытом виде. И таким образом у нас есть права доменного администратора.&lt;/p&gt;

</content></entry><entry><id>cyb3r53cr3t5:pentest_task_6</id><link rel="alternate" type="text/html" href="https://teletype.in/@cyb3r53cr3t5/pentest_task_6?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=cyb3r53cr3t5"></link><title>Задача для собеседования #6</title><published>2026-05-21T09:49:22.256Z</published><updated>2026-05-21T09:49:22.256Z</updated><category term="zadachi" label="Задачи"></category><summary type="html">&lt;img src=&quot;https://img1.teletype.in/files/49/72/4972b3a5-8c12-4c38-89b2-365ce3f57f2d.png&quot;&gt;Простой сценарий на понимание как работают службы в Windows.</summary><content type="html">
  &lt;figure id=&quot;6sVk&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/49/72/4972b3a5-8c12-4c38-89b2-365ce3f57f2d.png&quot; width=&quot;831&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;qftp&quot;&gt;Простой сценарий на понимание как работают службы в Windows.&lt;/p&gt;
  &lt;h2 id=&quot;TwNC&quot;&gt;Сценарий&lt;/h2&gt;
  &lt;p id=&quot;4sDI&quot;&gt;В ходе сбора информации мы обнаружили, что есть сервисная учетная запись &lt;strong&gt;&lt;em&gt;SVC_SQL&lt;/em&gt;&lt;/strong&gt; от имени, которой запускается служба MsSQL на сервере &lt;strong&gt;&lt;em&gt;SRV-SQL-01&lt;/em&gt;&lt;/strong&gt;. Сама учетная запись &lt;em&gt;&lt;strong&gt;SVC_SQL&lt;/strong&gt;&lt;/em&gt; является членом группы &lt;strong&gt;DOMAIN ADMINS &lt;/strong&gt;и у нее есть SPN. Так же было обнаружено, что доменная группа &lt;strong&gt;DOMAIN COMPUTERS&lt;/strong&gt; является владельцем сервера &lt;strong&gt;&lt;em&gt;SRV-SQL-01&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;
  &lt;h3 id=&quot;dKjC&quot;&gt;Дополнительные условия&lt;/h3&gt;
  &lt;ul id=&quot;IhjO&quot;&gt;
    &lt;li id=&quot;xYSh&quot;&gt;Есть доменная учетная запись &lt;strong&gt;&lt;em&gt;PENTESTER&lt;/em&gt;&lt;/strong&gt;.&lt;/li&gt;
    &lt;li id=&quot;W6oU&quot;&gt;Сложный пароль для сервисной учетной записи &lt;em&gt;&lt;strong&gt;SVC_SQL&lt;/strong&gt;&lt;/em&gt;.&lt;/li&gt;
    &lt;li id=&quot;4G7H&quot;&gt;На всех хостах в сети установлены последние обновления.&lt;/li&gt;
    &lt;li id=&quot;SIWF&quot;&gt;Настройки по умолчанию.&lt;/li&gt;
    &lt;li id=&quot;24a1&quot;&gt;Уровень домена – 2016.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;VVLM&quot;&gt;Цель&lt;/h2&gt;
  &lt;ul id=&quot;g1Nq&quot;&gt;
    &lt;li id=&quot;VoWq&quot;&gt;Получить привилегии  доменного администратора.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;4BFT&quot;&gt;Решение будет через пару дней.&lt;/p&gt;

</content></entry><entry><id>cyb3r53cr3t5:traversable_relationships</id><link rel="alternate" type="text/html" href="https://teletype.in/@cyb3r53cr3t5/traversable_relationships?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=cyb3r53cr3t5"></link><title>Проходимые и непроходимые связи в BloodHound</title><published>2026-05-12T07:48:53.168Z</published><updated>2026-05-12T07:48:53.168Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/95/0f/950f6b4a-e8cc-46c3-8a08-40bd9f8c9968.png"></media:thumbnail><category term="blood-hound" label="BloodHound"></category><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/7f/59/7f593cfd-34ee-4761-ab4a-99a28fb96096.png&quot;&gt;Специалисты, которые самостоятельно пишут Cypher запросы для коротких путей, знают, что в некоторых случаях neo4j выдает не те графы, которые хочется увидеть. Особенно, когда строятся короткие пути от общих групп до группы доменных администраторов. Часто рисуются графы, связанные с шаблонами сертификатов и членством в локальных группах и не только в привилегированных. Эти графы практически невозможно преобразовать в цепочку атаки.</summary><content type="html">
  &lt;figure id=&quot;sfOA&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/7f/59/7f593cfd-34ee-4761-ab4a-99a28fb96096.png&quot; width=&quot;1090&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;FvJT&quot;&gt;Специалисты, которые самостоятельно пишут Cypher запросы для коротких путей, знают, что в некоторых случаях neo4j выдает не те графы, которые хочется увидеть. Особенно, когда строятся короткие пути от общих групп до группы доменных администраторов. Часто рисуются графы, связанные с шаблонами сертификатов и членством в локальных группах и не только в привилегированных. Эти графы практически невозможно преобразовать в цепочку атаки.&lt;/p&gt;
  &lt;p id=&quot;TDwx&quot;&gt;В этом случае надо фильтровать связи в самом Cypher запросе при построении коротких путей. Рассмотрим два варианта Cypher запросов. В перовом варианте указываем все интересующие связи в квадратных скобках и в конце добавляем бесконечное число прыжков:&lt;/p&gt;
  &lt;p id=&quot;3Vnr&quot;&gt;&lt;code&gt;MATCH p=AllshortestPaths((c:Group {name:&amp;quot;DOMAIN USERS@DOMAIN.LOCAL&amp;quot;})-[r:GenericAll|GenericWrite|DCSync|...*1..]-&amp;gt;(v:Group {name:&amp;quot;DOMAIN ADMINS@DOMAIN.LOCAL&amp;quot;})) RETURN p&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;T40m&quot;&gt;В другом варианте будем использовать оператор &lt;em&gt;&lt;strong&gt;IN&lt;/strong&gt;&lt;/em&gt; и исключать неинтересные нам связи:&lt;/p&gt;
  &lt;p id=&quot;k1Vp&quot;&gt;&lt;code&gt;MATCH p=AllshortestPaths((c:Group {name:&amp;quot;DOMAIN USERS@DOMAIN.LOCAL&amp;quot;})-[*]-&amp;gt;(v:Group {name:&amp;quot;DOMAIN ADMINS@DOMAIN.LOCAL&amp;quot;})) WHERE NONE(x IN relationships(p) WHERE type(x)=&amp;#x27;CrossForestTrust&amp;#x27; OR type(x)=&amp;#x27;DelegatedEnrollmentAgent&amp;#x27; OR ...) RETURN p&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;IzA6&quot;&gt;Писать такие запросы очень неудобно и можно создать шаблоны и использовать их. Но пойдем другим путем.&lt;/p&gt;
  &lt;p id=&quot;MA0m&quot;&gt;Разработчики BloodHound &lt;a href=&quot;https://bloodhound.specterops.io/resources/edges/traversable-edges&quot; target=&quot;_blank&quot;&gt;разделяют&lt;/a&gt; ребра (связи) графа на два типа: проходимые (traversable) и непроходимые (non-traversable). Первый тип позволяет захватывать конечный узел в графе, второй тип – это связи, которые могут не предоставлять захват конечного узла в графе.&lt;/p&gt;
  &lt;p id=&quot;Cg8V&quot;&gt;Зная какие связи являются проходимыми к ним можно добавить свойство  &lt;strong&gt;&lt;em&gt;is_traversable&lt;/em&gt;&lt;/strong&gt; и установить значение &lt;strong&gt;&lt;em&gt;TRUE&lt;/em&gt;&lt;/strong&gt;. Чтобы не писать вручную каждый Cypher запрос напишем простой ps-скрипт, который сгенерирует нам Cypher запросы на добавление свойства для каждой связи:&lt;/p&gt;
  &lt;p id=&quot;Kcti&quot;&gt;&lt;code&gt;$relationships = @(&amp;quot;AbuseTGTDelegation&amp;quot;,&amp;quot;ADCSESC1&amp;quot;,&amp;quot;ADCSESC10a&amp;quot;,&amp;quot;ADCSESC10b&amp;quot;,&amp;quot;ADCSESC13&amp;quot;,&amp;quot;ADCSESC3&amp;quot;,&amp;quot;ADCSESC4&amp;quot;,&amp;quot;ADCSESC6a&amp;quot;,&amp;quot;ADCSESC6b&amp;quot;,&amp;quot;ADCSESC9a&amp;quot;,&amp;quot;ADCSESC9b&amp;quot;,&amp;quot;AddAllowedToAct&amp;quot;,&amp;quot;AddKeyCredentialLink&amp;quot;,&amp;quot;AddMember&amp;quot;,&amp;quot;AddSelf&amp;quot;,&amp;quot;AdminTo&amp;quot;,&amp;quot;AllExtendedRights&amp;quot;,&amp;quot;AllowedToAct&amp;quot;,&amp;quot;AllowedToDelegate&amp;quot;,&amp;quot;CanPSRemote&amp;quot;,&amp;quot;CanRDP&amp;quot;,&amp;quot;ClaimSpecialIdentity&amp;quot;,&amp;quot;CoerceAndRelayNTLMToADCS&amp;quot;,&amp;quot;CoerceAndRelayNTLMToLDAP&amp;quot;,&amp;quot;CoerceAndRelayNTLMToLDAPS&amp;quot;,&amp;quot;CoerceAndRelayNTLMToSMB&amp;quot;,&amp;quot;CoerceToTGT&amp;quot;,&amp;quot;Contains&amp;quot;,&amp;quot;CrossForestTrust&amp;quot;,&amp;quot;DCFor&amp;quot;,&amp;quot;DCSync&amp;quot;,&amp;quot;DumpSMSAPassword&amp;quot;,&amp;quot;ExecuteDCOM&amp;quot;,&amp;quot;ForceChangePassword&amp;quot;,&amp;quot;GenericAll&amp;quot;,&amp;quot;GenericWrite&amp;quot;,&amp;quot;GoldenCert&amp;quot;,&amp;quot;GPLink&amp;quot;,&amp;quot;HasSIDHistory&amp;quot;,&amp;quot;HasSession&amp;quot;,&amp;quot;HasTrustKeys&amp;quot;,&amp;quot;ManageCA&amp;quot;,&amp;quot;ManageCertificates&amp;quot;,&amp;quot;MemberOf&amp;quot;,&amp;quot;Owns&amp;quot;,&amp;quot;OwnsLimitedRights&amp;quot;,&amp;quot;ReadGMSAPassword&amp;quot;,&amp;quot;ReadLAPSPassword&amp;quot;,&amp;quot;SameForestTrust&amp;quot;,&amp;quot;SpoofSIDHistory&amp;quot;,&amp;quot;SQLAdmin&amp;quot;,&amp;quot;SyncedToADUser&amp;quot;,&amp;quot;SyncedToEntraUser&amp;quot;,&amp;quot;SyncLAPSPassword&amp;quot;,&amp;quot;WriteAccountRestrictions&amp;quot;,&amp;quot;WriteDacl&amp;quot;,&amp;quot;WriteGPLink&amp;quot;,&amp;quot;WriteOwner&amp;quot;,&amp;quot;WriteOwnerLimitedRights&amp;quot;,&amp;quot;WriteSPN&amp;quot;)&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;7Jnq&quot;&gt;&lt;code&gt;foreach($relationship in $relationships){&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;BNuW&quot;&gt;&lt;code&gt;Write-Host &amp;quot;MATCH(m)-[r:$relationship]-&amp;gt;(n) SET r.is_traversable = TRUE;&amp;quot;&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;Gwpa&quot;&gt;&lt;code&gt;}&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;l8vr&quot;&gt;После выполнения вставим все эти запросы в базу neo4j через browser neo4j.&lt;/p&gt;
  &lt;blockquote id=&quot;7LgN&quot;&gt;Название свойства &lt;strong&gt;&lt;em&gt;is_traversable &lt;/em&gt;&lt;/strong&gt;взято из документации по OpenGraph, но в самом BloodHound CE данное свойство не используется, и запросы строятся перечислением всех проходимых связей.  &lt;/blockquote&gt;
  &lt;p id=&quot;36mw&quot;&gt;Теперь чтобы воспользоваться новым свойством связи изменим наш поиск коротких путей на:&lt;/p&gt;
  &lt;p id=&quot;eeni&quot;&gt;&lt;code&gt;MATCH p=AllshortestPaths((c:Group {name:&amp;quot;DOMAIN USERS@DOMAIN.LOCAL&amp;quot;})-[*]-&amp;gt;(v:Group {name:&amp;quot;DOMAIN ADMINS@DOMAIN.LOCAL&amp;quot;})) WHERE ALL(x IN relationships(p) WHERE x.is_traversable = TRUE) RETURN p&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;xRH7&quot;&gt;В этом запросе мы просто говорим neo4j, что у всех связей в пути должно быть свойство &lt;em&gt;&lt;strong&gt;is_traversable&lt;/strong&gt;&lt;/em&gt; в значении &lt;strong&gt;&lt;em&gt;TRUE&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;
  &lt;figure id=&quot;Lsgq&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/53/e1/53e16fc2-cf46-46db-962c-ccc315b190d0.png&quot; width=&quot;698&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;98ZZ&quot;&gt;На двух изображениях одна и таже инфраструктура и узлы начала и конца, но во втором варианте мы используем только проходимые ребра, в результате картина более ясная.&lt;/p&gt;
  &lt;p id=&quot;LyTz&quot;&gt;Аналогично можно сделать с непроходимыми связями просто изменив набор на непроходимые связи и поставить значение свойства &lt;strong&gt;is_traversable&lt;/strong&gt; в &lt;strong&gt;&lt;em&gt;FALSE&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;
  &lt;p id=&quot;lbgI&quot;&gt;При построении графов нужно использовать различные варианты фильтрации запросов и тогда результат будет полным.&lt;/p&gt;

</content></entry></feed>