forked from nihonium/linux-auth
final bad try
This commit is contained in:
parent
b540edbe1e
commit
fa5e0287e5
7 changed files with 106 additions and 1 deletions
13
README.md
13
README.md
|
|
@ -192,3 +192,16 @@ bash scripts/run.sh
|
||||||
4.3. ./build_for_go-fuzz.sh
|
4.3. ./build_for_go-fuzz.sh
|
||||||
|
|
||||||
4.4. ./run_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
|
||||||
|
|
|
||||||
5
go.mod
5
go.mod
|
|
@ -10,4 +10,7 @@ require (
|
||||||
golang.org/x/term v0.38.0
|
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
|
||||||
|
)
|
||||||
|
|
|
||||||
2
go.sum
2
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 h1:A5blZ5ulQo2AtayQ9/limgHEkFreKj1Dv226a1K73s0=
|
||||||
github.com/mattn/go-sqlite3 v1.14.33/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
|
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=
|
github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
|
||||||
|
|
|
||||||
39
golang-fuzz/auth_fuzz.go
Normal file
39
golang-fuzz/auth_fuzz.go
Normal file
|
|
@ -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
|
||||||
|
}
|
||||||
38
golang-fuzz/auth_fuzz_golangfuzz_test.go
Normal file
38
golang-fuzz/auth_fuzz_golangfuzz_test.go
Normal file
|
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
3
golang-fuzz/install_golang-fuzz.sh
Executable file
3
golang-fuzz/install_golang-fuzz.sh
Executable file
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
go install github.com/ultraware/golang-fuzz@latest
|
||||||
7
golang-fuzz/run_golang-fuzz.sh
Executable file
7
golang-fuzz/run_golang-fuzz.sh
Executable file
|
|
@ -0,0 +1,7 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
cp ../data/users.db test_data.db
|
||||||
|
|
||||||
|
export PATH=$PATH:$(go env GOPATH)/bin
|
||||||
|
|
||||||
|
golang-fuzz -gofuzz -run
|
||||||
Loading…
Add table
Add a link
Reference in a new issue