当前位置: 首页 > article >正文

cve_2018_16509(ghostscript)漏洞复现报告

名称: vulfocus/ghostscript-cve_2018_16509:latest ​ 描述: ​ GhostScript 被许多图片处理库所使用如 ImageMagick、Python PIL 等默认情况下这些库会根据图片的内容将其分发给不同的处理方法其中就包括 GhostScript。 ​ 在 9.24 之前的 Artifex Ghostscript 中发现了一个问题。能够提供精心制作的 PostScript 以使用“管道”指令执行代码的攻击者可能会在处理 /invalidaccess 异常期间使用不正确的“特权恢复”检查 ​ ​0x00 漏洞基本信息CVE 编号CVE-2018-16509漏洞类型沙盒绕过 / 远程代码执行 (RCE)受影响组件Ghostscript 9.24 之前的所有版本成因利用restores操作中的内存不一致性通过制造一个伪造的异常状态使内核在自同步过程中将LockSafetyParams从1误写为0。Ghostscript 的安全模式-dSAFER依赖于内存中的一个布尔值LockSafetyParams。当其为1时系统禁止修改敏感设备属性如输出路径OutputFile。当其为0时系统允许执行包括%pipe%管道重定向在内的高权限指令。0x01 必备知识点一、 PostScript 语法特性逆波兰表示法 (RPN)PostScript 是基于堆栈Stack的语言。它的核心逻辑是操作对象在前操作符在后。堆栈操作 (Stack-based)当你看到save或legal时解释器会把它们压入堆栈。当你看到undef或restore时解释器会从堆栈顶部取出数据并执行。可执行数组 (Procedure)语法{ ... }特性大括号内的内容不会立即执行而是作为一个整体过程压入堆栈。控制流 (Control Flow)语法stopped特性它执行前面的过程。如果过程报错它会在堆栈压入true否则压入false。语法if特性从堆栈取出一个布尔值如果是true则执行前面的代码块。名称与字典 (Name Dictionary)语法/name特性带斜杠的是“名称”相当于变量名不带斜杠的是执行该名称对应的命令二、沙盒看了维基有一段话挺有意思的“在沙盒页编辑的内容就像在沙滩上所写的文字涨潮时就会消失。同样沙盒中所写的内容不久也会消去。”意思就是修改沙盒只停留在一个虚拟层没有写入硬件一旦程序关闭一切修改都没了结合本此漏洞在Ghostscript中沙河开启只能处理数学运算和绘图指令。不能执行系统命令%pipe%ls”0x02 前期准备准备代码1.怎么绕过沙箱—— 在处理异常的时候趁机拿到高权限并”保存“最后执行代码%!PS userdict /setpagedevice undef save legal { null restore } stopped { pop } if { legal } stopped { pop } if restore mark /OutputFile (%pipe%ls / /tmp/success cat /tmp/success) currentdevice putdeviceprops一开始我们的沙盒状态LockSafetyParams truesave是保存当前所有状态。legal是调用预定义的页面尺寸设置legal会调用到setpagedevice调用的顺序是 字典栈中从上到下 最上面的是userdict最下面才是systemdict。但是后面 { legal } stopped { pop } if ,此时legal需要用的是系统字典中的setpagedevice并不是userdict里面的。[因为原生的、拥有底层操作权限的setpagedevice在执行时才会用底层的 C 函数gs_setpagedevice而此函数在legal处理设备重置时如果发现当前的null restore异常它会尝试自动同步设备状态那么我们就在硬件中储存了处理异常需要用到的高权限了]所以一开始我们可以undef删除掉用户字典中的setpagedevice他就只能拿到systemdic里面的setpagedevice了。由于null不能被restore所以stopped往堆栈里面扔了一个trueif拿到堆栈中的true执行pop清除掉推展顶部报错信息让程序继续进行此时权限上升了此时再legal一下强制调用设备页面重置由于刚刚pop后仍处于异常状态模式还没有处理完错误刚刚pop只是掩盖了报错信息也就是还是高权限状态而legal触发的setpagedevice会去修改页面参数legal只修改页面大小其他都照搬以前的配置由于刚刚处理异常时沙盒状态就是关着的legal后拿到的状态还是关着的沙盒状态。{ ... } stopped { pop } if掩盖其他报错再次保证程序继续运行restore看似是恢复原样实际上只能恢复 PostScript 层面的变量和堆栈之前沙盒关闭的配置没有被恢复却被”保存“起来了。然后进行命令输出mark /OutputFile (%pipe%命令) currentdevice putdevicepropsmark: 在堆栈中放置一个标记点。/OutputFile: 定义一个键Key(%pipe%...):pipe文件前缀会把后面的内容当成命令交给系统输出currentdevice: 将当前设备对象压入堆栈。putdeviceprops: 消费掉堆栈中从mark开始的所有数据将其作为属性应用到设备上。payloadPostScript (PS)%!PS userdict /setpagedevice undef save legal { null restore } stopped { pop } if { legal } stopped { pop } if restore mark /OutputFile (%pipe%ls / /tmp/success cat /tmp/success) currentdevice putdeviceprops​0x03 复现过程构造带有代码的图片 上传即可查看flag

