一个路由器的WebShell 利用方法

在路由中,除TPlink、Tenda等型号之外,现在基本基于Pandora之类的开源类unix系统。

在这里,是一个典型的webshell执行漏洞。

linux shell中,”|” 是管道符,表示一个管道的意思,可以理解为东西从管道的一边流向另外一边。

举个例子,利用ps命令查看linux运行的进程,但是获取了整整几页的数据,我需要用正则表达式的工具过滤。像这样:

1
2
3
root@localhost ~]# ps aux | grep httpd   输出结果为:

root 21642 0.0 0.0 103340 900 pts/0 S+ 08:25 0:00 grep httpd

由此就能看出作用,|为把前面的数据输出给后面的命令,进一步操作。

漏洞的利用
路由的定时重启功能,是利用linux的shell命令进行定时重启。例如20.17执行重启的命令:

1
shutdown -r 20:17

管理页面中,有个定时重启,假如通过网页设置为20:17,传递给shell的变量就是:$reboot_time=”20:17″,也就是路由器执行的命令为shutdown -r $reboot_time ,但是通过修改web参数,我们可以随意定义变量$reboot_time的值,假如我们定义$reboot_time=”20.17 | ping www.whosts.cn”,那么真正调用变量后,命令就变成了:

1
shutdown -r 20.17 | ping www.whosts.cn

我们可以把ping命令替换为nc反弹shell或者其他命令,假如没有合理的权限分配,甚至不需要提权。

由于没有过滤,后面的命令可以正常执行,这样就通过web,获得了shell。当然,使用&&可以获得相同的效果,不再赘述。

获取了shell,可想而知的,这台设备就被控制了。

这个原理很简单,很多sql注入都是类似这样的漏洞