前提:forkserverなし
This repository describes how the fuzzing tool AFL sends fuzz to the target binary.
ファジングツールAFLが ターゲットに入力を送る方法 公開版
- afl-fuzz.c: 疑似afl-fuzz.c
- target.c: ファジング対象
- afl-fuzz:
.cur_input
に対してファズを書き込む - afl-fuzz:
lseek
により、ファイルの読み書き位置を先頭に戻す- 注:ファズの末尾を指している状態であるため、先頭に戻す必要がある
- afl-fuzz: 子プロセスのファイルディスクリプタ0(標準入力)を、
.cur_input
のファイルディスクリプタで上書きする(dup2(out_fd, 0)
) - afl-fuzz: 子プロセスは、
exec
によってターゲットを起動する- 注:exec後もファイルディスクリプタは継承される
- target: 標準入力から文字を取得する
- このとき、ファイルディスクリプタ0は
.cur_input
のファイルディスクリプタで上書きされているため、.cur_input
の中身を読み込む
- このとき、ファイルディスクリプタ0は
- target: 読み込んだ文字列を
out.txt
に書き込む
$ ./make
$ ./afl-fuzz
parent process
child process
Hello,World!
child process exit
$ cat ./out.txt
Hello,World!