Real World CTF 5th writeup
这次 RWCTF 比赛我一共出了两个题: 「Printer2」 和 「Hardened Redis」。至于为什么今天才在博客更新这个Writeup一个原因就是 Pritner2 相关的漏洞今天终于发布了正式补丁。
Printer2
这是 OpenPrinting
项目中 cups-filters
模块下的 Backend Error Handler(简称 beh)存在的漏洞。这里是关于 beh 的介绍
漏洞点位于 cups-filters/backed/beh.c#L288
1 | // (context: argv = beh <job-id> <user> <title> <copies> <options> [file]) |
可以看到这里有一个明显的命令注入, 当用户控制 user 或者 title 字段的时候可以造成任意命令执行。更详细的细节可以看我提交给官方的报告:
report a command inject Vulnerabilities in cups-filters
Hardened Redis
这是题目考点是在较高版本的情况下在有访问 Redis
的情况下如何获取 Redis
所在系统 shell 权限。 在高版本的 Redis 已经不能使用主从复制来获取 shell了(印象中),另外我也禁用了一些 Redis
的方法。 但是由于对 Redis 的熟知程度不够, 其次也是去年参加 CTF 少了, 被 2022 Spring GoN Open Qual CTF 的一个 Redis
题的解法非预期了。
下次有机会可以和大家详细分享下这个解法。
这里接着讲我的预期解法,讲到 Redis
, 如果大家有印象,应该会想到 CVE-2022-0543
。 当时这个漏洞影响了 Debian 系列的 Linux 发行版系统的包管理器所安装的 Redis
。因为 Debian 系列由于打包问题,Redis在Lua解析器初始化后,package变量没有被正确清除,导致攻击者可以利用它来进行Lua沙箱逃逸,从而执行任意系统命令。
这个时候我们注意到了这 Debian 系列用的 Redis
(即使用 apt 安装 ) 所使用的 lua 解析器是 lua 5.1 , 而且是存在一个 2015 年漏洞的 lua 解析器,虽然这个漏洞在 2015 年就被 Redis
官方修复了, 但是 lua 5.1 解析器并没有修复。
apt
命令安装的redis使用的是单独的 liblua5.1.so.0
2015 年这个漏洞是 CVE-2015-4335
, 另外 HN 评论区当时也提到了这个问题,
I think this is still ‘broken’ because Redis have applied custom patches to the )
虽然当时我也给 ubuntu 和 Debian 发了邮件提醒了这件事,但是他们的回复看起来是不是很想单独修复。
进一步的漏洞利用与分析可以参考我 chu 师父 的博客, Redis CVE-2015-4335分析 , 我就不赘述了。 没想到隔了这么久还是依然能受到 chu 师父的照顾。
Reference link
cups-filters/backed/beh.c#L288