Langkah-langkah xp_cmdshell dan sp_xp_cmdshell_proxy_account disimpan di SQL Server

Database


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.


Keluaran cmd Windows

Gambar 1 – Keluaran cmd Windows

Sekarang, jika kita menjalankan perintah yang sama menggunakan prosedur tersimpan xp_cmdshell, kita dapat memeriksa apakah outputnya sama.


Keluarkan xp_cmdshell

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.


Menggunakan parameter no_ouptut

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:

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.


Periksa pengguna Windows untuk menjalankan perintah Windows

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:


Berikan eksekusi prosedur yang disimpan xp_cmdshell

Gambar 5 – Berikan eksekusi prosedur yang disimpan xp_cmdshell

Atau pengecualian berikut dilemparkan:

Izin EXECUTE ditolak pada objek ‘xp_cmdshell’, database ‘mssqlsystemresource’, ‘sys’.


Pengecualian dilempar saat dijalankan tidak diberikan

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:

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.


Mulai SSMS sebagai administrator

Gambar 7 – Memulai SSMS sebagai administrator

Setelah memulai ulang SQL Server Management Studio, prosedur yang disimpan akan berhasil dijalankan.


Jalankan prosedur tersimpan sp_xp_cmdshell_proxy_account

Gambar 8 – Perintah berhasil dijalankan

Validitas ## xp_cmdshell_proxy_account ## dibuat dan dilihat dari folder “Kredensial” di browser server.


Kredensial dibuat setelah menjalankan sp_xp_cmdshell_proxy_account

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.


xp_cmdshell dieksekusi menggunakan kredensial 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.

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.

Hadi Fazlullah
Postingan terakhir oleh Hadi Fazlullah (Lihat semua)



Source link

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *