1 Oracle Sangat mudah untuk memperkenalkan Oracle sebagai database RDBMS yang relatif awal dengan pangsa pasar yang relatif besar dan sering digunakan di beberapa database yang sangat besar. Selain dukungannya yang baik untuk berbagai bahasa SQL, ia juga menyediakan beragam paket yang kaya, prosedur tersimpan, dan bahkan mendukung pembuatan java dan perpustakaan.
Oracle sendiri memiliki banyak akun default dan banyak prosedur tersimpan. Prosedur tersimpan ini dibuat oleh sistem. Banyak akun default terbuka untuk umum. Dalam beberapa tahun terakhir, banyak kerentanan Oracle telah dirilis, termasuk overflow dan SQL. Ada banyak kelemahan termasuk suntikan. Di sini, kerentanan injeksi SQL sangat penting, karena di Oracle, tanpa menambahkan kata kunci lain AUTHID CURRENT_USER, proses tersimpan yang dibuat berjalan sebagai pencipta saat dijalankan, dan publik tidak memiliki akses ke proses tersimpan ini Semua memiliki izin untuk memanggil, jadi jika ada injeksi dalam proses tersimpan bawaan, mudah bagi pengguna biasa untuk meningkatkan ke izin sistem Oracle. Oracle sendiri memiliki banyak akun bawaan, beberapa di antaranya memiliki kata sandi default dan memiliki izin CONNECT. Dengan cara ini, jika port Oracle tidak dilindungi oleh firewall dan dapat dihubungkan dari jarak jauh, akun default dapat digunakan masuk ke sistem dari jarak jauh dan kemudian menggunakan SQL dari proses yang disimpan dalam sistem untuk menyuntikkan kerentanan, sistem akan crash. Tentu saja, masuk ke Oracle memerlukan SID, tetapi tnslintener Oracle tidak menetapkan kata sandi secara default, sehingga Anda dapat menggunakan tnscmd .pl menggunakan perintah layanan untuk mengetahui SID sistem (dalam versi yang lebih baru, kelemahan ini telah diperbaiki).
2 Latar Belakang Teknis Peretasan Web Oracle
Tabel sistem kaya Oracle. Hampir semua informasi di Oracle disimpan dalam tabel sistem. Status operasi database saat ini, informasi pengguna saat ini, informasi database saat ini, informasi tentang database dan tabel yang dapat diakses pengguna... tabel sistem adalah Bagian inti dari keseluruhan database hampir dapat diakses. dapatkan semua informasi dengan menanyakan tabel sistem yang sangat dibutuhkan. Misalnya, sys.v_$option berisi beberapa informasi tentang database saat ini, seperti apakah database tersebut mendukung Java, dll., all_tables berisi semua informasi tabel, all_tab_colmuns berisi semua informasi kolom, dll., yang memberi kita cara yang sangat luas untuk memperoleh informasi. Kenyamanan, nantinya akan terkait dengan uraian cara menggunakan tabel sistem untuk memperoleh informasi sensitif.
Di antara berbagai kerentanan Oracle, penting untuk berbicara tentang injeksi prosedur tersimpan. Faktanya, tidak ada misteri. Prosedur dan fungsi tersimpan juga menerima masukan pengguna dan kemudian mengirimkannya ke server database untuk dianalisis dan dieksekusi dipilih Jika skema dibuat menjadi string SQL dan diimplementasikan, maka akan mudah untuk mencampur data dan perintah, sehingga menghasilkan injeksi SQL. Namun tergantung di mana penyuntikan terjadi, sifat kerentanan penyuntikan juga berbeda. Oracle menggunakan PL/SQL, dan kerentanan terjadi pada bahasa DML seperti select. Karena tidak mendukung implementasi banyak bahasa, jika Anda ingin menjalankan bahasa Anda sendiri seperti GRANT DBA TO LOVEHSELL dan bahasa DDL lainnya. , Anda harus membuatnya sendiri. Fungsi atau prosedur tersimpan, jika Anda tidak memiliki izin yang relevan, Anda juga dapat menggunakan injeksi kursor dan menggunakan paket dbms_sql untuk menghindari batasan. Sebagian besar suntikan adalah suntikan terbatas di atas. Anda harus bergantung pada beberapa paket atau kursor lain yang dibuat sendiri untuk mencapai tujuan meningkatkan izin. Namun, masih ada beberapa kerentanan yang sangat umum tetapi lingkungan injeksi sangat longgar, yaitu pengguna input.Injeksi blok pl/sql anonim ditempatkan di antara awal dan akhir. Dalam hal ini, injeksi dapat langsung disuntikkan ke beberapa kata, hampir tanpa batasan masalah bagi web kami. Teknologi injeksi telah mengembalikan kecemerlangan tersebut.
Oke, yang disebutkan di atas adalah beberapa teknologi ofensif Oracle, tetapi di banyak lingkungan saat ini, layanan web terbuka untuk dunia luar, dan database bos backend dilindungi oleh firewall. Tidak mungkin kehilangan terlalu banyak informasi detail dari database , dan tidak mungkin lagi untuk masuk secara langsung. Basis data sedang beroperasi. Saat ini, sekarang saatnya mempertimbangkan untuk menggunakan kerentanan yang dihentikan web untuk menyerang basis data pendukung. Sekarang mari kita lihat bagaimana mengembangkan injeksi di lingkungan web Oracle! Oracle dapat bekerja dengan baik di berbagai lingkungan web, dan dampak dari berbagai lingkungan web pada injeksi kami tidak terlalu besar parameter yang masuk tidak difilter sama sekali, tetapi karena bahasa .net dan jsp adalah bahasa kategori yang kuat, bahkan jika bahasa SQL tidak difilter ketika menyangkut injeksi numerik, kesalahan mungkin terjadi saat menerima parameter Kelas string memiliki lebih banyak parameter. Di lingkungan php, semua ' akan di-escape sebagai ', di lingkungan Oracle ' tidak akan di-escape (pelarian yang benar di lingkungan Oracle seharusnya ''), tetapi di lingkungan kita sendiri. Penggunaan 'dalam wacana injeksi bisa rusak karena diubah menjadi ', sehingga tidak dapat digunakan saat injeksi'. Kecuali, tidak ada batasan di lingkungan web. Dalam hal database, jika wacana dijalankan dalam mode parameter, maka tidak dapat disuntikkan kecuali mode koneksi string digunakan (karena mode koneksi string relatif sederhana, dan karena beberapa alasan historis, banyak pemrogram Bentuk ini sering kali lebih disukai, ). Mode koneksi string juga akan dibagi menjadi dua jenis. Parameternya ada di kata DML seperti pilih, perbarui, dan sisipkan, dan parameternya ada di blok anonim pl/sql kesalahan, Maka kita dapat dengan mudah menilai kategori wacana saat ini berdasarkan kesalahannya, yang akan dibahas nanti. Ini relatif jarang terjadi di blok anonim pl/sql, tetapi tidak menutup kemungkinan bahwa tidak ada batasan untuk injeksi seperti itu. Anda dapat mengimplementasikan banyak percakapan dan melakukan apa saja, yang tidak berbeda dengan login lokal.
3 Ide dasar Oracle Web Hacking
Bagian selanjutnya membahas tentang cara menentukan target. Penentuan parameter injeksi terserah semua orang. Yang utama adalah bagaimana menentukan apakah database milik Oracle mendukung interpretasi --kategori, tetapi tidak mendukungnya; implementasi terpisah Banyak kata, Oracle memiliki banyak tabel sistem, seperti all_tables. Dengan mengakses tabel ini, Anda juga dapat menentukan apakah itu milik Oracle juga dapat digunakan untuk menentukan, seperti utl_http.request, bahasa Detail kecil juga dapat digunakan untuk membedakan sistem. Misalnya, ||. adalah simbol gabungan di Oracle, tetapi tidak di database lain |chr(123)=chr(123)|. |chr(123) Jika berhasil dijalankan, itu harusnya Oracle. Selain itu, beberapa skrip tidak menangani pesan kesalahan saat terjadi kesalahan kueri database, dan juga bisa bocor database pendukung yang sebenarnya.
Hal berikutnya yang perlu segera ditentukan adalah jenis titik injeksi. Biasanya, parameter yang kita masukkan berupa numerik atau karakter saja (yang oleh banyak orang disebut injeksi tipe pencarian sebenarnya harus diklasifikasikan sebagai karakter). kategori angka, jangan memikirkan apa pun. Sangat mudah untuk menambahkan -- karakter interpretasi untuk membuat ucapan tertutup secara akurat. biasanya menambahkan ' dan - karakter injeksi ini untuk mengatur situasi injeksi Anda sendiri. Dalam beberapa situasi kompleks, seperti parameter yang muncul dalam beberapa kata dan logika sql, Anda harus hati-hati menyusun kata injeksi yang sesuai dengan situasi tersebut. Ingat, kita hanya memerlukan lingkungan lengkap yang dapat dengan mudah mengatur berbagai perintah sql.