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

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

Малко теория

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


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

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

За да се определи наличието на уязвимости в мрежата, има много готови автоматизирани софтуерни системи. Но можете да извършите проста проверка и ръчно. За да направите това, трябва да отидете на един от разследваните сайтове и да опитате да предизвикате грешка в базата данни в адресната лента. Например, скрипт на сайт може да обработва заявки и да не ги изрязва. Например най-лесният начин е some_site /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 123456.
  • Тоест, когато грешката ще спре да се появява, следователно броят на полетата се предполага. Съществува и алтернативно решение на този проблем. Например, когато броят на полетата е голям - 3060 или 100. Това е командата GROUP BY. Резултатите от заявката се групират с всеки знак, например: id:
  • some_site /index.php? Id = 25 GROUP BY 5.
  • Ако грешки не са получени, полетата са по-големи от 5. По този начин, замествайки опции с доста широка гама, можете да изчислите колко наистина са. Това е пример за SQL инжекция за начинаещи, които искат да се опитат да тестват сайта си. Важно е да се помни, че неразрешеният достъп до някой друг е член на Наказателния кодекс.

    Основни видове инжектиране

    Прилагането на уязвимости с помощта на SQL инжекция може да има няколко опции. По-долу са най-популярните техники:
  • инжектиране на заявки за UNION SQL. Един прост пример от този тип вече е разгледан по-горе. Той се изпълнява поради грешка в проверката на пристигащите данни, която не се филтрира.
  • SQL инжекция на базата на грешки. Както е ясно от заглавието, този тип също използва грешки, като изпраща изрази, които са синтактично неправилни. След това има прихващане на заглавията на отговорите, като се анализира кои са възможните последващи SQL инжекции.
  • Заплащани SQL заявки за инжектиране. Тази уязвимост се определя от изпълнението на последователни заявки. Характеризира се с присъединяване в края на знака ;; Този подход най-често се прилага за достъп до реализирането на данни за четене и запис, или за контрол на функциите на операционната система, ако им позволяват привилегии.
  • Софтуер за търсене на уязвимости SQL

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

    Sqlmap

    Много мощен скенер, който работи с повечето от познатите СУБД. Поддържа различни методи за прилагане на SQL инжекция. Има възможност за автоматично разпознаване на вида на хеш паролата и неговото хакване в речника. Има и функционалност за зареждане и разтоварване на файлове от сървъра.
    Инсталиране в околната средаLinux се изпълнява с помощта на командите:
  • git clone https://github.com/sqlmapproject/sqlmap.git sqlmap-dev,
  • cdsqlmap-dev /,
  • . --wizard.
  • За Windows има опция за команден ред и графичен потребителски интерфейс.

    jSQL Injection

    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]{12}.[0-9]{12}/jsql-injection-v[0-9]{12}. [0-9] {12} .jar '| глава-1 1
    Стартиране с java -jar ./jsql-injection-v*.jar За да стартирате тест на сайт за SQL уязвимост, трябва да въведете неговия адрес в най-горното поле. Те са отделни за GET и POST. При положителен резултат в левия прозорец ще се появи списък с налични таблици. Можете да ги прегледате и да откриете поверителна информация. За да търсите административни панели, използвайте раздела „Администраторска страница“. Той използва специални шаблони за автоматично търсене на системни записи на привилегировани потребители. От тях можете да получите само хеш за пароли. Но той е в инструментите на програмата.
    След намирането на всички уязвимости и инжектирането на необходимите заявки, помощната програма ще попълни файла на сървъра или, напротив, ще го изтегли от там.

    SQLi Dumper v.7

    Тази програма е лесен за използване инструмент за намиране и прилагане на уязвимости в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

    Обикновено това е 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 инжекции до социално инженерство и фишинг.

    Свързани публикации