Sockets Perl. 

  Vamos aprender!

[1]- Explicacao sobre socket

Bem gente aki eu gostaria de explicar como funciona a programacao de
sockets em perl, se vc nao sabe o q eh socket, vou te explicar. Socket eh
um recurso bastante utilizado nas linguagens de programacao p/ conectar a
um certo endereco... Vc provavelmente se eh bem informado, jah deve ter
ouvido falar em sockets N vezes! O socket eh um recurso mto bom... nao sei
o q seria dos programas da internet sem o socket... nada
funcionaria/existiria... Entao mano, vc jah sabe q o socket eh sempre
usado nos exploits remotos, tb nao sabe o q eh exploit remoto? Exploit
remoto eh algo que vc roda da sua makina p/(ownar, atacar...) aki nesse
texto eu espero que vc aprenda mtas coisas... pois esse texto eh dedicado
aos Newbies Fucadores! Good Lock!


[2]- ARGV

Bem ARGV eh algo que eh mto utilizado nos programas em geral, nao soh em
socket, vc pode ter um exemplo em argv, qnd acontece a seguinte situacao:

bash# perl -w programinha.pl
Por favor digite perl -w programinha.pl <host> <porta>
#bash

Um grande exemplo de como ARGV surge..... entao o ARGV ele necessita de q
X valores sejam digitados... ou seja no programa a cima necessitavam de 2
valores... vamos supor q agente fosse entrar na microsoft porta 29 usando
o programinha.pl, ficaria assim:

bash# perl -w programinha.pl microsoft.com 29

Viu?!?!? Nos digitamos 2 valores e o ARGV foi usado, agora chega de teoria
vamos um poko a pratica...

Vamos supor que vc cria um programa e ker q ele exiba na tela algo usando
ARGV ficaria assim:

$alow=$ARGV[0]; #$alow eh a variavel e ela vai ser igual a o 1 valor de
#ARGV... ou seja o q digita depois do arkivo.pl serah exibido

print "$alow \n"; #Aki ele fax com que o $alow seja imprimido ou seja o q
#vc digitou tem de ser imprimido e tb tem o \n = newline novalinha eh
#criada

PS: Na programacao o caracter # ker dizer um comentario...

Vc teria entao de digitar perl -w programa.pl <mensagem>
seria imprimido na tela:
Mensagem que vc digitou


Agora vc ker que mostre qnd nada for digitado aparece, por favor digite
perl arkivo.pl <msg> 
isso eh facil si liga soh...

$ARGC=@ARGV; #mostra q a variavel serah um vetor.... 

if ($ARGC < 1) { #Aki ele cria uma funcao dizendo se um caracter nao for
#digitado exibir a msg
print "Syntax: $0 <mensagem>\n"; #Exibe msg na tela p/
#usar o ARGV use o codigo $0 no print para ele exibir o nome do programa
exit; #Fecha o codigo
} #Fecha a funcao...

Pronto.... Agora eh facil.... vamos criar agora um ultimo exemplo, keremos
um programa q exiba uma msg tb.... soh ke agora vai ter tudo organizado e
sem comentarios, aki:

$ARGC=@ARGV;
if ($ARGC < 1) {
print "Syntax: $0 <mensagem>\n";
exit;
}
$mensagem=$ARGV[0];
print "$mensagem \n";


Pronto estah aki o macete usado em socket ARGV, no momento vc deve tar
pensando pq vai precisar disso mas acredite em mim, vc ainda vai usar mto
disso em exploits, em situacoes do dia-a-dia , em tudo!


[3]- Criando seu primeiro socket
Bem jah que vcs que estao lendo isso sao newbies vou usar poucos recursos,
kero apenas mostrar uma conexao e desconexao....


Kero mostrar uma parte do logsremov.... o login... Bem se vc nao se
incomoda, iremos usar ftp , iremos conectar na ROL(Provedor) e desconectar

use Socket; #Informa ao interpretador usar socket
$port="21"; #Define a porta
$host="ftp.rol.com.br"; #Define o host 
$iaddr= inet_aton($host) or die "Error: $!"; #iaddr = pega o host e o or
#die, significa se algo der errado o programa morre... ou seja termina a
#execucao 
$paddr=sockaddr_in($port, $iaddr) or die "Error: $!"; #pega a porta
$proto=getprotobyname('tcp') or die "Error - Protocol: $!"; #Define o
#protocolo a ser usado com o comando getprotobyname('protocolo') tcp que
#usaremos 

socket(SOCK, PF_INET, SOCK_STREAM, $proto) or die "Error: $!"; #Especifica
#o socket
connect(SOCK, $paddr) or die "Error: $!";; #Conecta as informacoes dadas
exit;


Pronto ele desconectou e assim acaba!


[4]- Socket Basico

Bem gente, vejamos, agora teremos um socket basico, o que ker dizer, um
socket melhor, com mais funcoes e etc..... utilizaremos ARGV e mandaremos
faremos o socket mandar mensagens

Tipo, entao iremos fazer um programa que conecta a certo endereco de ftp,
se logue como anonymous e desconecte......

