go-fuzz drafts
This commit is contained in:
parent
6df0c32f25
commit
64ecd5ada1
5 changed files with 73 additions and 0 deletions
14
README.md
14
README.md
|
|
@ -176,3 +176,17 @@ bash scripts/run.sh
|
||||||
3.3. ./build_for_afl.sh
|
3.3. ./build_for_afl.sh
|
||||||
|
|
||||||
3.4. ./run_afl.sh
|
3.4. ./run_afl.sh
|
||||||
|
|
||||||
|
### Черновики для go-fuzz
|
||||||
|
|
||||||
|
На данный момент установка по официальной инструкции https://github.com/dvyukov/go-fuzz/blob/master/README.md не работает по причине golang.org/x/tools@v0.44.0 requires go >= 1.25.0 (running go 1.24.4)
|
||||||
|
|
||||||
|
4. Запуск go-fuzz
|
||||||
|
|
||||||
|
4.1. cd myfuzz
|
||||||
|
|
||||||
|
4.2. ./install_go-fuzz.sh (тут возникают проблемы, поэтому следующие шаги проверить не удалось)
|
||||||
|
|
||||||
|
4.3. ./build_for_go-fuzz.sh
|
||||||
|
|
||||||
|
4.4. ./run_go-fuzz.sh
|
||||||
|
|
|
||||||
48
myfuzz/auth_fuzz.go
Normal file
48
myfuzz/auth_fuzz.go
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
package myfuzz
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"linux-auth/internal/auth"
|
||||||
|
"linux-auth/internal/db"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Fuzz — это функция, которую будет вызывать go-fuzz.
|
||||||
|
// Принимает только []byte — все входные данные в одном байтовом потоке.
|
||||||
|
func Fuzz(data []byte) int {
|
||||||
|
// Инициализируем БД на каждом вызове — go-fuzz не имеет f.Cleanup()
|
||||||
|
if err := db.Init("test_data.db"); err != nil {
|
||||||
|
return -1 // ошибка инициализации — краш
|
||||||
|
}
|
||||||
|
defer db.Close() // закрываем после каждого вызова
|
||||||
|
|
||||||
|
// Разделяем байты по нулевому байту (\x00) — это разделитель между username и password
|
||||||
|
parts := bytes.SplitN(data, []byte{0}, 2)
|
||||||
|
if len(parts) != 2 {
|
||||||
|
return 0 // недостаточно данных — пропускаем
|
||||||
|
}
|
||||||
|
|
||||||
|
username := string(parts[0])
|
||||||
|
password := string(parts[1])
|
||||||
|
|
||||||
|
ok, err := auth.Authenticate(username, password)
|
||||||
|
|
||||||
|
// Если произошла ошибка — это баг
|
||||||
|
if err != nil {
|
||||||
|
return -1 // краш
|
||||||
|
}
|
||||||
|
|
||||||
|
// Если аутентификация прошла успешно — проверяем, разрешён ли такой вход
|
||||||
|
if ok {
|
||||||
|
// Разрешённые пары (аналогично f.Add)
|
||||||
|
if (username == "admin" && password == "admin123") ||
|
||||||
|
(username == "user1" && password == "password1") {
|
||||||
|
return 1 // норма — это ожидаемый результат
|
||||||
|
}
|
||||||
|
// Неожиданный успешный вход — это баг!
|
||||||
|
return -1 // краш
|
||||||
|
}
|
||||||
|
|
||||||
|
// Неудачная аутентификация — это нормально
|
||||||
|
return 1 // норма
|
||||||
|
}
|
||||||
3
myfuzz/build_for_go-fuzz.sh
Executable file
3
myfuzz/build_for_go-fuzz.sh
Executable file
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
go-fuzz-build -libfuzzer ./myfuzz
|
||||||
3
myfuzz/install_go-fuzz.sh
Executable file
3
myfuzz/install_go-fuzz.sh
Executable file
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
go install github.com/dvyukov/go-fuzz/go-fuzz@latest github.com/dvyukov/go-fuzz/go-fuzz-build@latest
|
||||||
5
myfuzz/run_go-fuzz.sh
Executable file
5
myfuzz/run_go-fuzz.sh
Executable file
|
|
@ -0,0 +1,5 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
cp ../data/users.db test_data.db
|
||||||
|
|
||||||
|
go-fuzz -bin=myfuzz-fuzz.zip -workdir=work
|
||||||
Loading…
Add table
Add a link
Reference in a new issue