Co je injekce SQL?

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 jen. A začínající weboví vývojáři často používají nebezpečný a starý kód. A to vytváří spousty mezer pro vetřelce a hackery. Co používají. Jednou z nejvíce klasických zranitelností je SQL injection.

Trochu teorie

Mnoho lidí ví, že většina stránek a služeb v síti používá k ukládání databáze SQL. Jedná se o strukturovaný dotazovací jazyk, který vám umožňuje spravovat a spravovat datové sklady. Existuje mnoho různých verzí systémů správy databází Oracle, MySQL a Postgre. Bez ohledu na jméno a typ používají požadavky na údaje stejně. Právě zde leží potenciální zranitelnost. Pokud vývojář nebyl schopen správně a bezpečně zpracovat požadavek, útočník jej může použít a použít konkrétní taktiky pro přístup k databázi a odtud - a spravovat celý web.


Abyste se vyhnuli takovým situacím, musíte správně optimalizovat kód a pečlivě sledovat, jaký druh žádosti se zpracovává.

SQL Injection Check

Pro zjištění dostupnosti zranitelných míst v síti existuje spousta hotových automatizovaných softwarových systémů. Ale můžete provést jednoduchou kontrolu a ručně. Chcete-li to provést, musíte jít na některou z vyšetřovaných webů a pokusit se způsobit chybu databáze v adresním řádku. Například skript na webu může zpracovávat dotazy a ne oříznout. Například tam je some_site /index.php? Id = 25 nejjednodušší cesta -vložte po 25 nabídek a pošlete požadavek. Pokud se objevily žádné chyby, a to buď vůbec filtruje požadavky a správně zpracovány nebo zakázány v nastavení jejich uzavření. Pokud stránka byla restartována s problémy, pak je chyba zabezpečení SQL injection.


