MySQL injection
RootedCON to najważniejsze wydarzenie związane z cyberbezpieczeństwem w Hiszpanii i jedno z najważniejszych w Europie. Mając na celu promowanie wiedzy technicznej, ten kongres jest gorącym punktem spotkań dla profesjonalistów technologii i cyberbezpieczeństwa we wszystkich dziedzinach.
Komentarze
Interesujące funkcje
Potwierdzenie Mysql:
Przydatne funkcje
The following functions can be useful when performing MySQL injection attacks:
Następujące funkcje mogą być przydatne podczas przeprowadzania ataków SQL Injection na bazie danych MySQL:
version()
: Returns the version of the MySQL server.database()
: Returns the name of the current database.user()
: Returns the username used to connect to the MySQL server.current_user()
: Returns the current user.schema()
: Returns the name of the current schema.@@hostname
: Returns the hostname of the MySQL server.@@datadir
: Returns the data directory of the MySQL server.@@basedir
: Returns the base directory of the MySQL server.@@version_compile_os
: Returns the operating system on which the MySQL server was compiled.@@version
: Returns the version of the MySQL server.@@global.version_compile_os
: Returns the operating system on which the MySQL server was compiled.@@global.version
: Returns the version of the MySQL server.
These functions can provide valuable information about the MySQL server, which can be used to further exploit vulnerabilities or gather intelligence during a penetration test.
Te funkcje mogą dostarczyć cenne informacje na temat serwera MySQL, które mogą być wykorzystane do dalszego wykorzystania podatności lub zbierania informacji podczas testu penetracyjnego.
Wszystkie wstrzyknięcia
Wstrzyknięcie SQL to technika ataku, która polega na wstrzyknięciu złośliwego kodu SQL do zapytania SQL, które jest wykonywane przez aplikację internetową. Wstrzyknięcie SQL może prowadzić do poważnych konsekwencji, takich jak odczyt, modyfikacja lub usunięcie danych w bazie danych.
W przypadku wstrzyknięcia SQL w MySQL, atakujący może wykorzystać różne techniki, aby osiągnąć cel. Poniżej przedstawiono kilka popularnych technik wstrzyknięcia SQL w MySQL:
1. Wstrzyknięcie komentarza
Wstrzyknięcie komentarza to technika, która polega na wstrzyknięciu komentarza SQL do zapytania, aby wyłączyć resztę kodu. Przykład:
W powyższym przykładzie, komentarz --
wyłącza resztę kodu, co pozwala na zalogowanie się jako administrator bez znajomości hasła.
2. Wstrzyknięcie warunku zawsze prawdziwego
Wstrzyknięcie warunku zawsze prawdziwego to technika, która polega na wstrzyknięciu warunku, który zawsze jest prawdziwy, aby obejść autoryzację. Przykład:
W powyższym przykładzie, warunek '1'='1'
zawsze jest prawdziwy, co umożliwia zalogowanie się jako administrator bez znajomości hasła.
3. Wstrzyknięcie zapytania UNION
Wstrzyknięcie zapytania UNION to technika, która polega na wstrzyknięciu zapytania UNION do zapytania SQL, aby połączyć wyniki dwóch zapytań. Przykład:
W powyższym przykładzie, wstrzyknięcie zapytania UNION pozwala na wyświetlenie nazw tabel i kolumn w bazie danych.
4. Wstrzyknięcie zapytania SELECT INTO OUTFILE
Wstrzyknięcie zapytania SELECT INTO OUTFILE to technika, która polega na wstrzyknięciu zapytania SELECT INTO OUTFILE do zapytania SQL, aby zapisywać wyniki zapytania do pliku na serwerze. Przykład:
W powyższym przykładzie, wstrzyknięcie zapytania SELECT INTO OUTFILE powoduje zapisanie nazw użytkowników i haseł do pliku "leak.txt" na serwerze.
5. Wstrzyknięcie zapytania LOAD_FILE
Wstrzyknięcie zapytania LOAD_FILE to technika, która polega na wstrzyknięciu zapytania LOAD_FILE do zapytania SQL, aby odczytywać zawartość plików na serwerze. Przykład:
W powyższym przykładzie, wstrzyknięcie zapytania LOAD_FILE powoduje odczytanie zawartości pliku "/etc/passwd" na serwerze.
6. Inne techniki
Oprócz powyższych technik, istnieje wiele innych technik wstrzyknięcia SQL w MySQL, takich jak wstrzyknięcie kodu SQL do parametrów zapytania, wstrzyknięcie kodu SQL do nazw tabeli itp. Ważne jest, aby zrozumieć różne techniki wstrzyknięcia SQL i wiedzieć, jak się przed nimi bronić.
z https://labs.detectify.com/2013/05/29/the-ultimate-sql-injection-payload/
Przebieg
Pamiętaj, że w "nowoczesnych" wersjach MySQL można zastąpić "information_schema.tables" przez "mysql.innodb_table_stats" (Może to być przydatne do obejścia WAF-ów).
Tylko 1 wartość
group_concat()
Limit X,1
Ślepe, po jednym
substr(version(),X,1)='r'
lubsubstring(version(),X,1)=0x70
lubascii(substr(version(),X,1))=112
mid(version(),X,1)='5'
Ślepe, dodawanie
LPAD(version(),1...lenght(version()),'1')='asd'...
RPAD(version(),1...lenght(version()),'1')='asd'...
SELECT RIGHT(version(),1...lenght(version()))='asd'...
SELECT LEFT(version(),1...lenght(version()))='asd'...
SELECT INSTR('foobarbar', 'fo...')=1
Wykrywanie liczby kolumn
Używając prostego ORDER
MySQL Union Based
MySQL Union Based (Unia oparta na MySQL) jest jedną z najpopularniejszych technik ataku SQL Injection. Ta technika polega na wykorzystaniu operatora UNION w celu łączenia wyników dwóch lub więcej zapytań SQL w jednym wyniku. Dzięki temu atakujący może uzyskać dostęp do danych, do których normalnie nie miałby uprawnień.
Krok po kroku
Zidentyfikuj podatny parametr: Pierwszym krokiem jest zidentyfikowanie parametru, który jest podatny na atak SQL Injection. Może to być np. pole formularza lub parametr URL.
Sprawdź, czy parametr jest podatny: Aby sprawdzić, czy parametr jest podatny na atak SQL Injection, możesz dodać znak jednostrzałki (') lub podwójnego minusa (--) na końcu wartości parametru. Jeśli otrzymasz błąd lub zmieni się wygląd strony, to oznacza, że parametr jest podatny.
Znajdź liczbę kolumn: Aby przeprowadzić atak Union Based, musisz znać liczbę kolumn w tabeli, z której chcesz wydobyć dane. Możesz to zrobić, dodając kolejno UNION SELECT NULL, NULL, ..., NULL, NULL do zapytania, aż przestaniesz otrzymywać błędy. Liczba NULL-ów odpowiada liczbie kolumn.
Wydobywanie danych: Po znalezieniu liczby kolumn możesz rozpocząć wydobywanie danych. Możesz to zrobić, dodając UNION SELECT z odpowiednimi kolumnami i tabelą, z której chcesz pobrać dane. Na przykład, UNION SELECT 1,2,3,4,5,6,7,8,9,10 FROM tabela.
Dodatkowe informacje: Jeśli chcesz uzyskać więcej informacji o strukturze bazy danych, możesz użyć funkcji UNION SELECT zamiast UNION SELECT. Na przykład, UNION SELECT table_name, column_name, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL FROM information_schema.columns WHERE table_schema=database().
Zabezpieczenia
Aby zabezpieczyć aplikację przed atakami SQL Injection, należy stosować odpowiednie techniki sanitacji danych wejściowych, takie jak:
Używanie parametryzowanych zapytań SQL.
Walidacja i filtrowanie danych wejściowych.
Unikanie dynamicznych zapytań SQL.
Ograniczanie uprawnień użytkowników bazy danych.
Pamiętaj, że zabezpieczenia te powinny być stosowane na wszystkich warstwach aplikacji, włączając frontend, backend i bazę danych.
SSRF
Dowiedz się tutaj, jak wykorzystać wstrzyknięcie MySQL do uzyskania SSRF tutaj.
Triki na omijanie WAF
Alternatywy dla information_schema
Pamiętaj, że w "nowoczesnych" wersjach MySQL możesz zastąpić information_schema.tables przez mysql.innodb_table_stats lub przez sys.x$schema_flattened_keys lub przez sys.schema_table_statistics
Wstrzyknięcie MySQL bez przecinków
Wybierz 2 kolumny bez użycia przecinków (https://security.stackexchange.com/questions/118332/how-make-sql-select-query-without-comma):
Pobieranie wartości bez nazwy kolumny
Jeśli w pewnym momencie znasz nazwę tabeli, ale nie znasz nazw kolumn wewnątrz tabeli, możesz spróbować znaleźć liczbę kolumn, wykonując coś takiego jak:
Zakładając, że istnieją 2 kolumny (pierwsza to ID), a druga to flaga, możesz spróbować bruteforce'ować zawartość flagi, próbując znak po znaku:
Więcej informacji na https://medium.com/@terjanq/blind-sql-injection-without-an-in-1e14ba1d4952
Historia MySQL
Możesz zobaczyć inne wykonania wewnątrz MySQL, czytając tabelę: sys.x$statement_analysis
Alternatywne wersje
Inne przewodniki dotyczące wstrzykiwania MYSQL
Odwołania
RootedCON to najważniejsze wydarzenie związane z cyberbezpieczeństwem w Hiszpanii i jedno z najważniejszych w Europie. Mając na celu promowanie wiedzy technicznej, ten kongres jest gorącym punktem spotkań dla profesjonalistów technologii i cyberbezpieczeństwa we wszystkich dziedzinach.
Last updated