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



