Rumah  >  Artikel  >  Peranti teknologi  >  Perbincangan ringkas tentang kaedah memuat naik fail untuk mendapatkan kebenaran

Perbincangan ringkas tentang kaedah memuat naik fail untuk mendapatkan kebenaran

王林
王林ke hadapan
2023-04-09 09:11:031096semak imbas

Ikhtisar

Kerentanan muat naik fail berlaku dalam aplikasi dengan fungsi muat naik Jika aplikasi tidak mempunyai kawalan ke atas fail yang dimuat naik pengguna atau mempunyai kecacatan, penyerang boleh mengeksploitasi kecacatan dalam fungsi muat naik aplikasi untuk memuat naik Trojan , virus. dan fail lain yang berbahaya kepada pelayan dan mengawal pelayan.

Punca dan bahaya kerentanan

Sebab utama kerentanan muat naik fail ialah: terdapat fungsi muat naik dalam aplikasi, tetapi fail yang dimuat naik belum menjalani ujian kesahihan yang ketat atau ujian fungsi rosak, mengakibatkan Muat naik fail Trojan ke pelayan. Kerentanan muat naik fail amat berbahaya kerana kod hasad boleh dimuat naik terus ke pelayan, yang boleh menyebabkan akibat yang serius seperti mengganggu halaman web pelayan, menggantung tapak web, mengawal pelayan dari jauh dan memasang pintu belakang.

Di sini kita membincangkan beberapa kaedah pengesahan dan pintasan untuk muat naik fail:

1 Pengesahan setempat (pengesahan bahagian hadapan)

Kerentanan muat naik pintasan penapisan JS bahagian hadapan adalah disebabkan. ke aplikasi Program ini disahkan melalui kod JS di hujung hadapan, bukannya di hujung belakang program Dengan cara ini, anda boleh memintas penapisan muat naik dan memuat naik Trojan dengan mengubah suai kod JS bahagian hadapan.

Jadi bagaimana untuk menilai sama ada ia adalah pengesahan bahagian hadapan? Saya secara peribadi fikir kita boleh menyemak sama ada kita boleh mendapatkan paket data semasa memuat naik dan menangkap paket, sama ada terdapat data yang mengalir, atau kita boleh menyemak sama ada halaman imej yang dimuat naik akan memaparkan alamat imej yang dimuat naik, dsb.

Pintas: Padamkan kod penapisan, ubah suai atau lumpuhkan Javascript.

2. Pengesahan dan pintasan Bahagian Belakang

Pengesahan biasa untuk muat naik fail: nama akhiran (pengesahan langsung), fail, pengepala fail (pengesahan tidak langsung).

2.1 Nama akhiran

2.1.1 Senarai Hitam (akhiran format skrip yang secara jelas tidak dibenarkan untuk dimuat naik)

Kerentanan pintasan penapisan nama fail adalah terutamanya Kerana jenis muat naik fail ditentukan melalui senarai hitam, dan tiada penapisan lengkap, penyerang boleh memuat naik fail di luar jenis senarai hitam.

Kaedah penghakiman senarai hitam: Muat naik fail, sistem menggesa bahawa memuat naik fail format xxx tidak dibenarkan.

Pintas: Gunakan format lain (php5, Phtml, php3) atau kes fail, dan anda juga boleh menambah beberapa simbol gangguan untuk mencapai pintasan.

2.1.2 .htaccess (protokol pseudo-statik) - analisis tulis semula (hanya tersedia dalam Apache dan dayakan modul pseudo-statik)

. muat naik fail htaccess ialah dilakukan menggunakan .htaccess Fail boleh mengkonfigurasi fungsi pelayan Web untuk merealisasikan proses menghuraikan fail dengan akhiran seperti jpg dan png sebagai fail PHP.

fail.htaccess (fail konfigurasi yang diedarkan) menyediakan cara untuk membuat perubahan konfigurasi berdasarkan setiap direktori Satu fail yang mengandungi satu atau lebih arahan konfigurasi diletakkan dalam direktori dokumen tertentu, dan arahan tersebut digunakan untuk direktori ini dan semua subdirektorinya. .htaccess ialah fail konfigurasi pelayan web Anda boleh menggunakan fail .htaccess untuk melaksanakan konfigurasi seperti kaedah penghuraian dan pengalihan semula fail definisi dalam pelayan web.

Kaedah pintasan: Mula-mula muat naik fail 1.htaccess. 2. Muat naik semula gambar tersebut.

2.1.3 Pintasan ruang

Kaedah pintasan: Tambahkan ruang selepas nama akhiran fail dalam paket data untuk mencapai pintasan.

2.1.4. Bypass

Kaedah pintasan: Sama seperti kaedah pintasan ruang, tambahkan nama akhiran fail dalam paket data untuk mencapai pintasan.

2.1.5::$data Bypass

Ini adalah protokol yang unik untuk windows, jika nama fail + "::$DATA" Data selepas ::$DATA akan dianggap sebagai aliran fail, dan nama akhiran tidak akan dikesan, dan nama fail sebelum ::$DATA akan dikekalkan Tujuannya bukan untuk menyemak nama akhiran.

2.1.6 Penapisan gelung

Pintas: Kod menggantikan php dalam rentetan tanpa apa-apa.

Contohnya: a.pphphp akan menjadi ->a.

2.1.7 Senarai Putih: Tentukan dengan jelas imbuhan format yang boleh dimuat naik (lebih selamat)

%00 pemotongan, 0x00 pemangkasan (berdasarkan prinsip alamat, pemangkasan data di belakang fail) 00 pemotongan pintasan hanya boleh memintas pengesahan bahagian hadapan.

Sebab utama pemangkasan ialah kehadiran aksara %00 Apabila PHP

Kaedah pintasan (path%00 truncation):

  • Tukar ujian kepada test.php%00aaa, 1.php kepada 1.jpg supaya fungsi pengesahan boleh diluluskan.

Perbincangan ringkas tentang kaedah memuat naik fail untuk mendapatkan kebenaran

  • %00 dalam test.php%00aaa adalah URL dikodkan, pilih %00 dan pilih arahan [Convertselection], pilih arahan [URL] , pilih perintah [URL-decode] untuk mengekod.

Perbincangan ringkas tentang kaedah memuat naik fail untuk mendapatkan kebenaran

3. Pengesahan jenis fail

3.1 Pengesanan pengepala fail: maklumat kandungan pengepala fail (seperti gif89a)

Fail yang berbeza mempunyai format pengepala fail tertentu dan pembangun memuat naik fail dengan menyemak Fail pengepala mengesan jenis fail, tetapi kaedah pengesanan ini juga boleh dipintas Selagi pengepala fail yang sepadan ditambahkan pada pengepala fail Trojan, ini boleh memintas pengesanan tanpa menjejaskan operasi biasa fail Trojan.

Pengepala fail biasa adalah seperti berikut:

JPEG 0xFFD8FF

PNG0 x89504E470D0A1A0A

GIF 47 49 4638 (GIF 47 49 4638) sekitar Kaedah:

Tukar maklumat pengepala untuk mencapai penipuan Contohnya, menambah pengepala fail fail imej pada fail pengepala kuda Trojan boleh memintas pengesanan.
  • GIF89a

?>

Buat gambar kuda
  • Masukkan ayat Trojan terus ke dalam gambar dan muat naiknya. ——Gunakan prinsip pemasukan fail.

Gunakan arahan cmd untuk menggabungkan gambar biasa 1.jpg dan fail a.txt yang mengandungi kuda Trojan satu ayat ke dalam fail Trojan test.php yang baharu.

arahan cmd: salin 1.jpg/b+a.txt test.php.

3.2 Pengesanan Jenis Kandungan

Jenis Kandungan digunakan untuk menentukan jenis fail rangkaian dan pengekodan halaman web, dan digunakan untuk memberitahu penerima fail dalam bentuk apa dan apa pengekodan ia akan membaca fail. Fail yang berbeza akan sepadan dengan Jenis Kandungan yang berbeza Contohnya, Jenis Kandungan bagi fail jpg ialah imej/jpeg, dan Jenis Kandungan bagi fail php ialah strim aplikasi/oktet. Jenis Kandungan berada dalam pengepala permintaan paket data Pembangun akan menggunakan jenis Jenis Kandungan untuk menentukan sama ada fail dibenarkan untuk dimuat naik.

Pintas: Jenis Jenis Kandungan boleh diusik melalui penangkapan paket, supaya Jenis Kandungan paket data boleh diubah suai dengan menangkap paket untuk memintas pertimbangan Jenis Kandungan.

MIME: Anda boleh meneka nama akhiran fail dengan menilai jenis, dan menggunakan alat tangkapan paket untuk mengusik Jenis Kandungan, seperti menukarnya kepada imej/pjpeg, imej/jpeg, imej/gif , imej/png. Seseorang boleh memintas penapisan.

4. Kandungan dan lain-lain

4.1 Keselamatan logik: persaingan bersyarat (bersamaan dengan pekerjaan sistem)

