hacktricks/network-services-pentesting/pentesting-web/code-review-tools.md
carlospolop 63bd9641c0 f
2023-06-05 20:33:24 +02:00

15 KiB

Herramientas de revisión de código

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

General

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

Descubrimiento

  1. Burp:
    • Spider y descubrir contenido
    • Sitemap > filtro
    • Sitemap > clic derecho en el dominio > Herramientas de compromiso > Buscar scripts
  2. WaybackURLs:
    • waybackurls <dominio> |grep -i "\.js" |sort -u

Análisis estático

Desminimizar/Embellecer

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

Desofuscar/Desempaquetar

Nota: Puede que no sea posible desofuscar completamente.

  1. Encontrar y usar archivos .map:
    • Si los archivos .map están expuestos, se pueden usar para desofuscar fácilmente.
    • Comúnmente, foo.js.map mapea a foo.js. Búscalos manualmente.
    • Usa JS Miner para buscarlos.
    • Asegúrate de que se realice un escaneo activo.
    • Lee 'Consejos/Notas'
    • Si se encuentran, usa Maximize para desofuscar.
  2. Sin archivos .map, prueba JSnice:
    • Referencias: http://jsnice.org/ y https://www.npmjs.com/package/jsnice
    • Consejos:
      • Si usas jsnice.org, haz clic en el botón de opciones junto al botón "Nicify JavaScript" y desmarca "Infer types" para reducir el desorden en el código con comentarios.
      • Asegúrate de no dejar ninguna línea vacía antes del script, ya que puede afectar al proceso de desofuscación y dar resultados inexactos.
  3. Usa console.log();
    • Encuentra el valor de retorno al final y cámbialo a console.log(<packerReturnVariable>); para que se imprima el js desofuscado en lugar de ejecutarse.
    • Luego, pega el js modificado (y aún ofuscado) en https://jsconsole.com/ para ver el js desofuscado registrado en la consola.
    • Finalmente, pega la salida desofuscada en https://prettier.io/playground/ para embellecerla para su análisis.
    • Nota: Si aún ves js empaquetado (pero diferente), puede estar empaquetado recursivamente. Repite el proceso.

Analizar

Referencias: https://medium.com/techiepedia/javascript-code-review-guide-for-bug-bounty-hunters-c95a8aa7037a

