Ez egy nagyon tanúságos CTF volt. Megmutatta, hogy hiába a felkészültség, hiába az eszközök ismerete, nagyon könnyű elsikkadni a megoldás felett.
A virtuális gép indítása után ellenőriztem a nyitott portokat nmap-el. Kettő volt nyitva, a 22-es és a 80-as. A weboldal csak az alap Apache oldal volt. Már több CTF-ben is használt trükk, hogy ennek az oldalnak a forrásában rejtenek el információt, ezért azonnal megnéztem, itt mit találok. Egy apró információ morzsa volt csak egy kommentben: Jessie frissítse a weboldalt. Hmm, akár még felhasználó név is lehet.
Utána gobuster-el estem a weboldalnak. Ez a könyvtárakat listázza ki. Kell neki egy szólista, amit végigpróbálgat. Két könyvtár jött fel: sitemap és icons.
Itt már egy statikus weboldalt találni. A leírás szerint Colorlib templátot használtam. Gyors keresés a neten, és láttam, hogy ez egy WordPress stílus. Akkor futtassuk a wp-scan-t. A wp-scan szerint ez az oldal nem WordPress. Kínomban wget-el letöltöttem az egészet:
wget -r -np http://$IP/sitemap/
Semmi használható információt nem találtam, viszont úgy tűnt, statikus az oldal, nem PHP alapú. Vagyis weben keresztül nem lehet bejutni. Lefuttattam a gobuster-t még egyszer, a lehető legnagyobb szólistával, ami miatt több, mint egy órán keresztül vizsgálta a könyvtárakat, de nem talált semmi továbbit.
Átnéztem a képeket, hátha ott rejtettek el valamit. A stegseek-el végignyálaztam valamennyit, de nem volt eredménye.
for i in *.jpg; do stegseek $i; done
Arra gondoltam, hátha a felhasználó névvel kell bruteforce-olni az ssh-t. Először egy ssh sebezhetőséget próbáltam ki, hogy a felhasználó tényleg létezik-e.
searchsploit openssh
searchsploit -m linux/remote/40136.py
python3 40136.py -u Jessie $IP
Természetesen nem működött, mert elavult könyvtárral fejlesztették. Átírtam a forráskódot, hogy time() helyett perf_counter() metódust használjon. Ekkor lefutott.
A program először random felhasználóneveket próbálgat, majd a tesztelendő nevet. A hibaüzenetek válaszidejéből következtet a felhasználó létére. Kisbetűvel nem talál semmit, nagy kezdőbetűvel találatot adott. A kiírt válaszidő alapján én nem gondoltam, hogy annyira szignifikáns lett volna a különbség, de elhittem a programnak.
Ráeresztettem a hydrát a rendszerre. Órákon keresztül futott. Ökölszabály, hogy a CTF-eknél 15 perc után már nem érdemes folytatni a nyers erejű támadásokat, mert a feladat készítői nem kínozni akarják a versenyzőket, de mivel semmi nem volt a kezemben, hagytam, hogy fussanak. Mondanom sem kell, hogy nem lett eredménye.
Teljesen kifogytam az ötletekből, úgyhogy megnéztem egy leírást. Ott a dirb-t használták a common.txt szófájllal. Bár nem hittem benne, hogy sokkal több szó lenne benne, mint a big-ben, amit én használtam, azért lefuttattam. Kb. 10 másodperc után megvolt a /.ssh könyvtár.
dirb http://$IP/ /usr/share/wordlists/dirb/common.txt
A felhasználónév megvolt korábbról, és azt is tudtam, hogy nagy betűvel kell írni. Azzal mégsem tudtam belépni. Beírtam kisbetűvel, azzal simán beengedett. Ennyit a szuper sérülékenységről.
A felhasználó egyetlen programot tudott sudo-zni, a wget-et. A GTFOBins szerint lehet shell-t indítani wget-el. Ez sem ment, mert nincs --use-askpass opció! Végül maradt a fájl olvasás, de nem tudtam a fájlnevet. Abban biztos voltam, hogy benne van a flag szó és txt-re végződik. Elkezdtem próbálgattam és a harmadik kísérlettel megvolt a root flag is.
wget -i /root/flag.txt
A fenébe, ez nehéz volt!