Úvod
zranitelnosti vstřikování příkazů jsou jednou z nejnebezpečnějších zranitelností webu. Mnoho testerů zabezpečení a lovců odměn se snaží najít zranitelnosti vstřikování příkazů kvůli dopadu, který mohou vytvořit na cílovou aplikaci.
tento článek poskytne přehled zranitelností vstřikování příkazů spolu s úvodem do různých zranitelností, které mohou nakonec vést k vstřikování příkazů.
co je příkaz injection?
příkaz injection je typ webové chyby zabezpečení, která umožňuje útočníkům provádět libovolné příkazy operačního systému na serveru, kde je aplikace spuštěna. Zranitelnosti vstřikování příkazů se vyskytují, když aplikace používají příkazy shellu nebo skripty, které provádějí příkazy shellu na pozadí.
uvažujme následující adresu URL aplikace, která provádí base64-kódování vstupu uživatele.
http://target-site.com/encode.php?text=helloworld
tento vstup uživatele je předán jako parametr get do kódování.php soubor.
níže je uveden zdrojový kód encode.php:
<?php
$input= $ _GET;
system („echo-n“. $vstup.“/base64″);
?>
Jak si můžeme všimnout z předchozího kódu, uživatel vstup je předán php system() funkce, která se používá k spouštět příkazy operačního systému v PHP.
pokud uživatel připojí systémový příkaz ke vstupu, bude proveden jako příkaz operačního systému, který vypadá takto:
http://target-site.com/encode.php?text=test;id
následuje odpověď vrácená uživateli:
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?
třída zranitelností vstřikování příkazů je považována za jednu z nejnebezpečnějších zranitelností webu, protože poskytují útočníkovi kontrolu nad základním operačním systémem. Tento ovládací prvek lze použít několika různými způsoby, včetně bočního pohybu interní sítí pomocí důvěry, kterou má cílový server s jinými systémy v síti.
Zranitelnosti, které mohou vést k provedení příkazu
Při spuštění příkazu chyby dojít při zranitelné aplikace umožňuje koncovému uživateli prodloužit aplikace je výchozí funkce a provádět systémové příkazy, je také možné spouštět příkazy prostřednictvím aplikace kód. Toto je běžně známé jako provádění kódu. I když existuje chyba zabezpečení při provádění kódu, konečným cílem je provést prostřednictvím něj libovolné systémové příkazy. Vzhledem k tomu pojďme diskutovat o některých zranitelnostech, které mohou vést k provedení příkazu pomocí injekce příkazu nebo spuštění kódu.
níže jsou uvedeny některé zranitelnosti, které mohou nakonec vést k útokům na vstřikování příkazů.
Libovolný příkaz injekce
Jak jsme diskutovali v předchozím příkladu, je možné, že pro aplikace, mít aplikace, které přijímají libovolný systém příkazy od uživatele a provádět je na základní hostitele. Toto je příklad třídy zranitelnosti vstřikování příkazů.
Svévolné nahrávání souborů
Když aplikace umožňují uživatelům nahrávat soubory s libovolnou příponou, může to vést k příkazu injekce, kdy se tyto nahrané soubory jsou umístěny ve webroot. Toto je další běžný způsob, jak se webové aplikace mohou stát zranitelnými vůči vstřikování příkazů.
Nejistý serializace
Kromě standardní příkaz vstřikování zranitelnosti, svévolné spuštění příkazu může být také možné pomocí dalších faktorů zranitelnosti, jako je nejistá rekonstrukci. To využívá skutečnosti, že server-side kód deserializes serializovat obsah předaných uživatelem, bez náležitého ověření. I když je to běžně známý jako nejistá serializace třídy chyb, to nakonec vede k velení injekce, pokud cílová aplikace splňuje určité požadavky jako vhodné pomůcky jsou k dispozici v class path.
Server-side šablony injekce
Když webové aplikace na straně serveru použít šablonovací technologie, jako jsou Jinja2 nebo Větvičku ke generování dynamické HTML odpovědi, je možné mít na straně serveru šablon injekce. Zranitelnosti SSTI se vyskytují, když je vstup uživatele vložen do šablony nebezpečným způsobem a má za následek vzdálené spuštění kódu na serveru.
XML external entity injekce
XML external entity zranitelnost je jiný typ zranitelnosti, který se vyskytuje na základě žádostí, které analyzovat uživatele-kontrolované XML vstup pomocí slabě nakonfigurován XML parser. Chyby zabezpečení XXE obvykle vedou ke čtení libovolných souborů ze serveru a způsobují útoky odmítnutí služby.
mohou však také vést k provedení příkazu na serveru, pokud jsou splněny určité podmínky. Pokud je například na cílovém zranitelném serveru povoleno PHP expect:// wrapper, je možné na serveru provádět libovolné příkazy.
vezměte Prosím na vědomí, že toto není vyčerpávající seznam zranitelností, které mohou vést k příkazu injekce a existuje několik dalších zranitelností, které mohou vést k příkazu injekce, když splňují určité podmínky.
Závěr
je zřejmé, že existuje několik různých zranitelností, které mohou vést k provedení příkazu na server. Vývojáři si musí být vědomi těchto příkaz vstřikování zranitelnosti vzhledem k tomu, že tyto chyby jsou vysoce dopad, protože mohou dát plnou kontrolu na základní infrastrukturu.
V příštích několika článcích této série, budeme se bude týkat některé další příkaz injekce-související pojmy, jako je identifikace a využívání slepý příkaz injekce.