print "FTP Client Tester by Unsekurity Team \n";
print "\n";
$ARGC=@ARGV;
if ($ARGC < 1) {
print "Usage: $0 Host \n";
exit;
}

use Socket;
$port="21";
$host=$ARGV[0];
$iaddr= inet_aton($host) or die "Error: $!";
$paddr=sockaddr_in($port, $iaddr) or die "Error: $!";
$proto=getprotobyname('tcp') or die "Error - Protocol: $!";

socket(SOCK, PF_INET, SOCK_STREAM, $proto) or die "Error: $!";
connect(SOCK, $paddr) or die "Error: $!";;
print "Conectando...\n";
$msg = "quote user ftp\n";
send(SOCK, $msg, 0) or die "Error: $!";
print "Fazendo a autentificacao...\n";
$msg = "quote cwd ~root\n";
send(SOCK, $msg, 0) or die "Error: $!";
$msg = "quote pass ftp\n";
send (SOCK, $msg, 0) or die "Error: $!";
print "Dentro!";
print "Terminando o programa...\n";
exit;

Como vc viu.... tudo aih eh vc jah conhecia, menos o comando send e
$msg... vou explicar como funciona... qnd vc ker ter contato com o socket
vc usa msg = "comando"; e depois pede p/ enviar a mensagem usando:
send (SOCK, $msg, 0) or die "Error: $!";
sakou??? entao eh tudo tao facil... se vc nao conseguiu intender
nada... pare um poko e releia o texto... com mta calma... funciona... pode
crer q sim... Vamos para o proximo topico....

[5]- Proveitos do socket

Gente... vou dar um exemplo a vcs de como usar o socket... vou usar o
Windows NT como objetivo.... vc descobre um bug no NT... akeles bugzinhos
de shellcode e ker exploitar o q vc pode fazer.... algumas dicas:

#Crie um arkivo perl p/ exploitar
#Use p/ ele conectar a um alvo, use ARGV se for hosts q surgirao na hora
viu como ARGV eh util....
#Depois de conectar use o truque da msg = "Shellcode \n"; e depois envia a
mensagem ao host que serah setado pelo ARGV.... viu gente... eh coisa
facil... ateh eu jah fix isso... vo mostrar aki um apagador de logs....q
fix com um colega meu , vou mostrar no proximo topico.


[6]- Logs Remov 1.0 

Aew galera, estah aih o apagador de logs, funciona remotamente e eh
rapido....

2 coisas contra:

1- Tem q ter root
2- Sete o arkivo log no logsremov na linha unlink dependendo do OS kd 1
tem os logs e tal....

#######Code###########

#!/usr/bin/perl -w



print " ######################\n";
print " # Removedor de #\n";
print " # logs #\n";
print " ######################\n";
print "\n";
print "\n";
$ARGC=@ARGV;
if ($ARGC < 2) {
print "Usage: $0 Host <user> <pass> <porta21(default)>\n";
print "\nChange the port N, on the code and the DIRs to be
erased\nas $ print "\n";
exit;
}

use Socket;
my($host,$iaddr, $paddr, $port, $proto, $rlogin, $rpass);

$port="21";
$host=$ARGV[0];
$rlogin=$ARGV[1];
$rpass=$ARGV[2];
$iaddr= inet_aton($host) or die "Error: $!";
$paddr=sockaddr_in($port, $iaddr) or die "Error: $!";
$proto=getprotobyname('tcp') or die "Error - Protocol: $!";


socket(SOCK, PF_INET, SOCK_STREAM, $proto) or die "Error: $!";
connect(SOCK, $paddr) or die "Error: $!";;

$msg = "USER $rlogin\n";
send(SOCK, $msg, 0) or die "Error: $!";
$msg = "PASS $rpass\n";
send(SOCK, $msg, 0) or die "Error: $!";
$msg= (SETAR_ARKIVO_DE_LOGS) or die "File not found...: $!");
send(SOCK, $msg, 0) or die "Error: $!";
while (<SOCK>) {
print;
}

exit;

Pronto tah aih o codigo... mas se eu fosse vc nao confiava nele pq ainda
precisa ser aperfeicoado e foi desenvolvido mas por uma mera
brincadeira.... 

[7]-Codando seu proprio exploit

Gente, p/ vcs nao serem mais scripts kiddies, facam isso que eu estou
falando....

1 coisa que vc tem q saber eh descobrir o bug q vc vai exploitar, vc tem 2
saidas, a primeira saida e vc fucar ateh achar o bug e a 2 saida eh vc
procurar o bug nessas paginas securenet, packetstorm, unsekurity e
etc... e depois passar p/ a pratica...

2 - Recomendo tb estudar exploit dos otros e comecar a fazer otro mas
seguindo sua propria tese... isso eh mto bom... vc treina com isso e qnd
ve jah tah dominando a linguagem Perl....

3- Depois teste o exploit e se nao conseguir procure alguem p/ lhe
ajudar... sempre faco isso... com o q vc leu aki, dah p/ jah codar coisas
basicas ... entao... agora em diante eh com vc amigo! valeu to vazando!