MS Access SQL Injection
Online Playground
Ograniczenia bazy danych
Konkatenacja ciągów znaków
Konkatenacja ciągów znaków jest możliwa za pomocą znaków & (%26)
i + (%2b)
.
Komentarze
W MS Access nie ma komentarzy, ale wydaje się, że można usunąć ostatnią część zapytania za pomocą znaku NULL:
Jeśli to nie działa, zawsze możesz poprawić składnię zapytania:
Zapytania zagnieżdżone
Nie są obsługiwane.
LIMIT
Operator LIMIT
nie jest zaimplementowany. Jednakże, możliwe jest ograniczenie wyników zapytania SELECT do pierwszych N wierszy tabeli za pomocą operatora TOP
. TOP
przyjmuje jako argument liczbę całkowitą, reprezentującą liczbę zwracanych wierszy.
Tak jak w przypadku TOP, można użyć LAST
, który pobierze wiersze od końca.
Zapytania UNION/Podzapytania
W SQLi zazwyczaj chcesz w jakiś sposób wykonać nowe zapytanie, aby wydobyć informacje z innych tabel. MS Access zawsze wymaga, aby w podzapytaniach lub dodatkowych zapytaniach wskazano FROM
.
Więc jeśli chcesz wykonać UNION SELECT
lub UNION ALL SELECT
lub SELECT
w nawiasach w warunku, zawsze musisz wskazać FROM
z prawidłową nazwą tabeli.
Dlatego musisz znać prawidłową nazwę tabeli.
Łączenie równości + Podciąg
To pozwoli Ci na wydobycie wartości z bieżącej tabeli bez konieczności znajomości nazwy tabeli.
MS Access pozwala na dziwną składnię, taką jak '1'=2='3'='asd'=false
. Jak zwykle, wstrzyknięcie SQL będzie znajdować się w klauzuli WHERE
, więc możemy to wykorzystać.
Wyobraź sobie, że masz SQLi w bazie danych MS Access i wiesz (lub zgadujesz), że jedna z nazw kolumn to username, a to pole chcesz wydobyć. Możesz sprawdzić różne odpowiedzi aplikacji internetowej, gdy używana jest technika łączenia równości i potencjalnie wydobyć zawartość za pomocą wstrzyknięcia booleanowego, używając funkcji Mid
do pobierania podciągów.
Jeśli znasz nazwę tabeli i kolumny, którą chcesz wydobyć, możesz użyć kombinacji funkcji Mid
, LAST
i TOP
, aby wyciec wszystkie informacje za pomocą boolean SQLi:
Możesz to sprawdzić w internetowym środowisku testowym.
Brute-forcing nazw tabel
Za pomocą techniki łańcuchowego równania możesz również brute-force'ować nazwy tabel używając czegoś takiego jak:
Możesz również użyć bardziej tradycyjnej metody:
Nie wahaj się sprawdzić tego w internetowym środowisku testowym.
Wspólne nazwy tabel w Sqlmap: https://github.com/sqlmapproject/sqlmap/blob/master/data/txt/common-tables.txt
Istnieje inna lista na stronie http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html
Próba siłowa nazw kolumn
Możesz próbować siłowo nazw bieżących kolumn za pomocą sztuczki z łańcuchowaniem równości z:
Lub z użyciem group by:
Lub możesz przeprowadzić brutalne przełamanie nazw kolumn innego tabeli za pomocą:
Wydobywanie danych
Już omówiliśmy technikę łączenia równości do wydobywania danych z bieżących i innych tabel. Ale istnieją inne sposoby:
W skrócie, zapytanie używa instrukcji "if-then", aby wywołać "200 OK" w przypadku sukcesu lub "500 Internal Error" w przeciwnym razie. Wykorzystując operator TOP 10, można wybrać pierwszych dziesięć wyników. Następne użycie LAST pozwala uwzględnić tylko 10. krotkę. Na tej wartości, używając operatora MID, można przeprowadzić prostą porównanie znaków. Poprawiając indeks MID i TOP, możemy wyciągnąć zawartość pola "username" dla wszystkich wierszy.
Oparte na czasie
Inne interesujące funkcje
Mid('admin',1,1)
pobierz podciąg od pozycji 1 o długości 1 (początkowa pozycja to 1)LEN('1234')
pobierz długość ciągu znakówASC('A')
pobierz wartość ASCII znakuCHR(65)
pobierz ciąg znaków z wartości ASCIIIIF(1=1,'a','b')
jeśli toCOUNT(*)
Liczba elementów
Wyliczanie tabel
Z tutaj możesz zobaczyć zapytanie, które pobiera nazwy tabel:
Jednakże, należy zauważyć, że bardzo często można znaleźć Wstrzyknięcia SQL, gdzie nie masz dostępu do odczytu tabeli MSysObjects
.
Dostęp do systemu plików
Pełna ścieżka do katalogu głównego witryny
Wiedza o bezwzględnej ścieżce do katalogu głównego witryny może ułatwić dalsze ataki. Jeśli błędy aplikacji nie są całkowicie ukryte, ścieżka katalogu może zostać ujawniona podczas próby wyboru danych z nieistniejącej bazy danych.
http://localhost/script.asp?id=1'+'+UNION+SELECT+1+FROM+FakeDB.FakeTable%00
MS Access odpowiada komunikatem o błędzie zawierającym pełną ścieżkę katalogu witryny.
Wyliczanie plików
Następujący wektor ataku może być używany do wnioskowania o istnieniu pliku na zdalnym systemie plików. Jeśli określony plik istnieje, MS Access wywołuje komunikat o błędzie informujący, że format bazy danych jest nieprawidłowy:
http://localhost/script.asp?id=1'+UNION+SELECT+name+FROM+msysobjects+IN+'\boot.ini'%00
Innym sposobem na wyliczenie plików jest określenie elementu bazy danych.tabela. Jeśli określony plik istnieje, MS Access wyświetla komunikat o błędzie formatu bazy danych.
http://localhost/script.asp?id=1'+UNION+SELECT+1+FROM+C:\boot.ini.TableName%00
Odgadywanie nazwy pliku .mdb
Nazwa pliku bazy danych (.mdb) może być wywnioskowana za pomocą następującego zapytania:
http://localhost/script.asp?id=1'+UNION+SELECT+1+FROM+name[i].realTable%00
Gdzie name[i] to nazwa pliku .mdb i realTable to istniejąca tabela w bazie danych. Chociaż MS Access zawsze wywoła komunikat o błędzie, możliwe jest rozróżnienie między nieprawidłową nazwą pliku a prawidłową nazwą pliku .mdb.
Łamacz hasła .mdb
Access PassView to darmowe narzędzie, które można użyć do odzyskania głównego hasła bazy danych Microsoft Access 95/97/2000/XP lub Jet Database Engine 3.0/4.0.
Odwołania
Last updated