Brute force password guessing - STU-IT/raspi17 GitHub Wiki

Knæk passwords

Du skal gætte password'et til en zip-fil, der er krypteret med password. Metoden vi bruger er baseret på at gætte med forskellige passwords, indtil vi finder et der virker.

Se Violent Python, Chapter 1, side 20 og frem.
Du skal også bruge filen CH1.zip, som indeholder filerne du skal bruge.

I teksten omtales nogle systemfiler på *nix systemer. Dem kan du finde i /etc på RaspberryPi'en.
Prøv:

cat /etc/passwd

Bemærk at der ikke længere er nogen krypterede passwords i filen. Linux og Unix folkene har ændret praksis, pga. disse sårbarheder.
Hvis vi kigger i /etc/shadow kan vi se at der stadig er krypterede passwords der. Nu dog stærkere krypterede.

cat /etc/shadow

duer ikke, fordi det kun er root der har adgang.

sudo cat /etc/shadow

Hvis du skal bruge shadow-filen fra dine script vil jeg foreslå at du kopierer filen med

sudo cp /etc/shadow ~/Desktop/<mappe>

til en mappe du har dit python script i,

og ændrer rettigheder på den så du kan læse og skrive i kopien uden sudo:

sudo chmod o+rw ~/Desktop/<mappe>

Crack med sha512

Shadow filen er, på nuværende linuxer, "krypteret" med sha512 algoritmen.

Opgave

  1. Du skal finde en en python funktion til at generere sha512-encoding, og lave en version af passwdCrack.py hvor vi kan knække nutidens passwords. Formatet af passwordet i shadowfilen er anderledes, se manualen for pythons crypt library. (find selv siden... med google). Det må være muligt at bruge <str>.split(<noget>) til at skille dele ud fra passwordet.
    1. Prøv om du kan bruge vedlagte ordliste fra Dansk Sprognævn. Der er også noget med formatet, her...

pseudokode

# crack passwd program

for alle brugere i shadow-filen
	split linien i (på :)
		1) bruger navn
		2) hashet pw m. salt
	kald funktionen testPass
		(inden i funktionen testPass)
		split hash-streng i (på $)
			1) salt og 
			2) pw 
		for alle ord i dictionary (eller reststavnings ordbogen)
			crypt ordet med salt fra shadow-filen
			sammenlign pw og crypt
			hvis ens
				udskriv match
				og afbryd funtionen (med return)
			ellers
				fortsæt med næste
⚠️ **GitHub.com Fallback** ⚠️