Ringkasan
phpMyAdmin adalah layanan antarmuka web untuk mengelola database MySQL/MariaDB. Ini diimplementasikan dalam bahasa PHP dan diinstal dan digunakan di server web. Setelah masuk ke halaman web phpMyAdmin melalui browser web, pengguna dapat melihat dan mengedit database.
Fungsi transformasi
Ini adalah fungsi untuk menunjuk metode konversi data saat menampilkan atau memasukkan nilai ke dalam database. Contoh penggunaan fungsi konversi adalah sebagai berikut.
- Pada fungsi perubahan struktur tabel, tentukan jenis media, transformasi tampilan browser, dll seperti yang ditunjukkan pada gambar di bawah ini.
- Saat menampilkan data tabel yang fungsi transformasinya telah diterapkan, mengklik [BLOB] untuk melihat data yang diubah akan pindah ke halaman
transformation_wrapper.php
.
- Halaman
transformation_wrapper.php
menerima dan mengeksekusi sintaks kueri, dan mengubah serta menampilkan hasil eksekusi.
Deskripsi Kerentanan
transformasi_wrapper.php
tidak memerlukan token CSRF. Karena verifikasi token CSRF tidak dilakukan, penyerang dapat meneruskan parameter dalam metode permintaan GET.
‘cn’, ‘ct’, ‘sql_query’, ‘transform_key’, dan ‘where_clause’ yang dideklarasikan dalam variabel $request_params
diterima sebagai parameter dan digunakan sebagai nama variabel.
Parameter where_clause
dimasukkan dan dieksekusi dalam klausa WHERE dari pernyataan kueri SELECT.
Jalankan fungsi Core::downloadHeader
sebelum mengeluarkan hasil eksekusi kueri. Fungsi Core::downloadHeader
dideklarasikan di /libraries/classes/Core.php
.
Dibutuhkan dua argumen dan menentukan header respons HTTP yang terkait dengan unduhan file. Argumen pertama adalah nama file, dan argumen kedua menentukan tipe konten.
Jika penyerang memanipulasi parameter ct
, argumen kedua dari fungsi Core::downloadHeader
dimanipulasi, sehingga memungkinkan untuk memanipulasi Content-Type.
Fungsi Core::downloadHeader
dihentikan dan hasil eksekusi kueri ditampilkan.
Jika Content-Type ditentukan sebagai html, string XSS difilter melalui fungsi htmlspecialchars
PHP. Penyerang melewati penyaringan XSS dan menentukan Content-Type sebagai teks/xml untuk output ke layar browser web.
Karena Content-Type adalah teks/xml, jika output konten dengan eksekusi kueri ditetapkan sebagai XML XSS, kerentanan XSS terjadi.
Untuk memanipulasi output, letakkan pernyataan UNION SELECT di parameter where_clause
.
1 UNION SELECT '<?xml version="1.0"?><html><script xmlns="http://www.w3.org/1999/xhtml">alert(1)</script></html>',2,3,0 ORDER BY 4
Seluruh payload yang menyisipkan pernyataan SQL di atas adalah sebagai berikut:
~/index.php?target=transformation_wrapper.php&db=information_schema&table=CHARACTER_SETS&where_clause=1%20UNION%20SELECT%20%27%3C?xml%20version=%221.0%22?%3E%3Chtml%3E%3Cscript%20xmlns=%22http://www.w3.org/1999/xhtml%22%3Ealert(1)%3C/script%3E%3C/html%3E%27,2,3,0%20ORDER%20BY%204&cn=&ct=text/xml&transform_key=CHARACTER_SET_NAME
Sejarah Patch
Kerentanan dilaporkan ke phpMyAdmin dan ditambal dengan CVE-2020-26934
.
https://www.phpmyadmin.net/security/PMASA-2020-5/ Terima kasih kepada Giwan Go, Yelang Lee dari STEALIEN karena telah melaporkan kerentanan ini.
Memverifikasi nilai tanda tangan parameter where_clause
untuk mencegah penyerang meneruskan parameter melalui metode permintaan GET.