Question

Tout d'abord, je souhaite éviter une guerre des flammes sur les langues. Les langues à choisir sont Perl, Python et Ruby. Je tiens à mentionner que je suis à l'aise avec chacun d'entre eux, mais le problème est que je ne peux pas me concentrer sur un seul.

Si, par exemple, je vois un module Perl cool, je dois l'essayer. Si je vois une belle application Python, je dois savoir comment elle est faite. Si je vois un DSL Ruby ou un voodoo Ruby, je suis accro à Ruby pendant un moment.

Je travaille actuellement en tant que développeur Java, mais je prévois de prendre CEH dans un avenir proche. Ma question est la suivante: pour la rédaction d’outils et le développement d’exploitation, quelle langue trouvez-vous la plus appropriée?

Encore une fois, je ne veux pas causer de guerre de flammes ni d’ennuis, je veux juste des opinions honnêtes de la part de scénaristes qui savent ce qu’ils font.

Encore une chose: certains d’entre vous se demanderont peut-être "Pourquoi choisir une langue?". Pour répondre à cette question, je voudrais choisir une seule langue pour essayer de la maîtriser.

Était-ce utile?

La solution

Vous voulez probablement Ruby, car il s’agit du langage natif de Metasploit, qui est le cadre standard de facto des tests de pénétration. Ruby va vous donner:

La deuxième place ici revient à Python. Il y a plus de bibliothèques de pentesting disponibles en Python qu'en Ruby (mais pas assez pour compenser Metasploit). Les outils commerciaux ont également tendance à prendre en charge Python - si vous êtes un client Immunity CANVAS ou CORE Impact, vous voulez Python. Python vous donne:

Sans surprise, de nombreux travaux Web utilisent des outils Java. Burp Suite est l’application Java Swing standard. Ruby et Python ont des variantes Java que vous pouvez utiliser pour accéder à de tels outils. De plus, Ruby et Python proposent:

  • Intégration directe avec libpcap pour le travail sur les paquets bruts.
  • Liaisons OpenSSL pour crypto.
  • Extensions IDA Pro.
  • Interfaces de fonction étrangères C matures (ou du moins raisonnables) pour l'accès à l'API.
  • WxWindows for UI fonctionne et de bonnes piles Web pour les interfaces utilisateur Web.

Les deux langues ne vous tromperont pas, bien que Metasploit se démarque probablement de tous les avantages de Python pour les travaux les plus courants, mais qu’aujourd’hui, pour les travaux de retournement x86, les interfaces de débogage supérieures de Python effacent tous les avantages de Ruby.

Aussi: nous sommes en 2008. Ce ne sont pas des "langages de script". Ils sont des langages de programmation. ;)

Autres conseils

[Disclaimer: Je suis avant tout un programmeur Perl, ce qui peut influencer mon jugement. Cependant, je ne suis pas particulièrement tribal et je pense que sur cette question particulière, mon argument est raisonnablement objectif.]

Perl a été conçu pour se fondre parfaitement dans le paysage Unix. C’est pourquoi il se sent si étranger aux personnes ayant une formation majoritairement OO (en particulier l’école Java de OOP). Pour cette raison, cependant, il est incroyablement largement installé sur les ordinateurs dotés de tout type de système d'exploitation Unixoid, et de nombreux utilitaires système des fournisseurs y sont écrits. De plus, pour la même raison, les serveurs n’ayant ni Python ni Ruby installé sont toujours susceptibles d’avoir Perl, ce qui rend encore plus important la connaissance. Donc, si votre activité CEH inclut une activité intense sous Unix, vous devrez quand même vous familiariser avec Perl, et vous devriez aussi vous concentrer sur cela.

Cela dit, c’est surtout une question de préférence. Il n'y a pas grand chose à différencier les langues; leur pouvoir expressif est pratiquement identique. Certaines choses sont un peu plus faciles dans l’une des langues, d’autres un peu plus facilement.

En ce qui concerne les bibliothèques, je ne sais pas comment Ruby et Python se comparent. Je sais que Perl les a battus de peu. Encore une fois, parfois (en particulier lorsque vous recherchez des bibliothèques pour des besoins communs), le seul effet de cela est que vous êtes submergé de choix. Et si vous cherchez seulement à faire des choses dans un domaine particulier qui est bien couvert par les bibliothèques pour Python ou Ruby, la masse de autres contenus sur CPAN n’est pas nécessairement un avantage. Cependant, dans les domaines de niche, cela compte et vous ne savez jamais quel besoin imprévu vous finirez par avoir (euh, par définition).

Pour une utilisation en une ligne sur la ligne de commande, Python est une sorte de non-démarreur.

En ce qui concerne l'environnement d'interpréteur interactif, Perl… euh… bon, vous pouvez utiliser le débogueur, qui n'est pas très bon, ou vous pouvez en installer un à partir de CPAN, mais Perl n'en envoie pas un bon lui-même.

Donc, je pense que Perl a un avantage très léger pour vos besoins en particulier, mais seulement. Si vous choisissez Ruby, votre situation ne sera probablement pas bien pire. Python pourrait vous gêner un peu plus, mais c’est aussi un choix mauvais .

Je pourrais faire un argument pour les trois: -)

