/**
* Exploitation tools
*/
import {
SearchsploitSearchInput,
SearchsploitExamineInput,
MsfvenomInput,
} from "../schemas/exploit.schemas.js";
import { ToolResult } from "../types.js";
import { executeCommand } from "../utils/executor.js";
import { formatExecutionResult, formatErrorMessage } from "../utils/formatter.js";
import { validateCVE, validateTarget, validatePath } from "../utils/validator.js";
import { TOOL_PATHS } from "../constants.js";
/**
* Searchsploit - search exploit database
*/
export async function searchsploitSearch(input: SearchsploitSearchInput): Promise<ToolResult> {
if (input.cve && !validateCVE(input.cve)) {
return formatErrorMessage("Invalid CVE", `CVE '${input.cve}' is not in valid format`);
}
const args: string[] = [];
if (input.cve) {
args.push("--cve", input.cve);
} else {
if (input.exact) {
args.push("--exact");
}
args.push(input.query);
}
if (input.platform) {
args.push("--platform", input.platform);
}
if (input.type) {
args.push("--type", input.type);
}
const result = await executeCommand(TOOL_PATHS.searchsploit || "searchsploit", args, {
timeout: 30000,
});
return formatExecutionResult(result);
}
/**
* Searchsploit examine - view exploit details
*/
export async function searchsploitExamine(input: SearchsploitExamineInput): Promise<ToolResult> {
const args: string[] = ["-x"];
if (!input.color) {
args.push("--colour");
}
args.push(input.exploit_id);
const result = await executeCommand(TOOL_PATHS.searchsploit || "searchsploit", args, {
timeout: 30000,
});
return formatExecutionResult(result);
}
/**
* Msfvenom - generate payloads
*/
export async function msfvenom(input: MsfvenomInput): Promise<ToolResult> {
if (!validateTarget(input.lhost)) {
return formatErrorMessage("Invalid lhost", `LHOST '${input.lhost}' is not a valid IP or hostname`);
}
if (input.output_file && !validatePath(input.output_file)) {
return formatErrorMessage("Invalid output file path", "Path contains invalid characters");
}
const args: string[] = [];
// Payload
args.push("-p", input.payload);
// LHOST and LPORT
args.push(`LHOST=${input.lhost}`);
args.push(`LPORT=${input.lport}`);
// Format
args.push("-f", input.format);
// Architecture
if (input.arch) {
args.push("-a", input.arch);
}
// Platform
if (input.platform) {
args.push("--platform", input.platform);
}
// Encoder
if (input.encoder) {
args.push("-e", input.encoder);
args.push("-i", String(input.iterations));
}
// Output file
if (input.output_file) {
args.push("-o", input.output_file);
}
const result = await executeCommand(TOOL_PATHS.msfvenom || "msfvenom", args, {
timeout: 60000,
});
return formatExecutionResult(result);
}