
    5iE                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZmZmZmZmZmZ d dlm Z  d d	l!m"Z" d d
l#m$Z$m%Z% d dl&m'Z' d dl(mZ d dl)m*Z* d dl+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z; d dl<m=Z=m>Z>m?Z? d dl@mAZA  G d de0jB                  ZCd ZDd ZEeFdk    r eE             dS dS )    N)loggerUniCredential)	UniTarget)tabulate)tqdm)ACCESS_ALLOWED_ACEACCESS_ALLOWED_OBJECT_ACEACE_OBJECT_PRESENCEADS_ACCESS_MASKAceFlagsACEType)ACL)GUID)SE_SACLSECURITY_DESCRIPTOR)SID)LDAPConnectionFactory)MSLDAPConsolePlugin)PathCompleter)aiocmd)LeftAligned)MSADGPO_ATTRSMSADOU_ATTRSMSADContainer_ATTRSMSADDomainTrust_ATTRSMSADGroup_ATTRSMSADInfo_ATTRSMSADMachine_ATTRSMSADUser_TSV_ATTRS)EX_RIGHT_CERTIFICATE_ENROLLMENTCertificateNameFlagMSADCertificateTemplate)SDFlagsRequestc                   p   e Zd ZdfdZdfdZd Zd Zd ZdgdZdgd	Z	d
 Z
d Zd Zd Zd Zd Zd ZdhdZdhdZdidZdjdZd ZdkdZdldZdgdZd Zd  Zd! Zd" Zd# Zd$ Zd% Zd& Z dgd'Z!d( Z"dfd)Z#dfd*Z$d+ Z%d, Z&dmd.Z'd/ Z(d0 Z)d1 Z*d2 Z+d3 Z,d4 Z-d5 Z.dfd6Z/d7 Z0d8 Z1d9 Z2d: Z3d; Z4d< Z5d= Z6d> Z7dgd?Z8dgd@Z9dgdAZ:dgdBZ;dfdCZ<dD Z=dndEZ>dgdFZ?dfdGZ@dodHZAdI ZBdJ ZCdK ZDdL ZEdodMZFdN ZGdO ZHdP ZIdQ ZJdR ZK	 didSZLdfdTZMdU ZNdfdVZOdW ZPdXeQdYeQfdZZRdXeQd[eSfd\ZTd]eQd^eQfd_ZUd`eQdaeQfdbZVdceWfddZXde ZYdS )pMSLDAPClientConsoleNc                 p   t           j                            | d           || _        |0t	          |t
                    du rt          j        |          | _        d | _        d | _        d | _	        d | _
        d | _        d| _        d| _        d| _        d| _        d| _        i | _        i | _        d | _        d S )NF)ignore_sigint)r   PromptToolkitCmd__init__conn_url
isinstancer   from_url
connectionadinfoldapinfodomain_name
domain_sidnoisignocb_disable_channel_binding_disable_signing_null_channel_binding"_MSLDAPClientConsole__current_dirs$_MSLDAPClientConsole__loaded_plugins_current_dn)selfurls     R/home/kali/Ninja/venv/lib/python3.11/site-packages/msldap/examples/msldapclient.pyr*   zMSLDAPClientConsole.__init__3   s    ""4u"===$-_C)>??5HH(1#664=$/$+$-$$/$+$)"'$$$$$$$    c                   K   	 | j         |t          d           |0t          |t                    du rt          j        |          | _         t          j        | j                                                    t          j        | j                                                    | j         	                                | _
        d| j
        _        | j        | j
        _        | j        | j
        _        | j        | j
        _        | j
                                         d{V \  }}||t          j        d           | j
        j        | _        | j
        j        | _        d| j
        j        d| _        | j
        j        | _        | j
        j        j        du r!|                     | j                   d{V  nt          d           dS #  t5          j                     Y dS xY w)	zPerforms connection and loginNzNo URL was set, cant do logonFTzBIND OK![]> 9Anonymous connection. Most functionalities will not work!)r+   printr,   r   r-   r   debugget_credential
get_target
get_clientr.   	keepaliver5   r6   r7   connect	domainsidr2   
domainnamer1   _treepromptr:   _conis_anondo_cd	traceback	print_exc)r;   r<   _errs       r=   do_loginzMSLDAPClientConsole.do_loginG   s     
m	
)***	o*S*?@@EII)2377DM	<,,..///	<((**+++]--//4?#4?.2.K4?+&*&;4?#+/+E4?(/))++++++++61c	o
I	<
_.4?o04!_22244;o+4
o"e++
**T%
&
&&&&&&&&&	
EFFF
$
%%s   GG G c                    K   d| _         dS )zDisables signingT)r6   r;   s    r=   do_nosigzMSLDAPClientConsole.do_nosigi   s      $	r>   c                    K   d| _         dS )zDisables channel bindingT)r5   rW   s    r=   do_nocbzMSLDAPClientConsole.do_nocbn   s      "&$	r>   c                    K   d| _         dS )z#Sets incorrect channel binding dataT)r7   rW   s    r=   	do_nullcbzMSLDAPClientConsole.do_nullcbs   s      #$	r>   Tc                 p  K   	 | j         | j                                        | _         |du rn| j         D ]f}t          | j         |         t                    r%| j         |         D ]}t          |d|           Gt          |d| j         |                    gdS #  t          j                     Y dS xY w)z*Prints detailed LDAP connection info (DSA)NT : F)r0   r.   get_server_infor,   listrC   rQ   rR   )r;   showkitems       r=   do_ldapinfozMSLDAPClientConsole.do_ldapinfox   s      
mO3355DM
dll] / /4=#T** /-" $ $$!!!TT"####$ DM!,,-....
$
%%s   BB B5c                 ^  K   	 | j         o| j        j        | _         | j         j                            dd                              dd                              dd          | _        | j         j        | _        |du rt          | j                    dS #  t          j
                     Y dS xY w)	z%Prints detailed Active Driectory infoNDC =,.TF)r/   r.   	_ldapinfodistinguishedNamereplacer1   	objectSidr2   rC   rQ   rR   )r;   ra   s     r=   	do_adinfozMSLDAPClientConsole.do_adinfo   s      

k/+DK{4<<T"EEMMcRTUU]]^abeffDk+DO
dll	$+
$
%%s   BB B,c                    K   	 |                      d           d{V  | j                                        2 3 d{V \  }}||t          |j                   #6 dS #  t          j                     Y dS xY w)z$Fetches kerberoastable user accountsFNT)rd   r.   get_all_service_usersrC   sAMAccountNamerQ   rR   r;   userrT   s      r=   do_spnszMSLDAPClientConsole.do_spns   s      
			%	 	        /??AA       YT3
Y	$
 B
 $
%%   4A AA A6c                    K   	 |                      d           d{V  | j                                        2 3 d{V \  }}||t          |j                   #6 dS #  t          j                     Y dS xY w)z%Fetches ASREP-roastable user accountsFNT)rd   r.   get_all_knoreq_usersrC   rr   rQ   rR   rs   s      r=   do_asrepzMSLDAPClientConsole.do_asrep   s      				%	 	        />>@@       YT3
Y	$
 A $
%%rv   c                 N  K   	 |                      d           d{V  | j                            ddg          2 3 d{V \  }}|||j        }||j        dd         d| j        }t          t          |                     M6 dS #  t          j	                     Y dS xY w)	zFetches all computer accountsFNrr   dNSHostName)attrsrj   T)
ro   r.   get_all_machinesr{   rr   r1   rC   strrQ   rR   )r;   machinerT   dnss       r=   do_computeraddrz#MSLDAPClientConsole.do_computeraddr   s      			 "_==EUWdDe=ff       \Wc
Y

