Tråd bedømmelse:
  • 1 Stemmer - 3 Gennemsnit
  • 1
  • 2
  • 3
  • 4
  • 5
[STUT] SQLi (SQL Injection)
23-02-2013, 15:21 (Denne besked var sidst ændret: 17-07-2013, 12:38 af Morph3s.)
#1
[STUT] SQLi (SQL Injection)
NOTE: Det her er kun til uddannelsesmæssige formål alene. Der tages intet ansvar for forkert brug af dette.

Indholdsfortegnelse
  1. Teori
  2. Finde sårbarheden
  3. Udnyttelse af sårbarheden
  4. Trække information ud af databasen(Kommer senere)
  5. Ekstra referencer



1. Teori


Navnet SQL injection kommer af injektion i SQL databaser. Det mest hyppigeste er SQL injektion i MySQL databaser via. php scripts som ikke filtrere input ordentligt fra. Dette sker oftest via. kommandoer igennem GET/POST parametre.
Når php scriptet ikke filtrere ordentligt fra kan brugeren overtage kontrollen over hvilke kommandoer der sendes til databasen. Dette kan bruges til at trække informationer ud af databasen såsom brugernavne og kodeord. Du kan finde en liste over disse kommandoer i Ekstra referencer.
SQL Injection kan forebygges ved at filtrere alt input der kommer fra brugeren, og sørge for at der ikke bliver sat nogle andre kommandoer i stedet for det der skulle være.


2. Finde sårbarheden


For at finde sårbarheden i siden skal du først finde et sted hvor siden kører nogle scripts som kan sende kommandoer til databasen. Dette kun f.eks være PHP eller ASP.
I vores eksempel vil vi benytte PHP.
Når du har fundet en side der benytter PHP skal du finde nogle input felter og teste. Dette kan være alt lige fra registrerings formularer, til søge felter. Vær kreativ!

For oftest når du klikker på en nyhed spørg siden ned i deres database efter nyheden.
En typisk måde at se om den modtager nogle ting er ved at kigge i URL'en efter GET parametre. GET parametre er dem som vises efter .php som f.eks
Kode:
www.target.com/news.php?id=23
Her ser du parametren id med værdien 23. Dette bruges oftest af php scripts til at hente nyhed med id 23 fra databasen. Dvs. at den sender en kommando til databasen og beder om nyheden retur

For at teste om hvorvidt den er sårbar, kan man indtaste noget som SQL databasen ikke forstår og giver en fejl meddelse ved. Hvis vi kan indtaste noget i stedet for 23 som giver vi en fejl kan vi vide at php scriptet er ligeglad med hvad vi sætter i stedet for 23.

Der bruges hyppigst tegnet:
Kode:
'
For at teste om hvorvidt der bliver filtreret input eller ej.
URL'en bliver nu til:
Kode:
www.target.com/news.php?id='23

Hvis siden returnere en fejl, i form af en mysql fejl(Dette kan også være andre ting i form af manglende elementer osv.) så ved vi at siden ikke filtrere vores input, og vi kan nu indsætte vores sql kommandoer og sende dem afsted sammen med parameteren id og trække ting ud af databasen

3. Udnyttelse af sårbarheden


For at udnytte sårbarheden skal vi nu til at sende nogle SQL kommandoer afsted via GET parameteren ID som vi fandt ud af var sårbar.

Det første vi skal gøre er at "tælle" antal kolonner i databasen. Dette er de forskellinge kolonner der er i databasen. Databasen kan indeholde f.eks news, username, password, address, emails, contacts.
Dette ville udgøre 6 kolonner i databasen.

Disse kolonner optælles ved brug at sql kommandoen
Kode:
order by
Da vi skal sende order by til databasen skal vi gøre det sådan her:
Kode:
www.target.com/news.php?id=23 order by 1
Dette betyder at vi vælger én.
Nu skal vi så blot øge det nummer og tælle opad indtil vi ikke længere kan.
Kode:
www.target.com/news.php?id=23 order by 1
www.target.com/news.php?id=23 order by 2
www.target.com/news.php?id=23 order by 3
www.target.com/news.php?id=23 order by 4
www.target.com/news.php?id=23 order by 5
www.target.com/news.php?id=23 order by 6
www.target.com/news.php?id=23 order by 7  <----- FEJL!

