Hogyan csomagolóanyagokat php lehet használni a támadás webes alkalmazások

A rugalmasság egy programozási nyelv növeli a kényelmet, a fejlesztők, hanem új távlatokat nyit vektorok támadást. PHP fejlesztők gyakran használják az úgynevezett wrapper'y és nem is tudja, hogy ez oda vezethet, hogy megkerüljék épített biztonsági app és szűrők, például lehetővé teszik tetszőleges kód a szerveren. Mintegy csomagolóanyagok, azok jellemzőit és a velük kapcsolatos veszélyeket, és tárgyalt ma.

Sérülékenységek társított mechanizmusával PHP göngyölő tárgyalja hosszú ideig. Linkek nekik van jelen a OWASP TOP 10 és WASC TCv2. Azonban számos funkciók végrehajtásának adatok kódolás eredménye az a tény, hogy még kifejlesztett alkalmazások biztonságot szem előtt tartva, tartalmazhat réseket (beleértve a kritika). Ebben a tanulmányban először röviden áttekintjük milyen PHP csomagolóanyagokat és hogyan lehet hasznos a programozók. Majd elemzi a funkciókat, amelyek lehetővé teszik, hogy megkerülje a beépített biztonsági szűrők végrehajtására alkalmazás és a támadás kapcsolatos jogosulatlan hozzáférést a fájlrendszer és tetszőleges kód futtatására.

Wrapper'y

ahol a $ filename lehet használni az utat, hogy egy helyi fájlba. Köztudott, hogy így a tartalmát a helyi fájlok a következők lehetnek:

De az úgynevezett szűrők (wrapper) lehet használni mellett a triviális a fájl elérési útját. A legjobb módja annak, hogy elmagyarázza, mi ez - néhány példát. Tehát ha a csomagolást keresztül ugyanazt a funkciót fopen lehetőség van:

Csomagológépek (más néven Protokollkezelők vagy wrapper) funkciót jelzi, hogyan kell feldolgozni az adatokat a patak. Ezért a funkciókat, amelyek támogatják a csomagolást lehet használni ahhoz, hogy különböző forrásokból származó adatok. Göngyölő lehetővé teszi a rugalmas és kényelmes az adatok feldolgozására jön be a programot egy patak, és módosíthatja őket, ha szükséges.

Hogyan csomagolóanyagokat php lehet használni a támadás webes alkalmazások
Regisztrált PHP Streams a kimeneti rész phpinfo ()

Hasonlóképpen lehet használni file_put_contents funkciót és minden más funkció, amely a burkolat írási üzemmódban:

A változata PHP 5.3.6 megjelent wrapper php: // fd, amely közvetlen hozzáférést biztosít a fájlleírókkal. Ha a PHP telepítése az Apache modul wrapper php: // fd írhatunk tetszőleges adatokat a access_log / error_log (általában közvetlenül ezeket a fájlokat 644 és közvetlenül beléjük írhat csak a root).

Azt kell mondanom, hogy a PHP-nagyon sok beépített csomagolóanyagok, de lehetséges, hogy hozzon létre, és rögzítse a saját csomagolóanyagok használatával stream_wrapper_register funkciót. További információkat talál a hivatalos honlapján a PHP. A teljes lista elérhető csomagolóanyagokat lehet megtekinteni phpinfo szakasz - Bejegyzett PHP Streams.

Néhány göngyölő már dokumentált funkciókat, amelyek lehetővé teszik a hatékonyabb kihasználására réseket a webes alkalmazások. Éppen ezek a funkciók felülvizsgáljuk ma.

Mi tele ZIP?

ZIP - egy népszerű tömörítési formátum és archiválási fájlokat. Támogatás ez a formátum végre minden modern operációs rendszerek és könyvtárak kezelésével írt legtöbb programozási nyelv. A PHP dolgozni ezzel a formátum hasznos zip modult.

A Linux-rendszer modulok zip elérhetővé válik, ha a PHP össze azzal az opcióval -enable-zip. Archív nem lehet csak egyetlen kép, de teljes könyvtárak; amely megőrzi a könyvtár struktúrát, fájlnevek hozzá kell adni az archívumot, akkor megengedett, hogy használja a perjel /. Egy másik fontos jellemzője a modul képes kezelni zip fájlok bármilyen nevet: a legfontosabb dolog, hogy a fájl tartalmát megfelelően lett kialakítva zip-archívum.