C
{,SbS11143C3CDS	#c((OOOO g $
%%s   8B B	AB B$c           	      %  K   dt           j                                                             d          z  }	 |                     d           d{V  |                     d           d{V  dt           j                                                             d          z  }d|z  }	 t          |ddd	
          5 }|                    d                    t                    dz              | j	        
                                 d{V \  }}|||                    d                    |                    t                              dz              ddd           n# 1 swxY w Y   t          d|z             t          j        |dt          j                  5 }|                    ||           ddd           n# 1 swxY w Y   	 t!          j        |           n(#  Y n$xY w# 	 t!          j        |           w #  Y w xY wxY wdt           j                                                             d          z  }d|z  }	 t%          d|z            }i }	t          |ddd	
          5 }| j	                            ddg          2 3 d{V \  }
}|||                                 t+          |
j                  |	|
j                                        <   Q6 t3          j        |	|           t          d|z             |                                 t          j        |dt          j                  5 }|                    ||           ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   	 t!          j        |           n(#  Y n$xY w# 	 t!          j        |           w #  Y w xY wxY wdt           j                                                             d          z  }d|z  }	 t%          d|z            }t          |ddd	
          5 }|                    d                    t8                    dz              | j	                                        2 3 d{V \  }
}|||                                 |                    d                    |
                    t8                              dz              f6 	 ddd           n# 1 swxY w Y   t          d|z             |                                 t          j        |dt          j                  5 }|                    ||           ddd           n# 1 swxY w Y   	 t!          j        |           n(#  Y n$xY w# 	 t!          j        |           w #  Y w xY wxY wdt           j                                                             d          z  }d|z  }	 t%          d|z            }t          |ddd	
          5 }|                    d                    t<                    dz              | j	                                        2 3 d{V \  }
}|||                                 |                    d                    |
                    t<                              dz              f6 	 ddd           n# 1 swxY w Y   t          d|z             |                                 t          j        |dt          j                  5 }|                    ||           ddd           n# 1 swxY w Y   	 t!          j        |           n(#  Y n$xY w# 	 t!          j        |           w #  Y w xY wxY wdt           j                                                             d          z  }d|z  }	 t%          d|z            }t          |ddd	
          5 }|                    d                    t@                    dz              | j	        !                                2 3 d{V \  }
}|||                                 |                    d                    |
                    t@                              dz              f6 	 ddd           n# 1 swxY w Y   t          d |z             |                                 t          j        |dt          j                  5 }|                    ||           ddd           n# 1 swxY w Y   	 t!          j        |           n(#  Y n$xY w# 	 t!          j        |           w #  Y w xY wxY wd!t           j                                                             d          z  }d|z  }	 t%          d"|z            }t          |ddd	
          5 }|                    d                    tD                    dz              | j	        #                                2 3 d{V \  }
}|||                                 |                    d                    |
                    tD                              dz              f6 	 ddd           n# 1 swxY w Y   t          d#|z             |                                 t          j        |dt          j                  5 }|                    ||           ddd           n# 1 swxY w Y   	 t!          j        |           n(#  Y n$xY w# 	 t!          j        |           w #  Y w xY wxY wd$t           j                                                             d          z  }d|z  }	 t%          d%|z            }t          |ddd	
          5 }|                    d                    tH                    dz              | j	        %                                2 3 d{V \  }
}|||                                 |                    d                    |
                    tH                              dz              f6 	 ddd           n# 1 swxY w Y   t          d&|z             |                                 t          j        |dt          j                  5 }|                    ||           ddd           n# 1 swxY w Y   	 t!          j        |           n(#  Y n$xY w# 	 t!          j        |           w #  Y w xY wxY wd't           j                                                             d          z  }d|z  }	 t%          d(|z            }t          |ddd	
          5 }|                    d                    tL                    dz              | j	        '                                2 3 d{V \  }
}|||                                 |                    d                    |
                    tL                              dz              f6 	 ddd           n# 1 swxY w Y   t          d)|z             |                                 t          j        |dt          j                  5 }|                    ||           ddd           n# 1 swxY w Y   	 t!          j        |           n(#  Y n$xY w# 	 t!          j        |           w #  Y w xY wxY wd*t           j                                                             d          z  }d|z  }	 t%          d+|z            }t          |ddd	
          5 }|                    d                    tH                    dz              | j	        (                                2 3 d{V \  }
}|||                                 |                    d                    |
                    tR                              dz              f6 	 ddd           n# 1 swxY w Y   t          d,|z             |                                 t          j        |dt          j                  5 }|                    ||           ddd           n# 1 swxY w Y   	 t!          j        |           n(#  Y n$xY w# 	 t!          j        |           w #  Y w xY wxY w	 d-t           j                                                             d          z  }t%          d.|z            }t          |ddd	
          5 }| j	        *                                2 3 d{V \  }}}}|||+                                }d                    |||j,        j        |-                                g          }|                    |dz              |                    d/           6 	 ddd           n# 1 swxY w Y   t          d0|z             |                                 t          j        |dt          j                  5 }|                    ||           ddd           n# 1 swxY w Y   	 t!          j        |           n(#  Y n$xY w# 	 t!          j        |           w #  Y w xY wxY wt          d1|z             d2S #  t]          j/                     Y dS xY w)3zNFetches ALL user and machine accounts from the domain with a LOT of attributeszdump_%s.zip%Y%m%d-%H%M%SFNz	domain_%sz%s.tsvwrg   utf8newlineencoding	
zAdinfo was written to %sa)compression)arcnamez	schema_%sz%s.jsonzWriting schema to file %sdescnameschemaidguidzSchema dump was written to %sz	trusts_%szWriting trusts to file %szTrust dump was written to %szusers_%szWriting users to file %szUsers dump was written to %szcomputers_%szWriting computers to file %szComputer dump was written to %sz	groups_%szWriting groups to file %szGroup dump was written to %szous_%szWriting OUs to file %szOU dump was written to %szcontainers_%szWriting Containers to file %sz Container dump was written to %szgpos_%szWriting GPOs to file %szGPO dump was written to %s
dns_%s.tsvWriting DNS records to file %s   zDNS dump was written to %szAll dumps were written to %sT)0datetimenowstrftimero   rd   openwritejoinr   r.   get_ad_infoget_rowrC   zipfileZipFile	ZIP_BZIP2osremover   get_all_schemaentryupdater   schemaIDGUIDr   lowerjsondumpcloser   get_all_trustsr    get_all_usersr   r~   r   get_all_groupsr   get_all_ousr   get_all_containersget_all_gposr   
dnsentriesget_formattedTypeto_linerQ   rR   )r;   zip_filenametnameusers_filenamefr/   rT   dzpbarschemart   dns_filenamezonednr   dnsrecod
dnsdataobjlines                    r=   do_dumpzMSLDAPClientConsole.do_dump   s,     !2!6!6!8!8!A!A/!R!RR,g						%	 	        *..0099/JJJ5u$>
	nc2&	A	A	A ?QWWTYY~&&v-...4466666666[VSiWWTYYv~~n5566v=>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 

$~
5666	s8I	J	J	J 8bXXnX7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8
Y~
	T
Y~
	T*..0099/JJJ5%>
2^CDDDDF	nc2&	A	A	A 9Q O??@XYY 9 9 9 9 9 9 9ytS	y
kkmmm"%d&7"8"8fTY__	 Z 
Yvq
*^;<<<	ZZ\\\
/,9J
K
K
K 9rhh~h8889 9 9 9 9 9 9 9 9 9 9 9 9 9 99 9 9 9 9 9 9 9 9 9 9 9 9 9 9
Y~
	T
Y~
	T*..0099/JJJ5u$>
2^CDDDD	nc2&	A	A	A EQWWTYY,--f4555 O::<< E E E E E E EytS	y
kkmmmggdii%:;;<<VCDDDD	 =<E E E E E E E E E E E E E E E 

(>
9:::JJLLL	s8I	J	J	J 8bXXnX7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8
Y~
	T
Y~
	T )--//88III5u$>
1NBCCCD	nc2&	A	A	A BQWWTYY)**61222 O99;; B B B B B B BytS	y
kkmmmggdii%78899&@AAAA	 <;B B B B B B B B B B B B B B B 

(>
9:::JJLLL	s8I	J	J	J 8bXXnX7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8
Y~
	T
Y~
	TH-1133<<_MMM5u$>
5FGGGD	nc2&	A	A	A AQWWTYY())&0111 O<<>> A A A A A A AytS	y
kkmmmggdii%67788?@@@@	 ?>A A A A A A A A A A A A A A A 

+n
<===JJLLL	s8I	J	J	J 8bXXnX7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8
Y~
	T
Y~
	T*..0099/JJJ5u$>
2^CDDDD	nc2&	A	A	A ?QWWTYY''./// O::<< ? ? ? ? ? ? ?ytS	y
kkmmmggdii_5566v=>>>>	 =<? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 

(>
9:::JJLLL	s8I	J	J	J 8bXXnX7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8
Y~
	T
Y~
	Th'++--66GGG5u$>
/.@AAAD	nc2&	A	A	A <QWWTYY|$$V+,,, O7799 < < < < < < <ytS	y
kkmmmggdii\2233F:;;;;	 :9< < < < < < < < < < < < < < < 

%
6777JJLLL	s8I	J	J	J 8bXXnX7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8
Y~
	T
Y~
	T X.2244==oNNN5u$>
6GHHHD	nc2&	A	A	A CQWWTYY*++F2333 O>>@@ C C C C C C CytS	y
kkmmmggdii%899::6ABBBB	 A@C C C C C C C C C C C C C C C 

,~
=>>>JJLLL	s8I	J	J	J 8bXXnX7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8
Y~
	T
Y~
	Tx(,,..77HHH5u$>
0>ABBBD	nc2&	A	A	A =QWWTYY|$$V+,,, O88:: = = = = = = =ytS	y
kkmmmggdii]3344V;<<<<	 ;:= = = = = = = = = = = = = = = 

&
7888JJLLL	s8I	J	J	J 8bXXnX7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8
Y~
	T
Y~
	T
("3"7"7"9"9"B"B?"S"SSL7,FGGGD	lC	?	?	? 1.2o.H.H.J.J       *vtXs	y))++jYYhm&8*:L:L:N:NOPPdggdVm
kk!nnnn /K.J               

&
5666JJLLL	s8I	J	J	J 4bXXllX3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4
Y|
	T
Y|
	T 		',	6777
$
%%so  A/AJ% (G+ ;BE!G+ !E%%G+ (E%)6G+ G7G+ GG+ 
GG+ G$ #AJ% $G(&AJ% +H	-HH	HH		<AJ% (N .M4KB(M49MM4M!	!M4$M!	%M4(N 4M88N ;M8<N  N AJ% NAJ% N:N32N:3N75N::<AJ% 7&U9 A
S'S-A!SU9 SU9 "S#A
U9 -UU9 UU9 UU9 U2 1AJ% 2U64AJ% 9V;VVVV<AJ% &] :A
Z8Z*
A!Z8,] 8Z<<] ?Z< A
] 
\."] .\22] 5\26] :] AJ% ]AJ% ]4]-,]4-]1/]44<AJ% 1&d3 A
b!b'A!b	d3 bd3 bA
d3 'd?d3 dd3 dd3 d, +AJ% ,d0.AJ% 3e5e
	e
ee<AJ% &l 4A
i2>i$A!i2&l 2i66l 9i6:A
l k(l (k,,l /k,0l 4l	 AJ% 	lAJ% l.l'&l.'l+)l..<AJ% +&s- A
qq!A!qs- qs- qA
s- !s9s- s		s- s	s- s& %AJ% &s*(AJ% -t/tttt<AJ% &{
 .A
x,8x>A!x, {
 ,x00{
 3x04A
{
 >z"{
 "z&&{
 )z&*{
 .{ AJ% {AJ% 
{({! {(!{%#{((<AJ% %&AB' A
A@	;A!A@	=AB' @	A@@AB' @A@@A
AB' AAA?A3AB' A?ABBAB' BABBAB' BAB  BAJ% B AB$B"AJ% B'ACB)AB>B=ACB>ACC ACCAJ% C	AAI0 D#AGD=AGEBAGGAI0 GAGGAI0 GAGGA
AI0 H$AIH<AI0 IAIIAI0 IAIIAI0 IAI) I(AJ% I)AI-I+AJ% I0AJI2AJJAJJAJJ	AJJAJ% J%AJ=c                     | j         g S g }| j         D ]5}|                    d          dk    rd|z  }|                    |           6|S )N r}   z'%s')r8   findappend)r;   curdirsdirnames      r=   get_current_dirsz$MSLDAPClientConsole.get_current_dirs  sb    	 
9'$  gll32wG
>>'	.r>   c                 ,    t          | j                  S )N)r   )r   r   rW   s    r=   _cd_completionsz#MSLDAPClientConsole._cd_completions  s    	$*?	@	@	@@r>   c                   K   | j         }	 |dk    r|| _         n3|dk    r&||                    d          dz   d         | _         n|| _         || j        v r| j        |         | _         | j                            | j         d           d{V }t          |                                          d         }i | _        ||                                         D ],}|dt          | j                   dz             }|| j        |<   -d| j         d	| _        d
S # t          $ r4}t          d|z             || _         d| j         d	| _        Y d}~dS d}~ww xY w)zChange current work directoryrj   z..ri   r   Nlevelr   r@   rA   TzChange directory error! %sF)r:   r   r8   r.   get_tree_plotr`   keyslenrM   	ExceptionrC   )r;   pathoriginal_path	tree_datarootdn	lookup_dnes           r=   rP   zMSLDAPClientConsole.do_cd  s     "-
ckk$D %]%7%7%<%<Q%>%?%?@DD
d!!!*40D_2243C12MMMMMMMM9
y~~
 
 
#44t_!!## ( (r.c$*++A-../I%'D	""( "---/4;
$	   	%	)***#4!---/4;
%%%%%	s   DD 
E)EENOc                    K   |d| j         }|                     ||           d{V }|du r|                     d           d{V  |S )z$Remove an object from the current DNri   NTrj   )r:   	do_deleterP   )r;   subdnconfirmr   ress        r=   do_rmzMSLDAPClientConsole.do_rm  so      %%))*"nnR))))))))#D[[	C	*r>   c                   K   	 |                      d           d{V  |                     d           d{V  | j        j        j        du rt          d           dS t          d|z             |                                dk    r2t          d           t          d|z             t          d	           dS | j                            |           d{V \  }}||t          d
           dS #  t          j	                     Y dS xY w)z%Remove an object identified by its DNFNTrB   z)This will delete the following object: %sYESzkAs a safety measure, you have to confirm the deletion by typing YES in all caps after the DN to be deleted!zExample: "delete %s YES"zNot confirmed! Aborting!z
Delete OK!)
rd   ro   r.   rN   rO   rC   upperdeleterQ   rR   )r;   r   r   rS   rT   s        r=   r   zMSLDAPClientConsole.do_delete  sA     			%	 	        			
o"d**	
EFFF5	4r	9:::mmoo	
wxxx	
$r
)***	
$%%%5/((,,,,,,,,61c	o
I
$
%%s   AC2 AC2 :6C2 2D
Fc                 b   K   | j         D ]$}|}|dur| j         |         }t          |           %dS )z'Print objects in current work directoryFT)r8   rC   )r;   fullpathr   entrys       r=   do_lszMSLDAPClientConsole.do_ls  sG        b5e#E<<<<	r>   *rg   c           
        K   |                     d          }|dk    r| j        }| j                            d|z  ||          2 3 d{V \  }}|||d         D ]}t	          |d         |                   t
          k    r9t          |d         |                   D ]\  }}t          |d|d|           _|d         |         }t          |d	|           6 d
S )zHPrint attributes of object. Without arguments it will cat the current DNri   rg   (distinguishedName=%s))query
attributestreeNr   z [z]: : T)splitr:   r.   pagedsearchtyper`   	enumeraterC   )r;   r   r   r   rT   attrivals           r=   do_catzMSLDAPClientConsole.do_cat  s<     $$*2XX2/55<TUW<Wdnuw5xx 	# 	# 	# 	# 	# 	# 	#JE3	o
I\" # #tE,%&&$..U<0677 , ,CTTT111cc*++++, t$S
tttSS!""""# y 
s   Cc                    K   |d|fgi}| j                             ||           d{V \  }}||t          d           dS )zAModify an attribute of object. Only works with string data types!rm   N
Modify OK!T)r.   modifyrC   )r;   r   	attributevaluechangesrS   rT   s          r=   	do_modifyzMSLDAPClientConsole.do_modify  sh       E"#' ''G44444444&!S_	9	r>   -c           	      2  K   	 |                      d           d{V  |d}|                    d          r|                    d          }t          j        d|z             t          j        d|z             | j                            ||          2 3 d{V \  }}||t          d|d         z             t          d	           |d
                                         D ]\  }}t          |t                    rt          d|z             |D ]}t          |t                    r%t          d|                                z             <t          |t                    r%t          d|                                z             vt          d|z             t          |t                    rbt          d|d|                                           t          d|d|                                                                           0t          |t                    r)t          d|d|                                           nt          d|d|           t          d           6 dS #  t!          j                     Y dS xY w)zvPerforms a raw LDAP query against the server. Secondary parameter is the requested attributes SEPARATED WITH COMMA (,)FNr   ri   z	Query: %szAttributes: %szDN: %s
objectNamezAttributes:r   z  %s:z    - %sz  r   z---T)rd   r   r   loggingrD   r.   r   rC   itemsr,   r`   r   to_sddlbyteshexto_bytesrQ   rR   )r;   r   r   r   rT   	attr_name
attr_valuer   s           r=   do_queryzMSLDAPClientConsole.do_query#  s     #			%	 	        Jooc '!!#&&J
=&'''
=!Z0111?66ujII       ZUC
Y	(U<(
()))	-!&|!4!:!:!<!< 3 3	::t$$ 3Gi       #
S-
.
.  j3;;==())))sE""  j37799$%%%%j3  
J 3	4	4 3u999j&8&8&:&:&:;<<<u999j&9&9&;&;&?&?&A&A&ABCCCCj%(( 3u999jnn&6&6&678888u999jj12222	%LLLL/ J0 $
%%s   BI> I;G I> >Jr   c                   K   	 |                      d           d{V  |d}t          |          }|)	 t          |           t          |          }d}n#  Y nxY w|'|                      d           d{V  | j        j        }t	          j        d|z             | j                            ||           d{V }t                      }t           ||                     dS #  t          j
                     Y dS xY w)zYPrints a tree from the given DN (if not set, the top) and with a given depth (default: 1)FNr   z
Tree on %sT)rd   intr.   rL   r   rD   r   r   rC   rQ   rR   )r;   r   r   r   trs        r=   do_treezMSLDAPClientConsole.do_treeJ  s5     			%	 	        mEu::5nWWW WWU
RR	
	T
 	j


5
!
!!!!!!!!		B
="###_222u========92I
$
%%s#   0C& A C& ABC& &C>c                 F  K   	 |                      d           d{V  |                     d           d{V  | j                            |           d{V \  }}|||du r!|t	          d           nt	          |           |S #  t          j                     Y dS xY w)z>Feteches a user object based on the sAMAccountName of the userFNTzUser not found!)rd   ro   r.   get_userrC   rQ   rR   )r;   samaccountnameto_printrt   rT   s        r=   do_userzMSLDAPClientConsole.do_userg  s      			%	 	        			_--n========94	o
I$|

4[[[
;
%%s   BB B c                   K   	 |                      d           d{V  |                     d           d{V  | j                            |           d{V \  }}|||t	          d           n7t	          |           t          j        |j                  }t	          |           dS #  t          j	                     Y dS xY w)zDFeteches a machine object based on the sAMAccountName of the machineFNzmachine not found!T)
rd   ro   r.   get_machinerC   r   
from_bytes#allowedtoactonbehalfofotheridentityrQ   rR   )r;   r  r   rT   xs        r=   
do_machinezMSLDAPClientConsole.do_machine{  s      			%	 	        			33NCCCCCCCC<7C	o
Io	
	'NNN&w'RSSA	!HHH
$
%%s   B&B, ,Cc                 4  K   	 |                      d           d{V  |                     d           d{V  | j                            |           d{V \  }}||t	          t          |                     dS #  t          j                     Y dS xY w)zYFeteches a schema object entry object based on the DN of the object (must start with CN=)FNT)rd   ro   r.   get_schemaentryrC   r   rQ   rR   )r;   cnschemaentryrT   s       r=   do_schemaentryz"MSLDAPClientConsole.do_schemaentry  s      			%	 	        			 O;;B????????;	o
I[		
$
%%s   A9A? ?Bc                 8  K   	 |                      d           d{V  |                     d           d{V  | j                                        2 3 d{V \  }}||t	          t          |                     +6 dS #  t          j                     Y dS xY w)z(Feteches all schema object entry objectsFNT)rd   ro   r.   r   rC   r   rQ   rR   )r;   r  rT   s      r=   do_allschemaentryz%MSLDAPClientConsole.do_allschemaentry  s      			%	 	        			!%!D!D!F!F       [#
Y	#k

	 "G
 $
%%s   AB A>&B Bc                 v   K   | j                             |           d{V \  }}||t          |           dS )z7Fetches the DN of an object based on the sAMAccountNameNT)r.   sam2dnrC   )r;   rr   r   rT   s       r=   	do_sam2dnzMSLDAPClientConsole.do_sam2dn  sK      /((88888888'"c_	9)))	r>   c                 v   K   | j                             |           d{V \  }}||t          |           dS )z2Fetches the DN of an object based on the objectSidNT)r.   sid2dnrC   )r;   sidr   rT   s       r=   	do_sid2dnzMSLDAPClientConsole.do_sid2dn  sK      /((--------'"c_	9)))	r>   c                 v   K   | j                             |           d{V \  }}||t          |           dS )z2Fetches the objectSid of an object based on the DNNT)r.   dn2sidrC   )r;   r   r$  rT   s       r=   	do_dn2sidzMSLDAPClientConsole.do_dn2sid  K      ?))"--------(#s_	9***	r>   c                 v   K   | j                             |           d{V \  }}||t          |           dS )z7Fetches the sAMAccountName of an object based on the DNNT)r.   dn2samrC   )r;   r   samrT   s       r=   	do_dn2samzMSLDAPClientConsole.do_dn2sam  r)  r>   c                   K   	 |                      d           d{V  |                     d           d{V  | j                            | j        j        dz              d{V \  }}||| j                            |d          2 3 d{V \  }}||t          |j                   #6 dS #  t          j
                     Y dS xY w)z4Lists all members of the domain administrators groupFN-512T	recursive)rd   ro   r.   r#  r/   rn   get_group_membersrC   rl   rQ   rR   )r;   r   rT   objs       r=   do_dadmszMSLDAPClientConsole.do_dadms  s     			%	 	        			?))$+*?&*HIIIIIIII72s	o
I::2:NN ! ! ! ! ! ! !XS#
Y	#
     O $
%%s   BB0 
B-B0 0Cc                    K   	 |dus|dk    rd}| j                             ||          2 3 d{V \  }}||t          |j                   #6 dS # t          $ r}t          j                     Y d}~dS d}~ww xY w)z3Returns all member users in a group specified by DNF0Tr0  N)r.   r2  rC   rl   r   rQ   rR   )r;   r   r1  r3  rT   r   s         r=   do_groupmembersz#MSLDAPClientConsole.do_groupmembers  s      
u	S 0 0I::2:SS ! ! ! ! ! ! !XS#
Y	#
     T $	   
%%%%%s!   (A AA 
A:A55A:c                 8  K   	 |                      d           d{V  |                     d           d{V  	 t          j        |          }n'#  t	          d           dt          d          fcY S xY wd|z  }| j                            |ddg          2 3 d{V \  }}||d|d         vrt	          d	           t                      }t          j
        t          j        z  |_        t          j        d
          |_        d|_        d|_        t!                      |_        d|j        _        d|j        _        d|j        _        n t          j        |d         d                   } n!6 t	          d           dt          d          fS |j        j        D ]/}|j        |k    r"t	          d           dt          d          fc S 0t	          d           t1                      }d|_        d|_        ||_        t7          j        |          }	|	j        j                            |           dd|	                                fgi}
| j                            ||
           d{V \  }}||t	          d           dS #  tA          j!                     Y dS xY w)zQAdds a SID to the msDS-AllowedToActOnBehalfOfOtherIdentity protperty of target_dnFNzIncorrect SID!zIncorrect SIDr   z(msDS-AllowedToActOnBehalfOfOtherIdentityrn   r   z>Attribute does not exist on the current object, crafing new SDS-1-5-32-544   r   zTarget DN not found!zAccount is already there!zConstructing new ACEi rm   
Change OK!)"rd   ro   r   from_stringrC   r   r.   r   r   r   SE_DACL_PRESENTSE_SELF_RELATIVEControlOwnerGroupSaclr   DaclAclRevisionSbz1Sbz2r  acesSidr	   r   Maskcopydeepcopyr   r  r   rQ   rR   )r;   	target_dnother_identity_sidcomputer_sidr   r   rT   	target_sdacenew_sdr   rS   s               r=   )do_addallowedtoactonbehalfofotheridentityz=MSLDAPClientConsole.do_addallowedtoactonbehalfofotheridentity  s     =			%	 	        			-?#566LL-	
)O,,,,,, $i/5?66u?ikv>wxx 4 4 4 4 4 4 4ZUC
Y1|9LLL
KLLL$&&Y 073KKY~66Y_Y_Y^eeY^"#Y^Y^Y^ %/l0CDn0oppY	E' y* 

 !!!)23333 n! : :s
w,
&'''98999999  		   			33<3837M)$$6	;3 /9foo>O>O2P1Q7 /((G<<<<<<<<61c	o
IsB   6J A J "A42J 4%J E-C.J :J 	B6J Jc                   K   	 |                      d           d{V  |                     d           d{V  | j                            |||           d{V \  }}||dS #  t	          j                     Y dS xY w)zChanges the owner in a Security Descriptor to the new_owner_sid on an LDAP object or on an LDAP object's attribute identified by target_dn and target_attribute. target_attribute can be omitted to change the target_dn's SD's ownerFN)target_attribute)rd   ro   r.   change_priv_ownerrQ   rR   )r;   new_owner_sidrL  rT  rS   rT   s         r=   do_changeownerz"MSLDAPClientConsole.do_changeowner0  s      				%	 	        			/33M9aq3rrrrrrrr61c	o
I o
%%s   A A& &A>c                 0  K   	 |                      d           d{V  |                     d           d{V  | j                            || j        j                   d{V \  }}||t          d           dS #  t          j                     Y dS xY w)zzAdds DCSync rights to the given user by modifying the forest's Security Descriptor to add GetChanges and GetChangesAll ACEFNr;  T)	rd   ro   r.   add_priv_dcsyncr/   rl   rC   rQ   rR   )r;   user_dnforestrS   rT   s        r=   do_addprivdcsyncz$MSLDAPClientConsole.do_addprivdcsync=  s      			%	 	        			/11'4;;XYYYYYYYY61c	o
I
$
%%s   A7A= =Bc                   K   	 |                      d           d{V  |                     d           d{V  | j                            ||           d{V \  }}||t	          d           dS #  t          j                     Y dS xY w)zDAdds AddMember rights to the user on the group specified by group_dnFNr;  T)rd   ro   r.   add_priv_addmemberrC   rQ   rR   r;   rZ  group_dnrS   rT   s        r=   do_addprivaddmemberz'MSLDAPClientConsole.do_addprivaddmemberM  s      			%	 	        			/44WhGGGGGGGG61c	o
I
$
%%s   A-A3 3Bc                   K   	 |                      d           d{V  |                     d           d{V  	 t          j        |          }n'#  t	          d           dt          d          fcY S xY w| j                            ||                                           d{V \  }}||t	          d           dS #  t	          d           t          j
                     Y dS xY w)z,Updates the security descriptor of an objectFNzIncorrect SDDL input!r;  Tz(Erro while updating security descriptor!)rd   ro   r   	from_sddlrC   r   r.   set_objectacl_by_dnr  rQ   rR   )r;   rL  sddlrQ  rS   rT   s         r=   do_setsdzMSLDAPClientConsole.do_setsd]  s      			%	 	        			5 *400FF5	
!""")3444444/55iARARSSSSSSSS61c	o
I
$	3444
%%s)   6C A C "A42C 4AC $C)r   c                 z  K   	 |                      d           d{V  |                     d           d{V  | j                            |           d{V \  }}||t	          j        |          }| j                            |j                                                   d{V \  }}}t          d|d|           | j                            |j
                                                   d{V \  }}}t          d|d|           g }|j        j        D ]}	t          j        |	j                                                  r,t          j        |	j                                                  }
nb| j                            |	j                                                   d{V \  }}}|dk    r|d|}
n|	j                                        }
|d         dk    rpg }t!          |	                              d	          D ]0}|                    |                    d
          d                    1|                    |
g|z              8|d         dk    r<t!          |	                              d	          D ]}|                    |
|g           |d         dk    r!t          t'          |g d                     nN|d         dk    r!t          t'          |ddg                     n!t          |                                           dS #  t)          j                     Y dS xY w)%Feteches security info for a given DNFNzOWNER: \zGROUP: z???r   g
:r}   p)
Whor   Flagsr   rI  
ObjectTypeInheritedObjectTypeObjectFlagsACTyperg   )headersrn  ACET)rd   ro   r.   get_objectacl_by_dnr   r  
resolv_sidr@  r  rC   rA  rC  rG  r   wellknown_sid_lookuprH  r   r   r   r   rQ   rR   )r;   r   optssec_inforT   sddomainusernameoutrP  	canonicalrowr   s                r=   do_getsdzMSLDAPClientConsole.do_getsds  sz     &			%	 	        			<<R@@@@@@@@=8S	o
I&x002!%!;!;BH<L<L<N<N!O!OOOOOOO68S5FFFHH	-...!%!;!;BH<L<L<N<N!O!OOOOOOO68S5FFFHH	-...	3gl $ $s
 1 122 $)#'//*;*;<<YY#'?#=#=cgoo>O>O#P#PPPPPPPVXsE$ffhh/ii'//##iAw#~~SS%% & &	jjC$%%%%ZZc!""""	aCS%% $ $	jj)T"####
1gnn	(3  !A  !A  !A  B  B  B  C  C  C  CQ3	(3u
.
.
.////	"**,,
$
%%s   LL" "L:c                   K   	 |                      d           d{V  |                     d           d{V  | j                                        2 3 d{V \  }}||t	          |           6 dS #  t          j                     Y dS xY w)rh  FNT)rd   ro   r.   r   rC   rQ   rR   )r;   gporT   s      r=   do_gposzMSLDAPClientConsole.do_gpos  s      			%	 	        			5577       XS#
Y	#JJJJ 8
 $
%%s   AA4 A1A4 4Bc                   K   	 | j                                         2 3 d{V \  }}||d|d         v r.|d         d         }t          |d         d         d|           G6 | j                                         2 3 d{V \  }}||d|d         v r.|d         d         }t          |d         d         d|           d|d         v r@|d         d         }t          |d         d         d|                                           d|d         v r.|d         d         }t          |d         d         d|           d	|d         v r.|d         d	         }t          |d         d         d|           d
|d         v r.|d         d
         }t          |d         d         d|           :6 dS #  t          j                     Y dS xY w)zFeteches all laps passwordsNzms-Mcs-AdmPwdr   r  r^   zmsLAPS-PasswordzmsLAPS-EncryptedPasswordzmsLAPS-EncryptedPasswordHistoryzmsLAPS-EncryptedDSRMPasswordz#msLAPS-EncryptedDSRMPasswordHistoryTF)r.   get_all_lapsrC   get_all_laps_windowsr  rQ   rR   )r;   r   rT   pwds       r=   do_lapszMSLDAPClientConsole.do_laps  so     &?7799 9 9 9 9 9 9 9ZUC
Y%---/S
l+D111337888 :  ???AA 9 9 9 9 9 9 9ZUC
YE,///01S
l+D111337888 "U<%8889:S
l+D111377999=>>>(E,,???@AS
l+D111337888%|)<<<=>S
l+D111337888,l0CCCDES
l+D111337888/ B2 $
%%s#   F; A$AF; >F8D5F; ;Gc                 
  K   	 |                      d           d{V  |                     d           d{V  g }| j                            |          2 3 d{V \  }}|||                    |           | j                            |           d{V \  }}||t          |d|           _6 t          |          dk    rt          d           dS # t          $ r}t          j
                     Y d}~dS d}~ww xY w)zDFeteches names all groupnames the user is a member of for a given DNFN - r   zNo memberships foundT)rd   ro   r.   get_tokengroupsr   get_dn_for_objectsidrC   r   r   rQ   rR   )r;   r   
group_sids	group_sidrT   r`  r   s          r=   do_groupmembershipz&MSLDAPClientConsole.do_groupmembership  sm     			%	 	        			:#>>rBB - - - - - - -^Y
Yi   />>yIIIIIIIIMHc
Y	xxx
+,,,,  C 
*oo	
 !!!
$	   
%%%%%s%   AC B5A<C 
D$C==Dc                 "   K   || j         _        dS )zQChanges the LDAP TREE for future queries. MUST be DN format eg. 'DC=test,DC=corp'N)r.   rL   )r;   newtrees     r=   do_bindtreezMSLDAPClientConsole.do_bindtree  s      !$/r>   c                    K   	 | j                                         2 3 d{V \  }}||t          |                                           06 dS #  t	          j                     Y dS xY w)z!Feteches gives back domain trustsNTF)r.   r   rC   get_linerQ   rR   r;   r   rT   s      r=   	do_trustszMSLDAPClientConsole.do_trusts  s      	?99;;       ZUC
Y	%..

 <
 $
%%s   A A+A A(c                    K   	 | j                             ||           d{V \  }}||t          d           dS #  t          j                     Y dS xY w)z'Creates a new domain user with passwordNz
User addedTF)r.   create_user_dnrC   rQ   rR   )r;   rZ  passwordrS   rT   s        r=   
do_adduserzMSLDAPClientConsole.do_adduser  st      /00(CCCCCCCC61c	o
I
$
%%	   7= Ac                    K   	 | j                             |           d{V \  }}||t          d           dS #  t          j                     Y dS xY w)ztDeletes the user! This action is irrecoverable (actually domain admins can do that but probably will shout with you)NzGoodbye, Caroline.TF)r.   delete_userrC   rQ   rR   r;   rZ  rS   rT   s       r=   
do_deluserzMSLDAPClientConsole.do_deluser  ss      /--g6666666661c	o
I	
$
%%	   6< Ac                    K   	 | j                             |||           d{V \  }}||t          d           dS #  t          j                     Y dS xY w)zNChanges user password, if you are admin then old pw doesnt need to be suppliedNzUser password changedTF)r.   change_passwordrC   rQ   rR   )r;   rZ  newpassoldpassrS   rT   s         r=   do_changeuserpwz#MSLDAPClientConsole.do_changeuserpw  sw      /11'7GLLLLLLLL61c	o
I	 !!!
$
%%s	   8> Ac                    K   	 | j                             |           d{V \  }}||t          d           dS #  t          j                     Y dS xY w)z'Unlock user by setting lockoutTime to 0NzUser unlockedTF)r.   unlock_userrC   rQ   rR   r  s       r=   do_unlockuserz!MSLDAPClientConsole.do_unlockuser#  sr      /--g6666666661c	o
I
$
%%r  c                    K   	 | j                             |           d{V \  }}||t          d           dS #  t          j                     Y dS xY w)/Unlock user by flipping useraccountcontrol bitsNzUser enabledTF)r.   enable_userrC   rQ   rR   r  s       r=   do_enableuserz!MSLDAPClientConsole.do_enableuser/  sr      /--g6666666661c	o
I
$
%%r  c                    K   	 | j                             |           d{V \  }}||t          d           dS #  t          j                     Y dS xY w)r  NzUser disabledTF)r.   disable_userrC   rQ   rR   r  s       r=   do_disableuserz"MSLDAPClientConsole.do_disableuser;  sr      /..w7777777761c	o
I
$
%%r  c                    K   	 | j                             ||           d{V \  }}||t          d           dS #  t          j                     Y dS xY w)z&Adds an SPN entry to the users accountNz
SPN added!TF)r.   add_user_spnrC   rQ   rR   r;   rZ  spnrS   rT   s        r=   	do_addspnzMSLDAPClientConsole.do_addspnG  st      /..w<<<<<<<<61c	o
I
$
%%r  c                    K   	 | j                             ||           d{V \  }}||t          d           dS #  t          j                     Y dS xY w)z)Removes an SPN entry to the users accountNzSPN removed!TF)r.   del_user_spnrC   rQ   rR   r  s        r=   	do_delspnzMSLDAPClientConsole.do_delspnS  st      /..w<<<<<<<<61c	o
I
$
%%r  c                    K   	 | j                             ||           d{V \  }}||t          d           dS #  t          j                     Y dS xY w)z,Adds additional hostname to computer accountNzHostname added!TF)r.   add_additional_hostnamerC   rQ   rR   )r;   rZ  hostnamerS   rT   s        r=   do_addhostnamez"MSLDAPClientConsole.do_addhostname_  su      /99'8LLLLLLLL61c	o
I	
$
%%r  c                    K   	 | j                             ||           d{V \  }}||t          d           dS #  t          j                     Y dS xY w)zGAdds user to specified group. Both user and group must be in DN format!NzUser added to group!TF)r.   add_user_to_grouprC   rQ   rR   r_  s        r=   do_addusertogroupz%MSLDAPClientConsole.do_addusertogroupk  su      /33GXFFFFFFFF61c	o
I	   
$
%%r  c                    K   	 | j                             ||           d{V \  }}||t          d           dS #  t          j                     Y dS xY w)zLRemoves user from specified group. Both user and group must be in DN format!NzUser removed from group!TF)r.   del_user_from_grouprC   rQ   rR   r_  s        r=   do_deluserfromgroupz'MSLDAPClientConsole.do_deluserfromgroupw  su      /55gxHHHHHHHH61c	o
I	#$$$
$
%%r  c                    K   	 g }| j                                         2 3 d{V \  }}|||                    |           |du rt          |           76 |S #  t	          j                     Y dS xY w)zLists Root CA certificatesNTF)r.   list_root_casr   rC   rQ   rR   r;   r  cascarT   s        r=   
do_rootcaszMSLDAPClientConsole.do_rootcas  s      	35577       WR
YJJrNNN4
2YYY 8 :
%%   A A3A A1c                    K   	 g }| j                                         2 3 d{V \  }}|||                    |           |du rt          |           76 |S #  t	          j                     Y dS xY w)zLists NT CA certificatesNTF)r.   
list_ntcasr   rC   rQ   rR   r  s        r=   do_ntcaszMSLDAPClientConsole.do_ntcas  s      	32244       WR
YJJrNNN4
2YYY 5 :
%%r  c                    K   	 g }| j                                         2 3 d{V \  }}|||                    |           |du rt          |           76 |S #  t	          j                     Y dS xY wzLists AIA CA certificatesNTF)r.   list_aiacasr   rC   rQ   rR   r  s        r=   	do_aiacaszMSLDAPClientConsole.do_aiacas  s      	33355       WR
YJJrNNN4
2YYY 6 :
%%r  c                    K   	 g }| j                                         2 3 d{V \  }}|||                    |           |du rt          |           76 |S #  t	          j                     Y dS xY wr  )r.   list_enrollment_servicesr   rC   rQ   rR   )r;   r  servicessrvrT   s        r=   do_enrollmentservicesz)MSLDAPClientConsole.do_enrollmentservices  s      8AACC       XS#
YOOC4
3ZZZ D ?
%%r  c                   K   	 d}| j                             |          2 3 d{V \  }}|| n6 |t          d          t          j        t
          |          }|t          |          }n.t          t          |j                  t          j	        z            }dd|fgi}| j         
                    |j        |           d{V \  }}||t          d           dS #  t          j                     Y dS xY w)zModifyies the msPKI-Certificate-Name-Flag value of the specified certificate template and enables ENROLLEE_SUPPLIES_SUBJECT_ALT_NAME bit. If 'flags' is present then it will assign that value.NTemplate could not be found!zmsPKI-Certificate-Name-Flagrm   r   TF)r.   list_certificate_templatesr   typingcastr#   r
  r"   Certificate_Name_Flag"ENROLLEE_SUPPLIES_SUBJECT_ALT_NAMEr   rl   rC   rQ   rR   )r;   certtemplatenameflagstemplaterT   r   rS   s          r=   !do_addcerttemplatenameflagaltnamez5MSLDAPClientConsole.do_addcerttemplatenameflagaltname  sD     8"oHHIYZZ 
 
 
 
 
 
 
]Xs
Y	E [
 
2
3
33k18<<8JJEE#H$BCCFYF||}}E "i%7$87 /(()CWMMMMMMMM61c	o
I
$
%%s   C! 0B9C! !C9c                   K   	 | j                             |           d{V \  }}||d}| j                             |          2 3 d{V \  }}|| n6 |t          d          t	          j        t          |          }t          j        |j	                  }t                      }t          j        |          |_        t          j        t                    |_        t#          d          |_        t$          j        t$          j        z  t$          j        z  |_        t.          j        |_        |j        j                            |           | j                             |j        |                                t@          j!                   d{V \  }}||tE          d           dS #  tG          j$                     Y dS xY w)zRGrants enrollment rights to a user (by DN) for the specified certificate template.Nr  r   r  SD set sucessfullyTF)%r.   get_objectsid_for_dnr  r   r  r  r#   rJ  rK  nTSecurityDescriptorr
   r   r<  rH  r   r!   rp  r   r   	READ_PROP
WRITE_PROPCONTROL_ACCESSrI  r   ACE_OBJECT_TYPE_PRESENTro  rC  rG  r   rd  rl   r  r$   DACL_SECURITY_INFORMATIONrC   rQ   rR   )	r;   r  rZ  user_sidrT   r  rQ  rP  rS   s	            r=   do_addenrollmentrightz)MSLDAPClientConsole.do_addenrollmentright  s     ==gFFFFFFFF=8S	o
I8"oHHIYZZ 
 
 
 
 
 
 
]Xs
Y	E [
 
2
3
33k18<<8M(7886	"	$	$3_X&&37$%DEE3>1++3<'/*DDGee38":39	;3/55h6PRXRaRaRcRcky  lT5  U  U  U  U  U  U  U  U61c	o
I	
$
%%s   AF, AEF, ,Gc                 6  K   	 |                      d           d{V }g }| j                            |          2 3 d{V \  }}||d}|j        ,| j                            |j                   d{V \  }}||||_        |D ]9}|j        |j        v r)|j        	                    |j
        d|j                   :|	                    |           |du r!t          |                                           6 |S #  t          j                     Y dS xY w)zLists certificate templatesFr  Nri  T)r  r.   r  r  	resolv_sdsid_lookup_tabler   certificateTemplatesenroll_servicesr   r{   rC   prettyprintrQ   rR   )	r;   r   r  r  	templatesr  rT   ltr  s	            r=   do_certtemplatesz$MSLDAPClientConsole.do_certtemplates  s{     ...>>>>>>>>89"oHHNN # # # # # # #]Xs
Y	B$0_..x/LMMMMMMMMWRi "H N N111%%#///388&LMMMX4
8!!"""! O$ 
%%s   8D  C=B=D   Dc                    K   	 | j                             |           d{V \  }}}|||d|}|du rt          |           |S #  t          j                     Y dS xY w)z'Returns the domain and username for SIDNri  TF)r.   rw  rC   rQ   rR   )r;   r$  r  r|  r}  rT   r   s          r=   do_sidresolvz MSLDAPClientConsole.do_sidresolv  s      
!%!;!;C!@!@@@@@@@68S	o
IVVXX	&3$	#JJJ
:
%%s   AA A c                   K   	 |                      d           d{V }|du rt          d|z            |t          d          |                     d           d{V }|du rt          d|z            |t          d          g }d}|(| j                            |           d{V \  }}||n.| j                                         d{V \  }}|||d         }|D ]}|                    |          }t          |          d	k    r+|j        }d
}	t          |          d	k    rdg}d}	|D ]\  }
}d|j	        z  }|d|z  z  }|d|
z  z  }|d|	z  z  }|dz  }|D ](}|d|d||         
                    dd          dz  })t          |           |	|j	        ||
|d}|                    |           |S #  t          j                     Y dS xY w)z ADCA security test - new versionFr  N%Listing enrollment Services error! %s)No Enrollment Services present, stopping!Listing templates error! %sNo templates exists!tokengroupsr   TNNzTemplate Name: %s
zEnrollment Service Name: %s
zEnrollment Service Host: %s
zEnabled: %s
zVulnerabilities:
r   r  Reasonrg   rk  )enabledr  servicer  vulns)r  r   r  r.   get_tokengroups_user
whoamifullis_vulnerable2r   enrollment_servicesr   getrC   r   rQ   rR   )r;   r}  esr  resultsr  rT   r   r  
is_enabledr  r  trr   s                  r=   do_certify2zMSLDAPClientConsole.do_certify2,  s     ;((%(888888882Ekk
;b@
A
AAj
?
@
@@**E*::::::::95
1B6
7
77
*
+
++7;!_AA(KKKKKKKKK
Y  _//11111111HC
Ym$K  x

!
!+
.
.C
3xx1}}		%BJ
2ww!||.RZ  '
(-
/Q
)G
33Q
)H
44Q/J
&&Q
Q 9 9aAAAs1vzz(B777788aa
1XXX = U ^^E#& >
%%s   F=G Gc                   K   	 |                      d           d{V }|du rt          d|z            |t          d          |                     d           d{V }|du rt          d|z            |t          d          |D ]}t          |           ||                                                    d          d	u rjd}|'| j                            |           d{V \  }}|||D ]<}|                    |          \  }	}
|	d	u rt          |
           t          |           =n|D ]}t          |           d	S #  t          j
                     Y dS xY w)
zADCA security testFr  Nr  r  r  r  vulnT)r  r   r  rC   r   
startswithr.   r  is_vulnerablerQ   rR   )r;   cmdr}  r	  r  
enrollmentr  rT   r  isvulnreasons              r=   
do_certifyzMSLDAPClientConsole.do_certifyk  s     %((%(888888882Ekk
;b@
A
AAj
?
@
@@**E*::::::::95
1B6
7
77
*
+
++  z	*	o
yy{{f%%--[#CCHMMMMMMMMk3	y  --k::nff	4V}}}X  
8____
$
%%s   EE
 
E"c                    K   	 | j                                          d{V \  }}||t          |           dS #  t          j                     Y dS xY w)zSimple whoamiNF)r.   whoamirC   rQ   rR   )r;   r   rT   s      r=   do_whoamirawz MSLDAPClientConsole.do_whoamiraw  sl      O**,,,,,,,,83	o
I:::::
%%s	   5; Ac                   K   	 | j                                          d{V \  }}|||D ]}t          ||         t                    du rt	          |d||                    :t          ||         t
                    du r@||         D ]7}t	          d|dd                    ||         |                   d           8dS #  t          j                     Y dS xY w)	zFull whoamiNTr   zGroup:  (ri  ))FN)	r.   r  r,   r   rC   dictr   rQ   rR   )r;   r   rT   r  rb   s        r=   	do_whoamizMSLDAPClientConsole.do_whoami  s     O..0000000083	o
I 9 9q#a&#$&&
qqq#a&&!""""	CFD	!	!T	)	)!f 9 9e$))CF1I"6"6"6"678888
$
++s   C C Cc                   K   	 t          d           | j                                        2 3 d{V \  }}}}||t          d|z             g }||j        j        D ]q}|j        t          j        k    rZ	 |                     |j	        d           d{V }|
                    |           P#  |
                    |j	                   Y nxY wr|D ]}t          d|z             |It          d|j        dd                                         z             t          d	|j        z             nt          d
           t          d           &6 dS #  t          j                     Y dS xY w)zcLists all managed service accounts (MSA). If user has permissions it retrieves the password as wellz----------------------------------------------NzUsername: %sFr  zAllowed machine: %sPassword: %szPassword -NT-: %szPassword: <EMPTY>)rC   r.   	list_gmsarC  rG  AceTyper   ACCESS_ALLOWED_ACE_TYPEr  rH  r   CurrentPasswordr  nt_hashrQ   rR   )	r;   r  membershipspwblobrT   allowed_machinesr   rt   mnames	            r=   do_gmsazMSLDAPClientConsole.do_gmsa  s     	89999=9R9R9T9T ; ; ; ; ; ; ;5^[&#
Y	.>
)***"' + +	'9	9	9+&&uy5&AAAAAAAA%%%%+	***** 
: # + +!E)****
>F23B37;;===>>>
/0000
	
9::::) :U9T9T,
%%s/   (E EAE 67B.-E .C
B	E E-c                   K   	 ddl }i }i }| j                                        2 3 d{V \  }}|||                                ||j        <   	 |j        |                                ||j        <   O#  t          t          |                                                     Y xY w6 t          dd          5 } |j	        ||           ddd           n# 1 swxY w Y   t          ddd          5 }|
                    d           d}|D ]}|d	|d
||         dz  }|
                    |           |
                    d           ddd           dS # 1 swxY w Y   dS #  t          j                     Y dS xY w)z2Generates schema data. This will take a long time.r   Nzadschema.jsonr   zadschema.pyrg   )r   zLDAP_WELL_KNOWN_ATTRS = {
z	"z" : z,
}F)r   r.   r   to_dictlDAPDisplayNameisSingleValuedget_typerC   r   r   r   rQ   rR   )	r;   r   r   testattrr   rT   r   r   attrnames	            r=   do_genschemaz MSLDAPClientConsole.do_genschema  sP     ;;;:8#BBDD ' ' ' ' ' ' '^Y
Y,5,=,=,?,?Jy()' ,,5,>,>,@,@hy()'
5""$$%%&&&&&  E 	_S!! QDIj              ]C2... !GG+,,,D A A	T888Xh-?-?-?@@TTGGDMMMGGCLLL                 
%%sv   !E( B)$E( #A43E( 40B&$E( :CE( CE( C E( 5AEE( EE( "E#E( (F c                   K   	 | j                             ||           d{V \  }}}||t          |           t          d|j        z             t          d|z             dS #  t	          j                     Y dS xY w)zAdds a new computer accountNzsAMAccountName: %sr!  F)r.   add_computerrC   rr   rQ   rR   )r;   computernamer  computerrT   s        r=   do_addcomputerz"MSLDAPClientConsole.do_addcomputer  s      	#'?#?#?h#W#WWWWWWW8Xs	o
I???	 7	7888(	"#####
%%s   A!A' 'A?c                    K   	 | j                             ||           d{V }||t          d           dS #  t          j                     Y dS xY w)z(Changes the sAMAccountName of a given DNNOKF)r.   change_samaccountnamerC   rQ   rR   )r;   r   newnamerT   s       r=   do_changesamaccountnamez+MSLDAPClientConsole.do_changesamaccountname  sl      44RAA	A	A	A	A	A	A3	o
I;;;;;
%%s	   4: Ac                 @  K   	 t          d           | j                                        2 3 d{V \  }}||t          |           6 | j                                        2 3 d{V \  }}||t          |           6 dS #  t	          j                     Y dS xY w)z*Lists all unconstrained delegation objectsz*Objects with Unconstrained Delegation set:NF)rC   r.   get_unconstrained_machinesget_unconstrained_usersrQ   rR   r  s      r=   do_unconstrainedz$MSLDAPClientConsole.do_unconstrained  s      	5666?EEGG       ZUC
Y	%LLLL H
  ?BBDD       ZUC
Y	%LLLL EDD
%%s!   (B A
2B $B*B Bc                 8  K   	 t          d           | j                                        2 3 d{V \  }}|||                    dd          }|                    dg           D ]}t          |d|           R6 dS #  t	          j                     Y dS xY w)z(Lists all constrained delegation objectsz(Objects with Constrained Delegation set:Nrr   rg   zmsDS-AllowedToDelegateToz -> F)rC   r.   get_all_constrainedr  rQ   rR   )r;   r   rT   snamer  s        r=   do_constrainedz"MSLDAPClientConsole.do_constrained  s      	3444?>>@@ $ $ $ $ $ $ $ZUC
YII&++EYY1266 $ $
"####$	 A@@
%%s   (B A>AB Bc                    K   	 t          d           | j                                        2 3 d{V \  }}||t          |           6 dS #  t          j                     Y dS xY w)zLists all S4U2Proxy objectszS4U2Proxy set:NF)rC   r.   get_all_s4u2proxyrQ   rR   r  s      r=   do_s4u2proxyz MSLDAPClientConsole.do_s4u2proxy%  s      		?<<>>       ZUC
Y	%LLLL ?>>

%%s   (A A
A A%c                    K   	 | j                                         2 3 d{V \  }}|||j        d         dk    rt          |j                   46 dS #  t	          j                     Y dS xY w)ztesting, dontuseNr}   rt   TF)r.   get_all_objectaclobjectClassrC   rQ   rR   r  s      r=   do_testzMSLDAPClientConsole.do_test2  s      ?<<>>       ZUC
Y&&
5 ? $
%%s   A A/A A,c                   K   	 | j                                         2 3 d{V \  }}}||t          |           |du r#|D ]}t          d|           t                       G6 dS #  t          j                     Y dS xY w)zLists all DNS zonesNFr   T)r.   dnslistzonesrC   rQ   rR   )r;   to_print_propsr   propsrT   props         r=   do_dnszoneszMSLDAPClientConsole.do_dnszonesI  s      "&/">">"@"@       UE3
Y	%LLL  
3	GGGG #A $
%%s   A' A$AA' 'A?c           	        K   	 |dk    rd }dt           j                                                             d          z  }t          d|z            }t	          |ddd          5 }| j                            |          2 3 d {V \  }}}}|||                                }	d	                    |||j	        j
        |	                                g          }
|                    |
d
z              |                    d           6 	 d d d            n# 1 swxY w Y   dS # t          $ r}t          j                     Y d }~dS d }~ww xY w)Nrg   r   r   r   r   r   r   r   r   r   r   TF)r   r   r   r   r   r.   r   r   r   r   r   r   r   r   r   rQ   rR   )r;   zoner   r   r   r   r   r   rT   r   r   r   s               r=   
do_dnsdumpzMSLDAPClientConsole.do_dnsdump_  s     
bjjD!2!6!6!8!8!A!A/!R!RR<
6E
F
F
F4\3v>>> 	!-1_-G-G-M-M       )fdHci((**ZIIvtX]%79K9K9M9MNOOTWWTF]	[[^^^^ .N-M	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 $	   
%%%%%sI   A"D# &DDBD
D# DD# DD# #
E-EEc                    K   	 d}| j                             |dg          2 3 d{V \  }}||t          |           6 dS #  t          j                     Y dS xY w)zNLists potentially abusable machine accounts created with pre windows-2000 flagz*(&(userAccountControl=4128)(logonCount=0))rr   )r   NTF)r.   r   rC   rQ   rR   )r;   r   r   rT   s       r=   
do_pre2000zMSLDAPClientConsole.do_pre2000v  s      
75?66uJZI[6\\       ZUC
Y	%LLLL	 ]
 $
%%s   A AA Ac                   K   	 || j         vrt          j                            dt	          | j                   z  |          }t          j                            |          }|t          j        dt	          | j                   z  <   |j        	                    |           || j         |<   n| j         |         }t          |          D ]s}t          ||          }t          |t                    rLt          |t                    r7|t          ur. || | j                  }|                    |           d{V c S tt%          d           dS #  t'          j                     Y dS xY w)zLoads a plugin and runs itzplugin_module_%sNzoNo plugin class found in that module! Please make sure you have a class that inherits from MSLDAPConsolePlugin!F)r9   	importlibutilspec_from_file_locationr   module_from_specsysmodulesloaderexec_moduledirgetattrr,   r   
issubclassr   r.   runrC   rQ   rR   )r;   
pluginpathrunargsspecplugin_modulerc   r3  plugin_instances           r=   	do_pluginzMSLDAPClientConsole.do_plugin  so     --->112Ds4K`GaGa2acmnnDN33D99MCPCK"S)>%?%??@KM***(5D*%%)*5M=!!  t
-
&
&C#t /C1D!E!E /#UhJhJhs411_!%%g...........	
{|||5
%%s   D4E 9E E#c                    K   	 | j                                         2 3 d{V \  }}||t          |           6 dS #  t          j                     Y dS xY w)z3Lists all delegated managed service accounts (DMSA)NTF)r.   get_all_dmsasrC   rQ   rR   r  s      r=   do_dmsaszMSLDAPClientConsole.do_dmsas  s      ?88::       ZUC
Y	%LLLL ; $
%%s   > ;> Ar   managedaccountprecededbylinkc                    K   	 dd|fgi}| j                             ||           d{V \  }}||t          d           dS #  t          j                     Y dS xY w)z1Adds a managed account preceded by link to a DMSAz!msDS-ManagedAccountPrecededByLinkrm   Nr<  Fr.   r   rC   rQ   rR   )r;   r   rp  r   rS   rT   s         r=   &do_dmsaaddmanagedaccountprecededbylinkz:MSLDAPClientConsole.do_dmsaaddmanagedaccountprecededbylink  s      
'I7S+T*U7 /((W5555555561c	o
I;;;;;
%%   >A Adelegatedmsastatec                    K   	 dd|fgi}| j                             ||           d{V \  }}||t          d           dS #  t          j                     Y dS xY w)z&Sets the delegated MSA state of a DMSAzmsDS-DelegatedMSAStaterm   Nr<  Frr  )r;   r   ru  r   rS   rT   s         r=   do_dmsasetdelegatedmsastatez/MSLDAPClientConsole.do_dmsasetdelegatedmsastate  s      ,= >?7 /((W5555555561c	o
I;;;;;
%%rt  rZ  computersidc                    K   	 | j                             ||           d{V \  }}||t          d           dS #  t          j                     Y dS xY w)zsThis will create a dmsa service user that can be used for neferious reasons, but DO NOT USE THIS FOR ANYTHING ELSE!Nr<  F)r.   create_broken_dmsa_userrC   rQ   rR   )r;   rZ  rx  rS   rT   s        r=   do_create_broken_dmsa_userz.MSLDAPClientConsole.do_create_broken_dmsa_user  sp      /99';OOOOOOOO61c	o
I;;;;;
%%r  targetdnuserdnc                   K   	 | j                             |d           d{V \  }}||| j                             |           d{V \  }}||t          j        |          }t          |d         d                   }t          j        |          }t                      }t          j
        |          |_        t          d          |_        t          j        |_        |j        j                            |           | j                             ||                                t*          j                   d{V \  }	}||t/          d           dS #  t1          j                     Y dS xY w)z+Adds a generic write ACE to a target objectNr   rn   r   r  r  F)r.   get_obj_by_dnrv  r   r  r   rJ  rK  r	   r   r<  rH  r   r   GENERIC_WRITErI  rC  rG  r   rd  r  r$   r  rC   rQ   rR   )
