................... ...::: phearless zine #1 :::... ...............>---[ Cross Site Scripting with examples ]---<............... ..........................>---[ by Exoduks ]---<............................ exoduks[at]gmail[dot]com SADRZAJ: [0] Uvod [1] XSS - Sto je to [2] Za sto nam je XSS koristan [3] Dvije najcesce metode XSS napada [4] Primjeri i exploitovanje [5] Primjeri korisnog JavaScript koda [6] Zastita [7] EOF a.k.a THE END *** na kraju teksta se nalazi uuencodeovan XSS-examples.tar.gz sa primerima *** za exploitanje vezanim za ovaj tekst ! //////////////////////////////////////////////////////////////////////////// --==<[ 0. Uvod \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ U ovom tekstu cu vam pisati o Cross Site Scripting propustu u web aplikacijama. Inace XSS propust je dosta rasiren i programeri premalo pozornosti posvecuju sigurnosti web aplikacija. Cross Site Scripting ili skraceno CSS koji mnoge asocira na Cascading Style Sheet i ako jedno s drugim nemaju nikakve veze. Jos je i poznat pod nazivom koji se najcesce upotrebljava, a to je XSS koji cu i ja u daljnjem dijelu koristiti. //////////////////////////////////////////////////////////////////////////// --==<[ 1. XSS - Sto je to \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ XSS je propust koji se javlja kad neka web aplikacija dobije zlonamjerne podatke od korisnika, u najcescem slucaju taj zahjtev sadrzi JavaScript, HTML, VBScript ili neki drugi kod. Jednom kad web aplikacija zaprimi takav kod prosljeduje ga korisnku gdje njegov web browser izvrsi zlonamjerni kod. //////////////////////////////////////////////////////////////////////////// --==<[ 2. Za sto nam je XSS koristan \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ XSS je beskoristan ako zlonamjerni kod izvrsi vas browser na vasem racunalu, jer dobijete vlastite podatke, a to mozete dobiti i bez toga, stoga se XSS primjenjuje na neku osobu od koje zelite dobiti odredjene podatke, natjerate da web aplikacija zlonamjerni kod prosljedi njegovom browseru koji to izvrsava na njegovom racunalu. XSS se najcesce koristi za dobijanje cookie-a i session-a. //////////////////////////////////////////////////////////////////////////// --==<[ 3. Dvije najjace metode XSS napada \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Prva metoda je kada korisnik posalje web aplikaciji zlonamjerni kod i ona ga spremi negdje na serveru (u neku bazu, neki fajl ili nesto trece) i svaki put kada neki korisnik ucita odredjenu stranicu web aplikacija sa servera ucitava zlonamjerni kod i salje ga korisniku koji je posjetio tu stranicu. Druga metoda je da se "zlonamjerni kod" ne pohranjuje na serveru nego ga korisnik unosi nekim putem u web aplikaciju i ona mu ga proslijeduje natrag, te se kod zatim izvrsava. Prva metoda je korisnija od ove druge jer je laksa za exploitati. U 2-oj metodi moramo natjerati na neki nacin zrtvu da ona sama unese zlonamjerni kod koji ce se izvrsiti na zrtvinom racunalu i poslate podatke nama. //////////////////////////////////////////////////////////////////////////// --==<[ 4. Primjeri i exploitanje \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Kao sto sam vec napomenuo uz ova tekst prilozeni se u primjeri ranjivih web aplikacija, koje ste trebali vec instalirati. Prvo sa vasim browserom posjetite: http://www.server.com/XSS-primjer/index.php ...i pokrenut ce se aplikacija koja ce vam ispisati sadrzaj baze, na ovom principu rade forumi, razne knjige gostiju, a velik broj njih je ranjiv na XSS, pogotovo one manje poznate. Nas u ovom dijelu ne zanima kod index.php stranice pa ga necu objasnjavati. Kliknite na link koji se nalazi na index.php stranici "Dodaj tekst !" koji vodi do strance sa formom za unos texta "add.html"(simulacija dodavanja posta na forumu ili knjigi gostiju). Na toj stranici za pocetak cemo unijeti pod naslov "Proba", a pod tekst "Blabalbal" nakon unosa pritisnite submit. Nakon toga trebalo bi vam se pojaviti Uspjesno dodano. Zatim opet posjetite "index.php" na kojoj cete vidjeti text koji ste unijeli preko forme. Zatim otvorite add.php i pogledajte sljedeci kod: ------- star code ------- ------- end code ------- Idemo sad malo razjasniti kod: ... include("config.php"); ... - ukljucuje se fajl config.php u kojem su smjesteni podaci za spajanje na bazu. ... $naslov = $_POST['naslov']; $text = $_POST['text']; ... - ove dvije varijable hvataju POST zahtjev od add.html forme, posto nema nikakve provjere za sadrzajem tih dviju varijabli mozemo bez problema unijeti zlonmajerni kod, kao sto cete vidjeti sami. ... mysql_connect($server, $dbuser, $dbpass); mysql_select_db($database) or die("Greska u spajanju na bazu !"); $query = "INSERT INTO XSS_primjer1 VALUES ('$naslov', '$text')"; mysql_query($query); mysql_close(); echo "Dodano u bazu !"; ... - funkcije za spajanje na bazu i dodavanje sadrzaja varijabli $naslov i $text u bazu, ali taj dio i nije toliko vazan. Znaci koliko vidimo iz gornjeg koda nema provjere ulaznih varijabli $naslov i $text stoga je XSS napad moguc pa idemo da vidiom i to. - sa browserom posjetite add.html i u polje naslov stavite "proba - xss" a pod text stavite sljedeci JavaScript kod: - nakon sto ste unijeli kliknite na submit i zatim ponovno otidite na index.php stranicu. - odmah nakon sto se stranica ucita iskocit ce vam prozor sa porukem "XSS primjer 1 - exploited !" - kao sto smo i predpostavili moguce je unijeti kod i sremiti ga u bazu te ce se izvrsiti na svim korisncima koji posjete tu stranicu. //////////////////////////////////////////////////////////////////////////// --==<[ 5. Primjeri korisnog JavaScript koda \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ //////////////////////////////////////////////////////////////////////////// --==<[ 6. Zastita \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Najbolja zastita protiv XSS napada je da se filtriraju sve ulazne varijable. To se moze uciniti putem gotovih funkcija ili mozete napisati neke provjere da li varijabla sadrzi npr. "script", i tagove <> ! Evo vam nekih funkcija u php-u koje se za to koriste, najcesce u kombinaciji s nekom drugom funkcijom drugom: // from php menual eregi_replace -- Replace regular expression case insensitive This function is identical to ereg_replace() except that this ignores case distinction when matching alphabetic characters. htmlspecialchars -- Convert special characters to HTML entities This function is useful in preventing user-supplied text from containing HTML markup, such as in a message board or guest book application. Idemo vidjeti sto bi se dogodilo da u kod od add.php jos dodamo sljdeci kod: Ispod: ... $naslov = $_POST['naslov']; $text = $_POST['text']; ... Dodamo jos: ... $naslov = htmlspecialchars($naslov); $text = htmlspecialchars($text); ... Idemo sada vidjeti sto ce se dogoditi ako opet u aplikaciju unesemo javascript kod. Posjetite http://www.server.com/XSS-primjer/add.html i unesite i pod Naslovi pod Tekst . Zatim kliknite na submit. Primjetit cete da nam nace iskociti prozor nego ce nam se javascript kod koji smo unijeli ispisati ali se nece izvrsiti. //////////////////////////////////////////////////////////////////////////// --==<[ 7. EOF a.k.a THE END \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Dosli ste na kraj ovog teksta koji je trebao biti malo duzi ali zbog pozurivanja :) morao sam to malo skratiti. Pozdravljam sve koje poznam :) neda mi se pisati sada listu ! Nemojte zamjeriti na gramatickim greskama. BTW. posjetite www.hackgen.org ! begin 644 xss-examples.tar.gz M'XL(`#PU#4(``^U<;5/;2!+FZZDJ_Z'146>XQ;8LOUW`]A8+WETJ0"AP+?RX?%XE'G*"FH%*P2=#@)A"<] M%A"_6&R?F6#VI0SWBL7)9%*8E`N,]XJ=BZ):-Y6BSYB@!5>Z9LMHJ"SUH,3% MA_2D3UNXW"`/Y\F"@Q)T;Z%]P]QH*!K%I(;1&%%)0#')TP^1-VZ:ARR0-)#Y MSFU(37"25-.4]$;&?/?!Z1,NJ&Q.O,!E$Y$OV55+B>![P1#ZG%XW32%O?5IP MA#"!4S]-BSZET@2)A%-ZJD++,!K%1&RCT67N+5(*@?A>+VB:#O*F',7PB1`I MF1(D#_-^_QK%\!-M6PTA.0MZK09)A4.QZ4TA[(=FZYP-R7\]D'0H)&PVBJ0% M?PFZ(MS_^/<1<\D`E-BP"8WBE&C,\YKQ$01DA/U2KR43<%C[S&V:(1/89>*H M.6V::L_'?`V`ANN-[XN*V5@@2=>G,/%HLBGKRKA3FF_+,])VW^;C]09$3X;[V4Z*=U/ M$JA8JI47A)%,NQ_$3;.3;(+GSO.%=T=5I\P%HOC.'Q1VG`Z29.%"IL(?IFF3+#M8BD'Q`0W]12 M:@$8TXJXU]0*Q>>G)6J$K62YQPM;I1?V'G;ED(6W7/4RHTX@/]M<&7V5:G2E MM,P6_(JI7V@`'4I&\4:#9.],Q4JW?C%19$^MME>&SY[_J`M6P6/)^5^R[7+F M_+?5^8\&H#[_UX'G<_YGM^ML-TKK@>T;FP$?6P(^X30PO)C=&??,+:2DP6:L/7^_/5EYQ^Y)"/WSWUC*SZMYR4JJ?*-T:WXX+]'2@%U MY/:6H'Q,^2YLN=U(I"\A*CVDG]04U,>*[]WN]I9+4*<207>`<7`]%.@73O\S M)!`!:OL!"081:F[HDKL(-A,)/T24WZ(8YO'99?NB`\=GG=>`<_,^507P]N#D M3?L2MG-I9W*[D(MES^V84Q%B(ML)K9E!7/=\31.A^( MH0?79.`;J>I1RL%G#O'[ZKJ`BBM11"J;,X8YM4R:GV;MC/8W6:T,'6 MQR.JJE%4,T.&VLZA@#5%R.F(2`]"U$&.AWKGJ4?^>>#!_3^[A7XYCV7^'ZM2 MO>?_JY=*9;W_UX'G8_]][_Z?15_/@WZ>V4UVZJ`U6_=O3[/6ICI>XEHV5OND;;G%V22(1K-B?'^O_"5I#5LQ,K:Z MG`V(@Y6L?6/2]WP*V].\!J0D=N!?60L](<>IB'PY)88#D+3:A:F3:">UW)A#BW-:RLNC?$K3 MCC2ZO!4+&'M=8G?+U-.BBI35G8KXPP_[QK_OV^K:(O^>\.#Y/U.17\YCF?U? ML>V/SO^*K<__=4!M=-2"?^JJ[G$6!6[>83[C>_!GO)B5:S6E(8QIK6G14?NH M?7@0%TEW%V0_6_CRY2$B+NR7L@4_(\KEI,"^7Y!RZI=WH5^Y7S@E5\7"6K:P M5E/__=>#YV'_?N_]'Q_]U_%_' M_S76BR7G_TJ^`GA4_%_%__#\+^OS?RW0\7\=_Y_M?T[=$2W(&[E:'LO\OZ@` M,OM?_?U757T2H/?_&O`[`2_`(?#5O3\"-L:K\I![H:1X4Y:<=@.&E_<1#"BX M6!6OT&C`T"ZDC@$OL8%B&\_H>CX#'\U8'QMYO@ M$@Z/+9_=T<"0#$;X@O0BM)&\^,8_8DX$:/">WAZX(P_%4<+%@N=)*NB0]<#E M40\?(6<]3D8$A1T2%P6AT&.2C3T0!%3`E(Q]9=S24>)G8'+,N(>UYI8U**YA M%'CQ,**=/*3*BV%DW1B*/`O3O@OB\CLTXM70NIB')G1ZLQH30?)82@59^#[/ M,'XGTAO-NL[XXC>?>H5J?$TLZ/_%O;4R'LOT?RG[_4_\___4K&I%Z_]UX/"B M?=!I0^?@IY,VW`@QB]9LOS``TAOEF'#E5-G&>=R!L]<=.'MS<@(NO29X\85< M;E?5C?T/\:]IC3C[_.+X].#B';QJOP/83J-7+XP=4$ZGYNGM\>7!Z?X+0_UD M`T=946:!H[>1'RA?`9#0]QRB'%&HPI1FA\W<;NZ"^_#)NBRYU&6 MVXDG^ZF7O8:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:& 0AH:&QC>)_P$@-@#I`'@````` ` end sum -r/size 19780/2401