docker

发布时间 2023-03-29 15:36:40作者: summer14

 

前言

 

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