Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
projectdiscovery
GitHub Repository: projectdiscovery/nuclei
Path: blob/dev/pkg/protocols/http/request_generator_test.go
2070 views
1
package http
2
3
import (
4
"testing"
5
6
"github.com/stretchr/testify/require"
7
8
"github.com/projectdiscovery/nuclei/v3/pkg/catalog/disk"
9
"github.com/projectdiscovery/nuclei/v3/pkg/protocols/common/generators"
10
"github.com/projectdiscovery/nuclei/v3/pkg/types"
11
)
12
13
func TestRequestGeneratorPaths(t *testing.T) {
14
req := &Request{
15
Path: []string{"{{BaseURL}}/test", "{{BaseURL}}/test.php"},
16
}
17
generator := req.newGenerator(false)
18
var payloads []string
19
for {
20
raw, _, ok := generator.nextValue()
21
if !ok {
22
break
23
}
24
payloads = append(payloads, raw)
25
}
26
require.Equal(t, req.Path, payloads, "Could not get correct paths")
27
}
28
29
func TestRequestGeneratorClusterBombSingle(t *testing.T) {
30
var err error
31
32
req := &Request{
33
Payloads: map[string]interface{}{"username": []string{"admin", "tomcat", "manager"}, "password": []string{"password", "test", "secret"}},
34
AttackType: generators.AttackTypeHolder{Value: generators.ClusterBombAttack},
35
Raw: []string{`GET /{{username}}:{{password}} HTTP/1.1`},
36
}
37
catalogInstance := disk.NewCatalog("")
38
req.generator, err = generators.New(req.Payloads, req.AttackType.Value, "", catalogInstance, "", types.DefaultOptions())
39
require.Nil(t, err, "could not create generator")
40
41
generator := req.newGenerator(false)
42
var payloads []map[string]interface{}
43
for {
44
_, data, ok := generator.nextValue()
45
if !ok {
46
break
47
}
48
payloads = append(payloads, data)
49
}
50
require.Equal(t, 9, len(payloads), "Could not get correct number of payloads")
51
}
52
53
func TestRequestGeneratorClusterBombMultipleRaw(t *testing.T) {
54
var err error
55
56
req := &Request{
57
Payloads: map[string]interface{}{"username": []string{"admin", "tomcat", "manager"}, "password": []string{"password", "test", "secret"}},
58
AttackType: generators.AttackTypeHolder{Value: generators.ClusterBombAttack},
59
Raw: []string{`GET /{{username}}:{{password}} HTTP/1.1`, `GET /{{username}}@{{password}} HTTP/1.1`},
60
}
61
catalogInstance := disk.NewCatalog("")
62
req.generator, err = generators.New(req.Payloads, req.AttackType.Value, "", catalogInstance, "", types.DefaultOptions())
63
require.Nil(t, err, "could not create generator")
64
65
generator := req.newGenerator(false)
66
var payloads []map[string]interface{}
67
for {
68
_, data, ok := generator.nextValue()
69
if !ok {
70
break
71
}
72
payloads = append(payloads, data)
73
}
74
require.Equal(t, 18, len(payloads), "Could not get correct number of payloads")
75
}
76
77