Come prima cosa dobbiamo attivare il profilo VPN Wireguard per poterci collegare alla rete, assicuratevi di avere wireguard
sudo apt update &&
sudo apt install wireguard
e utilizzate il comando
wg-quick up <path-to-player.conf>
Per collegarci alla vulnbox usiamo il comando
ssh root@10.60.X.1
In caso di errore possiamo risolvere con
ssh-keygen -f "$HOME/.ssh/known_hosts" -R "10.60.X.1"
Un membro del team si occuperà del cambio password della vulnbox, basta usare il comando
passwd
Possiamo per comodità associare l'indirizzo ip della vulnbox ad uno pseudonimo
echo "10.60.X.1 vulnbox" | sudo tee -a /etc/hosts
ora potremo collegarci con
ssh root@vulnbox
Salviamo la nostra chiave pubblica sulla vulnbox, in questo modo non avremo più bisogno di inserire la password per connetterci
ssh-copy-id -i $HOME/.ssh/id_rsa.pub root@vulnbox
In caso di errore dovete prima creare una coppia di chiavi con il seguente comando (lasciando tutte le opzioni vuote)
ssh-keygen -t rsa
Effettuiamo un backup iniziale dei servizi
rsync -r --exclude '/root/snap' \
--exclude '/root/.*' \
root@vulnbox:/root/* ./backup --progress
Possiamo utilizzare lo stesso comando, cambiando destinazione locale ed escludendo i tools, per scaricare i servizi durante tutta la gara
rsync -r --exclude '/root/snap' \
--exclude '/root/tulip-auth' \
--exclude '/root/DestructiveFarm' \
--exclude '/root/.*' \
root@vulnbox:/root/* ./services --progress
Per avviare i servizi utilizziamo il comando
docker compose up --build -d
Possiamo controllare le porte esposte dai servizi con
docker ps
Installiamo questo tool per evitare che tcdump dia problemi
apt update && apt install apparmor-utils && aa-complain tcpdump
Creiamo le cartelle necessarie
mkdir /traffic && chown tcpdump:tcpdump /traffic
Avviamo il dump digitando questo comando e poi premendo invio due volte
cd /traffic
tcpdump -i game -G 60 -C 100 -w dump-%m-%d-%H-%M-%S-%s.pcap 'port not 22' &
Il comando ci restituirà un PID che utilizzeremo per evitare che il dump si interrompa in caso di disconnessione
disown <PID>
Anche se poco probabile i dump potrebbero riempire la memoria della vulnbox, possiamo dare un'occhiata ogni tanto con
df -H
Cloniamo la repo sulla vulnbox
git clone https://github.com/gcammisa/tulip-auth.git
Modifichiamo il file services/configuration.py, per esempio
vm_ip = "10.60.31.1"
services = [{"ip": vm_ip, "port": 8080, "name": "IlBonus"},
{"ip": vm_ip, "port": 12345, "name": "WAQS"},
]
Facciamo una copia del .env.example
cp .env.example .env
e sistemiano alcuni parametri
TRAFFIC_DIR_HOST="/traffic"
TICK_LENGTH=120000
Utilizziamo il seguente comando per creare un utente
htpasswd -c .htpasswd <USERNAME>
Avviamo Tulip (docker compose NON è uguale a docker-compose)
docker compose up --build -d
Ora possiamo accedere a Tulip sulla porta 3001
Nel caso ci sia un conflitto di porte possiamo modificare il docker-compose.yml.
Ad esempio se dovessimo riscontrare il problema Error starting userland proxy: listen tcp4 127.0.0.1:5000: bind: address already in use sostituiamo
api:
build:
context: .
dockerfile: Dockerfile-python
image: tulip-api:latest
ports:
- "127.0.0.1:5000:5000"
con
api:
build:
context: .
dockerfile: Dockerfile-python
image: tulip-api:latest
ports:
- "127.0.0.1:6000:5000"
Cloniamo la repo sulla vulnbox
git clone https://github.com/gcammisa/S4DFarm.git
Modifichiamo il file server/app/config.py.
Cambiare SCOREBOARD_IP, FLAG_SUBMIT_URL, S4D_PASSWORD, TEAM_TOKEN.
Queste informazioni sono fornite dagli organizzatori della gara.
Infine usiamo il comando
docker compose up --build -d
e avremo S4DFarm sulla pora 5137.
Quando scriviamo l'exploit dobbiamo immaginare che il nostro script attacchi un solo team ed una sola volta, ad automatizzare ci pensera' S4DFarm.
Dobbiamo inoltre rispettare dei piccoli constraint:
#!/usr/bin/env python3 all'inizio del fileip = sys.argv[1])print(html_with_flag, flush=True) oppure aggiungere flush(stdout))Per lanciare l'exploit usiamo
python3 start_sploit.py --server-url http://10.60.16.1:5137/ --server-pass "changeme" exploit.py