training.import_portswigger
Import PortSwigger Academy lab solutions to train vulnerability testing skills with payloads and step-by-step guidance for security practice.
Instructions
Import training data from PortSwigger Academy lab solution
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| labName | Yes | Name of the PortSwigger lab | |
| labUrl | No | URL of the lab | |
| vulnerabilityType | Yes | Type of vulnerability | |
| solution | Yes | Solution data with payloads and steps |
Implementation Reference
- src/tools/training.ts:252-280 (handler)The handler function that implements the core logic for importing PortSwigger Academy lab solutions as training data. It loops through payloads in the solution, calls saveTrainingData for each, and returns the import results.async (params: any): Promise<ToolResult> => { try { const solution = params.solution; const payloads = solution.payloads || []; const results: any[] = []; for (const payload of payloads) { const id = await saveTrainingData( 'portswigger', params.labName, params.vulnerabilityType, params.labUrl || '', payload.payload || payload, solution.successPattern || 'success', solution.failurePattern || 'error', { solution, labUrl: params.labUrl }, solution.score || 7 ); results.push(id); } return formatToolResult(true, { imported: results.length, ids: results, }); } catch (error: any) { return formatToolResult(false, null, error.message); } }
- src/tools/training.ts:240-252 (schema)Input schema defining the parameters for the tool: labName, labUrl (opt), vulnerabilityType, and solution object.description: 'Import training data from PortSwigger Academy lab solution', inputSchema: { type: 'object', properties: { labName: { type: 'string', description: 'Name of the PortSwigger lab' }, labUrl: { type: 'string', description: 'URL of the lab' }, vulnerabilityType: { type: 'string', description: 'Type of vulnerability' }, solution: { type: 'object', description: 'Solution data with payloads and steps' }, }, required: ['labName', 'vulnerabilityType', 'solution'], }, }, async (params: any): Promise<ToolResult> => {
- src/tools/training.ts:238-282 (registration)The server.tool call that registers the 'training.import_portswigger' tool with its schema and handler function.'training.import_portswigger', { description: 'Import training data from PortSwigger Academy lab solution', inputSchema: { type: 'object', properties: { labName: { type: 'string', description: 'Name of the PortSwigger lab' }, labUrl: { type: 'string', description: 'URL of the lab' }, vulnerabilityType: { type: 'string', description: 'Type of vulnerability' }, solution: { type: 'object', description: 'Solution data with payloads and steps' }, }, required: ['labName', 'vulnerabilityType', 'solution'], }, }, async (params: any): Promise<ToolResult> => { try { const solution = params.solution; const payloads = solution.payloads || []; const results: any[] = []; for (const payload of payloads) { const id = await saveTrainingData( 'portswigger', params.labName, params.vulnerabilityType, params.labUrl || '', payload.payload || payload, solution.successPattern || 'success', solution.failurePattern || 'error', { solution, labUrl: params.labUrl }, solution.score || 7 ); results.push(id); } return formatToolResult(true, { imported: results.length, ids: results, }); } catch (error: any) { return formatToolResult(false, null, error.message); } } );