首页
论坛
课程
招聘
[原创][分享]ghostscript 命令注入漏洞分析
2021-9-9 23:02 2566

[原创][分享]ghostscript 命令注入漏洞分析

2021-9-9 23:02
2566

最近在网上看到一个关于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

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

    b) 安装imagemagick

    1
    sudo apt install imagemagick-6.q16

    c) 运行convert转换图片

    1
    convert test.jpg test.png

    图片描述

三、漏洞分析
根据流出的poc readme 得知该漏洞并不是直接由convert触发,而是convert调用了GhostScript, GhostScript触发了该漏洞。
先找到convert调用GhostScript的地方,并观察传递的命令行参数。
在linux系统中,调用其他进程的函数无非就system,execX,popen这几个函数,所以可以在libc中对这几个函数下断点。
一段操作后并未发现断点命中,怀疑可能是先fork然后在子进程中调用。
果然命中
图片描述
根据栈回溯,找到调用fork函数的地方,并修改ip强制将ip指向子进程的空间中,找到了调用gs的地方。
图片描述
图片描述
图片描述
传递的详细命令行参数如下
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指向的文件
图片描述

 

可以看到,我们传入的命令已经被写入到了其中。
手动执行上面的命令行测试
/tmp/magick-15565RttrpTjPQ4Qb 是一个软连接,它指向/proc/self/fd/3, 由于进程不同所以需要将self替换为convert的进程id
图片描述
可以肯定该漏洞肯定是由GhostScript触发的。
现在来调试GhostScript,和前面的思路一样,既然是命令注入肯定逃不脱system, execX, popen系列的函数,所以还是在libc中将这些函数下断点等它来即可。

 

图片描述

 

可以看到在popen函数中命中了断点,并且利用’;’来执行命令。

 

查了一下GhostScript是一个开源的软件,下载了一份源码看下具体的调用逻辑,但由于太过复杂,所以只是简单的分析了下来龙去脉。

 

这里有一个数据结构,应该是根据%pipe%这个字段来调用该数据结构中的函数指针进行解析。
图片描述
pipe_fopen函数中调用了open_pipe函数指针。
图片描述
open_pipe函数指针在pipe_init函数中初始化并赋值为fs_file_open_pipe
图片描述
fs_file_open_pipe函数中调用了popen函数,这里就是漏洞的触发点。
图片描述
很明显,此处是将括号中的字符串当作文件名直接传递给了popen函数来进行执行,所以才导致该漏洞存在。 图片描述

 

另附poc生成脚本


[培训] 优秀毕业生寄语:恭喜id咸鱼炒白菜拿到远超3W月薪的offer,《安卓高级研修班》火热招生!!!

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (1)
雪    币: 152
活跃值: 活跃值 (197)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
blck四 活跃值 4天前
2
0
流批
游客
登录 | 注册 方可回帖
返回