Perl a tout ce qu’il faut pour CPAN, ce qui vous donne un avantage considérable en matière de regroupement rapide de fonctionnalités. Il dispose également d’une belle infrastructure de test flexible qui vous permet de brancher de nombreux styles de test automatisés (y compris des tests dans d’autres langues) dans le même cadre.

Ruby est une belle langue à apprendre - et il manque un peu de brutalité dans Perl 5. Si vous faites des tests sur le Web, il dispose également de la bibliothèque watir - ce qui est très utile (voir http://wtr.rubyforge.org/ )

Python - un beau langage et (bien que ce ne soit pas à ma préférence personnelle), certaines personnes trouvent que sa structure est plus facile à comprendre.

N'importe lequel d'entre eux (et beaucoup d'autres) serait une excellente langue à apprendre.

Au lieu de regarder la langue, je regarderais votre environnement de travail. Il est toujours plus facile d'apprendre des choses si vous avez d'autres personnes qui font des choses similaires. Si vos développeurs / testeurs actuels sont déjà concentrés sur l'un des éléments ci-dessus, je le ferais pour cela. Sinon, choisissez celui qui serait le plus applicable / utile à votre environnement de travail actuel. Discutez avec le reste de votre équipe et voyez ce qu'ils en pensent.

Cela dépend de l’implémentation. Si elle devait être distribuée, j’utiliserais Java, vu que vous le savez bien, en raison de sa portabilité. S'il s'agit uniquement d'un usage interne ou s'il sera utilisé dans des environnements semi-contrôlés, optez pour ce que vous êtes le plus à l'aise de maintenir et selon celui qui offre les meilleures perspectives à long terme.

Maintenant, pour répondre à la question, j'irais avec Perl, mais je suis un gars sous Linux, alors je suis peut-être un peu partial dans ce domaine.

Si vous envisagez d’utiliser Metasploit pour les tests de plume et le développement d’exploit, je vous recommanderais ruby, comme indiqué précédemment. Metasploit est écrit en ruby ??et tout développement d’exploit / module que vous voudrez peut-être faire nécessite Ruby.

Si vous utiliserez Immunity CANVAS pour le test du stylo, je vous recommande pour les mêmes raisons que Python, car CANVAS est écrit en python. De plus, beaucoup de frameworks de fuzzing comme Peach et Sulley sont écrits en Python.

Je ne recommanderais pas Perl car vous trouverez très peu d’outils / scripts / frameworks relatifs aux tests de stylo / fuzzing / exploits / ... en Perl.

Votre question étant "écriture d'outils et développement d'exploitation" Je recommanderais Ruby si vous choisissez Metasploit ou python si vous choisissez CANVAS.

espérons que cela aide:)

En tant que CEH, apprenez d’abord le matériel de CEH. Cela vous exposera à une variété d'outils et de plates-formes utilisées pour monter divers types d'attaques. Une fois que vous comprenez bien votre cible, examinez les capacités des outils et des plateformes déjà disponibles (le framework de métasploit mentionné précédemment est très complet et robuste). Comment peuvent-ils être étendus pour répondre à vos besoins? Une fois que vous savez cela, vous pouvez comparer les capacités des langues.

Je vous recommanderais également de consulter les outils disponibles sur le BackTrack . .

Tous devraient suffire à cela. À moins que vous n'ayez besoin d'une bibliothèque disponible dans une seule langue, je laisserais mes préférences personnelles me guider.

Si vous recherchez un langage de script compatible avec Java, consultez Groovy. Il a la flexibilité et la puissance de Perl (fermetures, regexes intégrés, tableaux associatifs à chaque coin), mais vous pouvez accéder au code Java à partir de celui-ci, vous avez ainsi accès à un grand nombre de bibliothèques, et en particulier au reste du système que vous ' re en développement.

metasploit est un excellent cadre pour les tests d'intrusion. Il est principalement écrit en rubis, alors si vous connaissez bien cette langue, vous pourrez peut-être vous y accrocher. Cependant, pour utiliser metasploit, vous n’avez pas besoin de connaître une langue du tout.

Si vous êtes intéressé par CEH, je voudrais jeter un oeil à Python à chapeau gris . Il montre des choses assez intéressantes et liées.

Cela étant dit, toute langue devrait convenir.

Eh bien, à quel genre d’exploites pensez-vous? Si vous voulez écrire quelque chose qui nécessite des éléments de bas niveau (ptrace, sockets bruts, etc.), vous devez apprendre le C. Cependant, Perl et Python peuvent être utilisés. La vraie question est de savoir lequel convient le mieux à votre style.

En ce qui concerne la fabrication d’outils, Perl a de bonnes capacités de traitement des chaînes, est plus proche du système, a un bon support, mais à mon humble avis, c’est très déroutant. Je préfère Python: c'est une langue propre, facile à utiliser, facile à apprendre, avec un bon support (référence complète de langue / lib, bibliothèque tierce, etc.). Et c'est (strictement IMHO) cool.

Je suis avec tqbf. J'ai travaillé avec Python et Ruby. Actuellement, je travaille avec JRuby. Il a toute la puissance de Ruby avec un accès aux bibliothèques Java. Ainsi, si vous avez absolument besoin d’un langage de bas niveau à résoudre, vous pouvez le faire avec un langage de haut niveau. Jusqu'à présent, je n'ai pas vraiment eu besoin d'utiliser beaucoup de Java car Ruby a été capable de faire tout ce dont j'avais besoin en tant que testeur d'API.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top