Advertisement
Ribang

Ataacker vs depeloper

Nov 19th, 2017
326
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
INI file 11.10 KB | None | 0 0
  1. Attacker vs Developer
  2.  
  3.  
  4. sebelum memulai kita persiapkan dulu alat2nya
  5. 1. localhost ( xampp,lampp,appserv,etc) atau web pun boleh
  6. 2. notepad
  7. 3. buat folder dengan nama "image"
  8.  
  9. [ start of war ]
  10. ##developer
  11. buat file php
  12. dengan script:
  13. <?php
  14. if(isset($_POST['upload'])) {
  15. $target_path="image/";
  16. $target_path = $target_path.basename($_FILES['img']['name']);
  17. if(move_uploaded_file($_FILES['img']['tmp_name'],$target_path)){
  18. echo "the file " . basename($_FILES['img']['name']) . " has been uploaded! ";
  19. }else {
  20. echo "there was an error uploading the file ,please try again!";
  21. }
  22. }
  23. ?>
  24. <form action="" method="post" enctype="multipart/form-data">
  25. <input type="file" size="20" name="img" />
  26. <input type="submit" name="upload" value="Upload" />
  27. </form>
  28.  
  29. lalu simpan di web/localhost tadi
  30.  
  31. lalu buka filenya di localhost atau web kamu
  32.  
  33. silahkan upload shell
  34. dan hasilnya pasti bisa
  35.  
  36. ## patching 1 #
  37.  
  38. kemudian si developer mempathing script
  39.  
  40. $target_path="image/";
  41. $target_path = $target_path.basename($_FILES['img']['name']);
  42. if(move_uploaded_file($_FILES['img']['tmp_name'],$target_path)){
  43. echo "the file " . basename($_FILES['img']['name']) . " has been uploaded! ";
  44. }else {
  45. echo "there was an error uploading the file ,please try again!";
  46. }
  47.  
  48. dengan
  49. script "PHP Arbitrary File"
  50. guna menentukan file apa aja yang bisa masuk melalui file upload tersebut
  51. scriptnya ialah:
  52.  
  53. if($_FILES['img']['type'] != "image/gif") {
  54. echo "Sorry, we only allow uploading GIF images";
  55. exit;
  56. }
  57. $uploaddir = 'image/';
  58. $uploadfile = $uploaddir . basename($_FILES['img']['name']);
  59. if (move_uploaded_file($_FILES['img']['tmp_name'], $uploadfile)) {
  60. echo "File is valid, and was successfully uploaded.\n";
  61. } else {
  62. echo "File uploading failed.\n";
  63. }
  64.  
  65. sehingga menjadi:
  66.  
  67. <?php
  68. if($_FILES['img']['type'] != "image/gif") {
  69. echo "Sorry, we only allow uploading GIF images";
  70. exit;
  71. }
  72. $uploaddir = 'image/';
  73. $uploadfile = $uploaddir . basename($_FILES['img']['name']);
  74. if (move_uploaded_file($_FILES['img']['tmp_name'], $uploadfile)) {
  75. echo "File is valid, and was successfully uploaded.\n";
  76. } else {
  77. echo "File uploading failed.\n";
  78. }
  79. ?>
  80. <form action="" method="post" enctype="multipart/form-data">
  81. <input type="file" size="20" name="img" />
  82. <input type="submit" name="upload" value="Upload" />
  83. </form>
  84.  
  85. melihat hal itu si attacker pun mencari kelemahan script tersebut kemuian si attacker membaca cara kerja dari script tersebut yakni script tersebut akan meloloskan suatu file yang memiliki content-type "image/gif" selain itu gagal terupload dengan informasi tersebut si attacker lalu membuat sebuah teknik yang memerlukan sedikit bantuan addon semisal tamperdata atau yg sejenis
  86.  
  87. # bypass 1#
  88.  
  89. 1. install addon tamperdata di firefox
  90. 2. shell.php rename jadi shell.php.jpg atau shell.jpg
  91. 3. hidupkan tamperdata: tools -> tamper data -> start tamper
  92. 4. upload shell.php.jpg tadi -> klik upload -> lalu tamper
  93. 5. kemudian cari nama file "shell.php.jpg" lalu ganti dengan shell.php -> ok
  94.  
  95. hasil: shell pun terupload
  96.  
  97. ## patcing2 ##
  98.  
  99. melihat script uploadnya bisa di bypass attacker si developer tadi memutar otaknya mencari cara patchingnya akhirnya ia menemukan cara yaitu dengan memanfaatkan system blacklist yakni membatasi jenis2 file yang sudah di blacklist cara patchingnya adalah dengan cara mengganti script:
  100.  
  101. if($_FILES['img']['type'] != "image/gif") {
  102. echo "Sorry, we only allow uploading GIF images";
  103. exit;
  104. }
  105. $uploaddir = 'image/';
  106. $uploadfile = $uploaddir . basename($_FILES['img']['name']);
  107. if (move_uploaded_file($_FILES['img']['tmp_name'], $uploadfile)) {
  108. echo "File is valid, and was successfully uploaded.\n";
  109. } else {
  110. echo "File uploading failed.\n";
  111. }
  112.  
  113. dengan script blacklist:
  114.  
  115. $blacklist = array(".php",".html",".shtml",".phtml", ".php3", ".php4");
  116. foreach ($blacklist as $item) {
  117. if(preg_match("/$item\$/", $_FILES['img']['name'])) {
  118. echo "We do not allow uploading PHP files\n";
  119. exit;
  120. }
  121. }
  122. $uploaddir = 'image/';
  123. $uploadfile = $uploaddir . basename($_FILES['img']['name']);
  124. if (move_uploaded_file($_FILES['img']['tmp_name'], $uploadfile)) {
  125. echo "File is valid, and was successfully uploaded.\n";
  126. } else {
  127. echo "File uploading failed.\n";
  128. }
  129.  
  130. sehingga menjadi:
  131.  
  132. <?php
  133. $blacklist = array(".php",".html",".shtml",".phtml", ".php3", ".php4");
  134. foreach ($blacklist as $item) {
  135. if(preg_match("/$item\$/", $_FILES['img']['name'])) {
  136. echo "We do not allow uploading PHP files\n";
  137. exit;
  138. }
  139. }
  140. $uploaddir = 'image/';
  141. $uploadfile = $uploaddir . basename($_FILES['img']['name']);
  142. if (move_uploaded_file($_FILES['img']['tmp_name'], $uploadfile)) {
  143. echo "File is valid, and was successfully uploaded.\n";
  144. } else {
  145. echo "File uploading failed.\n";
  146. }
  147. ?>
  148. <form action="" method="post" enctype="multipart/form-data">
  149. <input type="file" size="20" name="img" />
  150. <input type="submit" name="upload" value="Upload" />
  151. </form>
  152.  
  153. dengan script di atas ketika sang attacker mengupload shellnya dengan cara ## bypass 1 ## maka attacker mendapatkan pesan bahwa file nya tidak bisa terupload.
  154.  
  155. ## bypass 2 ##
  156.  
  157. Dengan kegagalan ini sang atacker pun kembali menganalisa script yang ada di atas dan menyimpulkan bahwa ketika shell di tamper dengan nama shell.php bisa error dikarenakan ektensi .php telah masuk daftar blacklist sehingga akan menjadi error melihat hasil kesimpulan tersebut si attacker pun mencoba serangan yakni mencoba mengupload dengan extensi acak untuk meyakinkan bahwa ini benar2 script blacklist
  158. kali ini si attacker mencoba mengupload dengan extensi .173 ( namanya juga acak :v ) dan berhasil dengan ini si attacker yakin bahwa scrpt diatas adalah script blacklist dan script blacklist tersebut mempunyai kelemahan dimana dia hanya memblacklist jenis file yang ada pada array jadi extensi .php ada dalam daftar array tersebut si attacker pun memulai bypass nya yakni dengan mencoba mengupload dengan extensi .php3 .php4 .php5 .PHP .pHp dan lain2
  159.  
  160. alhasil si attacker pun kembali sukses mengupload shell nya
  161.  
  162. ## patching3 ##
  163. tak berhenti disitu persaingan sang develop dan attacker masih berlanjut mengetahui kalau script blacklistnya masih mampu ditembus kemudian sang developer kembali berfikir keras memikirkan bagaimana patchingnya kemudian dia menemukan cara yakni dengan script mime lalu dia mengubah scriptnya menjadi
  164.  
  165. <?php
  166. $imageinfo = getimagesize($_FILES['img']['tmp_name']);
  167. if($imageinfo['mime'] != 'image/gif' && $imageinfo['mime'] != 'image/jpeg') {
  168. echo "Sorry, we only accept GIF and JPEG images\n";
  169. exit;
  170. }
  171.  
  172. $uploaddir = 'image/';
  173. $uploadfile = $uploaddir . basename($_FILES['img']['name']);
  174. if (move_uploaded_file($_FILES['img']['tmp_name'], $uploadfile)) {
  175. echo "File is valid, and was successfully uploaded.\n";
  176. } else {
  177. echo "File uploading failed.\n";
  178. }?>
  179. <form action="" method="post" enctype="multipart/form-data">
  180. <input type="file" size="20" name="img" />
  181. <input type="submit" name="upload" value="Upload" />
  182. </form>
  183.  
  184. cara kerja script mime ialah dimana dia hanya mengijinkan file yang mempunyai header jpg atau gif
  185. guna meloloskan file agar bisa di upload
  186. dengan ini si attacker pun tak bisa mengupload shellnya walaupun di rename jpg karena tak mempunyai header image
  187.  
  188. ##bypass3##
  189. dengan mengetahui cara kerja tersebut sang attacker pun memulai serangannya
  190. kali ini dia hanya menyisipkan kata
  191. GIF89a;
  192. pada awal script
  193. seperti pada kasus kang hmei7 pada shell JCE (http://www.joshpate.com/2013/01/how...)
  194. sehingga script menjadi:
  195.  
  196. GIF89a;
  197. <?php
  198. script shell
  199. ?>
  200.  
  201. karena sang attacker memanfaatkan comand hearder ( GIF89a; ) guna memanipulasi script mime agar mengidentifikasikan script shell sebagai image, setelah di rename jadi .gif dan di tamper alhasil sang attacker pun kembali berhasil menembus script mime
  202.  
  203. ##patching4##
  204. tak tinggal diam ketika sang develop mengetahui script mimenya berhasil ditembus
  205. kemudian dia mulai berfikir keras dan mengumpulkan bahan2 guna meramu script
  206. yang sulit ditembus oleh sang attacker
  207. dan akhinya dia pun kembali mempatch scriptnya dengan memodifikasinya menjadi:
  208.  
  209. <?php
  210.  
  211. if(isset($_POST['upload'])) {
  212.  
  213.  
  214.     $jenis_konten = $_FILES['img']['type'];
  215.  
  216.  
  217.     if(preg_match("/image/",$jenis_konten)) {
  218.  
  219.         $file_sementara = $_FILES['img']['tmp_name'];
  220.  
  221.         /**
  222.          //periksa lagi, **cacat
  223.          $info_gambar = @getimagesize($file_sementara);
  224.  
  225.          if(!preg_match("/image/",$info_gambar['mime'])) {
  226.          //belum percaya periksa lagi resolusi **cacat
  227.          if((!isset($info_gambar[0])) && (!isset($info_gambar[1]))) {
  228.          die("Atut, ada hekel... :p");
  229.          }
  230.          }
  231.  
  232.          
  233.          $file_dipermanenkan = dirname(__file__)."/".$_FILES['img']['name'];
  234.  
  235.          
  236.          if(move_uploaded_file($file_sementara,$file_dipermanenkan)) {
  237.          echo "File <strong>".$_FILES['img']['name']. "</strong> berhasil diunggah.";
  238.          } else {
  239.          echo "Gagal mengunggah!";
  240.          }
  241.          
  242.          **/
  243.  
  244.         $file_dipermanenkan = "/".sha1(rand(0,9999)).".jpg";
  245.         $filename = $file_sementara;
  246.         $percent = 1;
  247.  
  248.         // ciplak resolusi
  249.         // pendeteksian ini masih bisa lolos dgn teknik RGB
  250.         $size = getimagesize($filename); //diambil dari file temp, bukan $_FILE['mime']
  251.         $width = $size[0];
  252.         $height = $size[1];
  253.         $mime = $size['mime'];
  254.  
  255.         //jika butuh memperkecil gambar
  256.         $new_width = $width * $percent;
  257.         $new_height = $height * $percent;
  258.  
  259.         // buat gambar baru
  260.  
  261.  
  262.         if(preg_match('/png|jpeg|jpg|gif/',$mime)) {
  263.             $image_p = imagecreatetruecolor($new_width,$new_height);
  264.             if((preg_match('/jpg/',$mime)) || (preg_match('/jpeg/',$mime))) {
  265.                 $image = imagecreatefromjpeg($filename);
  266.             }
  267.             if(preg_match('/png/',$mime)) {
  268.                 $image = imagecreatefrompng($filename);
  269.             }
  270.             if(preg_match('/gif/',$mime)) {
  271.                 $im = imagecreatefromgif($filename);
  272.             }
  273.         }
  274.         if(!@imagecopyresampled($image_p,$image,0,0,0,0,$new_width,$new_height,$width,$height)) {
  275.             $image_p = imagecreate(200,100);
  276.             $bg = imagecolorallocate($image_p,255,255,255);
  277.             $black = imagecolorallocate($image_p,0,0,0);
  278.             imagestring($image_p,5,2,2,'Gambar Korupsi',$black);
  279.         }
  280.  
  281.         // Output
  282.         imagejpeg($image_p,dirname(__file__).$file_dipermanenkan,100);
  283.         echo '<a href="'.$file_dipermanenkan.'">'.$file_dipermanenkan.'</a>';
  284.  
  285.     } else {
  286.         echo "Jenis file yang anda unggah bukan gambar.";
  287.     }
  288. }
  289.  
  290. ?>
  291. <form action="" method="post" enctype="multipart/form-data">
  292. <input type="file" size="20" name="img" required="on" />
  293. <input type="submit" name="upload" value="Upload" />
  294. </form>
  295.  
  296.  
  297. jujur sampai sekarang saya belum bisa nembus script patch yang terakhir diatas heheheh selesailah sampai disini cerita persaingan makhluk dibalik monitor namun dari cerita panjang ini kita pasti akan mendapat banyak pelajaran dan ilmu yang baru heheh sengaja saya buat cerita agar tidak terlalu kaku ketika kita membaca tutorial xixixi
  298.  
  299.  
  300. nb:
  301. Kisah ini berasal dari kisahnyata dengan alur yang sama namun mungkin berbeda scource codenya
  302. lanjut ke part 2 SQL injection
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement