Wednesday, 6 December 2017

Deteksi Celah NO REDIRECT Pada Suatu Situs Menggunakan CURL

Halo selamat malam, kali ini saya akan memberikan sedikit tutorial bagaimana menemukan sebuah celah/vulnerability NO REDIRECT pada suatu situs. Celah ini ditemukan pada suatu halaman/file yang seharusnya dapat diakses hanya pada user yang memiliki akses tertentu (user yang sudah login).

Contohnya pada suatu kasus untuk dapat masuk ke halaman dashboard admin yang terdapat pada file /admin/home.php, kita diharuskan login terlebih dahulu. Maka dari itu, biasanya kita akan di redirect/arahkan ke halaman login dahulu, misalkan di file /admin/login.php


Sudah paham maksudnya?
Jika masih belum paham, mari simak penjelasan berikut.


Saya menemukan suatu sample situs yang memiliki celah ini, coba kalian kunjungi situs berikut:
http://shmsupport.telkomspeedy.com/admin/ maka kalian akan di arahkan/redirect ke halaman situs tersebut yang beralamat pada http://shmsupport.telkomspeedy.com/admin/login.php?MSG=NOSESSION

Dapat Simpulkan, bahwa pada folder /admin/ terdapat sebuah file index.php yang mem-validasi bahwa hanya user yang sudah LOGIN saja yang dapat mengakses ini. Simplenya, $_SESSION user sudah ter-set.

 Sayangnya, ada cara bagaimana mengakses /admin/ tanpa harus login terlebih dahulu. Bypassing dengan Query SQL??? 

***Bukan jawaban yang tepat pada pembahasan kali ini***

Lalu bagaimana?

*Cukup gunakan command CURL pada console/terminal/CMD, lalu jalankan command berikut:

$ curl -v http://shmsupport.telkomspeedy.com/admin/

Akan muncul sebuah hasil, dimana di perlihatkan bahwa kita dapat melihat isi dari halaman dashboard admin tersebut.



Melihat tulisan LOGOUT bukan? Padahal kita tidak login sama sekali ke website tersebut. Yap, ini merupakan sebuah bug. Melalui console seperti memang akan terbatas untuk melakukan hal-hal lainnya, tapi anda bisa menggunakan sebuah addons pada Browser untuk melakukan ini yaitu NO REDIRECT (https://addons.mozilla.org/en-US/firefox/addon/noredirect/).

*******************************
Kenapa ini bisa terjadi?
Jika kita pernah coding hal seperti ini, kita akan membuat sebuah validasi $_SESSION, untuk memastikan apakah user yang mengakses halaman tersebut sudah login atau belum. Biasanya akan di coding seperti ini:

if(!isset($_SESSION[user])) {
             // lakukan redirect disini jika user belum login
}

Tapi codingan diatas masih memiliki bug, memang jika kita mengaksesnya melalui browser kita akan di arahkan ke halaman yang akan di set di codingan tersebut, namun jika kita melihat melalui CURL tadi, halamannya akan bisa kita lihat.

*******************************
Lalu bagaimana memperbaiki bug ini? dan apakah ini fatal?

Untuk memperbaiki ini simple saja, tambahkan die() ataupun exit() setelah bagian Lakukan Redirect.

if(!isset($_SESSION[user])) {
              // lakukan redirect disini jika user belum login
              exit();
}

Codingan diatas akan langsung menutup tadi jika kita mengakses melalui CURL, dan potongan code dashboard admin tadi tidak akan bisa dilihat lagi.

Jika terdapat informasi yang sensitif seperti dokument pribadi/dokument user/customer/client atau hal lainnya yang terdapat pada halaman tersebut, akan sangat mudah sekali didapatkan karena mereka masuk/melihat tanpa harus melalui sebuah authentikasi yang valid. Hal ini juga bisa menjadi awal terjadinya Exploitasi dengan CSRF, dan lainnya.



Oke sekian dulu tutorial kali ini, semoga bermanfaat.

6 comments:

  1. wah konsolnya pakai manjaro ya gan hehe :P

    ReplyDelete
  2. weh keren informasi nya mas agus, tapi saya dah terbiasa codingan pake exit(); jadi gk masalah kwkwkwk

    ReplyDelete
  3. Hahaha iya bang, dulu gua pernah alamin bug gini juga soalnya

    ReplyDelete
  4. Thx infonya gan, ane baru tau bisa gitu

    ReplyDelete
  5. This comment has been removed by the author.

    ReplyDelete