BACKDOOR DI PHP 8.1.0-DEV

APA ITU BACKDOOR?

Seperti namanya, back yang berarti belakang dan door yang berarti pintu. Backdoor merupakan pintu belakang yang memungkinkan penggunanya untuk masuk ke suatu jaringan, website, ataupun software tanpa perlu melakukan authentication. Awalnya backdoor digunakan oleh developer untuk memperbaiki bug yang ada dalam program. Akan tetapi, backdoor juga dapat disalahgunakan oleh pihak yang tidak bertanggung jawab dan memanfaatkannya untuk masuk ke dalam program dan digunakan untuk mengambil alih hak aksesnya.

 

Terdapat dua macam backdoor. Yang pertama yaitu backdoor yang memang sengaja dibuat oleh developer untuk digunakan ketika ingin memperbaiki sesuatu dan yang kedua yaitu backdoor yang disisipkan oleh attacker. Perbedaan dari kedua macam backdoor ini adalah backdoor yang sengaja dibuat pasti diketahui oleh developer. Sedangkan Backdoor yang disisipkan oleh attacker, developer belum tentu mengetahuinya. Akibatnya, attacker yang menyisipkan backdoor tersebut dapat masuk dan mengakses keseluruhan sistem dan mengambil data dari sistem tersebut tanpa diketahui oleh siapapun.

 

CARA MENGHINDARI ATAU MENCEGAH BACKDOOR

1. Menggunakan framework dengan versi yang paling baru

Adanya update pada framework tentu memiliki alasan tersendiri dan biasanya update dilakukan untuk menutup kelemahan atau vulnerability pada versi sebelumnya. Sehingga dengan menggunakan framework yang paling baru, attacker tidak dapat memanfaatkan vulnerability yang ada pada versi sebelumnya.

  • Firewall

Dengan mengaktifkan firewall, user yang tidak memiliki izin tidak akan bisa mengambil data ataupun memasukkan data ke dalam program.

  • Anti-virus

Anti-virus digunakan untuk mencegah, mendeteksi, dan menghapus malware.

 

2. Menggunakan software terpercaya

Software terpercaya yang dimaksud adalah software yang selalu rutin memberikan update patch dan software resmi dari perusahaan atau brand.

 

CERITA DI BALIK ADANYA BACKDOOR DI PHP 8.1.1-DEV

Backdoor pertama kali tertanam pada sebuah commit repository PHP pada tanggal 28 Maret 2021 lalu yang berjudul Fix typo. Kalian dapat melihatnya pada halaman (https://github.com/php/php-src/commit/c730aa26bd52829a49f2ad284b181b7e82a68d7d#diff-a35f2ee9e1d2d3983a3270ee10ec70bf86349c53febdeabdf104f88cb2167961). Sayangnya, backdoor pada commit tersebut tidak disadari dan bahkan disetujui oleh Rasmus Lerdorf, selaku pendiri PHP. 

Pada commit tersebut, dapat kita lihat bahwa pada baris 370 terdapat fungsi zend_eval_string yang dipanggil untuk membuat sebuah backdoor yang dapat digunakan untuk mempermudah melakukan Remote Code Execution (RCE). RCE adalah sebuah bug yang sangat berbahaya karena attacker dapat memasukkan malicious code seperti backdoor ke dalam sistem kita. Pada RCE di atas, RCE dapat dijalankan apabila HTTP header “User-Agentt” (menggunakan dua buah huruf t) memiliki value yang dimulai dengan string “zerodium”. Sebagai informasi tambahan, zerodium adalah sebuah perusahaan yang berspesialisasi pada jual beli zero-day vulnerabilities.

 

MELAKUKAN SERANGAN PADA BACKDOOR DI PHP 8.1.0-DEV

Sekarang saatnya kita mencoba menggunakan backdoor yang terdapat pada PHP 8.1.0-dev.

Nikto -> digunakan untuk memanggil aplikasi nikto

-h -> opsi yang digunakan untuk menentukan host target

10.10.10.242 -> IP target

Berdasarkan gambar di atas, saya melakukan scan vulnerability sebuah website menggunakan aplikasi bernama nikto. Nikto adalah sebuah aplikasi yang digunakan untuk melakukan scan known vulnerability di suatu website. Pada kotak merah di atas, dapat kita lihat bahwa hasil dari scan menunjukkan bahwa website tersebut menggunakan PHP 8.1.0-dev. 

Sebelum melakukan exploit, saya mencoba menggunakan aplikasi Burpsuite untuk membantu saya apakah benar bahwa backdoor tersebut dapat kita gunakan.

Di sini, saya mencoba menambahkan sebuah header baru bernama “User-Agentt” yang berisi ‘zerodiumsystem(“ls”);’.

zerodium 🡪 kata kunci yang digunakan untuk men-trigger backdoor

system(“ls”) 🡪 digunakan untuk memanggil fungsi system di PHP dan menjalankan perintah ls (list directory)

Dapat kita lihat bahwa response yang diberikan terdapat list dari direktori target. Hal ini menandakan bahwa backdoor dapat kita gunakan. Sekarang, saatnya kita melakukan reverse shell menggunakan backdoor tersebut!

Saya menemukan sebuah payload python untuk melakukan reverse shell pada halaman https://github.com/flast101/php-8.1.0-dev-backdoor-rce/blob/main/revshell_php_8.1.0-dev.py.

Sebelum melakukan exploit, kita perlu membuka sebuah terminal baru dan membuat sebuah listener menggunakan aplikasi netcat.

nc → command yang digunakan untuk memanggil netcat

-n → digunakan untuk menonaktifkan DNS

-v → digunakan untuk menambah verbosity atau kelengkapan informasi yang akan ditampilkan

-l → digunakan untuk memberitahu netcat bahwa kita akan melakukan listening

-p → digunakan untuk memberitahu netcat port listener kita

4444 → port listener yang aktif.

Untuk melakukan exploit, kita perlu memasukkan tiga buah parameter, yaitu IP_TARGET, IP_ATTACKER, dan PORT_ATTACKER. 

Pertama, kita ganti IP_TARGET dengan alamat IP target yang memiliki vulnerability, IP_ATTACKER dengan IP kalian dan PORT_ATTACKER dengan port yang kalian gunakan sebagai listener di netcat (dalam kasus saya, PORT_ATTACKER adalah 4444). 

Setelah memasukkan tiga buah parameter di atas dan menekan enter, kita bisa beralih ke terminal yang berisi listener. Dapat kita lihat bahwa listener kita telah menerima reverse shell.

 

 

Referensi:

https://flast101.github.io/php-8.1.0-dev-backdoor-rce/

 

Arjuna Accha Dipa & Erik Hendrawan