muzruno.com

Какво представлява SQL инжекция?

Броят на сайтовете и страниците в мрежата непрекъснато нараства. За развитието са взети от всички, които могат. И начинаещите уеб програмисти често използват опасен и стар код. И това създава много вратички за натрапници и хакери. Освен това те използват. Една от най-класическите уязвимости е SQL инжекцията.

Малко теория

Много хора знаят, че повечето сайтове и услуги в мрежата се използват за съхраняване на SQL бази данни. Това е структуриран език за заявки, който ви позволява да управлявате и администрирате хранилища с данни. Има много различни версии на системите за управление на бази данни - Oracle, MySQL, Postgre. Независимо от името и типа, те използват заявките за данни еднакво. Тук се крие потенциалната уязвимост. Ако разработчикът не може правилно и безопасно да обработва искането, нападателят може да се възползва от това и да приложи специални тактики, за да получи достъп до базата данни и оттам до управлението на целия сайт.

sql инжекция

За да избегнете такива ситуации, трябва интелигентно да оптимизирате кода и внимателно да наблюдавате коя заявка се обработва по какъв начин.

SQL инжектиране тест

За да се установи наличието на уязвимост в мрежата, има много готови автоматизирани софтуерни системи. Но можете да направите прост тест ръчно. За да направите това, отидете на един от изследваните сайтове и опитайте да причините грешка в базата данни в адресната лента. Например, скрипт на даден сайт може да не обработва заявки и да не ги изрязва.

Например, има some_site / index.php? Id = 25

Най-лесният начин е да поставите след 25 кавички и да изпратите заявка. Ако не е възникнала грешка, тогава всички заявки се филтрират на сайта и се обработват правилно, или техният изход е деактивиран в настройките. Ако страницата се рестартира с проблеми, тогава има уязвимост за SQL инжекция.

След като бъде намерен, можете да се опитате да се отървете от него.

За да приложите тази уязвимост, трябва да знаете малко за това команди на SQL-заявки. Един от тях е СЪЮЗА. Той комбинира няколко заявки в едно. Така че можете да изчислите броя на полетата в таблицата. Пример за първата заявка изглежда така:

  • some_site / index.php? id = 25 ИЗБОР НА СЪЮЗА 1.

В повечето случаи такова вписване трябва да доведе до грешка. Това означава, че броят полета не е равен на 1. По този начин, като изберете опции от 1 и повече, можете да зададете точния им номер:

  • some_site / index.php? id = 25 ЮНИОН СЕЛЕКТ 1,2,3,4,5,6.

Тоест, когато грешката престане да се появява, това означава, че броят на полетата е познат.

Съществува и алтернативно решение на този проблем. Например, когато броят на полетата е голям - 30, 60 или 100. Това е командата GROUP BY. Той групира резултатите от заявката по някаква характеристика, например id:

  • some_site / index.php? id = 25 ГРУПА ПО 5.

Ако грешките не са получени, тогава има повече полета от 5. Така, замествайки варианти от доста широк обхват, е възможно да се изчисли колко от тях всъщност са.

Тази примерна SQL инжекция е предназначена за начинаещи, които искат да се опитат да тестват своя сайт. Важно е да запомните, че за неразрешен достъп до някой друг има статия от Наказателния кодекс.

Основните видове инжекции

Внедряването на уязвимости чрез SQL инжекция може да се извърши по няколко начина. Следват най-популярните техники:

  • СЪЮЗ заявка за SQL инжекция. Един прост пример от този тип вече е разгледан по-горе. Тя се изпълнява поради грешка при проверката на входящите данни, която по никакъв начин не е филтрирана.

  • Грешка-базирана SQL инжекция. Както предполага името, този тип също използва грешки, като изпраща изрази, които са синтактично неправилни. След това хедърът на отговорите се задържа, анализирайки кой, можете по-късно да извършите SQL инжекцията.

  • Подредени заявки SQL инжекция. Тази уязвимост се определя от изпълнението на последователни заявки. Тя се характеризира с прикачване в края на знака ";". Този подход често се осъществява, за да се осъществи достъп до данните за четене и писане или да се контролират функциите на операционната система, ако правата й позволяват.

