/ / Какво е SQL инжектиране?

Какво е инжектиране на SQL?

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

Малко теория

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

sql инжекция

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

Проверка на SQL инжектиране

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

Например има определен_сайт / index.php? Id = 25

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

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

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

  • some_site / index.php? id = 25 UNION SELECT 1.

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

  • some_site / index.php? id = 25 UNION SELECT 1,2,3,4,5,6.

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

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

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

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

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

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

Има няколко начина за внедряване на уязвимости чрез SQL инжектиране. По-долу са най-популярните техники:

  • UNION заявка SQL инжекция. Един прост пример от този тип вече беше обсъден по-горе. Прилага се поради грешка при проверка на входящите данни, която по никакъв начин не се филтрира.

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

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

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

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

Sqlmap

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

 sql инжекция

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

  • git clone https://github.com/sqlmapproject/sqlmap.git sqlmap-dev,
  • cdsqlmap-dev /,
  • ./sqlmap.py - съветник.

 проверете за 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] [0-9] [0-9] [0-9] [0-9] {1,2}. [0-9] {1,2} .jar "| глава-n 1`

sql инжекция хак

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

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

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

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

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

SQLi Dumper v.7

Тази програма е лесна за използванеинструмент за намиране и внедряване на уязвимости в SQL. ООН произвежда това на базата на така наречените мрачни. Можете да намерите списъци с тях в Интернет. SQL Injection Doors са специални модели на заявки за търсене. С тяхна помощ можете да намерите потенциално уязвим сайт чрез всяка търсачка.

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

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

sql инжекция php защита

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

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

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

пример за инжектиране на sql

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

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

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

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

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

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

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

Важно е да се отделят данни от ключовите думи на SQL при конструиране на изрази на заявка.

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

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

  • ИЗБЕРЕТЕ * ОТ таблицата WHERE name = "Zerg".

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

  • ИЗБЕРЕТЕ * ОТ таблицата WHERE name = "Кот д'Ивоар".

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

  • ИЗБЕРЕТЕ * ОТ таблицата WHERE name = "Кот д'Ивоар".

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

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

Работа с данни динамично

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

  • ИЗБЕРЕТЕ * ОТ таблицата КЪДЕ номер = "$ номер".

Тук променливата $ number се предава като дефиниция на стойността на полето. Какво ще се случи, ако Кот д'Ивоар падне в него?

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

Можете да използвате mysql_real_escape_string, за да добавите наклонена черта сами.

$ number = mysql_real_escape_string ($ number);

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

$ query = "INSERT INTO table (number, year, class) VALUES (" $ number "," $ year ", 11)".

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

Заместители

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

$ sate = $ mysqli-> подгответе ("ИЗБЕРЕТЕ ОКРУГ ОТ Номер КЪДЕ Име =?");

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

$ sate-> изпълнение ();

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

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

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

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

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

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

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

заключение

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

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

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

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

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

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

хареса:
0
Популярни публикации
Духовното развитие
храна
ш