Fejlen kommer når vi rammer 7 fordi der ikke findes 7 kolonner.
Og når der er fejl ved 7 ved vi at der findes kun 6

Fejlkoden er typisk:
Kode:
Unknown column in order clause

Herefter bruger vi union select. Det er til at vælge dem alle. Og når disse så er valgt kan vi bruge dem til at returnere ting fra databasen som så vises på siden.

Kode:
www.target.com/news.php?id=23 union select 1,2,3,4,5,6
Eller
www.target.com/news.php?id=-23 union select 1,2,3,4,5,6
(Det er forskelligt hvad der virker, prøv dem begge.)

Nu vil der på siden vises nogle numre. Hvis f.eks 2 pludselig vises betyder dette at alt hvad du smider ind istedet for 2 tallet vil vises på det sted.
Hvis vi f.eks smider @@version ind som viser versions nummeret, vil det komme frem.

Kode:
www.target.com/news.php?id=23 union select 1,@@version,3,4,5,6
Hvis versionsnummeret kommer frem har du nu succesfuldt injectet SQL kommandoer via en SQLi sårbarhed. Du kan indtaste alle de kommandoer du ønsker.


4. Trække information ud af databasen(Kommer senere)




5. Ekstra referencer


SQL Kommandoer
Find alle beskeder fra denne bruger
Citer denne besked i et svar
24-02-2013, 11:42
#2
RE: [STUT] SQLi(SQL Injection)
Det ser godt ud! Glæder mig til at se det næste der kommer!
yolo
Find alle beskeder fra denne bruger
Citer denne besked i et svar
24-02-2013, 21:44
#3
RE: [STUT] SQLi(SQL Injection)
God guide som altid morph :D
[Billede: rGvl8UM.png]
Find alle beskeder fra denne bruger
Citer denne besked i et svar
24-02-2013, 22:55
#4
RE: [STUT] SQLi(SQL Injection)
Lækker guide.
Er rimeligt noob med sql injections, så lækkert nok ;)
Besøg denne brugers hjemmeside Find alle beskeder fra denne bruger
Citer denne besked i et svar
20-03-2013, 21:51
#5
RE: [STUT] SQLi(SQL Injection)
God guide! Glæder mig til at se næste afsnit når det engang er skrevet.
"The only truly secure system is one that is powered off, cast in a block of concrete and sealed in a lead-lined room with armed guards." — Gene Spafford
Find alle beskeder fra denne bruger
Citer denne besked i et svar
01-06-2013, 07:03
#6
RE: [STUT] SQLi (SQL Injection)
(01-06-2013, 03:19)Sømanden Skrev: Fed Fed Fed guide!

Tak tak tak !:D

Mange tak. Sig endelig til hvis der mangler noget :)
Følg mig på twitter: https://twitter.com/Morph3s
Find alle beskeder fra denne bruger
Citer denne besked i et svar
01-06-2013, 09:51
#7
RE: [STUT] SQLi (SQL Injection)
"4. Trække information ud af databasen(Kommer senere)"
Hvornår ville du update med den her del? ;)
Besøg denne brugers hjemmeside Find alle beskeder fra denne bruger
Citer denne besked i et svar
01-06-2013, 10:48
#8
RE: [STUT] SQLi (SQL Injection)
(01-06-2013, 09:51)danbirk Skrev: "4. Trække information ud af databasen(Kommer senere)"
Hvornår ville du update med den her del? ;)

Har ikke rigtig haft tid til det, men den kommer sikkert på et tidspunkt :)
Følg mig på twitter: https://twitter.com/Morph3s
Find alle beskeder fra denne bruger
Citer denne besked i et svar
01-06-2013, 13:00
#9
RE: [STUT] SQLi (SQL Injection)
Glæder mig faktisk til at se den næste del :P
Det ser lovende ud.
Find alle beskeder fra denne bruger
Citer denne besked i et svar
28-06-2013, 05:55 (Denne besked var sidst ændret: 28-06-2013, 05:57 af cBOAT.)
#10
RE: [STUT] SQLi (SQL Injection)
Rigtig god, tak. Ser frem til yderligere information.
Find alle beskeder fra denne bruger
Citer denne besked i et svar
« Ældre | Nyere »




User(s) browsing this thread: 1 Gæst(er)