    {"id":970,"date":"2021-06-06T23:20:03","date_gmt":"2021-06-06T23:20:03","guid":{"rendered":"http:\/\/student-activity.binus.ac.id\/csc\/?p=970"},"modified":"2021-06-07T00:24:29","modified_gmt":"2021-06-07T00:24:29","slug":"sql-injection","status":"publish","type":"post","link":"https:\/\/student-activity.binus.ac.id\/csc\/2021\/06\/sql-injection\/","title":{"rendered":"SQL INJECTION"},"content":{"rendered":"<p style=\"text-align: justify\"><b>Pengertian <em>SQL<\/em><\/b><\/p>\n<p style=\"text-align: justify\"><span style=\"font-weight: 400\">Sebelum kita masuk lebih dalam ke arah <\/span><em><span style=\"font-weight: 400\">SQL Injection<\/span><\/em><span style=\"font-weight: 400\">, kita perlu tahu terlebih dahulu apa itu <\/span><em><span style=\"font-weight: 400\">SQL<\/span><\/em><span style=\"font-weight: 400\">. <\/span><em><span style=\"font-weight: 400\">SQL<\/span><\/em><span style=\"font-weight: 400\"> merupakan singkatan dari <\/span><em><b>S<\/b><span style=\"font-weight: 400\">tructured <\/span><b>Q<\/b><span style=\"font-weight: 400\">uery <\/span><b>L<\/b><span style=\"font-weight: 400\">anguage<\/span><\/em><span style=\"font-weight: 400\"> yang merupakan bahasa pemrograman untuk mengakses dan memanipulasi <\/span><em><span style=\"font-weight: 400\">database<\/span><\/em><span style=\"font-weight: 400\">. <\/span><em><span style=\"font-weight: 400\">Database<\/span><\/em><span style=\"font-weight: 400\"> atau basis data sendiri merupakan sekumpulan data yang dikelola sedemikian rupa dengan ketentuan-ketentuan tertentu sehingga menjadi data yang terorganisir. Setelah kita memahami apa itu <\/span><em><span style=\"font-weight: 400\">SQL<\/span><\/em><span style=\"font-weight: 400\"> dan <\/span><em><span style=\"font-weight: 400\">database<\/span><\/em><span style=\"font-weight: 400\">, sekarang kita akan lanjut ke <\/span><em><span style=\"font-weight: 400\">SQL Injection<\/span><span style=\"font-weight: 400\">. <\/span><span style=\"font-weight: 400\">SQL Injection <\/span><\/em><span style=\"font-weight: 400\">adalah sebuah teknik penyerangan terhadap kelemahan atau celah yang dimiliki oleh <\/span><em><span style=\"font-weight: 400\">SQL<\/span><\/em><span style=\"font-weight: 400\">. Penyerangan tersebut memanfaatkan celah dimana <\/span><em><span style=\"font-weight: 400\">user<\/span><\/em><span style=\"font-weight: 400\"> dapat menginputkan karakter apapun yang berarti <\/span><em><span style=\"font-weight: 400\">user<\/span><\/em><span style=\"font-weight: 400\"> dapat memasukkan <\/span><span style=\"font-weight: 400\"><em>command<\/em> <\/span><span style=\"font-weight: 400\">atau <\/span><em><span style=\"font-weight: 400\">query <\/span><span style=\"font-weight: 400\">SQL <\/span><\/em><span style=\"font-weight: 400\">dengan tujuan untuk mendapatkan informasi penting yang berada di dalam <\/span><em><span style=\"font-weight: 400\">database<\/span><\/em><span style=\"font-weight: 400\">, seperti data <\/span><i><span style=\"font-weight: 400\">personal <\/span><\/i><span style=\"font-weight: 400\">dari <\/span><span style=\"font-weight: 400\"><em>user<\/em> <\/span><span style=\"font-weight: 400\">lain, <\/span><span style=\"font-weight: 400\"><em>login<\/em> <\/span><span style=\"font-weight: 400\">sebagai <\/span><span style=\"font-weight: 400\"><em>user<\/em> <\/span><span style=\"font-weight: 400\">lain, atau bahkan sebagai admin.<\/span><\/p>\n<p style=\"text-align: justify\"><b>Cara Kerja <\/b><em><b>SQL Injection<\/b><\/em><\/p>\n<p style=\"text-align: justify\"><span style=\"font-weight: 400\"><em>SQL Injection<\/em> memanfaatkan input yang tidak difilter<\/span> <span style=\"font-weight: 400\">oleh suatu <\/span><em><span style=\"font-weight: 400\">website<\/span><\/em><span style=\"font-weight: 400\">. Oleh karena itu, <\/span><span style=\"font-weight: 400\"><em>attacker<\/em> <\/span><span style=\"font-weight: 400\">dapat menginputkan tanda &#8216; (petik satu) yang biasanya dimasukkan melalui <\/span><em><span style=\"font-weight: 400\">input bar<\/span><\/em><span style=\"font-weight: 400\">, seperti yang ada pada <\/span><em><span style=\"font-weight: 400\">login page<\/span><\/em><span style=\"font-weight: 400\">. Petik satu yang diinputkan akan merusak susunan atau syntax dari <\/span><span style=\"font-weight: 400\"><em>command<\/em> <\/span><span style=\"font-weight: 400\">atau <\/span><em><span style=\"font-weight: 400\">query SQL<\/span><\/em><span style=\"font-weight: 400\">. Misalnya terdapat <\/span><span style=\"font-weight: 400\"><em>command<\/em> <\/span><span style=\"font-weight: 400\">atau <\/span><em><span style=\"font-weight: 400\">query <\/span><\/em><span style=\"font-weight: 400\"><em>SQL<\/em> <\/span><span style=\"font-weight: 400\">sebagai berikut:<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400\">uname = request.POST[&#8216;username&#8217;]<\/span><\/p>\n<p><span style=\"font-weight: 400\">passwd = request.POST[&#8216;password&#8217;]<\/span><\/p>\n<p><span style=\"font-weight: 400\">sql = \u201cSELECT id FROM users WHERE username=\u2019\u201d + uname + \u201c\u2019 AND password=\u2019\u201d + passwd + \u201c\u2019\u201d<\/span><\/p>\n<p><span style=\"font-weight: 400\">database.execute(sql)<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: justify\"><span style=\"font-weight: 400\">Apabila <\/span><span style=\"font-weight: 400\"><em>attacker<\/em> <\/span><span style=\"font-weight: 400\">memasukkan petik satu ke dalam <\/span><em><span style=\"font-weight: 400\">input bar password<\/span><\/em><span style=\"font-weight: 400\">, maka nantinya petik satu akan masuk ke dalam variabel passwd dan akan digunakan oleh variabel <\/span><span style=\"font-weight: 400\"><em>sql<\/em> <\/span><span style=\"font-weight: 400\">untuk validasi <\/span><em><span style=\"font-weight: 400\">login<\/span><\/em><span style=\"font-weight: 400\">. Petik satu tersebut akan merubah query <em>SQL<\/em> menjadi seperti berikut:<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400\">SELECT id FROM users WHERE username=&#8217;username&#8217; AND password=&#8221;&#8217;<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: justify\"><span style=\"font-weight: 400\"><em>Query<\/em> tersebut akan menimbulkan <\/span><span style=\"font-weight: 400\"><em>error<\/em> <\/span><span style=\"font-weight: 400\">karena terdapat satu petik yang tidak ditutup dengan petik satu lainnya. Karena <em>attacker <\/em>dapat menginputkan petik satu, maka <\/span><span style=\"font-weight: 400\"><em>attacker<\/em> <\/span><span style=\"font-weight: 400\">dapat memasukkan validasi dimana program akan selalu memberikan nilai <\/span><em><span style=\"font-weight: 400\">true<\/span><\/em><span style=\"font-weight: 400\"> dengan menggunakan <\/span><i><span style=\"font-weight: 400\">query <\/span><\/i><span style=\"font-weight: 400\">\u201c &#8216; or 1=1 &#8212; \u201d. 1=1 akan selalu memberikan nilai <\/span><i><span style=\"font-weight: 400\">true <\/span><\/i><span style=\"font-weight: 400\">dan \u201c&#8211;\u201d merupakan tanda <\/span><em><span style=\"font-weight: 400\">comment<\/span><\/em><span style=\"font-weight: 400\"> di <\/span><em><span style=\"font-weight: 400\">SQL<\/span><\/em><span style=\"font-weight: 400\">, yang digunakan untuk membuat <\/span><span style=\"font-weight: 400\"><em>query<\/em> <\/span><span style=\"font-weight: 400\">selanjutnya tidak digunakan. Apabila kita coba masukkan ke dalam <\/span><em><span style=\"font-weight: 400\">query SQL<\/span><\/em><span style=\"font-weight: 400\"> di atas, maka akan jadi seperti ini:<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400\">SELECT id FROM users WHERE username=&#8217;username&#8217; AND password=&#8221;or 1=1 &#8211;&#8216;<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: justify\"><span style=\"font-weight: 400\"><em>Query<\/em> <\/span><span style=\"font-weight: 400\">di atas tidak akan menimbulkan <\/span><i><span style=\"font-weight: 400\">error<\/span><\/i><span style=\"font-weight: 400\">, karena petik satu yang sebelumnya tidak ditutup menjadi <\/span><em><span style=\"font-weight: 400\">comment<\/span><\/em><span style=\"font-weight: 400\"> dengan menggunakan <\/span><em><span style=\"font-weight: 400\">double dash<\/span><\/em><span style=\"font-weight: 400\"> \u201c&#8211;\u201d. Karena program akan memberikan nilai <\/span><em><span style=\"font-weight: 400\">true<\/span><\/em><span style=\"font-weight: 400\">, maka <\/span><span style=\"font-weight: 400\"><em>attacker<\/em> <\/span><span style=\"font-weight: 400\">dapat <\/span><span style=\"font-weight: 400\"><em>login<\/em> <\/span><span style=\"font-weight: 400\">menjadi <\/span><em><span style=\"font-weight: 400\">user<\/span><\/em><span style=\"font-weight: 400\"> lain hanya dengan menggunakan <\/span><em><span style=\"font-weight: 400\">SQL Injection <\/span><\/em><span style=\"font-weight: 400\">sederhana.<\/span><\/p>\n<p style=\"text-align: justify\"><b>Exploit <\/b><em><b>SQL Injection<\/b><\/em><\/p>\n<p style=\"text-align: justify\"><span style=\"font-weight: 400\">Setelah Mengetahui apa itu <em>SQL<\/em> dan cara kerja dari<\/span><em><span style=\"font-weight: 400\"> SQL Injection<\/span><\/em><span style=\"font-weight: 400\">, sekarang kita lihat bagaimana sih contoh <\/span><em><span style=\"font-weight: 400\">SQL Injection<\/span><\/em><span style=\"font-weight: 400\"> sederhana. Di sini, saya akan mempraktikkan cara menyelesaikan <\/span><em><span style=\"font-weight: 400\">challenge<\/span><\/em><span style=\"font-weight: 400\"> picoCTF 2019 yang bernama \u201cIrish-Name-Repo 3\u201d yang dapat diakses di <\/span><em><span style=\"font-weight: 400\">link<\/span><\/em><span style=\"font-weight: 400\"> berikut\u00a0 (<\/span><a href=\"http:\/\/2019shell1.picoctf.com:12271\/\"><span style=\"font-weight: 400\">http:\/\/2019shell1.picoctf.com:12271\/<\/span><\/a><span style=\"font-weight: 400\">).<\/span><\/p>\n<p style=\"text-align: justify\"><span style=\"font-weight: 400\">Pada halaman utama <\/span><span style=\"font-weight: 400\"><em>web<\/em> <\/span><span style=\"font-weight: 400\">tersebut hanya ditemukan gambar-gambar dan sedikit <\/span><em><span style=\"font-weight: 400\">text<\/span><\/em><span style=\"font-weight: 400\">. Namun, ketika membuka <\/span><em><span style=\"font-weight: 400\">menu<\/span><\/em><span style=\"font-weight: 400\">, didapatkan sebuah pilihan yang menarik, yaitu \u201cAdmin Login\u201d.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-973\" src=\"http:\/\/student-activity.binus.ac.id\/csc\/wp-content\/uploads\/sites\/37\/2021\/06\/unnamed-file.jpg\" alt=\"\" width=\"601\" height=\"190\" \/><\/p>\n<p style=\"text-align: justify\"><span style=\"font-weight: 400\">Ketika dibuka, terlihat sebuah <\/span><em><span style=\"font-weight: 400\">form password<\/span><\/em><span style=\"font-weight: 400\"> untuk menjadi<\/span><em><span style=\"font-weight: 400\"> admin<\/span><\/em><span style=\"font-weight: 400\">. Menarik sekali!<\/span><\/p>\n<p style=\"text-align: justify\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-972\" style=\"font-style: normal;font-weight: 400;font-family: 'Open Sans', Helvetica, Arial, sans-serif;font-size: 14px\" src=\"http:\/\/student-activity.binus.ac.id\/csc\/wp-content\/uploads\/sites\/37\/2021\/06\/1.png\" alt=\"\" width=\"512\" height=\"120\" \/><\/p>\n<p style=\"text-align: justify\"><span style=\"font-weight: 400\">Pertama-tama, kita melakukan <\/span><em><span style=\"font-weight: 400\">Inspect Element<\/span><\/em><span style=\"font-weight: 400\"> pada bagian<\/span><em><span style=\"font-weight: 400\"> form<\/span><\/em><span style=\"font-weight: 400\"> tersebut dan didapatkan hasil seperti berikut.<\/span><\/p>\n<p style=\"text-align: justify\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-974\" src=\"http:\/\/student-activity.binus.ac.id\/csc\/wp-content\/uploads\/sites\/37\/2021\/06\/2.png\" alt=\"\" width=\"512\" height=\"180\" \/><\/p>\n<p style=\"text-align: justify\"><span style=\"font-weight: 400\">Dari <\/span><em><span style=\"font-weight: 400\">form<\/span><\/em><span style=\"font-weight: 400\"> tersebut, didapat dua buah <\/span><em><span style=\"font-weight: 400\">inpu<\/span><\/em><span style=\"font-weight: 400\"><em>t<\/em> yang dikirim ke dalam server. Pertama adalah <\/span><em><span style=\"font-weight: 400\">password<\/span><\/em><span style=\"font-weight: 400\"> dan yang kedua adalah <\/span><em><span style=\"font-weight: 400\">debug<\/span><\/em><span style=\"font-weight: 400\"> yang bernilai <\/span><i><span style=\"font-weight: 400\">default<\/span><\/i><span style=\"font-weight: 400\"> 0. Menarik, kita coba ubah nilai <\/span><em><span style=\"font-weight: 400\">debug<\/span><\/em><span style=\"font-weight: 400\"> menjadi 1 dan memasukkan <\/span><em><span style=\"font-weight: 400\">password<\/span><\/em><span style=\"font-weight: 400\"> \u201ctest\u201d.<\/span><\/p>\n<p style=\"text-align: justify\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-975\" src=\"http:\/\/student-activity.binus.ac.id\/csc\/wp-content\/uploads\/sites\/37\/2021\/06\/3.png\" alt=\"\" width=\"512\" height=\"387\" \/><\/p>\n<p style=\"text-align: justify\"><span style=\"font-weight: 400\">Didapatkan hasil yang menarik, <\/span><em><span style=\"font-weight: 400\">password<\/span><\/em><span style=\"font-weight: 400\"> awal kita \u201ctest\u201d berubah menjadi \u201cgrfg\u201d, sepertinya <\/span><em><span style=\"font-weight: 400\">password<\/span><\/em><span style=\"font-weight: 400\"> tersebut telah dienkripsi dan terlihat <\/span><em><span style=\"font-weight: 400\">SQL query-<\/span><\/em><span style=\"font-weight: 400\">nya.<\/span><\/p>\n<p style=\"text-align: justify\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-976\" src=\"http:\/\/student-activity.binus.ac.id\/csc\/wp-content\/uploads\/sites\/37\/2021\/06\/4.png\" alt=\"\" width=\"512\" height=\"140\" \/><\/p>\n<p style=\"text-align: justify\"><span style=\"font-weight: 400\">Kita coba masukkan <\/span><em><span style=\"font-weight: 400\">password<\/span><\/em><span style=\"font-weight: 400\"> \u201cabcdef\u201d dan mengubah nilai <\/span><em><span style=\"font-weight: 400\">debug<\/span><\/em><span style=\"font-weight: 400\"> menjadi 1 dan didapatkan hasil yang lebih jelas. Hasil enkripsi password menjadi \u201cnopqrs\u201d yang mana berurutan dan dapat disimpulkan bahwa enkripsi yang digunakan adalah ROT13 (menggeser <\/span><i><span style=\"font-weight: 400\">input<\/span><\/i><span style=\"font-weight: 400\"> sebanyak 13 karakter).<\/span><\/p>\n<p style=\"text-align: justify\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-977\" src=\"http:\/\/student-activity.binus.ac.id\/csc\/wp-content\/uploads\/sites\/37\/2021\/06\/5.png\" alt=\"\" width=\"512\" height=\"119\" \/><\/p>\n<p style=\"text-align: justify\"><span style=\"font-weight: 400\">Kita coba masukkan <\/span><em><span style=\"font-weight: 400\">SQL Injection<\/span><\/em><span style=\"font-weight: 400\"> sederhana <\/span><span style=\"font-weight: 400\"><strong>&#8216; OR 1=1<\/strong> &#8212;<\/span><span style=\"font-weight: 400\">. Namun, sebelum melakukan<\/span><em><span style=\"font-weight: 400\"> injection<\/span><\/em><span style=\"font-weight: 400\">, terlebih dahulu kita melakukan enkripsi ROT13 ke dalam <\/span><em><span style=\"font-weight: 400\">SQL Injection<\/span><\/em><span style=\"font-weight: 400\"> kita sehingga menjadi <\/span><strong>&#8216; BE 1=1 &#8212;<\/strong><span style=\"font-weight: 400\">. Kemudian, kita masukkan <\/span><em><span style=\"font-weight: 400\">injection<\/span><\/em><span style=\"font-weight: 400\"> tersebut ke dalam <\/span><em><span style=\"font-weight: 400\">form<\/span> <span style=\"font-weight: 400\">password<\/span><\/em><span style=\"font-weight: 400\"> dan mengubah nilai <\/span><em><span style=\"font-weight: 400\">debug<\/span><\/em><span style=\"font-weight: 400\"> menjadi 1 sehingga didapatkan hasil sebagai berikut.<\/span><\/p>\n<p style=\"text-align: justify\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-978\" src=\"http:\/\/student-activity.binus.ac.id\/csc\/wp-content\/uploads\/sites\/37\/2021\/06\/6.png\" alt=\"\" width=\"512\" height=\"167\" \/><\/p>\n<p style=\"text-align: justify\"><em><span style=\"font-weight: 400\">SQL Injection<\/span><\/em><span style=\"font-weight: 400\"> berhasil dilakukan dan kita sekarang berhasil menjadi admin.<\/span><\/p>\n<p style=\"text-align: justify\">\n","protected":false},"excerpt":{"rendered":"<p>Pengertian SQL Sebelum kita masuk lebih dalam ke arah SQL Injection, kita perlu tahu terlebih dahulu apa itu SQL. SQL merupakan singkatan dari Structured Query Language yang merupakan bahasa pemrograman untuk mengakses dan memanipulasi database. Database atau basis data sendiri merupakan sekumpulan data yang dikelola sedemikian rupa dengan ketentuan-ketentuan tertentu sehingga menjadi data yang terorganisir. [&hellip;]<\/p>\n","protected":false},"author":42,"featured_media":982,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[28,26,27],"class_list":["post-970","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-articles","tag-database","tag-sql","tag-sql-injection"],"_links":{"self":[{"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/posts\/970","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/users\/42"}],"replies":[{"embeddable":true,"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/comments?post=970"}],"version-history":[{"count":8,"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/posts\/970\/revisions"}],"predecessor-version":[{"id":984,"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/posts\/970\/revisions\/984"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/media\/982"}],"wp:attachment":[{"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/media?parent=970"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/categories?post=970"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/tags?post=970"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}