Empire的进攻性研究

Author:zusheng

Link:https://isbase.cc

0x01 Empire简介及部署

Empire是一个开源,跨平台的远程管理和后渗透开发框架。本文是个大杂烩,介绍了Empire的基本功能,还总结Empire常见模块用途,以及渗透中的一些案例研究。

项目地址:https://github.com/EmpireProject/Empire

Empire的部署

官方支持部署系统Kali、Debian、Ubuntu。

本文环境在系统Kali 2019.4下部署完成。

a1

部署坑点:

a2

install.sh脚本安装的requests模块版本和urllib3模块不兼容,卸载requests重新安装解决问题。

 

0x02 Empire基础知识

在使用工具前,对工具有一个基础概念会让使用更轻松一点,分析工具目录用途是最快了解工具架构的方法。

Empire目录结构

 

listeners

Empire listeners功能主要用于监听返回的shell。

相关命令:

命令功能
listeners进入listeners交互菜单
uselistener使用一个Empire listener模块
info显示listener模块设置信息
set设置listener模块信息
execute执行

进入listeners交互菜单

a3

使用一个Empire listener模块

a4

显示listener模块设置信息

a4

 

Stagers

Empire Stagers功能主要用于生成反弹shell的payload。

a6

相关命令:

命令功能
usestager使用Empire stager
info显示usestager模块设置信息
set设置usestager模块信息
execute执行

使用Empire stager

a7

显示usestager模块设置信息

a8

设置usestager模块信息并执行

a9

Payload生成成功

a10

 

Agents

Empire Agents功能主要用于管理反弹shell的会话。

Agent命令功能
agents进入agents菜单
back返回上一个菜单
bypassuac运行BypassUAC,生成一个新的Agent
clear清理agent任务
creds显示数据库中的凭据
download下载文件
exit退出
help帮助
info显示Agent信息
injectshellcodeshellcode注入,例如:injectshellcode <meter_listener>
jobs返回工作列表或者停止正在运行的工作
kill停止特定的进程名称或ID
killdate获取或设置agent的停止日期
list显示存活的agents或listeners
listeners进入存活listeners交互菜单
lostlimit检查更改丢失的agent
main返回主菜单
mimikatz运行Invoke-Mimikatz
psinject将启动器注入远程进程,例如:psinject <pid/process_name>
pth通过Mimikatz执行Pass The Hash
rename重命名agent
resource从文件中读取并执行Empire命令列表。
revtoself使用凭证/令牌还原令牌特权
sc截屏,默认为PNG。 给出压缩率意味着使用JPEG。 例如 sc [1-100]
scriptcmd在当前导入的PowerShell脚本中执行一个功能。
scriptimport导入PowerShell脚本并将其保存在代理的内存中。
searchmodule搜索Empire模块
shell执行shell命令
shinject将非meterpreter侦听器shellcode注入远程进程。例如:shinject
sleepagent睡眠间隔
spawn为给定的侦听器名称生成一个新的Empire agent
steal_token使用凭证/令牌模拟给定进程ID的令牌。
sysinfo获取系统信息
updatecomms动态地将代理通信更新到另一个侦听器
updateprofile更新代理连接配置文件
upload上传文件
usemodule使用Empire模块
workinghours获取或设置agent的工作时间(9:00-17:00)

使用interact命令进入Agents交互菜单

a11

 

0x03 权限提升

在Agents交互菜单,Username一栏没有*就需要权限提升。

a12

 

UAC Bypasses

用户admin在管理员组,但是我们的Agents没有提升到管理员权限,这是因为UAC在发挥重要,没有以管理员身份进行运行。

a13

利用UAC Bypasses提升权限

a14

 

0x04 横向移动

Empire已经实现以下几种常见的横向移动模块。

 

Pass-the-hash

Empire的credentials/mimikatz/pth模块通过Invoke-Mimikaz的sekurlsa::pth函数实现了哈希传递。

首先我们使用mimikaz提取用户凭据,creds查看用户凭据

a15

利用situational_awareness/network/powerview/get_user收集用户,看他能干什么。

a16

可以发现这个用户是域管理员,我们可以利用凭据来访问域中的其他机器。

