- wprowadzenie
- co to jest command injection?
- Why are command injection vulnerabilities dangerous?
- luki w zabezpieczeniach, które mogą prowadzić do wykonywania poleceń
- dowolne polecenie injection
- dowolne przesyłanie plików
- niezabezpieczona serializacja
- wstrzykiwanie szablonów po stronie serwera
- XML external entity injection
- wniosek
wprowadzenie
luki w zabezpieczeniach command injection są jednymi z najbardziej niebezpiecznych luk w zabezpieczeniach sieciowych. Wielu testerów bezpieczeństwa i łowców nagród stara się znaleźć luki w zabezpieczeniach command injection ze względu na wpływ, jaki mogą stworzyć na docelową aplikację.
ten artykuł zawiera przegląd luk w zabezpieczeniach command injection, wraz z wprowadzeniem do różnych luk, które mogą ostatecznie doprowadzić do wstrzyknięcia polecenia.
co to jest command injection?
command injection to rodzaj luki w zabezpieczeniach sieciowych, która umożliwia atakującym wykonywanie dowolnych poleceń systemu operacyjnego na serwerze, na którym działa aplikacja. Luki w zabezpieczeniach command injection występują, gdy aplikacje korzystają z poleceń powłoki lub skryptów, które wykonują polecenia powłoki w tle.
rozważmy następujący adres URL aplikacji, która wykonuje base64-kodowanie danych wejściowych użytkownika.
http://target-site.com/encode.php?text=helloworld
to wejście użytkownika jest przekazywane jako parametr get do encode.plik php.
poniżej znajduje się kod źródłowy programu encode.php:
<?php
$input = $_GET;
system(„echo-n”. $input.”/base64″);
?>
jak możemy zauważyć z poprzedniego fragmentu kodu, dane wejściowe użytkownika są przekazywane do funkcji PHP system (), która jest używana do wykonywania poleceń systemu operacyjnego w PHP.
jeśli użytkownik doda do wejścia polecenie systemowe, zostanie ono wykonane jako polecenie systemu operacyjnego, które wygląda następująco:
http://target-site.com/encode.php?text=test;id
poniżej znajduje się odpowiedź zwrócona użytkownikowi:
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?
klasa luk w zabezpieczeniach command injection jest uważana za jedną z najbardziej niebezpiecznych luk w zabezpieczeniach sieciowych, ponieważ dają one kontrolę nad podstawowym systemem operacyjnym atakującemu. Ta kontrola może być używana na kilka różnych sposobów, w tym w ruchu bocznym przez sieć wewnętrzną, korzystając z zaufania serwera docelowego do innych systemów w sieci.
luki w zabezpieczeniach, które mogą prowadzić do wykonywania poleceń
podczas gdy luki w wykonywaniu poleceń występują, gdy podatna aplikacja pozwala użytkownikowi końcowemu rozszerzyć domyślną funkcjonalność aplikacji i wykonywać polecenia systemowe, możliwe jest również wykonywanie poleceń za pomocą kodu aplikacji. Jest to powszechnie znane jako wykonanie kodu. Nawet w przypadku wystąpienia luki w działaniu kodu, celem końcowym jest wykonanie dowolnych poleceń systemowych. Biorąc to pod uwagę, omówmy niektóre luki, które mogą prowadzić do wykonania polecenia poprzez wstrzyknięcie polecenia lub wykonanie kodu.
Poniżej przedstawiono niektóre luki, które mogą ostatecznie prowadzić do ataków command injection.
dowolne polecenie injection
jak omówiliśmy w naszym poprzednim przykładzie, możliwe jest, że aplikacje otrzymują dowolne Polecenia systemowe bezpośrednio od użytkownika i wykonują je na bazowym hoście. Jest to przykład klasy podatności na wstrzykiwanie poleceń.
dowolne przesyłanie plików
gdy aplikacje pozwalają użytkownikom przesyłać pliki z dowolnymi rozszerzeniami plików, może to prowadzić do wstrzyknięcia polecenia, gdy te przesłane pliki są umieszczane w katalogu webroot. Jest to kolejny powszechny sposób, w jaki aplikacje internetowe mogą stać się podatne na wstrzykiwanie poleceń.
niezabezpieczona serializacja
oprócz standardowych luk w wstrzykiwaniu poleceń, dowolne wykonywanie poleceń może być również możliwe przy użyciu innych luk, takich jak niezabezpieczona deserializacja. Wykorzystuje to fakt, że kod po stronie serwera deserializuje serializowaną zawartość przekazaną przez Użytkownika, bez poprawnej walidacji. Mimo że jest to powszechnie znane jako niebezpieczna klasa luk w serializacji, ostatecznie prowadzi do wstrzykiwania poleceń, jeśli docelowa aplikacja spełnia pewne wymagania, takie jak odpowiednie gadżety dostępne w ścieżce klas.
wstrzykiwanie szablonów po stronie serwera
gdy aplikacje internetowe używają technologii szablonów po stronie serwera, takich jak Jinja2 lub Twig, do generowania dynamicznych odpowiedzi HTML, możliwe jest wstrzykiwanie szablonów po stronie serwera. Luki w zabezpieczeniach SSTI występują, gdy dane wejściowe użytkownika są osadzone w szablonie w niebezpieczny sposób i skutkuje to zdalnym wykonaniem kodu na serwerze.
XML external entity injection
luka w zabezpieczeniach zewnętrznych XML jest innym rodzajem luki, która występuje przeciwko aplikacjom, które analizują dane wejściowe XML sterowane przez Użytkownika za pomocą słabo skonfigurowanego parsera XML. Luki XXE zwykle prowadzą do odczytu dowolnych plików z serwera i wywołania ataków typu Denial-of-Service.
jednak mogą one również prowadzić do wykonania polecenia na serwerze, gdy spełnione są określone warunki. Na przykład, jeśli PHP expect:// wrapper jest włączone na docelowym serwerze podatnym na ataki, możliwe jest wykonywanie dowolnych poleceń na serwerze.
należy pamiętać, że nie jest to wyczerpująca lista luk, które mogą prowadzić do wstrzykiwania poleceń, a istnieje kilka innych luk, które mogą prowadzić do wstrzykiwania poleceń, gdy spełniają określone warunki.
wniosek
oczywiste jest, że istnieje kilka różnych luk, które mogą prowadzić do wykonania polecenia na serwerze. Programiści muszą być świadomi tych luk w zabezpieczeniach command injection ze względu na fakt, że te luki mają duży wpływ, ponieważ mogą zapewnić pełną kontrolę nad podstawową infrastrukturą.
w kilku następnych artykułach z tej serii omówimy więcej pojęć związanych z command injection, takich jak identyfikowanie i wykorzystywanie blind command injection.