Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Analisis mendalam tentang kelemahan kemasukan fail PHP

Analisis mendalam tentang kelemahan kemasukan fail PHP

WBOY
WBOYke hadapan
2022-05-09 17:30:2410760semak imbas

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.

Analisis mendalam tentang kelemahan kemasukan fail PHP

Kajian yang disyorkan: "Tutorial Video PHP"

Penerangan Kerentanan

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.

Bahaya kerentanan

Penyerang boleh menggunakan kelemahan ini untuk membaca fail sewenang-wenangnya dan mendapatkan maklumat sensitif pada pelayan.

Kerentanan mempengaruhi versi

Kewujudan kelemahan ini tiada kaitan dengan versi

Analisis kerentanan

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.

Persediaan persekitaran

  1. Mulakan docker:
    service start docker
  2. Laksanakan dalam laluan di mana fail docker-compose.yml terletak:
    docker-compose build
    docker-compose up -d
    Analisis mendalam tentang kelemahan kemasukan fail PHP

Verability Reproduction

  1. Lawati http://your-ip:8080/ phpinfo. php, anda boleh melihat bahawa halaman phpinfo muncul pada halaman
    Analisis mendalam tentang kelemahan kemasukan fail PHP2 Lawati http://your-ip:8080/lfi.php?file=/etc/passwd, dan anda boleh melihatnya. halaman mempunyai kerentanan kemasukan fail.
    Analisis mendalam tentang kelemahan kemasukan fail PHPPengesahan POC:
    Penggunaan: fail PHP python3 mengandungi vulnerability_poc.py --target-url http://192.168.60.244:8080
    Analisis mendalam tentang kelemahan kemasukan fail PHP

Betulkan cadangan

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!

Kenyataan:
Artikel ini dikembalikan pada:csdn.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam