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

Diseño nuevo y blog nuevo

Noticias 1comentarios

Buenas, he diseñado un nuevo diseño para el Blog. Es un Diseño limpio y formal, mi objetivo es que el blog sea mucho mas amplio y mas legible.

Le deje todo el espacio a los artículos, la columna la pase al footer, así tendré mucho mas espacio.

Aquí una captura.






Estaba pensando en hacer el diseño para blogger desde un principio pero no me gusto para nada la forma de diseñar diseños para blogger.

El diseño sera un diseño para un blog de Wordpress, así que habrá un dominio nuevo. A la larga sera un poco mejor, ya que podre dejar ejemplos online para que puedan probar, agregar plugin. Osea, tendre mucho mas control de todo, cosa que no pasaba en blogger.

De momento no he terminado 100% el diseño, aunque ya gran parte del diseño esta adaptado a Wordpress. Seguiré trabajando en el.

Saludos.


16:04



Bypass Recaptcha y cualquier otra

Captcha, Nivel web, php, programacion, Tips 6 comentarios



Muchas veces necesitamos hacerle un bypass a alguna captcha, como puede ser Re-captcha.

Lo primero que se nos ocurre es usar algun OCR (Reconocimiento óptico de caracteres) para detectar las letras de la imágenes. El problema esta que no puede funcionar correctamente y en muchos casos no logra procesar la imagen. Quizás por eso no sea algo muy típico, ni muy utilizado con esto fines.

Podemos desarrollar nuestro propio OCR, pero a la larga seria un proceso muy complejo y necesitaríamos invertirle mucho tiempo. Muchos simplemente descartan el proyecto.

Otros lo que harían seria buscar alguna vulnerabilidad en la captcha, que de alguna forma les permita saber que imagen es y que letras tienen. Algunos buscarían una vulnerabilidad en la validación de la captcha que seria un proceso igualmente largo ya que tienen que entender el funcionamiento de la captcha y comenzar a probar...

Yo estaba realizando una App web y debía realizar acciones y tomar algunos datos de un sitio web, pero este utilizaba Re-captcha para poder identificarse/loguearse. Se me ocurrieron todas las opciones que menciones y otras pero no relacionada directamente con la captcha.

Aquí tengo una solución universal para cualquier Captcha. La solución mas rápida y segura, es utilizar la misma captcha que el sitio web.

Osea, la imagen genera la captcha la capturo y la muestro en mi sitio web para que los usuarios que vayan a utilizar la App web, inserten el código de la captcha y mi App web realice todo.

Al final tengo una App web, que realiza lo que quería hacer y utiliza captcha. No tengo que implementar alguna captcha en mi servicio ya que con la captcha del sitio web me basta.


Bypass de  Re-Captcha

El source de ejemplo



<?php
require_once('recaptchalib.php');


$publickey = "6Lc55McSAAAAAChEOICK8IX0V6zRh3CD64ix6jbx";
$privatekey = "6Lc55McSAAAAAB4ny39PlgX8gjMvm2x7SsrXEb6y";

if(!empty($_POST['nombre'])) {

	$is_valid = recaptcha_check_answer($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]);


	if($is_valid->is_valid) {
		echo '<p><h1>Captcha Valida</h1></p>';
		exit;
	}else{
		echo '<p><h1>Captcha invalida</h1></p>';
	}
}



?>

<form method="POST" name="form" action="coment.php">
	<p>Mensaje: <br><input type="text" name="nombre"></p>
   <?php echo recaptcha_get_html($publickey); ?><br>
	<input type="submit" value="enviar">
</form>

Realizare el código para hacerle el bypass.


<?php



//Si se envio el formulario, compruebo el el input

//donde se inserte la captcha, contenga algun valor

if(!empty($_POST['captcha_valude'])) {



$data =' nombre='.$_POST['mensaje'].'&recaptcha_challenge_field='.$_POST['cod'].'&recaptcha_response_field='.urlencode($_POST['captcha_valude']);

echo post('http://127.0.0.1/a.php', $data);

}

//Fin del poc para el bypass



//Obtengo la imagen de la captcha y luego la muestro....

$contenido = get('http://127.0.0.1/a.php');

preg_match('/ipt" src="(h[^"]+)/', $contenido, $result);

preg_match('/challenge :[sn]+'([^']+)/i', get($result[1]), $cont);

$img = 'http://www.google.com/recaptcha/api/image?c='.$cont[1];

echo '<IMG src="'.$img.'">';

//Fin...



//Funcion para realizar peticiones GET

function get($url) {

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$result = curl_exec($ch);

curl_close($ch);

return $result;

}



//Funcion para realizar peticiones POST

function post($url, $contenido) {

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt ($ch, CURLOPT_POST, 1);

curl_setopt ($ch, CURLOPT_POSTFIELDS, $contenido);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$result = curl_exec ($ch);

curl_close ($ch);



return $result;

}



?>



<!--Formulario-->

<form action="aa.php" method="POST">

<p>Inserte el contenido de la captcha</p>

<p><input type="text" name="captcha_valude"></p>

<p>Inserte el mensaje <br><input type="text" name="mensaje"></p>

<input type="hidden" name="cod" value="<?php echo $cont[1]; ?>"><!--Codigo de la captcha-->

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

</form>
Al rellenar todos los datos correctamente, me da por valida todo.


Probar el PoC, así entienden mejor todo.

Saludos.


7:18



File Path Injection - PHP <= 5.3.6

Nivel web, php, programacion, vurnerabilidad 1comentarios




Buenas, al parecer hay una vulnerabilidad en el Core de PHP que permiten a los atacante modificar archivos de la raíz mediante la subida de archivo en PHP (PHP Upload).

La vulnerabilidad esta en que PHP permite que el nombre del archivo pueda comenzar con barra simple (/) o una barra invertida (\). Por lo tanto esto permite ingresar a la Raiz del sistema y modificar archivos.

Hay que tener en cuenta que es necesario tener los permiso necesarios para poder editar archivos de la raíz...

El bug fue solucionado en la versión 5.3.7 de PHP.

Saludos.


8:47



Utilizar fuentes de Google font en Blogger

Nivel web, programacion 0 comentarios






Buenas, muchas veces queremos implementar las fuentes de Google Font en nuestro Blog de blogger.

Primero que nada entramos en la la Pagina Google Font, luego seleccionamos una fuente y nos movemos hacia la pestaña Use this font.


Un poco mas abajo, nos da la direccion donde se encuentra el archivo css, lo tenemos que copiar y pegarlo despues de las etiquetas <head>.


Luego mas abajo nos da un ejemplo de como implementar la fuente, en este caso en el tang <h1>.

Pueden colocarlo en el selector .posttitle, .entry, etc...

Saludos.


12:29



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)
        • Diseño nuevo y blog nuevo
      • ►  septiembre (1)
        • Bypass Recaptcha y cualquier otra
      • ►  agosto (1)
        • File Path Injection - PHP <= 5.3.6
      • ►  junio (1)
        • Utilizar fuentes de Google font en Blogger
      • ►  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