一个路由器的WebShell 利用方法
在路由中,除TPlink、Tenda等型号之外,现在基本基于Pandora之类的开源类unix系统。
在这里,是一个典型的webshell执行漏洞。
linux shell中,”|” 是管道符,表示一个管道的意思,可以理解为东西从管道的一边流向另外一边。
举个例子,利用ps命令查看linux运行的进程,但是获取了整整几页的数据,我需要用正则表达式的工具过滤。像这样:
1 | root@localhost ~]# ps aux | 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注入都是类似这样的漏洞