www.netcopsecurity.com datalock@linuxmail.org Security BREAK DOWN
0x1. Por Quê o PERL? Perl (Practical Extraction and Report Language) começou como um aplicativo UNIX. Hoje Perl é usado em quase todos os sistemas operacionais e funfa como asoutras linguagens de programação. Perl é única como qualquer linguagem de programação. Destaca-se por ser fácil de aprender e fácil de usar. Por que vc deve saber codar em Perl? Perl é único na cena hacking. Cerca de 70% dos exploits estão codificados em Perl. A razão pela qual a maioria dos hackers optar por escrever exploits em perl não é porque é fácil de interpretar, é fácil baixar e usar esses exploits, é eficiente e obtém o código eh feito rapidamente. Assim, se o seu interesse está em encontrar Vulnerabilidades e compartilhá-las escrevendo um code em perl para explorá-la eu recomendo o Perl para criar seus exploits. 0x2. Básico Bem antes de você começar a programar em Perl você precisa fazer o download do Interpretador perl da ActiveState. Você pode baixá-lo em www.activestate.com (lá vc tb encontra o interpretador python). Precisará tb de um editor de texto. Eu, pessoalmente, recomendo DzSofts Perl Editor (baixe no forum:http://netcopsecurity.com/index.php?/topic/1175-dzsoft-perl-editor-5-8-5-2/) ou use o notepad ou outro editor que preferir. Os arquivos em Perl têm uma extensão única, todos osseus arquivos perl devem ser salvos de preferência com extensão "pl", qndo executados serão interpretados como perl, porém se vc salvar com outra extensão qualquer e usar o comando "perl arquivo.xxx" ele tb será interpretado como um código Perl. O Perl é simples, e não uma língua muito difícil de aprender. Como todas as linguagens de programação costumam começar com um "Olá Mundo", vamos codar isso em Perl: print "Hello World\n"; Salve como HelloWorld.pl, arraste e solte-o no prompt de comando e tecle enter. Esse programa deve imprimir Olá Mundo. Vamos dar uma analizada no que nós criamos. A primeira linha (#!/usr/bin/ perl-w) é o início dos programas em perl. É o que faz cada programa perl seremreconhecidos de modo que possa ser interpretado. O (-W) eh uma opção chamada "simple error checking variable". É comumente utilizada para classificar alguns erros que podem estar presentes no código e assim podem ser mais facilmente arrumados depois. A segunda linha (print "Olá Mundo \ n";) é, obviamente, a linha que imprimiu o Olá Mundo em seu comando.
Print é um comando comum correntemente utilizados em aplicações Perl. Para mais esclarecimentos, o comando de impressão é como o msgbox ( "em VB6 ou comando printf em C). Você percebe o "\n", este é o caractere de nova linha em Perl. Há muitos chararters especial em Perl, abaixo é um gráfico de todos os caracteres especiais. Outro exemplo do uso desses caracteres especiais, veja: #!/usr/bin/ perl -w print "Hello \ tworld \ n \ a"; A coisa mais vitais para uma aplicação Perl executar sem erros é o ponto e vírgula no final de cada linha. Cada linha (a menos que em um bloco [explicado mais tarde]) tem ter um ponto e vírgula depois. Isto diz ao perl parar de ler essa linha e seguir em frente através do código. Assim como na maioria das linguagens o ponto e vírgula representa o fim de uma instrução... Como a maioria das linguagens de programação Perl possui variáveis. Variáveis tempprárias ou permanentes e pode conter números ou cadeias de quase todo o comprimento. Variáveis em Perl são definidas com o sinal "$". Dê uma olhada no código abaixo é um simples "Hello World" usando variáveis.
$Hello = "Hello World\n"; print $Hello; Eh fácil notar o que fizemos, alocamos a string Hello World dentro da variável Hello: $Hello = "Hello World\n"; Veja que a variável recebe a string. E depois o conteúdo da variável eh imprimido com o comando print: print $Hello; Em Perl não existem apenas aspas duplas, mas simples tb. Aspas simples (') são utilizados em matrizes e pode ser usada em substituição da aspas duplas. A principal diferença entre os dois é que aspas duplas interpreta caracteres especiais, como nova linha (\n) e aspas simples não. Uma função que será útil quando se lida com strings no Perl é adição. Você pode adicionar strings no Perl. Exemplo abaixo: #O caractere "#" no perl eh usado para fazer comentários #nada disso q eu estou escrevendo na frente de #s #será considerado código e nao será interpretado #um bom programador sempre comenta seus codes! $nome = "datalock" ; print "Que". " ". "código". " ". "n00b". "$nome"."\n"; Como notamos, no perl eh o ponto (.) que faz adição de strings e não o q seria mais óbvio, o sinal de mais (+). Isso vai ser mto útil quando precisarmos concatenar coisas no nosso exploit, como por exemplo, as partes de um shellcode do nosso payload.
Veja agora as funções matemáticas do perl: #!/usr/bin/perl #Adição, Subtração, Multiplicação, Divisão $a = 3 + 5 ; #Ad $b = 5 * 5; #Mult $c = 10 / 2 ; #Div $x = 12-5; #Sub print $a. " ". "AD: deve dar 8.\n"; print $b. " ". "MULT: deve dar 25.\n"; print $c. " ". "DIV: deve dar 5.\n"; print $x. " ". "SUB: deve dar 7.\n"; #Encrementação $Count = $Count + 1; print "$Count\n"; #ou $Count1 += 1 ; # Decrementação $Count1 -=1 ; print "$Count1\n"; #Raiz Quadrada $Square = sqrt(121) ; print "A raiz de 121 eh $Square\n"; #Expoentes $Exp = 2**5 ; print "$Exp\n";
0x3. Arrays Matrizes, ao contrário de variáveis comuns, contêm vários itens que podem ser chamados ou usados posteriormente em um aplicativo Perl. Como sempre, o melhor para aprender eh dar uma olhada em um code e preticar. @Hello = ('Hello', 'World'); print join(' ', @Hello). "\n"; Observe q o que designa o array eh um @ e não o $ de variável comum. Crimos um array (@Hello;) e a ele atribuímos 2 elementos Hello e World. E a função join é usada para imprimir os elementos do array. Método split: $Frase = "Eu sou datalock."; @MeuArray = split(/ /, $Frase) ; print "@MeuArray". " ". "Esse eh o split". "\n"; #Outro jeito mas sem o split (menos eficiente) @Ola = ('Ola', 'Mundo'); print $Ola[0]. " ". $Ola[1]. "\n"; O que acontece eh o seguinte... o split quebra muito o nosso galho, pq bastou usar a função split para processar nossa variável $Frase e jogar o resultado no nosso array: @MeuArray = split(/ /, $Frase) ; Depois só foi imprimir: print "@MeuArray"; No outro jeito veja q tivemos que especificar no print os elementos do array q desejamos imprimir: print $Ola[0]; #imprime o primeiro elemento do vetor print $Ola[1];#imprime o segundo elemento do vetor Outra forma similar, e útil eh: @array = qw(w1 w2 w3 w4); print join(' ', @array);
0x4. Condições: Se vc sabe o mínimo de progamação vai estar familiarizado com os termos de expressões condicionais usados no Perl. Vamos ver um código: $i = 1; #var i recebe 1 if($i ==1) { #se i eh igual a 1 $i++; #incremento print $i. "\n"; #imprime valor de i } Esse código deve imprimir o número 2 na tela. Além de valores numéricos podemos fazer com strings: $i = Hello; if($i eq 'Hello') { #comparação da string em $i com a palavra Hello print "Hello!\n"; } else{ print "A variável nao eh igual a string q comparamos\n"; } Com a instrução eq conseguimos fazer a comparação da variável com a palavra q escolhemos, se elas forem iguais será imprimido Hello!, se forem diferentes será impressa a frase: A variável nao eh igual a string q comparamos. O else significa senão ou seja, se a sentença do if for falsa ele passa para o else. Siga o raciocínio: if (verdadeiro) faça x senão faça y. Dúvidas? Poste no Fórum, ou datalock@linuxmail.org