Jakmile se objeví, můžete se ho zbavit. Chcete-li tuto chybu zabezpečení implementovat, potřebujete znát trochu příkazy SQL dotazu. Jedním z nich je UNION. Kombinuje několik výsledků dotazů do jednoho. Můžete tedy vypočítat počet polí v tabulce. Příkladem prvního požadavku, je:
  • nekyy_sayt /index.php Id = 25 UNION SELECT 1.
  • Ve většině případů je takový záznam musí vydat chybu?. To znamená, že počet polí není roven 1. Proto výběru možností z 1 nebo více, mohou stanovit jejich přesné číslo:
  • nekyy_sayt /index.php Id = 25 UNION SELECT 123456.
  • To znamená, že pokud dojde k chybě? přestane se objevovat, proto je odhadnut počet polí. Existuje také alternativní řešení tohoto problému. Například, když se velký počet polí - 3060 nebo 100. Tento příkaz GROUP BY. To skupiny výsledky dotazu z jakýchkoli důvodů, id:
  • nekyy_sayt /index.php Id = 25 GROUP BY 5.
  • Pokud nebyl přijat chyba, pak více polí než 5. To znamená, nahrazením? možnosti s poměrně širokým rozsahem, můžete vypočítat, kolik skutečně jsou. Jedná se o příklad SQL injekce 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 k neoprávněnému přístupu je zvláštní článek trestního zákoníku.

    Hlavní typy vstřikování

    Implementace zranitelných míst pomocí SQL injection může být několik možností. Následují nejpopulárnější techniky:
  • UNION SQL injection injection. Jednoduchý příklad tohoto typu byl již zvážen výše. Implementuje se kvůli chybě při ověřování přijímaných dat, která není filtrována.
  • Injekce SQL založená na chybách. Jak vyplývá z názvu, tento typ také používá chyby vysláním výrazů, které jsou syntakticky nesprávné. Pak je zachycena záhlaví odpovědí, která analyzuje, které je možné strávit následnou injekcí SQL.
  • Stažené dotazy SQL Injection. Tato chyba zabezpečení je určena spuštěním po sobě následujících dotazů. Je charakterizován spojením na konci znaku ;; ". Tento přístup je nejčastěji implementován pro přístup k implementaci dat pro čtení a zápis nebo k ovládání funkcí operačního systému, pokud to dovolují oprávnění.
  • Vyhledávací software pro chyby SQL

    K dispozici pro SQL injekci, programy obvykle mají dvě složky: skenování stránek pro potenciální zranitelnosti a jejich použití pro přístup k datům. Existují takové nástroje pro prakticky všechny známé platformy. Jejich funkčnost usnadňuje testování webu pro možnosti SQL injection.

    Sqlmap

    Velmi výkonný skener, který pracuje s většinou známých DBMS. Podporuje různé metody implementace SQL injection. Má schopnost automaticky rozpoznat typ hashového hesla a jeho hackování ve slovníku. K dispozici je také funkce pro načítání a vykládání souborů ze serveru.
    Instalace do prostředíLinux se provádí pomocí:
  • git clone https://github.com/sqlmapproject/sqlmap.git sqlmap-dev,
  • cdsqlmap-dev /,
  • ./sqlmap.py - průvodce
  • V systému Windows existuje volba příkazového řádku a grafické uživatelské rozhraní.

    jSQL injekce

    jSQL Vstřikovací - multiplatformní nástroj pro testování použití SQL zranitelnosti. Napsáno na Java, proto musí být JRE instalován v systému. Dokáže zpracovat dotazy GET, POST, hlavičky a soubory cookie. Má praktické grafické rozhraní.
    Instalace softwarového systému je tak-: wget https://github.com/`curl -s https: //github.com/ron190/jsql-injection/releases | grep-E -o ‚/ron190/jsql-injection/releases/download/v[0-9]{12}.[0-9]{12}/jsql-injection-v[0-9]{12}. [0-9] {12} .jar '| hlava-n 1`
    Zahájení provádí pomocí java-jar ./jsql-injection-v*.jar Spuštění kontrolu zranitelnosti SQL-site, musíte zadat adresu v horním poli. Jsou oddělené pro GET a POST. S pozitivním výsledkem se v levém okně zobrazí seznam dostupných tabulek. Můžete je zobrazit a zjistit některé důvěrné informace. Chcete-li vyhledat správní panely, použijte kartu Správce. Používá speciální šablony k automatickému vyhledávání systémových záznamů privilegovaných uživatelů. Z nich můžete získat pouze heslo hash. Ale je v nástrojích programu.
    Po zjištění všech potřebných vstřikovacích slabá místa a žádosti, nástroj vyplní souborový server, nebo alternativně si jej stáhnout odtud.

    SQLi Dumper v.7

    Tento program je snadno použitelný nástroj pro vyhledávání a implementaci zranitelných místSQL Vyrábí je na základě tzv. Dorků. Jejich seznam lze nalézt na internetu. SQL injekční kachny jsou speciální šablony pro vyhledávání. S jejich pomocí můžete najít potenciálně zranitelnou lokalitu prostřednictvím libovolného vyhledávače.

    Nástroje výcviku

    Místo itsecgames.com má speciální nástrojovou sadu, která vám umožní uvést příklad toho, jak vytvořit injekci SQL a otestovat ji. Abyste je mohli používat, je třeba je stáhnout a nainstalovat. Archiv obsahuje soubor souborů, který představuje strukturu webu. Chcete-li jej nainstalovat, budete potřebovat nastavení webového serveru Apache, MySQL a PHP.
    Po rozbalení archivu do složky webového serveru musíte při instalaci tohoto softwarového produktu přejít na adresu zadanou. Otevře se stránka registrace uživatele. Zde je nutné zadat údaje a kliknout na tlačítko "Vytvořit". Když přesunete uživatele do nového okna, systém vám navrhne vybrat jednu z možností testování. Mezi nimi jsou obě popsané injekce a mnoho dalších testovacích úkolů. Stojí za to zvážit příklad SQL injection jako GET /Search. Zde je třeba jej vybrat a kliknout na tlačítko "Hack". Uživatel uvidí vyhledávací řetězec a simuluje stránky s filmy. Můžete sledovat filmy po dlouhou dobu. Ale oni jsou jen 10. Například, můžete se pokusit vstoupit Iron Man. Zobrazí se film, což znamená, že stránky fungují a v něm jsou tabulky. Nyní je nutné zkontrolovat, zda skript bude filtrovat speciální znaky, zejména citace. Chcete-li to provést, musíte přidat do pole adresy ''. Navíc je nutné to udělat po názvu filmu. Stránky vydaly chybu Chyba: Došlo k chyběsyntaxe SQL; Přečtěte si manuál, který odpovídá vaší verzi MySQL server o právo Syntaxe v blízkosti ‚%„at line 1 naznačuje, že postavy stále správně zacházeno. Takže můžete se pokusit nahradit váš požadavek. Ale musíme nejprve vypočítat počet polí . používá objednávku, který je zaveden po uvozovek:. http://testsites.com/sqli_1.php?title=Iron+Man ‚ORDER bY - 2 & amp; action = hledání tento příkaz zobrazí informace o filmu, který 2. počet polí je více než dvojnásobek pomlčkou informuje server, že další požadavky musí být zamítnut. teď budete muset projít, čímž všechny velkou hodnotu jako pí p, až dojde k chybě. Nakonec se ukáže, že pole bude 7.
    Teď je čas získat něco užitečného ze základny. Budeme muset změnit trochu v adresním řádku a vedl ji k tomuto druhu: http://testsites.com/sqli_1.php?title=Iron+Man ‚sjednocovací vybrat jednu databázi (), uživatele (), 4password, 67 od uživatelů - & amp; action = search V důsledku jeho provedení budou zobrazeny řádky s hesly, které lze snadno převést na srozumitelné znaky pomocí jedné z online služeb. Trochu zakřivený a vybíráme jméno pole s přihlašovacími údaji, můžete získat přístup k jinému účtu, například správci stránek. Produkt má různé druhy injekcí, které lze praktikovat. Je třeba připomenout, že používání těchto dovedností v síti, na reálných místech může být trestné.

    stroje a PHP

    Zpravidla PHP kódu odpovědné za nezbytné zpracování požadavků přijatých od uživatele. Proto musíte na této úrovni vytvořit ochranu proti SQL injection v PHP. Za prvé, stojí za to dát několik jednoduchých doporučenína základě kterých je to nezbytné.
  • Data musí být vždy zpracována před objektem v základně. Může být implementován buď pomocí existujících výrazů, nebo ručním uspořádáním požadavků. I zde bychom měli mít na paměti, že číselné hodnoty jsou převedeny na požadovaný typ;
  • Vyhněte se požadování vzhledu různých struktur řízení.
  • Teď trochu o pravidlech pro dotazování MySQL pro SQL injekční ochranu. Při vytváření výrazů pro dotaz je důležité oddělit data od klíčových slov SQL.
  • SELECT * FROM tabulka WHERE name = Zerg.
  • V tomto návrhu může systém myslet, že Zerg je název pole, takže je musíte uvádět v uvozovkách.
  • SELECT * FROM tabulka WHERE name = 'Zerg'.
  • Existují však situace, kdy samotná hodnota obsahuje tlapy.
  • SELECT * FROM tabulka WHERE name = 'cat-d'avour'.
  • Zde bude zpracována pouze část kočky a zbytek může být vnímán jako tým, což samozřejmě není. Takže tam bude chyba. Takže je třeba chránit tento druh dat. Používá se zpětná lomítka.
  • SELECT * FROM tabulka WHERE name = 'cat-d'avour'.
  • Všechny výše uvedené platí pro řetězce. Pokud dojde k nějaké akci s číslem, nepotřebuje žádnou nohu ani lomítko. Musí však být nutně nuceni vést k nezbytnému typu údajů. Doporučujeme, aby byl název pole zařazen do recipročních uvozovek. Tento znak je umístěn na levé straně klávesnice, spolu se značkou tilde "~". To je nutné, aby MySQL přesně rozlišoval název pole od jeho klíčového slova.

    Dynamické zpracování dat

    Velmi často se dotazy, které jsou generovány dynamicky, používají k získání libovolných databázových dat. Například:
  • SELECT * FROM tabulka WHERE number = '$ number'.
  • Zde je proměnná číslo $ předána jako hodnota pole. Co se stane, pokud dojde na cat-d'vivar? Chyba Vyhněte se tomuto potížím, samozřejmě můžete v nastavení zahrnout "magické citace". Ale nyní budou data chráněna tam, kde je to nutné a není nutné. Kromě toho, pokud je kód napsán ručně, pak můžete strávit trochu víc času se snaží vytvořit systém odolný proti hack sám. Pomocí mysql_real_escape_string můžete přidat lomítko. $ 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 ve velikosti, přesto bude potenciálně fungovat mnohem bezpečněji.

    Záložky

    Zástupné znaky jsou zvláštní znaky, podle kterých se systém dozví, že na tomto místě musí být nahrazena zvláštní funkce. Například: $ sate = $ mysqli-> prepare ("SELECT District Number FROM WHERE Name =?"); $ sate- & gt; bind_param ("s", $ číslo); $ sate- & gt; spustit (); Tento úryvek kódu připraví šablonu dotazu, naváže číslo proměnné a spustí jej. Tento přístup umožňuje oddělit zpracování požadavku a jeho implementaci. Proto můžete být chráněni před použitím dotazy SQL o škodlivém kódu.

    Co útočník může dělat

    Ochrana systému je velmi důležitým faktorem, který nelze zanedbat. Samozřejmě bude jednodušší znovu vytvořit jednoduchou vizitku. A pokud je to skvělý portál, služba, fórum? Jaké mohou být důsledky, pokud nemyslíte na bezpečnost? Za prvé, hacker můženarušit integritu databáze a úplně ji odstranit. A pokud administrátor webu nebo hostující neposkytl zálohu, nebudete spokojeni. Navíc útočník, který porušil jeden web, může přepnout na jiné hostitele na stejném serveru. Následující je krádež osobních údajů návštěvníků. Jak je používat - vše zde je omezeno pouze představivostí hackera. Ale v každém případě nebude následky tak příjemné. Zvláště pokud existují finanční informace. Také útočník může sloučit základnu a poté požadovat peníze za její návrat. Dezinformace uživatelů jménem správce webu, nemají žádnou osobu, mohou mít také negativní důsledky jako možný podvod.

    Závěr

    Všechny informace v tomto článku jsou poskytovány pouze pro informační účely. Je nutné jej použít pouze pro testování vlastních projektů při zjišťování závad a jejich odstranění. Pro podrobnější studii o tom, jak provést SQL injekci, musíte začít svůj vlastní výzkum funkcí a funkcí jazyka SQL. Jak se týkají dotazů, klíčových slov, datových typů a všech toho. Také bez pochopení funkcí prvků PHP a HTML. Mezi hlavní zranitelnosti při injekčním použití patří adresa, vyhledávací pole a různá pole. Studium funkcí PHP, jejich implementace a schopností vám umožní pochopit, jak se vyhnout chybám. Dostupnost mnoha již připravených softwarových nástrojů umožňuje provádět hlubší analýzu stránek o známých zranitelných místech. Jedním z nejoblíbenějších produktů je kali linux. Je to obrazOperační systém Linux, který obsahuje velké množství nástrojů a programů schopných komplexní analýzy síly webu. Proč potřebujete vědět, jak přerušit místo? Všechno je velmi jednoduché - je třeba mít představu o potenciálně zranitelných místech vašeho projektu nebo webu. Zvláště pokud je to internetový obchod s možností platby online, kde útočník může ohrozit podrobnosti o uživatelských platbách. Pro profesionální výzkum existují informační bezpečnostní služby budou schopny kontrolovat místo podle různých kritérií a hloubky. Od jednoduchých HTML injekcí až po sociální inženýrství a phishing.

    Související publikace