hacktricks/network-services-pentesting/pentesting-web/code-review-tools.md

228 lines
15 KiB
Markdown
Raw Normal View History

2023-06-05 18:33:24 +00:00
# Herramientas de revisión de código
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) **grupo de Discord** o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PR al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
</details>
## General
* [**https://owasp.org/www-community/Source\_Code\_Analysis\_Tools**](https://owasp.org/www-community/Source\_Code\_Analysis\_Tools)\
* [**https://github.com/analysis-tools-dev/static-analysis**](https://github.com/analysis-tools-dev/static-analysis)
```bash
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](https://github.com/tomnomnom/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](https://github.com/PortSwigger/js-miner) para buscarlos.
- Asegúrate de que se realice un escaneo activo.
- Lee '[Consejos/Notas](https://github.com/minamo7sen/burp-JS-Miner/wiki#tips--notes)'
- Si se encuentran, usa [Maximize](https://www.npmjs.com/package/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(<packerReturnVariable>);
- 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
- Angular: [enableProdMode](https://blog.nvisium.com/angular-for-pentesters-part-2)
- Secretos
- Usa:
- [JS Miner](https://github.com/PortSwigger/js-miner)
- Patrones [RegHex](https://github.com/l4yton/RegHex)
- Patrones [gf](https://github.com/tomnomnom/gf/tree/master/examples)
- 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
- Usa [LinkFinder](https://github.com/GerbenJavado/LinkFinder) y [JS Miner](https://github.com/PortSwigger/js-miner).
- Bibliotecas y dependencias vulnerables
- Usa [Retire.js](https://retirejs.github.io/retire.js/) y [NPM](https://snyk.io/advisor/) (desplázate hacia abajo hasta la sección de seguridad > enlace de todas las versiones).
- URLs de la nube
- Usa [JS Miner](https://github.com/PortSwigger/js-miner).
- Subdominios
- Usa [JS Miner](https://github.com/PortSwigger/js-miner).
- 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
- https://www.youtube.com/watch?v=_v8r_t4v6hQ
- https://blog.nvisium.com/angular-for-pentesters-part-1
- https://blog.nvisium.com/angular-for-pentesters-part-2
Herramientas
- https://portswigger.net/burp/documentation/desktop/tools/dom-invader
#### Referencias menos utilizadas
- https://cyberchef.org/
- https://olajs.com/javascript-prettifier
- https://jshint.com/
- https://github.com/jshint/jshint/
## 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.
```bash
# 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.
```bash
# 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](http://findbugs.sourceforge.net/) - Herramienta de análisis estático de código que busca errores de programación comunes en Java.
- [Checkstyle](http://checkstyle.sourceforge.net/) - Herramienta de análisis estático de código que busca violaciones de estilo de codificación en Java.
- [PMD](https://pmd.github.io/) - Herramienta de análisis estático de código que busca errores de programación comunes en Java y otros lenguajes.
- [SonarQube](https://www.sonarqube.org/) - 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](https://www.eclipse.org/ide/) - Entorno de desarrollo integrado que incluye herramientas de análisis de código para Java.
- [IntelliJ IDEA](https://www.jetbrains.com/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.
```bash
# 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
```bash
https://github.com/securego/gosec
```
## PHP
[Psalm](https://phpmagazine.net/2018/12/find-errors-in-your-php-applications-with-psalm.html) y [PHPStan](https://phpmagazine.net/2020/09/phpstan-pro-edition-launched.html).
### Plugins de Wordpress
[https://www.pluginvulnerabilities.com/plugin-security-checker/](https://www.pluginvulnerabilities.com/plugin-security-checker/)
## Solidity
* [https://www.npmjs.com/package/solium](https://www.npmjs.com/package/solium)
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme en** **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PR al repositorio [hacktricks](https://github.com/carlospolop/hacktricks) y al repositorio [hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
</details>