SiXSS
SiXSS (англ. Sql Injection Сross Site Scripting — «Межсайтовый скриптинг при наличии SQL-инъекции») — тип атаки на уязвимые интерактивные информационные системы в вебе; внедрение выполняемых на клиентском компьютере вредоносных скриптов в выдаваемую системой страницу посредством внедрения кода в SQL-инъекцию. Как правило, данная уязвимость возникает на стороне клиента, при наличии вывода принтабельных полей посредством выполнения SQL-инъекции.
Описание
[править | править код]Чтобы атака случилась, на сервере должны быть две вещи.
- Разработчик сайта допустил внедрение SQL-кода в каком-то запросе.
- Запрос (опаснее, если тот же, что в пункте 1) возвращает любую информацию, непосредственно внедряемую в окончательный HTML, например:
- Вебмастер точно знает, что в каком-либо поле (например, в имени пользователя) нет HTML-символов, и не экранирует его.
- Если сайт написан на динамически типизированном языке, могут быть уязвимы и числовые поля, которые бессмысленно экранировать.
- Фрагменты оформления сайта.
- Закэшированные HTML-страницы.
Атака представляет собой межсайтовый скриптинг (XSS), совершённый через «отравленный» запрос. Ущерб от неё как от обычного XSS: может украсть куки пользователя, в том числе идентификатор сессии и другую уязвимую информацию, сохранённую на клиенте, выполнять команды от имени пользователя.
Как и любой XSS, SiXSS может быть отражённым (вредоносный скрипт хранится в запросе) и хранимым (вредоносный скрипт хранится в БД).
Пример
[править | править код]Предположим, что на сервере имеется база данных, в которой расположена таблица вида:
CREATE DATABASE cms;
USE cms;
GRANT SELECT ON cms.* TO 'user_noprivs'@'localhost' IDENTIFIED BY
PASSWORD '4f665d3c1e638813';
CREATE TABLE content_table (
id INT PRIMARY KEY AUTO_INCREMENT,
content TEXT
);
INSERT INTO content_table (content) VALUES
('My Bank
[p]
User:
[input type=\"text\" name=\"username\"]
Password:
[input type=\"password\" name=\"pass\"]
[input type=submit value=\"LogIn\"]
');
и присутствует такой файл PHP, как этот :
My Bank
<?php
if(@isset($_GET['id'])){
$myconns=@mysql_connect(\"127.0.0.1\",\"user_noprivs\",\"unbr34k4bё3!\") or
die(\"sorry can't connect\");
@mysql_select_db(\"cms\") or die(\"sorry can't select DB\");
$sql_query = @mysql_query(
\"select content from content_table where id=\".$_GET['id']) or die(\"Sorry
wrong
SQL Query\");
// oops SQL Injection-^
while($tmp = @mysql_fetch_row($sql_query))
echo $tmp[0]; //echoes the result as HTML code
}else{
echo \"Welcome to My Bank
\".Login.\"\";
}
?>
Как видно, результаты запроса к MySQL должны будут передаваться пользователю. Можем просмотреть данную html-страницу, но на ней мы не увидим ничего особенного. Зайдя на страничку и кликнув по ссылке, пользователь получит приглашение на авторизацию.
Из этого можно сделать вывод о том, что:
Проблема появляется в случае, когда некоторый текст из БД поступает сразу в HTML страницу. Если мы попытаемся использовать классическую атаку SQL-Injection, мы получим некоторую информацию о SQL-сервере и ничего больше. Но появляется уязвимость на стороне клиента. Используя UNION SELECT злоумышленник сможет внедрить произвольный текст.
Атака
Для того, чтобы обойти включенные gpc_magic_quotes, используем "0xXX" HEX вместо текста: mysql] select HEX('[ script]alert(“SiXSS”);[/script]');
+---------------------------------------------------------------------+
| HEX('[ script]alert(\"SiXSS\");[/script]')
|
+---------------------------------------------------------------------+
| 3C7363726970743E616C6572742822536958535322293B3C2F 7363726970743E |
+---------------------------------------------------------------------+
1 row in set (0.00 sec)
и вставим это в HTTP запрос :
http://www.mybank.com?id=1+union+select+
0x3C7363726970743E616C6572742822536958535322293B3C 2F7363726970743E
Ответом будет та же страничка, но ,кроме того, на стороне клиента выполнится данный скрипт.
([ script]alert(“SiXSS”);[/script])
Это и будет SQL Injection для Cross Site Scripting (SiXSS)
Пример взят с сайта SecurityLab
Ссылки
[править | править код]Прочее
[править | править код]Классифицируются данные атаки в соотвестствии с классификацией SQL-инъекций и XSS-атак, так как являются совмещением двух различных типов атак.