CrackMapExec:一款针对大型Windows活动目录的后渗透工具

CrackMapExec(CME)是一款后渗透利用工具,可帮助自动化大型活动目录(AD)网络安全评估任务。其缔造者@byt3bl33d3r称,该工具的生存概念是,“利用AD内置功能/协议达成其功能,并规避大多数终端防护/IDS/IPS解决方案。”

尽管该项目主要用于攻击性目的(例如红队),但蓝队同样可以使用该工具来评估账户权限,模拟攻击,查找配置错误。CME还使用PowerSploit工具包和Impacket库。

安装

重要:在以下所有Bleeding-Edge安装说明中,请注意传递给git clone命令的—recursive标志。该标志会让git自动下载CME所依赖的所有子模块。如果没有的话,安装将会失败。

Kali

最新稳定版

Bleeging-Edge

强烈建议使用pipenv来安装CME,以避免依赖项与你的系统包产生冲突。

Debian/Ubuntu

强烈建议使用pipenv来安装CME,以避免依赖项与你的系统包产生冲突。

最新稳定版

Bleeging-Edge

Arch Linux

强烈建议使用pipenv来安装CME,以避免依赖项与你的系统包产生冲突。

最新稳定版

Bleeging-Edge

Mac OSX

强烈建议使用pipenv来安装CME,以避免依赖项与你的系统包产生冲突。

最新稳定版

Bleeging-Edge

Logs

CME输出的任何日志文件都将存储在~/.cme/logs中。

使用协议

从v4开始,CME将其功能划分为简化/组合/模块化(simplify/orginize/modularize)参数解析和功能,并允许将CME的功能扩展至Active Directory之外。

要使用特定协议,请运行:cme

查看可用协议

运行cme —help将列出可用的常规选项和协议:

查看协议选项

运行cme —help 查看指定协议所支持的选项。例如,查看所有SMB协议选项:

目标格式

每个协议都支持以CIDR表示法,IP地址,IP范围,主机名或包含目标列表的文件格式。

使用凭据

当你需要使用凭据时,你可以运行以下命令:

注意1:使用包含特殊符号的用户名和密码时,请用单引号将它们包起来,这样shell才会将它们作为字符串解析。

示例:

注意2:由于Python的参数解析库中存在bug,以短划线( - )开头的凭据将抛出至少一个参数错误消息。要解决此问题,请使用“long”参数格式指定凭据(请注意=符号):

使用数据库中的凭据集

通过使用-id标志指定凭据ID(或多个凭证ID),CME将自动从后端数据库中提取该凭据,并用它进行身份验证:

爆破&Password Spraying

所有协议都支持暴力破解和密码喷洒(Password Spraying)。有关使用特定协议进行暴力破解/密码喷洒的详细信息,请参阅wiki的相应部分。

通过指定一个文件或多个值,CME将使用指定协议自动爆破登录所有目标:

示例:

使用模块

从v3.1开始,模块的加载和使用方式发生了变化,以使CME更具可移植性并可被打包。

v4.0的每个协议现在都可以拥有自己的模块集。

查看协议的可用模块

运行 cme -L 查看指定协议的可用模块。

例如,查看SMB协议的所有模块:

使用模块

运行 cme -M 。

例如,运行SMB Mimikatz模块:

查看模块选项

运行 cme -M —options 查看模块所支持的选项,例如:

使用模块选项

使用-o标志指定模块选项。所有选项都以KEY=value (msfvenom style)的形式指定。

示例:

数据库常规用法

CME会自动将所有使用/转储的凭证(以及其他信息),存储在首次运行时设置的数据库中。

从CME v4开始,每个协议都有自己的数据库。此外,v4引入了workspaces(类似于Metasploit)。

有关特定协议数据库的详细信息和用法,请参阅Wiki的相应部分。

所有workspaces及其相关数据库都存储在~/.cme/workspaces中。

与数据库交互

CME附带了一个辅助命令行脚本cmedb,用于与后端数据库的交互。 键入命令cmedb进入命令shell:

Workspaces

默认workspace的名称为’default’(如提示中所示)。一旦你选择了workspace,那么你在CME中执行的所有操作都将存储在该workspace中。

创建工作区:

切换工作区:

访问协议的数据库

要访问协议的数据库,只需运行proto ,例如:

正如你在提示中看到的那样,我们现在位于名为“test”的工作区中,并使用SMB协议的数据库。每个协议数据库都有自己的一组命令,你可以运行help命令来查看可用选项。

有关特定协议数据库的详细信息和用法,请参阅Wiki的相应部分。

切换协议数据库:

SMB协议

Passing-the-Hash

CME支持使用带-H标志的Passing-The-Hash攻击通过SMB进行身份验证:

NULL Sessions

你可以使用’’作为用户名和/或密码,即空会话登录

示例:

使用SMB数据库

待完成~

从Empire和Metasploit导入凭据

CME非常适合作为Exploit/Post-Exploitation框架之间的“粘合剂”。为此我们添加了许多功能,以便尽可能轻松地让使用者从Empire和Metasploit导入凭据和信息。

从Empire导入凭据

cmedb命令行脚本可以使用它的RESTful API,直接导入存储在Empire数据库中的凭据,从而使Empire无缝重放转储凭据。有关cmedb脚本和CME数据库的更多信息,请参阅:https://github.com/byt3bl33d3r/CrackMapExec/wiki/Using-the-Database

