Академический Документы
Профессиональный Документы
Культура Документы
Модуль
А1Инъекции
Модуль
А2Слабаяаутентификация
и
управление
сеансом
Инъекции
План
модуля
Что
такое
HTML-инъекция
Iframe
-
инъекция
Инъекция
командОС
Инъекция
PHP-кода
Что
такое
включениянасторонесервера(SSI)
Простые
SQL-инъекции
Что
такое
Аjax/Json/Jqueryинъекции
Что
такое
CAPTCHAидлячегоонанужна
SQL-инъекциявобходкаптчи
Что
такое
хранимыеSQLИнъекции
XML
-
eXtensibleMarkableLanguage
Что
такое
User-Agent
SQL
ИнъекциивполеUserAgent
Теперь
перейдем(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.txt.txt
&ParamWidth=800&ParamHeight=250
Здесь
мы
видим,чточерезIframeподгружаетсяфайлrobots.txtдляпоказапользователю.
Но если веб дизайнером не внедрены никакие защитные механизмы то можно подгрузить любой
файл,
делаетсяэтотак:
/iframei.php?ParamUrl=../SECRET.txt&ParamWidth=800&ParamHeight=250
Как защитится? Если мы поставим уровень защиты “High” или “Medium”, то данная атака уже не
пройдет.
Почему?
Откроем
страницуiframei.phpвкаталоге
BWAPP/
В
исходном
кодестраницывидно,чтодлязащитыотIframeинъекцийиспользуютсяфункции.
<h1>
iFrame
Injection</h1>
<?
php
if
(
$_COOKIE
[
"security_level"]=
="1"||$_COOKIE["security_level"]=="2")
{
?>
<iframe
frameborder="0"src="robots.txt"height="<?phpechoxss($_GET["ParamHeight"])?>"
width=" <?
phpechoxss($_GET["ParamWidth"])?>"></iframe>
<?
php
}
else
{
?>
<iframe frameborder="0" src="<? php echo xss($_GET["ParamUrl"])?>" height="<?php echo
xss
(
$_GET [
"ParamHeight"])?>"width="<?phpechoxss($_GET["ParamWidth"])?>"></iframe>
<?
php
}
?>
©geekbrains.ru 4
Функции
Xss_check_xможнонайтивфайлеfunctions_external.php
А
функция
функция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.
functioncommandi_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-->
<!--#execcmd="ls"-->
<!--#execcmd="dir"-->
<!--#execcmd="cat/etc/passwd"-->
©geekbrains.ru 7
Только
теперьрассмотримSQL-инъекции.
©geekbrains.ru 8
Простые
SQL-инъекции
В данном примере на верхнем скриншоте видно, что подставив знак ‘ (кавычка) в запрос, база данных
выдала ошибку синтаксиса. Тем самым выдав злоумышленнику, что ввод от пользователя к БД не
фильтруется.
Как
защитится?
©geekbrains.ru 9
Что
такоеАjax/Json/Jquery
инъекции
©geekbrains.ru 10
Что
такоеCAPTCHAидля
чего
она
нужна
CAPTCHA
(CompletelyAutomatedPublicTuringtesttotellComputersandHumansApart)
«полностью
автоматизированныйпубличныйтестТьюрингадляразличениякомпьютеровилюдей»
В
двухсловах,
этомогутбыть,картинки,аудиофайлы,видеофайлы,легкопереводимыечеловеком
в
текст,
нежеликомпьютером.
SQL-инъекциявобходкаптчи
/bWapp/
phpi
.
php?message=PREVED;$_SESSION["manual_interv"]=1;
©geekbrains.ru 11
Что
такоехранимыеSQL-инъекции
Результат SQL-инъекции может сохраниться, к примеру, в записи блога, или в журналах и храниться
в
том
же
SQL
иливлюбомдругомхранилище,вродеXML.Непутаемсхранимымипроцедурами
SQL!
Пароль
может
сохранитьсявсоседнемполетаблицы!
SQL-инъекция
можетбытьнаразличных
платформах!
©geekbrains.ru 12
XML
-
eXtensibleMarkable
Language
Идея: попробовать составить XML запрос так, чтобы сделать свой secret таким же, как пароль другого
пользователя:
<reset>
<login>
bee
</login>
<secret>
'+(selectpasswordfromheroeswherelogin='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
select1,1,1,1,1,1,1fromheroeswherelogin='neo'andascii(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
select1,1,1,1,1,1,1fromheroes
wherelogin='neo'andascii(substring(password,1,1))=115
Что
такоепротокол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
movieticketsavailableinourstock)
/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,'
Авторизация
(Authorization)-предоставлениеразрешений.
©geekbrains.ru 18
Сеанс
(Session)-исполняемоевремябез
перерыва.
©geekbrains.ru 19
Обход
CAPTCHA
Фрагмент
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спомощьюCookieManager.
Защита
отатакнауправление
и
аутентификацию
сеанса
•
использоватьсложныепароли;
•
блокировка
посленеудачныхпопыток;
•
ограниченияпоIP;
•
использоватьсложныеформыаутентификации;
•
аутентификацияадекватнаяважностисодержимого;
•
авторизация
насодержимом;
•
использованиесекретныхвопросовсбольшимпространствомвозможныхответов;
•
привязка
к
дополнительномуидентификатору;
•
использованиетрудно-предсказуемыхSessionID;
©geekbrains.ru 26
•
использованиезависимыхотаутентификацииSessionID;
•
установить
времяжизниSessionID;
•
проверка
вводапользователя;
•
пользователюнеследоватьприсланнымссылкам;
•
пользователюнепользоватьсяприложениемнапубличныхкомпьютерах.
Практика
Задача
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. OWASPTestingGuide
(http://www.lulu.com/shop/owasp-foundation/owasp-testing-guide/paperback/product-5310589.html)
2. OWASPBackendSecurity
(http://www.lulu.com/shop/owasp-foundation/owasp-backend-security/paperback/product-4490173.ht
ml)
3. BWAPPOfficialPDFGuide
©geekbrains.ru 27