相关文章:

cve_2018_16509(ghostscript)漏洞复现报告

名称: vulfocus/ghostscript-cve_2018_16509:latest​描述: ​GhostScript 被许多图片处理库所使用,如 ImageMagick、Python PIL 等,默认情况下这些库会根据图片的内容将其分发给不同的处理方法,其中就包括 GhostScript。​在 9.24 之前的 Ar…...

Windows内核驱动手动映射终极指南:KDMapper完全攻略

Windows内核驱动手动映射终极指南:KDMapper完全攻略 【免费下载链接】kdmapper KDMapper is a simple tool that exploits iqvw64e.sys Intel driver to manually map non-signed drivers in memory 项目地址: https://gitcode.com/gh_mirrors/kd/kdmapper 还…...

CSL编辑器:重新定义学术文献样式编辑的智能方案

CSL编辑器:重新定义学术文献样式编辑的智能方案 【免费下载链接】csl-editor cslEditorLib - A HTML 5 library for searching and editing CSL styles 项目地址: https://gitcode.com/gh_mirrors/csl/csl-editor 你是否曾为学术论文的引用格式而烦恼&#x…...

傲梅分区助手 使用教程:免安装硬盘分区管理工具

一、工具简介 傲梅分区助手是一款功能强大的硬盘分区管理工具,支持无损数据调整分区大小、合并/拆分分区、迁移系统到 SSD 等操作。 安装包下载:https://pan.xunlei.com/s/VOpm6nKehfUHH-MDyIbMIhGkA1?pwdpm5g# 二、使用步骤 1. 解压工具包​ 右键点…...

LangChain揭秘:AI“大脑”+“手脚”+“记忆”,OpenClaw如何轻松打造智能助手?

LangChain是一个Python开发框架,用于定义AI流程、集成RAG(知识库)和Skills(工具箱),控制逻辑。RAG提供信息,Skills执行任务。OpenClaw是集成RAG和Skills的完整AI助手框架,具备记忆和…...

保姆级教程:用两张RTX 4090本地搭建企业级TranslateGemma翻译引擎

保姆级教程:用两张RTX 4090本地搭建企业级TranslateGemma翻译引擎 1. 为什么选择本地化翻译系统? 在当今全球化的工作环境中,高效准确的翻译工具已成为刚需。但常见的在线翻译服务存在几个痛点: 数据隐私风险:敏感技…...

为什么要做 GeoPipeAgent那

指令替换 项目需求:将加法指令替换为减法 项目目录如下 /MyProject ├── CMakeLists.txt # CMake 配置文件 ├── build/ #构建目录 │ └── test.c #测试编译代码 └── mypass2.cpp # pass 项目代码 一,测试代码示例 test.c // test.c #includ…...

Spring Cloud进阶--分布式权限校验OAuth控

一、核心问题及解决方案(按踩坑频率排序) 问题 1:误删他人持有锁——最基础也最易犯的漏洞 成因:释放锁时未做身份校验,直接执行 DEL 命令删除键。典型场景:服务 A 持有锁后,业务逻辑耗时超过锁…...

RAG 还是 Lucene:私有化部署客服系统的 AI 知识库架构选型窗

在之前的文章中,我们花了大量的篇幅,从记录后端pod真实ip开始说起,然后引入envoy,再解决了各种各样的需求:配置自动重载、流量劫持、sidecar自动注入,到envoy的各种能力:熔断、流控、分流、透明…...

IINA:macOS原生级视频播放体验的现代化解决方案

IINA:macOS原生级视频播放体验的现代化解决方案 【免费下载链接】iina The modern video player for macOS. 项目地址: https://gitcode.com/gh_mirrors/iin/iina 在macOS平台上寻找一款既能提供专业级播放功能,又保持系统原生体验的视频播放器&a…...

如何永久保存你的数字记忆:WeChatMsg聊天记录导出与年度报告生成终极指南

如何永久保存你的数字记忆:WeChatMsg聊天记录导出与年度报告生成终极指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub…...

被忽视的Windows网络加速技巧:禁用QoS保留带宽到底有没有用?(附gpedit.msc完整配置)

被忽视的Windows网络加速技巧:禁用QoS保留带宽到底有没有用? 在Windows系统优化的江湖传说中,"禁用QoS保留带宽提升网速"这个技巧已经流传了十几年。从Windows XP时代开始,各种技术论坛和优化指南都会提到这个"秘技…...

从Java转行大模型应用,Dify 本地部署和可视化智能体创建全流程(低代码 + 脚本)

