From fa5e0287e5aefc63fc21c02dc91280a390fe62b1 Mon Sep 17 00:00:00 2001 From: vovuas2003 Date: Wed, 6 May 2026 18:08:22 +0300 Subject: [PATCH] final bad try --- README.md | 13 ++++++++ go.mod | 5 ++- go.sum | 2 ++ golang-fuzz/auth_fuzz.go | 39 ++++++++++++++++++++++++ golang-fuzz/auth_fuzz_golangfuzz_test.go | 38 +++++++++++++++++++++++ golang-fuzz/install_golang-fuzz.sh | 3 ++ golang-fuzz/run_golang-fuzz.sh | 7 +++++ 7 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 golang-fuzz/auth_fuzz.go create mode 100644 golang-fuzz/auth_fuzz_golangfuzz_test.go create mode 100755 golang-fuzz/install_golang-fuzz.sh create mode 100755 golang-fuzz/run_golang-fuzz.sh diff --git a/README.md b/README.md index e4094c6..0957a9a 100644 --- a/README.md +++ b/README.md @@ -192,3 +192,16 @@ bash scripts/run.sh 4.3. ./build_for_go-fuzz.sh 4.4. ./run_go-fuzz.sh + +### Последняя попытка (тоже неудачная) + +Утилита обещает поддержку 4 фаззеров, оказалось это просто обёртка для генерации тестов в 4 форматах и запуска фаззеров. +Из заявленных фаззеров удалось запустить только нативный (но я это и так сделал в пункте 1), а также сгенерировать тест для go-fuzz (но запустить не удалось, см. пункт 4 выше), для libfuzzer и afl даже тесты не сгенерировались (как я понял, тоже надо самому установить все нужные бинарники). + +5. Запуск golang-fuzz + +5.1. cd golang-fuzz + +5.2. ./install_golang-fuzz.sh + +5.3. ./run_golang-fuzz.sh diff --git a/go.mod b/go.mod index 2931f6c..11359eb 100644 --- a/go.mod +++ b/go.mod @@ -10,4 +10,7 @@ require ( golang.org/x/term v0.38.0 ) -require golang.org/x/sys v0.39.0 // indirect +require ( + github.com/dvyukov/go-fuzz v0.0.0-20240924070022-e577bee5275c // indirect + golang.org/x/sys v0.39.0 // indirect +) diff --git a/go.sum b/go.sum index daffda2..7fc4ea4 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,5 @@ +github.com/dvyukov/go-fuzz v0.0.0-20240924070022-e577bee5275c h1:oLpHpHwNuAPvw3bBviEZNrJbigNNi5dRadfZnagGgZI= +github.com/dvyukov/go-fuzz v0.0.0-20240924070022-e577bee5275c/go.mod h1:11Gm+ccJnvAhCNLlf5+cS9KjtbaD5I5zaZpFMsTHWTw= github.com/mattn/go-sqlite3 v1.14.33 h1:A5blZ5ulQo2AtayQ9/limgHEkFreKj1Dv226a1K73s0= github.com/mattn/go-sqlite3 v1.14.33/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= diff --git a/golang-fuzz/auth_fuzz.go b/golang-fuzz/auth_fuzz.go new file mode 100644 index 0000000..f284750 --- /dev/null +++ b/golang-fuzz/auth_fuzz.go @@ -0,0 +1,39 @@ +package my_golang_fuzz + +import ( + "bytes" + + "linux-auth/internal/auth" + "linux-auth/internal/db" +) + +func Fuzz(data []byte) int { + if err := db.Init("test_data.db"); err != nil { + return -1 + } + defer db.Close() + + 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 { + if (username == "admin" && password == "admin123") || + (username == "user1" && password == "password1") { + return 1 + } + return -1 + } + + return 1 +} diff --git a/golang-fuzz/auth_fuzz_golangfuzz_test.go b/golang-fuzz/auth_fuzz_golangfuzz_test.go new file mode 100644 index 0000000..c91429a --- /dev/null +++ b/golang-fuzz/auth_fuzz_golangfuzz_test.go @@ -0,0 +1,38 @@ +// Code generated by golang-fuzz; DO NOT EDIT. + +package my_golang_fuzz + +import ( + "os" + "path/filepath" + "testing" +) + +func Fuzz_(f *testing.F) { + loadTestCases(f) + f.Fuzz(func(_ *testing.T, input []byte) { Fuzz(input) }) +} + +func loadTestCases(f *testing.F) { + dir, err := os.ReadDir(`corpus`) + if err != nil { + f.Logf(`Running without adding corpus: %s`, err) + return + } + + if len(dir) == 0 { + f.Log(`Running without adding corpus: directory is empty`) + } + + for _, corpus := range dir { + if corpus.IsDir() { + continue + } + + input, err := os.ReadFile(filepath.Join(`corpus`, corpus.Name())) + if err != nil { + f.Logf(`Could not read corpus input %s: %s`, corpus.Name(), err) + } + f.Add(input) + } +} diff --git a/golang-fuzz/install_golang-fuzz.sh b/golang-fuzz/install_golang-fuzz.sh new file mode 100755 index 0000000..609c4c5 --- /dev/null +++ b/golang-fuzz/install_golang-fuzz.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +go install github.com/ultraware/golang-fuzz@latest diff --git a/golang-fuzz/run_golang-fuzz.sh b/golang-fuzz/run_golang-fuzz.sh new file mode 100755 index 0000000..3f87a05 --- /dev/null +++ b/golang-fuzz/run_golang-fuzz.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +cp ../data/users.db test_data.db + +export PATH=$PATH:$(go env GOPATH)/bin + +golang-fuzz -gofuzz -run