-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfuzz.go
75 lines (69 loc) · 1.76 KB
/
fuzz.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package main
import (
"os"
"os/signal"
"fmt"
"time"
"strconv"
"log"
)
type Fuzzer struct {
socket wsClient
payloads Payloads
responses chan WsMessage
sent chan WsMessage
}
func createFuzzer(url, inputPath string) (socketFuzzer Fuzzer){
var payloads = readPayloadsFromFile(inputPath)
var client = InitClient(url)
socketFuzzer.socket = client
socketFuzzer.payloads = payloads
socketFuzzer.responses = make(chan WsMessage)
socketFuzzer.sent = make(chan WsMessage)
return socketFuzzer
}
func (fuzzer Fuzzer) fuzz() {
interrupt := make(chan os.Signal, 1)
signal.Notify(interrupt, os.Interrupt)
for i := 0; i < len(fuzzer.payloads.Payloads); i++ {
select {
case <-fuzzer.socket.exitFlag:
return
case <-interrupt:
log.Println("interrupt")
fuzzer.socket.gracefullExit()
select {
case <-fuzzer.socket.exitFlag:
case <-time.After(time.Second):
}
return
default:
fuzzer.handlePayload(fuzzer.payloads.Payloads[i])
}
}
}
func (fuzzer Fuzzer) handlePayload(payload Payload) {
fmt.Println("handeling payload action : ", payload.Action);
switch action := payload.Action; action {
case "send":
fuzzer.socket.send(payload.Body)
fuzzer.sent <- WsMessage{payload.Body, time.Now().Format("20060102150405")}
fmt.Println("sent ", payload.Body);
case "wait":
ms, err := strconv.Atoi(payload.Body)
if err != nil {
log.Println("delay:", err)
return
}
fmt.Println("wait for ", payload.Body);
time.Sleep(time.Duration(ms) * time.Second)
}
}
func Run(attackUrl, inputPath string) {
fuzzer := createFuzzer(attackUrl, inputPath)
go fuzzer.socket.startListener(fuzzer.responses)
defer fuzzer.socket.close()
fmt.Println("created client, started listening, begining fuzz on ", attackUrl);
fuzzer.fuzz()
fmt.Println(<-fuzzer.responses)
}