Ada banyak cara bagi pengguna jahat untuk memanfaatkan situs web yang rentan. Salah satunya disebut injeksi perintah Show Hari ini, Anda akan mempelajari apa itu injeksi perintah, bagaimana penyerang dapat menggunakannya untuk membahayakan aplikasi web Anda, dan bagaimana Anda dapat mencegah hal itu terjadi di aplikasi PHP Anda. Mari kita langsung ke sana Serangan injeksi perintah didasarkan pada eksekusi kode sewenang-wenang (dan kemungkinan besar berbahaya) pada sistem target Apa itu Injeksi Perintah?Serangan injeksi perintah didasarkan pada eksekusi kode sewenang-wenang (dan kemungkinan besar berbahaya) pada sistem target Dengan kata lain, ini adalah cara menggunakan aplikasi yang dirancang untuk melakukan satu hal untuk tujuan yang sama sekali berbeda Mari kita ambil contoh formulir kontak sederhana. Tujuan dari aplikasi semacam itu sederhana. untuk mengizinkan orang meninggalkan informasi kontak mereka agar seseorang di dalam perusahaan dapat dihubungi. Penyerang mungkin ingin menggunakan aplikasi untuk mencuri informasi tentang pelamar lain, misalnya. Dan mereka mungkin mencapai tujuan itu dengan menyuntikkan kode berbahaya Bagaimana Injeksi Perintah Dilakukan?Agar serangan injeksi perintah terjadi, tiga hal harus terjadi sekaligus
Contoh Perintah Injeksi di PHPKetiga fungsi PHP ini, jika tidak digunakan dengan aman, dapat menyebabkan adanya kerentanan ini
Masalahnya terletak pada kenyataan bahwa mereka semua mengambil string arbitrer sebagai parameter pertama mereka dan meneruskannya ke sistem operasi yang mendasarinya. Ini tidak menyiratkan risiko apa pun jika string ditulis oleh programmer (alias Anda), seperti ini PHP
Namun, karena variabel PHP _Yang tentu saja akan menghasilkan hasil yang sama persis (karena nilai dari Sejauh ini, sangat bagus, bukan? Sekarang, mari kita lihat contoh berikut PHP _Di sini perintah dibuat dari dua sumber. string tetap ("ls") dan parameter URL ( 0)Ini berarti bahwa perintah sebenarnya yang akan dieksekusi bergantung pada input pengguna Katakanlah seseorang mengajukan permintaan seperti 1Saat kode dieksekusi, nilai 2 akan menjadi “-l”, yang akan menghasilkan perintah “ls -l”Tidak ada salahnya dilakukan, kan? Tetapi bagaimana jika pengguna tidak begitu baik? Bagaimana jika mereka mengeluarkan permintaan seperti 3?Perintah yang dihasilkan adalah “ls -l; Jika Anda mengetahui sedikit tentang konsol Linux, Anda harus mengenali perintah “rm * -Rf” … dan menjadi sangat takut. (Jika Anda tidak terbiasa dengan konsol Linux, perintah itu berarti "hapus setiap file di direktori ini dan subdirektorinya. ”) Sangat tidak mungkin seseorang akan mengeluarkan permintaan seperti itu secara tidak sengaja Tetapi jika seseorang ingin merusak situs Anda dan mereka tahu sedikit PHP (atau bahasa pemrograman lainnya), mudah untuk membuat string seperti itu. Jika Anda bertanya-tanya dari mana “-l%3B+rm+%2A+-Rf” berasal, ini adalah hasil dari berikut ini _4Bagaimana Cara Penyerang Membuat Permintaan Injeksi Perintah?Mungkin cara termudah adalah dengan menggunakan formulir Anda sendiri Pada contoh di atas, bayangkan ada halaman sebelumnya yang terlihat seperti ini HTML _Penyerang hanya perlu mengisi kolom 5 dengan “-l%3B+rm+%2A+-Rf” dan tekan “Dapatkan nama file. ”Tidak terlalu rumit, bukan? Jika ingin beralih dari baris perintah, mereka dapat menggunakan alat sederhana seperti cURL, seperti ini _6Keuntungan bagi penyerang menggunakan mekanisme ini adalah, dengan menggunakan alat semacam ini, sangat mudah untuk mengotomatiskan serangan. Dari Mana Data Tidak Aman Berasal?Data yang tidak aman dapat berasal dari beberapa sumber berbeda. Sejauh ini, kita telah membahas parameter URL, tetapi penyerang dapat menggunakan cara apa pun yang tersedia untuk mentransfer informasi ke aplikasi Anda, seperti berikut ini
Contoh 7 akan sangat mirip dengan contoh 9, jadi saya akan melewatkannya untuk menunjukkan kepada Anda bagaimana serangan ini dapat dilakukan menggunakan header HTTPSemuanya dimulai dengan kode Anda menggunakan informasi tersebut untuk menyusun perintah yang akan dikeluarkan ke sistem operasi PHP
Sekarang, yang diperlukan agar serangan berhasil adalah penambahan permintaan yang dibuat dengan hati-hati seperti ini _0Situasi yang sangat mirip dapat ditemukan jika Anda memiliki skrip yang terlihat seperti ini PHP
Dan seseorang mengunggah file yang berisi sesuatu seperti ini _1Anda mungkin bisa melihat polanya sekarang. membabi buta mempercayai input pengguna adalah ide yang buruk Jadi sekarang setelah Anda tahu bagaimana seorang penyerang dapat menyulitkan Anda, mari kita lihat apa yang dapat Anda lakukan untuk mencegahnya terjadi Cara Memperbaiki Kerentanan Injeksi PerintahSeperti yang Anda lihat di bagian sebelumnya dari artikel ini, masalahnya berasal dari penggabungan eksekusi shell langsung dan penggunaan data yang tidak aman Jadi, untuk mencegah hal ini terjadi, ada dua strategi yang mungkin Anda gunakan
Jangan Gunakan Fungsi Eksekusi Direct ShellJika memungkinkan, Anda sebaiknya memilih untuk menggunakan fungsi bawaan daripada perintah OS Misalnya, jika Anda perlu menghapus file dari disk, Anda dapat menggunakan ini _2Atau gunakan ini _3Dengan menggunakan fungsi unlink, Anda secara efektif menghilangkan kemungkinan seseorang menyuntikkan perintah jahat PHP memiliki cukup banyak fungsi yang dapat Anda gunakan untuk menyamarkan panggilan sistem operasi, seperti berikut ini
Dan beberapa lagi yang dapat Anda temukan di sini (sebut saja yang berhubungan dengan sistem file) Efek samping lain yang menarik dari penggunaan fungsi ini adalah peningkatan portabilitas kode Anda Jika Anda menggunakan fungsi eksekusi shell, perintah diinterpretasikan oleh sistem operasi itu sendiri, bukan oleh juru bahasa PHP Ini berarti jika Anda menulis kode di lingkungan Windows tetapi server produksinya adalah Linux atau sejenisnya, semuanya tidak akan berfungsi Tentu saja, akan ada kasus di mana Anda perlu menjalankan perintah khusus yang bukan bagian dari inti PHP, seperti program biner tertentu atau skrip yang Anda buat. Mari kita lihat bagaimana menghadapi situasi seperti itu Jangan Gunakan Data Tidak Aman dalam Kombinasi Dengan Fungsi Eksekusi Direct ShellJika Anda benar-benar perlu menggunakan panggilan sistem, Anda harus menggunakan validasi yang tepat pada data Anda Misalnya, jika Anda akan mengeluarkan perintah seperti ini PHP
Sebaiknya pastikan 4 sebenarnya adalah alamat IPUntuk melakukan validasi tersebut, PHP menyediakan fungsi bawaan yang disebut filter_input, yang dapat Anda gunakan seperti ini PHP
Ada fungsi serupa untuk memvalidasi sumber data lain (dan juga, ada beberapa jenis filter berbeda yang dapat Anda gunakan untuk mengakomodasi kebutuhan khusus Anda) Anda dapat memindai kode Anda secara manual untuk mencari kode berbahaya, atau Anda dapat mempertimbangkan untuk menggunakan alat otomatis yang dapat disertakan langsung ke dalam alur kerja tim Anda Lindungi Kode Anda dari SuntikanHari ini Anda belajar apa itu serangan injeksi perintah, fitur apa yang dimiliki aplikasi PHP agar rentan terhadap serangan semacam itu, dan apa yang harus dilakukan untuk menonaktifkan ancaman semacam itu di aplikasi Anda Sekarang Anda memiliki beberapa pekerjaan rumah yang harus dilakukan Anda dapat memindai kode Anda secara manual untuk mencari kode berbahaya, atau Anda dapat mempertimbangkan untuk menggunakan alat otomatis yang dapat disertakan langsung ke dalam alur kerja tim Anda. Salah satu alat tersebut adalah StackHawk, yang dapat memantau setiap permintaan penarikan dan memberi Anda wawasan tentang cara menyelesaikannya sebelum mencapai produksi Anda dapat membaca detail tentang cara menerapkannya di sini Posting ini ditulis oleh Mauro Chojrin. Mauro membantu pengembang PHP mengasah kemampuan mereka melalui pelatihan, buku, lokakarya, dan alat lainnya. Dia telah berkecimpung di industri TI sejak tahun 1997 dan telah memegang berbagai peran seperti pengembang, arsitek, dan pemimpin tim teknis. Mauro juga suka menulis dan membuat vlog Apa yang dimaksud dengan serangan injeksi?Dalam serangan injeksi, penyerang memberikan masukan yang tidak dapat dipercaya ke program . Input ini diproses oleh juru bahasa sebagai bagian dari perintah atau kueri. Pada gilirannya, ini mengubah eksekusi program itu. Suntikan adalah salah satu serangan tertua dan paling berbahaya yang ditujukan pada aplikasi web.
Apa saja contoh serangan injeksi?Serangan injeksi dapat mencakup panggilan ke sistem operasi melalui panggilan sistem, penggunaan program eksternal melalui perintah shell, atau panggilan ke database backend menggunakan SQL (i. e. , injeksi SQL) . Setiap kali aplikasi menggunakan juru bahasa, ada risiko memperkenalkan kerentanan injeksi.
Apa injeksi SQL di PHP dengan contoh?Apa itu Injeksi PHP SQL?
Mengapa PHP rentan?Kerentanan kode PHP adalah hasil dari kesenjangan yang tersisa saat menulis kode asli . Bisa dibilang 'kerentanan' terjadi karena input pengguna yang 'tidak bersih'. |