2013. május 25., szombat

A GitSCB verseny élménybeszámolója + megoldás videók.

Elöljáróban annyit, hogy köszönet a szervezőknek, mert egy nagyon élvezetes játékot sikerült összehozniuk. Én a magam részéről nagyon élveztem a dolgot.

Annyit el kell mondani, hogy nekem személy szerint nem a verseny megnyerése volt a célom, hanem a penteszteléses módszereim tökéletesítése és a tanulás. Megtalálom-e vajon a hibát egyedül? Ez volt számomra a kérdés nem az, hogy hány pontot sikerül összegyűjteni. Emiatt a feladatot nem is csináltam meg végig. Miután bent voltam a szerveren és interaktívan is be tudtam lépni a privilégium eszkalálással már nem bajlódtam. Találtam rá nyomokat, amin el lehetett volna indulni, de az első része jobban érdekelt. (Így az scb-vel nem is kezdtem el bűvészkedni. Emiatt csak az első két pályára jutottam be. A 3-as és a 4-eshez kellett volna az scb-t jobban ismerni, de most nem akartam vele sokat foglalkozni.

Azt is el kell mondani, hogy mivel egyszerre többen dolgoztunk a problémán, már rég bent voltam a szerveren és már le is mentettem .bash_history fileokat és más config állományokat, mikor még fogalmam sem volt arról, hogy milyen hibán keresztül lehetne egyáltalán bejutni a gépre. Ennek oka igen egyszerű: mások bejutottak és az ő hibáikon keresztül be tudtam lépni a gépre. Sok ember sokféle módon közelítette meg a kérdést és volt aki c99.php shellt használt. Én meg megtaláltam és azon keresztül belépve gyakorlatilag már nem is lett volna szükségem rá, hogy a megoldásra rájöjjek.

Ez egyébként egy security hole volt a játékban, amit meg is említettem a szervezőknek és úgy vettem észre, hogy a .bash_history fileokat el is tűntették, hogy ne lehessen így a megoldásokhoz jutni.(legalábbis az első gépen)

Az időm nagy részét a bejutási lehetőség keresésével töltöttem. Hiába volt már meg a szükséges jelszó engem az érdekelt, hogy ha nem sikerült volna a php shellen bemenni, akkor hogyan jutnék be. Megpróbáltam megvizsgálni a lehetséges hibákat és sokat eltököltem az információ gyűjtéssel és a google és az exploit leírások olvasgatásával. Megpróbáltam penteszteléses feladatnak értelmezni a feladványt.

Végül két hibát találtam - ebben nagy szerepe volt az irc-n elhangzó beszélgetéseknek is. Az egyik egy ottfelejtett file volt, amiben benne volt a phpmyadmin jelszó és annak ismeretében már nem volt probléma behekkelni magam a rendszerbe. A másik hiba egy sql injection hiba volt, amin keresztül eljutottam az adminisztrátori usernév+hash párosig.

De az eredeti hash-t feltörni nem sikerült. (Igaz, sokat nem is vesződtem vele) Azt végül nem tudtam meg, hogy másoknak vajon sikerült-e. Mivel legtöbben - ha nem mindenki - a verseny feladványok megoldásán agyalt - nekik mindegy volt, hogy hogy jutottak be a gépre a lényeg, hogy bent voltak.

A dolog szépségét fokozta, hogy a játékosok folyamatosan változtatgatták a gépen a dolgokat. Jelszavak cserélődtek, fájlok keletkeztek, majd tűntek el váratlanul. Ennek voltak előnyei és hátrányai is. Rengeteg ötletet lehetett ellopni másoktól. Viszont olyan is előfordult, hogy egymás munkáját elrontották a játékosok. Ez benne volt a pakliban.

A legnagyöbb derültséget a törökök akciója okozta, akik már deface-olták a gépet, mielőtt még bárki be tudott volna rá jutni :) (Mindenki arra volt a leginkább kíváncsi, hogy hogy csinálták - de ezt a szervezőktől végül nem tudtuk meg)

Sok ember elbukott az ssh kérdésen. Hiába szereztek jogosultságot a gépre php-n keresztül nem tudták, hogy mi módon lehetne azt kihasználni és hogy lehetne egy interaktív shellt csinálni. Pedig ez azért nem volt olyan nehéz.

Gyakorlatilag - ha jól emlékszem még a verseny kezdete után órák múlva is üres volt az eredményjelző, pedig sokan már 10-20 perc után találtak rést a falon - de nem igazán tudtak vele mit kezdeni. Az járt jól aki folyamatosan pásztázta a szervert - így nagyon sok információhoz hozzá lehetett jutni. Néhányszor ki lettek zárva a játékosok bizonyos file jogosultságok elállításával. Nem derült ki, hogy ezt valaki szándékosan vagy pedig véletlenül csinálta-e.

Itt volt egyébként a következő security hole a játékban: aki bejutott az ssh-val és nem tűntette el  egyből a nyomait arra olyanok is rá tudtak bukkani egy sima nikto-val akik még be sem jutottak a gépre. Mivel sok játékos sokféleképpen próbálkozott gyakorlatilag el lehet mondani, hogy "egymás hátán" egymás megoldásait felhasználva gyorsan lehetett előre haladni. Az egyik megoldotta az egyik problémát, a másik meg a következőt, és így tovább.

A tisztánlátás kedvéért megpróbáltam belépni a gépre a második vagy a harmadik nap hajnali 5-kor és az a meglepetés fogadott, hogy a szerver nem is hasonlított arra mint amin addig dolgoztam :) Jóformán egy széthekkelt szerverrel találkoztam egész napközben :) Így elég gyorsan lehetett előre haladni. Most viszont, a "tiszta" gépen nekem kellett a különböző hekkeléseket megcsinálni. Ha valaki későn jött, neki sokkal nehezebb dolga volt, ez biztos. Mivel nem tudott mások hibáit kihasználva bejutni.

Az elején például volt tegy jelszó-hash csere. Valaki lecserélte az admin userhez tartozó jelszó hash-t a phpmyadmin felületen (vagy máshogy) Aki ezen a könnyített jelszón keresztül be tudott jutni az admin felületre az utána már az eredeti hash megtörése nélkül is be tudott lépni. Vagyis az történt, hogy a megoldás tudta nélkül kikerülte az első akadályt :) Nagyon sokan jártunk így :) Csak az szívta meg aki később jött. Ők ugyanis nem a széthekkelt géppel találkoztak, hanem az eredetivel.

Volt egy file amit meg lehetett elvileg találni, de szerintem azt csak nagyon kevesen találták meg.

Az mindenesetre kiderült számomra, hogy az automata eszközök nagyon sokat tudnak segíteni egy ilyen feladat megoldásában, de nem lehet csak rájuk hagyatkozni. Kézzel/szemmel is ellenőrizni kell a dolgokat. Volt olyan, hogy az automata hibát jelzett, de nem volt hiba és olyan is volt, hogy nem jelzett pedig lukas volt a szoftver. A teszteléshez egy külön saját webhostra feltelepítettem egy joomlát és eg qdPM-et is. Hibakeresésnél nagyon haszos lehet az ilyesmi.

Arra is rájöttem, hogy a módszer amit használtam tökéletlen volt. Sok apróságra nem figyeltem fel első nekifutásra amik fontosak voltak vagy azok lehettek volna.

Készítettem két videót - de inkább pentesztelési szempontokat vettem figyelembe. Sok a vágás, mert néha bénáztam és ezeket kivágtam a filmből. Meg volt, hogy mások felülcsaptak közbe dolgokat miközbe vettem fel az anyagot. Ami maradt az nagyjából demonstrációs anyagnak jó. Azért nagyjából látni lehet, hogy mit csináltak a játékosok vagy, hogy mit kellett volna csinálniuk. A root jog megszerzésére nem maradt idő - így arról sajnos nem készült videó.

Az első videó végén van egy .bash_history részlet, amit letöltöttem az egyik szerverről, abban vannak próbálkozások a játékosok részéről.

Lett volna még ötletem, hogy mit csináljak a gépen, csak időm nem maradt már rá. Egy dmesg | grep -i virtual paranccsal megtudtam, hogy egy vmware virtuális gépről van szó, és 32 bites módban fut  gép. Próbáltam feltenni más virtuális gép detektáló cuccokat is a feltört gépre, de végül hagytam a dolgot :)

(A virtuális gép hibáján keresztül a valós szerverig is meg lehetett volna próbálni eljutni - persze versenyen kívül, de erre nem maradt időm)

íme a két videó :





11 megjegyzés:

  1. Köszönet a videókért! Egyetértek a versennyel kapcsolatos megjegyzéseiddel is.

    Csak egy apróság, hogy a Joomlscan 1.5.12-14-nek próbálta jelezni a verziót, ami valójában 1.5.26. volt, lehet, hogy azért mert már nem frissítik az adatbázisát?

    Az eredeti és óránként visszaállított kódolt joomla jelszó (mely "md5(jelszó):salt" alakú volt) visszafejtésével én sem boldogultam, gondolom eléggé bonyolult volt, így a jos_session táblából egy session cookie kibányászásán ügyködtem, de mire összejött volna rendszerint valaki átütötte a jelszó hast egy egyszerű csak md5 hash értékre, ahogy a videóban is van. Ezzel szerinted jó úton jártam?

    VálaszTörlés
    Válaszok
    1. A joomla scannerrel lehet, hogy igazad van - utána kéne nézni. Igazából egyik ilyen kütyü se tökéletes...(Végül meg se néztem, hogy pontosan melyik verzió volt fenn :) ez is egy figyelmetlenség volt a részemről.

      A session cookie-s trükk szerintem lehetséges. Igazából ki tudod próbálni utólag is: Csak fel kell tenni egy 1.5.26-os joomlát és megnézed, hogy ha belépsz, akkor meddig tárolódik el a session adat...(Ez a módszer nekem pl eszembe se jutott volna :)

      Az biztos, hogy valaki "kiütötte" az eredeti jelszót, de hogy hogy sikerült neki arra akkor nem jöttem rá.Most meg már nincs időm rá.

      Elvileg lesz "Official-Solution" videó is amit a szervezők készítenek. Abban lehet, hogy benne lesznek a válaszok.

      Törlés
    2. Köszönöm.

      >Az biztos, hogy valaki "kiütötte" az eredeti >jelszót, de hogy hogy sikerült neki arra akkor nem >jöttem rá.Most meg már nincs időm rá.
      A configuration.php fájlból kiszedett jelszóval a phpMyAdmin felületen szerinetm meg lehetett a jelszó hash-t változatatni és valószínűleg SQL injectionnel is a Jommlan keresztül.

      A hivatalos megoldásra én is kíváncsi vagyok, sajnos az eredményhirdetésre nem tudtam elmenni.

      Törlés
  2. Arra az sql injectionon keresztüli megváltoztatásra lennék kíváncsi én is. A phpMyAdminos dologra azért rá lehetett jönni, ha már bejutottál valahogy a gépre.

    Én különben egy c99-es php shellen keresztül jutottam be. Valaki feltette én meg csak megtaláltam, kihasználtam és lementettem a szükséges fileokat. Utána meg mivel tudtam már a jelszót a phpmyadminhez nem volt probléma belépni a gépre.

    Az elején egyébként qdPM-es és joomlás exploitokkal szórakoztam egy csomót és csak nagy sokára jutottam el az sql-es hibáig. Nagyon sok "bizbasz" dolgot megnéztem, hogy nem ott van-e valami rés.

    Valójában a fő probléma az volt, hogy nem tartottam magam a "kötelező" lépésekhez, hanem össze-vissza csináltam a dolgokat. Amikor találtam valamit elkezdtem azt nézegetni ahelyett, hogy szisztematikusan végigmantem volna egy előre elkészített csekklistán. Ez amatőrizmus volt a részemről - de mivel kudarcaiból tanul az ember azóta fejlesztettem pár dolgot a vizsgálati módszereimen. (Végülis ez a célja az ilyen feladványoknak, hogy tökéletesítsük a mószereinket és fejlesszük a tudásunkat)

    VálaszTörlés
  3. Én is élveztem nagyon a játékot, köszönet érte :)
    Mivel jelszóval egyszerűen be lehetett lépni a phpmyadminba ezért csak annyit kellett tenni,hogy a s2crew user jelszava md5+salt volt ,ezt nem érte meg bruteforcolni, ezért user edit és átállítottam MD5-re és mellé beírtam a secret jelszót és mentés.Így már az admin felületen be lehetett lépni.Kicsit macerás volt nap közben mert mindenki ütötte ki egymás ssh kulcsát :)
    Ez látszik a második videódon is ahol az én kulcsom szeded ki éppen :) (root@ZAX)
    A rootolás menetére én is kiváncsi lennék :)

    VálaszTörlés
    Válaszok
    1. Ez ok, de hogy szerezted meg a jelszót a phpadminhoz ? Szerintem ez egy lényeges pont. A konfig ~ file-ra találtál rá? Mert ha igen, úgy könnyű :)

      Csak azért szedtem ki a kulcsod, mert előtte törölted az enyém :P holott appendolni is elég jól lehetett - volt, hogy jónéhány kulcs figyelt az authorized_keys fileban. Mert mindenki szépen csak hozzáadta a sajátját.

      Mondjuk az ssh belépés után már nem igen volt szükség a kulcsra, hacsak nem akartál egyszerre több ablakban belépni.

      A rootot a gitSCBconsole-val kellett megszerezni - szerintem. Exploitok nem működtek és egyéb konfigurációs hibát se találtam amivel trükközni lehetett volna...

      Törlés
  4. a PMA jelszót a cfg file-ba találtam :)
    elsőnek a sqli vuln-ot találtam meg utána meg a cfg-t.Innen szabad út volt végig.Mondjuk 2 gépen toltam, egy kali linuxal és egy win7-el.De a win7-et nem erre találták ki.A szomorú az volt hogy összeomlott a Kali és rakhattam ujra.
    A root-hoz pedig egy heap overflow exploit kellett volna.De sajna odáig nem jutottam már el, csak a 226, 227 -be tudtam ssh-t tolni.
    Buhera kirakta a megoldást egy videóban.

    VálaszTörlés
    Válaszok
    1. Köszi a videó linkjét :) Megint tanultam 1-2 trükköt! :)
      (Azt a load_file dolgot nem ismertem (nem vagyok egy sql guru és a linuxot is csak annyira ismerem amennyire kell. Inkább Windowson bűvészkedem :)

      Kérdés : Nekem a Kali Virtualboxban nem indul el. Valami érdekes hibaüzenettel leáll... Te VMWare alatt használod? Sajnos a weben nem találtam EGYSZERŰ megoldást a problémára.

      Ez a probléma:
      http://superuser.com/questions/601403/unrecoverable-system-error-when-try-to-install-kali-linux-on-virtualbox-running

      Egyelőre LiveCD-ről használom, de így nem az igazi...

      Törlés
    2. Hát ez de gáz.... 10 órával ezelőtt beírta valaki a megoldást :D pffff....

      Ezt mindjárt ki is próbálom :D (16G-s virtuális lemezzel állítólag megy....)

      Törlés
  5. ja.. és a hivatalos megoldás videó :)
    http://vimeo.com/66811900

    VálaszTörlés
    Válaszok
    1. A "nem hivatalos" joomla adminos/php shelles verzió csak nekem tűnik picit egyszerűbbnek ?

      Törlés

Megjegyzés: Megjegyzéseket csak a blog tagjai írhatnak a blogba.