🏄♀️ 5 примеров атаки SQL-инъекций и их предотвращение — Information Security Squad
🏄♀️ 5 примеров атаки SQL-инъекций и их предотвращение
Эта атака позволяет хакерам выполнять вредоносные действия в онлайн-свойствах, где проверка входных данных немного ниже среднего.
Согласно отчету Positive Technology, SQL-инъекция по-прежнему остается одной из основных лазеек в мире.
Статистика на самом деле не является неожиданностью, учитывая, что веб-сайтам нужна мощная проверка входных данных.
Для этого мы придумали это руководство, которое поможет вам понять SQL-инъекцию с примерами.

Что такое SQL-инъекция?

Проще говоря, SQL-инъекция — это метод использования пользовательских данных через поле ввода веб-страниц.

Вредоносные данные, когда они принимаются сервером или приложением, могут использоваться для манипулирования данными пользователя и компании.

SQL-инъекция — одна из самых простых и в то же время самых разрушительных атакующих идей.
Тысячи веб-серверов страдают каждый день, принося миллионы долларов убытков.
  • Злоумышленники могут использовать эту уязвимость для извлечения учетных данных пользователей из базы данных. После чего они могут выдавать себя за реальных пользователей и красть их деньги или данные.
  • Злоумышленники могут получить права администратора в базе данных, чтобы стереть, скопировать или повредить все данные на сервере.
  • В некоторых случаях SQL-инъекция также позволяет злоумышленникам получить доступ к операционной системе. Это приводит к атаке на внутреннюю сеть вашего бизнеса.

Пример атаки SQL-инъекцией 1

Представьте, что вы злоумышленник.
Ваша цель здесь очень проста.
Вы не знаете, какой тип проверки ввода использует эта форма веб-сайта.
Вы должны попробовать некоторые популярные операторы SQLi, чтобы узнать, можете ли вы взломать форму.
<form
action="/login.php" method="POST">
<p>Username: <input type="text" name="username" /></p>
<p>Password: <input type="text" name="password" /></p>
<p><input type="submit" value="Log
In" /></p>
</form>
Вам не нужно быть опытным хакером, чтобы понять, что делает эта форма.
Даже если у вас нет автоматизированного инструмента для брутфорса, грамотное предположение может нанести большой ущерб.
$_POST['username'] and $_POST['password'].
<?php $sql = "SELECT count(*) FROM users
WHERE
              username
= '{$_POST['username']}'AND
              password
= '...'"; ?>

Если вы можете обрабатывать общие имена пользователей, такие как «david» или «anna», вы можете иметь доступ к их учетным записям.

Поисковая SQLi-атака

Теперь давайте рассмотрим атаку, которая использует поле поиска на любом веб-сайте.

select * from notes nt where nt.subject = ‘search_word‘;
Однако вместо этого нам придется использовать небольшую манипуляцию, чтобы запрос всегда был верным.
select * from notes nt where nt.subject = ‘ ‘ or 1=1;–
Это один из самых простых способов взлома сайта.
В интернете существует множество инструментов, которые могут атаковать тысячи веб-сайтов одним щелчком мыши с помощью этого запроса.
Вы также можете использовать некоторые варианты запроса, чтобы убедиться, что это всегда так работает.
  • ‘ or ‘abc‘=‘abc‘;–
  • ‘ or ‘ ‘=‘ ‘;–

Информационная утечка

Подумайте, как разработчик покажет реквизиты банковского счета.

Ранее в банковской индустрии самым простым способом было извлекать данные из URL-адресов.

tring accountBalanceQuery =
"SELECT accountNumber, balance FROM accounts WHERE account_owner_id = "
+ request.getParameter("user_id");
try{
    Statement statement = connection.createStatement();
    ResultSet rs = statement.executeQuery(accountBalanceQuery);
while(rs.next()){
        page.addTableRow(rs.getInt("accountNumber"), rs.getFloat("balance"));
}
}catch(SQLException e){...}
Если пользователь «7383» вошел в систему, URL, скорее всего, будет выглядеть следующим образом.
https://mybank/show_mybalances?user_id=7383
Запрос учетной записи будет выглядеть примерно так:
SELECT accountNumber, balance FROM accounts WHERE account_owner_id = 984
Банки научились это устранять, когда злоумышленники начали изменять параметры запроса по своему желанию.
Существуют тысячи раскрытых и нераскрытых случаев, когда извлекаются данные по банковским счетам.
SELECT accountNumber, balance FROM accounts WHERE account_owner_id = 0 OR 1=1

Другие примеры SQL-инъекций

Удалить запись из базы данных

Положите приложение:

Как остановить атаки SQL-инъекцией?

Несмотря на то, что существует дюжина различных способов использования уязвимостей SQL-инъекций, существует только один способ обеспечения безопасности.

Разработчики или эксперты по безопасности должны проверять и параметризировать входные запросы, включая подготовленные операторы.

Неважно, какова функция вашего приложения.

Оно не может использовать входные данные от пользователя напрямую.

Оно предоставляет бэкэнд хакерам.

Разработчик должен очистить все, что поступает через приложение.

Однако найти эту уязвимость — еще одна задача.

Ваша команда не может просто просмотреть каждый фрагмент входного кода, написанный за последние годы.

Существуют десятки инструментов сканирования безопасности, которые могут предоставить подробные отчеты об уязвимостях SQLi на вашем сайте.

си. также:

¯\_(ツ)_/¯

Примечание: Информация для исследования, обучения или проведения аудита. Применение в корыстных целях карается законодательством РФ.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

5e7fa976b0640d40