前言
在kali本机安装Empire时,由于机器环境混乱,导致各种缺少依赖或报错,因此选择在docker下安装。本篇记录安装流程以及使用过程中遇到的问题与解决思路。
Empire和MSF的区别
- Empire是基于PowerShell的,而MSF是基于Ruby的。这意味着Empire更适合针对Windows系统,而MSF更适合针对Linux系统。
- Empire的监听方式是先建立监听,再生成木马。而MSF的监听方式是先生成木马,再建立监听。这意味着Empire可以根据不同的目标系统来定制木马,而MSF需要保证木马和监听的payload一致。
docker容器,实际上就是个虚拟环境
创建Empire docker容器
//以下操作都处于root权限
启动docker:systemctl start docker
从github上克隆empire项目:git clone https://github.com/BC-SECURITY/Empire.git
进入Empire/setup目录:cd Empire/setup
获取docker里empire的环境镜像:docker pull empireproject/empire
创建docker容器并命名为empire:docker create -it -p 7000:7000 --name empire empireproject/empire /bin/bash **-p 进行pat
//搜索docker提供的镜像:docker search empire(可访问互联网的环境下运行)
//列出已获取镜像:docker image ls
//列出已有容器:docker ps -a
Empire初始化
//sudo不能忽略
运行empire容器:docker start -i empire
初始化empire:sudo ./setup/reset.sh
输入密码
启动empire:sudo ./empire
提示缺少pefile模块
//升级pip再安装pefile
wget https://bootstrap.pypa.io/pip/2.7/get-pip.py python get-pip.py ln -s /usr/local/bin/pip2.7 /usr/bin/pip
pip install pefile
成功启动empire

下次如果需要启动的话只需要运行:
启动docker:systemctl start docker
运行empire容器:docker start -i empire
Empire简单使用
环境
//kali和windows7接入Vmnet5
kali:192.168.1.130/24 windows7:192.168.1.3/24
开启监听listeners
监听listeners
uselistener 双击tab 可以看到七种模式。
使用uselistener http模块
info查看详细信息与设置(和MSF类似呀)
set设置监听名称和主机
execute执行监听
back 返回listeners
list 查看正在监听的listener
kill 删除listener
生成木马
stager,类似MSF的payload
usestager 双击tab 查看可利用stager
使用usestager windows/vbs模块
info
set name
set Host [ip:port] 端口映射后的port,即kali监听的端口
set Port [port] 端口映射前的port,即empire docker监听的端口
execute 在/tmp生成木马launcher.dll
从docker取出.vbs文件
docker ps -a //先获取containId
docker cp [containId]:/tmp/launcher.vbs /tmp/
复制到Win7执行即可反弹
排查阶段
原因
此时还不明白创建容器时指定端口转发的作用,在empire设置监听时没有对端口进行设置(默认80),导致执行木马后empire与目标机器无法建立连接。
ifconfig查看kali有一块docker0的网卡

docker0网卡对应着docker的brige虚拟网络

因此此时整个网络拓扑如下:

那就用win7 ping 下Empire

出错,怎么回事呢?
已知brige网络设置了默认网关,所有brige的数据包由172.17.0.1,也就是kali转发出去。
而Win7没有指明目标172.17.0.0/24这个网段的数据包发往何处,如图所示

给win7添加路由
//在cmd操作
route add -p 172.17.0.0 mask 255.255.0.0 192.168.1.130
再ping,这次出现请求超时的错误。
kali抓包,可以看到包确实发给kali了,但是在eth0就被掐掉了,没有任何包进入docker0。

当时我的猜想是bridge网络做了nat,而Empire没有主动连接bridge网络以外的主机,自然也没有相应的nat转换记录。
复盘:做到最后发现不仅bridge开启了nat,创建容器的时候也在kali的eth0做了pat,所以这就能解释为什么不会有包经过docker0了。
判定bridge确实开启了nat
docker network inspect bridge查看

本想着给bridge配个静态nat,没找到相关配置。
陷入沉思。。
先记录下过程吧。
写着写着博客突然想起在创建Empire容器时给其做了端口转发,试试这个突破口。
查看本地监听,的确有7000端口的监听

因此Win7访问的Empire的地址就是192.168.1.130:7000
Empire开启一个新的监听,修改这三项

使用launcher生成powershell的base64代码

复制到win7 powershell执行,成功获得代理!!!


总结
在docker下玩empire给我的感觉像是内网打外网。这次排查过程也学习到了不少docker的网络知识和命令。