-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmain.go
More file actions
172 lines (148 loc) · 3.87 KB
/
Copy pathmain.go
File metadata and controls
172 lines (148 loc) · 3.87 KB
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
package main
import (
"fmt"
"os"
"github.com/akamensky/argparse"
"github.com/putabones/RATT/cmdline"
"github.com/putabones/RATT/structs"
)
var ascii string = `
__________ ___________________________
\______ \ / _ \__ ___/\__ ___/
| _/ / /_\ \| | | |
| | \/ | \ | | |
|____|_ /\____|__ /____| |____|
\/ \/
`
// version string
var version string = "2.0"
// parses user inputs
func parserFunc(t *structs.Target) {
var parse = argparse.NewParser("RATT", "RATT stands for \"Recon All The Things\", it will perform scans against a target that is as intrusive as you want.\n\nRATT can run in 3 different modes\n Replay: Replay results from a previous scan\n CLI: Interactive mode to build and launch scans\n Live: Immediately launches scans")
// ip address for manual scans
var i = parse.String("i", "ip", &argparse.Options{
Required: false,
Validate: nil,
Help: "IP address to scan, leave blank for CLI mode",
Default: nil,
})
// folder where all outputs should be
var f = parse.String("f", "folder", &argparse.Options{
Required: false,
Validate: nil,
Help: "Folder to save outputs",
Default: "/tmp/",
})
// nmap specific string
// i.e. -Pn -sT -sC -sV
var o = parse.String("o", "nmap", &argparse.Options{
Required: false,
Validate: nil,
Help: "Override NMAP Options",
Default: "-sT",
})
// amount of ports to scan, starts at 1
var p = parse.Int("p", "ports", &argparse.Options{
Required: false,
Validate: nil,
Help: "Ports to scan, starts at 1 then up to 65535",
Default: 200,
})
// number of concurrent workers
var w = parse.Int("w", "workers", &argparse.Options{
Required: false,
Validate: nil,
Help: "Amount of concurrent workers to spawn",
Default: 100,
})
// hostname
var n = parse.String("n", "hostname", &argparse.Options{
Required: false,
Validate: nil,
Help: "Hostname for your target",
Default: "NoName",
})
// usernme
var u = parse.String("", "user", &argparse.Options{
Required: false,
Validate: nil,
Help: "Username for follow on auths",
Default: nil,
})
// password
var pass = parse.String("", "pass", &argparse.Options{
Required: false,
Validate: nil,
Help: "Password for follow on auths",
Default: nil,
})
// domain
var d = parse.String("", "domain", &argparse.Options{
Required: false,
Validate: nil,
Help: "Domain for Windows auths",
Default: nil,
})
// version
var v = parse.Flag("v", "version", &argparse.Options{
Required: false,
Validate: nil,
Help: "Prints the current version",
Default: false,
})
// check inputs
err := parse.Parse(os.Args)
if err != nil {
fmt.Println(parse.Usage(nil))
// CHANNGE THIS once the port is parsed right
} else if *p > 65535 {
fmt.Println("[-] Ports can't be more than 65535")
os.Exit(31)
} else if *v {
fmt.Println("[i] Version: " + version)
os.Exit(0)
} else {
t.Ip = *i
t.Amt = *p // Ports
t.NmapOptions = *o
t.PortsCap = *w // Workers
t.Hostname = *n
t.Folder = *f
t.Domain = *d
t.Username = *u
t.Password = *pass
}
}
// main
func main() {
// new target
var tgt = new(structs.Target)
// always gotta have ascii art
fmt.Println(ascii)
// parse user input
parserFunc(tgt)
// check if its Live, CLI, or Read Mode
if tgt.Ip == "" {
fmt.Print("[i] CLI Mode\n\n")
cmdline.StartCLI()
} else if tgt.Ip != "" {
fmt.Println("[i] Live Mode")
// ids linux or windows and empty string slice
var user = os.Getuid()
// looks from windows or nix
switch user {
case -1:
fmt.Println("[+] OS: Windows")
case 0:
fmt.Println("[+] OS: Linux, User: root")
default:
fmt.Println("[-] OS: Linux, User: not root, some of the scans may not work...")
}
// launch scan
tgt.Start()
tgt.SmbCheck()
if tgt.NmapOptions != "" {
tgt.Nmap()
}
}
}