escape-символы в / etc / network / interfaces

8

Я хочу , чтобы убедиться , что все строки я прохожу в линию wpa-ssid "abc"в /etc/network/interfacesне будет использоваться , чтобы вырваться из конфигурации.

Все, что я могу найти в руководстве, это то, что \можно использовать в конце строки для продолжения на следующей строке.

Но как насчет \"посередине строки?

Меня беспокоит SSID что-то вроде

A"
up rm -rf /\

Есть ли какая-либо общая кодировка, которая может использоваться для произвольных символов в поле SSID?

hultqvist
источник

Ответы:

5

В Debian /etc/network/interfaces(или любом другом дистрибутиве, использующем утилиту Debian ifupdown) последовательность обратного слэша-новой строки удаляется, и обратный слэш не является особенным где-либо еще. Символ двойной кавычки тоже не особенный. Символ #начинает комментарий, если это первый непробельный символ в строке (без продолжения). Нулевые байты обрабатываются как символы новой строки (я думаю - синтаксический анализатор использует строки C и не имеет специальной обработки для нулевых байтов, поэтому они могут вызвать дополнительные неприятности).

Строки конфигурации принимают форму имени опции, за которым следует значение, разделенное пробелом. Ведущие и конечные пробелы игнорируются. Некоторые встроенные опции дополнительно разбивают строку на слова; значение параметров ifaceвсегда выполняется до конца строки.

Например, строка

wpa-ssid  "a  b"  "cd"  

устанавливает параметр wpa-ssidв 12-символьную строку "a  b"  "cd"(внутренний пробел сохраняется).

Сценарий ifupdown WPA Supplicant удаляет двойные кавычки в начале и в конце wpa-ssidстроки конфигурации, строка выше эквивалентна wpa-ssid a  b"  "cd. Таким образом, вы можете иметь начальные и конечные пробелы в SSID.

Я не могу найти проблему цитирования в сценариях WPA Supplicant ifupdown, поэтому похоже, что все, что создаст ifupdown, безопасно.

Таким образом, вы можете разрешить вставку любой строки в качестве SSID при /etc/network/interfacesусловии, что она не содержит символа новой строки или нулевого байта. Добавьте двойные кавычки вокруг строки (если вы этого не сделаете, SSID с начальным или конечным пробелом, или с тем концом \, который начинается или заканчивается ", будут искажены).

Жиль "ТАК - перестань быть злым"
источник
На самом деле я успешно попробовал wpa-ssid my ssid.
Hultqvist
@phq - чтобы быть понятным, вы смогли использовать линию wpa-ssid=my ssid?
slm
@slm нет, /etc/network/interfacesне использует =в своем синтаксисе, я пытался прямо сейчас, и он не работает с =.
Hultqvist
@phq - но, по-вашему, вы смогли дать ему SSID с пробелами? my ssid?
СЛМ
@slm да SSID с пробелами всегда работал
hultqvist
0

Это SO Q & A под названием: Существует ли стандарт, который определяет, что является действительным SSID и паролем? отвечает на некоторые ваши вопросы.

выдержка

Раздел 7.3.2.1 спецификации 802.11-2007 ( http://standards.ieee.org/getieee802/download/802.11-2007.pdf ) определяет идентификаторы SSID.

Допустимый SSID - 0-32 октета с произвольным содержимым. SSID длины 0 указывает на подстановочный SSID (например, в кадрах запроса зондирования).

Нет набора символов, связанного с SSID - 32-байтовая строка из NUL-байтов является действительным SSID.

Из этого следует:

  • Вы никогда не должны использовать обычные строковые функции при работе с общими SSID (strcpy () и friends).
  • Вы не должны предполагать, что SSID можно распечатать, например, когда он записывается на диск

Также есть комментарий к ответу на вопрос SO:

Существует обновленная версия стандарта ( http://standards.ieee.org/getieee802/download/802.11-2012.pdf ), которая определяет SSIDEncodingполе. Это может быть UNSPECIFIED(для произвольных данных) или UTF8.

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

Что еще?

Кроме того, я могу быть склонен защищать себя, нормализуя ввод пользователя, используя некоторую форму функции кодирования URL (что-то, что, очевидно, будет работать с SSID), или просто убирать недопустимые символы и просто не разрешать их до записи этих строк в этот файл. ,

Странные персонажи?

Единственные проблемы, которые я мог найти со странными / специальными символами, связанными с interfacesфайлом, были эти типы ошибок, которые были поданы против установщика debian.

debian-installer запросил информацию о моей беспроводной сети и успешно использовал ее для беспроводного подключения к сети. Он также записал информацию о моей беспроводной сети в / etc / network / interfaces. Однако введенный мною ключ WPA содержал как минимум один специальный символ, и debian-installer не экранировал и не заключал в кавычки специальный символ (ы) в / etc / network / interfaces. В результате при перезагрузке система очень долго зависала в процессе загрузки, пытаясь (безуспешно) повторно подключиться к беспроводной сети. Я исправил проблему, просто цитируя ключ WPA, указанный в / etc / network / interfaces. Это должно произойти автоматически, если ключ содержит специальные символы.

Также были следующие ошибки: одна связана с пробелами в SSID, другие - с парольной фразой:

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

Дополнительные примеры

Официальные документы

Копаясь в официальной документации, я нашел этот бит здесь:

Официальные документы показывают этот пример:

ap_scan=2
network={
        ssid="test adhoc"
        mode=1
        frequency=2412
        proto=WPA
        key_mgmt=WPA-NONE
        pairwise=NONE
        group=TKIP
        psk="passphrase"
}

Поэтому может показаться, что пробелы разрешены, если они указаны правильно. Также есть этот пример, объясняющий, как предоставить SSID с пробелами для iwconfigинструмента:

Добавьте имя (ssid) для сети, которую вы хотите создать / присоединить. Используйте одинарные кавычки, если в имени есть пробел.

   $ sudo iwconfig eth1 essid 'name'

Webconverger

Я нашел этот пример, который выглядит как Debian под капотом, так что пример может соответствовать вашей ситуации, но трудно сказать наверняка. Я поднял его только потому, что он показывает пример того, как я ожидал, что метод кодирования URI будет открыт для защиты от недопустимых символов.

выдержка

Пример 4 "Пробелы в ESSID", передача essid 'Hopstock Gjestenett' с ключом WPA uiopzxcv

Пожалуйста, избегайте пробелов в ESSID. В этом случае мы используем обходной путь для encodeURI ('Hopstock Gjestenett'), чтобы получить следующий загрузочный рецепт:

   wpa-ssid=Hopstock%20Gjestenett wpa-psk=uiopzxcv

Таким образом, вы можете кодировать пробелы, которые отображаются в SSID, используя %20.

SSIDs

Копая еще глубже, я нашел этот комментарий на странице Википедии о наборе услуг (сеть 802.11) .

Каждый BSS или ESS идентифицируется идентификатором набора услуг (SSID) - строкой от 1 до 32 байтов. Обычно это читаемая человеком строка, и поэтому ее обычно называют «сетевым именем». 6 В IBSS SSID выбирается клиентским устройством, которое запускает сеть, и широковещательная передача SSID выполняется в псевдослучайном порядке всеми устройствами, которые являются членами сети.

Этот комментарий подкреплен презентацией Blackhat EU 2013 под названием: « Практическая эксплуатация с использованием идентификатора вредоносного набора услуг (SSID)» .

выдержка

  • Нет определенных ограничений относительно того, какие символы могут использоваться в SSID (IEEE Std 802.11 ™ -2012)
  • Некоторые ограничения на основе продуктов
    • Некоторое ограничение характера (только ascii)
    • Unicode

Таким образом, технически любой символ разрешен в SSID, различные реализации, такие как Windows XP, Windows 7, в отличие от различных версий Linux позволяют / запрещают подмножества символов в SSID.

Ссылки

SLM
источник
1
Ваш ответ не доходит до сути: в чем доступно спасение /etc/network/interfaces?
Жиль "ТАК - перестань быть злым"
@ Жиль - спасибо, это было начало сегодня на работе, я добавил некоторую дополнительную информацию, которую я нашел, но не добавил к А тогда. В основном ошибки, связанные с экранированием символов для "wpa-ssid" и "wpa-psk".
SLM
Я не могу сказать, работает ли urlencoding essid в качестве параметра загрузки, но он не работает в файле интерфейсов.
Hultqvist
@phq - Я не удивлен, это была только идея, и кодирование - это, как правило, способ обработки данных, как эта, в других приложениях, например, цитирование - единственный выход, кроме удаления.
slm