skip to main | skip to sidebar
Yoyahack
El inteligente no es aquel que lo sabe todo sino aquel que sabe utilizar lo poco que sabe
RSS
  • Home
  • Admin
  • Undersecurity
  • CPAN - Perl
  • PHP

Creando aplicación que se conecte a una web y inicie session

Herramientas, Nivel web, perl, php, programacion 3 comentarios

Buenas, aveces necesitamos crear nuestra aplicaciones que se conecten a una web o varias Webs, para recolectar información o enviar información, quizás para recolectar y enviar información. Algunas paginas nos facilitan este trabajo creando una Api para su sitio web, un ejemplo puede ser Pastebin, Flickr, Imageshack, Twitter, etc...


Aveces no es el caso y debemos realizar todo manualmente.
Bueno primero que nada debemos examinar la web. Debemos tener en cuenta:
  • Los parámetros necesarios a mandar a la web.
  • El código de repuesta de la pagina, para poder tomar decisiones.
  • Los datos que nos envían la pagina, como Cookies.
Algo muy importante que debemos tener en cuenta, es organizar nuestras ideas antes de comenzar. Cual es el objetivo de nuestra aplicación, los pasos necesarios para poder realizar lo, etc...

Index.php:

En este caso, mi objetivo es loguearme (Iniciar session) en una web y aparecer como logueado.
Primero trato de loguearme con datos falsos, para ver como responde la pagina.

login.php

Miro los headers:


Me logueo de nuevo, pero esta vez con los datos verdaderos:


Miro los dos headers y busco una diferencia, para diferenciar si me he logueado correctamente o falso, así para luego tomar decisiones en mi aplicación.

Puedo ver que cuando inicie session con mis datos correcto, el código de respuesta fue 302 y cuando ingrese datos falso el código de repuesta fue 200. También que al iniciar session correctamente, el servidor me manda una Cookie que es PHPSESSID.

Al iniciar session correctamente, me redirecciona al index.php

Paso a crear mi aplicación, que realizara lo siguiente:
Enviar una petición POST al archivo login.php, con la query usuario que contendrá el nombre de usuario y la query password que contendrá el password.

Luego verifico que los datos sean correctos, si el código de repuesta es 302 es porque los datos han sido correcto y si el código de repuesta es 200 es porque los datos introducidos han sido falso. Si los datos han sido correcto, capturo la Cookie que manda el servidor para luego usarla en las peticiones GET o POST.

Bueno aquí la un ejemplo de un pequeño script escrito en Perl
#!/usr/bin/perl -w

use strict;

#Modulos necesarios
use LWP::UserAgent;
use HTTP::Request::Common;

my $url_login = 'http://127.0.0.1/pruebas/login.php';

my $usuario = $ARGV[0];

my $password = $ARGV[1];

my $ua = new LWP::UserAgent;
$ua->agent("Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16");

my $response = $ua->request(
POST $url_login, #Realizo la peticion POST
{
usuario => $usuario,#Le asigno el valor de la variable $usuario a la query usuario
password => $password,#Le asigno el valor de la variable $password a la query password
});


#Verificos que los datos ingresados sean correcto
#para esto verifico que en el codigo de repuesta
#sea 302

if($response->status_line =~ /302/)
{
print "Datos correctosn";
print "Cookie mandada por el servidor -> ".$response->header('set-cookie')."n";
exit;#Finalizo el script
}

#Si ah llegado hasta aqui, es porque los datos no son verdaderos
Salida:


Otro ejemplo pero usando PHP
<?php

$url_login = 'http://127.0.0.1/pruebas/login.php';
$usuario = 'yoya';//Usuario
$password = 'admin';//Password

$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16');
curl_setopt($ch, CURLOPT_URL, $url_login);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_HEADER,true);

/*
Le asigno el valor de la variable $usuario a la query usuario
Le asigno el valor de la variable $password a la query password
*/
curl_setopt ($ch, CURLOPT_POSTFIELDS, "usuario=".$usuario."&"."password=".$password);
$result = curl_exec($ch);


/*Verificos que los datos ingresados sean correcto
para esto verifico que en el codigo de repuesta
sea 302*/

