前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Siri终于可以帮我浇花了

Siri终于可以帮我浇花了

作者头像
物联网安全小编
发布2020-06-30 16:20:00
5800
发布2020-06-30 16:20:00
举报
文章被收录于专栏:物联网IOT安全物联网IOT安全

之前公众号刚申请的时候就写了一篇文章,是一个关于远程浇花的想法,想了很久都没去实现,最近端午放假就做了一下,程序可能有很多漏洞?大佬们手下留情。先上视频:

来看一下整个系统的接线图,主要就是ESP8266和继电器的连接。

接下来看看原理图,本来想使用MQTT协议,无奈太菜只好用python起个flask,然后使用ESP的HTTP模块请求云服务监测是否有任务需要执行。

具体的代码如下:

ESP8266芯片<init.lua>文件代码:

代码语言:javascript
复制
light = 4
flowerControlPin = 1
gpio.mode(light,gpio.OUTPUT)
gpio.mode(flowerControlPin,gpio.OUTPUT)

--Flower Timer (close Flower control Pin)
FlowerTimer = tmr.create()
FlowerTimer:alarm(5000,tmr.ALARM_SEMI,function() 
    gpio.write(light,gpio.HIGH) 
    gpio.write(flowerControlPin,gpio.LOW) 
    print("stop.....") 
end)
FlowerTimer:stop()

-- main
function main()
    dofile("server.lua")
end

wifi.eventmon.register(wifi.eventmon.STA_GOT_IP, function(AcquiredInfo)
------------------------------------------------------------
    print("\nSTA - GOT IP".."\nStation IP: "..AcquiredInfo.IP..
    "\nSubnet mask: "..AcquiredInfo.netmask..
    "\nGateway IP: "..AcquiredInfo.gateway)
    main()
------------------------------------------------------------
end)

dofile("wificfg.lua") -- waiting WiFi connect

ESP8266芯片<wificfg.lua>文件代码:

代码语言:javascript
复制
----------------------------------
--[[WIFI config SSID PASSWORD]]--

wifi.setmode(wifi.STATION)
wifi.sta.config({ssid="ssid",pwd="mimamima"})
wifi.sta.connect()

ESP8266芯片<server.lua>文件代码:

代码语言:javascript
复制
----------------------------------
--[[ HTTP server config page  ]]--

joburl = "http://1.1.1.1:8000/getjob"

function getjob(code,data)
    if (code < 0) then
      print("HTTP request failed")
    else
        if (data=="watertheflower") then
            gpio.write(light,gpio.LOW)
            gpio.write(flowerControlPin,gpio.HIGH)
            FlowerTimer:start()
            print("start.....")
        else
            print(data)
        end
    end
end

function doJob()
    print("Hi I am runing")
    http.get(joburl, nil, getjob)
end

JobTimer = tmr.create()
JobTimer:alarm(2000,tmr.ALARM_AUTO,doJob)
JobTimer:stop()
JobTimer:start()

服务器端python代码:

代码语言:javascript
复制
from flask import Flask
import time

app = Flask(__name__)

task = False
lastwatertheflower = 0
authentication = "asdf1234"


def setTask():
    global task
    global lastwatertheflower
    lastwatertheflower = int(time.time())
    if task == False:
        task = True

def undoTask():
    global task
    if task == True:
        task = False

@app.route('/assigntask/<password>')
def assigntask(password):
    if password != authentication:
        return "faild"
    now = int(time.time())
    if now-lastwatertheflower > 3600:
        setTask()
        data = 'success'
    else:
        data = "faild"
    return data


@app.route('/getjob')
def getjob():
    if task:
        undoTask()
        return 'watertheflower'
    else:
        return 'nothing'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8000, debug=True)

iPhone快捷指令:

代码总共加起来都没到200行,本来想使用AES加密一下时间戳和指令,但是无奈找不到iPhone快捷执行的JSBox怎么用?。

当然也可以使用server酱的TalkAdmin来控制,直接将web地址填入WebHook即可

仅供给大家提供一个好玩的思路,在这个远程浇花的系统中可能存在漏洞点如下:

1.客户端-服务器明文传输,可能导致重放攻击、密钥泄漏

2.服务器-终端设备明文传输,可能导致重放攻击、任意用户控制终端设备(是说其他人可以随便给我浇花么?)

欢迎找到其他漏洞的小伙伴在下方留言哇!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 物联网IOT安全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档