1.注入点的发现:
探索路由器的诊断功能时,联想到练习过的DVWA 命令注入靶场。这类调用操作系统命令实现的功能,若对于用户输入验证不足,很容易引入命名注入风险。基于这种猜测,开始了这次实践。
1.采用命令注入常规思路,通过 ; 进行命令拼接。
2.由于后端采用仅采用正则匹配的方式回显ping包结果,故用户注入部分无法回显有效信息。
3.联想Time Base盲注的思路,采用时延的方式,确定注入点的存在。
2.漏洞利用:
难点1: busybox功能裁剪:
反弹shell 最常用的nc命令没有,所幸有一个比较好用的wget.
难点2: 只读文件系统/www路径无法写入
# cat /proc/mounts
rootfs / rootfs rw 0 0
/dev/root / squashfs rw 0 0
proc /proc proc rw 0 0
none /var ramfs rw 0 0
none /tmp ramfs rw 0 0
none /media ramfs rw 0 0
none /dev/pts devpts rw 0 0
/dev/mtdblock5 /etc/config jffs2 rw 0 0
none /var ramfs rw 0 0
none /tmp ramfs rw 0 0
none /media ramfs rw 0 0
由于squashfs 只读文件系统的原因,/www web UI的路径下并不可以写入web shell。
解决办法:
命令注入,通过现有busybox 残留的wget命令,向/tmp路径下上传完整的busybox,再利用其nc命令实现 getshell
命令注入,上传完整版本busybox:
https://busybox.net/downloads/binaries/1.21.1/
如上图所示,注入wget命令,给路由器下载完整版的busybox,然后啥都可以干了(web服务是root账户启的)。
接下来nc反弹shell,整个路由器就是你的了。
3.总结:
1.渗透测试或者探索性测试时,望、问、听、窃打开五观来感知被测对象的一些反馈(ping包时延来判断注入点)。
2.渗透测试或者探索性测试时,我们要善于将被测对象的不可见,变为可见(nc反弹)。
3.善于一点及面逐步扩大战果(上传完整版busybox,扩大漏洞影响面)。