-
Notifications
You must be signed in to change notification settings - Fork 0
/
user_enumeration.go
146 lines (116 loc) · 2.72 KB
/
user_enumeration.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
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
package hellsgopher
import (
"bufio"
"os/user"
"strings"
)
// return a user.User for the current user
func GetCurrentUser() (*user.User, error) {
return user.Current()
}
// get the current username
func GetCurrentUsername() (string, error) {
u, err := GetCurrentUser()
if err != nil {
return "", err
}
return u.Name, nil
}
// get the current uid
func GetCurrentUid() (string, error) {
u, err := GetCurrentUser()
if err != nil {
return "", err
}
return u.Uid, nil
}
// get the main gid for the current user
func GetCurrentGid() (string, error) {
u, err := GetCurrentUser()
if err != nil {
return "", err
}
return u.Gid, nil
}
// get all gids for the current user
func GetCurrentGids() ([]string, error) {
u, err := GetCurrentUser()
if err != nil {
return nil, err
}
return u.GroupIds()
}
// return a uid from a given username
func GetUidFromName(name string) (string, error) {
u, err := user.Lookup(name)
if err != nil {
return "", err
}
return u.Uid, nil
}
// return a username from a given uid
func GetNameFromUid(uid string) (string, error) {
u, err := user.LookupId(uid)
if err != nil {
return "", err
}
return u.Name, nil
}
// return a user.User from username
func GetUserFromName(name string) (*user.User, error) {
u, err := user.Lookup(name)
return u, err
}
// return a user.User from uid
func GetUserFromUid(uid string) (*user.User, error) {
u, err := user.LookupId(uid)
return u, err
}
// return a slice of all users on the machine
func GetAllUsers() ([]*user.User, error) {
out, err := PsReturn("Get-WmiObject -Class Win32_UserAccount")
if err != nil {
return nil, err
}
var uNames []string
scanner := bufio.NewScanner(strings.NewReader(out))
for scanner.Scan() {
if strings.HasPrefix(scanner.Text(), "Name") {
uNames = append(uNames, scanner.Text())
}
}
var uNamesRefined []string
for _, uName := range uNames {
uNameSplit := strings.Split(uName, ": ")
uNamesRefined = append(uNamesRefined, uNameSplit[1])
}
var users []*user.User
for _, user := range uNamesRefined {
u, err := GetUserFromName(user)
if err != nil {
return nil, err
}
users = append(users, u)
}
return users, nil
}
// return a slice of all usernames on the machine
func GetAllUsernames() ([]string, error) {
out, err := PsReturn("Get-WmiObject -Class Win32_UserAccount")
if err != nil {
return nil, err
}
var uNames []string
scanner := bufio.NewScanner(strings.NewReader(out))
for scanner.Scan() {
if strings.HasPrefix(scanner.Text(), "Name") {
uNames = append(uNames, scanner.Text())
}
}
var uNamesRefined []string
for _, uName := range uNames {
uNameSplit := strings.Split(uName, ": ")
uNamesRefined = append(uNamesRefined, uNameSplit[1])
}
return uNamesRefined, nil
}