如何为使用afl.rs进行模糊测试的Rust程序获取回溯?

时间:2018-12-30 03:50:34

标签: rust fuzzing american-fuzzy-lop

我正在使用afl.rs用American Fuzzy Lop模糊Rust程序。 AFL找到了导致程序崩溃的输入。现在,我正在尝试调试紧急情况,我想从查看回溯开始。但是我尝试过的任何方法都没有奏效。如何获得追溯?

我希望使用通常的RUST_BACKTRACE方法进行追溯,并在AFL之外运行我的程序。但是,执行这些步骤不会产生回溯。

cargo afl build
export RUST_BACKTRACE=1
# Echo one of the invalid inputs found by AFL, as logged in the crashes directory
echo 'http://[:]:example.co]:80/fo=bar' | ./target/debug/url-fuzz-target

我也尝试了export RUST_BACKTRACE=1; cargo afl fuzz [arguments],但AFL并未将回溯记录保存在输出目录中的任何地方。

当前,我的解决方法是创建第二个不调用extern crate afl的可执行文件,并将其用于调试。我不想这样做,因为维护两个程序很麻烦。有没有更好的方法来获取回溯?

源代码

Cargo.toml中的依赖项:
[dependencies]
afl = "0.4"
# This version of the url crate has a known bug in Url::parse()
url = { git = "https://github.com/servo/rust-url.git", rev = "bfa167b4e0253642b6766a7aa74a99df60a94048" }
main.rs:
#[macro_use]
extern crate afl;
extern crate url;

fn main() {
    fuzz!(|data: &[u8]| {
        if let Ok(s) = std::str::from_utf8(data) {
            let _ = url::Url::parse(&s);
        }
    });
}

0 个答案:

没有答案