nuclei/pkg/js/libs/ldap/adenum.go

92 lines
2.5 KiB
Go
Raw Normal View History

package ldap
import (
"fmt"
"github.com/go-ldap/ldap/v3"
)
type ADObject struct {
DistinguishedName string
SAMAccountName string
PWDLastSet string
LastLogon string
MemberOf []string
ServicePrincipalName []string
}
func (c *LdapClient) FindADObjects(filter string) ([]ADObject, error) {
sr := ldap.NewSearchRequest(
c.BaseDN, ldap.ScopeWholeSubtree,
ldap.NeverDerefAliases, 0, 0, false,
filter,
[]string{
"distinguishedName",
"sAMAccountName",
"pwdLastSet",
"lastLogon",
"memberOf",
"servicePrincipalName",
},
nil,
)
res, err := c.Conn.Search(sr)
if err != nil {
return nil, err
}
if len(res.Entries) == 0 {
return nil, fmt.Errorf("no object returned from query")
}
var objects []ADObject
for _, obj := range res.Entries {
objects = append(objects, ADObject{
DistinguishedName: obj.GetAttributeValue("distinguishedName"),
SAMAccountName: obj.GetAttributeValue("sAMAccountName"),
PWDLastSet: obj.GetAttributeValue("pwdLastSet"),
LastLogon: obj.GetAttributeValue("lastLogon"),
MemberOf: obj.GetAttributeValues("memberOf"),
ServicePrincipalName: obj.GetAttributeValues("servicePrincipalName"),
})
}
return objects, nil
}
func (c *LdapClient) GetADUsers() ([]ADObject, error) {
return c.FindADObjects(FilterIsPerson)
}
func (c *LdapClient) GetADActiveUsers() ([]ADObject, error) {
return c.FindADObjects(JoinFilters(FilterIsPerson, FilterAccountEnabled))
}
func (c *LdapClient) GetADUserWithNeverExpiringPasswords() ([]ADObject, error) {
return c.FindADObjects(JoinFilters(FilterIsPerson, FilterDontExpirePassword))
}
func (c *LdapClient) GetADUserTrustedForDelegation() ([]ADObject, error) {
return c.FindADObjects(JoinFilters(FilterIsPerson, FilterTrustedForDelegation))
}
func (c *LdapClient) GetADUserWithPasswordNotRequired() ([]ADObject, error) {
return c.FindADObjects(JoinFilters(FilterIsPerson, FilterPasswordNotRequired))
}
func (c *LdapClient) GetADGroups() ([]ADObject, error) {
return c.FindADObjects(FilterIsGroup)
}
func (c *LdapClient) GetADDCList() ([]ADObject, error) {
return c.FindADObjects(JoinFilters(FilterIsComputer, FilterAccountEnabled, FilterServerTrustAccount))
}
func (c *LdapClient) GetADAdmins() ([]ADObject, error) {
return c.FindADObjects(JoinFilters(FilterIsPerson, FilterAccountEnabled, FilterIsAdmin))
}
func (c *LdapClient) GetADUserKerberoastable() ([]ADObject, error) {
return c.FindADObjects(JoinFilters(FilterIsPerson, FilterAccountEnabled, FilterHasServicePrincipalName))
}