Uzyskanie dostępu do systemu przez wykonanie RCE
Opis Aplikacji Aplikacja webowa zawierająca panel logowania, połączona z bazą danych MySQL
Zabezpieczenie: Brak filtrów danych wejściowych, brak ochrony przed SQL Injection i RCE, brak weryfikacji tożsamości użytkownika w kontekście uprawnień.
Zadanie: Wykryć i wykorzystać podatności typu SQL Injection, uzyskać dostęp do danych oraz wykonać zdalne polecenia prowadzące do odczytu pliku.
Szczegółowy opis: Obejście zabezpieczenia logowania przy użyciu podatności typu SQL Injection. Następnie zidentyfikowanie dostępnych baz danych za pomocą narzędzia sqlmap, w tym tabele zawierające polecenia systemowe. Wykorzystanie SQL Injection typu UNION do wykonania zdalnych poleceń zapisanych w bazie. Na koniec odczytanie pliku.
Target IP: [TARGET_IP]
- Nieautoryzowane logowanie do aplikacji przez SQL Injection
Cel: Uzyskanie nieautoryzowanego dostępu do aplikacji
Działanie: Wprowadzenie do pola „Username” ładunku SQL Injection' or 1=1--, a w polu „Password” dowolnej wartości.
Rezultat: Aplikacja akceptuje zapytanie SQL jako prawdziwe, pomijając warunek logowania. Użytkownik zostaje zalogowany bez uwierzytelnienia, co umożliwia dostęp do dalszych funkcjonalności systemu.

- Identyfikacja i enumeracja baz danych za pomocą sqlmap
Cel: Uzyskanie listy wszystkich baz danych dostępnych w systemie.
Działanie: Wykonanie polecenia:Rezultat: Aplikacja ujawnia dwie bazy danych: information_schema oraz pentest. Potwierdzona podatność SQL Injection umożliwia dalszą eksplorację danych w systemie.bash
sqlmap -u http://192.168.100.60 --forms --dbs
- Zrzut zawartości bazy danych
Cel: Uzyskanie danych przechowywanych w bazie pentest w celu identyfikacji użytkowników i ich informacji.
Działanie: Wykonanie polecenia:Rezultat: Z bazy danych pentest zostaje odczytana tabela users, zawierająca kolumny id oraz username. Narzędzie potwierdza istnienie 3 rekordów, co potwierdza skuteczną eksfiltrację danych.bash
sqlmap -u http://192.168.100.60 --forms -D pentest --dump-all
- Wykonanie polecenia systemowego poprzez SQL Injection typu UNION
Cel: Uzyskanie dostępu do wyników komend bash zapisanych w bazie danych.
Działanie: Wykonanie prób ataków typu UNION SELECT w celu zidentyfikowania liczby kolumn, jaką oczekuje aplikacja. Testowanie różnych wariantów zapytań, aby ustalić poprawną składnię umożliwiającą późniejsze połączenie danych:Rezultat: Aplikacja wykonuje polecenie systemowe i zwraca jego wynik w interfejsie. Widoczny jest wynik komendy id, wskazujący, że serwer działa z uprawnieniami użytkownika www-data. To potwierdza możliwość zdalnego wykonania kodu (RCE) przez podatność SQL Injection typu UNION SELECT.url
123-- x 123 union select 'id'-- 123 union select 'id','id'-- 123 union select 'id','id','id'--
- Odczyt pliku przy użyciu RCE przez SQL Injection
Cel: Odczytanie zawartości pliku, przy użyciu podatności typu Remote Code Execution (RCE), dostępnej poprzez SQL Injection.
Działanie: W parametrze id adresu URL aplikacji wykonaj polecenia systemowe, korzystając z zapytania typu UNION SELECT:1. url - polecenie ls, aby wylistować pliki w katalogu serwera
http://192.168.100.60/?id=123 union select 'id','id','ls'--Rezultat: Na ekranie aplikacji wyświetlona została zawartość pliku flag3_1gaf.txt — tym samym udało się skutecznie odczytać flagę z serwera, co potwierdza pełną możliwość wykonania poleceń systemowych przez lukę w zabezpieczeniach.2. url - odczytanie zawartość pliku z flagą
http://192.168.100.60/?id=123 union select 'id','id','cat flag3_lgaf.txt'--

Wnioski końcowe:
Wykorzystanie podatności SQL Injection umożliwiło ominięcie logowania, enumerację bazy danych, wykonanie zdalnych poleceń systemowych oraz odczyt plików serwera. Brak filtracji danych wejściowych i brak izolacji warstw systemu skutkuje pełną kompromitacją aplikacji.