Ethan's Blog

域渗透学习笔记

字数统计: 2.5k阅读时长: 9 min
2019/11/30 Share

前言

最近,要做一个技术沙龙,本来想分享一下安全研究的一些心得,但是好久之前想做一个域渗透的一个深入总结,但是一直搁置,借这个机会对域渗透的技巧总结一下!算是给自己一个交代:)

正文

这里用的是搭建好的一个域环境,吐槽:这个是真的大,下了好久~

地址:http://vulnstack.qiyuanxuetang.net/vuln/detail/3/

拓扑如下:

环境说明

内网网段:10.10.10.1/24

DMZ网段:192.168.111.1/24

配置信息

DC

IP:10.10.10.10 OS:Windows 2012(64)

应用:AD域

WEB

IP1:10.10.10.80

IP2:192.168.111.80 OS:Windows 2008(64)

应用:Weblogic 10.3.6 MSSQL 2008

PC

IP1:10.10.10.201

IP2:192.168.111.201 OS:Windows 7(32)

信息搜集

拿到环境后,首先进行端口探测,这里使用-sS参数,由于防火墙的存在不能使用icmp包,所以使用syn包探测

通过扫描端口,我们通过端口初步判断目标机存在的服务及可能存在的漏洞,如445端口开放就意味着存smb服务,存在smb服务就可能存在ms17-010/端口溢出漏洞。开放139端口,就存在Samba服务,就可能存在爆破/未授权访问/远程命令执行漏洞。开放1433端口,就存在mssql服务,可能存在爆破/注入/SA弱口令。开放3389端口,就存在远程桌面。开放7001端口就存在weblogic。

信息整理完后,我们要决定从哪条路进,这里先选择从weblogic,主要是由于weblogic的漏洞很多rce的,并且利用中间件漏洞相对于系统漏洞动静稍小些,….蓝屏什么的对吧

漏洞利用

可知WebLogic Server 版本: 10.3.6.0,这里直接使用专门扫描WebLogic漏洞的WeblogicScan来检测,除此之外还有thinkphpscan什么的。

存在CVE-2019-2729和CVE-2019-2725

反序列化漏洞是由 wls9-async 组件 导致的,该组件默认开启,看一下是否存在该漏洞

访问 192.168.3.141:7001/_async/AsyncResponseService

使用CVE-2019-2725的exp成功执行命令

上传shell

但是使用上面这个shell,终究不方便,我们要拿自己的shell,比如冰蝎shell或者msf shell和cs shell,所以尝试反弹shell,使用powershell 等方式失败,接着尝试远程下载各种方式也失败。于是尝试搭建smb服务器,进行文件共享一个冰蝎shell,至于为什么用冰蝎,等下你就明白了

使用kali自带的

使用网上公布的带命令回显的方式,把共享的shell复制到目标机,参考:https://github.com/lufeirider/CVE-2019-2725

顺便吐槽一句,网上那些没搞明白的大佬不要乱发文章了 ,看了别人的文章上传shell,结果一直连接不了。。。,结果上传目录根本不是web目录,最后修改上传/servers/AdminServer/tmp/_WL_internal/bea_wls9_async_response/8tpkys/war/目录才拿到shell

拿到冰蝎shell可以和msf联动,拿到msf shell

在kali打开msf设置监听

成功拿到shell,这里说明一下,冰蝎给的msf反弹shell过时了,现在为java/meterpreter/reverse_tcp

tip:如果cmd出现乱码,切换编码即可:chcp 65001

Cobaltstrike

本来并不是非要再拿一个cs shell,但是有时候cs用着确实比msf方便,刚开始想通过注入进程,直接迁移,结果莫名失败,后来使用cs的powershell命令payload,发现不能执行。。再者就生成了一个exe,成功弹出shell

运行portscan模块,扫描内网

不得不说,确实比msf的友好!

顺便说一下。怎么把cs的shell转到msf

先在cs设置一个foreign的listener,然后在你想派生的shell,右键spawn,选择对应的listener

然后再msf同时设置监听

proxy

拿到shell,尝试进行开启socks5代理,可以使用msf的auxiliary/server/socks5模块,也可以用Regeorg + proxychains。

将reGeorg的tunnel文件上传到肉鸡服务器到网站目录下,攻击机执行python reGeorgSocksProxy.py -p 6666 -u http://test.com/tunnel.php。然后修改proxychains.conf 配置文件,改成socks5 127.0.0.1 6666,在使用proxychains nmap进行扫描就行了

不过,这样用nmap的时候,有点慢,所以换了auxiliary/server/socks5模块。

首先查看并设置路由

把10网段添加到目标机路由

设置好之后就使用socks5辅助模块

然后,按照之前的方法,设置proxychains即可。

扫整个网段同样很慢,所以直接扫域控主机

直接使用Cobalt Strike的socks代理亦可,方法类似,不再演示。

Dump hash
mimikatz

尝试读取服务器密码

直接上传mimikatz对lsass.exe进行操作很容易被杀软发现,通过使用powershell和procdump来绕过,这里powershell亦有限制,procdump为微软官方工具,所以不会被杀。所以使用procdump来先dump内存hash,保存为dmp文件,然后用mimikatz在本地破解明文hash。

1
procdump64.exe -accepteula -ma lsass.exe lsass.dmp

然后在本地对dump下来的hash进行破解

1
mimikatz.exe "sekurlsa::minidump neicun.dmp" "sekurlsa::logonPasswords full" exit

发现两个用户,一个Administrator,一个mssql,密码都为1qaz@WSX。

使用cs的logonpasswords功能dmup明文密码

LaZagne

这里再介绍LaZagne一个收集密码工具-LaZagne,每个软件都使用不同的技术(纯文本,API,自定义算法,数据库等)存储其密码,这个工具是用来获取存储在本地计算机上的密码,诸如浏览器密码等等

工具地址:https://github.com/AlessandroZ/LaZagne

横向移动-pth攻击

pass-the-hash在内网渗透中是一种很经典的攻击方式,原理就是攻击者可以直接通过LM Hash和NTLM Hash访问远程主机或服务,而不用提供明文密码。

这类攻击适用于:

  • 域/工作组环境
  • 可以获得hash,但是条件不允许对hash爆破
  • 内网中存在和当前机器相同的密码

微软也对pth打过补丁(KB22871997),然而,在测试中发现,在打了补丁之后,常规的Pass The Hash已经无法成功,唯独默认的 Administrator (SID 500)账号例外,利用这个账号仍可以进行Pass The Hash远程连接。
如果禁用了ntlm认证,psexec无法利用获得的ntlm hash进行远程连接,但是使用mimi还是可以攻击成功的。

首先经过查看发现主机并没打KB22871997(拿到权限后查看),所以普通用户也可进行pth攻击,对域控进行攻击,这个用户必须是域控主机上的用户,我们需要一个用户名和对应的hash。之前从拿下的主机中有个de1ay的用户

由于用其它方法均失败了,所以直接使用cs的pth模块进行尝试

进行之前查看能不能访问域控资源

在cs里面右键session,选择Access->make token

再次访问域控资源,发现成功

尝试添加域控管理员,这里是添加hacker用户,两次截图的结果有点不一致,之前忘截了一张补了个新用户

1
2
net group "Domain admins" hacker /add /domain
net user hacker 123456@abc /add /doamin

建立IPC$连接上传木马
建立后可以访问目标机器的文件(上传、下载),也可以在目标机器上运行命令。 上传和下载文件直接通过copy命令就可以,不过路径换成UNC路径。

常用命令

1
2
3
net use \\ip\ipc$ pawword /user:username   建立IPC连接 
copy hacker.exe \\10.10.10.10\C$\windows\temp 复制本地文件到目标服务器
copy \\10.10.10.10\C$\windows\temp\hash.txt 复制目标服务器文件到本地

然后用msf生成一个木马用copy命令上传,不用cs的原因是cs的路由问题真是搞不懂~路由添加失败,所以用msf添加路由进行监听弹shell

1
copy hacker.exe \\host\c$\windows\temp\foobar.exe ##IPC拷贝木马文件

然后wmic命令执行木马

msf设置监听,收到shell

先添加路由

成功拿到域控的shell

横向移动-ptt

ptt攻击的部分就不是简单的ntlm认证了,它是利用Kerberos协议进行攻击的,常见的攻击方法:MS14-068,Golden ticket,SILVER TICKET.

简要介绍一下Kerberos协议具体工作方法:

  • 客户机将明文密码进行ntlm哈希,然后和时间戳一起加密(使用krbtgt密码hash作为密钥),发送给kdc(域控),kdc对用户进行检测,成功之后创建TGT(Ticket-Granting Ticket)

  • 将TGT进行加密签名返回给客户机器,只有域用户krbtgt才能读取kerberos中tgt数据

  • 然后客户机将tgt发送给域控制器KDC请求TGS(票证授权服务)票证,并且对tgt进行检测

  • 检测成功之后,将目标服务账户的ntlm以及tgt进行加密,将加密后的结果返回给客户机。

    ms14-068

MS14-068是密钥分发中心(KDC)服务中的Windows漏洞。它允许经过身份验证的用户在其Kerberos票证(TGT)中插入任意PAC(表示所有用户权限的结构)。该漏洞位于kdcsvc.dll域控制器的密钥分发中心(KDC)中。用户可以通过呈现具有改变的PAC的Kerberos TGT来获得票证.

利用过程

1.whoami/user 得到普通域用户的sid

2.使用 pykek 生成票据,用 proxychains 把 pykek 带入内网

3.第三步不是必要,使用上面的生成的即可进行凭据注入,但是转换成kirbi 格式可以进行更多操作。使用使用 KrbCredExport进行转换

4.使用cs进行凭据注入

清除凭证

1
kerberos_ticket_purge

使用kerberos_ticket_use进行凭据注入

成功访问域控资源,接下来的操作和上面相同,利用$ipc拿shell即可

写在最后

拿到域控后,就可以做多事情了,不再继续了,比如:制作黄金票据,导出域hash等等。

CATALOG
  1. 1. 前言
  2. 2. 正文
    1. 2.1. 环境说明
    2. 2.2. 配置信息
    3. 2.3. 信息搜集
    4. 2.4. 漏洞利用
      1. 2.4.1. Cobaltstrike
      2. 2.4.2. proxy
      3. 2.4.3. Dump hash
        1. 2.4.3.1. mimikatz
        2. 2.4.3.2. LaZagne
      4. 2.4.4. 横向移动-pth攻击
      5. 2.4.5. 横向移动-ptt
        1. 2.4.5.1. ms14-068
      6. 2.4.6. 写在最后