首先,启动Empire的RESTful API服务器:

CME用于向Empire的RESTful API进行身份验证的用户名和密码存储在~/.cme/cme.conf文件中:

导入Empire的凭据,只需启动cmedb脚本并运行import empire命令:

从Metasploit导入凭据

即将实现~

Getting Shells 101

Empire Agent

我们可以使用empire_exec模块,来执行Empire Agent的初始stager。在后台,模块连接到Empire的RESTful API,并为指定的listener生成launcher并执行它。

首先,设置一个Empire listener:

启动Empire的RESTful API服务器:

CME用于向Empire的RESTful API进行身份验证的用户名和密码存储在~/.cme/cme.conf文件中:

然后运行empire_exec模块,并指定listener名称:

Meterpreter

我们可以使用metinject模块,使用PowerSploit的Invoke-Shellcode.ps1脚本直接将meterpreter注入到内存。

首先,设置handler处理程序:

然后运行metinject模块,并指定LHOST和LPORT的值:

命令执行

在Windows系统上执行命令需要拥有管理员凭据,CME会在身份验证成功时通过向输出添加 ‘(Pwn3d!)’ 来自动告诉你正在使用的凭据集是否具有对主机的管理访问权限。

有关如何使用凭据的详细信息,请参阅凭据部分。

执行方法

CME有三种不同的命令执行方法:

1.wmiexec:通过WMI执行命令

2.atexe:通过Windows任务调度程序调度任务来执行命令

3.smbexec:通过创建和运行服务来执行命令

默认情况下,CME将按以下顺序执行命令(如果失败逐一尝试):

1.wmiexec

2.atexec

3.smbexec

如果你想要指定命令执行的方法,可以使用—exec-method标志。

执行命令

在下面的示例中,我们尝试使用-x标志在目标上执行whoami命令:

你还可以使用-X标志来直接执行PowerShell命令:

Powershell命令可以强制在32位进程中运行:

其他开关包括:

相关命令参考

SMB:命令参考

以下我们假设你已将Kali Linux主机连接到内网,且主机的IP段为192.168.1.0/24。如果CME没有任何的输出,则可能是你的命令有误。

映射/枚举

映射网络主机

返回存活主机列表

结果如下:

生成中继列表

映射实时网络主机并仅保存需要SMB签名的主机列表。列表格式为每行一个IP。

结果如下:

枚举共享

枚举有效sessions

枚举磁盘

枚举登录用户

枚举域用户

通过爆破RID枚举用户

枚举域组

枚举本地组

获取域密码策略

身份验证+凭据检查(域)

登录失败 [ - ]

成功登录 [+] Domain\Username:Password

本地管理员访问结果在登录确认后添加了(Pwn3d!),如下所示。

以下检查将尝试对整个/24网段进行身份验证,你也可以针对单个目标。

User/Password

User/Hash

获取凭据后例如:

Administrator:500:aad3b435b51404eeaad3b435b51404ee:13b29964cc2480b4ef454c59562e675c:::

你可以使用完整哈希或只使用nt哈希(后半部分)

Null Sessions

如果有多个域正在运行,你可能需要使用-d来指定目标域。例如,对labnet.com域进行身份验证。

使用Username/Password列表

你可以以空格分隔 名称/密码 的形式使用多个用户名和密码。

CME接受包含用户名和密码的txt文件(每行一个用户/密码)。注意帐户锁定!

注意:在默认情况下,CME将在成功登录后退出。如果你并不想退出,可以使用—continue-on-success标志。

身份验证/凭据检查(本地)

将—local-auth添加到任何身份验证命令并尝试在本地登录。

结果如下:

获取凭证

以下示例使用用户名和明文密码,尽管用户/散列组合也可以使用。

需要目标域控制器上的域管理员或本地管理员权限。

使用secretsdump.py中的方法转储SAM哈希值

使用secretsdump.py中的方法转储LSA secrets

使用secretsdump.py中的方法从目标DC转储NTDS.dit

使用secretsdump.py中的方法从目标DC转储NTDS.dit密码历史记录

显示每个NTDS.dit帐户的pwdLastSet属性

Spidering Shares

用于spider远程系统共享。

spider C盘中文件名中带有txt的文件(找到sometxtfile.html和somefile.txt)

注意:‘$’字符必须进行转义。

WMI查询执行

有关wmi查询及语法的更多信息,请参阅:https://docs.microsoft.com/en-us/windows/desktop/wmisdk/invoking-a-synchronous-query

发出指定的WMI查询

User/Password

WMI Namespace

User/Password

HTTP:命令参考

以下我们假设你已将Kali Linux主机连接到内网,且主机的IP段为192.168.1.0/24。如果CME没有任何的输出,则可能是你的命令有误。

Own stuff using HTTP

需要安装phantomjs。如果你是通过apt-get进行安装的话,请先删除该版本,然后再从网站安装。

映射/枚举

识别HTTP(S)服务器和指纹

返回实时webservers和banners列表

默认检查:80,443,8443,8008,8080,8081 端口

结果如下:

指定端口

指定协议

所在页面截图,并以 IP:Port_Year-month-day_time.png的格式保存在“/.cme/logs”目录下。

*参考来源:github,FB小编 secist 编译,转载请注明来自FreeBuf.COM

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181002B104UD00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券