Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
slirp_snapshots_stateful — 针对博文《Snapshotting our way to CVE-2026-9539》的 PoC | Kitploit
工具/GitHubGitHub/quarkslab/slirp_snapshots_stateful
动态分析 (沙盒)漏洞分析模糊测试网络安全二进制分析论文与研究
GitHubquarkslab/slirp_snapshots_stateful

slirp_snapshots_stateful

针对博文《Snapshotting our way to CVE-2026-9539》的 PoC

查看仓库
229天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
网站

slirp_snapshots_stateful

安装与运行

步骤 0:安装依赖

sudo apt install meson ninja-build valgrind clang-20 binutils libglib-2.0-dev cmake python3-venv

安装 Rust 工具链。

步骤 1:克隆 libafl

将 libafl 克隆到 fuzzer 目录旁边,并检出正确的提交

git clone https://github.com/AFLplusplus/LibAFL.git libafl/
cd libafl
git checkout 6e7ea0da898b63c5098f84c0908a8c427a5c73ff

步骤 2:为 libafl 应用补丁

git apply ../patches/libafl/module_snapshot.patch
git apply ../patches/libafl/snapshot.patch
git apply ../patches/libafl/libafl_bolts_wide.patch
git apply ../patches/libafl/libafl_targets_simd.patch

步骤 3:克隆 libslirp

cd ..
git clone https://gitlab.freedesktop.org/slirp/libslirp.git
cd libslirp
git checkout 4ddbcd5cc4f7a14473ebfc1dcdd1afb4edf96908

步骤 4:为 libslirp 应用补丁

git apply ../patches/libslirp/meson_fuzzing.patch
git apply ../patches/libslirp/meson_options.patch
git apply ../patches/libslirp/meson.patch
git apply ../patches/libslirp/qemu_target.patch
git apply ../patches/libslirp/tcp_input.patch
git apply ../patches/libslirp/tcp_outpt.patch

步骤 5:编译目标

CC=clang-20 CXX=clang++-20 meson build
ninja -C build

步骤 6:找到校验和 ret 指令的偏移量

要么在 IDA/Binja/ghidra 中打开二进制文件,找到 cksum 函数中 ret 指令的偏移量,要么

nm -n build/fuzzing/qemu-target | grep cksum
objdump -d --disassemble=cksum build/fuzzing/qemu-target | grep -E '\bret[qwl]?\b'

用你找到的第二个偏移量减去第一个偏移量,并将该值替换到 fuzzer/src/libslirp/hooks.rs:200 中

步骤 7:编译 fuzzer

cd ../fuzzer
cargo +nightly build --release

注意:根据你的 llvm 安装情况,你可能需要指定 LLVM_CONFIG_PATH 环境变量。

步骤 8:运行 fuzzer

cp ../libslirp/build/fuzzing/qemu-target ./target/release/
cd target/release
mkdir corpus
RUST_LOG=warn ./slirp-snapshots-stateful-fuzzer

使用 ASAN 和覆盖率运行

警告:此功能在虚拟机共享文件夹或网络挂载中无法工作。

执行步骤 6 以修改 offline_reproducer/runner/src/libslirp/hooks.rs:17 中的偏移量。然后编译 runner 和 driver

cd runner
cargo +nightly-2026-06-11 build --release
cp target/release/offline_runner ../../fuzzer/target/release
cp target/release/x86_64-unknown-linux-gnu/release/libafl_qemu_asan_host.so ../../fuzzer/target/release
cd ../driver
cargo +nightly build --release
cp target/release/offline_driver ../../fuzzer/target/release
cd ../../fuzzer/target/release
mkdir corpus coverage repro_files

在一个终端中运行 driver,然后在另一个终端中运行 fuzzer。

RUST_LOG=warn ./offline_driver
RUST_LOG=warn ./slirp-snapshots-stateful-fuzzer

覆盖率

覆盖率文件将存储在 coverage 文件夹中,可以使用 bncov(binja)/lighthouse(ida/binja)/lightkeeper(ghidra)打开。如有必要,可以使用 drcov-merge 进行合并。

已知缺陷

  • 当发现缺陷时 Qemu 会终止,并导致 fuzzer 被杀死(libafl 的限制)。
  • 离线复现器不会将崩溃发送到 crashes 文件夹。
下载工具