WEP lekcja #8 – Niebezpieczna luka typu Command Injection…

Dzisiaj powiem Tobie o luce umożliwiającej wstrzykiwanie poleceń systemowych (cmd/bash) za pomocą dziurawego skryptu języka PHP. Problem ten występuje w przypadku, gdy programista nie waliduje przesłanych informacji od użytkownika i wywołuje za ich pomocą takie funkcje PHP jak system(), exec(), passthru() lub inną odwołującą się do komend systemowych.

Trzeba zaznaczyć,  że ta jak i większość lekcji nie odwołuje się konkretnie do PHP. Istnieją inne języki i serwery służące do tworzenia i przetrzymywania dynamicznych stron www i w nich koncepcja ataku pozostaje taka sama. Atak typu command injection może być szalenie groźny i ostatecznie doprowadzić nawet do uszkodzenia całego serwera. Wszystko tutaj zależy od umiejętności hakera w poruszaniu się w gąszczu poleceń systemowych i wiedzy na temat działania systemu operacyjnego i samych aplikacji serwerowych. Na wideo zaprezentowany jest również sposób na wyciągnięcie ciasteczek sesyjnych administratora strony za pomocą tej dziur w oprogramowaniu web aplikacji.

Materiał szkoleniowy o luce typu command injection – lekcja #7

Uwaga! Jeżeli działasz na swoim lokalnym komputerze a nie np: wirtualnej maszynie, to nie wykonuj ryzykownych komend takich jak format! Pamiętaj to Twój komputer!

Poniższe wideo szkoleniowe Web Application Pentesting lekcji siódmej obrazuje zasadę działania tego typu luki i kilkanaście przykładowych scenariuszy, które cyberprzestępca może wykonać na dziurawej web aplikacji i na samym serwerze.

Uwagi co do podatności OS command injection

Należy pamiętać, że wszystkie polecenia wykonywane przez hakera są wywoływane na prawach na których działa sam serwer. Jeśli uruchomisz (lub właściciel serwera) serwer XAMPP jako administrator to potencjalny włamywacz uzyska praktycznie pełen dostęp do wszystkich plików i poleceń systemowych. Ograniczony jest jedynie swoją wyobraźnią.


W przypadku kiedy serwer działa na niższych uprawnieniach, często nie uda Cię wyjść poza katalog htdocs. Również w ustawieniach samego php (plik php.ini) możesz jako administrator ograniczyć dostęp do wyższej hierarchii plików i katalogów w PHP za pomocą dyrektywy open_basedir. Dodatkowo w tym pliku jako zarządca serwera, mógłbyś zablokować możliwość wywoływania funkcji języka PHP takich jak np. system().

Konfiguracja php.ini open_basedir w serwerze HTTP XAMPP
Konfiguracja ustawień interpretera PHP i dyrektywy open_basedir w pliku php.ini. Jeśli usuniesz średnik przed nią to ją odkomentujesz i możesz dodać jej ustawienie.

W przypadku niższych uprawnień cyberprzestępca, może ściągnąć backdoora i pozostawić go na serwerze w celu wykorzystania go w przyszłości. Często też się zdarza, że cracker nie kończy na tym ataku i próbuje uzyskać prawa administratora (root) za pomocą exploitów wywołujących lokalną eskalacje uprawnień (privilege escalation). Kilka z takich exploitów możesz znaleźć w pakiecie Metasploit.

Drugą częstą drogą ataku jest uzyskanie hasła użytkowników systemu Linux/Windows z pliku /etc/passwd, /etc/shadow lub plików SAM w przypadku systemu Microsoft Windows. Następnie cyberprzestępca lokalnie u siebie próbuje złamać zdobyte hashe. Może to umożliwić zalogowane się do serwera za pomocą SSH/TELNET jeśli takowe usługi działają lub wykonywanie poleceń z tzn. sudo.

Skrócone komendy wiersza poleceń cmd użyte w materiale wideo

Poniżej umieszczam kilka poleceń zaprezentowanych w filmie szkoleniowym nr. #8. Jeśli potrzebujesz więcej poleceń wprowadź w swoim wierszu poleceń komendę help lub zajrzyj do wyszukiwarki Google.

127.0.0.1 -n && dir
type
tasklist
taskkill
echo

Uwaga! Pamiętaj że typ używanych poleceń jest uzależniony od faktu na jakim systemie operacyjnym działa strona internetowa. Dla systemu Linux istnieją nieco inne komendy niż dla Windowsa.

Zadanie domowe z podsumowania THC-Hydra

-> Zadanie 1

Umieść na pulpicie komputera serwera plik hasla.txt o dowolnej zawartości. Spróbuj za pomocą luki Command Injection i poznanych w tej lekcji poleceń odczytać jego zawartość. Oczywiście udawaj, że nie znasz struktury plików na serwerze.

Uwaga! Rozwiązanie 1. Nie psuj sobie zabawy!

Za pomocą polecenia dir badasz strukturę plików na serwerze szukając folderu z pulpitem systemu operacyjnego. Następnie za pomocą znalezionej ścieżki do pliku hasla.txt wywołujesz polecenie podobne do poniższego:

127.0.0.1 && type C:\Users\HakerEduPL\Desktop\hasla.txt

-> Zadanie 2

