一、漏洞简介
了解无线安全的同学应该都知道基于ESP8266的wifi killer固件,可以用来辅助无线渗透测试,其自带了一个web管理界面,其中有一个wifi ap列表,就是这个列表存在xss注入。
ESP8266大概长这个样子,我买的是可以用micro usb线连接电脑的,那个xss漏洞就在这玩意儿里面:
此漏洞仅存在于wifi killer张馆长汉化版,审计过官方原版的代码发现是没有此漏洞的,影响范围较小,并且难以利用,故公开。
二、挖洞过程
买了个ESP8266,让店家给刷好wifi killer固件邮过来的,午休的时候在办公室想体验一下,刚拿出手机查看wifi列表注意到有个wifi名字类似于下面这种的:
root <img />
具体名字我记不得了,大概就是这种模式,我觉得挺有意思的,估计这是哪位巨佬在测试wifi名注入吗?
然后我就想到wifi killer的web界面上也有一个wifi ap列表,于是便想试试那个列表是不是能够被注入,当我在wifi killer的管理界面上切换到wifi ap列表的时候,我发现这个热点的wifi名字只显示出了前面的root?
虽然我反应比较迟钝,但是也马上意识到了wifi名字这里有一个xss注入漏洞,接下来就是慢慢去测试payload确认一下到底能不能搞。
最开始的时候使用
<script>alert(/xss/)</script>
这种形式去测试的,但是却并没有生效,于是就去看了它前端的代码,发现是在js中拼接wifi名字然后通过innerHTML设置的到页面上的:
通过这种方式设置的script并不会被加载执行,但是可以通过设置一个img标签触发其error来绕过执行js,payload如下:
<img src=x onerror='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擦肩而过了...感谢那位不知道名字的好心人!