Miután a zip-fájl jön létre, a burkolat zip: // elérheti a fájlokat a archívumban.

Az a lehetőség, archiválásra a nevét, ahol van egy perjel, lehetővé teszi, hogy kihasználják sebezhető, mint a távoli fájl tartalmazza, ennek hiányában null-os. Vegyük például a következő egyszerű script:

Kezdeni, tegyük fel, hogy létre lehet hozni a fájlokat a cél kiszolgálón. Aztán, ami egy zip-archívum, amint az a fenti példában, akkor lehet végrehajtani PHP-kódot használó wrapper zip: //.

Ha nem tudja létrehozni a kívánt fájlt a PHP-függvény, akkor az ideiglenes fájlokat, hogy létrehoz egy PHP letöltésekor tartalmak HTML-formában. Az útvonal az ideiglenes fájlok találhatók phpinfo (). További információ arról, hogyan használja az ideiglenes fájlt a működését LFI / RFI típusú biztonsági rések megtalálható a fórumon rdot.org. Fontos, hogy a allow_url_fopen irányelv nem korlátozza a használatát göngyölő zip: //.

Hol vannak az adataim: //?

Átalakító adat: // kezdettől fogva felkeltette a szakemberek internetes biztonság. A hivatalos dokumentáció az ajánlat használt borításra nagyon korlátozott módon. De a RFC 2379 leírás, ez a borítás lehetővé teszi a részletesebb szintaxis:

Így MediaType lehet akár teljesen hiányzik, vagy lehet tölteni tetszőleges értékek:

Ez a funkció a burkolat lehet használni, hogy megkerülje az ellenőrzések és a szűrőket. Például a népszerű script TimThumb v1.x van egy ilyen szűrő:

Ahhoz, hogy elkerüljük ezt az ellenőrzést az alábbiak szerint:

A PHP van egy funkció, mint stream_get_meta_data (). A hivatalos dokumentumok, beolvassa a metaadatokat a patak és a fájl mutatók:

Ebben az esetben a visszaadott tömb elemeket tartalmaz, jól definiált gombokkal, és a feladat, hozzátéve, hogy a tömb az új elemek néz ki, elég problémás az első pillantásra. De a segítségével átalakító adat: // lehet elég könnyű manipulálni a tömbben! Hogyan? Itt egy példa:

Hogyan csomagolóanyagokat php lehet használni a támadás webes alkalmazások
A dokumentáció a wrapper adatok: //

Ha a változó $ file helyett a helyi fájlnevet használja a átalakító adat,

hideg borogatást

Szerint a dokumentáció, a wrapper compress.zlib: // lehetővé teszi, hogy tömörítse gz-fájlokat. Ha ezt a wrapper kezelni az adatokat, nem zlib-archívum, az adatokat vissza nem változott.

Például, olvassa el az / etc / hosts a következők lehetnek:

„Nagyon hasznos!” - gondolod :). Ki lesz meredekebb. Ha még egy kicsit programozás PHP az interneten, akkor valószínűleg tisztában vannak prase_url () függvénnyel. Hadd emlékeztessem önöket, ezt a funkciót teljesít elemzés URL. És van még egy érdekes pont: a bemeneti funkció, akkor nem csak az URL-t, és egy sor meglehetősen általános:

Mivel ez a funkció, akkor kap a különböző ellenőrzések és szűrők alapján parse_url funkcióit a többfunkciós csomagolást. Vegyük például a következő forgatókönyvet, amely szerint a fejlesztők fogant, csak feltölteni a fájlokat egy megbízható host img.youtube.com.

Normál előnézet során img.youtube.com töltöttünk a következőkkel:

Ebben az esetben a szűrő lehet megkerülni segítségével a burkolat compress.zlib: //.

Ezen kívül egyszerűen megkerülik a szűrőt a gép nevét, és töltse fel a szerver fájl egy véletlenszerű nevet és tartalmát, a korábban tárgyalt kapcsolati átalakító adat: //:

Ebben az esetben a helyi fájlok másolása egy mappát az előnézet, ha a mappa elérhető a közvetlen hozzáférést a böngésző lehetővé válik, hogy megtekinthesse a rendszerfájlokat. Ez a példa azt mutatja, hogy a használata a csomagolóanyagok adatok: // és compress.zlib: // hasznos lehet script fájlok letöltésére távoli számítógépekről. Egy ilyen forgatókönyv TimThumb.

Hogyan csomagolóanyagokat php lehet használni a támadás webes alkalmazások
A sebezhetőség a WordPress bővítmény

Kiaknázása sérülékenységét TimThumb v1.x

sérülékenység lényeg az, hogy a szkript helyesen ellenőrzött az URL-listát a megbízható állomása amely lehetővé tette, hogy töltse le a képeket. Ahhoz, hogy megkerülje a szűrőt, például egy megbízható host blogger.com, arra ösztönzik, hogy regisztrálja a domain a negyedik szint, amely egy URL-t egy megbízható host, például blogger.com.attacker.com, és tölthet le fájlokat ezen a területen.

Ezáltal lehetővé vált proekspluatirovat sebezhetőség változata 1,32 (revízió 142). De az újabb verziók is sebezhető. Tekintsük a mód, ahogyan a képek betöltése verzióban 1,34 (változat 145):

Könnyen belátható, hogy számos logikai hibákat is vétettek a tervezési check_external funkciók:

  1. Ellenőrzések végrehajtását követően a legtöbb parse_str funkciót kap szűretlen felhasználói adatokat. Így, akkor felülírja a változókat vizsgáltuk: $ url_info [ 'host'], $ src $ local_filepath. Ezért lehetséges, hogy letölthető fájlokat a szerverre.
  2. A fájl letöltése után a szerver alapú getimagesize ellenőrizze, hogy a képfájl. Ha a teszt sikertelen, a fájl törlésre kerül. De lehetséges, hogy befolyásolja a változó $ local_filepath lehetséges elérni egy helyi fájlt göngyölő php: // szűrő, compress.zlib: //. És ebben az esetben az unlink függvény nem lesz képes törölni a fájlt.

egy kis ásás, írtam az exploit fájlok letöltésére. A véletlenszerű nevet és egy véletlen tartalom egy tetszőleges helyen a rendszer.

1.x ág végződik 149. felülvizsgálatát, amelynek szintén van egy biztonsági rést. Ez a felülvizsgálat eltávolították parse_str funkciót, és ezért nincs lehetőség felülírni változókat. De szűrőket érvényességének ellenőrzésére az URL-t, csak ellenőrzi a vonatkozó tételt a húr részstringjét $ src. Ebben az esetben, ha curl_init funkció nem érhető el az adott szerverre, a letöltött fájl segítségével file_get_contents / file_put_contents. Fontos megjegyezni, hogy ezeket a funkciókat, szemben a curl_init, támogatja az összes elérhető PHP csomagolást.

Így az átalakító adat: //, akkor átugorhatja az összes szűrőt, és hozzon létre egy fájlt a cache könyvtárat egy tetszőleges tartalommal:

Vagy használja a burkolat compress.zlib: // copy a cache egy helyi fájl:

Profit a fájlban a gyorsítótárból közvetlenül is elérhető, így a RCE elérni fiktív számla adatok felhasználásával borítás, valamint, hogy megkapja a tartalmát a helyi fájlokat compress.zlib.

ahelyett, hogy a következtetés

Nyilvánvaló, hogy a csomagolóanyagokat épített PHP jó lehetőséget kínálnak a működését típusú fájl manipuláció réseket. De érdemes megjegyezni, hogy még a legegyszerűbb ellenőrzések alapján funkciók file_exists, is_file, filesize nem fogja használni csomagolást. Továbbá, ha Suhosin patch telepítése alapértelmezés szerint nem lehet használni a papírba inkluda ha allow_url_include irányelv állítva. Ezen a ponton nem zárja le a témát használatának csomagolóanyagokat és a következő cikket fogja mondani a lehetőségét borítás php: // szűrő a példákat kiaknázása sérülékenységek népszerű internetes motorok. Stay tuned!

Itt található az ezt a cikket egy ismerősének:

Kapcsolódó cikkek