Dify 是开源低代码 AI 应用开发平台,支持Docker 一键本地私有化部署,通过可视化拖拽即可创建智能体,无需复杂编码,还可通过脚本自动化部署与智能体配置。以下是完整实操方案:一、本地部署(Docker Compose&a…...

化工园区智能一体化巡检平台

平台以数字孪生、AI智能研判、多模态感知为核心技术底座,整合全域数据,实现"一张屏管园区"的高效管控。数据可视化大屏:实时呈现园区设备状态、巡检轨迹、隐患告警等核心信息,支持3D园区模型缩放、旋转,精准…...

嵌入式图形渲染的跨平台解决方案:Adafruit GFX Library技术深度解析

嵌入式图形渲染的跨平台解决方案:Adafruit GFX Library技术深度解析 【免费下载链接】Adafruit-GFX-Library Adafruit GFX graphics core Arduino library, this is the core class that all our other graphics libraries derive from 项目地址: https://gitcode…...

YOLO 11 + Qwen3.5打造一站式视频智能监控分析平台

🧠 整体思路:大小模型协同这套方案的核心在于“大小模型协同”:YOLO11 (小模型 - 感知层):负责底层的实时感知,快速完成目标检测、追踪等任务。Qwen3.5 (大模型 - 认知层):对YOLO11提取的关键信息进行深度理…...

Spring Boot 4.0 Agent-Ready架构调优:为什么93%的团队在-Dspring.aot.enabled=true后反而变慢?3个反模式+2个HotFix配置

第一章:Spring Boot 4.0 Agent-Ready架构性能调优导论Spring Boot 4.0 引入了原生支持 Java Agent 的运行时增强能力,标志着 JVM 应用可观测性与性能治理进入新阶段。Agent-Ready 并非仅指兼容字节码增强工具,而是通过标准化的 Instrumentati…...

银河麒麟系统(arm64)下基于CMake的GEOS3.8.2编译实战指南

1. 银河麒麟系统与GEOS编译背景 最近在国产化替代的大背景下,越来越多的开发者开始接触银河麒麟操作系统。作为一款基于Linux的国产系统,银河麒麟在arm64架构上的表现相当出色,但同时也带来了新的挑战——很多常用的开源库并没有现成的arm64…...

OpenClaw权限管理:千问3.5-35B-A3B-FP8操作边界精细控制方案

OpenClaw权限管理:千问3.5-35B-A3B-FP8操作边界精细控制方案 1. 为什么需要权限管理? 去年夏天,我差点因为一个自动化脚本酿成大祸。当时我让OpenClaw帮我整理财务表格,结果因为模型误解了指令,差点删除了整个账本目…...

LabView用户登录程序:密码登录系统、用户管理、Access数据库制作

labview用户登录程序,可以直接用做密码登录系统,用户管理,实用强,使用方便,采用access数据库制作。最近在搞一个LabVIEW的项目,需要实现一个用户登录系统,顺便还带点用户管理的功能。琢磨了一下…...

行式存储(Row-based Storage)和列式存储(Column-base Storage)简介蚜

1. 哑铃图是什么? 哑铃图(Dumbbell Plot),有时也称为DNA图或杠铃图,是一种用于比较两个相关数据点的可视化图表。 它源于人们对更有效数据比较方式的持续探索。 在传统的时间序列比较中,我们通常使用两条…...

Midscene.js:用自然语言重新定义UI自动化,告别繁琐代码时代

Midscene.js:用自然语言重新定义UI自动化,告别繁琐代码时代 【免费下载链接】midscene AI-powered, vision-driven UI automation for every platform. 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene 还在为编写复杂的UI自动化脚本…...

打破CAD数据孤岛:ACadSharp如何革新.NET平台的工程文件处理范式

打破CAD数据孤岛:ACadSharp如何革新.NET平台的工程文件处理范式 【免费下载链接】ACadSharp C# library to read/write cad files like dxf/dwg. 项目地址: https://gitcode.com/gh_mirrors/ac/ACadSharp 在数字化设计与智能制造深度融合的时代,工…...

Ostrakon-VL-8B商业应用:自动识别促销堆头高度/位置/物料完整性标准

Ostrakon-VL-8B商业应用:自动识别促销堆头高度/位置/物料完整性标准 1. 引言 如果你在零售行业工作,特别是负责门店运营或市场促销,一定遇到过这样的烦恼:公司花大价钱设计的促销堆头,到了门店执行时却五花八门。有的…...

【Debug】从 cv2 导入失败到 numpy + BLAS 根因:一次 conda 虚拟环境重建实录

从 cv2 导入失败到 numpy BLAS 根因:一次 conda 虚拟环境重建实录 表面上看,这是一次 cv2 导入失败的问题;真正追到最后,根因却落在 numpy 初始化底层 BLAS 运行库的阶段。更重要的是,这个问题并不是简单的“环境脏了…...

OpenClaw智能写作:Qwen3.5-9B驱动的草稿生成与优化

OpenClaw智能写作:Qwen3.5-9B驱动的草稿生成与优化 1. 为什么需要AI写作助手? 作为一个经常需要输出技术文档的开发者,我发现自己总在重复同样的困境:面对空白文档时大脑一片空白,写完后又陷入无休止的语法检查和格式…...

Java AES/ECB/PKCS5Padding加解密实战:从JCE配置到Base64/Hex输出

Java AES/ECB/PKCS5Padding加解密实战:从JCE配置到Base64/Hex输出 在数据安全日益重要的今天,加密技术已成为开发者必备的技能之一。AES(Advanced Encryption Standard)作为目前最常用的对称加密算法,因其安全性和高效…...

6G这事,我研究了3个月,说点不太好听的实话

🧠《6G这事,我研究了3个月,说点不太好听的实话》🪓一、先泼冷水:大部分人根本不需要6G这话可能不太讨喜,但先说结论: 👉 90%的人,用不上6G你现在用手机: 刷视…...

告别if-else地狱!在Godot 4.4里用状态机重构你的2D角色控制器

告别if-else地狱!在Godot 4.4里用状态机重构你的2D角色控制器 当你的2D平台游戏角色开始拥有跑跳、攻击、滑铲等复杂动作时,脚本里层层嵌套的if-else判断会像野草般疯长。上周我接手一个项目,发现玩家控制器脚本竟有200多行条件判断——添加新…...

Wonder3D:2-3分钟从单张图片生成高质量3D模型的完整指南

Wonder3D:2-3分钟从单张图片生成高质量3D模型的完整指南 【免费下载链接】Wonder3D Single Image to 3D using Cross-Domain Diffusion for 3D Generation 项目地址: https://gitcode.com/gh_mirrors/wo/Wonder3D 单图生成3D模型一直是计算机视觉领域的挑战性…...