SGHCToma jóvoltából elolvashatjátok az idei Hacktivity CTF pályáinak részletes megoldásait:
- A selejtezőn (itt került kiválasztásra a legjobb 10 csapat) egyetlen gépet kellett root-ra törni. Ehhez először is túl kellett lendülni azon, hogy a gépen kilátszó webszerver első szembe jövő belépési felületén egy "nem kihasználható SQL injection" (najó, egy csapda) rejtőzik. Ez után tovább túrva egy alap CGI hacket kellett végrehajtani tetszőleges felhasználó szintű fájlolvasás eléréséért (ez már ért pontot). Ez azonban nem feltétlenül járt együtt felhasználói szintű kódfuttatással: ennek eléréséhez egy kis Perl manual olvasgatás, valamint némi *NIX shell szkriptelési ismeret szükségeltetett. Innen a root szintű jogosultság megszerzéséhez, egy rosszul megírt SUID root binárist kellett megszerezni, majd ezen keresztül egy sima stack overflow-val tetszőleges kódfuttatást elérni.
A döntőben megjelent csapatoknak a következő démonokkal kellett megküzdenie:
- Jose Luis Torrente egy Linux-os gép volt, amit a legtöbb csapat eleinte meg sem talált, ugyanis egyetlen elérhető szolgáltatása nem TCP-n, hanem UDP-n figyelt. Ez egy TFTP-szerű szolgáltatás volt, amivel történetesen le lehetett tölteni magát az UDP-n figyelő binárist is, melynek disassemblyjében megtalálható volt egy sebezhető függvény, melynek hibáját egy kis ROP-olással lehetett kihasználni.
- Firefly egy Windows 7-es gép volt, melyen figyelt egy webszerver, meg egy furcsa szolgáltatás a TCP/1337-en. Itt a boldogsághoz ki kellett volna találni a mérhetetlenül bonyolult admin:admin123 belépési kombinációt egy webes űrlaphoz, ami után egy sima PHP fájlfeltöltéssel lehetett felhasználói szintű parancsokat végrehajtani. A 1337-en futó szolgáltatás Adminisztrátori fiókkal, DEP-el, és jórészt ASLR nélkül futott, így a bináris letöltéste, és visszafejtése után ismét egy ROP-os exploittal lehetett Administrator jogot szerezni - ezúttal Windows-on.
- NagyonKígyó egy OpenBSD volt - és ehhez sem kellett drága 0day ;) Itt is a weben kezdődött a móka, csakhogy a kommunikáció TLS-be bugyolált JSON-RPC-vel, egy Java appleten keresztül zajlott. A szerver oldalon találhotó Python szkript forrása a szolgáltatáson keresztül letölthető (miután a TLS-ben közlekedő adatok formátumát sikerült megszimatolni), és rövid kódanalízis, valamint egy kis bash-fu után az egyszeri hacker képes felhasználói szinten parancsokat kiadni. A root-hoz szintén egy Python szkriptet kellett megbűvölni, méghozzá egy szerializált objektum lecserélésével: a cPickle modul körültekintés nélkül történő használata ezúttal korlátlan parancsfuttatást eredményez.
Ezek a feladatok nem földtől elrugaszkodott szituációkat modelleztek, a megoldásokhoz csak az aktuális szakirodalmat kellett fellapozni, valamint gondolkodni egy kicsit (najó, néha sokat). Minden esetre Toma leírásaiból is látható, hogy a feladatok alapvetően megoldhatóak voltak, bár az idő szűkös volt. Az eredmények szerint:
- Jó néhányan a Next->Next->Hack filozófiát követve használják az eszközeiket, anélkül, hogy bekonfigurálnák azokat
- A find parancs használata, illetve az olyan fekete mágiák, mint a $( ) még mindig sokakanak problémát okoz
- Több (leendő) mérnök nem hajlandó megmérni, hogy valójában mi is megy a hálózaton egy hálózati program debugolásakor
- Az örökérvényű négybetűs bölcsességet - RTFM - a legtöbben nem szívlelik meg eléggé
- Az admin123 jelszó hiányzik néhány népszerű szótárból
Ezek alapján még mindig meleg szívvel ajánlom mindenkinek a Hacker HOWTO-t, Raymond bácsi nem írt hülyeségeket!
Ezúton is gratulálok a kivételt adó, CTF-et két éve torony magasan nyerő PRAuditors csapatnak, szép munkát végeztetek!
Végezetül néhány szóban a Wargameről:
Srácok, a weben túl is van élet! A Wargame pályák a fentieknél jóval egyszerűbbek voltak, mégsem volt képes megcsinálni őket két éve senki - ilyen hozzáállással kár Hacktivity-re járni. A megoldásokat rövidesen közzétesszük, mindenki okulására.