Buenas, he dejado el blog últimamente muy abandonado. Tenia una idea de crear un blog donde escribamos varias personas artículos, así siempre mantendríamos el blog actualizado pero bueno no se pudo lograr.
Bueno entonce volveré a mi blog, tratare de dedicarle mucho mas tiempo y de escribir buenos artículos.
Saludos.
12:18
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
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
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
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
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
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...
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:
<?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
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
Suscribirse a:
Entradas (Atom)