name: "impacket"
command: "python3"
args:
  - "-c"
  - |
    import json
    import shlex
    import subprocess
    import sys

    if len(sys.argv) < 2:
        sys.stderr.write("缺少Impacket脚本路径\n")
        sys.exit(1)

    script_path = sys.argv[1]
    args_raw = sys.argv[2] if len(sys.argv) > 2 else ""
    extra = sys.argv[3] if len(sys.argv) > 3 else ""

    cmd = [script_path]

    if args_raw:
        parsed = []
        try:
            candidate = json.loads(args_raw)
            if isinstance(candidate, list):
                parsed = [str(item) for item in candidate]
            elif isinstance(candidate, str):
                parsed = shlex.split(candidate)
        except (json.JSONDecodeError, ValueError):
            parsed = shlex.split(args_raw)
        cmd.extend(parsed)

    if extra:
        cmd.extend(shlex.split(extra))

    proc = subprocess.run(cmd, capture_output=True, text=True)
    if proc.stdout:
        sys.stdout.write(proc.stdout)
    if proc.stderr:
        sys.stderr.write(proc.stderr)
    sys.exit(proc.returncode)
enabled: true
short_description: "Impacket 网络协议工具集，用于网络协议攻击和横向移动"
description: |
  Impacket 是一个 Python 工具集，用于处理网络协议，常用于渗透测试和横向移动。

  **主要功能：**
  - SMB 协议攻击
  - Kerberos 协议攻击
  - RPC 协议攻击
  - 远程命令执行
  - 凭证转储
  - 票据传递攻击

  **常用工具：**
  - psexec: 远程命令执行
  - smbexec: SMB 远程执行
  - wmiexec: WMI 远程执行
  - secretsdump: 凭证转储
  - getTGT: Kerberos 票据获取

  **使用场景：**
  - 横向移动
  - 凭证转储
  - 远程命令执行
  - 后渗透测试

  **注意事项：**
  - 需要 Python 环境
  - 需要相应的凭据
  - 仅用于授权的安全测试
  - 工具路径通常在 /usr/share/doc/python3-impacket/examples/ 或通过 pip 安装
parameters:
  - name: "script"
    type: "string"
    description: "Impacket 脚本路径，例如 '/usr/share/doc/python3-impacket/examples/psexec.py'"
    required: true
    position: 0
    format: "positional"
  - name: "args"
    type: "string"
    description: "脚本参数（JSON数组或空格分隔字符串）"
    required: false
    default: ""
    position: 1
    format: "positional"
  - name: "additional_args"
    type: "string"
    description: |
      额外的impacket参数。用于传递未在参数列表中定义的impacket选项。

      **示例值：**
      - 根据工具特性添加常用参数示例

      **注意事项：**
      - 多个参数用空格分隔
      - 确保参数格式正确，避免命令注入
      - 此参数会直接追加到命令末尾
    required: false
    default: ""
    position: 2
    format: "positional"
