Co je to SQL injection?
Počet stránek a stránek na webu se neustále zvyšuje. Pro vývoj jsou přijímáni všichni, kdo mohou. A noví weboví programátoři často používají nebezpečný a starý kód. A to vytváří spousty mezer pro vetřelce a hackery. Také používají. Jednou z nejvíce klasických zranitelností je SQL injection.
Obsah
Trochu teorie
Mnoho lidí ví, že většina webů a služeb v síti se používá k ukládání databází SQL. Jedná se o strukturovaný jazyk dotazů, který umožňuje spravovat a spravovat úložiště dat. Existuje mnoho různých verzí systémů pro správu databází - Oracle, MySQL, Postgre. Bez ohledu na název a typ používají požadavky na údaje stejně. Zde leží potenciální zranitelnost. Pokud by vývojář nemohl žádost správně a bezpečně zpracovat, může útočník tuto výhodu využít a použít speciální taktiky, aby získal přístup k databázi a odtud ke správě celého webu.
Abyste se vyhnuli takovým situacím, je třeba inteligentně optimalizovat kód a pečlivě sledovat, jakým způsobem je žádost zpracována.
SQL injekční test
Chcete-li zjistit přítomnost zranitelnosti v síti, existuje řada hotových automatizovaných softwarových systémů. Ale můžete provést jednoduchý test ručně. Chcete-li to provést, přejděte na jednu z míst, která jsou předmětem šetření, a pokuste se způsobit chybu databáze v adresním řádku. Například skript na webu nemusí žádosti zpracovávat a neplodovat je.
Například tam je some_site / index.php? Id = 25
Nejjednodušší je zadat po 25 citátů a poslat požadavek. Pokud nedošlo k žádné chybě, budou všechny požadavky na webu zfiltrovány a zpracovány správně nebo jejich výstup v nastavení zakázán. Pokud stránka restartuje s problémy, pak je chyba zabezpečení SQL injection.
Jakmile se zjistí, můžete se ho zbavit.
Chcete-li tuto chybu zabezpečení implementovat, musíte o ní něco vědět příkazy SQL dotazů. Jedním z nich je UNION. Kombinuje několik výsledků dotazů do jednoho. Takže můžete vypočítat počet polí v tabulce. Příklad prvního dotazu vypadá takto:
- some_site / index.php? id = 25 UNION SELECT 1.
Ve většině případů by taková položka měla způsobit chybu. To znamená, že počet polí není stejný jako 1. Tedy volba možností od 1 a více, můžete nastavit jejich přesné číslo:
- some_site / index.php? id = 25 UNION SELECT 1,2,3,4,5,6.
To znamená, že když se chyba přestane zobrazovat, znamená to, že počet polí je odhadnut.
Existuje také alternativní řešení tohoto problému. Například pokud je velký počet polí - 30, 60 nebo 100. Jedná se o příkaz GROUP BY. Seskupuje výsledky dotazu pomocí některé vlastnosti, například id:
- some_site / index.php? id = 25 GROUP BY 5.
Pokud chyby nebyly přijaty, je zde více polí než 5. Proto, substituce variant od poměrně širokého rozsahu, je možné vypočítat, kolik z nich jsou skutečně.
Tento příklad SQL injection je pro začátečníky, kteří se chtějí vyzkoušet při testování svých stránek. Je důležité si uvědomit, že pro neoprávněný přístup k někomu jinému existuje článek trestního zákona.
Hlavní typy injekcí
Implementace chyb zabezpečení pomocí SQL injection může být provedena několika způsoby. Další nejoblíbenější techniky jsou:
UNION dotaz SQL injekce. Jednoduchý příklad tohoto typu byl již zvážen výše. Je implementován kvůli chybě při kontrole příchozích dat, která není žádným způsobem filtrována.
SQL injekce založená na chybách. Jak název napovídá, tento typ také používá chyby a odesílá výrazy, které jsou syntakticky nesprávné. Následně jsou zachyceny záhlaví odpovědí, které analyzují později SQL injection.
Stacked dotazy SQL injekce. Tato zranitelnost je určena prováděním po sobě následujících požadavků. Je charakterizován připojením na konci značky ";". Tento přístup se často používá k přístupu k implementaci dat pro čtení a zápis nebo ke kontrole funkcí operačního systému, pokud to povolovací práva dovolují.
Software pro vyhledávání zranitelností SQL
Programy, které jsou k dispozici pro SQL injekce, obvykle mají dvě složky - skenování webu pro možné zranitelnosti a jejich využívání k získání přístupu k datům. Existují takové nástroje pro téměř všechny známé platformy. Jejich funkčnost značně usnadňuje ověření místa pro možnost hackování SQL injekce.
Sqlmap
Velmi výkonný skener pracující s většinou známých DBMS. Podporuje různé techniky pro implementaci SQL injection. Je schopen automaticky rozpoznat typ hash hesla a jeho prasknutí ve slovníku. K dispozici je také funkce nahrávání a nahrávání souborů ze serveru.
Instalace v prostředí Linuxu probíhá pomocí následujících příkazů:
- git klon https://github.com/sqlmapproject/sqlmap.git sqlmap-dev,
- cdsqlmap-dev /,
- ./sqlmap.py --wizard.
V systému Windows existuje možnost s příkazovým řádkem as grafickým uživatelským rozhraním.
jSQL Injection
jSQL Injection je multiplatformní nástroj pro testování použití chyby zabezpečení SQL. Napsáno v jazyce Java, takže systém musí mít nainstalovaný JRE. Dokáže zpracovat požadavky GET, POST, záhlaví, cookie. Má praktické grafické rozhraní.
Instalace tohoto softwaru je následující:
wget https://github.com/`curl -s https: //github.com/ron190/jsql-injection/releases | grep-E -o `/ron190/jsql-injection/releases/download/v[0-9]{1,2}.[0-9]{1,2}/jsql-injection-v[0-9] {1,2}. [0-9] {1,2} .jar `| head-n 1`
Běh se provádí příkazem java -jar ./jsql-injection-v*.jar
Chcete-li spustit kontrolu webu kvůli chybě SQL, musíte zadat její adresu do horního pole. Jsou odděleny pro GET a POST. Pokud je výsledek pozitivní, v levém okně se zobrazí seznam dostupných tabulek. Mohou být viděny a dozvědět se některé důvěrné informace.
Chcete-li vyhledat správní panely, použijte kartu "Správce". Používá speciální šablony pro automatické vyhledávání systémových záznamů privilegovaných uživatelů. Z nich můžete dostat pouze hash hesla. Je však k dispozici také v nástrojích programu.
Po zjištění všech zranitelných míst a podávání potřebných dotazů vám nástroj umožní nahrát soubor na server nebo naopak jej stáhnout.
SQLi Dumper v.7
Tento nástroj je snadno použitelný nástroj pro vyhledávání a implementaci chyb zabezpečení v SQL. Vyrábí je na základě tzv. Cvičení. Jejich seznamy lze nalézt na internetu. Dorky pro SQL injection je speciální vzorec vyhledávacích dotazů. S jejich pomocí můžete najít potenciál zranitelné místo přes vyhledávač.
Nástroje pro školení
Stránka itsecgames.com má speciální sadu nástrojů, která například umožňuje ukázat, jak vytvořit injekci SQL a otestovat ji. Abyste je mohli používat, musíte je stáhnout a nainstalovat. Archiv obsahuje sadu souborů, což je struktura webu. Chcete-li jej nainstalovat, budete potřebovat stávající soubor webových serverů Apache, MySQL a PHP.
Po rozbalení archivu do složky webového serveru je nutné jít na adresu zadanou při instalaci tohoto softwarového produktu. Otevře se stránka s registrací uživatele. Zde je třeba zadat vaše údaje a kliknout na "Vytvořit". Převedením uživatele do nového okna vás vyzve k výběru jedné z možností testu. Mezi nimi jsou obě popsané injekce a mnoho dalších testovacích úkolů.
Stojí za to zvážit příklad SQL injection type GET / Search. Zde jej musíte vybrat a stiskněte tlačítko "Hack". Než se uživatel objeví vyhledávací řetězec a imitace určitého webu s filmy. Dlouho můžete procházet filmy. Existuje však pouze 10. Například se můžete pokusit zadat Iron Man. Objeví se film, což znamená, že stránky fungují a jsou zde tabulky. Nyní je třeba zkontrolovat, zda skript filtruje speciální znaky, zejména uvozovky. Chcete-li to provést, přidejte `` do řádku adresy. A musíte to udělat po titulu filmu. Stránky vrátí chybu. Chyba: Ve vašem SQL došlo k chybě, která říká, že znaky jsou stále zpracovávány špatně. Takže se můžete pokusit nahradit svou žádost. Ale musíte nejprve vypočítat počet polí. Používá se pro tuto objednávku ze strany, která je zavedena po uvozovek: https://testsites.com/sqli_1.php?title=Iron+Man ‚objednávky 2 --action = vyhledávání.
Tento příkaz jednoduše zobrazuje informace o filmu, tj. Počet polí je větší než 2. Dvoulůžkový pomlka říká serveru, že zbývající požadavky by měly být vyřazeny. Teď se musíme seřadit a nahradit všechny velké hodnoty, dokud se nezobrazí chyba. Nakonec se ukázalo, že políčka bude 7.
Nyní je čas získat něco užitečného z databáze. Mírně modifikovat požadavek do adresního řádku, přinášet to do formy: https://testsites.com/sqli_1.php?title=Iron+Man ‚union zvolit 1, databáze (), uživatele (), 4, heslo, 6, 7 od uživatelů --action = search. V důsledku jeho spuštění se zobrazí řádky s hesly, které lze jednoduše přeměnit na srozumitelné znaky pomocí jedné z online služeb. Trochu nafouknutí a vyzvednutí jména pole s přihlášením, můžete získat přístup k záznamům někdo jiný, například správce webu.
Existuje mnoho typů injekcí v produktu, na kterých můžete trénovat. Je třeba připomenout, že uplatnění těchto dovedností v síti, na reálných místech, se může ukázat jako trestné.
Injekce a PHP
Zpravidla je kód PHP zodpovědný za nezbytné zpracování požadavků pocházejících od uživatele. Proto je na této úrovni nutné vytvořit ochranu proti SQL injekci v PHP.
Za prvé, stojí za to dát několik jednoduchých doporučení, na základě kterých je třeba to udělat.
- Data musí být vždy zpracována předtím, než budou v databázi umístěna. To lze provést buď pomocí existujících výrazů nebo ručním uspořádáním dotazů. Také zde stojí za to zvážit, že číselné hodnoty jsou převedeny na požadovaný typ;
- Vyhněte se požadavku na vznik různých řídících struktur.
Nyní trochu o pravidlech dotazování v MySQL k ochraně před SQL injekcemi.
Při psaní výrazů pro dotaz je důležité oddělit data od klíčových slov SQL.
- SELECT * FROM tabulka WHERE name = Zerg.
V této konstrukci může systém myslet, že Zerg je název pole, takže je musíte uzavřít do uvozovek.
- SELECT * FROM tabulka WHERE name = `Zerg`.
Existují však situace, kdy hodnota samotná obsahuje uvozovky.
- SELECT * FROM tabulka WHERE name = `Cote d`Ivoire`.
Zde je zpracována pouze část kočky a zbytek může být vnímán jako tým, který samozřejmě není. Proto dojde k chybě. Takže musíte tyto údaje zobrazit. Chcete-li to provést, použijte zpětné lomítko- .
- SELECT * FROM tabulka WHERE name = `cat-e` Ivory. `
Všechno výše uvedené platí pro řetězce. Pokud se akce vyskytne s číslem, nepotřebuje ani uvozovky ani lomítka. Musí však nutně nutně vést k požadovanému typu údajů.
Doporučujeme, aby název pole byl uzavřen v zadní uvozovce. Tento symbol se nachází na levé straně klávesnice spolu s tilde "~". To je nutné pro MySQL přesně odlišit název pole od jeho klíčového slova.
Dynamická práce s daty
Velmi často se při získávání dat z databáze používají dynamicky generované dotazy. Například:
- SELECT * FROM tabulka WHERE number = `$ number`.
Zde je číslo $ předáno jako definice hodnoty pole. Co se stane, když se kočka D`Ivoire dostane do toho? Došlo k chybě.
Abyste se tomuto problému vyhnuli, můžete samozřejmě obsahovat "kouzelné citace" v nastaveních. Nyní však budou údaje podrobeny screeningu, pokud to bude nutné a nebude nutné. Kromě toho, pokud je kód napsán ručně, můžete se sami trochu věnovat času, abyste se sami vytvořili systém odolný proti krádeži vloupáním.
Chcete-li přidat lomítko sami, můžete použít mysql_real_escape_string.
$ number = mysql_real_escape_string (číslo $);
$ rok = mysql_real_escape_string ($ rok);
$ query = "INSERT INTO tabulka (číslo, rok, třída) HODNOTY (`$ číslo`, `$ rok`, 11)".
Ačkoli kód vzrostl v objemu, přesto bude potenciálně fungovat mnohem bezpečněji.
Zástupky
Zástupné symboly jsou originální značky, které systém uznává, že je potřeba na tomto místě nahradit speciální funkci. Například:
$ sate = $ mysqli-> prepare ("SELECT okres FROM FROM WHERE Name =?");
$ sate-> bind_param ("s", číslo $);
$ sate-> execute ();
Tato část kódu připraví šablonu dotazu, naváže číslo proměnné a spustí jej. Tento přístup umožňuje rozdělit zpracování požadavku a jeho implementaci. Tím se můžete chránit před použitím injekčního kódu škodlivého kódu v dotazech SQL.
Co může útočník dělat
Ochrana systému je velmi důležitým faktorem, který nelze zanedbat. Samozřejmostí bude jednodušší obnovení jednoduché webové stránky vizitky. A pokud je to skvělý portál, služba, fórum? Jaké důsledky může být, pokud nemyslíte na bezpečnost?
Za prvé, hacker může narušit integritu databáze a zcela ji odstranit. A pokud administrátor webu nebo hostitel neprovedl zálohu, nebude to snadné. Navíc útočník, který narazil na jeden web, může přepnout na jiné počítače umístěné na stejném serveru.
Další je krádež osobních údajů návštěvníků. Jak je používat - vše je omezeno pouze představivostí hackera. Ale v každém případě nebude následky velmi příjemné. Zvláště pokud obsahuje finanční informace.
Také útočník může sloučit databázi sám, a pak vydělat peníze pro její návrat.
Dezinformace uživatelů jménem správce webu, který není jejich vlastní, může mít také negativní důsledky, neboť podvod je možný.
Závěr
Všechny informace v tomto článku jsou poskytovány pouze pro informační účely. Použijte je pouze potřebné k otestování vlastních projektů, pokud jsou zjištěny a opraveny chyby zabezpečení.
Pro podrobnější studii o tom, jak provádět SQL injekci, musíte začít s vlastním zkoumáním schopností a funkcí jazyka SQL. Jak jsou zadány dotazy, klíčová slova, typy dat a použití všech těchto.
Také nemůžete dělat bez porozumění fungování funkcí PHP a prvků HTML. Hlavními zranitelnými body při použití injekcí jsou adresní lišty, vyhledávací pole a různá pole. Studium funkcí PHP, způsob jejich implementace a možnosti vám pomohou pochopit, jak lze zabránit chybám.
Přítomnost mnoha již připravených softwarových nástrojů umožňuje provádět hloubkovou analýzu webu o známých zranitelných místech. Jedním z nejoblíbenějších produktů je kali linux. Jedná se o obrázek operačního systému založeného na Linuxu, který obsahuje velké množství nástrojů a programů schopných provádět komplexní analýzu webu pro sílu.
Proč potřebuji vědět, jak hackovat stránky? Je to velmi jednoduché - je to nezbytné pro získání představy o potenciálně zranitelných místech vašeho projektu nebo místa. Zvláště pokud je to nějaký online obchod se schopností platit online, kde útočník může ohrozit platební data uživatele.
Pro profesionální výzkum budou existovat služby informační bezpečnosti, které budou schopny kontrolovat lokalitu podle různých kritérií a hloubky. Od jednoduchého vkládání HTML do sociálního inženýrství a phishingu.
- Jak postavit web na internet?
- Instalace Joomla na Denveru: podrobný manuál, funkce tvorby a doporučení
- Zranitelnosti stránek. Zkontrolujte stránky. Program pro skenování webu pro zranitelnost
- MySQL je to, co a kde se používá?
- Architektura klient-server: funkce interakce
- Vytvoření databáze MySQL je součástí jakéhokoli webu
- Přehled systémů správy databáze
- Systém pro správu databází Microsoft Servers SQL
- SQL `pro čajníky `: co potřebujete vědět pro začátečníky?
- Práce s databází: jaké jsou požadavky
- Nejlepší systémy pro správu obsahu. Hodnocení CMS
- MySQL - co je to? Chyba MySQL
- MySQL - požadavek v žádosti. MySQL: příklady dotazů. Vnořené dotazy MySQL
- Chyba při připojování k databázi: důvod, oprava
- SQL dotaz je co?
- Vymazat příkaz Delete MySQL
- Jak usnadnit proces vytváření webové stránky? Nápověda vizuální editor html!
- Jak vytvořit databázi mysql
- Přístup k ukázkovým výsledkům pomocí pole načítání MySQL
- Efektivní správa místa
- Záložka záložek v prohlížeči