elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  [Aporte] Coloreador de palabras y código. (Para DOM XSS)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Aporte] Coloreador de palabras y código. (Para DOM XSS)  (Leído 2,160 veces)
@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.397


Turn off the red ligth


Ver Perfil WWW
[Aporte] Coloreador de palabras y código. (Para DOM XSS)
« en: 26 Febrero 2020, 03:40 am »

Os comparto un script que hice para resaltar palabras que suelen ser comunes en las inyecciones DOM XSS.

Qué hace?
-Obtiene el código fuente de la página web en la que estás, y te lo muestra con las palabras más interesantes coloreadas. Util para centrar la vista en lo que quieres y entender de un vistazo como entran los datos en la aplicación.

Preview del resultado de aplicar el scriprt a una página:


Como usar?
-Copiar el código, pegarlo en la barra del navegador y darle a enter.
*Si tu navegador elimina la palabra javascript de la barra de direcciones automáticamente al pegar el código, puedes copiar todo el script menos la primera letra j. Escribes la j en la barra del naevegador y pegas el código.

Copiar De Aquí

Otros usos?
- Puedes cambiar las palabras por las que tu quieras y darle otro uso. O utilizar prompt() dentro de un bucle para obtener las palabras de forma interactiva.

Comentario del código:
Código
  1. /*Funcion que remplaza varios caracteres inseguros del string que se le pase como parámetro en la llamada por su entidad homóloga. */
  2. function htmlEntities(str) {
  3.  r='replace'; /* Acortador para el método replace */
  4.  z=document; /* Acortador para document */
  5.  x=str[r] /* Utilizo la sintaxis del operador array en lugar de la de punto para acortar el código. Ej, de window.alert("hola") a window["alert"]("hola") o si utilizas variables a w[a](h); */
  6. (/ /g," ")[r]
  7. (/!/g,"!")[r]
  8. (/"/g,""")[r]
  9. (/%/g,"%")[r] /* Son múltiples replaces sobre el msimo string utilizando encadenamiento de métodos. El replace toma 2 parámetros, el string a remplazar y el string que ocupará su lugar. Utilizo RegExp Expresiones regulares /caracter/ para buscar un caracter y //g para buscar todas las ocurrencias de ese caracter en el string que se le pasó por parámetro a la función. El segundo parámetro es la entidad HTML correspondiente a dicho caracter. La entidad nos permite ver el caracter sin que se interprete. */
  10. (/'/g,"'")[r]
  11. (/\(/g,"(")[r]
  12. (/\)/g,")")[r]
  13. (/</g,"&#38;#60;")[r]
  14. (/>/g,"&#38;#62;")[r]
  15. (/`/g,"&#38;#96;")[r]
  16. (/a/g,"&#38;#97;")[r]
  17. (/A/g,"&#38;#65;")[r]
  18. (/e/g,"&#38;#101;")[r]
  19. (/E/g,"&#38;#69;")[r]
  20. (/i/g,"&#38;#105;")[r]
  21. (/I/g,"&#38;#73;")[r]
  22. (/o/g,"&#38;#111;")[r]
  23. (/O/g,"&#38;#79;")[r]
  24. (/u/g,"&#38;#117;")[r]
  25. (/U/g,"&#38;#85;")[r]
  26. (/{/g,"&#38;#123;")[r]
  27. (/}/g,"&#38;#125;")[r]
  28. (/‘/g,"&#38;#8216;")[r]
  29. (/’/g,"&#38;#8217")[r]
  30. (/‚/g,"&#38;#8218;")[r]
  31. (/“/g,"&#38;#8220;")[r]
  32. (/”/g,"&#38;#8221;")[r]
  33. (/„/g,"&#38;#8222;")[r]
  34. (/&#8242;/g,"&#38;#8242;")[r]
  35. (/&#8243;/g,"&#38;#8244;")[r]
  36. (/‹/g,"&#38;#8249;")[r]
  37. (/›/g,"&#38;#8250;")[r]
  38. (/s/g,"&#38;#115;")[r]
  39. (/S/g,"&#38;#83;"); /* Se puede acortar el código con el constructor de Reg Exp, declarando todas las palabras y regexp del código como un único string separadas por un espacio y hacer split de string a array. Con que el código no laggease al pegar en la url me valia. */
  40.  return x; /* Retorna el string convertido a entidades */
  41. }
  42.  
  43. var temp;
  44.  
  45. /* Para rodear las palabras y aplicarles css para colorearlas */
  46. var c="<span class='xssRed'>";
  47. var d="</span>";
  48.  
  49.  
  50. /* Todas las palabras que encontré que de forma frecuente puede que sean relevantes en inyecciones DOM XSS */
  51. var b=[
  52. "write","writeln","domain","innerHTML",
  53. "outerHTML","insertAdjacentHTML","onevent","baseURI",
  54. "documentURI","location","referrer","URL",
  55. "URLUnencoded","href","search","hash","pathname","self","name","eval",
  56. "javascript","setInterval","setTimeout","import url",
  57. "add","after","append","animate",
  58. "insertAfter","insertBefore","before","prepend",
  59. "replaceAll","replaceWith","wrap","wrapInner",
  60. "wrapAll","has","constructor","init",
  61. "index","parseHTML"];
  62.  
  63. /* Obtiene el fuente de la página actual */
  64. var a=document.querySelector("html").outerHTML;
  65.  
  66. /* Itera una vez por palabra */
  67. for(var i=0; i<b.length; ++i) {
  68.  
  69. /* Crea una expresión regular Global caseInsensitive de cada palabra. Es decir, busca todas las ocurrencias de la palabra que toque indistintamente de si tiene mayusculas o minuúsculas. */
  70.  temp=new RegExp(b[i],"gi");
  71.  
  72. /* Remplaza las palabras que encuentre en el código por cadenas temporales reconocibles que no vayan a ser codificadas a entidades. En medio de estas cadenas pon la palabra original.*/
  73.  a=a.replace(temp,"nblblbl"+b[i]+"nhlhlhl");
  74. }
  75.  
  76. a=htmlEntities(a); /* Transforma el fuente a entidades para poder leerlo sin que se interprete. */
  77. a=a.replace(/nblblbl/g,"<span class='xssRed'>"); /* Modifica las cadenas temporales reconocibles por los elementos span. */
  78. a=a.replace(/nhlhlhl/g, "</span>");
  79. document.write(' /* Escribe un código html sin entidades en el que meter dentro el código con entidades. Así se interpretan los <span> y el nuevo código para colorear su innerHTML. */
  80. <!DOCTYPE html>
  81. <html>
  82.  <head>
  83.    <meta charset="utf-8">
  84.  </head>
  85.  <body>
  86.    <section id="code">'+a+'</section>
  87.    <style>
  88. #code {
  89.  background-color: #fefefe;
  90. }
  91.  
  92. .xssRed {
  93.  color:red;
  94. }
  95.    </style>
  96.  </body>
  97. </html>');


En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines