Ez egy nagyon megkavart CTF volt, sok csapdával és kerülő utakkal. Először a szokásos felderítést végeztem. Első lépésként csak egy gyors keresés, hogy legyen min gondolkodni, amíg a teljes keresés lefut.
nmap -Pn --top-ports 100 $IP
nmap -Pn -p- $IP
Mindkét keresés ugyan azt az eredményt adta.
21/tcp open ftp
22/tcp open ssh
53/tcp open domain
1337/tcp open waste
1883/tcp open mqtt
Mi a fene az a waste? Újabb keresés, hogy részletesebb képet kapjak.
nmap -Sv -A -p 21,22,53,1337,1883 $IP
Oké, a waste egy átverés, Apache fut rajta. Az FTP-be be lehet lépni anoním módon, de nem tartalmaz semmit. A verziószám alapján nincs ismert sebezhetősége. Az 53-as porton Bind fut. Próbálkoztam zone transferrel, de nem volt sikeres. A dig paranccsal játszottam, hátha jön valami információ, de nem kaptam semmi használhatót. Próbálgattam a mosquitto-t, de az is átverésnek tűnt. Marad a webszerver.
Először a könyvtárakat néztem át.
gobuster dir -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -u http://$IP:1337/
Két ígéretes könyvtárat kaptam: /admin és /phpmyadmin. Az admin oldalt felkeresve rögtön egy segítséget találtam: "Biztos, hogy jó admin-t nézel?". Rövid próbálgatás után biztos voltam, hogy rossz admint nézek :-) Tehát a phpmyadmin lesz a befutó. A verziószám szerint 4.9.5-ös verzió fut. Habár van egy SQL injection sebezhetőség ebben a verzióban, az a keresésnél használható, nem a bejelentkezésnél. Kézzel próbálgattam default jelszavakat, de egyik sem vezetett eredményre.
Elkezdtem mindent előről, de csak ugyan azokat a megoldási útvonalakat néztem meg sokadszor is. Elakadtam.
Kénytelen voltam megnézni egy leírást. A gobuster-t kellett volna máshogy futtatni. Egy nagyobb fájllal. Ez eszembe juthatott volna.
gobuster dir -u http://$IP:1337/ -w /usr/share/wordlists/dirb/big.txt
Így mindjárt meglett az /admin_101 könyvtár is. Ha BurpSuit-al megnézzük, mit ad vissza a szerver, láthatjuk, hogy a hibaüzenet mellett egy sql lekérdezés részletét is megkapjuk. Valószínűleg SQL Injection-t kell használni. A phpmyadmin-ból pedig tudjuk, hogy MySQL az adatbázis. Nézzük meg, milyen adatbázisok vannak:
sqlmap -r request.txt --level 5 --risk 3 --dbms mysql --dbs
Az egyik nagyon érdekes, mert expose a neve.
sqlmap -r request.txt --level 5 --risk 3 --dbms mysql -D expose --dump
A request.txt a BurpSuit segítségével elmentett fájl. Tartalmazza a POST paramétereket, cookie-kat, mindent. Az adatbázis tartalmaz két URL-t, egy hash-t, és az admin felhasználó jelszavát. A jelszóval nem megyünk semmire, mert az admin oldal csak statikus szöveget tartalmaz némi JavaScript-el megbolondítva.
A második URL-hez (/upload-cv00101011/index.php) nincs az adatbázisban hash, csak egy megjegyzés, hogy a z-vel kezdődő felhasználó nevével érhetjük el. Hmm, ezt majd később tudjuk használni. Az első URL tartalmaz egy MD5 hash-t, amit a hashes.com-on azonnal törhetünk. A jelszó beírása után egy limitált webshell-t kapunk. Szerencsére a HTML forrásállománya tartalmaz némi segítséget. Nevezetesen nézzük meg a file vagy read paramétereket. Rögtön kiderül, hogy fájlokat tudunk megnézni. Nézzük meg az /etc/passwd-t! Rögtön megvan a z-vel kezdődő felhasználó neve!
Mehetünk a második URL-hez. A felhasználói név beírása után egy képfeltöltéshez jutunk, ami PNG-t vag JPG-t tud feltölteni. Igen ám, de az ellenőrzés csak a böngészőben fut. Ez kikerülhető!
BurpSuit segítségével át kell írni a JavaScript-et, hogy mindig fogadja el a feltöltést, kiterjesztéstől függetlenül, majd feltöltöttem egy php reverz shellt. A HTML-be rejtett módon ott van, hol találjuk a feltöltött fájlokat. Indítsuk el a reverz shellt, és máris limitált módon ugyan, de hozzáférünk a géphez.
A z betűs felhasználó könyvtárában csak egyetlen fájlt tudunk elolvasni, ami a beszédes ssh_creds.txt nevet viseli. Nem is kell többet bajlódni a revers shell-el, mert be tudunk lépni ssh-val. Azért ez mégis csak kényelmesebb, ráadásul el tudjuk olvasni a felhasználó flag.txt-jét.
Sajnos a felhasználó nem tud sudo-zni, crontab nem tartalmaz extra bejegyzést. Viszont a nano suid bit be van állítva. Ezzel meg lehet nyitni a /root/root.txt-t. Győzelem!