Bevezetés
A Parancsinjekciós sebezhetőségek az egyik legveszélyesebb webes sebezhetőség. Sok biztonsági tesztelő és fejvadász arra törekszik, hogy megtalálja a parancsinjekciós sebezhetőségeket a célalkalmazásra gyakorolt hatás miatt.
ez a cikk áttekintést nyújt a parancsinjekció biztonsági réseiről, valamint bemutatja azokat a különféle biztonsági réseket, amelyek végül parancsinjekcióhoz vezethetnek.
mi a parancs injekció?
A Command injection egy olyan webes biztonsági rés, amely lehetővé teszi a támadók számára, hogy tetszőleges operációs rendszer parancsokat hajtsanak végre a kiszolgálón, ahol az alkalmazás fut. A parancsinjekció biztonsági rései akkor fordulnak elő, amikor az alkalmazások shell parancsokat vagy parancsfájlokat használnak, amelyek shell parancsokat hajtanak végre a háttérben.
nézzük meg az alkalmazás következő URL-jét, amely a felhasználói bevitel base64 kódolását végzi.
http://target-site.com/encode.php?text=helloworld
ez a felhasználói bemenet get paraméterként kerül továbbításra a kódoláshoz.php fájl.
A kódolás forráskódja a következő.php:
<?php
$input=$_GET;
rendszer(“echo-n”. $bemenet.”/base64″);
?>
amint azt az előző kódrészletből észrevehetjük, a felhasználói bemenet átkerül a php system() függvénybe, amelyet az operációs rendszer parancsainak végrehajtására használnak a PHP-ben.
ha egy felhasználó hozzáfűz egy rendszerparancsot a bemenethez, akkor az operációs rendszer parancsként kerül végrehajtásra, amely így néz ki:
http://target-site.com/encode.php?text=test;id
A következő a válasz vissza a felhasználó:
testdWlkPTMzKHd3dy1kYXRhKSBnaWQ9MzMod3d3LWRhdGEpIGdyb3Vwcz0zMyh3d3ctZGF0YSkK
As we can see, the word test is not encoded but there is a long encoded text returned in response. Decoding this text looks like this:
$ echo -n “dWlkPTMzKHd3dy1kYXRhKSBnaWQ9MzMod3d3LWRhdGEpIGdyb3Vwcz0zMyh3d3ctZGF0YSkK” | base64 -d
uid=33(www-data) gid=33(www-data) groups=33(www-data)
As you can see, the encoded text is the output of the id command passed to the application.
Why are command injection vulnerabilities dangerous?
a sérülékenységek parancsinjekciós osztályát az egyik legveszélyesebb webes sebezhetőségnek tekintik, mivel a támadó számára az alapul szolgáló operációs rendszert irányítják. Ez a vezérlés többféle módon használható, beleértve az oldalirányú mozgást a belső hálózaton keresztül, a célszerver megbízhatóságának felhasználásával a hálózat más rendszereivel.
Parancsvégrehajtáshoz vezető biztonsági rések
míg a parancsvégrehajtási biztonsági rések akkor fordulnak elő, amikor a sebezhető alkalmazás lehetővé teszi a végfelhasználó számára az alkalmazás alapértelmezett funkcióinak kiterjesztését és a rendszerparancsok végrehajtását, a parancsok végrehajtása az alkalmazás kódján keresztül is lehetséges. Ezt általában kódfuttatásnak nevezik. Még akkor is, ha van egy kódfuttatási biztonsági rés, a végcél tetszőleges rendszerparancsok végrehajtása rajta keresztül. Figyelembe véve ezt, beszéljük meg azokat a biztonsági réseket, amelyek parancs-befecskendezéssel vagy kódfuttatással parancsvégrehajtáshoz vezethetnek.
az alábbiakban felsorolunk néhány biztonsági rést, amelyek végül parancsinjekciós támadásokhoz vezethetnek.
önkényes parancsinjekció
amint azt az előző példánkban tárgyaltuk, lehetséges, hogy az alkalmazások olyan alkalmazásokkal rendelkeznek, amelyek önkényes rendszerparancsokat kapnak közvetlenül a felhasználótól, és végrehajtják azokat az alapul szolgáló gazdagépen. Ez egy osztály példa parancs injekció biztonsági rés.
önkényes fájlfeltöltések
amikor az alkalmazások lehetővé teszik a felhasználók számára, hogy tetszőleges fájlkiterjesztésű fájlokat töltsenek fel, parancsinjekcióhoz vezethet, amikor ezeket a feltöltött fájlokat a webroot-ba helyezik. Ez egy újabb gyakori módja annak, hogy a webes alkalmazások sebezhetővé váljanak a parancs befecskendezésével szemben.
nem biztonságos szerializáció
A szabványos parancsinjekciós sebezhetőségeken kívül tetszőleges parancsvégrehajtás is lehetséges más sebezhetőségek, például a nem biztonságos deszerializáció használatával. Ez kihasználja azt a tényt, hogy a szerveroldali kód deszerializálja a felhasználó által átadott sorosított tartalmat anélkül, hogy azt megfelelően ellenőrizné. Annak ellenére, hogy ez közismert nevén a biztonsági rések bizonytalan sorosítási osztálya, végül parancsinjekcióhoz vezet, ha a Célalkalmazás megfelel bizonyos követelményeknek, például megfelelő modulok állnak rendelkezésre az osztály elérési útján.
szerveroldali sabloninjekció
amikor a webes alkalmazások szerveroldali sablonozási technológiákat, például Jinja2 vagy Twig használnak dinamikus HTML-válaszok generálására, lehetséges szerveroldali sabloninjekció. Az SSTI biztonsági rései akkor fordulnak elő, ha a felhasználói bemenet nem biztonságos módon van beágyazva egy sablonba, és ez távoli kódfuttatást eredményez a kiszolgálón.
XML external entity injection
az XML external entity biztonsági rés egy másik típusú biztonsági rés, amely a felhasználó által vezérelt XML bemenetet gyengén konfigurált XML-elemző segítségével elemző alkalmazások ellen fordul elő. Az XXE sebezhetőségek általában tetszőleges fájlok olvasásához vezetnek a szerverről, és szolgáltatásmegtagadási támadásokat okoznak.
azonban bizonyos feltételek teljesülése esetén a parancs végrehajtásához is vezethetnek a kiszolgálón. Például, ha a PHP expect:/ / wrapper engedélyezve van a cél sebezhető kiszolgálón, akkor tetszőleges parancsokat lehet végrehajtani a kiszolgálón.
kérjük, vegye figyelembe, hogy ez nem kimerítő lista a biztonsági résekről, amelyek parancsinjekcióhoz vezethetnek, és számos más biztonsági rés is vezethet parancsinjekcióhoz, ha megfelelnek bizonyos feltételeknek.
következtetés
nyilvánvaló, hogy számos különböző biztonsági rés vezethet a parancs végrehajtásához a kiszolgálón. A fejlesztőknek tisztában kell lenniük ezekkel a parancs-befecskendezési sebezhetőségekkel, mivel ezek a sebezhetőségek nagy hatással vannak, mivel teljes ellenőrzést tudnak biztosítani az alapul szolgáló infrastruktúra felett.
A sorozat következő néhány cikkében további parancsinjekcióval kapcsolatos fogalmakkal foglalkozunk, mint például a vak parancsinjekció azonosítása és kihasználása.