Professional Documents
Culture Documents
This is a Leanpub book. Leanpub empowers authors and publishers with the Lean Publishing
process. Lean Publishing is the act of publishing an in-progress ebook using lightweight tools and
many iterations to get reader feedback, pivot until you have the right book and build traction once
you do.
2016 Peter Yaworski y Edwin A. Cartagena Hernndez
Peter: A andrea y Ellie, gracias por apoyarme y ser mi fuente constante de motivacin y confianza.
No solamente pudiera ser que nunca hubiera terminado este libro sin ustedes, sino que mi jornada
en el apasionante mundo del hacking nunca hubiera comenzado.
Al equipo de HackerOne, este libro quizs no sera lo que es si no fuese por ustedes, gracias por todo
su apoyo, retroalimentacin y por el trabajo con el que han contribuido a hacer de este libro ms que
un anlisis de 30 publicaciones.
Finalmente, mientras que este libro se vende por una cantidad mnima de $9.99, las ventas en el
precio suberido de $19.99 o por encima de ste, me ayudan a mantener bajo el precio mnimo, de tal
forma que este libro se mantenga accesible para las personas que no pueden permitirse el lujo de
pagar ms por l. Esas ventas tambin me permiten tomar un tiempo para alejarme de la bsqueda
de vulnerabilidades para estar aadiendo ms contenido y hacer un mejor libro de tal manera que
todos aprendamos juntos.
Mientras que lo deseo tanto, pudiera nombrar a cada una de las personas que pagaron ms del precio
mnimo (por la edicin en ingls de este libro) para agradecerles, la lista pudiera ser muy larga pero
realmente no conozco ningn detalle de contacto de los compradores a menos que ellos me contacten.
Sin embargo, hay un grupo pequeo quienes pagaron ms del precio sugerido cuando hicieron sus
compras, los cuales fueron ms all de lo esperado. A quienes me gustara reconocerles aqu.
Entre ellos se incluyen: 1. @Ebrietas0 2. Comprador misterioso 3. Comprador misterioso 4. @nahamsec (Ben Sadeghipour) 5. Comprador misterioso 6. @Spam404Online 7. @Danyl0D (Danylo Matviyiv)
Si t debes estar en esta lista, por favor, mndame un mensaje directo a Twitter. A cada uno de
quienes han comprado una copia de este libro, Gracias!
Edwin: a H Quien me ha dotado de sorprendentes herramientas. Atah-HaKol. A Mara Jos,
impresionante mujer fuente de motivacin y quien me da la dosis extra de confianza para todos
mis proyectos. Te Amo. A mi madre, quien me ha formado y me ha inculcado valores para ser una
persona de bien con mis semejantes. Usted es muy especial. A Peter Yaworsky, autor de este libro, por
su voto de confianza y permitirme formar parte de este proyecto. Gracias, Pete! A mis amigos hackers
que me han inspirado y de diferentes maneras me han brindado su apoyo en este apasionante arte
de la seguridad informtica. Gracias: * Rodolfo Cecea @roberknight01 * Kirlian Zepeda, [DEP] *
Stefan Rivera @CiskoSV
ndice general
Prefacio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Inyeccin HTML
Descripcin .
Ejemplos . .
Resumen . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11
11
11
16
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
17
17
18
23
Prefacio
La mejor forma de aprender algo es simplemente hacindolo. As es como nosotros - Michiel Prins
y Jobert Abma - aprendimos a hackear.
ramos jvenes. Como todos los hackers que estuvieron antes que nosotros, y todos los que
vendrn despus. ramos conducidos por una incontrolable y candente curiosidad por entender
cmo funcionaban las cosas. Mayormente fuimos jugadores de vdeo juegos por computadora y
ya por la edad de los 12 aos decidimos aprender por nosotros mismos cmo construir software.
Aprendimos cmo programar en Visual Basic y PHP con libros de la biblioteca y obviamente con la
prctica.
Con nuestro entendimiento del desarrollo de software, rpidamente descubrimos que esas habilidades nos permitieron encontrar los errores de otros desarrolladores. Cambiamos la construccin por
el rompimiento y es as como el hacking ha sido nuestra pasin desde entoces. Para celebrar nuestra
graduacin de la escuela secundaria, tomamos el control de un canal de servicios de televisin abierta
y pusimos un anuncio felicitando a nuestra clase de graduacin. Mientras con el pasar del tiempo
nos divertamos, tambin aprendimos rpidamente que hay consecuencias y que ese no es el tipo de
hackers que el mundo necesita. La estacin de televisin y la escuela no se divirtieron con nosotros
y fue as que pasamos ese verano limpiando ventanas como nuestro castigo. Ya en la Universidad,
volvimos nuestras habilidades en un negocio de consultora viable, que en su apogeo, tenamos
clientes en el sector pblico y privado en todo el mundo. Nuestra experiencia en el hacking nos llev
hacia HackerOne, una compaa que fundamos en conjunto en el 2012. Quisimos permitir a cada
compaa en el universo que trabajara con hackers de forma satisfactoria, y esa idea contina siendo
la misin de HackerOne hoy en da.
Si ests leyendo esto, t tambin tienes la curiosidad necesaria para ser un hacker y cazador de
errores. Creemos que este libro ser una tremenda gua a lo largo de tu jornada. El libro est lleno
con una rica cantidad de ejemplos de reportes de vulnerabilidades del mundo real que resultaron en
recompensas reales por encontrar esos fallos. Estos ejemplos estn acompaados de un anlisis muy
til y su respectiva revisin por parte de Pete Yaworsky, quien es el autor y un colega hacker. l es
tu compaero a medida que aprendas, y eso es muy valioso.
Otra razn por la que este libro es muy importante, es que te enfoca en cmo convertirse en un hacker
tico. Dominar el arte del hacking puede ser una habilidad extremadamente poderosa que esperamos
sea usada para el bien. Los hackers ms exitosos saben como navegar entre la lnea delgada de lo
correcto y lo incorrecto mientras hackean. Muchas personas pueden romper cosas y an as intentar
hacer dinero fcil haciendo eso. Pero, imagnate hacer la Internet cada vez ms segura, trabajar con
compaas impresionantes alrededor del mundo y que paguen por tus hallazgos. Tu talento tiene el
potencial de mantener seguros a billones de personas juntamente con sus datos. Eso esperamos que
sea a lo que aspires.
Prefacio
Estamos agradecidos infinitamente con Pete por tomarse el tiempo para documentar todo esto tan
elocuentemente. Nosotros hubiramos deseado tener un recurso como este cuando iniciamos. Se
disfruta mucho leyendo el libro de Pete porque contiene la informacin necesaria para hacerte
despegar en esta jornada del hacking.
Divirtete leyendo y happy hacking!
Recuerda hackear responsablemente.
Michiel Prins y Jobert Abma Co-Fundadores, HackerOne
Introduccin
Gracias por comprar este libro. Espero que te diviertas mucho leyendo as como yo lo hice
investigando y escribindolo
Web Hacking 101 es mi primer libro, orientado a ayudarte a que te inicies en el hacking. Comenc
escribindolo como una publicacin auto explicatoria de 30 vulnerabilidades, un subproducto de mi
propio aprendizaje. Pero rpidamente esto se volvi en mucho ms que eso.
Mi esperanza en este libro es, por lo menos, abrirte los ojos al amplio mundo del hacking, y en el
mejor de los casos, espero que este sea tu primer paso al frente para hacer de la web un lugar ms
seguro mientras ganas dinero haciendo ese trabajo.
Cmo los hackers aprendieron sobre las vulnerabilidades que ellos encontraron?
Dnde hay personas encontrando vulnerabilidades?
Cmo los hackers inician el proceso de hacking en un sitio objetivo?
A caso el Hacking es el uso de herramientas automatizadas?
Cmo puedo iniciar buscando vulnerabilidades?
Introduccin
del desarrollador, contemplando la necesidad de sanitizar los valores de entrada y evitar usar
directamente la informacin que proporciona el usuario. Ahora es que estoy comenzando a entender
qu es todo lo que se puede buscar, pero desde la perspectiva de un hacker.
Me mantuve buscando ms informacin de como hackear y me pas por los foros de ayuda
de Bugcrowd. Desafortunadamente no presentaban mucha actividad en ese tiempo, pero hubo
alguien que mencion la hacktividad de HackerOne y enlazaba a un informe. Al seguir el enlace
me impresion. Estaba leyendo la descripcin de una vulnerabilidad, escrita a una compaa que
consinti en mostrarla al mundo. Tal vez lo ms importante de eso, es que la compaa le pag al
hacker que encontr la vulnerabilidad y present el informe!
Eso fue un punto crucial, me obsecion. Especialmente cuando una compaa de origen canadiense,
Shopify, pareca estar liderando las listas de divulgacin en ese tiempo. Al revisar el perfil de Shopify,
la lista de divulgacin estaba repleta de reportes abiertos al pblico. No pude leer lo suficiente
al respecto, pero entre las vulnerabilidades se incluan programacin de script de sitio cruzado
(Cross-Site Scripting, conocido tambin como XSS), fallas de autenticacin y tambin falsificacin
de peticin de sitio cruzado (Cross-Site Request Forgery, conocido tambin como CSRF) por nombrar
solamente algunas.
Lo admito, en este punto he tenido problemas para entender lo que se detalla en los informes. Algunas
de las vulnerabilidades y sus mtodos de explotacin fueron difciles de entender.
Buscando en Google cmo poder entender un informe en particular, termin en un hilo de un
problema de Github por una antigua vulnerabilidad de debilidad de un parmetro predeterminado
de Ruby on Rails (esta est detallada en el captulo Lgica de la Aplicacin), reportada por Egor
Homakov. Dando seguimiento al trabajo de Egor me condujo a su blog, el cual incluye divulgaciones
de algunas vulnerabilidades que son seriamente complejas.
Leyendo sobre sus experiencias, me puse a pensar, el mundo del hacking se puede beneficiar de las
expliaciones en lenguaje claro de las vulnerabilidades del mundo real. Y entonces me di cuenta, que
yo aprendo de mejor manera enseando a otros.
Y as fue como naci Web Hacking 101.
Introduccin
el acceso a todas las actualizaciones. Envi un tweet agradeciendo a HackerOne y a Shopify por
sus publicaciones y aprovech para decirle al mundo sobre mi libro. Ciertamente, no tena muchas
expectativas.
Pero dentro de unas horas, hice mi primera venta.
Estaba eufrico con la idea que alguien pagara por mi libro (algo que haba creado y que haba
puesto una tonelada de esfuerzo en l), inici sesin en LeanPub para ver qu poda encontrar sobre
el comprador misterioso. No encontr nada. Pero de repente vibr mi telfono celular, haba recibido
un tweet de Michiel Prins diciendo que le gustaba el libro y me pidi que me mantuviera en ese ciclo.
Quin demonios es ese tal Michiel Prins? Revis su perfil de Twitter y todo me dio vueltas, l es uno
de los Co-Fundadores de HackerOne. Mierda! Una parte de m pensaba que HackerOne no podra
estar impresionado con mi confianza en su sitio para ponerlo en el contenido. Pero intent tener una
actitud positiva y Michiel pareca ser de apoyo al pedirme que me mantuviera en este ciclo, as que
esto pareca ser inofensivo.
No mucho despus de la primera venta, recib una segunda venta y pens que algo estaba pasando.
Coincidentemente, cerca del mismo tiempo, recib una notificacin de Quora sobre una pregunta en
la que probablemente podra estar interesado, Cmo me volv en un exitoso cazador de recompensas
por encontrar errores?
Esto significaba compartir mi experiencia cmo haba iniciado, sabiendo lo que era estar en estos
zapatos, y tambin quera hacerlo con el propsito personal de promover mi libro. Pens que poda
escribir una respuesta. A mitad del camino, me di cuenta que la nica otra respuesta que estaba
haba sido escrita por Jobert Abma, otro de los Co-Fundadores de HackerOne. Una voz con mucha
autoridad en el mundo del hacking. Mierda, otra vez!
Contempl abandonar mi respuesta, pero mejor decid por reescribirla basndome en su respuesta,
ya que no podra competir con sus consejos. Presion el botn de enviar y ya no pens en nada. Pero
despus recib un correo interesante:
Hola Peter, vi tu respuesta en Quora y me doy cuenta que ests escribiendo un libro
sobre hacking de sombrero blanco. Me gustara saber ms.
Saludos cordiales,
Marten CEO, HackerOne
Triple mierda! En este punto, muchas cosas corran por mi mente, ninguna de ellas era positiva y
ciertamente muchas eran irracionales. En resumen, me imagin que por la nica razn que Marten
podra escribirme era para dejar caer el martillo sobre mi libro. Tengo que agradecer que eso no
pudo haber sido ms all de la realidad.
Le respond explicndole quien era yo y qu es lo que estaba haciendo - que estaba intentando
aprender a hackear y ayudar a otros que aprendan conmigo. Por su parte, l vino a ser un gran
seguidor de la idea. Me explic que HackerOne est interesado en que crezca la comunidad y en
ayudar a que los hackers aprendan como un tipo de beneficio mutuo para cada uno de los que
Introduccin
Introduccin
Por lo consiguiente, cada ejemplo dentro de esos captulos est estructurado de la misma manera e
incluye:
Introduccin
Captulo 5 cubre las inyecciones de Alimentacin de Lnea y Retorno de Carro (CRLF). En l vers
ejemplos de envo del caracter retorno de carro y rompimiento de lneas as como el impacto que
esto hace en el renderizado del contenido de un sitio.
Captulo 6 cubre las vulnerabilidades de falsificacin de peticin de sitio curzado (CSRF), llevndote
a travs de ejemplos de cmo los usuarios pueden ser engaados al enviar informacin a un sitio
en el que ellos estn logueados, con la diferencia que ellos no saben que lo estn haciendo sin su
consentimiento.
Captulo 7 cubre vulnerabilidades basadas en la lgica de la aplicacin. Este captulo ha crecido
tanto que atrapa a todas las dems vulnerabilidades, por lo que considero que est enlazado a las
fallas lgicas de programacin. He concluido que este tipo de vulnerabilidades podra ser fcil de
encontrar para un principiante en vez de estar buscando formas raras y creativas de enviar entradas
maliciosas a un sitio.
Captulo 8 cubre la vulnerabilidad de programacin de script de sitio cruzado (XSS), un tema de
categora masiva con una variedad enorme de formas de cmo poder explotarlo. XSS representa
oportunidades enormes tanto as que, probablemente, podra escribirse un libro entero tratando
solamente este tema. Hay una tonelada de ejemplos que podra haber incluido, pero intentar
enfocarme en los ms interesantes y tiles para el aprendizaje.
Captulo 9 cubre las inyecciones de cdigo de Lenguaje de Consulta Escrtucturada (SQL), lo cual
implica la manipulacin de la base de datos para extraer, actualizar o borrar informacin de un sitio.
Captulo 10 cubre el tema de las Redirecciones Abiertas. Una vulnerabilidad interesante la cual
envuelve la explotacin de un sitio y dirigir a los usuarios a que visiten otro sitio.
Captulo 11 cubre la toma de control de subdominios. Algo en lo que aprend mucho investigando
para ponerlo en este libro. Esencialmente, se trata de que un sitio se refiere a un subdominio alojado
con un servicio a cargo de terceros, pero el sitio principal nunca reclama la direccin apropiada
para ese servicio. Esto podra permitir a un atacante registrar la direccin del servicio a cargo de ese
proveedor externo de tal forma que todo el trfico que se cree que viene del dominio original (de la
vctima), actualmente proviene del atacante.
Captulo 12 cubre las vulnerabilidades relacionadas a las Entidades Externas de XML (XXE), lo que
resulta del anlisis del lenguaje de marcado extensible (XML). Este tipo de vulnerabilidades puede
incluir cosas como lectura de ficheros privados, ejecucin remota de cdigo, etc.
Captulo 13 cubre la ejecucin remota de cdigo (RCE). Significa que un atacante pude desencadenar
cdigo arbitrario sobre el servidor de la vctima.
Captulo 14 cubre las inyecciones de plantillas, buscando ejemplos en lado del ciente as como en
el lado del servidor. De este modo, se explican los motores de plantillas, as como su impacto y la
gravedad en este tipo de vulnerabilidad.
Captulo 15 cubre la falsificacin de peticin del lado del servidor, la cual permite a un atacante
usar un servidor remoto para hacer peticiones HTTP subsecuentes a nombre del atacante.
Captulo 16 cubre vulnerabilidades relacionadas a la memoria. Un tipo de vulnerabilidad as se
puede pensar en que su hallazgo est tpicamente relacionado a la programacin con lenguajes de
Introduccin
bajo nivel. No obstante, descubrir este tipo de fallos puede conllevar a otras vulnerabilidades muy
serias.
Captulo 17 cubre el tema de cmo iniciarse en el hacking. Este captulo est pensado para ayudarte
a considerar dnde y cmo buscar vulnerabilidades, lo que es totalmente opuesto a una gua paso a
paso para poder hackear un sitio.
Captulo 18 est en discusin que sea uno de los captulos ms importantes del libro, ya que este
provee consejos para escribir informes de forma efectiva. Todo el mejor hacking del mundo no
significa nada si no se puede informar apropiadamente del problema a la compaa afectada. Como
tal, he remarcado algunas compaas de gran nombre que pagan recompensas muy generosas debido
a los reportes que les fueron entregados y que fueron asesorados por HackerOne. Asegrate de
poner mucha atencin a este captulo.
Captulo 19 cambian los engranajes. Aqu profundizamos en las herramientas de hacking recomendadas. Este captulo fue completamente donado por Michiel Prins de HackerOne. Describe una
tonelada de herramientas interesantes las cuales harn tu vida ms fcil! Sin embargo, a pesar de las
herramientas, no hay nada que reemplace la observacin cuidadosa y el pensamiento creativo.
Captulo 20 est dedicado a ayudarte a que lleves tu hacking al siguiente nivel. Aqu te llevaremos
a travs de algunos recursos impresionantes para continuar aprendiendo. Nuevamente, tomando el
riesgo que esto pueda sonar como un disco rayado, un gran agradecimiento a Michiel Prins por
contribuir a esta lista.
Captulo 21 concluye el libro y destapa algunos conceptos claves que deberas conocer mientras
hackeas. Dado que la mayora de trminos han sido discutidos en los otros captulos, algunos que
estn aqu no lo fueron. As que te recomendara tomar una lectura por aqu.
Introduccin
10
permteme saber cmo te est yendo. Ya sea de forma exitosa o no, me gustara saber de ti. La cacera
de fallos podra ser un trabajo solitario si t ests luchando en solitario, pero tambin es maravilloso
poder celebrarlo unos con otros. Y tal vez tu hallazgo sea algo que podemos incluir en la siguiente
edicin.
Buena suerte!!
Inyeccin HTML
Descripcin
la inyeccin de Lenguaje de Marcado de Hipertexto (HTML) a veces tambin es conocida como una
desfiguracin virtual de una pgina. Realmente este es un ataque hecho posible por un sitio que
permite que un usuario mal intencionado inyecte marcas HTML dentro de su(s) pgina(s) web, y
esto es porque no maneja apropiadamente las entradas de datos del usuario. Dicho de otra forma,
una vulnerabilidad de inyeccin HTML es causada por recibir etiquetas HTML, tpicamente por la
va de un formulario de entrada, cuyo contenido es renderizado de forma literal dentro de la pgina.
Hay que hacer notar que esto es totalmente aparte de inyectar cdigo Javascript, VBscript, etc
Debido a que HTML es el lenguaje utilizado para definir la estructura de una pgina web, si un
atacante puede inyectar marcas HTML podr cambiar lo que se mostrar en el navegador. Algunas
veces esto puede resultar en un cambio de apariencia total de la pgina, o en otros casos, la creacin
de formularios para engaar a los usuarios. Por ejemplo, si t pudieras inyectar HTML, y estuvieras
habilitado para agregar una etiqueta <form> en esa pgina para preguntarle a un usuario que
reingrese el nombre con que se registra y su contrasea. Entonces, al enviar ese formulario, lo que
realmente se estara haciendo es enviar la informacin a un atacante.
Ejemplos
1. Comentarios en Coinbase
Dificultad: Baja
URL: coinbase.com/apps
Enlace del informe: https://hackerone.com/reports/104543
Fecha del informe: 10 de Diciembre, 2015
Recompensa recibida: $200
Descripcin:
Para esta vulnerabilidad, el hacker identific que en Coinbase estaba decodificando valores URI
estaban codificados cuando renderizaba el texto. Para aquellos que no estn familiarizados (as
como yo al momento de escribir esto), los caracteres en una URI pueden ser ya sea reservados o
no reservados. De acuerdo a Wikipedia, los caracteres reservados son los que a veces tienen un
https://hackerone.com/reports/104543
Inyeccin HTML
12
significado especial, tal como / y &. Los caracteres no reservados son aquellos que no tienen un
significado en especial, los cuales son, tpicamente, las letras.
Entonces, cuando un caracter est codificado en la URI, ste es convertido a su valor de byte en el
Cdigo Estndar Americano para el Intercambio de Informacin (ASCII), y est precedido con el
signo de porcentaje (%). Entonces, / se convierte en %2F, & se convierte en %26. Como una resea,
ASCII es un tipo de codificacin que era el ms comn en Internet hasta que lleg UTF-8, el cual es
otro tipo de codificacin.
Ahora, de regreso a nuestro ejemplo, si un atacante ingresara un cdigo HTML como el siguiente:
1
En ese momento, Coinbase poda renderizar el cdigo como texto plano, exactamente como lo acabas
de ver. Sin embargo, si el usuario hubiera enviado caracteres codificados por URL, as como estos:
1
%3C%68%31%3E%45%73%74%61%20%65%73%20%75%6E%61%20%70%72%75%65%62%61%3C%2F%68%31%3E
Inyeccin HTML
13
Con este ejemplo, que tal si se te ocurre inyectar una etiqueta meta como la siguiente:
1
el navegador podra enviar todo el contenido que se encuentre entre las dos comillas simples. Ahora
bien, regresemos, esto era lo que saba y fue divulgado en HackerOne en el informe #110578 por
intidc (https://hackerone.com/intidc). Cuando eso vino a ser pblico, mi corazn se baj un poco.
De acuerdo a la opinin de HackerOne, ellos confiaron en una implementacin de Redcarpet (una
biblioteca de Ruby para el procesamiento de Markdown) para hacer escapar la salida HTML de
cualquier entrada en Markdown la cual es pasada directamente al DOM del HTML (por ej., la pgina
web) por la via de dangerouslySetInnerHTML en su componente React. Como nota aclaratoria, React
es una biblioteca Javascript que puede ser utilizada para actualizar de forma dinmica parte del
contenido de una pgina web sin recargar toda la pgina.
El DOM se dirige a una Interfaz de Programacin de la Aplicacin (API) para un HTML vlido
y documentos XML bien formados. Esencialmente, de acuerdo con Wikipedia, el DOM es una
https://hackerone.com/reports/112935
https://hackerone.com/reports/110578
Inyeccin HTML
14
convencin independiente de la plataforma y del lenguaje para representar e interactuar con objetos
en documentos HTML, XHTML y XML.
En la implementacin de HackerOne, no estaban haciendo escapar apropiadamente la salida del
cdigo HTML lo cual conduca a un exploit en potencia. Ahora, dicho eso, viendo el informe pens
que poda probar el cdigo nuevo. Fui de regreso al editor y escrib:
1
2
Como puedes ver, estuve habilitado a inyectar HTML dentro de la etiqueta <a>. Como resultado,
HackerOne reverti la solucin y comenz a trabajar de nuevo en el escapado de la comilla simple.
Recomendaciones
El hecho que un cdigo est actualizado no significa que algo est solucionado. Contina
haciendo pruebas. Cuando se despliega un cambio de cdigo, eso significa que el cdigo
nuevo tambin puede contener errores.
Adicionalmente, si sientes que algo no anda bien, sigue profundizando! Yo saba que el
hecho de soltar una comilla simple poda ser un problema, pero lo que no saba era como
explotarlo y por eso me detuve. Deb haberme mantenido en la bsqueda. De hecho, aprend
sobre el exploit de la actualizacin de pgina por medio de la etiqueta meta al leer sobre
XSS en el blog de Jigsaw blog.innerht.ml (este est incluido en el captulo sobre Recursos),
pero fue hasta mucho despus.
15
Inyeccin HTML
https://withinsecurity.com/wp-login.php?error=acceso_denegado
Habiendo descubierto esto, el hacker intent modificar el parmetro de error y encontr que lo que
fuese que escribiera estaba siendo renderizado en el sitio como parte del mensaje que era presentado
a los usuarios. Aqu est el ejemplo que se utiliz:
1
https://withinsecurity.com/wp-login.php?error=Tu%20uenta%20ha%20%sido%20hackeada
La clave aqu era fijarse en el parmetro de la URL que estaba siendo renderizado en la pgina.
Aunque no lo explican en el informe, podra pensar que el hacker se dio cuenta que el mensaje
acceso_denegado tambin estaba siendo incluido en la URL. Simplemente con cambiar el parmetro
probablemente revel la vulnerabilidad de la cual inform.
Inyeccin HTML
16
Recomendaciones
Siempre mantn un ojo en los parmetros de la URL que estn siendo pasados y renderizados en el contenido del sitio. Esto podra presentar oportunidades para que los atacantes
engaen a las vctimas al realizar alguna accin mal intencionada.
Resumen
La inyeccin HTML presenta una vulnerabilidad para los sitios y los desarrolladores porque esta
puede ser utilizada para desviar a los usuarios a que enven informacin sensible o que visiten sitios
web maliciosos o mal intencionados. Conocido de otra manera como ataques de phishing.
Para descubrir estas vulnerabilidades no siempre se trata de enviar HTML plano sino de explorar
como un sitio podra estar renderizando el texto que hayas ingresado, as como los caracteres
codificados en la URI. Y, mientras no sea completamente lo mismo que una inyeccin HTML,
el contenido engaoso es parecido en que ste se introduce en algn tipo de entrada que es
reflejado nuevamente en la pgina HTML que obtiene la vctima. Los hackers siempre deberan estar
examinando la oportunidad de manipular los parmetros de una URL y que estos sean renderizados
en el sitio.
18
Esto es til si un atacante pudiera modificar sus solicitudes, las cuales fueran procesadas en un
sistema que sea vulnerable. Pero an podra ser ms til a un atacante si l pudiera generar un
enlace desde otro sitio web y atraer a los usuarios a que, sin su conocimiento o consentimiento,
enven la solicitud maliciosa con el parmetro agregado por el atacante.
Desde la otra perspectiva, el ataque HPP en el lado del cliente tiene que ver con la inyeccin de
parmetros adicionales a los enlaces y otros atibutos del tipo src. Tomando prestado un ejemplo de
la OWASP, supongamos que tenemos este cdigo:
1
2
Esto toma un valor para el parmetro par desde la URL, se asegura que el contenido que recibir el
parmetro est a salvo de caracters extraos y crea un enlace fuera de l. Entonces, si un atacane
enva esto:
http://host/page.php?par=123%26action=edit
Esto podra llevar a que la aplicacin acepte la accin de editar en vez de la accin visualizar.
Ambos tipos de ataques HPP, tanto del lado del servidor como del lado del cliente dependen de
la tecnologa backend que est siendo utilizada y de cmo se comporte cuando reciba mltiples
parmetros con el mismo nombre. Por ejemplo, PHP/Apache utiliza la ltima coincidencia que
aparezca, Apache Tomcat utiliza la primera, ASP/IIS utiliza todas las coincidencias que aparezcan,
etc. Como resultado tenemos que, no hay una sola garanta que en la manipulacin y envo de
mltiples parametros con el mismo nombre y la bsqueda de ataques HPP no dejar de tomar un
tiempo para experimentar y confirmar cmo funciona el sitio web que ests evaluando.
Ejemplos
1. Botones para compartir en medios sociales del sitio HackerOne
Dificultad: Baja
URL: https://hackerone.com/blog/introducing-signal-and-impact
Enlace del informe: https://hackerone.com/reports/105953
Fecha del informe: 18 de Diciembre, 2015
Recompensa recibida: $500
https://hackerone.com/reports/105953
19
Descripcin: HackerOne incluye enlaces para compartir contenido en sitios de redes sociales
populares como Twitter, Facebook, etc. Esos enlaces a los medios sociales incluyen parmetros
especficos al enlace del medio social.
La vulnerabilidad fue descubierta cuando un hacker pudo pegarse a un parmetro de otra URL del
enlace y hacerlo que apuntara a un sitio de su eleccin, en el cual HackerOne lo poda incluir en
la solicitud POST hacia el sitio de medios sociales, y por lo tanto, resultaba en un comportamiento
inesperado.
El ejemplo utilizado en el informe de la vulnerabilidad, fue cambiar la siguiente URL:
https://hackerone.com/blog/introducing-signal
por esta:
https://hackerone.com/blog/introducing-signal?&u=https://vk.com/durov
Fjate en el parmetro u que aadi. Si el nuevo enlace alterado hubiese sido presionado por los
usuarios visitantes de HackerOne que quieren compartir algo por medio de los enlaces de medios
sociales, el enlace malicioso resultante se ver algo parecido a esto:
https://www.facebook.com/sharer.php?u=https://hackerone.com/blog/introducing-signal?&u=https://vk.
Aqu tenemos que, el ltimo parmetro u que fue aadido precede al primero y, por lo tanto, ser el
que se utilice en la publicacin de Facebook. Cuando se publique en Twitter, el texto predeterminado
sugerido tambin podra ser cambiado por:
https://hackerone.com/blog/introducing-signal?&u=https://vk.com/durov&text=another_site:https://vk.com/durov
Recomendaciones
Procura estar en la bsqueda de oportunidades cuando los sitios web estn aceptando
algn contenido y parecen estar contactando con otro servicio web, como sitios de medios
sociales.
En estas situaciones puede ser posible enviar contenido que est siendo dejado pasar
directamente sin pasar bajo las revisiones de seguridad pertinentes.
20
21
De acuerdo a su documentacin, las Interacciones va web en sitios externos a Twitter, proveen flujos
optimizados en ventanas emergentes para trabajar con tweets o interactuar con usuarios de Twitter
por medio de: Tweet, Respuestas, Retweet, Me gusta y Seguir usuarios. Esto har posible que los
ususarios interacten con los contenidos de Twitter en el contexto de tu sitio sin dejar la pgina que
se encuentra visitando o tener que autorizar una nueva aplicacin web para tener la interaccin.
Aqu hay un ejemplo de cmo luce esto:
Twitter Intent
Haciendo estas pruebas, el hacker Eric Rafaloff encontr que los cuatro tipos de interacciones,
seguir un usuario, simpatizar con un tweet, hacer un retweet o simplemente publicar un tweet eran
vulnerables a HPP.
22
Viendo la publicacin en su blog, si Eric creaba una URL con dos parmetros screen_name como
esta:
https://twitter.com/intent/follow?screen_name=twitter&screen_name=erictest3
Twitter podra manejar la solicitud dando precedencia al segundo parmetro screen_name haciendo
caso omiso del primero. De acuerdo a Eric, el formulario web para lanzar el ataque era parecido a
este:
1
2
3
4
5
6
7
8
9
10
11
Una vctima podra ver el perfil del usuario definido en el primer parmetro screen_name, twitter,
pero al hacer clic al botn, l poda terminar siguiendo a erictest3.
De forma similar, al presentar interacciones para dar me gusta a un tweet, Eric descubri que poda
incluir un parmetro screen_name a pesar de no tener relevancia con el tweet que desearan marcar
como favorito. Por ejemplo:
https://twitter.com/intent/like?tweet_id=6616252302978211845&screen_name=erictest3
Dando un Me gusta a este tweet podra resultar en que una vctima sera presentada con el perfil
correcto del propietario, pero al hacer clic en Seguir podra terminar, nuevamente, siguiendo a
erictest3.
Recomendaciones
Esto es similar a la vulnerabilidad anterior de Twitter respecto al parmetro UID. Sorprendentemente, cuando un sitio es vulnerable a una falla como HPP, esto podra ser un indicio
de un problema sistemtico ms amplio. Algunas veces, si ecuentras una vulnerabilidad
como esta, vale la pena tomarse el tiempo de explorar la plataforma en su totalidad para
ver si hay otras reas donde podras estar habilitado a explotar un comportamiento similar.
En este ejemplo, tal como en el UID de arriba, Twitter estaba pasando un identificador de
usuario, screen_name el cual era susceptible a un ataque HPP basado en su lgica del
sistema backend.
23
Resumen
El riesgo que posee HTTP Parameter Pollution o contaminacin de parmetros HPP depende
realmente de las acciones realizadas por el sistema backend de un sitio y hacia donde ser enviado
el parmetro contaminado.
Descubrir estos tipos de vulnerabilidades depende de la experimentacin, porque mas all de las
otras vulnerabilidades las acciones que pueda llevar a cabo el sistema backend de un sitio podran
ser una caja negra completa para un hacker. Mas usual que lo normal, como un hacker, tendrs que
echar un pequeo vistazo a las acciones que realiza un sistema backend despus de haber recibido
los datos que enviaste.
A travs de la prueba y error, podras descubrir situaciones donde un sitio se est comunicanco con
otro Servidor y entonces iniciar la prueba de contaminacin de parmetros. Los enlaces a medios
sociales usualmente son un buen primer paso pero recuerda mantenerte profundizando y pensar en
el ataque HPP cuando evales las sustituciones de parmetros, como en el caso de los UIDs.