if(curl_getinfo($ch, CURLINFO_HTTP_CODE) == "302")
{
preg_match("/Set-Cookie:s*([w=]+)[s;n]*/i", $result, $cookie_valor);

echo "Datos correctos<br>";
echo "Cookie mandada por el servidor -> ".$cookie_valor[1]."<br>";
exit;
}

echo "Datos introducidos incorrecto<br>";
exit;

?>
Salida:

Source para practicar:
<?php
session_start();

if(!empty($_POST['usuario']) && !empty($_POST['password']))
{
$usuario = $_POST['usuario'];
$password = $_POST['password'];

if($usuario == 'yoya' && $password == 'admin')
{
$_SESSION['conectado'] = 1;
header('Location: index.php');
}

}

?>

<p><h1>Ingresar</h1></p>

<form name="login" method="POST" action="login.php">
<p>Usuario:<br><input type="text" name="usuario"></p>

<p>Password:<br><input type="password" name="password"></p>

<p><input type="submit" value="Enviar"></p>

</form>

Saludos.


12:55



Manejo de excepciones en PHP

Nivel web, php, programacion 0 comentarios

Buenas, aunque no es muy usado el manejo de excepciones en PHP, tenemos la opción de poder utilizarlo.

Bueno aquí un ejemplo:
<?php

function saludo($str = null)//Funcion saludo
{//Inicio

if(empty($str))//Si la variable $str esta vacia entonce
{
throw new Exception('Ingresar un parametro');//Lanzamos la excepción

}//Fin del if

elseif(is_int($str))//Si la variable $str contiene solo numeros enteros
{ //Entonces ....
throw new Exception('No se permite numeros enteros');
}//Fin del elseif

else{ //Sino
return $str;
}//Fin del else
}//Fin de la funcion


try{
saludo("Hola mundo\n");
saludo(2);

} catch (Exception $e) {
echo $e->getMessage();//Mostramo el mensaje de la excepcion
print_r($e);
}
?>

Bueno, tenemos la función saludo() que recibe un parámetro, si no le mandamos un parámetro a la función saludo(), esta función lanza una excepción .

Si le mandamos solo números enteros como parámetros a la función saludo(), esta lanza una excepción.
Si todo esta bien, la función saludo() retorna el valor de la variable $str que es la variable que contiene el valor que le pasamos como parámetro a la función saludo().

Salida:
Hola mundo
Exception Object
(
[message:protected] => No se permite numeros enteros
[string:Exception:private] =>
[code:protected] => 0
[file:protected] => /var/www/html/pruebas.php
[line:protected] => 14
[trace:Exception:private] => Array
(
[0] => Array
(
[file] => /var/www/html/pruebas.php
[line] => 25
[function] => saludo
[args] => Array
(
[0] => 2
)

)

)

[previous:Exception:private] =>
)

Saludos.


14:29



Entradas más recientes Entradas antiguas Inicio
Suscribirse a: Entradas (Atom)

    Fedora 15

    FayerWayer

    Cargando...

    Twitter

    Follow @Yoyahack

    Categoria

    • Captcha (1)
    • Exploit (1)
    • Herramientas (10)
    • MYSQL (2)
    • Nivel web (24)
    • Noticias (2)
    • Offtopic (2)
    • perl (11)
    • php (12)
    • POO (1)
    • programacion (19)
    • Regexp (2)
    • Tips (1)
    • vurnerabilidad (7)
    • XSS (2)

    Blog Archive

    • ►  2012 (1)
      • ►  abril (1)
    • ▼  2011 (6)
      • ►  octubre (1)
      • ►  septiembre (1)
      • ►  agosto (1)
      • ►  junio (1)
      • ▼  marzo (2)
        • Creando aplicación que se conecte a una web y inic...
        • Manejo de excepciones en PHP
    • ►  2010 (10)
      • ►  octubre (2)
      • ►  septiembre (1)
      • ►  agosto (1)
      • ►  junio (1)
      • ►  abril (2)
      • ►  febrero (3)
    • ►  2009 (15)
      • ►  noviembre (1)
      • ►  octubre (1)
      • ►  septiembre (10)
      • ►  agosto (3)

    Afiliados

    • ANTRAX
    • drvy
    • hachik0
    • Ksha
    • kt0sh
    • Lord RNA
    • Panic
    • pks
    • seth
    • SH4V
    • snakingmax