hacktricks/network-services-pentesting/pentesting-web/code-review-tools.md
2023-06-03 13:10:46 +00:00

17 KiB

Outils d'analyse de code

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Général

https://www.sonarqube.org/downloads/
https://deepsource.io/signup/
https://github.com/pyupio/safety
https://github.com/returntocorp/semgrep
https://github.com/WhaleShark-Team/cobra
https://github.com/insidersec/insider

# Find interesting strings
https://github.com/s0md3v/hardcodes
https://github.com/micha3lb3n/SourceWolf
https://libraries.io/pypi/detect-secrets

JavaScript

Découverte

  1. Burp:
    • Spider et découvrir le contenu
    • Sitemap > filtre
    • Sitemap > clic droit sur le domaine > Outils d'engagement > Trouver des scripts
  2. WaybackURLs:
    • waybackurls <domain> |grep -i "\.js" |sort -u

Analyse statique

Déminifier/embellir

https://prettier.io/playground/ https://beautifier.io/

Déobfusquer/Décompresser

Note: Il peut ne pas être possible de déobfusquer complètement.

  1. Trouver et utiliser les fichiers .map:
    • Si les fichiers .map sont exposés, ils peuvent être utilisés pour déobfusquer facilement.
    • Couramment, foo.js.map est mappé à foo.js. Recherchez-les manuellement.
    • Utilisez JS Miner pour les rechercher.
    • Assurez-vous qu'une analyse active est effectuée.
    • Lire 'Conseils/Notes'
    • Si vous les trouvez, utilisez Maximize pour déobfusquer.
  2. Sans fichiers .map, essayez JSnice:
    • Références: http://jsnice.org/ & https://www.npmjs.com/package/jsnice
    • Conseils:
      • Si vous utilisez jsnice.org, cliquez sur le bouton d'options à côté du bouton "Nicify JavaScript" et désélectionnez "Infer types" pour réduire l'encombrement du code avec des commentaires.
      • Assurez-vous de ne laisser aucune ligne vide avant le script, car cela peut affecter le processus de déobfuscation et donner des résultats inexacts.
  3. Utilisez console.log();
    • Trouvez la valeur de retour à la fin et changez-la en console.log(<packerReturnVariable>); pour que le js déobfusqué soit imprimé au lieu d'être exécuté.
    • Ensuite, collez le js modifié (et toujours obfusqué) dans https://jsconsole.com/ pour voir le js déobfusqué enregistré dans la console.
    • Enfin, collez la sortie déobfusquée dans https://prettier.io/playground/ pour l'embellir pour l'analyse.
    • Note: Si vous voyez toujours du js empaqueté (mais différent), il peut être empaqueté de manière récursive. Répétez le processus.

Analyser

Références: https://medium.com/techiepedia/javascript-code-review-guide-for-bug-bounty-hunters-c95a8aa7037a

