escape karakter di / etc / network / interfaces


8

Saya ingin memastikan bahwa string apapun yang saya masuk ke garis wpa-ssid "abc"di /etc/network/interfacestidak akan digunakan untuk keluar dari konfigurasi.

Yang bisa saya temukan di manual adalah yang \dapat digunakan di akhir baris untuk melanjutkan di baris berikutnya.

Tapi bagaimana dengan \"di tengah garis?

Kekhawatiran saya adalah sesuatu seperti SSID

A"
up rm -rf /\

Apakah ada penyandian umum yang dapat digunakan untuk karakter sewenang-wenang ke bidang SSID?

Jawaban:


5

Dalam Debian /etc/network/interfaces(atau distribusi lainnya menggunakan utilitas ifupdown Debian), urutan backslash-newline dihapus, dan backslash tidak spesial di tempat lain. Karakter kutipan ganda juga tidak spesial. Karakter #memulai komentar jika itu karakter non-spasi pertama pada baris (non-lanjutan). Byte Null diperlakukan sebagai karakter baris baru (saya pikir - parser menggunakan string C dan tidak memiliki penanganan khusus untuk byte nol, sehingga mereka dapat menyebabkan kerusakan tambahan).

Baris konfigurasi berupa nama opsi diikuti oleh nilai, dipisahkan oleh spasi. Ruang putih terkemuka dan tertinggal diabaikan. Beberapa opsi bawaan lebih lanjut mengurai baris menjadi kata-kata; nilai opsi untuk ifaceselalu berjalan hingga akhir baris.

Misalnya, garis

wpa-ssid  "a  b"  "cd"  

menyetel opsi wpa-ssidke string 12-karakter "a  b"  "cd"(spasi putih internal dipertahankan).

Skrip ifupdown WPA Supplicant menghapus tanda kutip ganda di awal dan di akhir wpa-ssidstring konfigurasi, baris di atas setara dengan wpa-ssid a  b"  "cd. Dengan cara ini, Anda bisa memiliki spasi spasial memimpin dan tertinggal di SSID.

Saya tidak dapat menemukan masalah kutip di skrip ifupdown Pemohon WPA, jadi sepertinya apa pun yang dihasilkan jikaupup aman.

Dengan demikian Anda dapat mengizinkan string apa pun sebagai SSID untuk disuntikkan /etc/network/interfaces, asalkan tidak mengandung baris baru atau byte nol. Tambahkan tanda kutip ganda di sekitar string (jika tidak, SSID dengan spasi spasi awal atau akhir, atau yang berakhir dengan \, atau yang dimulai atau berakhir dengan ", akan hancur).


Sebenarnya saya berhasil mencoba wpa-ssid my ssid.
hultqvist

@ phq - agar lebih jelas, Anda bisa menggunakan saluran wpa-ssid=my ssid?
slm

@slm tidak, /etc/network/interfacestidak digunakan =dalam sintaksnya, saya mencoba sekarang dan tidak berfungsi =.
hultqvist

@ phq - tapi to the point Anda, Anda bisa memberinya SSID dengan spasi? my ssid?
slm

@slm ya SSID dengan spasi selalu berfungsi
hultqvist

0

T&J SO ini berjudul: Apakah ada standar yang mendefinisikan apa itu SSID dan kata sandi yang valid? jawab beberapa pertanyaan Anda.

kutipan

Bagian 7.3.2.1 dari spesifikasi 802.11-2007 ( http://standards.ieee.org/getieee802/download/802.11-2007.pdf ) mendefinisikan SSID.

SSID yang valid adalah 0-32 oktet dengan konten yang sewenang-wenang. SSID 0-length menunjukkan SSID wildcard (dalam frame permintaan probe misalnya).

Tidak ada set karakter yang terkait dengan SSID - string 32 byte NUL-byte adalah SSID yang valid.

Ini menyiratkan:

  • Anda tidak boleh menggunakan fungsi string normal saat memanipulasi SSID generik (strcpy () dan teman-teman).
  • Anda tidak boleh berasumsi bahwa SSID dapat dicetak ketika, misalnya, masuk ke disk

Ada juga komentar ini pada jawaban atas pertanyaan SO:

Ada versi standar yang diperbarui ( http://standards.ieee.org/getieee802/download/802.11-2012.pdf ), yang mendefinisikan SSIDEncodingbidang. Itu bisa UNSPECIFIED(untuk data sewenang-wenang) atau UTF8.

Jadi saya akan mencari standar terbaru untuk panduan dan memastikan Anda dapat menangani apa yang legal berdasarkan itu.

Apa lagi?

Selain itu saya mungkin cenderung menjaga diri saya dengan menormalkan input pengguna menggunakan beberapa bentuk fungsi penyandian URL (sesuatu yang jelas bekerja dengan SSID) atau hanya menghapus karakter ilegal dan tidak mengizinkan mereka sebelum menulis string ini ke file ini .

Karakter aneh?

Satu-satunya masalah yang dapat saya temukan dengan karakter aneh / khusus yang terkait dengan interfacesfile adalah jenis bug yang diajukan terhadap installer-debian.

Debian-installer meminta informasi jaringan nirkabel saya dan berhasil menggunakannya untuk terhubung secara nirkabel ke jaringan. Itu juga menulis informasi jaringan nirkabel saya ke / etc / network / interfaces. Namun, kunci WPA yang saya masukkan berisi setidaknya satu karakter khusus, dan debian-installer tidak lolos atau mengutip karakter khusus di / etc / network / interfaces. Hasilnya adalah, pada saat reboot, sistem macet untuk waktu yang sangat lama selama proses boot ketika mencoba (tidak berhasil) untuk menghubungkan kembali ke jaringan nirkabel. Saya memperbaiki masalah hanya dengan mengutip kunci WPA yang tercantum di / etc / network / interfaces. Ini harus terjadi secara otomatis jika kunci berisi karakter khusus.

Juga ada bug-bug ini, yang terkait dengan spasi di dalam SSID, yang lainnya terkait dengan frasa sandi:

Dalam kedua kasus itu akan terlihat bahwa membungkus string dengan tanda kutip ganda sudah cukup untuk melindungi nilai-nilai untuk keduanya.

Contoh tambahan

Dokumen resmi

Menggali dokumentasi resmi yang saya temukan di sini:

Dokumen resmi menunjukkan contoh ini:

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

Maka akan tampak bahwa spasi diizinkan, asalkan dikutip dengan benar. Juga ada contoh ini yang menjelaskan cara memberikan SSID ruang untuk iwconfigalat:

Tambahkan nama (ssid) untuk jaringan yang ingin Anda buat / gabungkan. Gunakan tanda kutip tunggal jika ada spasi di namanya.

   $ sudo iwconfig eth1 essid 'name'

Webconverger

Saya menemukan contoh ini yang terlihat seperti Debian, jadi contohnya mungkin sesuai dengan situasi Anda, tetapi sulit untuk memastikannya. Saya memunculkannya hanya karena itu menunjukkan contoh bagaimana saya akan mengharapkan metode pengkodean URI akan terbuka untuk melindungi terhadap karakter ilegal.

kutipan

Contoh 4 "Spaces in ESSID", siaran esid 'Hopstock Gjestenett', dengan kunci WPA uiopzxcv

Harap hindari spasi dalam ESSID. Dalam hal ini kami mengatasinya dengan encodeURI ('Hopstock Gjestenett'), untuk mendapatkan resep boot berikut:

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

Jadi, Anda mungkin dapat menyandikan ruang yang muncul di SSID menggunakan %20.

SSID

Menggali lebih dalam lagi saya menemukan komentar ini dari halaman Wikipedia pada Layanan yang ditetapkan (jaringan 802.11) .

Setiap BSS atau ESS diidentifikasi oleh pengidentifikasi set layanan (SSID) - string 1 hingga 32 byte. Biasanya ini adalah string yang dapat dibaca manusia dan dengan demikian biasa disebut "nama jaringan". 6 Dalam IBSS, SSID dipilih oleh perangkat klien yang memulai jaringan, dan penyiaran SSID dilakukan dalam urutan pseudo-acak oleh semua perangkat yang merupakan anggota jaringan.

Komentar ini didukung oleh presentasi ini dari Blackhat EU 2013, berjudul: Eksploitasi Praktis Menggunakan Pengidentifikasi Set Layanan Berbahaya (SSID) .

kutipan

  • Tidak ada batasan yang pasti tentang karakter apa yang dapat digunakan dalam SSID (IEEE Std 802.11 ™ -2012)
  • Beberapa batasan berdasarkan produk
    • Beberapa batasan karakter (hanya ascii)
    • Unicode

Jadi secara teknis setiap karakter diperbolehkan dalam SSID, implementasi yang berbeda seperti Windows XP, Windows 7, vs berbagai versi Linux memungkinkan / melarang subset karakter dalam SSID.

Referensi


1
Jawaban Anda tidak sampai pada intinya: pelarian apa yang tersedia /etc/network/interfaces?
Gilles 'SANGAT berhenti menjadi jahat'

@Gilles - terima kasih, ini adalah awal hari ini di kantor, saya telah menambahkan beberapa info tambahan yang saya temukan tetapi belum ditambahkan ke A saat itu. Sebagian besar bug terkait dengan pelarian karakter untuk "wpa-ssid" & "wpa-psk".
slm

Saya tidak bisa mengatakan apakah urlencoding esid berfungsi sebagai parameter boot tetapi tidak berfungsi dalam file antarmuka.
hultqvist

@ phq - Saya tidak terkejut, ini hanya sebuah ide, dan penyandian umumnya adalah cara Anda menangani sanitasi data seperti ini di aplikasi lain, mengutipnya sepertinya satu-satunya pilihan lain, di luar menghapusnya.
slm
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.