Софтуер за търсене на SQL уязвимости

Програмите, които са достъпни за SQL инжекции, обикновено имат два компонента - сканиране на сайта за възможни уязвимости и използването им за получаване на достъп до данните. Има такива инструменти за почти всички известни платформи. Тяхната функционалност значително улеснява проверката на сайта за възможността за хакване на SQL инжекция.

Sqlmap

Много мощен скенер, който работи с повечето известни СУБД. Поддържа различни техники за внедряване на SQL инжекция. Има способността автоматично да разпознава типа хеш парола и неговата крекинг в речника. Има и функционалността на качването и качването на файлове от сървъра.

sql инжекция

Инсталирането в Linux среда се извършва с помощта на следните команди:

  • git клонинг https://github.com/sqlmapproject/sqlmap.git sqlmap-dev,
  • cdsqlmap-dev /,
  • ./sqlmap.py --wizard.

проверка за sql инжекция

За Windows има опция с командния ред и графичен потребителски интерфейс.

jSQL инжектиране

jSQL Injection е инструмент за платформа за тестване на използването на SQL уязвимости. Написано в Java, така че системата трябва да има инсталиран JRE. Могат да обработват исканията GET, POST, заглавие, "бисквитка". Има удобен графичен интерфейс.

Инсталирането на този софтуер е както следва:

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`

sql инжекция хакерство

Стартирането се извършва с командата java -jar ./jsql-injection-v*.jar

За да започнете да проверявате сайт за уязвимост на SQL, трябва да въведете адреса му в горното поле. Те са отделни за GET и за POST. Ако резултатът е положителен, в левия прозорец се показва списък с наличните таблици. Те могат да се видят и да се научат на поверителна информация.

За да търсите административни панели, използвайте раздела "Администриране". Той използва специални шаблони за автоматично търсене на системни записи на привилегировани потребители. От тях можете да получите само хеш парола. Но е достъпен и в инструментите на програмата.

как да направите sql инжекция

След като откриете всички уязвимости и инжектирате необходимите запитвания, инструментът ще ви позволи да качите файла си на сървъра или, обратно, да го изтеглите оттам.

SQLi Dumper v.7

Този инструмент е лесен за използване инструмент за търсене и внедряване на уязвимости в SQL. Произвежда го на базата на така наречените тренировки. Техните списъци могат да бъдат намерени в интернет. Dorky за SQL инжекция е специален модел на заявки за търсене. С тяхна помощ можете да намерите потенциално уязвим сайт чрез всяка търсачка.

Инструменти за обучение

Сайтът itsecgames.com има специален инструментариум, който позволява например да показва как да направите SQL инжекция и да я тествате. За да го използвате, трябва да го изтеглите и инсталирате. Архивът съдържа набор от файлове, което е структурата на сайта. За да го инсталирате, ще ви трябва съществуващия набор от уеб сървъри Apache, MySQL и PHP.

защита срещу SQL injection php

След разопаковането на архива в папката на уеб сървъра е необходимо да отидете на адреса, въведен при инсталирането на този софтуер. Ще се отвори страница с регистрация на потребителя. Тук трябва да въведете данните си и да кликнете върху "Създаване". Чрез превръщането на потребителя в нов прозорец системата ви подканва да изберете една от опциите за тестване. Сред тях има описани инжекции и много други тестове.

Струва си да разгледаме един пример за SQL инжекция тип GET / Търсене. Тук трябва да го изберете и натиснете "Hack". Преди потребителят да се появи низ за търсене и имитация на определен сайт с филми. Можете да преминете през филмите за дълго време. Но има само 10. Например, можете да опитате да влезете Iron Man. Ще се появи филм, което означава, че сайтът работи и има таблици в него. Сега трябва да проверим дали скриптът филтрира специални знаци, по-специално кавичките. За да направите това, добавете "" към адресния ред. И вие трябва да направите това след заглавието на филма. Сайтът ще върне грешка Грешка: Имате грешка в SQL, в която се казва, че героите все още се обработват погрешно. Така че можете да опитате да замените заявката си. Но първо трябва да изчислите броя на полетата. За да направите това, използвайте ред по, който се въвежда след цитати: https://testsites.com/sqli_1.php?title=Iron+Man `по 2 - action = search.



Тази команда просто показва информация за филма, т.е. броят на полетата е по-голям от 2. Двойна тире казва на сървъра, че останалите искания трябва да бъдат отхвърлени. Сега трябва да пресечем, замествайки всички големи стойности, докато се изведе грешка. В крайна сметка се оказва, че полетата ще бъдат 7.

Пример за инжектиране в SQL

Сега е време да получите нещо полезно от базата данни. Ще трябва да промените заявката малко в адресната лента, като я пренесете в тази форма: https://testsites.com/sqli_1.php?title=Iron+Man `съюз изберете 1, база данни (), user (), 4, парола, 6, 7 от потребители --action = търсене. В резултат на изпълнението му ще видите линии с хеш пароли, които лесно могат да се превърнат в разбираеми знаци, като се използва една от онлайн услугите. Малко подуване и вземане на името на полето с данни за вход, можете да получите достъп до някой друг запис, например, администратора на сайта.

Има много видове инжекции в продукта, на които можете да практикувате. Струва си да се помни, че прилагането на тези умения в мрежата, на реални обекти може да се окаже наказуемо.

Инжектиране и PHP

По правило PHP кодът е отговорен за необходимата обработка на заявките, идващи от потребителя. Ето защо на това ниво трябва да изградите защита срещу SQL инжекции в PHP.

Първо, струва си да дадете няколко прости препоръки, въз основа на които трябва да направите това.

  • Данните трябва винаги да се обработват, преди да бъдат поставени в базата данни. Това може да се извърши или чрез използване на съществуващи изрази, или чрез ръчно организиране на запитвания. Тук също си заслужава да се има предвид, че цифровите стойности се преобразуват в необходимия тип;
  • Избягвайте искането за появата на различни контролни структури.

Сега малко за правилата за заявяване в MySQL за защита срещу SQL инжекции.

Когато пишете някакви изрази за заявка, важно е да отделите данните от SQL ключовите думи.

  • SELECT * FROM таблица WHERE име = Zerg.

В тази конструкция системата може да мисли, че Zerg е името на поле, така че трябва да го прикрепите в кавички.

  • SELECT * FROM таблица WHERE name = `Zerg`.

Има обаче ситуации, в които самата стойност съдържа котировки.

  • SELECT * FROM таблица WHERE name = `Кот д`Ивоар`.

Тук само част от котката се обработва, а останалата част може да се възприема като екип, който естествено не е такъв. Ето защо възниква грешка. Така че трябва да проверите този вид данни. За да направите това, използвайте обратно наклонена черта- .

  • SELECT * FROM таблица WHERE name = `cat-e` Ivory. "

Всички горепосочени се отнасят до струните. Ако действието се случи с номер, то не се нуждае нито от котировки, нито от наклонения. Те обаче задължително задължително водят до необходимия тип данни.

Има препоръка името на полето да бъде включено в кавичките за заден ход. Този символ е от лявата страна на клавиатурата, заедно с тилда "~". Това е необходимо, за да може MySQL да разграничи точно името на полето от ключовата си дума.

Динамична работа с данни

Много често, за да се получат данни от базата данни, се използват динамично генерирани заявки. Например:

  • SELECT * FROM таблица WHERE номер = `номер на номер`.

Тук броят на $ се предава като определение на стойността на полето. Какво ще стане, ако котката-д`Ивоар се вмъкне в нея? Възникна грешка.

За да избегнете този проблем, разбира се, можете да включите "магически кавички" в настройките. Но сега данните ще бъдат проверени, когато е необходимо и не е необходимо. Освен това, ако кодът е написан ръчно, можете да прекарате малко повече време, като се опитвате сами да създадете устойчива на взлом система.

За да добавите сами, можете да използвате mysql_real_escape_string.

$ number = mysql_real_escape_string (номер на $);

$ година = mysql_real_escape_string ($ година);

$ query = "INSERT INTO таблица (брой, година, клас) VALUES (`$ номер`, `$ година`, 11)".

Въпреки че кодът е нараснал по обем, все пак потенциално ще работи много по-безопасно.

контейнери

Заместителите са оригинални маркери, чрез които системата разпознава, че на това място трябва да бъде заменена специална функция. Например:

$ sate = $ mysqli-> prepare ("SELECT Област ОТ номер WHERE Име =?");

$ sate-> bind_param ("s", $ номер);

$ sate-> execute ();

Тази секция на кода подготвя шаблона на заявката, след което обвързва променливия номер и го изпълнява. Този подход ви позволява да разделите обработката на заявката и нейното изпълнение. По този начин можете да се предпазите от използването на злонамерен код за инжектиране в SQL заявки.

Какво може да направи нападател

Защитата на системата е много важен фактор, който не може да бъде пренебрегнат. Разбира се, обикновената уеб-визитка ще бъде по-лесна за възстановяване. И ако това е страхотен портал, услуга, форум? Какви последствия може да има, ако не мислите за сигурността?

Първо, хакерът може да наруши целостта на базата данни и да я премахне изцяло. И ако администраторът или домакинът на сайта не направи резервно копие, то няма да е лесно. Освен това нападателят, който е проникнал в един сайт, може да превключи на други, разположени на същия сървър.

Следва кражбата на личните данни на посетителите. Как да ги използваме - всичко е ограничено само от въображението на хакера. Но във всеки случай последствията няма да бъдат много приятни. Особено ако съдържаше финансова информация.

Също така, нападателят може да слее самата база данни, а след това изнудва пари за връщането си.

Дезинформацията на потребителите от името на администратора на сайта, която не е собствена, също може да има отрицателни последици, тъй като е възможна измама.

заключение

Цялата информация в тази статия е предоставена само за информационни цели. Използвайте го само, за да тествате собствените си проекти, когато уязвимости се открият и коригират.

За по-задълбочено проучване на това, как да изпълните SQL инжекция, трябва да започнете с действително проучване на възможностите и функциите на SQL езика. Как се правят запитвания, ключови думи, типове данни и приложението на всичко това.

Също така не можете да правите без да разберете как функционират PHP функциите и HTML елементите. Основните уязвими точки за използване на инжекции са адресната лента, търсенето и различните полета. Изучаването на функциите на PHP, начина, по който те се изпълняват и възможностите ще ви помогнат да разберете как могат да бъдат избегнати грешките.

Наличието на много готови софтуерни инструменти ви позволява да извършите задълбочен анализ на сайта за известни уязвимости. Един от най-популярните продукти е kali linux. Това е образ на базирана на Linux операционна система, която съдържа голям брой комунални услуги и програми, способни да извършват цялостен анализ на сайта за силата.

Защо трябва да знам как да хакна сайта? Това е много просто - това е необходимо, за да имате представа за потенциално уязвимите места на вашия проект или сайт. Особено, ако това е някакъв онлайн магазин с възможност за плащане онлайн, където данните за плащане на потребителя могат да бъдат компрометирани от нападателя.

За професионални изследвания, има информационна сигурност, ще могат да проверяват сайта според различни критерии и дълбочина. От обикновена HTML инжекция до социално инженерство и фишинг.

Споделяне в социалните мрежи:

сроден