Mar 25, 2013

melewati security upload by mime, Hack security upload using mime

Sudah lama tidak menulis jadi kangen juga ,  sekarang saya akan mendemokan bagaimana melewati security upload file dengan proteksy tipe file menggunakan mime,.

cerita saya ini sebagai bahan pelajaran saja. supaya kita selalu berhati hati dalam membuat kode,

upload file dalam web merupakan salah satu pintu berbahaya masuknya code jahad maupun software jahat ke sistem kita dalam hal ini server kita. seorang hacker akan mampu mengupload shell yang bisa membuat dia melakukan apa saja di server kita , tentu nya dengan step2 lanjutan misal mendapat user administrator atau root atau apapun itu..

Oke saya akan mulai cerita saya,. ,pada suatu hari saya pingin membuat file php untuk upload file say browsing dan menemukan contoh codenya. misal dari situs APA aja .com

dalam situs itu akan di buat 2 file ,. yang satu sebagai tampilan form dan yang satu nya sebagai script untuk upload tentunya dengan scurity hanya bisa upload file gambar dan ukuran maksimal  20 kb

dengan code form sebagai berikut :
<html><br />
<body><br />
<br />
<form action="upload_file.php" br="" method="post">
enctype="multipart/form-data"&gt;<br />
<label for="file">Filename:</label><br />
<input id="file" name="file" type="file" /><br /><br />
<input name="submit" type="submit" value="Submit" /><br />
</form>
<br />
<br />
</body><br />
</html>&nbsp;

dan code untuk upload sebagai berikut  "upload_file.php"


if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 20000)
)
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "
";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "
";
    echo "Type: " . $_FILES["file"]["type"] . "
";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB
";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "
";

    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Invalid file";
  }
?>
Oke sekarang kita coba kodenya




dan kita lihat proses uploadnnya semua terlihat lancar 



 Sekarang kita coba upload file shell,.php


Oooppss ternyata gagal...

Hemmm ini gagal karena di script upload_file.php ada pengecekan terhadap mime
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 20000)
)

Oke sekarang kita coba melewatinya ,.karena mime adalah variable yang di kirim user,. maka kita bisa memodikasi kiriman dengan addons mozila temper data. oke kita start temper data


kita ulangin proses penguplotan. dan temper data mulai beraksi dia menyuguhkan data yang akan di kirim ke server. coba kita lihat data itu. terlihat application/octedstream <---- br="" di="" ini="" jpg="" kalau="" maka="" masalahnya="" mau="" mestinya="" nbsp="" sukses="" upload="">

 Kita rubah saja :-)

0oke kita cek bim salabim,... taraaaaaa :-D

dan sekarang kita coba eksekusi shell kita di browser,..
tadaaaaaa :-D


hemmm bahaya bukan,. makanya hati2 kalau menulis code,.. lah kode yang cukup aman gmana???
Oke kita akan rubah2 kodenya,. :-p

$allowedExts = array("gif", "jpeg", "jpg", "png");
$extension = end(explode(".", $_FILES["file"]["name"]));
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 200000)
&& in_array($extension, $allowedExts)) /*----> deteksi extensinya*/
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "
";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "
";
    echo "Type: " . $_FILES["file"]["type"] . "
";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB
";
   /* echo "Temp file: " . $_FILES["file"]["tmp_name"] . "
";*//*----> salah satu celah tak perlu di tampilkan*/

    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      $random_name           = rand(0000,9999); /*----> ganti semua nama menjadi random */
      $unix_name = "upload/" . $random_name . ".jpg"; /*----> kasih extensi yang boleh..*/
     
      move_uploaded_file($_FILES["file"]["tmp_name"],
      $unix_name);
      /*echo "Stored in: " . "upload/" . $_FILES["file"]["name"];*//*----> salah satu celah tak perlu di tampilkan*/
      }
    }
  }
else
  {
  echo "Invalid file";
  }
?>

Oke  begituu,. minimal code yang di atas lebih kuat dari yang tadi,.. apa masih bisa di hack???
masih kok,. Tak ada security yang bisa 100%, kecuali servermu di matikan dan di kubur,.. :-D dan tak terlihat orang saat menguburnya...


haiz uda 3 jam aku ngetik ginian aja,.. saya mau main dulu daaa ,..

No comments: