Броят на сайтовете и страниците в интернет непрекъснато се увеличава. За развитието са взети от всеки, който може само. И начинаещите уеб разработчици често използват опасния и стар код. И това създава много вратички за натрапници и хакери. Какво използват. Една от най-класическите уязвимости е SQL инжекцията.
Малко теория
Проверка на SQL инжекции
След като се открие, можете да се опитате да се отървете от него. За да приложите тази уязвимост, трябва да знаете малко за командите за SQL-заявки. Един от тях е UNION. Той комбинира множество резултати от заявки в една. Така можете да изчислите броя на полетата в таблицата. Примерът на първата заявка изглежда така:
Основни видове инжектиране
Софтуер за търсене на уязвимости SQL
Sqlmap
jSQL Injection
Инсталирането на този софтуер е както следва: 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 '| глава-1 1
След намирането на всички уязвимости и инжектирането на необходимите заявки, помощната програма ще попълни файла на сървъра или, напротив, ще го изтегли от там.
Тази програма е лесен за използване инструмент за намиране и прилагане на уязвимости вSQL. Произвежда се въз основа на т. Нар. Dorks. Списъкът им може да бъде намерен в интернет. SQL инжекционните патици са специални шаблони за търсене. С тяхна помощ можете да намерите потенциално уязвимо място чрез всяка търсачка.
Сайтът на itsecgames.com има специален набор от инструменти, който ви позволява да вземете пример за това как да направите SQL инжекция и да го тествате. За да я използвате, тя трябва да бъде изтеглена и инсталирана. Архивът съдържа набор от файлове, който представлява структурата на сайта. За да я инсталирате, ще ви е необходима настройка на Apache, MySQL и PHP уеб сървър.
След като разопаковате архива в папката на уеб сървъра, трябва да отидете на адреса, въведен при инсталирането на този софтуер. Отваря се страницата за регистрация на потребителя. Тук трябва да въведете данните си и да кликнете върху "Създаване". Когато преместите потребителя в нов прозорец, системата ще ви предложи да изберете една от опциите за тестване. Сред тях са както описаните инжекции, така и много други тестови задачи. Струва си да обмислим пример за инжектиране на SQL като GET /Search. Тук трябва да го изберете и да кликнете върху "Рязка рана". Потребителят ще види низ за търсене и симулира сайт с филми. Можете да гледате филми за дълго време. Но те са само на 10. Например, можете да опитате да влезете в Iron Man. Ще бъде показан филм, което означава, че сайтът работи и в него има таблици. Сега е необходимо да проверите дали скриптът ще филтрира специалните символи, по-специално кавичките. За да направите това, трябва да добавите „“ към адресната лента. “ Освен това е необходимо да направите това след името на филма. Сайтът ще издаде грешка Грешка: Имате грешка вси синтаксиса на SQL; проверете ръководството, което съответства на версията на вашия MySQL сървър за правилния синтаксис, който да използвате в близост до '%' в ред 1, което показва, че знаците все още са обработени неправилно. Това се прави чрез поръчка по, която се въвежда след офертата: http://testsites.com/sqli_1.php?title=Iron+Man 'поръчка от 2 - & amp; action = search. броят на полетата е по-голям от 2. Двойната тире показва на сървъра, че другите заявки трябва да бъдат отхвърлени.Сега ще трябва да преминем, замествайки всички големи стойности за тези p p, докато има грешка. В крайна сметка се оказва, че полетата ще бъдат 7.
Сега е моментът да получите нещо полезно от базата. Ще трябва да промените малко от заявката в адресната лента, като я докарате до следния вид: & amp; действие = търсене В резултат на неговото изпълнение ще бъдат показани линии с хеширани пароли, които могат лесно да бъдат преобразувани в разбираеми символи чрез една от онлайн услугите. Малко криво и бране на името на полето с вход, можете да получите достъп до друга сметка, например, администратора на сайта. Продуктът има различни видове инжекции, които могат да се практикуват. Струва си да се припомни, че използването на тези умения в мрежата, на реални сайтове може да бъде престъпно.
Обикновено това е PHP код и е отговорен за необходимата обработка на заявки, идващи от потребителя. Затова на това ниво трябва да изградите защита от SQL инжектиране в PHP. Като начало си струва да се дадат няколко прости препоръкиосновата на която е необходимо.Данните трябва винаги да се обработват преди помещенията в базата. Тя може да бъде реализирана или чрез използване на съществуващи изрази, или чрез организиране на заявки ръчно. Тук също трябва да се има предвид, че числовите стойности се превръщат в необходимия тип; Да се избягва искане за появата на различни структури за контрол. Сега малко за правилата за запитване на MySQL за SQL инжекционна защита. При съставянето на изрази за заявка е важно да се разделят данните от ключовите думи SQL.SELECT * FROM таблица WHERE име = Zerg. В този дизайн системата може да мисли, че Зерг е името на поле, така че трябва да го поставите в кавички.SELECT * FROM таблица WHERE име = 'Zerg'. Съществуват обаче ситуации, в които самата стойност съдържа лапите.SELECT * FROM таблица WHERE име = 'cat-d'avour'. Само част от котката ще бъде обработена тук, а останалата част може да се възприеме като екип, който, разбира се, не е такъв. Така че ще има грешка. Така че е необходимо да се предпази този вид данни. Това използва обратна наклонена черта.SELECT * FROM таблица WHERE име = 'cat-d'avour'. Всичко това важи за струните. Ако се случи действие с число, то тогава няма нужда от крак или наклонена черта. Те обаче трябва задължително да бъдат принудени да водят до необходимия тип данни. Има препоръка името на полето да бъде затворено в реципрочните котировки. Този символ е от лявата страна на клавиатурата, заедно със знака за тилда "~". Това е необходимо, за да може MySQL точно да различи името на полето от неговата ключова дума.
Много често запитванията, генерирани динамично, се използват за получаване на данни от базата данни. Например:SELECT * FROM таблица WHERE номер = '$ number'. Тук променливата $ number се предава като стойност на полето. Какво ще се случи, ако удари котката-d'ivar? Грешка. Избягвайте този проблем, разбира се, можете да включите "магически цитати" в настройките. Но сега данните ще бъдат защитени, където е необходимо и не е необходимо. Освен това, ако кодът е написан ръчно, можете да прекарате малко повече време, опитвайки се да създадете система, устойчива на самия хакер. Можете да използвате mysql_real_escape_string, за да добавите наклонена черта. $ number = mysql_real_escape_string ($ number); $ year = mysql_real_escape_string ($ year); $ query = "INSERT INTO таблица (номер, година, клас) VALUES ('$ number', '$ year', 11)". Въпреки че кодексът е нараснал, все пак, потенциално той ще работи много по-безопасно.
Местата за задържане са особени маркери, според които системата научава, че за това място трябва да се замени специална функция. Например: $ sate = $ mysqli-> подготовка ("SELECT District Number FROM WHERE Name =?"); $ sate- & gt; bind_param ("s", $ number); $ sate- & gt; execute (); Този кодов фрагмент подготвя шаблона за заявка, след това свързва номера на променливата и го изпълнява. Този подход ви позволява да отделите обработването на заявката и нейното изпълнение. По този начин можете да бъдете защитени от използването на SQL заявки за злонамерен код.
Системата за защита е много важен фактор, който не може да бъде пренебрегнат. Разбира се, простият сайт-визитка ще бъде по-лесен за възстановяване. И ако това е страхотен портал, услуга, форум? Какви могат да бъдат последствията, ако не мислите за сигурността? Първо, хакерът можеда наруши целостта на базата данни и да я премахне изцяло. И ако администраторът на сайта или хостера не направи резервно копие, тогава няма да сте щастливи. В допълнение, нападател, който е разбил един сайт, може да превключи на други хостове на същия сървър. Следното е кражба на лични данни на посетителите. Как да ги използваме - всичко тук е ограничено само от въображението на хакера. Но във всеки случай последствията няма да са толкова приятни. Особено ако имаше финансова информация. Също така, нападателят може да слее базата и след това да поиска пари за връщането си. Дезинформация на потребителите от името на администратора на сайта, те нямат лице, също могат да имат отрицателни последици, като възможна измама.
Цялата информация в тази статия е предоставена само за информационни цели. Необходимо е да се използва само за тестване на собствени проекти при откриване на дефекти и тяхното отстраняване. За по-задълбочено проучване на начина на провеждане на SQL инжекция, трябва да започнете собствено проучване на характеристиките и характеристиките на SQL езика. Прилагат се заявките, ключовите думи, типовете данни и всичко това. Също така, без разбиране на функциите на PHP и HTML елементи. Основните слабости при използването на инжекции са адресната лента, търсенето и различните области. Проучването на функциите на PHP, начина, по който те се изпълняват и възможностите ще ви позволи да разберете как да избегнете грешки. Наличието на много готови софтуерни инструменти ви позволява да извършите задълбочен анализ на сайта за известни уязвимости. Един от най-популярните продукти е kali linux. Това е образLinux операционна система, която съдържа голям брой комунални услуги и програми, способни на цялостен анализ на силата на сайта. Защо трябва да знаете как да разбиете сайт? Всичко е много просто - необходимо е да имате представа за потенциално уязвимите места на вашия проект или сайт. Особено ако това е онлайн магазин с опция за онлайн плащане, където данните за плащане от страна на потребителя могат да бъдат компрометирани от атакуващия. За професионални изследвания има услуги за информационна сигурност, които ще могат да проверяват обекта по различни критерии и дълбочина. От обикновени HTML инжекции до социално инженерство и фишинг.