Что такое SQL-инъекция?
Проще говоря, SQL-инъекция – это метод использования пользовательских данных через поле ввода веб-страниц.
Вредоносные данные, когда они принимаются сервером или приложением, могут использоваться для манипулирования данными пользователя и компании.
- Злоумышленники могут использовать эту уязвимость для извлечения учетных данных пользователей из базы данных. После чего они могут выдавать себя за реальных пользователей и красть их деньги или данные.
- Злоумышленники могут получить права администратора в базе данных, чтобы стереть, скопировать или повредить все данные на сервере.
- В некоторых случаях SQL-инъекция также позволяет злоумышленникам получить доступ к операционной системе. Это приводит к атаке на внутреннюю сеть вашего бизнеса.
Пример атаки SQL-инъекцией 1
<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
){...}
SELECTaccountNumber
,balance
FROMaccounts
WHEREaccount_owner_id
=984
SELECTaccountNumber
,balance
FROMaccounts
WHEREaccount_owner_id
=0
OR
1=1
Другие примеры SQL-инъекций
Удалить запись из базы данных
Положите приложение:
Как остановить атаки SQL-инъекцией?
Несмотря на то, что существует дюжина различных способов использования уязвимостей SQL-инъекций, существует только один способ обеспечения безопасности.
Разработчики или эксперты по безопасности должны проверять и параметризировать входные запросы, включая подготовленные операторы.
Неважно, какова функция вашего приложения.
Оно не может использовать входные данные от пользователя напрямую.
Оно предоставляет бэкэнд хакерам.
Разработчик должен очистить все, что поступает через приложение.
Однако найти эту уязвимость – еще одна задача.
Ваша команда не может просто просмотреть каждый фрагмент входного кода, написанный за последние годы.
Существуют десятки инструментов сканирования безопасности, которые могут предоставить подробные отчеты об уязвимостях SQLi на вашем сайте.
си. также:
- ?️ [SQL инъекция] Некоторые способы обхода WAF
- ? Что такое SQL-инъекция и как ее предотвратить в PHP-приложениях?
- SQLiScanner: Автоматическая SQL-инъекция с помощью Charles и sqlmap api
- SQL инъекция — web атака — OWASP # 1 УЯЗВИМОСТЬ — ЧАСТЬ 2
- Атака «слепая» SQL инъекция с регулярными выражениями
- ?️ Атаки веб-приложений: что это такое и как оставаться защищенным?
¯\_(ツ)_/¯
Примечание: Информация для исследования, обучения или проведения аудита. Применение в корыстных целях карается законодательством РФ.