<?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, 07 Jun 2026 19:39:52 GMT</pubDate><lastBuildDate>Sun, 07 Jun 2026 19:39:52 GMT</lastBuildDate><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>