Pergunta

Em primeiro lugar, quero evitar uma guerra inflamada contra as línguas.As linguagens para escolher são Perl, Python e Ruby.Quero mencionar que me sinto confortável com todos eles, mas o problema é que não consigo focar apenas em um.

Se, por exemplo, eu vejo um módulo Perl legal, tenho que testá-lo.Se eu vir um bom aplicativo Python, preciso saber como ele é feito.Se eu vejo um Ruby DSL ou algum vodu Ruby, fico viciado em Ruby por um tempo.

No momento estou trabalhando como desenvolvedor Java, mas pretendo fazer o CEH em um futuro próximo.Minha pergunta é:para criação de ferramentas e desenvolvimento de exploits, qual linguagem você considera mais apropriada?

Novamente, não quero causar uma guerra violenta ou qualquer problema, só quero opiniões honestas de roteiristas que sabem o que estão fazendo.

Mais uma coisa:talvez alguns de vocês perguntem "Por que escolher um idioma?".Para responder a isso:Gostaria de escolher apenas um idioma para tentar dominá-lo.

Foi útil?

Solução

Você provavelmente quer Ruby, porque é a linguagem nativa do Metasploit, que é a estrutura de teste de penetração de código aberto padrão de fato.Ruby vai te dar:

  • Metasploit bancos de dados framework, opcode e shellcode
  • Metasploit Rubi Lorcon ligações para trabalho 802.11 bruto.
  • Ligações KARMA do Metasploit para redirecionamento do lado do cliente 802.11.
  • Lib Curl e net/http para escrita de ferramentas web.
  • Máquina de Eventos para proxy da web e trabalho de difusão (ou RFuzz, que estende o conhecido servidor da web Mongrel).
  • Metasmo para geração de shellcode.
  • Tempestade para desmontagem x86.
  • BinData para difusão de formato de arquivo binário.

O segundo lugar aqui vai para Python.Existem mais bibliotecas de pentesting disponíveis em Python do que em Ruby (mas não o suficiente para compensar o Metasploit).Ferramentas comerciais tendem a oferecer suporte a Python também --- se você é um cliente Immunity CANVAS ou CORE Impact, você quer Python.Python oferece:

  • Torcido para acesso à rede.
  • PaiMei para rastreamento de programa e depuração programável.
  • Suporte CANVAS e Impacto.
  • Dornseif bibliotecas firewire para depuração remota.
  • Integração pronta com WinDbg para depuração remota do kernel do Windows (ainda não há uma boa resposta em Ruby para depuração do kernel, e é por isso que ainda uso Python ocasionalmente).
  • Fuzzer de pêssego e Sully pela difusão.
  • SpikeProxy para testes de penetração na web (também, Pantera OWASP).

Não é novidade que muitos trabalhos na web usam ferramentas Java.A ferramenta de teste padrão da web de fato é o Burp Suite, que é um aplicativo Java swing.Tanto Ruby quanto Python possuem variantes Java que você pode usar para obter acesso a ferramentas como essa.Além disso, Ruby e Python oferecem:

  • Integração direta com libpcap para trabalho com pacotes brutos.
  • Ligações OpenSSL para criptografia.
  • Extensões IDA Pro.
  • Interfaces de função estrangeira C maduras (ou pelo menos razoáveis) para acesso à API.
  • WxWindows para UI funciona e pilhas web decentes para UIs web.

Você não vai errar com nenhuma das linguagens, embora para o trabalho de pentest convencional, o Metasploit provavelmente supere todos os benefícios do Python e, no momento, para o trabalho de reversão x86, as interfaces de depuração superiores do Python superam todos os benefícios do Ruby.

Também:é 2008.Elas não são "linguagens de script".São linguagens de programação.;)

Outras dicas

[Isenção de responsabilidade:Sou principalmente um programador Perl, o que pode estar influenciando meu julgamento.No entanto, não sou particularmente tribal e penso que nesta questão específica o meu argumento é razoavelmente objectivo.]

Perl foi projetado para se misturar perfeitamente ao cenário Unix, e é por isso que parece tão estranho para pessoas com experiência principalmente em OO (particularmente a escola Java de OOP).Por esse motivo, porém, ele é incrivelmente amplamente instalado em máquinas com qualquer tipo de sistema operacional Unixoid, e muitos utilitários de sistema de fornecedores estão escritos nele.Também pela mesma razão, servidores que não possuem nem Python nem Ruby instalados ainda provavelmente terão Perl neles, novamente tornando importante ter alguma familiaridade com ele.Portanto, se sua atividade de CEH incluir atividades extensas em Unix, você precisará ter alguma familiaridade com Perl de qualquer maneira e poderá também se concentrar nisso.

Dito isto, é em grande parte uma questão de preferência.Não há muito que diferenciar as línguas;seu poder expressivo é virtualmente idêntico.Algumas coisas são um pouco mais fáceis em um dos idiomas, outras um pouco mais fáceis em outro.

Em termos de bibliotecas, não sei como Ruby e Python se comparam – sei que Perl os supera por uma margem.Então, novamente, às vezes (especialmente quando você está procurando bibliotecas para necessidades comuns), o único efeito disso é que você fica inundado de escolhas.E se você está apenas procurando fazer coisas em alguma área específica que seja bem coberta por bibliotecas para Python ou Ruby, a massa de outro coisas no CPAN não são necessariamente uma vantagem.Em áreas de nicho, entretanto, isso é importante, e você nunca sabe que necessidades imprevistas acabará tendo (err, por definição).

Para uso de uma linha na linha de comando, Python é uma espécie de fracasso.

