本文为看雪论坛优秀文章
看雪论坛作者ID:。_879907
一
漏洞信息
ghostscript是一款图像浏览工具。ghostscript能够查看以及打印PS、EPS、PDF格式的文件。适用于Unix、Mac OS X、VMS、Windows、OS/2和Mac OS classic等操作系统的使用。
Ghostscript9.50, 基于Ghostscript的三方库和工具。
其他版本不详,未测试。
二
漏洞复现
Ubuntu20.4
a) 使用提供的poc生成脚本生成poc
python '/home/hua/桌面/IM-RCE-via-GhostScript-9.5.py' 'touch the_poc' '/home/hua/桌面/test.jpg'
sudo apt install imagemagick-6.q16
convert test.jpg test.png

三
漏洞分析
先找到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中将这些函数下断点等它来即可。


pipe_fopen函数中调用了open_pipe函数指针。

open_pipe函数指针在pipe_init函数中初始化并赋值为fs_file_open_pipe。

fs_file_open_pipe函数中调用了popen函数,这里就是漏洞的触发点。

很明显,此处是将括号中的字符串当作文件名直接传递给了popen函数来进行执行,所以才导致该漏洞存在。

看雪ID:。_879907
https://bbs.pediy.com/user-home-848410.htm
官网:https://www.bagevent.com/event/6334937

# 往期推荐
1. 某设备注册加密分析


球分享

球点赞

球在看

点击“阅读原文”,了解更多!
诸子云社群自成立以来,北京、上海、深圳、武汉、成都/西南、杭州、厦门、南京、广州等地分会持续举办各类活动,有主题沙龙,有名企参访,也有线上分享。持续进行的这些活动,给会员创造了极好的见面、交流、学习、互助的机会,得到大家一致的好评和热烈的反响。9月起,诸子云分…
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论