Add RBAC Admins
Abuse
#!/usr/bin/env python3
import argparse
import struct
import re
import sys
def hex_to_sid(hex_str: str) -> str:
hex_str = hex_str.replace("0x", "").replace(" ", "").strip()
data = bytes.fromhex(hex_str)
revision = data[0]
sub_authority_count = data[1]
identifier_authority = int.from_bytes(data[2:8], 'big')
sub_authorities = [struct.unpack("<I", data[8 + i*4:12 + i*4])[0] for i in range(sub_authority_count)]
sid_str = f"S-{revision}-{identifier_authority}-" + "-".join(str(x) for x in sub_authorities)
return sid_str
def sid_to_hex(sid_str: str) -> str:
parts = sid_str.strip().split('-')
if len(parts) < 4 or parts[0].upper() != 'S':
raise ValueError("SID 형식이 올바르지 않습니다. (예: S-1-5-21-...)")
revision = int(parts[1])
identifier_authority = int(parts[2])
sub_authorities = list(map(int, parts[3:]))
data = bytearray()
data.append(revision)
data.append(len(sub_authorities))
data += identifier_authority.to_bytes(6, 'big')
for sub in sub_authorities:
data += struct.pack("<I", sub)
return "0x" + data.hex()
def main():
parser = argparse.ArgumentParser()
parser.add_argument("-i", required=True, help="Input SID or HEX")
args = parser.parse_args()
user_input = args.input.strip()
try:
if re.match(r'^(0x)?[0-9a-fA-F\s]+$', user_input):
print(f"[+] 입력값은 HEX로 감지됨")
print(f"SID → {hex_to_sid(user_input)}")
elif user_input.upper().startswith("S-"):
print(f"[+] 입력값은 SID로 감지됨")
print(f"HEX → {sid_to_hex(user_input)}")
else:
print("[-] 입력 형식이 올바르지 않습니다. SID 또는 HEX 값을 입력하세요.")
sys.exit(1)
except Exception as e:
print(f"[-] 오류 발생: {e}")
sys.exit(1)
if __name__ == "__main__":
main()Demo

References
Last updated