mirror of
https://github.com/projectdiscovery/nuclei.git
synced 2025-12-18 09:05:28 +00:00
move DecodeSID to utils.go making it a generic function exposed by the module
This commit is contained in:
parent
c703fffe80
commit
642c99bcff
@ -17,6 +17,7 @@ func init() {
|
|||||||
// Functions
|
// Functions
|
||||||
"JoinFilters": func(f ...string) string { return lib_ldap.JoinFilters(f...) },
|
"JoinFilters": func(f ...string) string { return lib_ldap.JoinFilters(f...) },
|
||||||
"NegativeFilter": func(f string) string { return lib_ldap.NegativeFilter(f) },
|
"NegativeFilter": func(f string) string { return lib_ldap.NegativeFilter(f) },
|
||||||
|
"DecodeSID": func(s string) string { return lib_ldap.DecodeSID(s) },
|
||||||
|
|
||||||
// Var and consts
|
// Var and consts
|
||||||
"FilterIsPerson": func() string { return lib_ldap.FilterIsPerson },
|
"FilterIsPerson": func() string { return lib_ldap.FilterIsPerson },
|
||||||
|
|||||||
@ -146,37 +146,6 @@ func (c *LdapClient) GetADUserKerberoastable() ([]ADObject, error) {
|
|||||||
return c.FindADObjects(JoinFilters(FilterIsPerson, FilterAccountEnabled, FilterHasServicePrincipalName))
|
return c.FindADObjects(JoinFilters(FilterIsPerson, FilterAccountEnabled, FilterHasServicePrincipalName))
|
||||||
}
|
}
|
||||||
|
|
||||||
func decodeSID(b []byte) string {
|
|
||||||
revisionLvl := int(b[0])
|
|
||||||
subAuthorityCount := int(b[1]) & 0xFF
|
|
||||||
|
|
||||||
var authority int
|
|
||||||
for i := 2; i <= 7; i++ {
|
|
||||||
authority = authority | int(b[i])<<(8*(5-(i-2)))
|
|
||||||
}
|
|
||||||
|
|
||||||
var size = 4
|
|
||||||
var offset = 8
|
|
||||||
var subAuthorities []int
|
|
||||||
for i := 0; i < subAuthorityCount; i++ {
|
|
||||||
var subAuthority int
|
|
||||||
for k := 0; k < size; k++ {
|
|
||||||
subAuthority = subAuthority | (int(b[offset+k])&0xFF)<<(8*k)
|
|
||||||
}
|
|
||||||
subAuthorities = append(subAuthorities, subAuthority)
|
|
||||||
offset += size
|
|
||||||
}
|
|
||||||
|
|
||||||
var builder strings.Builder
|
|
||||||
builder.WriteString("S-")
|
|
||||||
builder.WriteString(fmt.Sprintf("%d-", revisionLvl))
|
|
||||||
builder.WriteString(fmt.Sprintf("%d", authority))
|
|
||||||
for _, v := range subAuthorities {
|
|
||||||
builder.WriteString(fmt.Sprintf("-%d", v))
|
|
||||||
}
|
|
||||||
return builder.String()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *LdapClient) GetADDomainSID() (string, error) {
|
func (c *LdapClient) GetADDomainSID() (string, error) {
|
||||||
r, err := c.Search(FilterServerTrustAccount, "objectSid")
|
r, err := c.Search(FilterServerTrustAccount, "objectSid")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -190,5 +159,5 @@ func (c *LdapClient) GetADDomainSID() (string, error) {
|
|||||||
if len(r[0]["objectSid"]) < 1 {
|
if len(r[0]["objectSid"]) < 1 {
|
||||||
return "", fmt.Errorf("could not grab DomainSID")
|
return "", fmt.Errorf("could not grab DomainSID")
|
||||||
}
|
}
|
||||||
return decodeSID([]byte(r[0]["objectSid"][0])), nil
|
return DecodeSID(r[0]["objectSid"][0]), nil
|
||||||
}
|
}
|
||||||
|
|||||||
38
pkg/js/libs/ldap/utils.go
Normal file
38
pkg/js/libs/ldap/utils.go
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
package ldap
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func DecodeSID(s string) string {
|
||||||
|
b := []byte(s)
|
||||||
|
revisionLvl := int(b[0])
|
||||||
|
subAuthorityCount := int(b[1]) & 0xFF
|
||||||
|
|
||||||
|
var authority int
|
||||||
|
for i := 2; i <= 7; i++ {
|
||||||
|
authority = authority | int(b[i])<<(8*(5-(i-2)))
|
||||||
|
}
|
||||||
|
|
||||||
|
var size = 4
|
||||||
|
var offset = 8
|
||||||
|
var subAuthorities []int
|
||||||
|
for i := 0; i < subAuthorityCount; i++ {
|
||||||
|
var subAuthority int
|
||||||
|
for k := 0; k < size; k++ {
|
||||||
|
subAuthority = subAuthority | (int(b[offset+k])&0xFF)<<(8*k)
|
||||||
|
}
|
||||||
|
subAuthorities = append(subAuthorities, subAuthority)
|
||||||
|
offset += size
|
||||||
|
}
|
||||||
|
|
||||||
|
var builder strings.Builder
|
||||||
|
builder.WriteString("S-")
|
||||||
|
builder.WriteString(fmt.Sprintf("%d-", revisionLvl))
|
||||||
|
builder.WriteString(fmt.Sprintf("%d", authority))
|
||||||
|
for _, v := range subAuthorities {
|
||||||
|
builder.WriteString(fmt.Sprintf("-%d", v))
|
||||||
|
}
|
||||||
|
return builder.String()
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user