Busca:

  • Carga anti-depuración
  • Secretos
    • Usa:
      • JS Miner
      • Patrones RegHex
      • Patrones gf
      • Busca patrones relevantes en el diccionario:
        • pass, user, admin
        • auth, login, sign, challenge, 2fa
        • key, apikey, api_key, api-key, jwt, token
        • secret, security, secure
        • ...
      • Revisión manual
    • Si se encuentra una clave de API, comprueba aquí la sintaxis de uso potencial: https://github.com/streaak/keyhacks.
  • Funciones vulnerables
    • InnerHTML() - Si encuentras esto, significa que hay una posibilidad potencial de XSS si no se realiza una sanitización adecuada. Incluso si tu carga útil está sanitizada, no te preocupes. Rastrea el código para averiguar dónde se realiza la sanitización. Estúdialo e intenta sortear la sanitización.
    • Postmessage() - Si has leído mi publicación anterior (https://medium.com/techiepedia/what-are-sop-cors-and-ways-to-exploit-it-62a5e02100dc), notarás que Postmessage() podría llevar a un problema potencial de CORS. Si el segundo parámetro de la función se establece en *, eres afortunado. Consulta mi publicación anterior para entender más sobre el mecanismo detrás de esto.
    • String.prototype.search() - Esta función parece normal. ¿Por qué sería una función peligrosa? Bueno, es porque algunos desarrolladores la usaron para encontrar la ocurrencia de una cadena dentro de otra cadena. Sin embargo, "." se trata como comodín en esta función. Así que, si esta función se usa como comprobación de sanitización, puedes simplemente sortearla introduciendo ".". Consulta el informe de hackerone de Filedescryptor: https://hackerone.com/reports/129873
  • Endpoints y parámetros
  • Bibliotecas y dependencias vulnerables
    • Usa Retire.js y NPM (desplázate hacia abajo hasta la sección de seguridad > enlace de todas las versiones).
  • URLs de la nube
  • Subdominios
  • Errores de lógica
    • Obtén conciencia situacional:
      • use strict;?
    • Busca controles del lado del cliente:
      • disable, enable, hidden, hide, show
      • catch, finally, throw, try
      • input, validate, verify, valid, correct, check, confirm, require, ..
    • Busca no primitivos:
      • function , =>
      • class

Análisis dinámico

Referencias

Herramientas

Referencias menos utilizadas

NodeJS

https://github.com/ajinabraham/nodejsscan

Electron

Electron es un framework de código abierto que permite crear aplicaciones de escritorio multiplataforma utilizando tecnologías web como HTML, CSS y JavaScript. Es utilizado por muchas aplicaciones populares como Slack, Discord y Visual Studio Code.

Sin embargo, debido a su naturaleza basada en web, las aplicaciones de Electron pueden ser vulnerables a ataques comunes de seguridad web, como XSS y CSRF. Es importante realizar una revisión de código exhaustiva para identificar y corregir posibles vulnerabilidades en la aplicación de Electron.

https://github.com/doyensec/electronegativity

Python

Python es un lenguaje de programación popular utilizado en el desarrollo de aplicaciones web y en la creación de herramientas de hacking. Algunas de las bibliotecas más utilizadas en el hacking son requests, beautifulsoup4, selenium y scrapy.

Requests es una biblioteca utilizada para enviar solicitudes HTTP/HTTPS a un servidor web y recibir respuestas. BeautifulSoup4 es una biblioteca utilizada para analizar y extraer información de documentos HTML y XML. Selenium es una biblioteca utilizada para automatizar pruebas en navegadores web. Scrapy es un framework utilizado para extraer datos de sitios web de manera estructurada.

Python también es utilizado en la creación de herramientas de hacking personalizadas, como scripts de automatización de tareas repetitivas, herramientas de escaneo de puertos y vulnerabilidades, y herramientas de explotación de vulnerabilidades.

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

.NET

.NET es un framework de software desarrollado por Microsoft que se utiliza para construir aplicaciones de Windows y web. Es un entorno de tiempo de ejecución que permite a los desarrolladores escribir aplicaciones en varios lenguajes de programación, como C#, VB.NET y F#. Además, .NET proporciona una amplia biblioteca de clases y funciones que los desarrolladores pueden utilizar para crear aplicaciones de alta calidad de manera eficiente. En términos de seguridad, .NET tiene algunas características útiles, como la capacidad de implementar la autenticación y la autorización en las aplicaciones. Sin embargo, también puede ser vulnerable a ciertos tipos de ataques, como la inyección de SQL y la falsificación de solicitudes entre sitios (CSRF). Por lo tanto, es importante que los desarrolladores de .NET sean conscientes de estas vulnerabilidades y tomen medidas para proteger sus aplicaciones.

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

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

Java

Java es un lenguaje de programación popular utilizado en el desarrollo de aplicaciones empresariales y de servidor. Es conocido por su portabilidad, seguridad y capacidad para manejar grandes cantidades de datos. Sin embargo, también es conocido por ser vulnerable a ciertos tipos de ataques, como la inyección de código y la deserialización no segura.

Herramientas de revisión de código Java

  • FindBugs - Herramienta de análisis estático de código que busca errores de programación comunes en Java.
  • Checkstyle - Herramienta de análisis estático de código que busca violaciones de estilo de codificación en Java.
  • PMD - Herramienta de análisis estático de código que busca errores de programación comunes en Java y otros lenguajes.
  • SonarQube - Plataforma de análisis de código que proporciona informes detallados sobre la calidad del código, la seguridad y la cobertura de pruebas.
  • Eclipse IDE - Entorno de desarrollo integrado que incluye herramientas de análisis de código para Java.
  • IntelliJ IDEA - Entorno de desarrollo integrado que incluye herramientas de análisis de código para Java.

Es importante utilizar estas herramientas para identificar y corregir vulnerabilidades en el código Java antes de que puedan ser explotadas por atacantes.

# 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
Tarea Comando
Ejecutar Jar java -jar [jar]
Descomprimir Jar unzip -d [directorio de salida] [jar]
Crear Jar jar -cmf META-INF/MANIFEST.MF [jar de salida] *
Base64 SHA256 sha256sum [archivo] | cut -d' ' -f1 | xxd -r -p | base64
Eliminar Firma rm META-INF/.SF META-INF/.RSA META-INF/*.DSA
Eliminar de Jar zip -d [jar] [archivo a eliminar]
Descompilar clase procyon -o . [ruta de la clase]
Descompilar Jar procyon -jar [jar] -o [directorio de salida]
Compilar clase javac [ruta del archivo .java]

Go

https://github.com/securego/gosec

PHP

Psalm y PHPStan.

Plugins de Wordpress

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

Solidity

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