Урок за SQL инжектиране: Как да учим с пример

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

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

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

SQL Injection

Как работи SQL Injection Attack?

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

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

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

<form action=‘index.php’ method="post">

<input type="email" name="email" required="required"/>

<input type="password" name="password"/>

<input type="checkbox" name="remember_me" value="Remember me"/>

<input type="submit" value="Submit"/>

</form>

ТУК,

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

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

SELECT * FROM users WHERE email = $_POST['email'] AND password = md5($_POST['password']);

ТУК,

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

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

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

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 ('m@m.com',md5('abc'));

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

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

select * from users;

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

SQL инжектирането работи

Да предположим, че потребителските консумативи admin@admin.sys намлява 1234 като парола. Изявлението, което трябва да бъде изпълнено срещу базата данни, ще бъде

SELECT * FROM users WHERE email = 'admin@admin.sys' AND password = md5('1234');

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

xxx@xxx.xxx' OR 1 = 1 LIMIT 1 -- ' ]

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

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

SELECT * FROM users WHERE email = 'xxx@xxx.xxx' OR 1 = 1 LIMIT 1 -- ' ] AND password = md5('1234');

ТУК,

  • xxx@xxx.xxx завършва с единична кавичка, която допълва кавичката на низа
  • OR 1 = 1 LIMIT 1 е условие, което винаги ще бъде вярно и ограничава върнатите резултати само до един запис.
  • — ' И ... е SQL коментар, който елиминира частта за паролата.

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

SQL инжектирането работи

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

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

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

SQL инжектиране на уеб приложение

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

  • Стъпка 1: Въведете xxx@xxx.xxx като имейл адрес
  • Стъпка 2: Въведете xxx') ИЛИ 1 = 1 — ]

SQL инжектиране на уеб приложение

  • Щракнете върху бутона Изпращане
  • Ще бъдете насочени към таблото за управление

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

SELECT * FROM users WHERE email = 'xxx@xxx.xxx' AND password = md5('xxx') OR 1 = 1 -- ]');

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

SQL инжектиране на уеб приложение

ТУК,

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

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

Други типове атаки чрез SQL инжектиране

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

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

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

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

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

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

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

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

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

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

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

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

Използвайте Havij за SQL инжектиране

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

Oбобщение

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

Обобщете тази публикация с: