Patch Bug SQL Injection - Simple

-
Hai Sobat.
Saya ikal
Disini, saya akan share cara menutup bug SQL Injection.
-

Okeh sesuai judul, jadi kali ini saya sudah punya 2 live target bekas deface saya yang memiliki kerentanan berupa SQL Injection.
Disini saya tidak menjelaskan cara mengeksekusi, namun menjelaskan cara menutup bug nya yah.

Bila ada yang ingin mempelajari cara melakukan SQL Injection, bisa kembali ke artikel sebelumnya SQL Injection

Pertama saya akan jelaskan cara saya menutup bug SQL Injection nya. 
SQL Injection terjadi akibat request $_GET['id'] atau $id yang tidak difilter, hal tersebut bisa membuka celah untuk para attacker.

Jadi, disini saya hanya memberi (int) sebelum bagian $_GET['id'], dan biasanya codingan file yang memiliki celah SQL Injection seperti ini

<?php
          $id = $_GET['id'];
  $sql = "SELECT * FROM enuo_content WHERE id='$id'";
  $res = $db->query($sql);
  $row = $db->getarray($res);
   ?>

Nah seperti itu salah satunya, "bang kalo misalkan di filenya ga ada $id = $_GET['id']; gimana bang?" tinggal ubah aja sedikit. Mungkin maksud kalian yang seperti ini

 <?php
  $sql = "SELECT * FROM enuo_content WHERE id=".$_GET['id']."";
  $res = $db->query($sql);
  $row = $db->getarray($res);
   ?>

Kaya gitu kan maksud kalian. Jadi kalo kaya begitu, tinggal tambahin $id = $_GET['id']; sebelum $sql. Dan di saat WHERE id=".$_GET['id']." ubah menjadi WHERE id='$id'"; 

Nah, kita masuk ke proses patch nya. File di atas kita tinggal ubah menjadi seperti ini 

<?php
          $id = (int)$_GET['id'];
  $sql = "SELECT * FROM enuo_content WHERE id='$id'";
  $res = $db->query($sql);
  $row = $db->getarray($res);
   ?>

Nah tinggal seperti itu, dan file pun sudah kebal terhadap SQL Injection. Tidak ada respon saat memasukan single quote atau yang lainnya. Namun saat di beri - sebelum angka paramater masih akan blank. Jadi kita akan menggunakan  fungsi if seperti ini

<?php
          $id = (int)$_GET['id'];
          if($id < 0){
        echo 'Patched!';
        exit;
}
  $sql = "SELECT * FROM enuo_content WHERE id='$id'";
  $res = $db->query($sql);
  $row = $db->getarray($res);
   ?>

Nah, jadi jika paramater dibawah 0 atau minus maka akan muncul Patched!. Atau kalian bisa mengubah kata Patched! Menjadi sesuka hati kalian. Misalnya disini kita ingin menginject seperti ini :

 http://www.liangjianyishu.com/cdetail.php?id=607

Dan misal saya ingin memastikan vuln atau tidak nya website tersebut terhadap bug SQL Injection.

http://www.liangjianyishu.com/cdetail.php?id=607'



Nah, berkat fungsi (int) jadi tidak ada respon dan tidak muncul error. Sekarang coba kita buat minus parameter nya.

http://www.liangjianyishu.com/cdetail.php?id=-607



Nah muncul kata Patched! xixi. Bug sudah tertutup hanya bermodalkan (int) dan if saja. Nah jadi tidak perlu repot². Cukup seperti itu saja.

Jujur aja awalnya saya tidak bisa untuk melakukan ini :'3. Saya cuma bisa mengeksekusi nya saja, yah kira-kira rantai perputarannya seperti ini
Dorking ~> eksekusi ~> berhasil upshell ~> mirror ~> tinggalin ~> repeat.

Sesudah mirror saya tinggalkan begitu saja, namun kemarin ada seorang bule yang request nih artikel. Sekitar 3 video saya putar untuk memahami cara patch bug ini. Dan alhamdulilah g sampe 2 jam bisa :'v

Hasil :
http://www.liangjianyishu.com/cdetail.php?id=607
http://www.mpclicks.co.uk/pdetail.php?id=3

Okeh mungkin segini aja dulu
Thanks
See u