[Resuelto] Tokens por sesion para hacer mas dificil falsificar peticiones

Iniciado por tecasoft, 6 Mayo 2013, 21:45 PM

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

tecasoft

komo se hacen tokens por sesion para hacer mas dificil el falsificar peticiones web? y seria dificil o imposible el falsificar peticiones web? gracias
http://www.tecasoft.com Un ninja del hacking etico, programacion en html5, css3, javascript, jquery, php, python, c/c++, ensamblador, ingenieria reversa,a auditorias de seguridad, pentesting, exploits

#!drvy

Para empezar, los tokens sirven para prevenir CSRF.
http://en.wikipedia.org/wiki/Cross-site_request_forgery

Ahora, esto no previene que el atacante haga un script donde el se conecta a tu pagina, captura el token y te lo envía en su próxima petición. Por tanto, le da cierta seguridad al usuario, pero no hace dificil/imposible que se puedan realizar peticiones web.

El token no suele ser mas que un md5/sha1/string aleatorio. La pagina que vaya a solicitar la acción se lo manda a la que realiza la acción. Esta comprueba si es valido y en tal caso, realiza la acción.

Saludos

tecasoft

pero si yo mando 123 x $_SESSION y en la otra web esta apuntado 123 y compara si es verdad o no, debe ser imposible hacer peticiones desde el exterior con un formulario no?yo lo entiendo asi
http://www.tecasoft.com Un ninja del hacking etico, programacion en html5, css3, javascript, jquery, php, python, c/c++, ensamblador, ingenieria reversa,a auditorias de seguridad, pentesting, exploits

#!drvy

La session al fin y al cabo no es mas que una cookie.. (y no voy a explicar porque xD). Si yo hago un script, que se connecte a la primera pagina, guarde la cookie PHPSID y vaya a la segunda pagina mostrando la cookie, el token sera totalmente valido.

Saludos

tecasoft

a vale ya voy entendiendo algo, dices,que la cookie la guardara y es la misma que en el otro caso, es decir podria navegar no? y que se podria hacer con esa cookie? con ejemplo me entiendo mejor, ya sabes cosas de la informatica




me podriais responder,eske ando atascado en esto de los tokens, me podeis poner algun ejemplo,os lo agradeceria bastante,gracias.

Mod: No hacer doble post.
http://www.tecasoft.com Un ninja del hacking etico, programacion en html5, css3, javascript, jquery, php, python, c/c++, ensamblador, ingenieria reversa,a auditorias de seguridad, pentesting, exploits

xustyx

Lo que puedes hacer que supongo que ya sabrás és, generar todos los formularios con el input hiden del token con php a partir de un string random pasado a md5 y guardado en la db a la hora que un usuario logea, entonces cuando te llega la peticion post miras el user y miras si el token es el que tiene asignado, tambien puedes mirar el referer y ver que la peticion se realizo de una url deseada.

Saludos

#!drvy

Yo creo que con un token aleatorio por cada acción a realizar va de sobra. Así incluso aunque tu script resulte vulnerable y alguien es capaz de capturar el token (algo que pasa en ciertas versiones de SMF...) no le servirá mas que 1 vez...

Tal y como te ha dicho @xustyx, la idea es generar el token y añadirlo como un campo hidden al formulario.
Código (php,18) [Seleccionar]
<?php
@session_start();
// Generar un sha1 aleatorio.
$token sha1(rand(0,999).rand(999,9999).rand(1,300));
$_SESSION['token'] = $token;

?>

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>PoC</title>
</head>
<body>
   <form action="post.php" method="POST">
       <input type="text" name="usuario" />
       <input type="password" name="password" />
       <input type="hidden" name="token" value="<?php echo $token?>" />
       <input type="submit" value="Enviar" />
   </form>
</body>
</html>


Luego en la pagina que va a recibir el formulario y/o realizar la accion, compruebas antes el token..
Código (php) [Seleccionar]
<?php
@session_start();
// Comprobar si el session o el post del token estan vacios y compararalos para ver si coinciden.
if(empty($_SESSION['token']) || empty($_POST['token']) || $_SESSION['token']!==$_POST['token']){
   die(
'Tu token no es valido. Realiza tu consulta de nuevo. Si eres un juanker, que sepas que me tire a tu mami anoche.');
}
echo 
'Tu consulta ha sido realizada';
?>


Saludos

tecasoft

os mereceis un  ;-)
ahora por cierto el $_POST['token'] no seria mejor antes pasarle un antiddos(la longitud del campo con un length) o tambien pasarle un anti code injection(filtrar lista blanca con numeros y letras)

es que podria ser que puedan cambiar algo en el codigo y ejecutarlo de forma malintencionada no? vosotros veis esas posibilidades?
http://www.tecasoft.com Un ninja del hacking etico, programacion en html5, css3, javascript, jquery, php, python, c/c++, ensamblador, ingenieria reversa,a auditorias de seguridad, pentesting, exploits

#!drvy

Suponiendo que la máxima longitud de un sha1 son 40 caracteres en hex, solo se compone de números 0-9 y letras de la a a la f...

Código (php) [Seleccionar]
<?php
@session_start();
// Comprobar si el session o el post del token estan vacios y compararalos 
// para ver si coinciden.
if(empty($_SESSION['token']) || empty($_POST['token'])
   || !
preg_match('/[0-9a-f]/',substr($_POST['token'],0,40))
   || 
$_SESSION['token']!==$_POST['token']) {
   die(
'Tu token no es valido. Realiza tu consulta de nuevo.');
}

echo 
'Consulta valida';
?>


Aunque... lo que mas te puede pasar es que tengas una configuración tan jodida que PHP permita meter 1-2GB en $_POST... lo que haría que tarde unos cuantos segundos mas en procesar nada mas creo yo.. xD


Citarantiddos(la longitud del campo con un length

Fiarse de un input con length por seguridad... es como comprarse esta pistola y rezar que no te mate...


Saludos

tecasoft

pues hay un pequeño problema en el campo del formulario al crear el $_SESSION caduca la session al cabo de 30 o 40 min y me da error,envede consulta con exito,me caduca la session entonces tendre que hacerlo con un $_SERVER['HTTP_REFERER'], x lo visto se me soluciona con el referer,veis algun inconveniente que utilice el referer solo?


Edito: donde supuestamente esta el formulario, es donde va un editor web(para que los usuarios metan javascript,html,pero lo k yo kiera,es decir un wysiwyg) pasaria algo con un XSS que me puedan secuestrar cookies propias o de algun user,estando desde el editor web,repito hago yo lo k kiera cuando lo introduzcan* en formato web* NO en html puro codigo*, perdonar si me explicado mal
http://www.tecasoft.com Un ninja del hacking etico, programacion en html5, css3, javascript, jquery, php, python, c/c++, ensamblador, ingenieria reversa,a auditorias de seguridad, pentesting, exploits