12/** The user account is disabled. */3export const FilterAccountDisabled = "(userAccountControl:1.2.840.113556.1.4.803:=2)";45/** The user account is enabled. */6export const FilterAccountEnabled = "(!(userAccountControl:1.2.840.113556.1.4.803:=2))";78/** The user can send an encrypted password. */9export const FilterCanSendEncryptedPassword = "(userAccountControl:1.2.840.113556.1.4.803:=128)";1011/** Represents the password, which should never expire on the account. */12export const FilterDontExpirePassword = "(userAccountControl:1.2.840.113556.1.4.803:=65536)";1314/** This account doesn't require Kerberos pre-authentication for logging on. */15export const FilterDontRequirePreauth = "(userAccountControl:1.2.840.113556.1.4.803:=4194304)";1617/** The object has a service principal name. */18export const FilterHasServicePrincipalName = "(servicePrincipalName=*)";1920/** The home folder is required. */21export const FilterHomedirRequired = "(userAccountControl:1.2.840.113556.1.4.803:=8)";2223/** It's a permit to trust an account for a system domain that trusts other domains. */24export const FilterInterdomainTrustAccount = "(userAccountControl:1.2.840.113556.1.4.803:=2048)";2526/** The object is an admin. */27export const FilterIsAdmin = "(adminCount=1)";2829/** The object is a computer. */30export const FilterIsComputer = "(objectCategory=computer)";3132/** It's an account for users whose primary account is in another domain. */33export const FilterIsDuplicateAccount = "(userAccountControl:1.2.840.113556.1.4.803:=256)";3435/** The object is a group. */36export const FilterIsGroup = "(objectCategory=group)";3738/** It's a default account type that represents a typical user. */39export const FilterIsNormalAccount = "(userAccountControl:1.2.840.113556.1.4.803:=512)";4041/** The object is a person. */42export const FilterIsPerson = "(objectCategory=person)";4344/** The user is locked out. */45export const FilterLockout = "(userAccountControl:1.2.840.113556.1.4.803:=16)";4647/** The logon script will be run. */48export const FilterLogonScript = "(userAccountControl:1.2.840.113556.1.4.803:=1)";4950/** It's an MNS logon account. */51export const FilterMnsLogonAccount = "(userAccountControl:1.2.840.113556.1.4.803:=131072)";5253/** When this flag is set, the security context of the user isn't delegated to a service even if the service account is set as trusted for Kerberos delegation. */54export const FilterNotDelegated = "(userAccountControl:1.2.840.113556.1.4.803:=1048576)";5556/** The account is a read-only domain controller (RODC). */57export const FilterPartialSecretsAccount = "(userAccountControl:1.2.840.113556.1.4.803:=67108864)";5859/** The user can't change the password. */60export const FilterPasswordCantChange = "(userAccountControl:1.2.840.113556.1.4.803:=64)";6162/** The user's password has expired. */63export const FilterPasswordExpired = "(userAccountControl:1.2.840.113556.1.4.803:=8388608)";6465/** No password is required. */66export const FilterPasswordNotRequired = "(userAccountControl:1.2.840.113556.1.4.803:=32)";6768/** It's a computer account for a domain controller that is a member of this domain. */69export const FilterServerTrustAccount = "(userAccountControl:1.2.840.113556.1.4.803:=8192)";7071/** When this flag is set, it forces the user to log on by using a smart card. */72export const FilterSmartCardRequired = "(userAccountControl:1.2.840.113556.1.4.803:=262144)";7374/** When this flag is set, the service account (the user or computer account) under which a service runs is trusted for Kerberos delegation. */75export const FilterTrustedForDelegation = "(userAccountControl:1.2.840.113556.1.4.803:=524288)";7677/** The account is enabled for delegation. */78export const FilterTrustedToAuthForDelegation = "(userAccountControl:1.2.840.113556.1.4.803:=16777216)";7980/** Restrict this principal to use only Data Encryption Standard (DES) encryption types for keys. */81export const FilterUseDesKeyOnly = "(userAccountControl:1.2.840.113556.1.4.803:=2097152)";8283/** It's a computer account for a computer that is running old Windows builds. */84export const FilterWorkstationTrustAccount = "(userAccountControl:1.2.840.113556.1.4.803:=4096)";8586/**87* DecodeADTimestamp decodes an Active Directory timestamp88* @example89* ```javascript90* const ldap = require('nuclei/ldap');91* const timestamp = ldap.DecodeADTimestamp('132036744000000000');92* log(timestamp);93* ```94*/95export function DecodeADTimestamp(timestamp: string): string {96return "";97}9899100101/**102* DecodeSID decodes a SID string103* @example104* ```javascript105* const ldap = require('nuclei/ldap');106* const sid = ldap.DecodeSID('S-1-5-21-3623811015-3361044348-30300820-1013');107* log(sid);108* ```109*/110export function DecodeSID(s: string): string {111return "";112}113114115116/**117* DecodeZuluTimestamp decodes a Zulu timestamp118* @example119* ```javascript120* const ldap = require('nuclei/ldap');121* const timestamp = ldap.DecodeZuluTimestamp('2021-08-25T10:00:00Z');122* log(timestamp);123* ```124*/125export function DecodeZuluTimestamp(timestamp: string): string {126return "";127}128129130131/**132* JoinFilters joins multiple filters into a single filter133* @example134* ```javascript135* const ldap = require('nuclei/ldap');136* const filter = ldap.JoinFilters(ldap.FilterIsPerson, ldap.FilterAccountEnabled);137* ```138*/139export function JoinFilters(filters: any): string {140return "";141}142143144145/**146* NegativeFilter returns a negative filter for a given filter147* @example148* ```javascript149* const ldap = require('nuclei/ldap');150* const filter = ldap.NegativeFilter(ldap.FilterIsPerson);151* ```152*/153export function NegativeFilter(filter: string): string {154return "";155}156157158159/**160* Client is a client for ldap protocol in nuclei161* @example162* ```javascript163* const ldap = require('nuclei/ldap');164* // here ldap.example.com is the ldap server and acme.com is the realm165* const client = new ldap.Client('ldap://ldap.example.com', 'acme.com');166* ```167* @example168* ```javascript169* const ldap = require('nuclei/ldap');170* const cfg = new ldap.Config();171* cfg.Timeout = 10;172* cfg.ServerName = 'ldap.internal.acme.com';173* // optional config can be passed as third argument174* const client = new ldap.Client('ldap://ldap.example.com', 'acme.com', cfg);175* ```176*/177export class Client {178179180181public Host?: string;182183184185public Port?: number;186187188189public Realm?: string;190191192193public BaseDN?: string;194195196// Constructor of Client197constructor(public ldapUrl: string, public realm: string, public config?: Config ) {}198199200/**201* FindADObjects finds AD objects based on a filter202* and returns them as a list of ADObject203* @example204* ```javascript205* const ldap = require('nuclei/ldap');206* const client = new ldap.Client('ldap://ldap.example.com', 'acme.com');207* const users = client.FindADObjects(ldap.FilterIsPerson);208* log(to_json(users));209* ```210*/211public FindADObjects(filter: string): SearchResult | null {212return null;213}214215216/**217* GetADUsers returns all AD users218* using FilterIsPerson filter query219* @example220* ```javascript221* const ldap = require('nuclei/ldap');222* const client = new ldap.Client('ldap://ldap.example.com', 'acme.com');223* const users = client.GetADUsers();224* log(to_json(users));225* ```226*/227public GetADUsers(): SearchResult | null {228return null;229}230231232/**233* GetADActiveUsers returns all AD users234* using FilterIsPerson and FilterAccountEnabled filter query235* @example236* ```javascript237* const ldap = require('nuclei/ldap');238* const client = new ldap.Client('ldap://ldap.example.com', 'acme.com');239* const users = client.GetADActiveUsers();240* log(to_json(users));241* ```242*/243public GetADActiveUsers(): SearchResult | null {244return null;245}246247248/**249* GetAdUserWithNeverExpiringPasswords returns all AD users250* using FilterIsPerson and FilterDontExpirePassword filter query251* @example252* ```javascript253* const ldap = require('nuclei/ldap');254* const client = new ldap.Client('ldap://ldap.example.com', 'acme.com');255* const users = client.GetADUserWithNeverExpiringPasswords();256* log(to_json(users));257* ```258*/259public GetADUserWithNeverExpiringPasswords(): SearchResult | null {260return null;261}262263264/**265* GetADUserTrustedForDelegation returns all AD users that are trusted for delegation266* using FilterIsPerson and FilterTrustedForDelegation filter query267* @example268* ```javascript269* const ldap = require('nuclei/ldap');270* const client = new ldap.Client('ldap://ldap.example.com', 'acme.com');271* const users = client.GetADUserTrustedForDelegation();272* log(to_json(users));273* ```274*/275public GetADUserTrustedForDelegation(): SearchResult | null {276return null;277}278279280/**281* GetADUserWithPasswordNotRequired returns all AD users that do not require a password282* using FilterIsPerson and FilterPasswordNotRequired filter query283* @example284* ```javascript285* const ldap = require('nuclei/ldap');286* const client = new ldap.Client('ldap://ldap.example.com', 'acme.com');287* const users = client.GetADUserWithPasswordNotRequired();288* log(to_json(users));289* ```290*/291public GetADUserWithPasswordNotRequired(): SearchResult | null {292return null;293}294295296/**297* GetADGroups returns all AD groups298* using FilterIsGroup filter query299* @example300* ```javascript301* const ldap = require('nuclei/ldap');302* const client = new ldap.Client('ldap://ldap.example.com', 'acme.com');303* const groups = client.GetADGroups();304* log(to_json(groups));305* ```306*/307public GetADGroups(): SearchResult | null {308return null;309}310311312/**313* GetADDCList returns all AD domain controllers314* using FilterIsComputer, FilterAccountEnabled and FilterServerTrustAccount filter query315* @example316* ```javascript317* const ldap = require('nuclei/ldap');318* const client = new ldap.Client('ldap://ldap.example.com', 'acme.com');319* const dcs = client.GetADDCList();320* log(to_json(dcs));321* ```322*/323public GetADDCList(): SearchResult | null {324return null;325}326327328/**329* GetADAdmins returns all AD admins330* using FilterIsPerson, FilterAccountEnabled and FilterIsAdmin filter query331* @example332* ```javascript333* const ldap = require('nuclei/ldap');334* const client = new ldap.Client('ldap://ldap.example.com', 'acme.com');335* const admins = client.GetADAdmins();336* log(to_json(admins));337* ```338*/339public GetADAdmins(): SearchResult | null {340return null;341}342343344/**345* GetADUserKerberoastable returns all AD users that are kerberoastable346* using FilterIsPerson, FilterAccountEnabled and FilterHasServicePrincipalName filter query347* @example348* ```javascript349* const ldap = require('nuclei/ldap');350* const client = new ldap.Client('ldap://ldap.example.com', 'acme.com');351* const kerberoastable = client.GetADUserKerberoastable();352* log(to_json(kerberoastable));353* ```354*/355public GetADUserKerberoastable(): SearchResult | null {356return null;357}358359360/**361* GetADUserAsRepRoastable returns all AD users that are AsRepRoastable362* using FilterIsPerson, and FilterDontRequirePreauth filter query363* @example364* ```javascript365* const ldap = require('nuclei/ldap');366* const client = new ldap.Client('ldap://ldap.example.com', 'acme.com');367* const AsRepRoastable = client.GetADUserAsRepRoastable();368* log(to_json(AsRepRoastable));369* ```370*/371public GetADUserAsRepRoastable(): SearchResult | null {372return null;373}374375376/**377* GetADDomainSID returns the SID of the AD domain378* @example379* ```javascript380* const ldap = require('nuclei/ldap');381* const client = new ldap.Client('ldap://ldap.example.com', 'acme.com');382* const domainSID = client.GetADDomainSID();383* log(domainSID);384* ```385*/386public GetADDomainSID(): string {387return "";388}389390391/**392* Authenticate authenticates with the ldap server using the given username and password393* performs NTLMBind first and then Bind/UnauthenticatedBind if NTLMBind fails394* @example395* ```javascript396* const ldap = require('nuclei/ldap');397* const client = new ldap.Client('ldap://ldap.example.com', 'acme.com');398* client.Authenticate('user', 'password');399* ```400*/401public Authenticate(username: string): void {402return;403}404405406/**407* AuthenticateWithNTLMHash authenticates with the ldap server using the given username and NTLM hash408* @example409* ```javascript410* const ldap = require('nuclei/ldap');411* const client = new ldap.Client('ldap://ldap.example.com', 'acme.com');412* client.AuthenticateWithNTLMHash('pdtm', 'hash');413* ```414*/415public AuthenticateWithNTLMHash(username: string): void {416return;417}418419420/**421* Search accepts whatever filter and returns a list of maps having provided attributes422* as keys and associated values mirroring the ones returned by ldap423* @example424* ```javascript425* const ldap = require('nuclei/ldap');426* const client = new ldap.Client('ldap://ldap.example.com', 'acme.com');427* const results = client.Search('(objectClass=*)', 'cn', 'mail');428* ```429*/430public Search(filter: string, attributes: any): SearchResult | null {431return null;432}433434435/**436* AdvancedSearch accepts all values of search request type and return Ldap Entry437* its up to user to handle the response438* @example439* ```javascript440* const ldap = require('nuclei/ldap');441* const client = new ldap.Client('ldap://ldap.example.com', 'acme.com');442* const results = client.AdvancedSearch(ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false, '(objectClass=*)', ['cn', 'mail'], []);443* ```444*/445public AdvancedSearch(Scope: number, TypesOnly: boolean, Filter: string, Attributes: string[], Controls: any): SearchResult | null {446return null;447}448449450/**451* CollectLdapMetadata collects metadata from ldap server.452* @example453* ```javascript454* const ldap = require('nuclei/ldap');455* const client = new ldap.Client('ldap://ldap.example.com', 'acme.com');456* const metadata = client.CollectMetadata();457* log(to_json(metadata));458* ```459*/460public CollectMetadata(): Metadata | null {461return null;462}463464465/**466* close the ldap connection467* @example468* ```javascript469* const ldap = require('nuclei/ldap');470* const client = new ldap.Client('ldap://ldap.example.com', 'acme.com');471* client.Close();472* ```473*/474public Close(): void {475return;476}477478479}480481482483/**484* Config is extra configuration for the ldap client485* @example486* ```javascript487* const ldap = require('nuclei/ldap');488* const cfg = new ldap.Config();489* cfg.Timeout = 10;490* cfg.ServerName = 'ldap.internal.acme.com';491* cfg.Upgrade = true; // upgrade to tls492* ```493*/494export interface Config {495496/**497* Timeout is the timeout for the ldap client in seconds498*/499500Timeout?: number,501502ServerName?: string,503504Upgrade?: boolean,505}506507508509/**510* LdapAttributes represents all LDAP attributes of a particular511* ldap entry512*/513export interface LdapAttributes {514515/**516* CurrentTime contains current time517*/518519CurrentTime?: string[],520521/**522* SubschemaSubentry contains subschema subentry523*/524525SubschemaSubentry?: string[],526527/**528* DsServiceName contains ds service name529*/530531DsServiceName?: string[],532533/**534* NamingContexts contains naming contexts535*/536537NamingContexts?: string[],538539/**540* DefaultNamingContext contains default naming context541*/542543DefaultNamingContext?: string[],544545/**546* SchemaNamingContext contains schema naming context547*/548549SchemaNamingContext?: string[],550551/**552* ConfigurationNamingContext contains configuration naming context553*/554555ConfigurationNamingContext?: string[],556557/**558* RootDomainNamingContext contains root domain naming context559*/560561RootDomainNamingContext?: string[],562563/**564* SupportedLDAPVersion contains supported LDAP version565*/566567SupportedLDAPVersion?: string[],568569/**570* HighestCommittedUSN contains highest committed USN571*/572573HighestCommittedUSN?: string[],574575/**576* SupportedSASLMechanisms contains supported SASL mechanisms577*/578579SupportedSASLMechanisms?: string[],580581/**582* DnsHostName contains DNS host name583*/584585DnsHostName?: string[],586587/**588* LdapServiceName contains LDAP service name589*/590591LdapServiceName?: string[],592593/**594* ServerName contains server name595*/596597ServerName?: string[],598599/**600* IsSynchronized contains is synchronized601*/602603IsSynchronized?: string[],604605/**606* IsGlobalCatalogReady contains is global catalog ready607*/608609IsGlobalCatalogReady?: string[],610611/**612* DomainFunctionality contains domain functionality613*/614615DomainFunctionality?: string[],616617/**618* ForestFunctionality contains forest functionality619*/620621ForestFunctionality?: string[],622623/**624* DomainControllerFunctionality contains domain controller functionality625*/626627DomainControllerFunctionality?: string[],628629/**630* DistinguishedName contains the distinguished name631*/632633DistinguishedName?: string[],634635/**636* SAMAccountName contains the SAM account name637*/638639SAMAccountName?: string[],640641/**642* PWDLastSet contains the password last set time643*/644645PWDLastSet?: string[],646647/**648* LastLogon contains the last logon time649*/650651LastLogon?: string[],652653/**654* MemberOf contains the groups the entry is a member of655*/656657MemberOf?: string[],658659/**660* ServicePrincipalName contains the service principal names661*/662663ServicePrincipalName?: string[],664665/**666* Extra contains other extra fields which might be present667*/668669Extra?: Record<string, any>,670}671672673674/**675* LdapEntry represents a single LDAP entry676*/677export interface LdapEntry {678679/**680* DN contains distinguished name681*/682683DN?: string,684685/**686* Attributes contains list of attributes687*/688689Attributes?: LdapAttributes,690}691692693694/**695* Metadata is the metadata for ldap server.696* this is returned by CollectMetadata method697*/698export interface Metadata {699700BaseDN?: string,701702Domain?: string,703704DefaultNamingContext?: string,705706DomainFunctionality?: string,707708ForestFunctionality?: string,709710DomainControllerFunctionality?: string,711712DnsHostName?: string,713}714715716717/**718* SearchResult contains search result of any / all ldap search request719* @example720* ```javascript721* const ldap = require('nuclei/ldap');722* const client = new ldap.Client('ldap://ldap.example.com', 'acme.com');723* const results = client.Search('(objectinterface=*)', 'cn', 'mail');724* ```725*/726export interface SearchResult {727728/**729* Referrals contains list of referrals730*/731732Referrals?: string[],733734/**735* Controls contains list of controls736*/737738Controls?: string[],739740/**741* Entries contains list of entries742*/743744Entries?: LdapEntry[],745}746747748749