From 80e69c1ae151ad6956a1ed3f3312e50c3fe61f2f Mon Sep 17 00:00:00 2001 From: hunterino-sec <41126746+hunterino-sec@users.noreply.github.com> Date: Sat, 16 May 2026 15:44:57 +0200 Subject: [PATCH] Payload fileupload possibility added --- src/components/PayloadPanel/CreatePayloadModal.tsx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/components/PayloadPanel/CreatePayloadModal.tsx b/src/components/PayloadPanel/CreatePayloadModal.tsx index bc0ed0d..a43fa2d 100644 --- a/src/components/PayloadPanel/CreatePayloadModal.tsx +++ b/src/components/PayloadPanel/CreatePayloadModal.tsx @@ -164,6 +164,14 @@ interface Command { // ── Helpers ──────────────────────────────────────────── +// Mythic stores file_extension without a leading dot (e.g. "exe", "bin"). +// Join cleanly so "apollo" + "exe" = "apollo.exe", and a value like ".exe" +// also works without doubling. +function defaultFilename(name: string, ext?: string): string { + if (!ext) return name + return ext.startsWith('.') ? `${name}${ext}` : `${name}.${ext}` +} + function coerce(value: string, type: string): unknown { switch (type) { case 'Number': @@ -570,7 +578,7 @@ function Configure({ const [os, setOs] = useState(initialConfig?.os ?? osList[0] ?? 'Windows') const [description, setDescription] = useState(initialConfig?.description ?? '') const [filename, setFilename] = useState( - initialConfig?.filename ?? `${type.name}${type.file_extension ?? ''}` + initialConfig?.filename ?? defaultFilename(type.name, type.file_extension) ) const [buildParams, setBuildParams] = useState>(() => { if (initialConfig?.buildParams && Object.keys(initialConfig.buildParams).length > 0) @@ -706,7 +714,7 @@ function Configure({ const uploaded = fileMapRef.current.size > 0 ? await uploadAll() : { build: {}, c2: {} } if (!uploaded) return const def = buildDefinition({ - type, os, description, filename: filename || `${type.name}${type.file_extension ?? ''}`, + type, os, description, filename: filename || defaultFilename(type.name, type.file_extension), buildParams: { ...buildParams, ...uploaded.build }, c2Name: selectedC2, c2Profile, c2Params: { ...c2Params, ...uploaded.c2 },