Artikel ini menjelaskan prosedur tersimpan xp_cmdshell dan sp_xp_cmdshell_proxy_account di SQL Server dan bagaimana pengembang menggunakannya untuk menjalankan perintah Windows.
Apa prosedur tersimpan xp_cmdshell?
Singkatnya, xp_cmdshell adalah prosedur yang disimpan pada sistem di SQL Server. Ini memungkinkan Anda untuk menjalankan perintah shell Windows dari lingkungan SQL Server. Saat perintah dikirim sebagai string input, output shell dikembalikan sebagai baris teks.
xp_cmdshell mengambil dua parameter. Satu diperlukan dan satu optimal:
- Perintah shell Windows: (Diperlukan, Arah: Input, Tipe Data: NVarchar (4000) atau Varchar (8000)): Perintah yang dikirim ke sistem operasi Windows.
- Tanpa_keluar (Opsional, Arah: Input): Saat kata kunci ini dikirim ke xp_cmdshell, tidak ada output yang dikembalikan.
Direktori default adalah folder xp_cmdshell dari sistem Windows32. (C:\Windows\System32).
Mari kita periksa perbedaan antara menjalankan perintah di shell Windows atau menggunakan prosedur tersimpan xp_cmdshell. Mari kita jalankan perintah dir untuk membuat daftar semua file yang dapat dieksekusi di direktori ini. Pertama-tama mari kita jalankan perintah dari shell perintah Windows. Gambar di bawah ini menunjukkan output dari perintah tersebut.
Gambar 1 – Keluaran cmd Windows
Sekarang, jika kita menjalankan perintah yang sama menggunakan prosedur tersimpan xp_cmdshell, kita dapat memeriksa apakah outputnya sama.
Gambar 2 – keluaran xp_cmdshell
Sekarang mari kita coba menggunakannya Tanpa_keluar kata kunci. Seperti yang ditunjukkan pada gambar di bawah, tidak ada hasil yang dikembalikan.
Gambar 3 – Menggunakan parameter no_ouptut
Bagaimana xp_cmdshell diaktifkan?
Secara default, pengecualian berikut dibuat saat kami mencoba menjalankan prosedur tersimpan xp_cmdshell:
SQL Server memblokir akses ke prosedur ‘sys.xp_cmdshell’ untuk komponen ‘xp_cmdshell’ karena komponen ini dimatikan sebagai bagian dari konfigurasi keamanan server. Administrator sistem dapat mengaktifkan penggunaan ‘xp_cmdshell’ menggunakan sp_configure. Untuk informasi selengkapnya tentang mengaktifkan “xp_cmdshell”, cari “xp_cmdshell” di SQL Server Books Online.
Menurut dokumen Microsoft, fitur ini dinonaktifkan karena pengguna jahat terkadang mencoba menggunakannya untuk meningkatkan skor mereka. Untuk mengaktifkan fitur ini, pertama-tama kita harus menggunakan metode yang disimpan sp_configure untuk mengaktifkan pengaturan lanjutan, kemudian untuk mengaktifkan penggunaan xp_cmdshell:
EXEC sp_configure “Tampilkan opsi lanjutan”kan 1; Pergi Konfigurasi ulang; Pergi EXEC sp_configure ‘xp_cmdshell’kan 1; Pergi Konfigurasi ulang; Pergi |
Bagaimana xp_cmdshell menjalankan perintah Windows?
Satu pertanyaan yang mungkin muncul di benak adalah bagaimana xp_cmdshell menjalankan perintah Windows? Untuk apa akun tersebut digunakan?
Saat dipanggil oleh pengguna yang merupakan anggota peran SysAdmin, xp_cmdshell menggunakan akun Layanan SQL Server untuk menjalankan perintah di Windows. Kerentanan utama adalah bahwa akun layanan sering kali memiliki lebih banyak hak istimewa daripada proses yang berjalan, yang berarti bahwa itu hanya boleh diaktifkan untuk pengguna tertentu.
Gambar 4 – Memeriksa pengguna Windows untuk menjalankan perintah Windows
Jika pengguna bukan anggota Peran SysAdmin, xp_cmdshell menjalankan perintah menggunakan nama akun dan kata sandi yang disimpan di akun bernama. ## xp_cmdshell_proxy_account ##. Jika proxy ini tidak ada, xp_cmdshell akan dinonaktifkan.
Menggunakan metode yang disimpan sp_xp_cmdshell_proxy_account
Misalkan kita perlu menjalankan prosedur xp_cmdshell yang disimpan dari pengguna yang bukan milik peran SysAdmin. Dalam hal ini, pertama-tama kita harus menetapkan eksekusi ke pemetaan Pengguna basis data Menggunakan perintah berikut:
Menganugerahkan Lari Pada xp_cmdshell Ke Pengguna Uji |
Gambar 5 – Berikan eksekusi prosedur yang disimpan xp_cmdshell
Atau pengecualian berikut dilemparkan:
Izin EXECUTE ditolak pada objek ‘xp_cmdshell’, database ‘mssqlsystemresource’, ‘sys’.
Gambar 6 – Pengecualian dilemparkan saat eksekusi tidak diberikan
Saat dipanggil oleh pengguna yang bukan anggota peran server statis sysadmin, xp_cmdshell terhubung ke Windows menggunakan nama akun dan kata sandi yang disimpan di akun bernama. ## xp_cmdshell_proxy_account ##. Jika proxy ini tidak ada, xp_cmdshell akan gagal dengan pesan kesalahan berikut.
Informasi akun proxy xp_cmdshell tidak dapat diambil atau tidak valid. Pastikan “## xp_cmdshell_proxy_account ##” valid dan berisi informasi yang valid.
Buat kredit akun proxy
Untuk mengonfigurasi ## xp_cmdshell_proxy_account ##, Kita harus menggunakan prosedur tersimpan dari sistem sp_xp_cmdshell_proxy_account. Prosedur tersimpan ini memiliki dua kegunaan: Membuat dan menghapus kredensial akun proxy.
Untuk membuat akun proxy, kita perlu meneruskan dua parameter ke prosedur tersimpan sp_xp_cmdshell_proxy_account: Nama pengguna dan kata sandi Windows sebagai berikut:
EXEC sp_xp_cmdshell_proxy_account ‘nama belakang’ kan ‘Kata sandi’ |
Pengecualian “akses ditolak” masih dapat terjadi jika kami mengirim kredensial yang benar ke prosedur tersimpan sp_xp_cmdshell_proxy_account.
Terjadi kesalahan saat menjalankan sp_xp_cmdshell_proxy_account. Kemungkinan penyebab: Akun yang diberikan tidak valid atau akun “## xp_cmdshell_proxy_account ##” tidak dibuat. Kode kesalahan: 5 (akses ditolak.), Status kesalahan: 0.
Untuk mengatasi kesalahan ini, kita harus menutup SQL Server Management Studio dan memulai ulang sebagai administrator.
Gambar 7 – Memulai SSMS sebagai administrator
Setelah memulai ulang SQL Server Management Studio, prosedur yang disimpan akan berhasil dijalankan.
Gambar 8 – Perintah berhasil dijalankan
Validitas ## xp_cmdshell_proxy_account ## dibuat dan dilihat dari folder “Kredensial” di browser server.
Gambar 9 – Validitas akun proxy dibuat
Sekarang, mari kita jalankan perintah Whoami untuk memeriksa apakah pengguna Windows menjalankan perintah xp_cmdshell di Windows. Gambar di bawah ini menunjukkan bahwa perintah dijalankan menggunakan kredensial Windows yang ditentukan di akun proxy.
Gambar 10 – Eksekusi perintah Whoami
Hapus kredit akun proxy
Untuk menghapus akun proxy yang ada, Anda harus mengirim nilai NULL ke prosedur tersimpan sp_xp_cmdshell_proxy_account.
EXEC sp_xp_cmdshell_proxy_account kosong |
Ringkasan
Artikel ini menjelaskan cara menyimpan sistem xp_cmdshell di SQL Server dan cara menggunakannya. Selain itu, dijelaskan cara membuat kredit akun proxy menggunakan metode yang disimpan sp_xp_cmdshell_proxy_account.
