Инструкция за SQL инжектиране: Научете с пример

Съдържание:

Anonim

Данните са един от най-важните компоненти на информационните системи. Уеб приложенията, базирани на бази данни, се използват от организацията за получаване на данни от клиенти. SQL е съкращението за Structured Query Language. Използва се за извличане и манипулиране на данни в базата данни.

Какво е SQL инжекция?

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

В този урок ще научите техниките за SQL Injection и как можете да защитите уеб приложенията от подобни атаки.

  • Как работи SQL Injection
  • Хакерска активност: SQL инжектиране на уеб приложение
  • Други типове атаки на SQL Injection
  • Инструменти за автоматизация за SQL инжектиране
  • Как да се предпазим от SQL инжекционни атаки
  • Хакерска активност: Използвайте Havji за SQL Injection

Как работи SQL Injection

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

Нека разгледаме просто уеб приложение с формуляр за вход. Кодът за HTML формата е показан по-долу.

ТУК,

  • Горният формуляр приема имейл адреса и паролата след това ги изпраща във PHP файл с име index.php.
  • Той има опция за съхраняване на сесията за вход в бисквитка. Изведохме това от квадратчето Remember_me. Той използва метода на публикуване за подаване на данни. Това означава, че стойностите не се показват в URL адреса.

Да предположим, че изявлението в бекенда за проверка на потребителския идентификатор е както следва

ИЗБЕРЕТЕ * ОТ потребители КЪДЕ имейл = $ _POST ['имейл'] И парола = md5 ($ _ POST ['парола']);

ТУК,

  • Горното изявление използва стойностите на масива $ _POST [] директно, без да ги дезинфекцира.
  • Паролата се кодира с помощта на MD5 алгоритъм.

Ще илюстрираме SQL инжекционна атака с помощта на sqlfiddle. Отворете URL адреса http://sqlfiddle.com/ във вашия уеб браузър. Ще получите следния прозорец.

Забележка: ще трябва да напишете SQL изразите

Стъпка 1) Въведете този код в левия прозорец

CREATE TABLE `users` (`id` INT NOT NULL AUTO_INCREMENT,`email` VARCHAR(45) NULL,`password` VARCHAR(45) NULL,PRIMARY KEY (`id`));insert into users (email,password) values ('This email address is being protected from spambots. You need JavaScript enabled to view it.',md5('abc'));

Стъпка 2) Щракнете върху Изграждане на схема

Стъпка 3) Въведете този код в десния прозорец

изберете * от потребителите;

Стъпка 4) Щракнете върху Изпълнение на SQL. Ще видите следния резултат

Да предположим, потребителски консумативи Този имейл адрес е защитен от спам ботове. Трябва да имате активиран JavaScript, за да го видите. и 1234 като парола. Операторът, който трябва да бъде изпълнен срещу базата данни, ще бъде

SELECT * FROM потребители WHERE email = ' Този имейл адрес е защитен от спам ботове. Трябва да имате активиран JavaScript, за да го видите. ' И парола = md5 ('1234');

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

Този имейл адрес е защитен от спам ботове. Трябва да имате активиран JavaScript, за да го видите. ' ИЛИ 1 = 1 ГРАНИЦА 1 - ']

xxx за паролата.

Генерираният динамичен оператор ще бъде както следва.

SELECT * FROM потребители WHERE email = ' Този имейл адрес е защитен от спам ботове. Трябва да имате активиран JavaScript, за да го видите. ' ИЛИ 1 = 1 ГРАНИЦА 1 - '] И парола = md5 (' 1234 ');

ТУК,

  • Този имейл адрес е защитен от спам ботове. Трябва да имате активиран JavaScript, за да го видите. завършва с единична кавичка, която допълва низовата кавичка
  • ИЛИ 1 = 1 ГРАНИЦА 1 е условие, което винаги ще бъде вярно и ограничава върнатите резултати само до един запис.
  • - „И ... е SQL коментар, който премахва частта за паролата.

Копирайте горния SQL израз и го поставете в SQL FiddleRun SQL текстово поле, както е показано по-долу

Хакерска активност: SQL инжектиране на уеб приложение

Имаме просто уеб приложение на адрес http://www.techpanda.org/, което е уязвимо за SQL Injection атаки само за демонстрационни цели. Кодът на HTML формуляра по-горе е взет от страницата за вход. Приложението осигурява основна защита като дезинфекция на имейл полето. Това означава, че горният ни код не може да се използва за заобикаляне на данните за вход.

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

Да предположим, че нападателят предоставя следния вход

  • Стъпка 1: Въведете Този имейл адрес е защитен от спам ботове. Трябва да имате активиран JavaScript, за да го видите. като имейл адреса
  • Стъпка 2: Въведете xxx ') ИЛИ 1 = 1 -]
  • Щракнете върху бутона Изпращане
  • Ще бъдете насочени към таблото за управление

Генерираният SQL израз ще бъде както следва

SELECT * FROM потребители WHERE email = ' Този имейл адрес е защитен от спам ботове. Трябва да имате активиран JavaScript, за да го видите. ' И парола = md5 ('xxx') ИЛИ 1 = 1 -] ');

Диаграмата по-долу илюстрира изявлението е генерирано.

ТУК,

  • Изявлението интелигентно приема, че се използва md5 криптиране
  • Завършва единичната оферта и заключващата скоба
  • Прибавя условие към изявлението, което винаги ще бъде вярно

Като цяло, успешната атака на SQL Injection се опитва да извърши успешна атака на редица различни техники като тези, показани по-горе.

Други типове атаки на SQL Injection

SQL инжекциите могат да навредят повече, отколкото само чрез предаване на алгоритмите за вход. Някои от атаките включват

  • Изтриване на данни
  • Актуализиране на данните
  • Вмъкване на данни
  • Изпълнение на команди на сървъра, които могат да изтеглят и инсталират злонамерени програми като троянски коне
  • Експортиране на ценни данни като данни за кредитна карта, имейл и пароли към отдалечения сървър на нападателя
  • Получаване на данни за вход за потребителя и т.н.

Горният списък не е изчерпателен; просто ви дава представа какво SQL Injection

Инструменти за автоматизация за SQL инжектиране

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

  • SQLSmack - https://securiteam.com/tools/5GP081P75C
  • SQLPing 2 - http://www.sqlsecurity.com/downloads/sqlping2.zip?attredirects=0&d=1
  • SQLMap - http://sqlmap.org/

Как да се предпазим от SQL инжекционни атаки

Организацията може да приеме следната политика, за да се предпази от атаки на SQL Injection.

  • На потребителското въвеждане никога не трябва да се вярва - винаги трябва да се дезинфекцира, преди да се използва в динамични SQL изрази.
  • Съхранени процедури - те могат да капсулират SQL изразите и да третират всички входни данни като параметри.
  • Подготвени отчети - подготвени отчети, които да работят, като първо се създаде SQL израз, след което се третират всички подадени потребителски данни като параметри. Това няма ефект върху синтаксиса на SQL израза.
  • Регулярни изрази - те могат да се използват за откриване на потенциален вреден код и за премахването му преди изпълнение на SQL изразите.
  • Права за достъп на потребителя за връзка с база данни - на акаунтите, използвани за свързване с базата данни, трябва да се предоставят само необходимите права за достъп. Това може да помогне за намаляване на това, което SQL изразите могат да изпълняват на сървъра.
  • Съобщения за грешки - те не трябва да разкриват чувствителна информация и къде точно е възникнала грешка. Прости потребителски съобщения за грешки като „Съжаляваме, имаме технически грешки. Свързан е техническият екип. Моля, опитайте отново по-късно ”може да се използва вместо да се показват SQL изразите, които са причинили грешката.

Хакерска активност: Използвайте Havij за SQL Injection

В този практически сценарий ще използваме програмата Havij Advanced SQL Injection за сканиране на уебсайт за уязвимости.

Забележка: Вашата антивирусна програма може да я маркира поради естеството си. Трябва да го добавите към списъка с изключения или да поставите на пауза антивирусния си софтуер.

Изображението по-долу показва главния прозорец за Havij

Горният инструмент може да се използва за оценка на уязвимостта на уеб сайт / приложение.

Обобщение

  • SQL Injection е тип атака, която използва лоши SQL изрази
  • SQL инжекцията може да се използва за заобикаляне на алгоритмите за влизане, извличане, вмъкване и актуализиране и изтриване на данни.
  • Инструментите за SQL инжектиране включват SQLMap, SQLPing и SQLSmack и др.
  • Добрата политика на сигурност при писане на SQL изявление може да помогне за намаляване на SQL инжекционните атаки.