Rumah > Artikel > pembangunan bahagian belakang > Analisis mendalam tentang kelemahan kemasukan fail PHP
Artikel ini membawa anda pengetahuan yang berkaitan tentang PHP, yang terutamanya memperkenalkan isu berkaitan tentang kerentanan kemasukan fail Punca kelemahan kemasukan fail adalah apabila fail diperkenalkan melalui fungsi PHP telah disahkan dengan betul, fail yang tidak dijangka telah dimanipulasi. Saya harap ini membantu semua orang.
Kajian yang disyorkan: "Tutorial Video PHP"
Fail Sebab kerentanan kemasukan ialah apabila fail diperkenalkan melalui fungsi PHP, nama fail masuk tidak disahkan dengan betul, dengan itu mengendalikan fail yang tidak dijangka, yang mungkin membawa kepada kebocoran fail yang tidak dijangka atau suntikan kod berniat jahat.
Kerentanan kemasukan fail dalam PHP biasanya disebabkan oleh empat fungsi berikut:
1. Apabila include() digunakan untuk memasukkan fail, fail hanya akan disertakan apabila kod dilaksanakan ke fungsi include() , dan ralat akan berlaku Hanya amaran diberikan dan pelaksanaan diteruskan.
2. Fungsi include_once() adalah sama dengan include(). Perbezaannya ialah apabila fail yang sama dipanggil berulang kali, program hanya memanggilnya sekali.
3. require() akan memanggil fail sebaik sahaja program dijalankan Apabila ralat berlaku, mesej ralat akan dikeluarkan dan skrip akan ditamatkan
4. require_once() mempunyai fungsi yang sama sebagai require(), perbezaannya ialah Sebabnya ialah apabila fail yang sama dipanggil berulang kali, program hanya memanggilnya sekali.
Penyerang boleh menggunakan kelemahan ini untuk membaca fail sewenang-wenangnya dan mendapatkan maklumat sensitif pada pelayan.
Kewujudan kelemahan ini tiada kaitan dengan versi
diberikan Apabila PHP menghantar paket POST, jika paket itu mengandungi blok fail, tidak kira sama ada kod yang anda akses mempunyai logik untuk memproses muat naik fail, PHP akan menyimpan fail tersebut ke dalam fail sementara (biasanya /tmp/ php[6 aksara rawak]), nama fail boleh didapati dalam pembolehubah $_FILES. Fail sementara ini akan dipadamkan selepas permintaan selesai.
Pada masa yang sama, kerana halaman phpinfo akan mencetak semua pembolehubah dalam konteks permintaan semasa, jadi jika kami menghantar paket data yang mengandungi blok fail ke halaman phpinfo, kami boleh mencari kandungan pembolehubah $_FILES dalam paket pulangan Naturally Juga mengandungi nama fail sementara.
Apabila kerentanan kemasukan fail tidak dapat mencari fail yang boleh dieksploitasi, anda boleh menggunakan kaedah ini untuk mencari nama fail sementara dan kemudian memasukkannya.
Tetapi kelemahan kemasukan fail dan halaman phpinfo biasanya dua halaman Secara teori, kita perlu menghantar paket data ke halaman phpinfo terlebih dahulu, kemudian padankan nama fail sementara dari halaman pulangan, dan kemudian hantar nama fail ini. ke halaman kerentanan kemasukan fail , lakukan getshell. Pada akhir permintaan pertama, fail sementara dipadamkan, dan permintaan kedua secara semula jadi tidak boleh disertakan.
Pada masa ini, persaingan bersyarat perlu digunakan Proses khusus adalah seperti berikut:
1) Hantar paket data muat naik yang mengandungi webshell ke phpinfo dengan data sampah.
2) phpinfo akan mencetak semua data pada masa ini, dan data sampah akan menjadikan phpinfo sangat besar.
3) Saiz penimbal lalai PHP ialah 4096, iaitu PHP mengembalikan 4096 bait kepada sambungan soket setiap kali.
4) Oleh itu, kami terus mengendalikan soket asli dan membaca 4096 bait setiap kali Selagi aksara yang dibaca mengandungi nama fail sementara, paket data kedua akan dihantar serta-merta.
5) Pada masa ini, sambungan soket paket data pertama masih belum berakhir, tetapi PHP terus mengeluarkan 4096 bait setiap kali, jadi fail sementara belum dipadamkan.
6) Kita boleh menggunakan perbezaan masa ini untuk berjaya memasukkan fail sementara dan akhirnya getshell.
Tetapkan senarai putih.
Pembelajaran yang disyorkan: "Tutorial Video PHP"
Atas ialah kandungan terperinci Analisis mendalam tentang kelemahan kemasukan fail PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!