Невозможно отучить людей изучать самые ненужные предметы.
Введение в CSS
Преимущества стилей
Добавления стилей
Типы носителей
Базовый синтаксис
Значения стилевых свойств
Селекторы тегов
Классы
CSS3
Надо знать обо всем понемножку, но все о немногом.
Идентификаторы
Контекстные селекторы
Соседние селекторы
Дочерние селекторы
Селекторы атрибутов
Универсальный селектор
Псевдоклассы
Псевдоэлементы
Кто умеет, тот делает. Кто не умеет, тот учит. Кто не умеет учить - становится деканом. (Т. Мартин)
Группирование
Наследование
Каскадирование
Валидация
Идентификаторы и классы
Написание эффективного кода
Вёрстка
Изображения
Текст
Цвет
Линии и рамки
Углы
Списки
Ссылки
Дизайны сайтов
Формы
Таблицы
CSS3
HTML5
Блог для вебмастеров
Новости мира Интернет
Сайтостроение
Ремонт и советы
Все новости
Справочник от А до Я
HTML, CSS, JavaScript
Афоризмы о учёбе
Статьи об афоризмах
Все Афоризмы
| Помогли мы вам |
QR-код (англ. Quick Response Code — код быстрого реагирования) — это матричный или двумерный штрих-код, который может содержать до 4296 символов ASCII. То есть, проще говоря, картинка, в которой зашифрован текст.
В мае 2013 года специалисты компании по сетевой безопасности Lookout Mobile разработали специальные QR-коды, которые смогли скомпрометировать очки Google Glass. На тот момент очки сканировали все фотографии, «которые могут быть полезны их владельцу», — и предоставили взломщикам полный удаленный доступ к устройству. Исследователи сообщили в Google о данной уязвимости, и ее закрыли буквально за несколько недель. К счастью, исправить успели до того, как ее можно было использовать вне лаборатории, ведь взлом очков реального пользователя мог привести к большим проблемам.
В 2014 году программа Barcode Scanner для мобильных устройств из проекта ZXing практически не проверяла тип URI, передаваемый через QR-код. В результате любой эксплоит, который мог быть исполнен браузером (например, написанный на jаvascript), можно было передать через QR.
Сканер пытался отфильтровать опасные виды атак с помощью регулярных выражений, требуя, чтобы URI имел период с последующим продлением как минимум на два символа, транспортный протокол длиной не менее двух символов, за которым следует двоеточие, и чтобы в URI не было пробелов.
Если содержимому не соответствует хотя бы одному из требований, то оно определяется как обычный текст, а не URI. Этот механизм блокирует атаки вроде jаvascript;alert("You have won 1000 dollars! Just Click The Open Browser Button");, РЅРѕ, внеся пару простых изменений РІ РєРѕРґ, РјС‹ получаем вариант, который программа исполняла РІ браузере, ведь РѕРЅР° считала JS-РєРѕРґ обыкновенным, «нормальным» URI!
Вот как это выглядело.
Как мы можем увидеть, уведомление появилось в браузере, а значит, URI с потенциально вредоносным кодом был выполнен. Однако выполняется данный JS-код лишь тогда, когда пользователь нажимает Open Browser (то есть «Открыть в браузере»).
Еще РѕРґРёРЅ интересный пример РёР· 2012 РіРѕРґР°: эксперт РїРѕ информационной безопасности Равишанкар Боргаонкар (Ravishankar Borgaonkar) продемонстрировал, как сканирование простейшего QR может привести Рє форматированию устройств Samsung! Что Р¶Рµ было внутри? MMI-РєРѕРґ для СЃР±СЂРѕСЃР° РґРѕ заводских настроек: *2767*3855#, а также префикс tel: для совершения USSD-запроса.
Самое опасное здесь — что человек без предварительной подготовки не может узнать содержимое кода, не отсканировав его. А человек очень любопытен: в различных исследованиях большинство испытуемых (которые, кстати, даже не знали об эксперименте) сканировали QR-код именно из любопытства, забывая о собственной безопасности. Поэтому всегда будь внимателен!
Если Сѓ тебя нет сканера РєРѕРґРѕРІ, РЅРѕ СѓР№РјР° СЃРІРѕР±РѕРґРЅРѕРіРѕ времени — РјРѕР¶РЅРѕ попробовать расшифровать РєРѕРґ вручную. Р?нструкция есть РЅР° Хабре.
Для демонстрации средств работы с QR-кодами я буду использовать Kali Linux 2019.2 с установленным Python версии 3.7 — это необходимо для корректной работы утилит.
Не забывай про уголовную ответственность за создание и распространение вредоносных программ, к которым в широком смысле относятся и наши «заряженные» QR-коды.
Начнем СЃ утилиты QRGen, которая позволяет создавать QR-РєРѕРґС‹ СЃ закодированными РІ РЅРёС… скриптами. Рта утилита (Рё вектор атаки) направлена РЅР° проверку незащищенного Рё непопулярного РџРћ либо Р¶Рµ узкоспециализированных инструментов РІСЂРѕРґРµ складских QR-сканеров, отправляющих SQL-запросы Рє базе данных компании. Большинство современных сканеров РёР· соображений безопасности РЅРµ выполняют находящийся РІ QR-РєРѕРґРµ СЃРєСЂРёРїС‚.
Соответственно, вариантов развития событий после сканирования два: сканер просто выводит содержимое нашего изображения (что для нас совсем невыгодно) либо исполняет код, спрятанный в изображении, отправляя SQL-запрос к СУБД или Web API, чтобы хакер смог его захватить.
QRGen позволяет использовать готовые варианты либо задать их самому.
Устанавливаем QRGen, копируя репозиторий, и переходим в папку с содержимым.
git clone https://github.com/h0nus/QRGen
cd QRGen && ls
QRGen требует Python версии 3.6 и выше. Если возникает ошибка, попробуй обновить интерпретатор.
Устанавливаем все зависимости и запускаем сам скрипт.
pip3 install -r requirements.txt
## или python3 -m pip install -r requirements.txt
python3 qrgen.py
Видим справку.
Аргумент -h выведет то Р¶Рµ самое, Р° РІРѕС‚ запуск СЃ ключом -l приведет к генерации QR-кодов из определенной категории. Всего их восемь.
Теперь давай посмотрим на примеры из каждой категории, а также разберемся, какой урон и каким устройствам они могут нанести.
0'XOR(if(now()=sysdate(),sleep(6),0))XOR'Z<svg onload=alert(1)>cat /etc/passwd%d%d%d%d%d%d%d%d%d%d<!ENTITY % xxe SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd" >"A" x 33<pre><!--#exec cmd="ls" --></pre>../../../../../../etc/passwdПосмотреть текстовые файлы со всеми вариантами «начинки» QR-кодов ты можешь в папке words (РѕРЅРё разделены РїРѕ категориям, указанным выше).
Теперь пара слов о последствиях атак подобными нагрузками.
Первый класс атак — SQL-инъекции — используют при взломе БД и нарушении работы веб-сайтов. Например, запрос может вызывать зависание сайта.
Следующий пример (под номером 2) демонстрирует эксплуатацию XSS-уязвимости при атаке на веб-приложения с использованием SVG (Scalable Vector Graphic). К чему может привести XSS, ты, думаю, и без меня прекрасно знаешь, так что подробно на этом останавливаться не буду.
Третий РїСѓРЅРєС‚ выводит РЅР° экран жертвы содержимое файла /etc/passwd: список аккаунтов Linux-based-систем и дополнительную информацию о них (раньше — хеши паролей этих учетных записей). В подобных случаях обычно стараются получить /etc/shadow Рё конфигурацию сервера, РЅРѕ РІСЃРµ очень сильно зависит РѕС‚ цели, так что какие файлы читать — решай сам.
Четвертый пример представляет собой выражение, которое вызовет переполнение буфера (buffer overflow). Оно возникает, когда объем данных для записи или чтения больше, чем вмещает буфер, и способно вызвать аварийное завершение или зависание программы, ведущее к отказу в обслуживании (denial of service, DoS). Отдельные виды переполнений дают злоумышленнику возможность загрузить и выполнить произвольный машинный код от имени программы и с правами учетной записи, от которой она выполняется, что делает эту ошибку довольно опасной.
Пятый РїРѕ счету класс атак (XXE Injections) представляет СЃРѕР±РѕР№ вариант получения скрытой информации веб-сервера СЃ помощью анализа вывода XML-файлов. Конкретно РІ нашем примере РїСЂРё запросе Рє серверу тот ответит зашифрованным РІ Base64 содержимым файла /etc/passwd, который уже упоминался. Однако расшифровать его не составит труда — достаточно лишь воспользоваться встроенной в большинство дистрибутивов Linux утилитой base64 либо Р¶Рµ онлайн-конвертером.
Атаки форматной строки (пример 6) — это класс уязвимостей, который включает РІ себя предоставление специфичных для языка маркеров формата для выполнения произвольного РєРѕРґР° или СЃР±РѕСЏ программы. Вместо этого маловразумительного объяснения предлагаю РґСЂСѓРіРѕРµ: это класс атак, РєРѕРіРґР° приложение некорректно очищает пользовательский РІРІРѕРґ РѕС‚ управляющих конструкций, которые Рё выполняются. Если ты программировал РЅР° РЎ, то, конечно, помнишь те интересности СЃ выводом переменных через printf: надо было в первом аргументе (который строка) указать на тип выводимого значения (%d для десятичного числа Рё так далее).
Седьмой РїСѓРЅРєС‚ представляет СЃРѕР±РѕР№ вариант command injection, которая выполняет определенный РєРѕРґ РЅР° стороне сервера. Р’ моем примере будет выполнена команда ls, которая покажет содержимое текущей директории, но, конечно, там может быть гораздо более опасный код.
И наконец, последняя категория — это LFI-уязвимости (Local File Inclusion; включение локальных файлов), позволяющие просмотреть на уязвимых (или неправильно настроенных) серверах файлы и папки, которые не должны были быть видны всем. Один из возможных вариантов — просмотреть файл /etc/passwd, о котором мы с тобой уже не раз говорили. Это может выглядеть вот так.
Обрати внимание, что в качестве тестового веб-приложения используется DVWA (Damn Vulnerable Web Application), который был специально разработан для обучения пентесту. Многие атаки на веб-приложения можно отработать на нем.
А сейчас перейдем к практике — протестируем эту утилиту сами.
|
|
|





