Vivotek远程栈溢出漏洞复现
环境搭建
附件下载:http://download.vivotek.com/downloadfile/downloads/firmware/cc8160firmware.zip
固件解包
binwalk -Me .pkg文件
解包完后,发现文件系统存在路径为_CC8160-VVTK-0113b.flash.pkg.extracted/_31.extracted/_rootfs.img.extracted/squashfs-root
查找漏洞程序httpd:sudo find . -name httpd
查看文件类型:file httpd
32位的arm程序,小端,动态链接,没有符号表
运行服务
将qemu-arm-static
复制到当下目录;cp /usr/bin/qemu-arm-static .
由于是arm架构下的程序,我们不能直接运行,需要使用qemu模拟。
依次输入以下指令,设置好运行环境:
程序挂载 |
这里解释一下chroot . ./qemu-arm-static ./usr/sbin/httpd
:这个命令的含义是在当前目录(.
)下使用chroot
命令将根目录切换为当前目录,然后在这个新的根目录中执行qemu-arm-static ./usr/sbin/httpd
这个命令。
报错1:
当我运行服务会报错:
我们用IDA定位一下报错位置,用shift + F12
,字符串搜索功能。
发现我们没有v1
这个文件,在文件系统中查看一下:这是一个软链接,指向../mnt/flash/etc/conf.d
,但是我们发现根本就没有../mnt/flash/etc/conf.d
经过一系列尝试发现,etc
被存放在了其他包里:
将其中的etc
文件夹复制到文件系统下的 /mnt/flash/
中覆盖原本的etc
文件夹。
报错2:
iot@attifyos ~/D/a/_/_/_/squashfs-root> sudo chroot . ./qemu-arm-static ./usr/sbin/httpd |
同样的方法在IDA中定位错误:gethostbyname
:
这部分主要涉及两个函数。gethostname():返回本地主机的标准主机名,如果函数成功,则返回 0。如果发生错误则返回 -1。gethostbyname():用域名或主机名获取IP地址。
Linux 操作系统的 hostname 是一个 kernel 变量,可以通过 hostname 命令来查看本机的 hostname。也可以直接 cat /proc/sys/kernel/hostname
查看。
我们只需要用echo
将二者改为一致就行:可以看到再次运行chroot
就没有报错了。