ghostscript 命令注入漏洞分析

admin 2021年9月28日17:59:22评论142 views字数 2275阅读7分35秒阅读模式

ghostscript 命令注入漏洞分析

本文为看雪论坛优秀文章
看雪论坛作者ID:。_879907


最近在网上看到一个关于ghostscript软件的一个poc生成脚本,看了下生成的poc感觉应该挺简单的,随手分析下,该漏洞目前在野。


漏洞信息


1、漏洞简述
• 漏洞名称:无
• 漏洞编号:无
• 漏洞类型:命令注入
• 漏洞影响:远程命令执行
• CVSS评分:无
• 利用难度:简单
• 基础权限:不需要

2、组件概述

ghostscript是一款图像浏览工具。ghostscript能够查看以及打印PS、EPS、PDF格式的文件。适用于Unix、Mac OS X、VMS、Windows、OS/2和Mac OS classic等操作系统的使用。


3、漏洞影响

Ghostscript9.50, 基于Ghostscript的三方库和工具。
其他版本不详,未测试。




漏洞复现


1、环境搭建

Ubuntu20.4


2、复现过程

a) 使用提供的poc生成脚本生成poc

python '/home/hua/桌面/IM-RCE-via-GhostScript-9.5.py' 'touch the_poc' '/home/hua/桌面/test.jpg'

b) 安装imagemagick
sudo apt install imagemagick-6.q16

c) 运行convert转换图片
convert test.jpg test.png
ghostscript 命令注入漏洞分析



漏洞分析


根据流出的poc readme 得知该漏洞并不是直接由convert触发,而是convert调用了GhostScript, GhostScript触发了该漏洞。

先找到convert调用GhostScript的地方,并观察传递的命令行参数。

在linux系统中,调用其他进程的函数无非就system,execX,popen这几个函数,所以可以在libc中对这几个函数下断点。

一段操作后并未发现断点命中,怀疑可能是先fork然后在子进程中调用。
果然命中。
ghostscript 命令注入漏洞分析
根据栈回溯,找到调用fork函数的地方,并修改ip强制将ip指向子进程的空间中,找到了调用gs的地方。
ghostscript 命令注入漏洞分析
ghostscript 命令注入漏洞分析
ghostscript 命令注入漏洞分析
传递的详细命令行参数如下
gs -sstdout=%stderr -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 -sDEVICE=pngalpha -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -r72x72 -g612x792 -dEPSCrop -sOutputFile=/tmp/magick-15565sSaJTfcgWCk7%d -f/tmp/magick-15565gqAGdyB3qGD9 -f/tmp/magick-15565RttrpTjPQ4Qb
 

其中最关键的参数是/tmp/magick-15565RttrpTjPQ4Qb指向的文件。
ghostscript 命令注入漏洞分析

可以看到,我们传入的命令已经被写入到了其中。

手动执行上面的命令行测试。

/tmp/magick-15565RttrpTjPQ4Qb 是一个软连接,它指向/proc/self/fd/3, 由于进程不同所以需要将self替换为convert的进程id。
ghostscript 命令注入漏洞分析
可以肯定该漏洞肯定是由GhostScript触发的。

现在来调试GhostScript,和前面的思路一样,既然是命令注入肯定逃不脱system、execX、popen系列的函数,所以还是在libc中将这些函数下断点等它来即可。
 
ghostscript 命令注入漏洞分析
 
可以看到在popen函数中命中了断点,并且利用’;’来执行命令。
 
查了一下GhostScript是一个开源的软件,下载了一份源码看下具体的调用逻辑,但由于太过复杂,所以只是简单的分析了下来龙去脉。
 
这里有一个数据结构,应该是根据%pipe%这个字段来调用该数据结构中的函数指针进行解析。
ghostscript 命令注入漏洞分析
pipe_fopen函数中调用了open_pipe函数指针。
ghostscript 命令注入漏洞分析
open_pipe函数指针在pipe_init函数中初始化并赋值为fs_file_open_pipe。
ghostscript 命令注入漏洞分析
fs_file_open_pipe函数中调用了popen函数,这里就是漏洞的触发点。
ghostscript 命令注入漏洞分析
很明显,此处是将括号中的字符串当作文件名直接传递给了popen函数来进行执行,所以才导致该漏洞存在。 ghostscript 命令注入漏洞分析

另附poc生成脚本(可点击文末阅读原文前往下载附件)。



ghostscript 命令注入漏洞分析 


看雪ID:。_879907

https://bbs.pediy.com/user-home-848410.htm

*本文由看雪论坛 。_879907 原创,转载请注明来自看雪社区



ghostscript 命令注入漏洞分析

官网:https://www.bagevent.com/event/6334937


ghostscript 命令注入漏洞分析


# 往期推荐

1. 某设备注册加密分析

2. 16位实模式切换32位保护模式过程详解

3.CVE-2011-0104 Excel TOOLBARDEF Record栈溢出漏洞分析与利用

4. 高Glibc版本下的堆骚操作解析

5.新人PWN堆Heap总结off-by-null专场

6. CVE-2012-3569 VMware OVF Tool格式化字符串漏洞分析



ghostscript 命令注入漏洞分析
公众号ID:ikanxue
官方微博:看雪安全
商务合作:[email protected]



ghostscript 命令注入漏洞分析

球分享

ghostscript 命令注入漏洞分析

球点赞

ghostscript 命令注入漏洞分析

球在看



ghostscript 命令注入漏洞分析

点击“阅读原文”,了解更多!

相关推荐: 诸子云·分享汇 | 第一季精华回顾

诸子云社群自成立以来,北京、上海、深圳、武汉、成都/西南、杭州、厦门、南京、广州等地分会持续举办各类活动,有主题沙龙,有名企参访,也有线上分享。持续进行的这些活动,给会员创造了极好的见面、交流、学习、互助的机会,得到大家一致的好评和热烈的反响。9月起,诸子云分…

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年9月28日17:59:22
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   ghostscript 命令注入漏洞分析https://cn-sec.com/archives/552997.html

发表评论

匿名网友 填写信息