Em termos de ambiente de interpretação interativo, Perl... uhm... bem, você pode usar o depurador, que não é tão bom, ou você pode instalar um do CPAN, mas o Perl não fornece um bom em si.

Então eu acho que Perl tem uma pequena vantagem para suas necessidades em particular, mas apenas por pouco.Se você escolher Ruby, provavelmente não ficará muito pior.Python pode incomodar você um pouco mais, mas também dificilmente é um problema. ruim escolha.

Eu poderia argumentar para todos os três :-)

Perl tem todo o CPAN - oferecendo uma enorme vantagem em reunir funcionalidades rapidamente.Ele também possui uma infraestrutura de teste flexível e agradável, o que significa que você pode conectar vários estilos de teste automatizados diferentes (incluindo testes em outras linguagens) na mesma estrutura.

Ruby é uma linguagem adorável de aprender - e carece de alguns recursos do Perl 5.Se você estiver fazendo testes baseados na web, ele também possui a biblioteca watir - que é muito útil (veja http://wtr.rubyforge.org/)

Python - uma linguagem agradável e (embora não seja de minha preferência pessoal) algumas pessoas acham a maneira como é estruturado mais fácil de entender.

Qualquer um deles (e muitos outros) seria uma ótima linguagem para aprender.

Em vez de olhar para o idioma, eu olharia para o seu ambiente de trabalho.É sempre mais fácil aprender coisas se você tiver outras pessoas por perto que estejam fazendo coisas semelhantes.Se o pessoal atual de desenvolvimento/teste já está focado em uma das opções acima - eu aceitaria isso.Caso contrário, escolha aquele que seria mais aplicável/útil ao seu ambiente de trabalho atual.Converse com o resto da sua equipe e veja o que eles pensam.

Isso depende da implementação, se for distribuído eu escolheria Java, visto que vocês sabem disso, pela portabilidade.Se for apenas para uso interno, ou for usado em ambientes semicontrolados, escolha o que você achar mais confortável para manter e o que tiver melhores perspectivas de longo prazo.

Agora, apenas para responder à pergunta, eu escolheria Perl, mas sou um cara do Linux, então posso ser um pouco tendencioso nisso.

Se você planeja usar o Metasploit para testes de penetração e desenvolvimento de exploits, eu recomendaria Ruby, como mencionado anteriormente. O Metasploit é escrito em Ruby e qualquer desenvolvimento de exploit/módulo que você queira fazer exigirá Ruby.

Se você usar o Immunity CANVAS para testes de penetração, pelos mesmos motivos, eu recomendaria Python, pois o CANVAS é escrito em python.Além disso, muitos frameworks fuzzing como Peach e Sulley são escritos em Python.

Eu não recomendaria Perl, pois você encontrará muito poucas ferramentas/scripts/frameworks relacionados a pentest/fuzzing/exploits/...em Perl.

Como sua pergunta é "escrita de ferramentas e desenvolvimento de exploits", eu recomendaria Ruby se você escolher Metasploit ou python se escolher CANVAS.

espero que ajude :)

Falando como CEH, aprenda primeiro o material do CEH.Isso irá expor você a uma variedade de ferramentas e plataformas usadas para montar vários tipos de ataques.Depois de entender bem o seu alvo, analise os recursos das ferramentas e plataformas já disponíveis (a estrutura metasploit mencionada anteriormente é muito completa e robusta).Como eles podem ser estendidos para atender às suas necessidades?Depois de saber disso, você pode comparar as capacidades dos idiomas.

Eu também recomendaria dar uma olhada nas ferramentas disponíveis no Retroceder distribuição.

Todos eles deveriam ser suficientes para isso.A menos que você precise de alguma biblioteca que esteja disponível apenas em um idioma, deixarei a preferência pessoal me guiar.

Se você está procurando uma linguagem de script que funcione bem com Java, você pode querer dar uma olhada no Groovy.Ele tem a flexibilidade e o poder do Perl (fechamentos, regexes integrados, matrizes associativas em cada canto), mas você pode acessar o código Java a partir dele, portanto, você tem acesso a um grande número de bibliotecas e, em particular, ao resto do sistema que você deseja. estamos desenvolvendo.

metasploit é uma ótima estrutura para testes de penetração.É escrito principalmente em Ruby, então se você conhece bem essa linguagem, talvez possa se conectar lá.No entanto, para usar metasploit, você não precisa conhecer nenhum idioma.

Se você estiver interessado em CEH, eu daria uma olhada em Chapéu Cinzento Python.Mostra algumas coisas bastante interessantes e relacionadas.

Dito isto, qualquer idioma deve servir.

Bem, em que tipo de façanhas você está pensando?Se você quiser escrever algo que precise de coisas de baixo nível (ptrace, raw sockets, etc.), então você precisará aprender C.Mas tanto Perl quanto Python podem ser usados.A verdadeira questão é qual combina mais com o seu estilo?

Quanto à fabricação de ferramentas, Perl possui boas habilidades de processamento de strings, está mais próximo do sistema, tem um bom suporte, mas IMHO é muito confuso.Eu prefiro Python:é uma linguagem limpa, fácil de usar e aprender, com bom suporte (referência completa de linguagem/lib, bibliotecas de terceiros, etc.).E é (estritamente IMHO) legal.

Estou com tqbf.Já trabalhei com Python e Ruby.Atualmente estou trabalhando com JRuby.Ele tem todo o poder do Ruby com acesso às bibliotecas Java, então se houver algo que você realmente precisa de uma linguagem de baixo nível para resolver, você pode fazê-lo com uma linguagem de alto nível.Até agora, não precisei usar muito Java, pois Ruby teve a capacidade de fazer tudo o que precisava como testador de API.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top