o
    j.                  
   @   s  d dl mZ d dl mZ d dl m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mZ d d
lmZmZ G dd dZedkrCeej ejdddZejdddd ejddddd ejdddd ejdddd ejdddd ed Zejd!dd"d#d ejd$dd%d ejd&dd'd ejd(dd)d*d ed+Zejd,dd-d.d ejd/dd0d1d eej d2kre!  e"d2 e# Z$e%e$j&e$j' ee$j(e$j)e$j*e$j+e$j,\Z-Z.Z/Z0Z0e$_,e-d3kre1d4 e"d2 zee.e/e-e$Z2e23  W dS  e4yB Z5 ze6 j7ej8kr0d dl9Z9e9:  e;e<e5 W Y dZ5[5dS dZ5[5ww dS )5    )division)print_function)unicode_literalsN)datetime)version)UF_ACCOUNTDISABLE)logger)parse_identity
ldap_login)ldapldapasn1c                   @   s0   e Zd Zdd Zedd Zdd Zdd Zd	S )
GetADComputersc                 C   s$  || _ || _|| _|| _d | _d| _d| _|j| _|j	| _
|j| _|j| _|j| _|j| _|jd ur<|jd\| _| _| jd}d| _|D ]}|  jd| 7  _qG| jd d | _| jrxg d| _g d| _dd	d
 t| jD | _d S g d| _g d| _ddd
 t| jD | _d S )N :.zdc=%s,)SAM AcctNameDNS Hostname
OS VersionOS	IPAddress)   #   r   r       c                 S      g | ]
\}}d ||f qS z	{%d:%ds}  .0numwidthr   r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/../../../bin/GetADComputers.py
<listcomp>M       z+GetADComputers.__init__.<locals>.<listcomp>)r   r   r   r   )r   r   r   r   c                 S   r   r   r   r   r   r   r"   r#   S   r$   )options_GetADComputers__username_GetADComputers__password_GetADComputers__domain_GetADComputers__target_GetADComputers__lmhash_GetADComputers__nthashaesKey_GetADComputers__aesKeyk_GetADComputers__doKerberosdc_ip_GetADComputers__kdcIPdc_host_GetADComputers__kdcHostuser_GetADComputers__requestUser	resolveIP_GetADComputers__resolveIPhashessplitbaseDN_GetADComputers__header_GetADComputers__colLenjoin	enumerate_GetADComputers__outputFormat)selfusernamepassworddomaincmdLineOptionsdomainPartsir   r   r"   __init__.   s6   


 

 zGetADComputers.__init__c                 C   s   | d8 } | d } | S )Nl     }*{Gi r   )tr   r   r"   getUnixTimeU   s   zGetADComputers.getUnixTimec              
   C   s  t |tjdur
d S d}d}d}d}z| jrd}tj }tjjddtj_| jgtjj_	|d D ]}t
|d dkrW|d d	  d
ddu rW|d d	  d
}t
|d dkr|d d	  d
ddu r|d d	  d
}ztjj|d d	  d
ddd}	|	D ]}
|
j}qW n   d}Y t
|d dkr|d d	  d
ddu r|d d	  d
}t
|d dkr|d d	  d
ddu r|d d	  d
}q2t| jj|||||g  W d S |d D ]}t
|d dkr|d d	  d
ddu r|d d	  d
}t
|d dkrD|d d	  d
ddu rD|d d	  d
}t
|d dkri|d d	  d
ddu ri|d d	  d
}t
|d dkr|d d	  d
ddu r|d d	  d
}qt| jj||||g  W d S  ty } ztjddd tdt
|  W Y d }~d S d }~ww )NTr   F)	configure
attributestypesAMAccountNamevalsr   zutf-8$dNSHostNameA)tcpz<unable to resolve>operatingSystemoperatingSystemVersion	Exception)exc_infoz-Skipping item, cannot process due to error %s)
isinstancer   SearchResultEntryr7   dnsresolverResolverdefault_resolverr1   nameserversstrasOctetsdecodeendswithresolveaddressprintr?   formatrU   loggingdebugerror)r@   itemrM   rP   rS   rT   resolvedIPAddressr6   	attributeanswersrdataer   r   r"   processRecord[   sn   
  $   """"zGetADComputers.processRecordc                 C   s   t | j| j| j| j| j| j| j| j| j	| j
| j}|j| _td| j  t| jj| j  tddd | jD  d}ztd|  tjdd}|j|g d	d
|g| jd W n	 tjyc    w |  d S )Nz)Querying %s for information about domain.z  c                 S   s   g | ]}d | qS )-r   )r   itemLenr   r   r"   r#      s    z&GetADComputers.run.<locals>.<listcomp>z2(&(objectCategory=computer)(objectClass=computer))zSearch Filter=%sd   )size)rM   rP   rS   rT   r   )searchFilterrK   	sizeLimitsearchControlsperRecordCallback)r
   r)   r:   r1   r3   r/   r&   r'   r(   r*   r+   r-   _dstHostrf   inford   r?   re   r;   r=   r<   rg   r   SimplePagedResultsControlsearchro   LDAPSearchErrorclose)r@   ldapConnectionrt   scr   r   r"   run   s   2 zGetADComputers.runN)__name__
__module____qualname__rG   staticmethodrI   ro   r   r   r   r   r"   r   -   s    '
Br   __main__Tz'Queries target domain for computer data)add_helpdescriptiontargetstorezdomain[/username[:password]])actionhelpz-userrA   z Requests data for specific user )r   metavarr   z-ts
store_truez&Adds timestamp to every logging outputz-debugzTurn DEBUG output ONz
-resolveIPzZTries to resolve the IP address of computer objects, by performing the nslookup on the DC.authenticationz-hasheszLMHASH:NTHASHz$NTLM hashes, format is LMHASH:NTHASHz-no-passz&don't ask for password (useful for -k)z-kzUse Kerberos authentication. Grabs credentials from ccache file (KRB5CCNAME) based on target parameters. If valid credentials cannot be found, it will use the ones specified in the command linez-aesKeyzhex keyz<AES key to use for Kerberos Authentication (128 or 256 bits)
connectionz-dc-ipz
ip addresszoIP Address of the domain controller. If ommited it use the domain part (FQDN) specified in the target parameterz-dc-hosthostnamez|Hostname of the domain controller to use. If ommited, the domain part (FQDN) specified in the account parameter will be used   r   zDomain should be specified!)=
__future__r   r   r   argparserf   sysdns.resolverrY   r   impacketr   impacket.dcerpc.v5.samrr   impacket.examplesr   impacket.examples.utilsr	   r
   impacket.ldapr   r   r   r   rd   BANNERArgumentParserparseradd_argumentadd_argument_groupgrouplenargv
print_helpexit
parse_argsr%   inittsrg   r   r8   no_passr,   r.   rC   rA   rB   _criticalexecuterr   rU   rn   	getLoggerlevelDEBUG	traceback	print_excrh   r^   r   r   r   r"   <module>   sf    




(


