1498 字
7 分钟
vulnhub靶机-connect-the-dots(jsfuck、morsecode解密+断电.swp文件+polkit-agent-helper提权)
vulnhub靶机-connect-the-dots(jsfuck、morsecode解密+断电.swp文件+polkit-agent-helper提权)
声明
- 本文为个人跟随b站up主红队笔记学习vulnhub的connect-the-dots靶机的复现通关记录,旨在分享靶机和记录学习心得体会,讲解若有谬误之处欢迎指正。
- 该靶机下载地址为’https://vulnhub.com/entry/connect-the-dots-1,384/‘
渗透流程
- 在vmware部署靶机并开机后,打开kali对靶机进行信息收集,使用nmap执行
nmap -sn 192.168.245.0/24(请替换成你的网段)进行主机发现,发现图中的192.168.245.161为靶机。(192.168.245.136为我的kali虚拟机的地址)
- 并进行端口发现,执行
nmap --min-rate 10000 -p- 192.168.245.161,并对开放端口记录用于后续渗透,发现21、80、111、2049、7822、40397、46625、51427、52883端口。
- 对端口进行详细扫描,执行
nmap -sT -sV -sC -O -p21,80,111,2049,7822,40397,46625,51427,52883 192.168.245.161,得到端口详细服务内容和系统版本,7822探测出来为ssh服务,其它就是21端口ftp服务,80端口http服务,2049端口nfs服务。
- 执行
sudo nmap --script=vuln -p21,80,111,2049,7822,40397,46625,51427,52883 192.168.245.161用脚本扫一下漏洞(未探测到服务信息的部分端口这里没有加上)。
- 发现部分目录,以及sql注入可能。

- 使用ftp尝试连接目标服务器,无法匿名登录。

- 对于2049端口的nfs(文件共享),执行
showmount -e 192.168.245.161列出共享目录和sudo mount -t nfs 192.168.245.161:/home/morris 123链接到本地文件夹(注意这里123目录要自己创建)。
- 列出文件夹信息,读取各文件,最后在.ssh目录下找到公私钥相对有价值。

- 对于公钥列出的账户进行记录。

- 尝试ssh远程7822端口,
ssh -i id_rsa -p 7822 morris@192.168.245.161,连接需要密码,暂时走不通。
- 尝试还未尝试过的目录爆破,
gobuster dir -u http://192.168.245.161 --wordlist=/usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt,简单查看一遍各目录,发现/backups,/mysite可能有探索价值。
- /backups是一段视频,网页源码探索也没有特殊发现。(这里用windows系统的浏览器可能出现打不开情况)

- 对/mysite目录进行探索。

- register.html为一个注册页面。

- .cs后缀的这个文件点开看看。

- 此文件为jsfuck语言(介绍见末尾补充),可能存在某些信息,可以尝试破解。

- 删去多余字符,去jsfuck.com解密,第二行疑似为密码,先记录下来。

- 将其作为密码尝试可能用户,成功获得初始shell。

提权过程
- 用已知用户(norris)连接ftp,下载文件到本机。

- 图片文件中comment包含莫尔斯码,存在图片隐写,可在在线网站或工具解码内容。

- morsecode解码内容提示有一个secretfile可公开访问,继续查看其它几个备份文件,内容意义不大。

- 对于公开访问的提示,想到查看/var/www目录下,并成功找到该文件,没有很有用的信息,但还有一个.secretfile.swp,可以将其下载到本地使用strings解读。

- 或者也可以使用
vim -r .secretfile.swp打开(使用vim编辑器的recovery恢复异常退出之前状态)。
- 怀疑该内容某个用户密码,成功切换用户为morris。

- 对比用户,norris 用户被加入sudo组,意味着有权限执行sudo命令,可能更有助于提权。

- 寻找自动任务未果,执行
/sbin/getcap -r / 2>/dev/nul,给出的tar权限cap_dac_read_search+ep表示可以无视文件或目录的 r/x 权限限制,直接读取或遍历任何文件或目录,但无法修改写入。
- 这也意味着可以通过打包拿到root内的文件包括flag(不多介绍)。

- 我们继续想其它提权办法,如查找suid文件:
find / -perm -u=s -type f 2>/dev/null。
- 尝试利用polkit-agent-helper的权限提权,执行
systemd-run -t /bin/bash,调用polkit-agent-helper-1,输入密码,打开了一个root权限的shell,提权结束。
其它补充与收获总结
- jsfuck是JavaScript的一种编码方式,尝试用六种字符完全实现JavaScript逻辑,实现代码混淆,但很容易被反混淆,更多用于娱乐和挑战,逻辑实现原理详见文章’https://blog.csdn.net/gitblog_00443/article/details/150851764’介绍。
- polkit提权原理:polkit-agent-helper作为一个代理工具,协助应用程序向PolicyKit发送授权请求,并处理来自 PolicyKit 的响应。当一个应用程序需要执行特权操作时,它会调用polkit-agent-helper,该工具会弹出一个对话框,提示用户输入其凭证(如密码),然后将这些凭证发送给PolicyKit进行验证。如果用户提供的凭证被验证成功,PolicyKit 就会授权该请求,如果Polkit配置不当,会出现提权利用点。
- 经过我对该靶机检查,policykit对于管理员验证仍然严格,仍可以执行
systemd-run -t /bin/bash提权的原因是:PolicyKit配置错误地将sudo组普通用户(norris)识别为管理员,导致原本要求验证root密码的操作,接受了普通用户密码通过验证,以下为各配置情况: (1)cd /usr/share/polkit-1/actions/,该目录存在polkit各类操作验证策略文件。
(2) cat org.freedesktop.systemd1.policy查看systemd验证配置,执行systemd各类命令均如选中区域,需要管理员用户密码验证,且默认保留5min无需验证。
(3) cat /etc/polkit-1/localauthority.conf.d,在51-debian-sudo.conf中定义了:“AdminIdentities=unix-group”,指出了验证身份为sudo组(若改为AdminIdentities=unix-user:0,则仅可以用root身份验证),由前面执行 id指令所见,norris用户包含于sudo组,故可通过个人用户密码执行systemd-run -t /bin/bash,以root身份开启一个shell。
- 本靶机提权时,看到pkexec为suid文件,也可以使用PwnKit提权漏洞(CVE-2021-4034)的脚本提权,该漏洞核心原理程序对命令行参数处理的一个越界读取,以及由此引发的环境变量写入。具体原理参考文章’https://cloud.tencent.com/developer/article/2625314’

vulnhub靶机-connect-the-dots(jsfuck、morsecode解密+断电.swp文件+polkit-agent-helper提权)
http://124.70.202.140/posts/post-12/12/ 部分信息可能已经过时