pth 2获取凭据库中CredID为2用户运行程序的PID

a17

然后利用steal_token窃取身份令牌

a18

访问成功

a19

 

Invoke-WMI

WMI可以描述为一组管理Windows系统的方法和功能。我们可以把它当作API来与Windows系统进行相互交流。WMI在渗透测试中的价值在于它不需要下载和安装, 因为WMI是Windows系统自带功能。而且整个运行过程都在计算机内存中发生,不会留下任何痕迹。

首先获取计算机名:

a20

加载lateral_movement/invoke_wmi模块

a21

需要设置ComputerName和Listener

返回agent VBFT4SPG

a22

 

Invoke-PsExec

利用PsExec进行横向移动,一般情况下不建议使用。

使用模块powershell/situational_awareness/network/powerview/find_localadmin_access查找可以利用PsExec进行横向移动的机器。

a23

加载lateral_movement/invoke_psexec模块,需要设置ComputerName和Listener

返回agent PLTAH594

a24

 

PSRemoting

如果远程计算机运行Enable-PSRemoting将计算机配置为接收远程命令,我们就可以利用PSRemoting来进行横向移动。

配置PowerShell会话的远程访问

a25

更多关于PSRemoting的知识请看下方链接:

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/enable-psremoting?view=powershell-6

 

0x05 Empire 204个模块信息列表

code_execution(代码执行)

模块名功能
code_execution/invoke_dllinjection使用PowerSploit的Invoke-DLLInjection将Dll注入您选择的进程ID。
code_execution/invoke_metasploitpayload生成一个新的隐藏PowerShell窗口,该窗口下载并执行Metasploit Payload。这与Metasploit模块theexploit/multi/scripts/web_delivery互动
code_execution/invoke_ntsd使用NT Symbolic Debugger执行Empire launcher代码
code_execution/invoke_reflectivepeinjection使用PowerSploit的Invoke-ReflectivePEInjection进行反射PE注入,将DLL/EXE加载进PowerShell进程中,或者将DLL加载进远程进程中
code_execution/invoke_shellcode使用PowerSploit的Invoke--Shellcode注入Shellcode
code_execution/invoke_shellcodemsil执行shellcode

 

collection(信息采集)

模块名功能
collection/ChromeDump收集chrome浏览器保存的密码和浏览历史记录
collection/FoxDump收集Firefox浏览器保存的密码和浏览历史记录
collection/USBKeylogger*利用ETW作为键盘记录
collection/WebcamRecorder从摄像头捕获视频
collection/browser_data搜索浏览器历史记录或书签
collection/clipboard_monitor按指定的时间间隔监视剪贴板
collection/file_finder查找域中的敏感文件
collection/find_interesting_file查找域中的敏感文件
collection/get_indexed_item获取Windows desktop search索引文件
collection/get_sql_column_sample_data从目标SQL Server返回列信息。
collection/get_sql_query在目标SQL服务器上执行查询
collection/inveighWindows PowerShell LLMNR/mDNS/NBNS中间人工具
collection/keylogger键盘记录到keystrokes.txt文件中,文件位置/downloads//keystrokes.txt
collection/minidump进程的全内存转储,PowerSploit的Out-Minidump.ps1
collection/netripper将NetRipper注入目标进程,该进程使用API挂钩以拦截来自低特权用户的网络流量和与加密相关的功能,从而能够在加密之前/解密之后捕获纯文本流量和加密流量。
collection/ninjacopy*通过读取原始卷并解析NTFS结构,从NTFS分区卷中复制文件。
collection/packet_capture*使用netsh在主机上启动数据包捕获。
collection/prompt提示当前用户在表单框中输入其凭据,然后返回结果。
collection/screenshot屏幕截图
collection/vaults/add_keepass_config_trigger寻找KeePass配置
collection/vaults/find_keepass_config此模块查找并解析KeePass.config.xml (2.X)和KeePass.config.xml (1.X)文件。
collection/vaults/get_keepass_config_trigger该模块从KeePass 2.X配置XML文件中提取触发器说明
collection/vaults/keethief此模块检索未锁定的KeePass数据库的database mastey key信息
collection/vaults/remove_keepass_config_trigger该模块从Find-KeePassConfig找到的所有KeePass配置中删除所有触发器

 

credentials(身份凭证)

模块名功能
credentials/credential_injection*运行PowerSploit的Invoke-CredentialInjection创建具有明文凭证的登录,而不会触发事件ID 4648使用显式凭据尝试登录
credentials/enum_cred_store从Windows凭据管理器中转储当前交互用户的纯文本凭据
credentials/invoke_kerberoast为具有非空服务主体名称(SPN)的所有用户请求kerberos票据,并将其提取为John或Hashcat可用格式
credentials/powerdump*使用Posh-SecMod的Invoke-PowerDump从本地系统中转储哈希
credentials/sessiongopher提取WinSCP已保存的会话和密码
credentials/tokens运行PowerSploit的Invoke-TokenManipulation枚举可用的登录令牌,并使用它们创建新的进程
credentials/vault_credential*运行PowerSploit的Get-VaultCredential以显示Windows Vault凭证对象,包括明文Web凭证
credentials/mimikatz/cache*运行PowerSploit的Invoke-Mimikatz函数以提取MSCache(v2) hashes
credentials/mimikatz/certs*运行PowerSploit的Invoke-Mimikatz函数将所有证书提取到本地目录
credentials/mimikatz/command*使用自定义命令运行PowerSploit的Invoke-Mimikatz函数
credentials/mimikatz/dcsync运行PowerSploit的Invoke-Mimikatz函数,以通过Mimikatz的lsadump::dcsync模块提取给定的帐户密码
credentials/mimikatz/dcsync_hashdump运行PowerSploit的Invoke-Mimikatz函数,以使用Mimikatz的lsadump::dcsync模块收集所有域哈希
credentials/mimikatz/extract_tickets运行PowerSploit的Invoke-Mimikatz函数,以base64编码形式从内存中提取kerberos票据
credentials/mimikatz/golden_ticket运行PowerSploit的Invoke-Mimikatz函数以生成黄金票据并将其注入内存
credentials/mimikatz/keys*运行PowerSploit的Invoke-Mimikatz函数以将所有密钥提取到本地目录
credentials/mimikatz/logonpasswords*运行PowerSploit的Invoke-Mimikatz函数以从内存中提取纯文本凭据。
credentials/mimikatz/lsadump*运行PowerSploit的Invoke-Mimikatz函数以从内存中提取特定的用户哈希。 在域控制器上很有用。
credentials/mimikatz/mimitokens*运行PowerSploit的Invoke-Mimikatz函数以列出或枚举令牌。
credentials/mimikatz/pth*运行PowerSploit的Invoke-Mimikatz函数以执行sekurlsa::pth来创建一个新进程。
credentials/mimikatz/purge运行PowerSploit的Invoke-Mimikatz函数从内存中清除所有当前的kerberos票据
credentials/mimikatz/sam*运行PowerSploit的Invoke-Mimikatz函数从安全帐户管理器(SAM)数据库中提取哈希
credentials/mimikatz/silver_ticket运行PowerSploit的Invoke-Mimikatz函数,以生成服务器/服务的白银票据并将其注入内存。
credentials/mimikatz/trust_keys*运行PowerSploit的Invoke-Mimikatz函数,从域控制器中提取域信任密钥。

 

exfiltration(数据窃取)

模块名功能
exfiltration/egresscheck可用于帮助检查主机与客户端系统之间的出口,详细信息:https://github.com/stufus/egresscheck-framework
exfiltration/exfil_dropbox下载文件到dropbox

 

exploitation(漏洞利用EXP)

模块名功能
exploitation/exploit_eternalblueMS17_010永恒之蓝漏洞利用
exploitation/exploit_jbossJboss漏洞利用
exploitation/exploit_jenkins在未授权访问的Jenkins脚本控制台上运行命令

 

lateral_movement(横向移动)

模块名功能
lateral_movement/inveigh_relaysmb中继攻击
lateral_movement/invoke_dcom使用DCOM在远程主机上执行stager
lateral_movement/invoke_executemsbuild该模块利用WMI和MSBuild编译并执行一个包含Empire launcher的xml文件。
lateral_movement/invoke_psexecPsExec横向移动
lateral_movement/invoke_psremoting远程PowerShell横向移动
lateral_movement/invoke_smbexecSMBExec横向移动
lateral_movement/invoke_sqloscmd利用xp_cmdshell横向移动
lateral_movement/invoke_sshcommand利用SSH横向移动
lateral_movement/invoke_wmi利用WMI横向移动
lateral_movement/invoke_wmi_debugger使用WMI将远程机器上的二进制文件的调试器设置为cmd.exe或stager
lateral_movement/jenkins_script_console利用未授权访问的Jenkins脚本控制台横向移动
lateral_movement/new_gpo_immediate_task利用GPO中的计划任务横向移动

 

management(管理)

模块名功能
management/enable_rdp*在远程计算机上启用RDP并添加防火墙例外。
management/disable_rdp*在远程计算机上禁用RDP
management/downgrade_account在给定的域帐户上设置可逆加密,然后强制下次用户登录时设置密码。
management/enable_multi_rdp*允许多个用户建立同时的RDP连接。
management/get_domain_sid返回当前指定域的SID
management/honeyhash*将人工凭证注入到LSASS
management/invoke_script运行自定义脚本
management/lock锁定工作站的显示
management/logoff从计算机上注销当前用户(或所有用户)
management/psinject利用Powershell注入Stephen Fewer形成的ReflectivePick,该ReflectivePick在远程过程中从内存执行PS代码
management/reflective_inject利用Powershell注入Stephen Fewer形成的ReflectivePick,该ReflectivePick在远程过程中从内存执行PS代码
management/restart重新启动指定的机器
management/runas绕过GPO路径限制
management/shinject将PIC Shellcode Payload注入目标进程
management/sid_to_user将指定的域sid转换为用户
management/spawn在新的powershell.exe进程中生成新agent
management/spawnas使用指定的登录凭据生成agent
management/switch_listener切换listener
management/timestomp通过'调用Set-MacAttribute执行类似耗时的功能
management/user_to_sid将指定的domain\user转换为domain sid
management/vncInvoke-Vnc在内存中执行VNC代理并启动反向连接
management/wdigest_downgrade*将计算机上的wdigest设置为使用显式凭据
management/zipfolder压缩目标文件夹以供以后渗透
management/mailraider/disable_security此函数检查ObjectModelGuard
management/mailraider/get_emailitems返回指定文件夹的所有项目
management/mailraider/get_subfolders返回指定顶级文件夹中所有文件夹的列表
management/mailraider/mail_search在给定的Outlook文件夹中搜索项目
management/mailraider/search_gal返回与指定搜索条件匹配的所有exchange users
management/mailraider/send_mail使用自定义或默认模板将电子邮件发送到指定地址。
management/mailraider/view_email选择指定的文件夹,然后在指定的索引处输出电子邮件项目

 

persistence(持久化)

模块名功能
persistence/elevated/registry*计算机启动项持久化,通过HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Run进行持久化,运行一个stager或者脚本
persistence/elevated/schtasks*计划任务持久化
persistence/elevated/wmi*WMI事件订阅持久化
persistence/elevated/wmi_updater*WMI订阅持久化
persistence/misc/add_netuser将域用户或本地用户添加到当前(或远程)计算机
persistence/misc/add_sid_history*运行PowerSploit的Invoke-Mimikatz函数以执行misc::addsid以添加用户的sid历史记录。 仅适用于域控制器
persistence/misc/debugger*将指定目标二进制文件的调试器设置为cmd.exe
persistence/misc/disable_machine_acct_change*禁止目标系统的机器帐户自动更改其密码
persistence/misc/get_ssps枚举所有已加载的安全软件包
persistence/misc/install_ssp*安装安全支持提供程序dll
persistence/misc/memssp*运行PowerSploit的Invoke-Mimikatz函数以执行misc::memssp,将所有身份验证事件记录到C:\Windows\System32\mimisla.log
persistence/misc/skeleton_key*运行PowerSploit的Invoke-Mimikatz函数来执行misc::skeleton,植入密码mimikatz的万能钥匙。 仅适用于域控制器
persistence/powerbreach/deaduserDeadUserBackdoor后门,详细信息:http://www.sixdub.net/?p=535
persistence/powerbreach/eventlog*启动事件循环后门
persistence/powerbreach/resolver启动解析器后门
persistence/userland/backdoor_lnkLNK文件后门
persistence/userland/registry计算机启动项持久化,通过HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Run进行持久化,运行一个stager或者脚本
persistence/userland/schtasks计划任务持久化

 

privesc(权限提升)

模块名功能
privesc/ask弹出一个对话框,询问用户是否要以管理员身份运行powershell
privesc/bypassuacUAC旁路
privesc/bypassuac_envUAC旁路,通过SilentCleanup
privesc/bypassuac_eventvwrUAC旁路,通过在.msc文件扩展名上执行映像劫持并启动eventvwr.exe来绕过UAC
privesc/bypassuac_fodhelperUAC旁路,利用fodhelper.exe
privesc/bypassuac_sdctlbypassUAC旁路,通过对sdclt执行注册表修改来绕过UAC
privesc/bypassuac_tokenmanipulationUAC旁路,基于Matt Nelson @enigma0x3在Derbycon 2017上发布的脚本的绕过UAC模块
privesc/bypassuac_wscriptUAC旁路,利用Windows Script Host
privesc/getsystem*获取system特权
privesc/gpp利用windows组策略首选项缺陷获取系统帐号
privesc/mcafee_sitelist寻找McAfee SiteList.xml文件的纯文本密码
privesc/ms16-032MS16-032本地提权
privesc/ms16-135MS16-135本地提权
privesc/tater利用PowerShell实现的Hot Potato提权
privesc/powerup/allchecks检查目标主机的攻击向量以进行权限提升
privesc/powerup/find_dllhijack查找通用的.DLL劫持
privesc/powerup/service_exe_restore还原备份的服务二进制文件
privesc/powerup/service_exe_stager备份服务的二进制文件,并用启动stager.bat的二进制文件替换原始文件
privesc/powerup/service_exe_useradd修改目标服务以创建本地用户并将其添加到本地管理员
privesc/powerup/service_stager修改目标服务以执行Empire stager
privesc/powerup/service_useradd修改目标服务以创建本地用户并将其添加到本地管理员
privesc/powerup/write_dllhijacker将可劫持的.dll以及.dll调用的stager.bat一起写到指定路径。 wlbsctrl.dll在Windows 7上运行良好。需要重新启动计算机

 

recon(侦察)

模块名功能
recon/find_fruit在网络范围内搜索潜在的易受攻击的Web服务
recon/get_sql_server_login_default_pw发现在当前广播域之内的SQL Server实例
recon/http_login针对基本身份验证测试凭据

 

situational_awareness(态势感知)

