Normas del foro

Curso Hacker
Bienvenido(a), Visitante. Favor de ingresar o registrarse.
¿Perdiste tu email de activación? - Noviembre 21, 2008, 06:04:31
Inicio Ayuda Ingresar Registrarse
Visita: Articulos - Juegos Gratis - Da Foros

Comunidad Underground Hispana  |  Programacion  |  Programacion para webmasters  |  Php (Moderador: SaTeLuCo)  |  Tema: <<wbb2_cookiehash>> 0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] Ir Abajo Imprimir
Autor Tema: <<wbb2_cookiehash>>  (Leído 113 veces)
ElectroSPAIDER
Miembro
*****
Desconectado Desconectado

Mensajes: 38


Ver Perfil
« en: Agosto 11, 2007, 04:04:59 »

Hola a todos, espero que me podáis ayudar con una duda que tengo acerca del hash de usuario en un foro PHP (usa el software de WoltLab, Burning Board 2.3.4).  El caso es que ando metido en la investigación del protocolo HTTP para el desarrollo de un programa experimental que permita el posteo automático de posts o añadir réplicas temporizadas, entre otras cosas. He estado analizando el caso con netcat (usaré en todo momento datos ficticios por seguridad):

nc -vv
Necesitas ser usuario para ver los enlaces Crear Usuario  Hacer Sesion
www.victima.com
80 < in.txt


Donde el fichero in.txt contiene los datos necesarios para establecer comunicación con el servidor del host remoto, que yo saqué usando un sniffer. Echemos un vistazo a las instrucciones necesarias para añadir un post nuevo:

POST /newthread.php HTTP/1.1
Host:
Necesitas ser usuario para ver los enlaces Crear Usuario  Hacer Sesion
www.victima.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ca; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: ca,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer:
Necesitas ser usuario para ver los enlaces Crear Usuario  Hacer Sesion
Cookie: wbb2_userpassword=e10adc394923gbabbe56e057f20f883e; wbb2_userid=X; wbb2_cookiehash=f65a74532mclo46676729a9b201d3931; wbb2_lastvisit=1186477673
Content-Type: application/x-www-form-urlencoded
Content-Length: 233

topic=TITULO%BA1&iconid=0&mode=0&message=MENSAJE&parseurl=1&showsignature=1&send=send&boardid=1&idhash=90a2fb6c2ce02jns37d3eed5f3e&attachmentids=&change_editor=&usewysiwyg=0&sid=HTTP/1.1 302
Date: Thu, 09 Aug 2007 19:51:58 GMT
Server: Apache
X-Powered-By: PHP/4.3.9
Location: index.php
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=ISO-8859-1

0


Los datos señalados en naranja me llaman poderosamente la atención. Usando netcat he podido postear sin usar en ningún momento el navegador, partiendo de la base de que ya tenía un usuario registrado previamente en el foro. El problema es que como los hash se renuevan cada cierto tiempo, surge el inconveniente de irse logueando cada vez, lo cual no es muy práctico. Mi duda es si alguien puede interpretar el modo, el algoritmo, en como se crean los hash de usuario para poder trasladarlo a otro lenguaje de programación que no sea PHP. Me las he apañado para conseguir parte del software de Burning Board, este es el archivo login.php, que a mi suponer es la raíz de la generación de los hash:

<?php
$filename = 'login.php';
require('./global.php');
$lang->load('USERCP');

if ($wbbuserdata['userid']) access_error();

if (isset($_POST['send'])) {
   $result = getwbbuserdata($_POST['l_username'], "username");
   if ($allowloginencryption == 1 && $_POST['crypted'] == "true" && $result['sha1_password']) {
      $authentificationcode = sha1(sha1($session['authentificationcode']).$result['sha1_password']);
      if (!$result['userid'] || $authentificationcode != $_POST['authentificationcode']) {
         unset($result);
         unset($authentificationcode);
      }
      else $wbb_userpassword = $result['password'];
   }
   else {
      $wbb_userpassword = md5($_POST['l_password']);
      if (!$result['userid'] || $result['password'] != $wbb_userpassword) unset($result);
      else {
         if (!$result['sha1_password']) $db->unbuffered_query("UPDATE bb".$n."_users SET sha1_password='".sha1($_POST['l_password'])."' WHERE userid='$result[userid]'");
      }
   }
   
   if (isSet($result['userid']) && $result['userid']) {
      $wbb_username = htmlconverter($result['username']);
      if ($result['usecookies'] == 1) {
         bbcookie("userid", "$result[userid]", time() + 3600 * 24 * 365);
         bbcookie("userpassword", "$wbb_userpassword", time() + 3600 * 24 * 365);
      }
      $db->unbuffered_query("DELETE FROM bb".$n."_sessions WHERE userid = '$result[userid]'", 1);
      $db->unbuffered_query("UPDATE bb".$n."_sessions SET userid = '$result[userid]', authentificationcode='', styleid='".$result['styleid']."' WHERE sessionhash = '$sid'", 1);
      unset($session['authentificationcode']);
      
      /** convert url -> remove session hash **/
      function convert_url($url, $hash) {
          return preg_replace("/[0-9a-z]{32}/", (($hash != '') ? ($hash) : ("")), $url);
      }
            
      if (isset($_POST['url']) && $_POST['url'] && strstr($_POST['url'], "?")) $url = convert_url($_POST['url'], $session['hash']);
      else $url = "index.php" . $SID_ARG_1ST;
      
      redirect($lang->get("LANG_USERCP_LOGIN_REDIRECT", array('$wbb_username' => $wbb_username)), $url);
      exit;
   }
   else {
      $db->unbuffered_query("UPDATE bb".$n."_sessions SET authentificationcode='' WHERE sessionhash = '$sid'", 1);
      unset($session['authentificationcode']);
      error($lang->items['LANG_USERCP_LOGIN_ERROR']);
   }
}
else {
   eval("\$tpl->output(\"".$tpl->get("login")."\");");
}
?>



Saludos a todos y gracias por adelantado!
« Última modificación: Agosto 12, 2007, 12:54:43 por ElectroSPAIDER » En línea
Páginas: [1] Ir Arriba Imprimir 
Comunidad Underground Hispana  |  Programacion  |  Programacion para webmasters  |  Php (Moderador: SaTeLuCo)  |  Tema: <<wbb2_cookiehash>> « anterior próximo »
Ir a:  


Ranking-Hits
Powered by SMF 1.1.7 | SMF © 2006-2007, Simple Machines LLC