破绽描绘
CVE-2021-4045 是一个命令注入破绽,允许在 TP-Link Tapo c200 IP 摄像机中远程执行代码。它影响 1.1.16 Build 211209 Rel 之前的一切固件版本。37726N 由于对用户输入的检查缺乏uhttpd,这是设备的主要二进制文件之一
影响版本
1.1.16 Build 211209 Rel 之前的一切固件版本
破绽剖析
函数exec_and_read_json用于popen执行命令:
xec_and_read_json由 2 个未命名的函数运用,我将其命名为set_language和wifi_connect。他们分别处置言语和wifi配置(显然)。wifi_connect似乎解析单引号('),但是,set_language没有。这意味着假如我们能够控制set_language函数的输入,我们就能够胜利地注入我们本人的命令。
函数set_language由uh_slp_proto_request我之前提到的函数运用,它将从用户接纳到的一些解析数据作为输入传送。
要解析用户数据,uh_slp_proto_request请检查它能否是有效的 JSON 对象。然后,它得到一个由 key 标识的字符串值"method"和一个由 key 标识的字典值"params"(至少我是这么以为的,由于 Ghidra 无法解析函数调用,但似乎以这种方式工作)。依据选择的办法,uh_slp_proto_request选择将被调用的函数。
因而,经过发送{"method": "setLanguage", "params":{}}我们胜利调用set_language函数并{}作为language_json参数传送。然后,在内部set_language,language_json对象被转换为字符串并直接插入"ubus call system_state_audio set_language '%s'"执行。
经过提交{"method": "setLanguage", "params": {"payload": "'; touch poc;'"}},ubus call system_state_audio set_language '{"payload": "'; touch poc;'"}'将被执行,其中实践包含 3 个命令:ubus call system_state_audio set_language '{"payload": "', touch poc, 和'"}'. 第二个给我们完好的代码执行。
如今,uh_slp_proto_request由另一个管理一切恳求的未命名函数运用,我将其命名为main_server_function. 假如恳求有效(不超越最大长度,依据效劳器配置运用 http 或 https 等),main_server_function检查 URL 能否包含/cgi-bin/luci或/web-static. 假如没有,uh_slp_proto_request则调用。
经过猜想并向相机发送几个恳求,我们能够检查所运用的数据uh_slp_proto_request能否是常规 POST 数据。/因而,假如我们运用先前的有效负载发送 POST 恳求,uh_slp_proto_request将处置此数据,调用set_language并且我们的有效负载将被注入到执行的命令中exec_and_get_result。
如您所见,我没有提及任何有关身份考证的内容,由于setLanguage无需登录即可调用办法。这允许任何用户只需一个未经历证的恳求即可完整控制相机。
破绽应用
POC
https://github.com/hacefresko/CVE-2021-4045-PoC
感谢您的来访,获取更多精彩文章请收藏本站。
![](https://www.gyzsq.com/wp-content/uploads/2022/07/9259adea4619.gif)
1 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
2 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
3 本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
![头像](/wp-content/themes/zibll/img/avatar-default.png)