Definisi: Keadaan pertandingan merujuk kepada apabila beberapa utas tidak melakukan operasi kunci atau Operasi segerak mengakses kod kongsi, pembolehubah, fail, dsb. pada masa yang sama Hasil operasi bergantung pada susunan urutan yang berbeza mengakses data. Mula-mula muat naik fail ke pelayan, dan pelayan memilih sama ada untuk menyimpan atau memadam imej mengikut peraturan Kerentanan adalah bahawa fail tidak diperiksa untuk kesahihannya sebelum disimpan ke pelayan. melalui kelemahan keadaan perlumbaan, fail diluluskan Muat naik Trojan dengan fungsi menulis fail, dan akses Trojan yang dimuat naik sebelum memadamkannya untuk menulis Trojan baharu.

Pintas: Selepas memuat naik fail ke pelayan, kami akan terus mengakses laluan fail Disebabkan keadaan bersaing, tujuan memuat naik WebShell akan dicapai Kerentanan itu dieksploitasi dengan menghantar permintaan dan memuat naik secara berterusan kandungan. Akses sedemikian akan Menjana fail Trojan baru dan kemudian menghantar permintaan lain untuk terus mengakses fail ini Jika eksploitasi keadaan perlumbaan berjaya, Trojan baharu akan dihasilkan.

4.2 Penamaan Direktori

Pintas: Tambahkan akhiran / untuk membenarkan pelayan mengenali fail sebagai folder untuk mencapai tujuan memuat naik, seperti -x.php/.

5. Kerentanan lain

Kerentanan fungsi skrip-cve

CVE-2017-12615

CVE-2015-5254

9-CVE-2015 2618

......

Terdapat tutorial tentang cara mengeksploitasi kelemahan ini dalam talian.

6. Kerentanan penghuraian Middleware

6.1 Kerentanan penghuraian IIS 6.0+

Tinjau kerentanan penghuraian dengan cepat, /.php untuk melihat sama ada terdapat kod bercelaru, jika ada, ia ada, jika tidak, ia tidak wujud.

6.1.1 Laksanakan sebagai folder

Nama fail biasa: image/aa.jpg.

Pintas: image.asp/aa.jpg aa.jpg akan dihuraikan sebagai asp.

6.1.2 Laksanakan sebagai fail

Nama fail biasa: image.jpg.

Pintas: image.asp;.jpg atau xxx.asp;xxx.jpg Fail ini akan dilaksanakan sebagai asp.

asp boleh ditukar kepada php Jika anda menukar php, ia boleh dilaksanakan sebagai php.

7. Pintasan WAF

Untuk memintas WAF, kita perlu mengetahui parameter yang boleh diubah suai, seperti:

Pelupusan Kandungan: umumnya boleh diubah suai.
  • nama: nilai parameter bentuk, tidak boleh diubah suai.
  • nama fail: nama fail, boleh diubah suai.
  • Jenis Kandungan (jenis fail sendiri): Fail MIME, tukar mengikut kesesuaian.
  • Inti pintasan waf adalah untuk sentiasa mengubah suai ujian selepas nama parameter yang boleh diubah suai untuk cuba memintas.
  • Kaedah pintasan biasa:

7.1 Limpahan data (pengisian data sarap)

Gunakan had atas pengesanan WAF untuk menambah sejumlah besar data sarap supaya ia tidak boleh dipadankan. Sama seperti kelemahan limpahan, data gangguan biasanya boleh ditambah selepas parameter muat naik. Ingat untuk menambah antara data sampah dan parameter, jika tidak, paket data akan melaporkan ralat.

7.2 Mutasi simbol ('";)

Gunakan kelemahan pembangunan program untuk menggantikan, menambah dan memadam simbol dalam parameter muat naik dalam pakej data untuk mencapai tujuan muat naik. Contohnya,

Contohnya, x.jpg;.php Titik koma mewakili penghujung sekeping data.

7.3 Pemangkasan data (%00; baris baharu)

Tambahkan %00 (ruang) selepas nama akhiran fail untuk dipotong, x.php%00.jpg.

Pemutus talian (serupa dengan n dalam program) adalah serupa dengan penghantaran data dalam blok, seperti:

  • x
  • p
  • h
  • p

Paket data sebenarnya mengenal pasti x.npnhnp.

7.4 Data berulang

adalah bersamaan dengan gelung rekursif dalam fungsi Prinsip menulis parameter berbilang kali dalam paket data adalah sangat serupa dengan data sampah.

8. Pertahanan

  • Kerahkan produk keselamatan seperti pagoda dan waf.
  • Sahkan kandungan yang dimuat naik beberapa kali dengan ketat.
  • Lakukan semakan integriti pada kandungan fail.

Atas ialah kandungan terperinci Perbincangan ringkas tentang kaedah memuat naik fail untuk mendapatkan kebenaran. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:51cto.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam