<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>CyberSecrets</title><generator>teletype.in</generator><description><![CDATA[Блог о наступательной безопасности.
Вся информация представлена в обучающих целях.]]></description><image><url>https://img1.teletype.in/files/48/20/48204b62-e7d6-4cf5-aa9b-bca9033a4ff4.png</url><title>CyberSecrets</title><link>https://teletype.in/@cyb3r53cr3t5</link></image><link>https://teletype.in/@cyb3r53cr3t5?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cyb3r53cr3t5</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/cyb3r53cr3t5?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/cyb3r53cr3t5?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Sun, 05 Jul 2026 23:41:35 GMT</pubDate><lastBuildDate>Sun, 05 Jul 2026 23:41:35 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@cyb3r53cr3t5/pentest_task_7</guid><link>https://teletype.in/@cyb3r53cr3t5/pentest_task_7?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cyb3r53cr3t5</link><comments>https://teletype.in/@cyb3r53cr3t5/pentest_task_7?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cyb3r53cr3t5#comments</comments><dc:creator>cyb3r53cr3t5</dc:creator><title>Задача для собеседования #7</title><pubDate>Thu, 02 Jul 2026 07:49:48 GMT</pubDate><category>Задачи</category><description><![CDATA[<img src="https://img1.teletype.in/files/88/05/88054658-315e-4338-a627-0f391204d5a8.png"></img>Задача с несколькими входящими данными, на мой взгляд достаточно интересная.]]></description><content:encoded><![CDATA[
  <figure id="3opM" class="m_column">
    <img src="https://img1.teletype.in/files/88/05/88054658-315e-4338-a627-0f391204d5a8.png" width="573" />
  </figure>
  <p id="i1vc">Задача с несколькими входящими данными, на мой взгляд достаточно интересная.</p>
  <h2 id="TNbL">Сценарий</h2>
  <p id="sz60">После сбора информации обнаружилось, что группа <code>AUTHENTICATED USERS</code> имеет права <code>GenericWrite</code> на пользователя <code>USER-456</code>. Сам пользователь не обладает никакими значимыми правами и доступами.</p>
  <p id="gGPT">Изучение групповых политик показало, что существует групповая политика <code>WS LOCAL ADMIN</code> с интересной записью.</p>
  <figure id="d8FJ" class="m_column">
    <img src="https://img2.teletype.in/files/d5/97/d5975fb5-e8cc-43ee-b833-5b0d360f587e.png" width="1061" />
  </figure>
  <p id="V7BO">Сама политика применяется <code>WS LOCAL ADMIN</code> к OU <code>WORKSTATION</code>, в которую входит рабочая станция <code>WS-567</code>. На этой рабочей станции есть сессия пользователя <code>ADM_PETROV</code>, входящего в группу <code>SERVER ADMINS</code>.</p>
  <figure id="qB29" class="m_column">
    <img src="https://img1.teletype.in/files/ce/2b/ce2b87a4-96af-47c5-bdf0-366fb412d0cc.png" width="949" />
  </figure>
  <h3 id="W7hU">Дополнительные условия</h3>
  <ul id="dfw9">
    <li id="n05b">Есть доменная учетная запись PENTESTER.</li>
    <li id="SnHY">На всех хостах в сети установлены последние обновления.</li>
    <li id="ulje">Настройки по умолчанию.</li>
    <li id="lKRr">Уровень домена – 2016.</li>
  </ul>
  <h2 id="rIHB">Цель</h2>
  <ul id="8bi8">
    <li id="Ctp8">Получить привилегии группы <code>SERVER ADMINS</code>.</li>
  </ul>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@cyb3r53cr3t5/Tag_Tier_Zero</guid><link>https://teletype.in/@cyb3r53cr3t5/Tag_Tier_Zero?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cyb3r53cr3t5</link><comments>https://teletype.in/@cyb3r53cr3t5/Tag_Tier_Zero?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cyb3r53cr3t5#comments</comments><dc:creator>cyb3r53cr3t5</dc:creator><title>Tag_Tier_Zero и не только</title><pubDate>Thu, 25 Jun 2026 07:49:14 GMT</pubDate><media:content medium="image" url="https://img2.teletype.in/files/15/ef/15efb35b-71b9-430b-9833-96885ddd3a08.png"></media:content><category>BloodHound</category><tt:hashtag>bloodhound</tt:hashtag><tt:hashtag>внутрянка</tt:hashtag><tt:hashtag>cypher</tt:hashtag><description><![CDATA[<img src="https://img4.teletype.in/files/74/9e/749e4d1e-8a54-4e57-a537-e153c12e5bde.png"></img>Добавление меток (label) или определенных свойств узлам позволяют группировать узлы по общему признаку и использовать их в запросах Cypher вместо общего перечисления. Так, например, для всех рабочих станций можно добавить метку &quot;Workstation&quot;, а для всех серверов &quot;Server&quot; и в зависимости от потребностей использовать эти метки в запросах.]]></description><content:encoded><![CDATA[
  <figure id="Ec5y" class="m_column">
    <img src="https://img4.teletype.in/files/74/9e/749e4d1e-8a54-4e57-a537-e153c12e5bde.png" width="931" />
  </figure>
  <p id="eUOu">Добавление меток (label) или определенных свойств узлам позволяют группировать узлы по общему признаку и использовать их в запросах Cypher вместо общего перечисления. Так, например, для всех рабочих станций можно добавить метку &quot;<em>Workstation</em>&quot;, а для всех серверов &quot;<em>Server</em>&quot; и в зависимости от потребностей использовать эти метки в запросах.</p>
  <p id="010p">Эволюция таких меток в BloodHound была следующей: в BloodHound Legacy использовались свойства &quot;<em>n.highvalue</em>&quot; для определения узлов с высокими привилегиями &quot;<em>n.owned</em>&quot; – скомпрометированный узел, в BloodHound CE начали использовать свойство &quot;<em>n.system_tag</em>&quot;, в которой прописывались метки &quot;<em>admin_tier_0</em>&quot; для привилегированных групп и &quot;<em>owned</em>&quot; для скомпрометированных. С конца июля 2026 года будет использоваться только метки &quot;<em>Tag_Tier_Zero</em>&quot; и &quot;<em>Tag_Owned</em>&quot;. Это связанно с тем, что индексированные метки работают быстрее.</p>
  <p id="tPn2">Если вы следите за обновлениями BloodHound CE учитывайте это в своих собственных Cypher запросах. Можно использовать универсальный подход в запросах:</p>
  <pre id="ghdo">((n:Tag_Tier_Zero) OR COALESCE(n.system_tags, &#x27;&#x27;) CONTAINS &#x27;admin_tier_0&#x27; OR n.highvalue = TRUE)</pre>
  <p id="hUVe">В этом случае будут проверяться все три варианта. Но для написания быстрых запросов нужно учитывать версию BloodHound.</p>
  <p id="Nm8U">Но зачем останавливаться только на &quot;<em>Tag_Tier_Zero</em>&quot;? В тировой модели три уровня: на нулевом находятся администраторы домена и им можно ходить только на контроллеры домена, на первом – администраторы серверов, приложений, баз данных и так далее, и они занимаются только серверной инфраструктурой, а на втором уровне это администраторы рабочих станций и всего, что связанно с пользовательским сегментом.</p>
  <p id="A8as">Добавим новые метки &quot;<em>Tag_Tier_One</em>&quot; и &quot;<em>Tag_Tier_Two&quot;</em>, но для начала добавим новые индексы:</p>
  <pre id="PKU3">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);</pre>
  <p id="sLaT">Итак, метки определены теперь нужно найти объекты, на которые можно эти метки установить. Делаем запрос на поиск всех групп, у которых в имени есть <strong>ADMIN</strong>, но исключаем &quot;Tag_Tier_Zero&quot; и выводим имя и описание:</p>
  <pre id="lEYO">MATCH (g:Group) WHERE g.name CONTAINS &#x27;ADMIN&#x27;
AND NOT ((g:Tag_Tier_Zero) OR COALESCE(g.system_tags, &#x27;&#x27;) CONTAINS &#x27;admin_tier_0&#x27; OR g.highvalue = TRUE)
RETURN g.name, g.description</pre>
  <p id="RMjT">Поле description может нам помочь определить к какому уровню относится та или иная группа. А так по имени определяем уровень и устанавливаем новую метку, например мы нашли две группы <strong>SERVER_ADMINS</strong> и <strong>WORKSTATION_ADMINS</strong>.</p>
  <pre id="qIn1">MATCH (g1:Group) WHERE g1.name STARTS WITH &#x27;SERVER_ADMINS&#x27; SET g:Tag_Tier_One
MATCH (g2:Group) WHERE g2.name STARTS WITH &#x27;WORKSTATION_ADMINS&#x27; SET g:Tag_Tier_Two</pre>
  <p id="loMS">Добавим членам группы <strong>SERVER_ADMINS</strong> ту же метку.</p>
  <pre id="ubvj">MATCH (u:Base)-[r:MemberOf*1..]-&gt;(g:Tag_Tier_One) SET u: Tag_Tier_One</pre>
  <p id="h9Pp">Теперь можно использовать эти метки при построении путей, включать или исключать. Например, мы хотим посмотреть есть ли у нас короткие пути от группы доменных пользователей до группы доменных администраторов минуя все &quot;<em>Tag_Tier_One</em>&quot; узлы:</p>
  <pre id="VO17">MATCH p=AllShortestPaths((m:Group {name:&quot;DOMAIN USERS@DOMAIN.LOCAL&quot;})-[*]-&gt;(n:Group {name:&quot;DOMAIN ADMINS@DOMAIN.LOCAL&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</pre>
  <p id="T5XU">В этом запросе используется <strong><em>is_traversable = TRUE</em></strong>, чтобы не перечислять все проходимые ребра.</p>
  <p id="KzmN">Стоит отметить, что в больших сетях могут использоваться сотни различных групп администраторов, но зачастую они разделены по регионам или городам, а функционал будет одинаковым, и поэтому будут иметь общий шаблон наименования. Если определить такой шаблон, то по факту групп администраторов останется в разы меньше.</p>
  <tt-tags id="sobN">
    <tt-tag name="bloodhound">#bloodhound</tt-tag>
    <tt-tag name="внутрянка">#внутрянка</tt-tag>
    <tt-tag name="cypher">#cypher</tt-tag>
  </tt-tags>

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

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

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@cyb3r53cr3t5/solve_task_6</guid><link>https://teletype.in/@cyb3r53cr3t5/solve_task_6?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cyb3r53cr3t5</link><comments>https://teletype.in/@cyb3r53cr3t5/solve_task_6?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cyb3r53cr3t5#comments</comments><dc:creator>cyb3r53cr3t5</dc:creator><title>Решение задачки #6</title><pubDate>Thu, 28 May 2026 07:35:05 GMT</pubDate><category>Задачи</category><description><![CDATA[<img src="https://img2.teletype.in/files/d6/9d/d69d277b-2e53-442d-8a71-51bea071b53f.jpeg"></img>Итак, у нас есть доменная учетная запись PENTESTER, с помощью которой мы можем обращаться к контроллеру домена. Есть сервисная учетная запись учетная запись SVC_SQL с SPN, и мы можем выполнить технику &quot;Kerberoasting&quot;. Однако по условиям задачи на эту учетную запись установлен сложный пароль и перебор пароля если и возможен, то займет много времени.]]></description><content:encoded><![CDATA[
  <figure id="ZtW0" class="m_column">
    <img src="https://img2.teletype.in/files/d6/9d/d69d277b-2e53-442d-8a71-51bea071b53f.jpeg" width="447" />
  </figure>
  <p id="mS5B">Итак, у нас есть доменная учетная запись <strong><em>PENTESTER</em></strong>, с помощью которой мы можем обращаться к контроллеру домена. Есть сервисная учетная запись учетная запись <em><strong>SVC_SQL</strong></em> с SPN, и мы можем выполнить технику &quot;<em>Kerberoasting</em>&quot;. Однако по условиям задачи на эту учетную запись установлен сложный пароль и перебор пароля если и возможен, то займет много времени.</p>
  <p id="EDvC">Так же мы видим, что группа доменных компьютеров владеет сервером <strong><em>SRV-SQL-01</em></strong>. Это означает, что владелец объекта может назначать любые права для объекта <em><strong>SRV-SQL-01</strong></em>. Но для этого требуется учетная запись компьютера.</p>
  <p id="kH16">По условию задачи все настройки установлены по умолчанию. А значит создаем объект компьютер и с помощью него назначаем себе любые привилегии на <strong>SRV-SQL-01</strong>. Для удобства &quot;<em>GenericAll&quot;.</em></p>
  <p id="TlNE">Назначив права, нам необходимо получить доступ на хост. Выбираем технику между &quot;<em>Shadow Credentials&quot;</em> и &quot;<em>RBCD</em>&quot;. Пароль сбросить мы не можем так, как в этом случае машина «выпадет» из домена.</p>
  <p id="s6Th">После получения доступа на хост с правами локального администратора, делаем дамп LSA и извлекаем из него секреты. В результате мы получим пароль от сервисной учетной записи <strong><em>SVC_SQL</em></strong> в открытом виде. И таким образом у нас есть права доменного администратора.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@cyb3r53cr3t5/pentest_task_6</guid><link>https://teletype.in/@cyb3r53cr3t5/pentest_task_6?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cyb3r53cr3t5</link><comments>https://teletype.in/@cyb3r53cr3t5/pentest_task_6?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=cyb3r53cr3t5#comments</comments><dc:creator>cyb3r53cr3t5</dc:creator><title>Задача для собеседования #6</title><pubDate>Thu, 21 May 2026 09:49:22 GMT</pubDate><category>Задачи</category><description><![CDATA[<img src="https://img1.teletype.in/files/49/72/4972b3a5-8c12-4c38-89b2-365ce3f57f2d.png"></img>Простой сценарий на понимание как работают службы в Windows.]]></description><content:encoded><![CDATA[
  <figure id="6sVk" class="m_column">
    <img src="https://img1.teletype.in/files/49/72/4972b3a5-8c12-4c38-89b2-365ce3f57f2d.png" width="831" />
  </figure>
  <p id="qftp">Простой сценарий на понимание как работают службы в Windows.</p>
  <h2 id="TwNC">Сценарий</h2>
  <p id="4sDI">В ходе сбора информации мы обнаружили, что есть сервисная учетная запись <strong><em>SVC_SQL</em></strong> от имени, которой запускается служба MsSQL на сервере <strong><em>SRV-SQL-01</em></strong>. Сама учетная запись <em><strong>SVC_SQL</strong></em> является членом группы <strong>DOMAIN ADMINS </strong>и у нее есть SPN. Так же было обнаружено, что доменная группа <strong>DOMAIN COMPUTERS</strong> является владельцем сервера <strong><em>SRV-SQL-01</em></strong>.</p>
  <h3 id="dKjC">Дополнительные условия</h3>
  <ul id="IhjO">
    <li id="xYSh">Есть доменная учетная запись <strong><em>PENTESTER</em></strong>.</li>
    <li id="W6oU">Сложный пароль для сервисной учетной записи <em><strong>SVC_SQL</strong></em>.</li>
    <li id="4G7H">На всех хостах в сети установлены последние обновления.</li>
    <li id="SIWF">Настройки по умолчанию.</li>
    <li id="24a1">Уровень домена – 2016.</li>
  </ul>
  <h2 id="VVLM">Цель</h2>
  <ul id="g1Nq">
    <li id="VoWq">Получить привилегии  доменного администратора.</li>
  </ul>
  <hr />
  <p id="4BFT">Решение будет через пару дней.</p>

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

]]></content:encoded></item></channel></rss>