Recherchez:

  • Chargement anti-débogage
  • Secrets
    • Utilisez:
      • JS Miner
      • RegHex patterns
      • gf patterns
      • Recherchez des motifs de dictionnaire pertinents:
        • pass, user, admin
        • auth, login, sign, challenge, 2fa
        • key, apikey, api_key, api-key, jwt, token
        • secret, security, secure
        • ...
      • Examen manuel
    • Si une clé API est trouvée, vérifiez ici la syntaxe d'utilisation potentielle: https://github.com/streaak/keyhacks.
  • Fonctions vulnérables
    • InnerHTML() - Si vous avez trouvé cela, cela signifie qu'il y a une chance potentielle de XSS si aucune désinfection appropriée n'a lieu. Même si votre charge utile est désinfectée, ne vous inquiétez pas. Tracez le code pour savoir où se trouve la désinfection. Étudiez-le et essayez de contourner la désinfection.
    • Postmessage() - Si vous avez lu mon précédent article (https://medium.com/techiepedia/what-are-sop-cors-and-ways-to-exploit-it-62a5e02100dc), vous remarquerez que Postmessage() pourrait entraîner un problème potentiel de CORS. Si le deuxième paramètre de la fonction est défini sur *, vous êtes chanceux. Consultez mon article précédent pour comprendre davantage le mécanisme derrière.
    • String.prototype.search() - Cette fonction semble normale. Pourquoi serait-ce une fonction dangereuse? Eh bien, c'est parce que certains développeurs l'ont utilisée pour trouver l'occurrence d'une chaîne à l'intérieur d'une autre chaîne. Cependant, "." est traité comme un caractère générique dans cette fonction. Donc, si cette fonction est utilisée comme vérification de désinfection, vous pouvez simplement la contourner en entrant ".". Consultez le rapport hackerone de Filedescryptor: https://hackerone.com/reports/129873
  • Endpoints et paramètres
  • Bibliothèques et dépendances vulnérables
    • Utilisez Retire.js et NPM (faites défiler jusqu'à la section sécurité > lien toutes les versions).
  • URLs Cloud
  • Sous-domaines
  • Erreurs de logique
    • Acquérir une connaissance de la situation:
      • use strict;?
    • Recherchez des contrôles côté client:
      • disable, enable, hidden, hide, show
      • catch, finally, throw, try
      • input, validate, verify, valid, correct, check, confirm, require, ..
    • Recherchez des non-primitifs:
      • function , =>
      • class

Analyse dynamique

Références

Outils

Références moins utilisées

NodeJS

https://github.com/ajinabraham/nodejsscan

Electron

Electron est un framework open source qui permet de créer des applications de bureau multiplateformes en utilisant des technologies web telles que HTML, CSS et JavaScript. Il est utilisé par de nombreuses applications populaires telles que Slack, Discord et Visual Studio Code.

Cependant, l'utilisation d'Electron peut présenter des risques de sécurité, car il permet aux développeurs d'exécuter du code JavaScript côté client avec des privilèges élevés. Cela signifie que si une application Electron est compromise, un attaquant peut potentiellement accéder à des informations sensibles telles que des jetons d'authentification ou des clés API.

Il est donc important de prendre des mesures de sécurité appropriées lors de la création d'applications Electron, telles que la validation des entrées utilisateur, la désactivation de l'exécution de code à distance et la mise en œuvre de politiques de sécurité strictes pour les modules tiers utilisés dans l'application.

https://github.com/doyensec/electronegativity

Python

Python est un langage de programmation interprété de haut niveau, orienté objet et multiplateforme. Il est souvent utilisé pour le développement web, l'analyse de données, l'automatisation de tâches et la création de scripts. Python est également largement utilisé dans le domaine de la sécurité informatique pour l'automatisation de tâches de pentesting et l'écriture d'outils de hacking.

Les outils de code review pour Python incluent PyCharm, PyLint, Flake8 et Bandit. PyCharm est un environnement de développement intégré (IDE) pour Python qui offre des fonctionnalités de débogage, de refactoring et de test. PyLint est un outil de vérification de code qui détecte les erreurs de syntaxe, les erreurs de style et les erreurs logiques dans le code Python. Flake8 est un outil de vérification de code qui combine PyLint, PyFlakes et McCabe pour détecter les erreurs de syntaxe, les erreurs de style et les erreurs de complexité dans le code Python. Bandit est un outil de sécurité de code source qui détecte les vulnérabilités de sécurité dans le code Python, telles que les injections SQL, les fuites d'informations et les vulnérabilités de contrôle d'accès.

# bandit
https://github.com/PyCQA/bandit
# pyt
https://github.com/python-security/pyt

.NET

Description

.NET is a free, open-source, cross-platform framework for building modern cloud-based applications. It is widely used for developing web applications, desktop applications, and mobile applications.

Code Review Tools

Useful .NET Libraries

# dnSpy
https://github.com/0xd4d/dnSpy

# .NET compilation
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe test.cs

Java

Java est un langage de programmation orienté objet populaire utilisé pour développer des applications pour une variété de plates-formes. Il est souvent utilisé pour développer des applications Web et mobiles. Java est également utilisé pour développer des applications pour les plates-formes cloud et SaaS.

Les outils de révision de code Java sont des outils qui aident les développeurs à trouver des erreurs de code et des vulnérabilités de sécurité dans leur code Java. Ces outils peuvent être utilisés pour détecter des erreurs de syntaxe, des erreurs de logique, des vulnérabilités de sécurité et d'autres problèmes de code.

Certains des outils de révision de code Java les plus populaires sont FindBugs, PMD et Checkstyle. Ces outils peuvent être utilisés pour détecter des erreurs de code courantes telles que les fuites de mémoire, les erreurs de syntaxe et les vulnérabilités de sécurité. Ils peuvent également être utilisés pour détecter des erreurs de logique et d'autres problèmes de code plus complexes.

Les outils de révision de code Java peuvent être utilisés pour améliorer la qualité du code et réduire les risques de sécurité. Ils peuvent également être utilisés pour améliorer la productivité des développeurs en leur permettant de trouver et de corriger rapidement les erreurs de code.

# JD-Gui
https://github.com/java-decompiler/jd-gui

# Java compilation step-by-step
javac -source 1.8 -target 1.8 test.java
mkdir META-INF
echo "Main-Class: test" > META-INF/MANIFEST.MF
jar cmvf META-INF/MANIFEST.MF test.jar test.class
Tâche Commande
Exécuter un Jar java -jar [jar]
Décompresser Jar unzip -d [répertoire de sortie] [jar]
Créer un Jar jar -cmf META-INF/MANIFEST.MF [jar de sortie] *
Base64 SHA256 sha256sum [fichier] | cut -d' ' -f1 | xxd -r -p | base64
Supprimer la signature rm META-INF/.SF META-INF/.RSA META-INF/*.DSA
Supprimer du Jar zip -d [jar] [fichier à supprimer]
Décompiler une classe procyon -o . [chemin de la classe]
Décompiler un Jar procyon -jar [jar] -o [répertoire de sortie]
Compiler une classe javac [chemin du fichier .java]

Go

https://github.com/securego/gosec

PHP

Psalm et PHPStan.

Plugins Wordpress

https://www.pluginvulnerabilities.com/plugin-security-checker/

Solidity

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