r;   r|  r}  	userentryrT   targetsdr  rQ  rP  rS   s
             r=   do_add_genericwritez'MSLDAPClientConsole.do_add_genericwrite  s     /77EEEEEEEE>9c	o
I<<XFFFFFFFF=8S	o
I!,X668)L)+6778M(##6			3_X&&371++3<+38	;3/55h@Q@QYg  ZB5  C  C  C  C  C  C  C  C61c	o
I	
%%s   EE E0r{  c                 &   K   dt           f fd}|j        dS g } ||j                  du rR j                            |j                   d{V \  }}|(|                    g dg |j        |j        dgd           |j        j        D ]}g }g }g }	|j        t          j
        t          j        fv r}t          j        t          j        t          j        t          j        t          j        t          j        t          j        fD ]-}
|
t          |j                  v r|                    |
           .t+          |          dk    r|j        t          j        k    rRt          |j                  d	v r'|                    t          |j                             t+          |          dk    r  |t          |j                            d
u rA|	                    t          |j                             t+          |	          dk    r}g }|	D ]J} j                            |           d{V \  }}|(|+|j        }|                    ||d           K|                    |d                    d |D                       ||d           |S )z.Checks if the SD has the badsuccessor flag setr$  c                     t          |           } | dv rdS |                     j                  du rdS dD ]}|                     |          du r dS dS )N)r9  zS-1-5-18TF)r/  z-519)r   r  r2   endswith)r$  suffixr;   s     r=   is_excluded_sidzBMSLDAPClientConsole.check_badsuccessor_sd.<locals>.is_excluded_sid  st    	S3	)))4	nnT_%%..5!  v
||Ft##DD $
%r>   NFOWNER)r   r$  )rights
rights_strotypesusersr   )z$00000000-0000-0000-0000-000000000000z$0feb936f-47b3-49f2-9386-1dedc2c23765T|c                     g | ]	}|j         
S  )r   ).0rights     r=   
<listcomp>z=MSLDAPClientConsole.check_badsuccessor_sd.<locals>.<listcomp>7  s    <<<EUZ<<<r>   )r   rC  r@  r.   get_user_by_sidr   rr   rG  r$  r   r%  ACCESS_ALLOWED_OBJECT_ACE_TYPEr   GENERIC_ALLr  WRITE_OWNER
WRITE_DACLCREATE_CHILDr  r  rI  r   rp  rH  r   )r;   r{  r  r
  rt   rT   rP  r  r  sidsmaskr  r$  	user_names   `             r=   check_badsuccessor_sdz)MSLDAPClientConsole.check_badsuccessor_sd  s     	# 	 	 	 	 	 	 W_
%'_RX%''_44RX>>>>>>>>94	kNN #x 	
 
 
 
 
 W\ - -c66
4	kg5w7]^^^ ,o.K_Mhjy  kE  GV  Gc  et  e  AP  A_  `  ))))mmD	&kkQ	kW;;;
3>nnn]]3s~&&'''
6{{aoc#'ll##t++;;s37||	$ii1nn5 
 
so55c::::::::ID#
|#I	LL      >>88<<V<<<==	      
.r>   c                   K   	 g }| j                                         2 3 d{V \  }}||||j        d|j        v r|                    |j                   =6 t          |          dk    rt          d           t          d           | j                                         2 3 d{V \  }}|||| j                             |j	                   d{V \  }}|<t          j        |          }|S|j        [|                     |           d{V }|D ]>}|d         D ]3}t          |j	         d|d          d	|d
          d|d                     4?6 dS #  t          j                     Y dS xY w)z=Checks if Badsuccessor vulnerability is present on the domainN2025r   z2[-] No domain controllers with Windows 2025 found!z[*] Checking OUs regardless...r  z, r   r  r$  z) r  F)r.   get_all_domain_controllersoperatingSystemr   rr   r   rC   r   rv  rl   r   r  rC  r  rQ   rR   )	r;   dc_listr9  rT   r   r{  r
  resultrt   s	            r=   do_badsuccessor_checkz)MSLDAPClientConsole.do_badsuccessor_check=  s0     #7"oHHJJ - - - - - - -]Xs
Y')))^^H+,,, K 
'lla	
>???	
*+++?6688 a a a a a a aZUC
Y}O778OPPPPPPPPGB
		'	+	+B	z	w..r22222222G a a a au&__$v,__$u+__P\I]__````aa 988"
%%s#   E" ABE" 'E-B3E" "E:)N)T)r   )F)r   rg   )r   )Nr   )r   )NTr  )Z__name__
__module____qualname__r*   rU   rX   rZ   r\   rd   ro   ru   ry   r   r   r   r   rP   r   r   r   r   r   r  r  r  r  r  r  r!  r%  r(  r-  r4  r7  rR  rW  r\  ra  rf  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r,  r5  r:  r?  rC  rG  rJ  rN  rT  rW  rY  rl  ro  r   rs  r
  rw  r{  r  r   r  r  r  r>   r=   r&   r&   2   s          (       D  
  
  
   "         (k k kZ  A A A  8      0      "  % % % %N   :   (  *              &   ? ? ?B            ,( ( ( (T  ( ( (T  ." " "  
 
 

 
 

 
 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 

 
 
                   D  B   8   = = = =~' ' ' 'R	 	 	  $  <  8   	 	 	  &         ,   .     0
 
 
3 ]`     s    	C 	S 	 	 	 	c #    6P*= P P P Pd% % % % %r>   r&   c           	        K   dd l }| j        t          | j                  }n[|                                dk    rt	          d          ddlm} ddlm} ddl	m
}m}  |j        | j                  } |            }| j        L| j        }	| j                            d          | j                            d          \  }	}
 ||	|
          }n|d	         xt#          |d	                   dk    r_ ||d	         |d	         |d	         |d
                   }| j        du r. ||d	         |d	         |j        d|d	         |d
                   }nt	          d          t)          ||          }t          |          }t#          | j                  dk    rX| j        du rt/          d           d S |                    dg            d {V }|du rd S |                                 d {V  d S | j        D ]j}|dk    r|                                 d {V   d S t5          j        |          }|                    |d         |dd                     d {V }|du r d S kd S )Nr   Windowsz,This function only works on Windows systems!r   )get_logon_info)MSLDAPTargetUniProtorl  )ipportlogonserverdnsdomainname)r  r  dc_ipr|  Ti|  )r  r  protocolr  r  r|  z8Couldnt find logonserver! Are you connected to a domain?zNot starting interactive!loginFr   r   )platformr<   r&   systemr   asyauth.common.credentialsr   winacl.functions.highlevelr  msldap.commons.targetr  r  get_sspiauthtypetargetr   r   r   ldapsCLIENT_SSL_TCPr   commandsno_interactiverC   _run_single_commandrf  shlex)argsr  clientr   r  r  r  creduserinfor  r  r  factoryr   commandr  s                   r=   amainr  d  s     Htx((&&__)##	A	B	BB666666777777::::::::			.	.$^(	[2
ks'{  %%HBLBT***66})c(=2I.J.JQ.N.N\'M"_%	  F zTl	-	 -((]#o&  V N
O
OO!$//'w''&!	D  	$%%%	6(("55555555#E\\	6

  gnn
**,,
FF	W		3))#a&#abb'::	:	:	:	:	:	:3	Ull
FF  r>   c                  h   dd l } dd l}d}d}t          j        ||d          }|t	          j                    z  }|dz  }|                     d|          }|                    dd	d
dd           |                    ddd           |                                dk    r|                    d          }|                    dd           |                    d          }|                    ddd           |                    dd           |                    ddd           n|                    d d           |                    d!d"d#$           |	                                }|j
        dk    r t          j        t          j        %           nyt          j        t          j                   t#          j        t          j                   t%          j        t          j                   t          j        t          j        %           t'          j        t+          |                     d S )&Nr   zgLDAP : basic LDAP protocol
	LDAPS: LDAP over SSL
	GC   : Global Catalog
	GCS  : Global Catalog over SSLa  ntlm     : SASL NTLM authentication
	kerberos : SASL Kerberos authentication
	sspi-ntlm: SSPI authentication using NTLM (Windows only, uses SASL)
	sspi-kerberos: SSPI authentication using Kerberos (Windows only, uses SASL)
	simple   : LDAP SIMPLE authentication
	plain    : PLAIN authentication
	sicily   : SICILY authentication
	ssl      : Authenticate with SSL certificate
	none     : No authentication, anonymous bind
	rg   a  
Examples:
All of the following examples show LDAP auth to the DC of TEST.corp domain at Win2019AD.test.corp(10.10.10.2)
Kerberos authentication needs the FQDN of the DC, so we use the 'dc' parameter to specify the DC.

Anonymous BIND:
	ldap://10.10.10.2
Username and password authentication using NTLM over plaintext LDAP:
	ldap+ntlm-password://TEST\victim:password@10.10.10.2
Username and password authentication using NTLM over SSL/TLS:
	ldaps+ntlm-password://TEST\victim:password@10.10.10.2
Username and password authentication using Kerberos over plaintext LDAP:
	ldap+kerberos-password://TEST\victim:password@<hostname>/?dc=10.10.10.2
Username and password authentication using Kerberos over SSL/TLS:
	ldaps+kerberos-password://TEST\victim:password@<hostname>/?dc=10.10.10.2
NTLM authentication using the NT hash over plaintext LDAP:
	ldap+ntlm-nt://TEST\victim:<NThash>@10.10.10.2
Kerberos authentication using the RC4 key over plaintext LDAP:
	ldap+kerberos-rc4://TEST\victim:<RC4key>@<hostname>/?dc=10.10.10.2
SICILY authentication using the NT hash over plaintext LDAP:
	ldap+sicily-nt://TEST\victim:<NThash>@10.10.10.2
Kerberos authentication using AES key over plaintext LDAP:
	ldap+kerberos-aes://TEST\victim:<AESkey>@<hostname>/?dc=10.10.10.2
Kerberos authentication using CCACHE file over plaintext LDAP:
	ldap+kerberos-ccache://TEST\victim:<CCACHEfile>@<hostname>/?dc=10.10.10.2
Kerberos authentication using keytab file over plaintext LDAP:
	ldap+kerberos-keytab://TEST\victim:<KEYTABfile>@<hostname>/?dc=10.10.10.2
Kerberos authentication using P12 or PFX file over plaintext LDAP (notice that keyfile password is at the 'password' filed):
	ldap+kerberos-pfx://TEST\victim:admin@<hostname>/?dc=10.10.10.2&keydata=<P12file>
SSL authentication using P12 or PFX file over plaintext LDAP, automatically performs STARTTLS:
	ldap+ssl://10.10.10.2/?sslcert=<P12file>&sslpassword=<P12password>'
SSL authentication using P12 or PFX file over SSL/TLS LDAP:
	ldaps+ssl://10.10.10.2/?sslcert=<P12file>&sslpassword=<P12password>'
zMS LDAP library)descriptionusagez-vz	--verbosecountzVerbosity, can be stacked)actiondefaulthelpz-nz--no-interactive
store_true)r  r  URL)titlez--urlz Connection string in URL format.)r  zWithout URLz
--authtypentlm)r  r  z--targetzAddress of LDAP server.z--ldapsz	Use LDAPS)r  r  r<   r  r   zTakes a series of commands which will be executed until error encountered. If the command is 'i' is encountered during execution it drops back to interactive shell.)nargsr  r   )argparser  r   get_helpr   ArgumentParseradd_argumentr  add_argument_group
parse_argsverboser   basicConfigINFOsocksloggersetLevelDEBUGr   
authloggerasynciorf  r  )	r  r  	protocols
authprotosr  parsergroupgroup2r  s	            r=   mainr    sJ   #	 
		:r	:	:)


 ! !D 
!
!.?
!
O
OT;wHcdddT-lCCCOO""

#
#%
#
0
0%W#EFFF$$=$99&lF9[\\\j'@AAAi;GGGG 	e"DEEEZs  2X  Y  Y  Y 	LA	GL)))))w}%%%/'-   gm$$$	GM**** 	U4[[r>   __main__)Gr  rJ  r   importlib.utilr[  r   r   r   r  r_  rQ   r  r   asyauthr   r  r  r   asysocksr  asysocks.unicomm.common.targetr   r   r   winacl.dtyp.acer	   r
   r   r   r   r   winacl.dtyp.aclr   winacl.dtyp.guidr   winacl.dtyp.security_descriptorr   r   winacl.dtyp.sidr   msldapmsldap.commons.factoryr   msldap.commons.pluginr    msldap.examples.utils.completersr   msldap.external.aiocmd.aiocmdr   #msldap.external.asciitree.asciitreer   msldap.ldap_objectsr   r   r   r   r   r   r   r    )msldap.ldap_objects.adcertificatetemplater!   r"   r#   #msldap.wintypes.asn1.sdflagsrequestr$   r)   r&   r  r  r  r  r>   r=   <module>r     s,            				  



       ( ( ( ( ( ( 4 4 4 4 4 4 * * * * * * 4 4 4 4 4 4            & & & & & & & & & & & & & & & &        ! ! ! ! ! ! H H H H H H H H             8 8 8 8 8 8 5 5 5 5 5 5 : : : : : : 0 0 0 0 0 0 ; ; ; ; ; ;H H H H H H H H H H H H H H H H H H H H          ? > > > > >p p p p p&1 p p pd9: : :xQ Q Qj z r>   