模块名功能
situational_awareness/host/antivirusproduct获取防病毒产品信息
situational_awareness/host/computerdetails*枚举有关系统的有用信息
situational_awareness/host/dnsserver枚举系统使用的DNS服务器
situational_awareness/host/findtrusteddocuments该模块将枚举适当的注册表
situational_awareness/host/get_pathacl枚举给定文件路径的ACL
situational_awareness/host/get_proxy枚举当前用户的代理服务器和WPAD内容
situational_awareness/host/get_uaclevel枚举UAC级别
situational_awareness/host/monitortcpconnections监视主机与指定域名或IPv4地址的TCP连接,对于会话劫持和查找与敏感服务进行交互的用户很有用
situational_awareness/host/paranoia*持续检查运行过程中是否存在可疑用户
situational_awareness/host/winenum收集有关主机和当前用户上下文的相关信息
situational_awareness/network/arpscan针对给定范围的IPv4 IP地址执行ARP扫描
situational_awareness/network/bloodhound执行BloodHound数据收集
situational_awareness/network/get_exploitable_system查询Active Directory以查找可能容易受到Metasploit Exploit的系统
situational_awareness/network/get_spn获取服务主体名称(SPN)
situational_awareness/network/get_sql_instance_domain返回SQL Server实例列表
situational_awareness/network/get_sql_server_info从目标SQL Server返回基本服务器和用户信息
situational_awareness/network/portscan使用常规套接字进行简单的端口扫描
situational_awareness/network/reverse_dns执行给定IPv4 IP范围的DNS反向查找
situational_awareness/network/smbautobrute针对用户名/密码列表运行SMB暴力破解
situational_awareness/network/smbscanner在多台机器上测试用户名/密码组合
situational_awareness/network/powerview/find_foreign_group枚举给定域的组的所有成员,并查找不在查询域中的用户
situational_awareness/network/powerview/find_foreign_user枚举在其主域之外的组中的用户
situational_awareness/network/powerview/find_gpo_computer_admin获取计算机(或GPO)对象,并确定哪些用户/组对该对象具有管理访问权限
situational_awareness/network/powerview/find_gpo_location获取用户名或组名,并确定其具有通过GPO进行管理访问的计算机
situational_awareness/network/powerview/find_localadmin_access在当前用户具有“本地管理员”访问权限的本地域上查找计算机
situational_awareness/network/powerview/find_managed_security_group此功能检索域中的所有安全组
situational_awareness/network/powerview/get_cached_rdpconnection使用远程注册表功能来查询计算机上“ Windows远程桌面连接客户端”的所有信息
situational_awareness/network/powerview/get_computer查询当前计算机对象的域
situational_awareness/network/powerview/get_dfs_share返回给定域的所有容错分布式文件系统的列表
situational_awareness/network/powerview/get_domain_controller返回当前域或指定域的域控制器
situational_awareness/network/powerview/get_domain_policy返回给定域或域控制器的默认域或DC策略
situational_awareness/network/powerview/get_domain_trust返回当前域或指定域的所有域信任
situational_awareness/network/powerview/get_fileserver返回从用户主目录提取的所有文件服务器的列表
situational_awareness/network/powerview/get_forest返回有关给定域森林的信息
situational_awareness/network/powerview/get_forest_domain返回给定林的所有域
situational_awareness/network/powerview/get_gpo获取域中所有当前GPO的列表
situational_awareness/network/powerview/get_group获取域中所有当前组的列表
situational_awareness/network/powerview/get_group_member返回给定组的成员
situational_awareness/network/powerview/get_localgroup返回本地或远程计算机上指定本地组中所有当前用户的列表
situational_awareness/network/powerview/get_loggedon执行NetWkstaUserEnum Win32API调用以查询主动登录主机的用户
situational_awareness/network/powerview/get_object_acl返回与特定活动目录对象关联的ACL
situational_awareness/network/powerview/get_ou获取域中所有当前OU的列表
situational_awareness/network/powerview/get_rdp_session在给定的RDP远程服务中查询活动会话和原始IP
situational_awareness/network/powerview/get_session执行NetSessionEnum Win32API调用以查询主机上的活动会话
situational_awareness/network/powerview/get_site获取域中所有当前站点的列表
situational_awareness/network/powerview/get_subnet获取域中所有当前子网的列表
situational_awareness/network/powerview/get_user查询给定用户或指定域中用户的信息
situational_awareness/network/powerview/map_domain_trust使用.CSV输出映射所有可访问的域信任
situational_awareness/network/powerview/process_hunter查询远程机器的进程列表
situational_awareness/network/powerview/set_ad_object使用SID,名称或SamAccountName来查询指定的域对象
situational_awareness/network/powerview/share_finder在域中的计算机上查找共享
situational_awareness/network/powerview/user_hunter查找指定组的用户登录的机器

 

trollsploit(嬉戏)

模块名功能
trollsploit/get_schwifty播放Schwifty视频,同时把计算机音量设置最大
trollsploit/message发送一个消息框
trollsploit/process_killer终止以特定名称开头的任何进程
trollsploit/rick_ascii生成一个新的powershell.exe进程运行Lee Holmes' ASCII Rick Roll
trollsploit/rick_astley运行SadProcessor's beeping rickroll
trollsploit/thunderstruck播放Thunderstruck视频,同时把计算机音量设置最大
trollsploit/voicetroll通过目标上的合成语音朗读文本
trollsploit/wallpaper将.jpg图片上传到目标机器并将其设置为桌面壁纸
trollsploit/wlmdr在任务栏中显示气球提示