前言:
定了一个小目标,今年把OSCP拿下。于是,时隔一年多,重启了渗透测试的学习之路,之前打的VulnHub系列靶机还是比较基础的,基本只利用了一个中间件漏洞就能拿到shell,然后靶机系统都非常老,一个脏牛基本都能提权成功。为了更靠近OSCP考试的难度,这次直接上上强度,选择的靶机是HTB(Hack The Box) 的靶机--Pilgrimage。
开干:
1、环境准备
HTB的靶机
选择HTB的Pilgrimage靶机,下载HTB的VPN。
Kali
将HTB的vpn文件put到kali中,使用命令 openvpn + ovpn文件路径 命令开启vpn连接。连接成功会在HTB网页右上角显示CONNECTIONS
2、扫描开放端口
使用htb的vpn连接成功后,靶机ip就会出现在页面中,省去了之前定位目标靶机的步骤。
使用nmap命令扫描开放端口
可以看到,开放了2个端口,一个22 SSH,一个80 HTTP。
3、寻找漏洞尝试利用
先访问下80端口的http服务:
可以看到Home界面有个图像缩放(shrink)功能,另外还有一个登陆页面,一个注册页面。
看到一个图像上传功能,我第一时间就想到任意文件读取漏洞,种个PHP大马进去。结果遇见两个问题,第一个就是将一句话大马放到请求体传输过去,返回错误。第二个就是 将一句话大马 塞进图片中间传输过去,返回了一个文件URL,访问那个URL又是404。
按照以往靶机的经验,如果任意文件读取漏洞存在的话,就能轻松反弹shell,所以在这边做了很长时间的尝试,都是以失败告终。
看到还有个登陆页面和注册页面,试了试admin弱口令,不存在弱口令问题。对登陆、注册接口做了sql注入的扫描,未发现sql注入漏洞。接下来使用dirb 对这个网址进行目录爆破也没发现什么新的目录。
这个靶机按照以往的方法进行渗透,有点黔驴技穷的意思了。
接下来小伙伴推荐了一个web漏洞扫描工具:Nikto
Nikto是一款开源的(GPL)网页服务器扫描器,它可以对网页服务器进行全面的多种扫描,包含超过3300种有潜在危险的文件/CGIs;超过625种服务器版本;超过230种特定服务器问题。扫描项和插件可以自动更新(如果需要)。基于Whisker/libwhisker完成其底层功能。
使用nikto对靶机网站进行漏洞扫描
可以看到,这边扫出了/.git 目录,可能之前dirb爆破的字典还不够多,没扫出这个目录。
其实在我对这个靶场进行回顾时候,我发现nmap已经扫出这个目录了,只不过当初漏过了这个重要信息。
Git是一个分布式版本控制系统,可以跟踪任何一组计算机文件的更改。当我们克隆一个github项目时,就会创建.git文件夹。
下面介绍一个工具 git-dump,地址如下:https://github.com/arthaud/git-dumper ,这个工具可以直接转储对方机器上的.git目录下的文件。
可以看到除了资源文件夹,网页php文件外,还有个magick文件。尝试运行下:
可以看到这个工具叫ImageMagick,是一个图片压缩工具,工具版本为7.10-49 beta。
在exploit-db.com 上搜下这个工具有没有漏洞:
可以看到符合版本的有2个,一个dos,一个任意文件读取。能帮助我们拿更多的信息可能需要利用这个 任意文件读取的漏洞。点进去,看见PoC地址为:https://github.com/voidz0r/CVE-2022-44268
先按照目录 clone下这个工程
看到工程内容,加上上面的How to use ,大概猜想出用法如下:
1、先利用cargo run + 文件路径 命令将要读取文件的路径植入到image.png中。
2、把image.png通过ImageMagick服务压缩为图片output.png。
3、利用identify -verbose output.png解析压缩过后的图片,这时候之前给的路径对应的文件内容应该已经包含在图片中了。
4、最后解析HEX,还原文件内容。
这时候我们已经知道了ImageMagick这个组件存在一个任意文件读取漏洞,而且知道了大概这个漏洞是怎么利用的。那么问题来了,我们读取什么文件呢···
这时候又想到这个http服务,还有个登陆注册页面,那一定有个数据库存放登陆注册的用户信息。接下来就去登陆注册的php页面中查找下,是否包含数据库文件的路径。
找到数据库文件路径为: /var/db/pilgrimage
按照之前猜想的PoC使用方法
然后将image.png上传首页的图片压缩服务,下载压缩过后的图片,使用identify -verbose output.png命令解析压缩过后的图片:
可以看到这个 /var/db/pilgrimage 数据库文件的HEX已经在这了,使用python3 -c 'print(bytes.fromhex('hex内容')) 命令解析下上面这段hex:
由于是数据库文件,可能解析还有点乱码,不过可以大概猜到有个emily的用户,接下来将这段hex保存为文件,然后写个解析sqlite文件的小程序
import sqlite3
conn = sqlite3.connect('htb.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM users')
results = cursor.fetchall()
for row in results:
print(row)
conn.close()
得到结果为emily ,abigchonkyboi123,用户为emily,密码为abigchonkyboi123。
接下来用ssh尝试连接:
可以看到已经拿到shell。接下来读取第一个FLAG:
4、提权
按照传统思路,查看下内核版本:
searchsploit 并未搜到什么结果:
下面介绍一个查找权限提升的工具PEASS-ng,github地址如下:https://github.com/carlospolop/PEASS-ng
kali下载对应版本,本地开启一个端口:
靶机wget下这个查找提权信息的工具:
靶机中赋予这个工具777权限,运行:
可以着重关注下Executing Linux Exploit Suggester:
这里包含了可能存在提权可能的cve。尝试了dirty pipe、suid提权等方式都以失败告终。到了这里又没有什么思路了···
因为这个靶机是公共靶机(没舍得充钱),别人上传的文件我也能看到,我看见别的大佬上传了一个binwalk相关的PoC(忘记截图了),然后我试着运行了binwalk:
发现靶机上真的安装了binwalk组件,版本为2.3.2。
Exploit Database搜下:
发现这个版本的binwalk真的存在一个RCE漏洞。别的大佬应该是靠这个方式提权成功的。但是我还是很好奇大佬是怎么定位到这个靶机上有这个binwalk组件的。后来看见CSDN有位大佬的分享,大佬是先用pspy工具查看了靶机中运行了哪些进程,然后定位到的。
接下来按照大佬的思路尝试下,先下载pspy工具,地址如下:https://github.com/DominicBreuker/pspy,然后运行下,查看有哪些正在运行的进程:
可以看到这边运行了一个sh脚本,我们cat下,看看脚本内容:
这边执行了一些binwalk的操作,然后检查shrunk目录的每一个新创建的文件。
学习了下大佬信息收集的思路,接下来就是利用binwalk RCE漏洞来提权啦。这个漏洞的CVE-ID:CVE-2022-4510
接下来看看这个漏洞如何利用:
三个参数,第一个是png文件,第二个是kali的ip,第三个是kali的端口。
执行完这个命令,本地多了一个binwalk_exploit.png。
kali开启9999端口的监听:
靶机shrunk目录下载binwalk_exploit.png文件,完成提权:
5、总结
这次的Pilgrimage靶机,多数人给的难度评分为 EASY,但是我体验下来,感觉还是比我以往打的靶机要难不少的,走了很多弯路,比如这个靶机,看见图片上传功能,就一头扎进了任意文件上传的尝试。linpeas跑出可能有脏管道,dirtypipe也是一头扎进去了。不过通过这个靶机也是学到了很多信息收集的新姿势,收获满满~~~
联系客服