Utwórz w normalny sposób kopię zapasową pliku index.php i umieść ją w bezpiecznej lokalizacji. Następnie spróbuj zmodyfikować tylko za pomocą przeglądarki Firefox i opisywanej dzisiaj luki plik index.php znajdujący się w głównym katalogu strony www (C:\xampp\htdocs).

Następnie przejdź na stronę główną serwera np: 192.168.0.14 i sprawdź czy osiągnąłeś sukces. Możesz przykładowo zmodyfikować go tak jak na poniższym obrazku.

Przykład użycia poddatności command injection w PHP.
Skompromitowana nasza witryna poprzez modyfikacje pliku domyślnej strony głównej (index.php) za pomocą luki command injection.

Uwaga! Po całej udanej operacji przywróć ze swojej kopi plik index.php.

Podpowiedź do zadania nr 2 - jeśli nie dajesz rady to spójrz!
ECHO? STRUMIENIE? 🙂
Uwaga! Rozwiązanie 2. Nie psuj sobie zabawy!

Jedno z przykładowych rozwiązań:

127.0.0.1 -n 1 && echo HACKED! > C:\xampp\htdocs\index.php

Jeśli to czytasz dodatkowo dowiedz się we własnym zakresie o subtelnej różnicy pomiędzy strumieniem „>” a  „>>„. Możesz przetestować to w praktyce w swoim wierszu poleceń.

-> Zadanie 3 *

To zadanie oznaczone jest gwiazdką jako trudniejsze. Nie musisz jego wykonywać. Zadanie tylko dla ambitnych i wymagające większą ilość czasu. 

Wykonaj poniższą listę zadań (warto wykazać się kreatywnością):

  1. z pomocą wpisu o wykradaniu plików gadu-gadu z pomocą FTP, napisz na własnym komputerze plik.bat wykonujący serie prostych niegroźnych poleceń (możesz używać takich jak w normalnym wierszu poleceń CMD np: dir),
  2. przetestuj jak ten plik działa. Następnie spróbuj go wgrać za pomocą luki command injection,
  3. spróbuj go po wgraniu z poziomu luki command injection uruchomić (jeśli nie wiesz jak poszukaj w naszym wideo),
  4. spróbuj napisać zgodnie z powyższym wpisem o gg plik ftp.bat, który pobierze jakiś inny plik (np: prosty shell.php) z Twojego serwera FTP (np: załóż konto na cba.pl),
  5. jeśli plik działa spróbuj go wgrać za pomocą command injection na podatny serwer za pomocą luki os injection,
  6. jeśli wszystko się powiodło ciesz się wgranym shellem.

Uwaga! Możesz dowolnie modyfikować treść tego opcjonalnego zadania, jednak ja radzę położyć nacisk na próbę wgrania za pomocą FTP dowolnego pliku (może być nawet to konsolowy program wget pobrany z internetu dla Windowsa). Czemu wget? Bo potem za jego pomocą ściągniesz z internetu na serwer co chcesz…

Podpowiedź do zadania nr 3 - jeśli nie dajesz rady to spójrz!

Podpowiedzi są następujące:

  • poszukaj informacji na temat poleceń klienta FTP działającego w konsoli i używaj wyszukiwarki do rozwiązywania wszystkich problemów,
  • w celu pobrania a nie wysłania pliku poprzez systemowe FTP używa się polecenia GET a nie PUT,
  • możesz zanim zaczniesz pisać swój skrypt bat badać jak działa ftp wpisując w swoim wierszu poleceń ftp i help,
  • jeśli nie uda Ci się złożyć ostatecznego długiego polecenia, które wgrywa Twój złośliwy plik bat, to możesz próbować wgrywać go wiersz po wierszu w następujący sposób:
127.0.0.1 && echo 1_linijka_bat >> C:\xampp\htdocs\ftp.bat
127.0.0.1 && echo 2_linijka_bat >> C:\xampp\htdocs\ftp.bat
127.0.0.1 && echo 3_linijka_bat >> C:\xampp\htdocs\ftp.bat
(...)
127.0.0.1 && "C:\xampp\htdocs\ftp.bat"

Więcej informacji na temat pisania plików wsadowych uzyskasz ze swojej wyszukiwarki wpisując pliki wsadowe.

Uwaga! To zadanie nie posiada odpowiedzi, jednak chciałbym abyś chociaż zastanowił się nad celowością jego treści…

Podsumowanie o wstrzykiwaniu komend do systemu operacyjnego

Jak widzisz wywoływanie komend systemowych przez programistę z pobraniem argumentów od użytkownika lub nawet nagłówków HTTP, które można zmodyfikować jest głupie. Pamiętaj że tego typu luka może znajdować się w różnych miejscach witryny i nie koniecznie być widoczna na pierwszy rzut oka. Jeśli projektujesz systemy wchodzące w interakcje z użytkownikiem, pamiętaj o zasadzie ograniczonego zaufania. Filtruj w przemyślany sposób wszystkie dane wpływające do Twojej web aplikacji, a unikniesz tego typu niespodzianek.

W kolejnych lekcjach poznasz również zautomatyzowane skanery wyszukujące różnego typu słabe punkty strony www, które ułatwią Ci wyszukiwanie tego typu i innych luk. Pamiętaj o daniu obowiązkowo subskrypcji na naszym kanale YouTube i lajka na fejsie, jeśli chcesz być na bieżąco! To tyle na dzisiaj o ataku os command. Powodzenia w lekcji domowej!

One thought to “WEP lekcja #8 – Niebezpieczna luka typu Command Injection…”

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *