ESP8266 wifi 漢化版固件界面存在xss注入
### 漏洞簡介
了解無線安全的同學應該都知道基于ESP8266的wifi killer固件,可以用來輔助無線滲透測試,其自帶了一個web管理界面,其中有一個wifi ap列表,就是這個列表存在xss注入。
ESP8266大概長這個樣子,我買的是可以用micro usb線連接電腦的,那個xss漏洞就在這玩意兒里面:

此漏洞僅存在于wifi killer張館長漢化版,審計過官方原版的代碼發現是沒有此漏洞的,影響范圍較小,并且難以利用,故公開。
### 挖洞過程
買了個ESP8266,讓店家給刷好wifi killer固件郵過來的,午休的時候在辦公室想體驗一下,剛拿出手機查看wifi列表注意到有個wifi名字類似于下面這種的:
root
具體名字我記不得了,大概就是這種模式,我覺得挺有意思的,估計這是哪位巨佬在測試wifi名注入嗎?
然后我就想到wifi killer的web界面上也有一個wifi ap列表,于是便想試試那個列表是不是能夠被注入,當我在wifi killer的管理界面上切換到wifi ap列表的時候,我發現這個熱點的wifi名字只顯示出了前面的root?
雖然我反應比較遲鈍,但是也馬上意識到了wifi名字這里有一個xss注入漏洞,接下來就是慢慢去測試payload確認一下到底能不能搞。
最開始的時候使用
alert(/xss/)
這種形式去測試的,但是卻并沒有生效,于是就去看了它前端的代碼,發現是在js中拼接wifi名字然后通過innerHTML設置的到頁面上的:

通過這種方式設置的script并不會被加載執行,但是可以通過設置一個img標簽觸發其error來繞過執行js,payload如下:
'alert(/!/)'>
用手機開個熱點,熱點的名字用上面這個payload:

然后再在wifi killer的管理界面刷新wifi列表,成功使用wifi名字觸發了彈窗:

但是wifi的名字,也就是SSID,協議規定了它不能超過32位,這就很尷尬,幾乎沒有利用空間,最簡單的payload就快占滿了...
請教了303大佬有沒有什么好的利用方案:

成吧,好歹也算是個利用方式,這樣當我發現我的wifi列表中出現wifi killer默認的熱點名字zhangguanzhang的時候,我就啟動一個payload熱點,不圖別的,我就是嚇嚇他....畢竟我也做不了別的,啊哈哈哈哈
### 官方原版是如何做的呢
后來我還去看了原版的wifi killer的這部分邏輯:
https://github.com/SpacehuhnTech/esp8266_deauther/blob/v2/web_interface/js/scan.js
它的源代碼里是有轉義的:

跟進去看一下轉義:

人家對尖括號進行了轉義。
### 總結
以后凡是用戶輸入回顯在頁面的字段都試一試,審計一下相關代碼,萬一有注入呢...
如果不是辦公室那個奇怪的熱點名字提醒了我,我可能就與這個雞肋的xss擦肩而過了...感謝那位不知道名字的好心人!