kgretzky/evilginx2 · error

set custom parameters for the child phishlet using format 'p

Error message

set custom parameters for the child phishlet using format 'param1=value1 param2=value2'

What it means

When creating a child phishlet from a template phishlet (`phishlets create <parent> <name> ...`), every extra argument from position 3 onward must be a `key=value` custom parameter. If any argument lacks an `=` sign, handlePhishlets returns this error because the template parameter cannot be parsed.

Source

Thrown at core/terminal.go:578

	return fmt.Errorf("invalid syntax: %s", args)
}

func (t *Terminal) handlePhishlets(args []string) error {
	pn := len(args)

	if pn >= 3 && args[0] == "create" {
		pl, err := t.cfg.GetPhishlet(args[1])
		if err == nil {
			params := make(map[string]string)

			var create_ok bool = true
			if pl.isTemplate {
				for n := 3; n < pn; n++ {
					val := args[n]

					sp := strings.Index(val, "=")
					if sp == -1 {
						return fmt.Errorf("set custom parameters for the child phishlet using format 'param1=value1 param2=value2'")
					}
					k := val[:sp]
					v := val[sp+1:]

					params[k] = v

					log.Info("adding parameter: %s='%s'", k, v)
				}
			}

			if create_ok {
				child_name := args[1] + ":" + args[2]
				err := t.cfg.AddSubPhishlet(child_name, args[1], params)
				if err != nil {
					log.Error("%v", err)
				} else {
					t.cfg.SaveSubPhishlets()
					log.Info("created child phishlet: %s", child_name)

View on GitHub (pinned to 4c0988a1d9)

Solutions

  1. Append `=value` to each parameter token: `phishlets create <parent> <child> param1=value1 param2=value2`
  2. Check the parent phishlet's required template parameters (see phishlet YAML custom: section) and supply all of them
  3. Quote parameters containing spaces or special shell characters

Example fix

// before
phishlets create o365 corp domain
// after
phishlets create o365 corp domain=corp.example.com
Defensive patterns

Strategy: validation

Validate before calling

func validateCreateArgs(extra []string) error {
    for _, v := range extra {
        if !strings.Contains(v, "=") {
            return fmt.Errorf("parameter %q must be key=value", v)
        }
    }
    return nil
}

Type guard

func isKeyValue(s string) bool { return strings.Index(s, "=") > 0 }

Try / catch

if err := t.handlePhishlets(args); err != nil {
    if strings.Contains(err.Error(), "param1=value1") {
        log.Info("usage: phishlets create <parent> <child> key=value ...")
    } else { log.Error("%v", err) }
}

Prevention

When it happens

Trigger: Running `phishlets create <template-name> <child-name> <param>` where one or more parameter tokens after the child name do not contain `=` (e.g. `phishlets create o365 mycorp domain` instead of `domain=mycorp.com`).

Common situations: Operator forgot values for template-required parameters; used space instead of `=`; copied a command where shell splitting removed the `=`; passed only the child name for a template phishlet that requires params.

Related errors


AI-assisted analysis of kgretzky/evilginx2@4c0988a1d9 (2026-09-05). Data as JSON: /api/errors/87920760a6768f62. Report an issue: GitHub.