diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..d66f8ce --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "docs"] + path = docs + url = https://github.com/synfron/ReshaperForBurp.docs.git diff --git a/docs b/docs new file mode 160000 index 0000000..5a9f3a3 --- /dev/null +++ b/docs @@ -0,0 +1 @@ +Subproject commit 5a9f3a3ad01672efda3faa4bcb62b08f1ce78b62 diff --git a/docs/Examples.md b/docs/Examples.md deleted file mode 100644 index cc6a0c9..0000000 --- a/docs/Examples.md +++ /dev/null @@ -1,129 +0,0 @@ -# Example Usage - -- [Use a value from one HTTP message in a following HTTP message](#tip1) -- [Redirect a request to a different server](#tip2) -- [Change a value in a returned response](#tip3) -- [Auto-respond to requests without first sending a request to an external server (response mocking)](#tip4) -- [Drop a request so it is not sent to an external server (Works on all supported tools: Proxy, Repeater, Intruder, Scanner, Target, Extender (other extensions))](#tip5) -- [Share or backup/restore Global Variables and Rules](#tip6) - - -**Use a value from one HTTP message in a following HTTP message:** - -In the example below, we are taking the `Authorization` header from `www.example.org` requests, storing it in a variable, and setting it on `www.example.com` requests. - -1. Open the `HTTP Rules` tab. -2. Create a Rule. -3. Set the `Rule Name` to `Get www.example.org Authorization`. -4. Add When -> `Event Direction` (if not already added). -5. Change `Event Direction` to `Request`. -6. Add When -> `Matches Text`. -7. Change `Message Value` to `Destination Address`. -8. Set `Match Text` to `www.example.org`. -9. Add Then -> `Set Variable`. -10. Change `Source Message Value` to `Request Header`. -11. Set `Source Identifier` to `Authorization`. -12. Set `Destination Variable Name` to `exampleAuth`. -13. At the bottom right of the window, check `Enabled` and click `Save`. -14. Create another Rule. -15. Set the `Rule Name` to `Set www.example.com Authorization`. -16. Add When -> `Event Direction` (if not already added). -17. Change `Event Direction` to `Request`. -18. Add When -> `Matches Text`. -19. Change `Message Value` to `Destination Address`. -20. Set `Match Text` to `www.example.com`. -21. Add Then -> `Set Value`. -22. {% raw %}Set `Text` to `{{global:exampleAuth}}`.{% endraw %} -23. Change `Destination Message Value` to `Request Header`. -24. Set `Destination Identifier` to `Authorization`. -25. At the bottom right of the window, check `Enabled` and click `Save`. - - -**Redirect a request to a different server:** - -In the example below, we are redirecting from `www.example.org` to `www.example.com` by setting the URL and using a message variable to make sure we keep the page path. - -1. Open the `HTTP Rules` tab. -2. Create or open a Rule. -3. Set a `Rule Name` and add other Whens and Thens as needed. -4. Add When -> `Event Direction` (if not already added). -5. Change `Event Direction` to `Request`. -6. Add Then -> `Set Value`. -7. Set `Text` to `https://www.example.com{{message:httprequesturi}}`. -8. Change `Destination Message Value` to `URL`. -9. At the bottom right of the window, check `Enabled` and click `Save`. - - - -**Change a value in a returned response:** - -In the example below, we tell the browser to allow any origin by overriding the `Access-Control-Allow-Origin` response header. - -1. Open the `HTTP Rules` tab. -2. Create or open a Rule. -3. Set a `Rule Name` and add other Whens and Thens as needed. -4. Add When -> `Event Direction` (if not already added). -5. Change `Event Direction` to `Response`. -6. Add Then -> `Set Value`. -7. Set `Text` to `*`. -8. Change `Destination Message Value` to `Request Header`. -9. Set `Destination Identifier` to `Access-Control-Allow-Origin`. -10. At the bottom right of the window, check `Enabled` and click `Save`. - - - -**Auto-respond to requests without first sending a request to an external server (response mocking):** - -1. Open the `Global Variables` tab. -2. Add a new Variable. -3. Set a `Variable Name`. We will use `mockResponse` for this example. -4. Paste the full response text (including headers and body) in `Variable Text`. -4. Open the `HTTP Rules` tab. -5. Create or open a Rule. -6. Set a `Rule Name` and add other Whens and Thens as needed. -7. Add When -> `Event Direction` (if not already added). -8. Change `Event Direction` to `Request`. -9. Add Then -> `Set Event Direction`. -10. Change `Event Direction` to `Response`. -11. Add Then -> `Set Value`. -12. {% raw %}Set `Text` to `{{global:mockResponse}}`.{% endraw %} -13. Change `Destination Message Value` to `Response Message`. -14. At the bottom right of the window, check `Enabled` and click `Save`. - - -**Drop a request so that it is not sent to an external server:** - -The example of drop requests below works on all supported tools: Proxy, Repeater, Intruder, Scanner, Target, Extender (other extensions). - -1. Open the `Settings` tab. -2. Ensure the tool is selected under `Capture Traffic From:` -3. Open the `HTTP Rules` tab. -4. Create or open a Rule. -5. Set a `Rule Name` and add other Whens and Thens as needed. -6. Add When -> `Event Direction` (if not already added). -7. Change `Event Direction` to `Request`. -8. (Optional) If requests are being received from multiple tools: - 1. Add When -> `From Tool`. - 2. Set `Tool` to the tool the request will come from. -8. Add Then -> `Drop`. -9. Check `Drop Message`. -10. At the bottom right of the window, check `Enabled` and click `Save`. - - -**Share or backup/restore Global Variables and Rules:** - -Export the relevant items: -1. Open the `Global Variables` tab. -2. Ensure relevant all variables are checked as `Persistent` and saved. -3. Open the `Settings` tab. -4. In the `Export` section, click `Refresh Lists`. -5. Check the checkboxes next to the names of relevant Rules and Global Variables that you want to export. Uncheck any others. -6. Click `Export Data`. -7. Choose a save location and name for the export data file. - -Import the exported data file: -1. Open the `Settings` tab. -2. (Optional) In the `Import` section, Check `Override Duplicates` to overwrite any Rules or Global Variables that have the same name as those to be imported. -3. Click `Import Data`. -4. Navigate to the location of the export data file, select it, and click `Open`. - diff --git a/docs/ExportSettings.schema.json b/docs/ExportSettings.schema.json deleted file mode 100644 index 0e41ef1..0000000 --- a/docs/ExportSettings.schema.json +++ /dev/null @@ -1,2217 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-04/schema#", - "title": "Export Settings", - "type": "object", - "additionalProperties": false, - "properties": { - "rules": { - "type": "array", - "items": { - "$ref": "#/definitions/Rule" - } - }, - "webSocketRules": { - "type": "array", - "items": { - "$ref": "#/definitions/Rule" - } - }, - "variables": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/definitions/Variable" - }, - { - "$ref": "#/definitions/ListVariable" - } - ] - } - } - }, - "definitions": { - "Rule": { - "type": "object", - "additionalProperties": false, - "properties": { - "whens": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/definitions/WhenContentType" - }, - { - "$ref": "#/definitions/WhenEventDirection" - }, - { - "$ref": "#/definitions/WhenFromTool" - }, - { - "$ref": "#/definitions/WhenHasEntity" - }, - { - "$ref": "#/definitions/WhenInScope" - }, - { - "$ref": "#/definitions/WhenMatchesText" - }, - { - "$ref": "#/definitions/WhenMessageType" - }, - { - "$ref": "#/definitions/WhenMimeType" - }, - { - "$ref": "#/definitions/WhenProxyName" - }, - { - "$ref": "#/definitions/WhenRepeat" - }, - { - "$ref": "#/definitions/WhenWebSocketEventDirection" - } - ] - } - }, - "thens": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/definitions/ThenBreak" - }, - { - "$ref": "#/definitions/ThenBuildHttpMessage" - }, - { - "$ref": "#/definitions/ThenComment" - }, - { - "$ref": "#/definitions/ThenDelay" - }, - { - "$ref": "#/definitions/ThenDeleteValue" - }, - { - "$ref": "#/definitions/ThenDeleteVariable" - }, - { - "$ref": "#/definitions/ThenDrop" - }, - { - "$ref": "#/definitions/ThenEvaluate" - }, - { - "$ref": "#/definitions/ThenHighlight" - }, - { - "$ref": "#/definitions/ThenIntercept" - }, - { - "$ref": "#/definitions/ThenLog" - }, - { - "$ref": "#/definitions/ThenParseHttpMessage" - }, - { - "$ref": "#/definitions/ThenPrompt" - }, - { - "$ref": "#/definitions/ThenRepeat" - }, - { - "$ref": "#/definitions/ThenRunProcess" - }, - { - "$ref": "#/definitions/ThenRunRules" - }, - { - "$ref": "#/definitions/ThenRunScript" - }, - { - "$ref": "#/definitions/ThenSaveFile" - }, - { - "$ref": "#/definitions/ThenSendMessage" - }, - { - "$ref": "#/definitions/ThenSendRequest" - }, - { - "$ref": "#/definitions/ThenSendTo" - }, - { - "$ref": "#/definitions/ThenSet" - }, - { - "$ref": "#/definitions/ThenSetEncoding" - }, - { - "$ref": "#/definitions/ThenSetEventDirection" - }, - { - "$ref": "#/definitions/ThenSetValue" - }, - { - "$ref": "#/definitions/ThenSetVariable" - } - ] - } - }, - "enabled": { - "type": "boolean" - }, - "autoRun": { - "type": "boolean" - }, - "name": { - "type": "string" - } - }, - "required": [ - "enabled", - "autoRun" - ] - }, - "WhenContentType": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".WhenContentType" - ], - "default": ".WhenContentType" - }, - "negate": { - "type": "boolean" - }, - "useOrCondition": { - "type": "boolean" - }, - "contentType": { - "$ref": "#/definitions/ContentType" - } - }, - "title": ".WhenContentType", - "required": [ - "@class", - "negate", - "useOrCondition" - ] - }, - "ContentType": { - "type": "object", - "additionalProperties": false, - "properties": { - "names": { - "type": "array", - "items": { - "type": "string" - } - }, - "ids": { - "type": "array", - "items": { - "type": "integer" - } - }, - "flags": { - "type": "integer" - } - }, - "required": [ - "flags" - ] - }, - "WhenEventDirection": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".WhenEventDirection" - ], - "default": ".WhenEventDirection" - }, - "negate": { - "type": "boolean" - }, - "useOrCondition": { - "type": "boolean" - }, - "dataDirection": { - "type": "string", - "enum": [ - "Request", - "Response" - ] - } - }, - "title": ".WhenEventDirection", - "required": [ - "@class", - "negate", - "useOrCondition" - ] - }, - "WhenFromTool": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".WhenFromTool" - ], - "default": ".WhenFromTool" - }, - "negate": { - "type": "boolean" - }, - "useOrCondition": { - "type": "boolean" - }, - "tool": { - "type": "string", - "enum": [ - "Proxy", - "Repeater", - "Intruder", - "Target", - "Scanner", - "Extender", - "Session", - "WebSockets" - ] - } - }, - "title": ".WhenFromTool", - "required": [ - "@class", - "negate", - "useOrCondition" - ] - }, - "WhenHasEntity": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".WhenHasEntity" - ], - "default": ".WhenHasEntity" - }, - "negate": { - "type": "boolean" - }, - "useOrCondition": { - "type": "boolean" - }, - "messageValue": { - "type": "string", - "enum": [ - "SourceAddress", - "DestinationAddress", - "DestinationPort", - "HttpProtocol", - "Url", - "WebSocketMessage", - "HttpRequestMessage", - "HttpRequestStatusLine", - "HttpRequestMethod", - "HttpRequestUri", - "HttpRequestUriPath", - "HttpRequestUriQueryParameters", - "HttpRequestUriQueryParameter", - "HttpRequestHeaders", - "HttpRequestHeader", - "HttpRequestCookie", - "HttpRequestBody", - "HttpResponseMessage", - "HttpResponseStatusLine", - "HttpResponseStatusCode", - "HttpResponseStatusMessage", - "HttpResponseHeaders", - "HttpResponseHeader", - "HttpResponseCookie", - "HttpResponseBody" - ] - }, - "identifier": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - } - }, - "title": ".WhenHasEntity", - "required": [ - "@class", - "negate", - "useOrCondition" - ] - }, - "WhenInScope": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".WhenInScope" - ], - "default": ".WhenInScope" - }, - "negate": { - "type": "boolean" - }, - "useOrCondition": { - "type": "boolean" - }, - "url": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - } - }, - "title": ".WhenInScope", - "required": [ - "@class", - "negate", - "useOrCondition" - ] - }, - "WhenMatchesText": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".WhenMatchesText" - ], - "default": ".WhenMatchesText" - }, - "negate": { - "type": "boolean" - }, - "useOrCondition": { - "type": "boolean" - }, - "identifier": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "identifierPlacement": { - "type": "string", - "enum": [ - "First", - "Last" - ] - }, - "sourceText": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "matchText": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "messageValue": { - "type": "string", - "enum": [ - "SourceAddress", - "DestinationAddress", - "DestinationPort", - "HttpProtocol", - "Url", - "WebSocketMessage", - "HttpRequestMessage", - "HttpRequestStatusLine", - "HttpRequestMethod", - "HttpRequestUri", - "HttpRequestUriPath", - "HttpRequestUriQueryParameters", - "HttpRequestUriQueryParameter", - "HttpRequestHeaders", - "HttpRequestHeader", - "HttpRequestCookie", - "HttpRequestBody", - "HttpResponseMessage", - "HttpResponseStatusLine", - "HttpResponseStatusCode", - "HttpResponseStatusMessage", - "HttpResponseHeaders", - "HttpResponseHeader", - "HttpResponseCookie", - "HttpResponseBody" - ] - }, - "messageValueType": { - "type": "string", - "enum": [ - "Text", - "Json", - "Html", - "Params" - ] - }, - "messageValuePath": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "matchType": { - "type": "string", - "enum": [ - "Equals", - "Contains", - "BeginsWith", - "EndsWith", - "Regex" - ] - }, - "ignoreCase": { - "type": "boolean" - }, - "useMessageValue": { - "type": "boolean" - } - }, - "title": ".WhenMatchesText", - "required": [ - "@class", - "negate", - "useOrCondition", - "ignoreCase", - "useMessageValue" - ] - }, - "WhenMessageType": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".WhenMessageType" - ], - "default": ".WhenMessageType" - }, - "negate": { - "type": "boolean" - }, - "useOrCondition": { - "type": "boolean" - }, - "messageType": { - "type": "string", - "enum": [ - "Text", - "Binary" - ] - } - }, - "title": ".WhenMessageType", - "required": [ - "@class", - "negate", - "useOrCondition" - ] - }, - "WhenMimeType": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".WhenMimeType" - ], - "default": ".WhenMimeType" - }, - "negate": { - "type": "boolean" - }, - "useOrCondition": { - "type": "boolean" - }, - "mimeType": { - "$ref": "#/definitions/MimeType" - } - }, - "title": ".WhenMimeType", - "required": [ - "@class", - "negate", - "useOrCondition" - ] - }, - "MimeType": { - "type": "object", - "additionalProperties": false, - "properties": { - "names": { - "type": "array", - "items": { - "type": "string" - } - }, - "flags": { - "type": "integer" - } - }, - "required": [ - "flags" - ] - }, - "WhenProxyName": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".WhenProxyName" - ], - "default": ".WhenProxyName" - }, - "negate": { - "type": "boolean" - }, - "useOrCondition": { - "type": "boolean" - }, - "proxyName": { - "type": "string" - } - }, - "title": ".WhenProxyName", - "required": [ - "@class", - "negate", - "useOrCondition" - ] - }, - "WhenRepeat": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".WhenRepeat" - ], - "default": ".WhenRepeat" - }, - "negate": { - "type": "boolean" - }, - "useOrCondition": { - "type": "boolean" - }, - "subGroupCount": { - "type": "integer" - }, - "listVariableSource": { - "type": "string", - "enum": [ - "Event", - "Global", - "Session", - "EventList", - "GlobalList", - "SessionList", - "Message", - "Macro", - "Annotation", - "File", - "Special", - "CookieJar" - ] - }, - "listVariableName": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "successCriteria": { - "type": "string", - "enum": [ - "AnyMatch", - "AllMatch" - ] - }, - "entryVariableName": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - } - }, - "title": ".WhenRepeat", - "required": [ - "@class", - "negate", - "useOrCondition", - "subGroupCount" - ] - }, - "WhenWebSocketEventDirection": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".WhenWebSocketEventDirection" - ], - "default": ".WhenWebSocketEventDirection" - }, - "negate": { - "type": "boolean" - }, - "useOrCondition": { - "type": "boolean" - }, - "dataDirection": { - "type": "string", - "enum": [ - "Server", - "Client" - ] - } - }, - "title": ".WhenWebSocketEventDirection", - "required": [ - "@class", - "negate", - "useOrCondition" - ] - }, - "ThenBreak": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".ThenBreak" - ], - "default": ".ThenBreak" - }, - "breakType": { - "$ref": "#/definitions/RuleResponse" - } - }, - "title": ".ThenBreak", - "required": [ - "@class" - ] - }, - "RuleResponse": { - "type": "object", - "additionalProperties": false, - "properties": { - "name": { - "type": "string" - }, - "flags": { - "type": "integer" - } - }, - "required": [ - "flags" - ] - }, - "ThenBuildHttpMessage": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".ThenBuildHttpMessage" - ], - "default": ".ThenBuildHttpMessage" - }, - "dataDirection": { - "type": "string", - "enum": [ - "Request", - "Response" - ] - }, - "starterHttpMessage": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "messageValueSetters": { - "type": "array", - "items": { - "$ref": "#/definitions/MessageValueSetter" - } - }, - "destinationVariableSource": { - "type": "string", - "enum": [ - "Event", - "Global", - "Session", - "EventList", - "GlobalList", - "SessionList", - "Message", - "Macro", - "Annotation", - "File", - "Special", - "CookieJar" - ] - }, - "destinationVariableName": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "itemPlacement": { - "type": "string", - "enum": [ - "First", - "Last", - "Index", - "All", - "Add" - ] - }, - "delimiter": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "index": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - } - }, - "title": ".ThenBuildHttpMessage", - "required": [ - "@class" - ] - }, - "MessageValueSetter": { - "type": "object", - "additionalProperties": false, - "properties": { - "destinationMessageValue": { - "type": "string", - "enum": [ - "SourceAddress", - "DestinationAddress", - "DestinationPort", - "HttpProtocol", - "Url", - "WebSocketMessage", - "HttpRequestMessage", - "HttpRequestStatusLine", - "HttpRequestMethod", - "HttpRequestUri", - "HttpRequestUriPath", - "HttpRequestUriQueryParameters", - "HttpRequestUriQueryParameter", - "HttpRequestHeaders", - "HttpRequestHeader", - "HttpRequestCookie", - "HttpRequestBody", - "HttpResponseMessage", - "HttpResponseStatusLine", - "HttpResponseStatusCode", - "HttpResponseStatusMessage", - "HttpResponseHeaders", - "HttpResponseHeader", - "HttpResponseCookie", - "HttpResponseBody" - ] - }, - "destinationIdentifier": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "destinationIdentifierPlacement": { - "type": "string", - "enum": [ - "First", - "Last", - "New", - "All", - "Only" - ] - }, - "sourceText": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - } - } - }, - "ThenComment": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".ThenComment" - ], - "default": ".ThenComment" - }, - "text": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - } - }, - "title": ".ThenComment", - "required": [ - "@class" - ] - }, - "ThenDelay": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".ThenDelay" - ], - "default": ".ThenDelay" - }, - "delay": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - } - }, - "title": ".ThenDelay", - "required": [ - "@class" - ] - }, - "ThenDeleteValue": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".ThenDeleteValue" - ], - "default": ".ThenDeleteValue" - }, - "messageValue": { - "type": "string", - "enum": [ - "SourceAddress", - "DestinationAddress", - "DestinationPort", - "HttpProtocol", - "Url", - "WebSocketMessage", - "HttpRequestMessage", - "HttpRequestStatusLine", - "HttpRequestMethod", - "HttpRequestUri", - "HttpRequestUriPath", - "HttpRequestUriQueryParameters", - "HttpRequestUriQueryParameter", - "HttpRequestHeaders", - "HttpRequestHeader", - "HttpRequestCookie", - "HttpRequestBody", - "HttpResponseMessage", - "HttpResponseStatusLine", - "HttpResponseStatusCode", - "HttpResponseStatusMessage", - "HttpResponseHeaders", - "HttpResponseHeader", - "HttpResponseCookie", - "HttpResponseBody" - ] - }, - "identifier": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "identifierPlacement": { - "type": "string", - "enum": [ - "First", - "Last", - "All" - ] - } - }, - "title": ".ThenDeleteValue", - "required": [ - "@class" - ] - }, - "ThenDeleteVariable": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".ThenDeleteVariable" - ], - "default": ".ThenDeleteVariable" - }, - "targetSource": { - "type": "string", - "enum": [ - "Event", - "Global", - "Session", - "EventList", - "GlobalList", - "SessionList", - "Message", - "Macro", - "Annotation", - "File", - "Special", - "CookieJar" - ] - }, - "variableName": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "itemPlacement": { - "type": "string", - "enum": [ - "First", - "Last", - "Index", - "All" - ] - }, - "index": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - } - }, - "title": ".ThenDeleteVariable", - "required": [ - "@class" - ] - }, - "ThenDrop": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".ThenDrop" - ], - "default": ".ThenDrop" - }, - "dropMessage": { - "type": "boolean" - } - }, - "title": ".ThenDrop", - "required": [ - "@class", - "dropMessage" - ] - }, - "ThenEvaluate": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".ThenEvaluate" - ], - "default": ".ThenEvaluate" - }, - "x": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "operation": { - "type": "string", - "enum": [ - "Add", - "Subtract", - "Multiply", - "DivideBy", - "Increment", - "Decrement", - "Mod", - "Abs", - "Round", - "Equals", - "GreaterThan", - "GreaterThanOrEquals", - "LessThan", - "LessThanOrEquals" - ] - }, - "y": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "destinationVariableSource": { - "type": "string", - "enum": [ - "Event", - "Global", - "Session", - "EventList", - "GlobalList", - "SessionList", - "Message", - "Macro", - "Annotation", - "File", - "Special", - "CookieJar" - ] - }, - "destinationVariableName": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "itemPlacement": { - "type": "string", - "enum": [ - "First", - "Last", - "Index", - "All", - "Add" - ] - }, - "delimiter": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "index": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - } - }, - "title": ".ThenEvaluate", - "required": [ - "@class" - ] - }, - "ThenHighlight": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".ThenHighlight" - ], - "default": ".ThenHighlight" - }, - "color": { - "type": "string", - "enum": [ - "None", - "Red", - "Orange", - "Yellow", - "Green", - "Cyan", - "Blue", - "Pink", - "Magenta", - "Gray" - ] - } - }, - "title": ".ThenHighlight", - "required": [ - "@class" - ] - }, - "ThenIntercept": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".ThenIntercept" - ], - "default": ".ThenIntercept" - }, - "interceptResponse": { - "type": "string", - "enum": [ - "UserDefined", - "Drop", - "Disable", - "Intercept" - ] - } - }, - "title": ".ThenIntercept", - "required": [ - "@class" - ] - }, - "ThenLog": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".ThenLog" - ], - "default": ".ThenLog" - }, - "text": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - } - }, - "title": ".ThenLog", - "required": [ - "@class" - ] - }, - "ThenParseHttpMessage": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".ThenParseHttpMessage" - ], - "default": ".ThenParseHttpMessage" - }, - "dataDirection": { - "type": "string", - "enum": [ - "Request", - "Response" - ] - }, - "httpMessage": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "messageValueGetters": { - "type": "array", - "items": { - "$ref": "#/definitions/MessageValueGetter" - } - } - }, - "title": ".ThenParseHttpMessage", - "required": [ - "@class" - ] - }, - "MessageValueGetter": { - "type": "object", - "additionalProperties": false, - "properties": { - "sourceMessageValue": { - "type": "string", - "enum": [ - "SourceAddress", - "DestinationAddress", - "DestinationPort", - "HttpProtocol", - "Url", - "WebSocketMessage", - "HttpRequestMessage", - "HttpRequestStatusLine", - "HttpRequestMethod", - "HttpRequestUri", - "HttpRequestUriPath", - "HttpRequestUriQueryParameters", - "HttpRequestUriQueryParameter", - "HttpRequestHeaders", - "HttpRequestHeader", - "HttpRequestCookie", - "HttpRequestBody", - "HttpResponseMessage", - "HttpResponseStatusLine", - "HttpResponseStatusCode", - "HttpResponseStatusMessage", - "HttpResponseHeaders", - "HttpResponseHeader", - "HttpResponseCookie", - "HttpResponseBody" - ] - }, - "sourceIdentifier": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "sourceIdentifierPlacement": { - "type": "string", - "enum": [ - "First", - "Last" - ] - }, - "destinationVariableSource": { - "type": "string", - "enum": [ - "Event", - "Global", - "Session", - "EventList", - "GlobalList", - "SessionList", - "Message", - "Macro", - "Annotation", - "File", - "Special", - "CookieJar" - ] - }, - "destinationVariableName": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "itemPlacement": { - "type": "string", - "enum": [ - "First", - "Last", - "Index", - "All", - "Add" - ] - }, - "delimiter": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "index": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - } - } - }, - "ThenPrompt": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".ThenPrompt" - ], - "default": ".ThenPrompt" - }, - "description": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "starterText": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "failAfter": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "breakAfterFailure": { - "type": "boolean" - }, - "captureVariableSource": { - "type": "string", - "enum": [ - "Event", - "Global", - "Session", - "EventList", - "GlobalList", - "SessionList", - "Message", - "Macro", - "Annotation", - "File", - "Special", - "CookieJar" - ] - }, - "captureVariableName": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "itemPlacement": { - "type": "string", - "enum": [ - "First", - "Last", - "Index", - "All", - "Add" - ] - }, - "delimiter": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "index": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - } - }, - "title": ".ThenPrompt", - "required": [ - "@class", - "breakAfterFailure" - ] - }, - "ThenRepeat": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".ThenRepeat" - ], - "default": ".ThenRepeat" - }, - "subGroupCount": { - "type": "integer" - }, - "repeatCondition": { - "type": "string", - "enum": [ - "Count", - "HasNextItem", - "WhileTrue" - ] - }, - "count": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "listVariableSource": { - "type": "string", - "enum": [ - "Event", - "Global", - "Session", - "EventList", - "GlobalList", - "SessionList", - "Message", - "Macro", - "Annotation", - "File", - "Special", - "CookieJar" - ] - }, - "listVariableName": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "entryVariableName": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "booleanValue": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "maxCount": { - "type": "integer" - } - }, - "title": ".ThenRepeat", - "required": [ - "@class", - "subGroupCount", - "maxCount" - ] - }, - "ThenRunProcess": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".ThenRunProcess" - ], - "default": ".ThenRunProcess" - }, - "command": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "input": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "waitForCompletion": { - "type": "boolean" - }, - "failAfter": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "killAfterFailure": { - "type": "boolean" - }, - "failOnNonZeroExitCode": { - "type": "boolean" - }, - "breakAfterFailure": { - "type": "boolean" - }, - "captureOutput": { - "type": "boolean" - }, - "captureAfterFailure": { - "type": "boolean" - }, - "captureVariableSource": { - "type": "string", - "enum": [ - "Event", - "Global", - "Session", - "EventList", - "GlobalList", - "SessionList", - "Message", - "Macro", - "Annotation", - "File", - "Special", - "CookieJar" - ] - }, - "captureVariableName": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "itemPlacement": { - "type": "string", - "enum": [ - "First", - "Last", - "Index", - "All", - "Add" - ] - }, - "delimiter": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "index": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - } - }, - "title": ".ThenRunProcess", - "required": [ - "@class", - "waitForCompletion", - "killAfterFailure", - "failOnNonZeroExitCode", - "breakAfterFailure", - "captureOutput", - "captureAfterFailure" - ] - }, - "ThenRunRules": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".ThenRunRules" - ], - "default": ".ThenRunRules" - }, - "runSingle": { - "type": "boolean" - }, - "ruleName": { - "type": "string" - } - }, - "title": ".ThenRunRules", - "required": [ - "@class", - "runSingle" - ] - }, - "ThenRunScript": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".ThenRunScript" - ], - "default": ".ThenRunScript" - }, - "script": { - "type": "string" - }, - "maxExecutionSeconds": { - "type": "integer" - } - }, - "title": ".ThenRunScript", - "required": [ - "@class", - "maxExecutionSeconds" - ] - }, - "ThenSaveFile": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".ThenSaveFile" - ], - "default": ".ThenSaveFile" - }, - "filePath": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "text": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "encoding": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "fileExistsAction": { - "type": "string", - "enum": [ - "None", - "Append", - "Overwrite" - ] - } - }, - "title": ".ThenSaveFile", - "required": [ - "@class" - ] - }, - "ThenSendMessage": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".ThenSendMessage" - ], - "default": ".ThenSendMessage" - }, - "dataDirection": { - "type": "string", - "enum": [ - "Server", - "Client" - ] - }, - "messageType": { - "type": "string", - "enum": [ - "Text", - "Binary" - ] - }, - "message": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - } - }, - "title": ".ThenSendMessage", - "required": [ - "@class" - ] - }, - "ThenSendRequest": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".ThenSendRequest" - ], - "default": ".ThenSendRequest" - }, - "request": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "url": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "protocol": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "address": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "port": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "waitForCompletion": { - "type": "boolean" - }, - "failAfter": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "failOnErrorStatusCode": { - "type": "boolean" - }, - "breakAfterFailure": { - "type": "boolean" - }, - "captureOutput": { - "type": "boolean" - }, - "captureAfterFailure": { - "type": "boolean" - }, - "captureVariableSource": { - "type": "string", - "enum": [ - "Event", - "Global", - "Session", - "EventList", - "GlobalList", - "SessionList", - "Message", - "Macro", - "Annotation", - "File", - "Special", - "CookieJar" - ] - }, - "captureVariableName": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "itemPlacement": { - "type": "string", - "enum": [ - "First", - "Last", - "Index", - "All", - "Add" - ] - }, - "delimiter": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "index": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - } - }, - "title": ".ThenSendRequest", - "required": [ - "@class", - "waitForCompletion", - "failOnErrorStatusCode", - "breakAfterFailure", - "captureOutput", - "captureAfterFailure" - ] - }, - "ThenSendTo": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".ThenSendTo" - ], - "default": ".ThenSendTo" - }, - "sendTo": { - "type": "string", - "enum": [ - "Comparer", - "Intruder", - "Repeater", - "Spider", - "Browser" - ] - }, - "overrideDefaults": { - "type": "boolean" - }, - "host": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "port": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "protocol": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "request": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "value": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "url": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - } - }, - "title": ".ThenSendTo", - "required": [ - "@class", - "overrideDefaults" - ] - }, - "ThenSet": { - "oneOf": [ - { - "$ref": "#/definitions/ThenSetValue" - }, - { - "$ref": "#/definitions/ThenSetVariable" - } - ] - }, - "ThenSetValue": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".ThenSetValue" - ], - "default": ".ThenSetValue" - }, - "useMessageValue": { - "type": "boolean" - }, - "sourceMessageValue": { - "type": "string", - "enum": [ - "SourceAddress", - "DestinationAddress", - "DestinationPort", - "HttpProtocol", - "Url", - "WebSocketMessage", - "HttpRequestMessage", - "HttpRequestStatusLine", - "HttpRequestMethod", - "HttpRequestUri", - "HttpRequestUriPath", - "HttpRequestUriQueryParameters", - "HttpRequestUriQueryParameter", - "HttpRequestHeaders", - "HttpRequestHeader", - "HttpRequestCookie", - "HttpRequestBody", - "HttpResponseMessage", - "HttpResponseStatusLine", - "HttpResponseStatusCode", - "HttpResponseStatusMessage", - "HttpResponseHeaders", - "HttpResponseHeader", - "HttpResponseCookie", - "HttpResponseBody" - ] - }, - "sourceIdentifier": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "sourceIdentifierPlacement": { - "type": "string", - "enum": [ - "First", - "Last" - ] - }, - "sourceMessageValueType": { - "type": "string", - "enum": [ - "Text", - "Json", - "Html", - "Params" - ] - }, - "sourceMessageValuePath": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "useReplace": { - "type": "boolean" - }, - "regexPattern": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "text": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "replacementText": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "destinationMessageValueType": { - "type": "string", - "enum": [ - "Text", - "Json", - "Html", - "Params" - ] - }, - "destinationMessageValuePath": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "destinationMessageValue": { - "type": "string", - "enum": [ - "SourceAddress", - "DestinationAddress", - "DestinationPort", - "HttpProtocol", - "Url", - "WebSocketMessage", - "HttpRequestMessage", - "HttpRequestStatusLine", - "HttpRequestMethod", - "HttpRequestUri", - "HttpRequestUriPath", - "HttpRequestUriQueryParameters", - "HttpRequestUriQueryParameter", - "HttpRequestHeaders", - "HttpRequestHeader", - "HttpRequestCookie", - "HttpRequestBody", - "HttpResponseMessage", - "HttpResponseStatusLine", - "HttpResponseStatusCode", - "HttpResponseStatusMessage", - "HttpResponseHeaders", - "HttpResponseHeader", - "HttpResponseCookie", - "HttpResponseBody" - ] - }, - "destinationIdentifier": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "destinationIdentifierPlacement": { - "type": "string", - "enum": [ - "First", - "Last", - "New", - "All", - "Only" - ] - } - }, - "title": ".ThenSetValue", - "required": [ - "@class", - "useMessageValue", - "useReplace" - ] - }, - "ThenSetVariable": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".ThenSetVariable" - ], - "default": ".ThenSetVariable" - }, - "useMessageValue": { - "type": "boolean" - }, - "sourceMessageValue": { - "type": "string", - "enum": [ - "SourceAddress", - "DestinationAddress", - "DestinationPort", - "HttpProtocol", - "Url", - "WebSocketMessage", - "HttpRequestMessage", - "HttpRequestStatusLine", - "HttpRequestMethod", - "HttpRequestUri", - "HttpRequestUriPath", - "HttpRequestUriQueryParameters", - "HttpRequestUriQueryParameter", - "HttpRequestHeaders", - "HttpRequestHeader", - "HttpRequestCookie", - "HttpRequestBody", - "HttpResponseMessage", - "HttpResponseStatusLine", - "HttpResponseStatusCode", - "HttpResponseStatusMessage", - "HttpResponseHeaders", - "HttpResponseHeader", - "HttpResponseCookie", - "HttpResponseBody" - ] - }, - "sourceIdentifier": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "sourceIdentifierPlacement": { - "type": "string", - "enum": [ - "First", - "Last" - ] - }, - "sourceMessageValueType": { - "type": "string", - "enum": [ - "Text", - "Json", - "Html", - "Params" - ] - }, - "sourceMessageValuePath": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "useReplace": { - "type": "boolean" - }, - "regexPattern": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "text": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "replacementText": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "destinationMessageValueType": { - "type": "string", - "enum": [ - "Text", - "Json", - "Html", - "Params" - ] - }, - "destinationMessageValuePath": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "targetSource": { - "type": "string", - "enum": [ - "Event", - "Global", - "Session", - "EventList", - "GlobalList", - "SessionList", - "Message", - "Macro", - "Annotation", - "File", - "Special", - "CookieJar" - ] - }, - "variableName": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "itemPlacement": { - "type": "string", - "enum": [ - "First", - "Last", - "Index", - "All", - "Add" - ] - }, - "delimiter": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - }, - "index": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - } - }, - "title": ".ThenSetVariable", - "required": [ - "@class", - "useMessageValue", - "useReplace" - ] - }, - "ThenSetEncoding": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".ThenSetEncoding" - ], - "default": ".ThenSetEncoding" - }, - "encoding": { - "type": "string", - "pattern": "^((\\{\\{\\w+(:[^:}]*)+\\}\\})|.)*$" - } - }, - "title": ".ThenSetEncoding", - "required": [ - "@class" - ] - }, - "ThenSetEventDirection": { - "type": "object", - "additionalProperties": false, - "properties": { - "@class": { - "type": "string", - "enum": [ - ".ThenSetEventDirection" - ], - "default": ".ThenSetEventDirection" - }, - "dataDirection": { - "type": "string", - "enum": [ - "Request", - "Response" - ] - } - }, - "title": ".ThenSetEventDirection", - "required": [ - "@class" - ] - }, - "Variable": { - "type": "object", - "additionalProperties": false, - "properties": { - "persistent": { - "type": "boolean" - }, - "value": { - "$ref": "#/definitions/Object" - }, - "name": { - "type": "string" - } - }, - "ListVariable": { - "type": "object", - "additionalProperties": false, - "properties": { - "isList": { - "type": "string", - "enum": [ - "true" - ], - "default": "true" - }, - "persistent": { - "type": "boolean" - }, - "value": { - "$ref": "#/definitions/Object" - }, - "name": { - "type": "string" - }, - "values": { - "type": "array", - "items": { - "$ref": "#/definitions/Object" - } - }, - "delimiter": { - "type": "string" - } - }, - "title": "true", - "required": [ - "isList", - "persistent" - ] - }, - "Object": { - "type": "object", - "additionalProperties": false, - "properties": {} - } - } - } -} \ No newline at end of file diff --git a/docs/MessageValues.md b/docs/MessageValues.md deleted file mode 100644 index d66d936..0000000 --- a/docs/MessageValues.md +++ /dev/null @@ -1,261 +0,0 @@ -# Message Values - -Message values are values that are extracted from components of the HTTP message, WebSocket message, or connection details associated with an event that is being processed by Rules. - -Note: HTTP message values that are accessible by WebSocket Rule operations refer to components of the originating ws:// or wss:// request that triggered the establishment of the WebSocket connection. - -* auto-gen TOC: - {:toc} - -## Source Address - -Key: SourceAddress - -Rule Availability: HTTP - -Example: `127.0.0.1` - -## Destination Address - -Host name without port. - -Key: DestinationAddress - -Rule Availability: HTTP, WebSocket - -Example: `www.example.com` - -## Destination Port - -Key: DestinationPort - -Rule Availability: HTTP, WebSocket - -Example: `80` - -## Protocol - -`http` or `https` - -Key: HttpProtocol - -Rule Availability: HTTP, WebSocket - -## URL - -Key: URL - -Rule Availability: HTTP, WebSocket - -Example: `http://www.example.com/index.html?query=test` - -## WebSocket Message - -Key: WebSocketMessage - -Rule Availability: WebSocket - -## Request Message - -Key: HttpRequestMessage - -Rule Availability: HTTP, WebSocket - -Example: -``` -GET / HTTP/1.1 -Host: www.example.com -User-Agent: Mozilla/5.0 Firefox/78.0 -Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 -Accept-Language: en-US,en;q=0.5 -Accept-Encoding: gzip, deflate -Connection: close -Upgrade-Insecure-Requests: 1 -Pragma: no-cache -Cache-Control: no-cache -``` - -## Request Status Line - -Key: HttpRequestStatusLine - -Rule Availability: HTTP, WebSocket - -Example: `GET /path/to/page/index.html?claim=reset&type=plain HTTP/1.1` - -## Request Method - -Key: HttpRequestMethod - -Rule Availability: HTTP, WebSocket - -Example: `GET` - -## Request URI - -Key: HttpRequestUri - -Rule Availability: HTTP, WebSocket - -Example: `/path/to/page/index.html?claim=reset&type=plain` - -## Request URI Path - -Key: HttpRequestUriPath - -Rule Availability: HTTP, WebSocket - -Example: `/path/to/page/index.html` from `/path/to/page/index.html?claim=reset&type=plain` - -## Request URI Query Parameters - -Key: HttpRequestUriQueryParameters - -Rule Availability: HTTP, WebSocket - -Example: `claim=reset&type=plain` from `/path/to/page/index.html?claim=reset&type=plain` - -## Request URI Query Parameter - -Key: HttpRequestUriQueryParameter - -Rule Availability: HTTP, WebSocket - -Example: Returns `plain` using identifier `type` given the request URI `/path/to/page/index.html?claim=reset&type=plain` - -## Request Headers - -Key: HttpRequestHeaders - -Rule Availability: HTTP, WebSocket - -Example: -``` -Host: www.example.com -User-Agent: Mozilla/5.0 Firefox/78.0 -Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 -Accept-Language: en-US,en;q=0.5 -Accept-Encoding: gzip, deflate -Cookie: Preferences=local; AID=2Zy8 -Connection: close -Upgrade-Insecure-Requests: 1 -Pragma: no-cache -Cache-Control: no-cache -``` - -## Request Header - -Key: HttpRequestHeader - -Rule Availability: HTTP, WebSocket - -Example: Based request header `Accept-Encoding: gzip, deflate`, this returns `gzip, deflate` using identifier `Accept-Encoding` - -Example: `gzip, deflate` at identifier `Accept-Encoding` - -## Request Cookie - -Key: HttpRequestCookie - -Rule Availability: HTTP, WebSocket - -Example: For cookie header `Cookie: AID=2Zy8`, this returns `2Zy8` using identifier `AID` - -## Request Body - -Key: HttpRequestBody - -Rule Availability: HTTP, WebSocket - -## Response Message - -Key: HttpResponseMessage - -Rule Availability: HTTP - -Example: -``` -HTTP/1.1 404 Not Found -Accept-Ranges: bytes -Age: 354581 -Cache-Control: max-age=604800 -Content-Type: text/html; charset=UTF-8 -Date: Mon, 07 Dec 2020 07:30:13 GMT -Expires: Mon, 14 Dec 2020 07:30:13 GMT -Last-Modified: Thu, 03 Dec 2020 05:00:32 GMT -Server: ECS (ord/5739) -Vary: Accept-Encoding -X-Cache: 404-HIT -Content-Length: 1256 -Connection: close -``` - -## Response Status Line - -Key: HttpResponseStatusLine - -Rule Availability: HTTP - -Example: `HTTP/1.1 404 Not Found` - -## Response Status Code - -Key: HttpResponseStatusCode - -Rule Availability: HTTP - -Example: `404` - -## Response Status Message - -Key: HttpResponseStatusMessage - -Rule Availability: HTTP - -Example: `Not Found` - -## Response Headers - -Key: HttpResponseHeaders - -Rule Availability: HTTP - -Example: -``` -HTTP/1.1 404 Not Found -Accept-Ranges: bytes -Age: 354581 -Cache-Control: max-age=604800 -Content-Type: text/html; charset=UTF-8 -Date: Mon, 07 Dec 2020 07:30:13 GMT -Set-Cookie: AID=2Zy8 -Expires: Mon, 14 Dec 2020 07:30:13 GMT -Last-Modified: Thu, 03 Dec 2020 05:00:32 GMT -Server: ECS (ord/5739) -Vary: Accept-Encoding -X-Cache: 404-HIT -Content-Length: 1256 -Connection: close -``` - -## Response Header - -Key: HttpResponseHeader - -Rule Availability: HTTP - -Example: Based response header `Cache-Control: max-age=604800`, this returns `max-age=604800` using identifier `Cache-Control` - -## Response Cookie - -Key: HttpResponseCookie - -Rule Availability: HTTP - -Example: For cookie header `Set-Cookie: AID=2Zy8`, this returns `2Zy8` using identifier `AID` - -## Response Body - -Key: HttpResponseBody - -Rule Availability: HTTP \ No newline at end of file diff --git a/docs/Readme.md b/docs/Readme.md deleted file mode 100644 index 534ca06..0000000 --- a/docs/Readme.md +++ /dev/null @@ -1,149 +0,0 @@ -# Reshaper for Burp - -Extension for Burp Suite to trigger actions and reshape HTTP request/response and WebSocket traffic using configurable Rules - -![Screenshot](https://user-images.githubusercontent.com/48854453/206939994-3cf7beb7-61bb-4f12-8b7b-10239e4d0281.png) - -[Example Usage](https://synfron.github.io/ReshaperForBurp/Examples.html) - -## Rules - -Rules allow you to set actions to perform (called Thens) if messages/connections (event) received by Burp Suite meet certain criteria (called Whens). Rules are processed in order. - -[More](https://synfron.github.io/ReshaperForBurp/Rules.html) - -### Whens - -Content Type - If the HTTP request body is reported to match specified content types - -Event Direction - If the HTTP message is a Request or Response, or if the WebSocket message is directed toward the client or server - -From Tool - If the HTTP/WebSocket message is from a specific Burp tool - -Has Entity - If the HTTP/WebSocket event contains a certain message value entity - -In Scope - If the URL is in the suite-wide scope - -Matches Text - If a value (text, variable, or HTTP/WebSocket message value entity) matches a value - -Message Type - If the WebSocket message is text or binary - -MIME Type - If the HTTP response body is reported to match specified MIME types - -Proxy Name - If received by a certain Burp proxy listener - -Repeat - Repeat a group of When constraints for each item in a list - -[More](https://synfron.github.io/ReshaperForBurp/Rules.html#whens) - -### Thens - -Break - Stop Rules or then action processing - -Build HTTP Message - Build an HTTP request or response message and store the full text in a variable - -Comment - Add a comment to the line item in the HTTP/WebSocket history - -Delay - Delay further processing/sending of the HTTP/WebSocket event - -Delete Value - Remove an HTTP message entity - -Delete Variable - Delete a variable - -Drop - Have Burp drop the connection - -Evaluate - Perform operations on values - -Highlight - Highlight the line item in the HTTP/WebSocket history - -Intercept - Intercept the message in the Proxy interceptor - -Log - Log message to the Burp extension console - -Parse HTTP Message - Extract values from an HTTP request or response message and store the values in variable - -Prompt - Get text via a prompt dialog - -Repeat - Repeat a group of Then actions by count, boolean value, or for each item in a list - -Run Process - Execute a command in a separate process - -Run Rules - Run a specific Rule or all auto-run Rules - -Run Script - Execute a JavaScript script - -Save File - Save text to a file - -Set Encoding - Set the encoding used to read and write bytes of the HTTP request or response body, or WebSocket message - -Set Event Direction - Change whether to send a request or to send a response at the end of processing - -Set Value - Set the value of an HTTP/WebSocket event using another value (text, variable, or HTTP/WebSocket event entity) - -Set Variable - Set a variable using another value (text, variable, or HTTP/WebSocket event entity) - -Send Message - Send a separate WebSocket message - -Send Request - Send a separate HTTP request - -Send To - Send data to other Burp tools or the system's default browser - -[More](https://synfron.github.io/ReshaperForBurp/Rules.html#thens) - -## Variables - -Share values across different Rules while processing the same event or all events. - -[More](https://synfron.github.io/ReshaperForBurp/Variables.html) - -## Development - -### Build JAR with IntelliJ - -1. Open IntelliJ. -2. Create a new project (Gradle) from existing source using Java 17. -3. Once the project is created/open, wait for IntelliJ to process Gradle dependencies. -4. Run the `jar` Gradle build task from the Gradle tool window/sidebar. The JAR will be placed in the `build\libs` directory. - -### Build JAR with CLI - -1. Install Java 17. -2. Install Gradle v7.4. -3. Run the `gradle --refresh-dependencies build` command. -4. Run the `gradle build jar` command. The JAR will be placed in the `build\libs` directory. - -### Debugging - -#### IntelliJ - -1. Apply this [git patch](https://gist.github.com/ddwightx/6965732339bdf4cd022d550f40a9e99f) to the project to allow Reshaper to be debugged as a legacy extension in Burp Suite. -2. In Reshaper, using the Settings tab, export all Rules and global variables to a JSON file to prevent data loss. -3. In Extender, unload the Reshaper extension from Burp Suite if you already have the extension installed from the BApp Store or from a JAR. -4. Close Burp Suite. -5. Open the Reshaper project in IntelliJ. -6. Navigate to `java/synfron/reshaper/burp/ui/Window.java`. -7. Right-click the file in the Project view and click `Run Window.main()` or `Run Window.main()`. -8. Burp Suite will open with Reshaper loaded as an legacy extension. - -#### CLI - -1. Apply this [git patch](https://gist.github.com/ddwightx/6965732339bdf4cd022d550f40a9e99f) to the project to allow Reshaper to be debugged as a legacy extension in Burp Suite. -2. In Reshaper, using the Settings tab, export all Rules and global variables to a JSON file to prevent data loss. -3. In Extender, unload the Reshaper extension from Burp Suite if you already have the extension installed from the BApp Store or from a JAR. -4. Close Burp Suite. -5. In a CLI, execute `java -cp path/to/the/reshaper-for-burp/JAR/file.jar synfron.reshaper.burp.ui.Window`. -6. Burp Suite will open with Reshaper loaded as a legacy extension. - -## Contributions - -Contributions are encouraged. Issues and Pull Requests welcome. Also help us spread the word. - -Primary Developer: Daquanne Dwight - -## Support - -For help with how to use Reshaper for a particular need, to report a bug, or to make a suggestion, create an issue in GitHub or email support[at]synfron.com. - -## License - -MIT License. See [LICENSE](https://github.com/synfron/ReshaperForBurp/blob/master/LICENSE) diff --git a/docs/Rules.md b/docs/Rules.md deleted file mode 100644 index 4b8d847..0000000 --- a/docs/Rules.md +++ /dev/null @@ -1,684 +0,0 @@ -# Rules - -Rules allow you to set actions to perform (called Thens) if an HTTP or WebSocket message (event) received by Burp Suite meets certain criteria (called Whens). Rules are processed in order. If the Rule is set to `Auto-Run`, the Rule will be run automatically when an HTTP or WebSocket event is received, otherwise, it must be specifically triggered. Rules must be `Enabled` to run at all. - -HTTP events are processed by Rules under the HTTP Rules tab. WebSocket events are processed by Rules under the WebSocket Rules tab. - -Note: HTTP message values that are accessible by WebSocket Rule operations refer to components of the originating ws:// or wss:// request that triggered the establishment of the WebSocket connection. - - - -- [Rules](#rules) - - [Whens](#whens) - - [Content Type](#content-type) - - [Event Direction](#event-direction) - - [From Tool](#from-tool) - - [Has Entity](#has-entity) - - [In Scope](#in-scope) - - [Matches Text](#matches-text) - - [Message Type](#message-type) - - [MIME Type](#mime-type) - - [Proxy Name](#proxy-name) - - [Repeat](#repeat) - - [Thens](#thens) - - [Break](#break) - - [Build HTTP Message](#build-http-message) - - [Comment](#comment) - - [Delay](#delay) - - [Delete Value](#delete-value) - - [Delete Variable](#delete-variable) - - [Drop](#drop) - - [Evaluate](#evaluate) - - [Highlight](#highlight) - - [Intercept](#intercept) - - [Log](#log) - - [Parse HTTP Message](#parse-http-message) - - [Prompt](#prompt) - - [Repeat](#repeat) - - [Run Process](#run-process) - - [Run Rules](#run-rules) - - [Run Script](#run-script) - - [Save File](#save-file) - - [Send Message](#send-message) - - [Send Request](#send-request) - - [Send To](#send-to) - - [Set Encoding](#set-encoding) - - [Set Event Direction](#set-event-direction) - - [Set Value](#set-value) - - [Set Variable](#set-variable) - - [Common Fields](#common-fields) - - [Additional When Fields](#additional-when-fields) - - [Set List Variable](#set-list-variable) - - [Other Fields](#other-fields) - - [Debugging](#debugging) - - - -## Whens - -Check if an event message meets certain criteria. Multiple Whens are checked in order and treated as AND conditions logically by default. If the relevant value does not match the constraints of the When (opposite if `Negate Result` is selected), unless the following When has specified to `Use OR Condition`, no further Whens are processed for the current Rule and all Thens are skipped. - -### Content Type - -If the HTTP request body is reported to match specified content types - -Availability: HTTP, WebSocket - -#### Fields - -Request Content Type - None, JSON, XML, URL Encoded, Multi-Part, AMF, and/or Unknown - -### Event Direction - -If the HTTP message is a Request or Response, or if the WebSocket message is directed toward the client or server - -Availability: HTTP, WebSocket - -#### Fields - -Event Direction - Request or Response for HTTP, Client or Server for WebSockets - -### From Tool - -If the HTTP/WebSocket message is from a specific Burp tool - -Availability: HTTP, WebSocket - -#### Fields - -Tool - Proxy, Repeater, Intruder, Target, Scanner, Extender, or Session - -### Has Entity - -If the HTTP/WebSocket event contains a certain message value entity - -Availability: HTTP, WebSocket - -#### Fields - -Message Value - The message value entity to check - -Identifier - The key of the property within the message value entity to check. Only available for certain [Message Values](MessageValues.html) (e.g. request header). Supports variable tags. - -### In Scope - -If the URL is in the suite-wide scope - -Availability: HTTP, WebSocket - -#### Fields - -URL - The URL to check or leave blank to use the current request's URL. Supports variable tags. - -### Matches Text - -If a value (text, variable, or HTTP/WebSocket message value entity) matches a value - -Availability: HTTP, WebSocket - -#### Fields - -Use Message Value - Match on a [Message Value](MessageValues.html) (HTTP/WebSocket event entity). Otherwise, use the specified text. - -Source Message Value - The HTTP/WebSocket event entity to check. Only available if `Use Message Value` is selected. - -Source Identifier - The property of the HTTP/WebSocket entity to check. Only available for certain [Message Values](MessageValues.html) (e.g. request header). Supports variable tags. - -Source Identifier Placement - Placement of the value to get if there are multiple (i.e. First, Last). Only available for certain [Message Values](MessageValues.html) (e.g. request header). - -Source Text - The text to use as the value to check. Only available if `Use Message Value` is not selected. Supports variable tags. - -Source Value Type - Declare that the value is Text, JSON (node), HTML (element), or Params (value). - -Source Value Path - Specify a JSON path for JSON, a CSS selector for HTML, or a param name for Params to get a value from within the original value and then use this value instead. Only available if `Source Value Type` is JSON, HTML, or Params. Supports variable tags. - -Match Type - Match the text using Equals, Contains, Begins With, Ends With, or Regex. - -Match Text - The text to match the value against. Supports variable tags. - -Ignore Case - If selected, use case-insensitive comparison. - -### Message Type - -If the WebSocket message type is text or binary - -Availability: WebSocket - -#### Fields - -Message Type - Text or Binary - -### MIME Type - -If the HTTP response body is reported to match specified MIME types. - -Availability: HTTP - -#### Fields - -Response MIME Type - HTML, Script, CSS, JSON, SVG, Other XML, Other Text, Image, Out Binary, and/or Unknown. - -### Proxy Name - -If received by a certain Burp proxy listener - -Availability: HTTP - -#### Fields - -Proxy Name - The Burp proxy listener interface (e.g. 127.0.0.1:8080) - -### Repeat - -Repeat a group of When constraints for each item in a list - -Availability: HTTP, WebSocket - -#### Fields - -Number of Following Whens Included - The number of When items immediately following this one that are a part of the repeat group. They will not run independently of the repeat group. - -Success Criteria - `Any Match`: Repeat for each item in the list until the When constraints in the group successfully match during any iteration. If so, report success. Otherwise, report failure; `All Match`: Repeat for each item in the list ensuring that the When constraints in the group successfully match during all iterations. If so, report success. Otherwise, report failure; - -List Variable Source - List variants of the Global, Event, or Session scope. - -List Variable Name - The name of the variable to repeat for each item of it. Supports variable tags. - -Item Event Variable Name - The name of the single item Event variable to store the current item of the list for each repeat iteration. Supports variable tags. - -## Thens - -### Break - -Stop Rules or then action processing - -Availability: HTTP, WebSocket - -#### Fields - -Break Type - If Skip Next Thens, skip running any further Thens of the Rule. If Skip Next Rules, skip running any further Thens and Rules for this event. - -### Build HTTP Message - -Build an HTTP request or response message and store the full text in a variable. The actual request or response message of the event is not changed. - -Availability: HTTP, WebSocket - -#### Fields - -Starter HTTP Message - Text to use as the starting template for the HTTP message. Supports variable tags. - -Message Value Setters - Set parts of the HTTP message. - -Source Text - The text to set in the message. Supports variable tags. - -Destination Message Value - The HTTP message entity to set the value of. - -Destination Identifier - The property of the HTTP message to set the value of. Only available for certain [Message Values](MessageValues.html) (e.g. request header). Supports variable tags. - -Destination Identifier Placement - Placement of the value to set if there are multiple (i.e. First, Last, All, Only - Keep One, New - Add additional). Only available for certain [Message Values](MessageValues.html) (e.g. request header). - -Destination Variable Source - Single item or list variants of the Global, Event, or Session scope. See [Set List Variable](#set-list-variable) for fields that are available if a list variant is chosen. - -Destination Variable Name - The name of the variable to hold the built HTTP message. Supports variable tags. - -### Comment - -Add a comment to the line item in the HTTP/WebSocket history - -Availability: HTTP, WebSocket - -#### Fields - -Text - The text of the comment. Supports variable tags. - -### Delay - -Delay further processing/sending of the HTTP/WebSocket event - -Availability: HTTP, WebSocket - -#### Fields - -Delay (milliseconds) - The amount of time to delay further processing. Supports variable tags. - -### Delete Value - -Remove an HTTP message entity - -Availability: HTTP - -#### Fields - -Message Value - The HTTP event entity to delete. - -Identifier - The property of the HTTP entity to delete. Only available for certain [Message Values](MessageValues.html) (e.g. request header). Supports variable tags. - -Identifier Placement - Placement of the value to delete if there are multiple. (i.e. First, Last, All) - -### Delete Variable - -Delete a variable - -Availability: HTTP, WebSocket - -#### Fields - -Variable Source - Single item or list variants of the Global, Event, or Session scope. - -Variable Name - The name of the variable to delete. Supports variable tags. - -Item Placement - `First`: Delete the first item in the list; `Last`: Delete the last item in the list; `Index`: Delete zero-based Nth item of the list; `All`: Delete the entire list variable. Only available if `Variable Source` is a list variant. - -Index - The zero-based index of the item to delete from the list. The index must already exist in the list. Only available if `Variable Source` is a list variant and `Item Placement` is `Index`. Supports variable tags. - -### Drop - -Have Burp drop the connection - -Availability: HTTP, WebSocket - -#### Fields - -Drop Message - If selected, Burp will be told to drop the connection. - -### Evaluate - -Perform operations on values - -Availability: HTTP, WebSocket - -#### Fields - -X - First value. Supports variable tags. - -Operation - `Add`, `Subtract`, `Multiply`, `Divide By`, `Increment`, `Decrement`, `Mod`, `Abs`, `Round`, `Not`, `Equals`, `Not Equals`, `Contains`, `Greater Than`, `Greater Than Or Equals`, `Less Than`, or `Less Than Or Equals` - -Y - Second value. Only available for certain operations. Supports variable tags. - -### Highlight - -Highlight the line item in the HTTP/WebSocket history - -Availability: HTTP, WebSocket - -#### Fields - -Color - The color used to highlight the line item. - -### Intercept - -Intercept the message in the Proxy interceptor - -Only relevant for Proxy tool-captured events. - -Availability: HTTP, WebSocket - -#### Fields - -Action - User Defined, Intercept, or Disable. - -### Log - -Log message to the Burp extension console - -Availability: HTTP, WebSocket - -#### Fields - -Text - The text to log. Supports variable tags. - -### Parse HTTP Message - -Extract values from an HTTP request or response message and store the values in a variable. - -Availability: HTTP, WebSocket - -#### Fields - -HTTP Message - Text to use as the HTTP message. Supports variable tags. - -Message Value Getters - Get parts of the HTTP message. - -Source Text - The text to set in the message. Supports variable tags. - -Source Message Value - The HTTP message entity from which to extract a value. - -Source Identifier - The property of the HTTP entity to extract a value from. Only available for certain [Message Values](MessageValues.html) (e.g. request header). Supports variable tags. - -Source Identifier Placement - Placement of the value to get if there are multiple (i.e. First, Last). Only available for certain [Message Values](MessageValues.html) (e.g. request header). - -Destination Variable Source - Single item or list variants of the Global, Event, or Session scope. See [Set List Variable](#set-list-variable) for fields that are available if a list variant is chosen. - -Destination Variable Name - The name of the variable to hold the built HTTP message value. Supports variable tags. - -### Prompt - -Get text via a prompt dialog - -Availability: HTTP, WebSocket - -#### Fields - -Description - Description text to display in the prompt above the text entry field. Supports variable tags. - -Starter Text - Initial text in the text entry field. Supports variable tags. - -Fail After (milliseconds) - Flag the request as failed after waiting the specified amount of time for the response. Only available if `Wait for Completion` is selected. Supports variable tags. - -Break After Failure - Do not run any other Thens or Rules for this event if the request was flagged as failed. Only available if `Wait for Completion` is selected. - -Capture Variable Source - Single item or list variants of the Global, Event, or Session scope. See [Set List Variable](#set-list-variable) for fields that are available if a list variant is chosen. - -Capture Variable Name - The name of the variable to store the response message. Supports variable tags. - -### Repeat - -Repeat a group of Then actions by count, boolean value, or for each item in a list - -Availability: HTTP, WebSocket - -#### Fields - -Number of Following Thens Included - The number of Then items immediately following this one that are a part of the repeat group. They will not run independently of the repeat group. - -Repeat Condition - `Count`: Repeat a specified number of times; `Has Next Item`: Repeat for each item in a list variable; `While True`: Repeat while a value is true, y, 1, yes, or on. - -Count - Number of times to repeat. Only available if `Repeat Condition` is `Count`. Supports variable tags. - -List Variable Source - List variants of the Global, Event, or Session scope. Only available if `Repeat Condition` is `Has Next Item`. - -List Variable Name - The name of the variable to repeat for each item of it. Only available if `Repeat Condition` is `Has Next Item`. Supports variable tags. - -Item Event Variable Name - The name of the single item Event variable to store the current item of the list for each repeat iteration. Only available if `Repeat Condition` is `Has Next Item`. Supports variable tags. - -Boolean Value - Repeat while this value is `true`, `y`, `1`, `yes`, or `on`. Boolean Value should contain a variable tag whose value would change between the repeat iterations in order to avoid unexpected repeating. Only available if `Repeat Condition` is `While True`. Supports variable tags. - -Max Count - The max number of times to repeat in situations where `Boolean Value` never evaluates to a false equivalent value. Only available if `Repeat Condition` is `While True`. - -### Run Process - -Execute a command in a separate process - -Availability: HTTP, WebSocket - -#### Fields - -Command - Command to execute in a separate process. Supports variable tags. Example: `cmd.exe /c dir` - -Stdin - Value to send to standard input. Supports variable tags. - -Wait for Completion - Wait for the process to exit before continuing. - -Fail After (milliseconds) - Flag the process as failed after waiting the specified amount of time for the process to exit. Only available if `Wait for Completion` is selected. Supports variable tags. - -Fail on Non-Zero Exit Code - Flag the process as failed if the process returned a non-zero exit code. Only available if `Wait for Completion` is selected. - -Kill After Failure - Kill the process after a wait timeout. Only available if `Wait for Completion` is selected. - -Break After Failure - Do not run any other Thens or Rules for this event if the process was flagged as failed. Only available if `Wait for Completion` is selected. - -Capture Output - Capture standard out of the process. Only available if `Wait for Completion` is selected. - -Capture After Failure - Capture standard out even if the process is flagged as failed. Only available if `Wait for Completion` and `Capture Output` is selected. - -Capture Variable Source - Single item or list variants of the Global, Event, or Session scope. See [Set List Variable](#set-list-variable) for fields that are available if a list variant is chosen. - -Capture Variable Name - The name of the variable to store the captured output. Supports variable tags. - -### Run Rules - -Run a specific Rule or all auto-run Rules - -Availability: HTTP, WebSocket - -#### Fields - -Run Single - Run a specific Rule is selected. Otherwise, run all auto-run Rules. - -Run Name - The name of the Rule to run. Only available if `Run Single` is selected. - -### Run Script - -Execute a JavaScript script - -Availability: HTTP, WebSocket - -The engine supports up to partial ES6/ES2015. Scripts have access to certain Reshaper-specific functions. See [Scripting Library](ScriptingLibrary.html) - -#### Fields - -Script - The text of the JavaScript script to run. - -Max Execution (secs) - Terminate long-running scripts after this time. - -### Save File - -Save text to a file - -Availability: HTTP, WebSocket - -#### Fields - -File Path - File path of the file including the file name. Supports variable tags. - -Text - The text to save. Supports variable tags. - -Encoding - The charset/encoding of the file (e.g. UTF-8). Supports variable tags. - -File Exists Action - Action to do if the file already exists: None (Don't write), Overwrite, Append - -### Send Message - -Send a separate WebSocket message - -Availability: WebSocket - -#### Fields - -Event Direction - Send to Client or Server. Sending to the client is only allowed for WebSockets captured by the Proxy tool. - -Message - The message to send. Supports variable tags. - -### Send Request - -Send a separate HTTP request - -Availability: HTTP, WebSocket - -#### Fields - -Request - The HTTP request message to send. Uses the value from the current event if left blank. Supports variable tags. - -URL - The URL of the request. If this is set, it overrides the Host request header, the request message URI, protocol, address, and port. Supports variable tags. - -Protocol - `http` or `https`. If this is set, it overrides the values from the URL (if set) or the current event. Supports variable tags. - -Address - Hostname without port. If this is set, it overrides the values from the URL (if set) or the current event. Example: `www.example.com`. Supports variable tags. - -Port - Example: `80`. If this is set, it overrides the values from the URL (if set) or the current event. Supports variable tags. - -Wait for Completion - Wait for a response before continuing. - -Fail After (milliseconds) - Flag the request as failed after waiting the specified amount of time for the response. Only available if `Wait for Completion` is selected. Supports variable tags. - -Fail on Error Status Code - Flag the request as failed if the response returned a 4xx or 5xx HTTP status code. Only available if `Wait for Completion` is selected. - -Break After Failure - Do not run any other Thens or Rules for this event if the request was flagged as failed. Only available if `Wait for Completion` is selected. - -Capture Output - Capture the HTTP response message. Only available if `Wait for Completion` is selected. - -Capture After Failure - Capture the HTTP response message even if the request is flagged as failed. Only available if `Wait for Completion` and `Capture Output` is selected. - -Capture Variable Source - Single item or list variants of the Global, Event, or Session scope. See [Set List Variable](#set-list-variable) for fields that are available if a list variant is chosen. - -Capture Variable Name - The name of the variable to store the response message. Supports variable tags. - -### Send To - -Send data to other Burp tools or the system's default browser - -Availability: HTTP, WebSocket - -#### Fields - -Send To - Comparer, Intruder, Repeater, or Browser - -Override Defaults - Select to be able to override values to send to the given Burp tool - -Host - Leave empty to use the default value. Only available for Intruder and Repeater and if `Override Defaults` is selected. Supports variable tags. - -Port - Leave empty to use the default value. Only available for Intruder and Repeater and if `Override Defaults` is selected. Supports variable tags. - -Protocol - HTTP or HTTPS. Leave empty to use the default value. Only available for Intruder and Repeater and if `Override Defaults` is selected. Supports variable tags. - -Request - Full HTTP request text. Leave empty to use the default value. Only available for Intruder and Repeater and if `Override Defaults` is selected. Supports variable tags. - -Value - Value to compare. Leave empty to use the default value. Only available for Comparer and if `Override Defaults` is selected. Supports variable tags. - -URL - Leave empty to use the default value. Only available for Browser, and `Override Defaults` is selected. Supports variable tags. - -### Set Encoding - -Set the encoding used to read and write bytes of the HTTP request or response body, or WebSocket binary message - -Availability: HTTP, WebSocket - -#### Fields - -Encoding - The charset/encoding of the file (e.g. UTF-8). Supports variable tags. - -### Set Event Direction - -Change whether to send a request or to send a response at the end of processing - -Availability: HTTP - -If the event direction is switched from request to response, no request is sent. Instead, whatever is set in the HTTP response message is sent. Switching from response to request is not functional. - -#### Fields - -Set Event Direction - Request or Response. - -### Set Value - -Set the value of an HTTP/WebSocket event using another value (text, variable, or HTTP/WebSocket event entity) - -Availability: HTTP, WebSocket - -#### Fields - -Use Message Value - Use [Message Value](MessageValues.html) (HTTP/WebSocket event entity) as the source value. Otherwise, use the specified text. - -Source Message Value - The HTTP/WebSocket event entity from which to get the source value. Only available if `Use Message Value` is selected. - -Source Identifier - The property of the HTTP/WebSocket entity to get the source value from. Only available for certain [Message Values](MessageValues.html) (e.g. request header). Supports variable tags. - -Source Identifier Placement - Placement of the value to get if there are multiple (i.e. First, Last). Only available for certain [Message Values](MessageValues.html) (e.g. request header). - -Source Text - The text to use as the source value. Only available if `Use Message Value` is not selected. Supports variable tags. - -Source Value Type - Declare that the value is Text, JSON (node), HTML (element), or Params (value). - -Source Value Path - Specify a JSON path for JSON, a CSS selector for HTML, or a param name for Params to get a value from within the original value and then use this value instead. Only available if `Source Value Type` is JSON, HTML, or Params. Supports variable tags. - -Use Regex Replace - Use regex on the source value. - -Regex Pattern - The Regex pattern to run on the source value. If there is a successful match, a Regex replacement is performed on the value using `Regex Replacement Text`. Only available if `Use Regex Replace` is selected. Supports variable tags. - -Regex Pattern - The replacement value to use in the Regex replacement. Only available if `Use Regex Replace` is selected. Supports variable tags. - -Destination Message Value - The HTTP/WebSocket event entity to set the value of. - -Destination Identifier - The property of the HTTP/WebSocket entity to set the value of. Only available for certain [Message Values](MessageValues.html) (e.g. request header). Supports variable tags. - -Destination Identifier Placement - Placement of the value to set if there are multiple (i.e. First, Last, All, Only - Keep One, New - Add additional). Only available for certain [Message Values](MessageValues.html) (e.g. request header). - -Destination Value Type - Declare that the value to set is Text, JSON (node), HTML (element), or Params (value). - -Destination Value Path - Specify a JSON path for JSON, a CSS selector for HTML, or a param name for Params to get a value from within the original value and then use this value instead. Only available if `Destination Value Type` is JSON, HTML, or Params. Supports variable tags. - -### Set Variable - -Set a variable using another value (text, variable, or HTTP/WebSocket event entity) - -Availability: HTTP, WebSocket - -#### Fields - -Use Message Value - Use [Message Value](MessageValues.html) (HTTP/WebSocket event entity) as the source value. Otherwise, use the specified text. - -Source Message Value - The HTTP/WebSocket event entity from which to get the source value. Only available if `Use Message Value` is selected. - -Source Identifier - The property of the HTTP/WebSocket entity to get the source value from. Only available for certain [Message Values](MessageValues.html) (e.g. request header). Supports variable tags. - -Source Identifier Placement - Placement of the value to get if there are multiple (i.e. First, Last). Only available for certain [Message Values](MessageValues.html) (e.g. request header). - -Source Text - The text to use as the source value. Only available if `Use Message Value` is not selected. Supports variable tags. - -Source Value Type - Declare that the value is Text, JSON (node), HTML (element), or Params (value). - -Source Value Path - Specify a JSON path for JSON, a CSS selector for HTML, or a param name for Params to get a value from within the original value and then use this value instead. Only available if `Source Value Type` is JSON, HTML, or Params. Supports variable tags. - -Use Regex Replace - Use regex on the source value. - -Regex Pattern - The Regex pattern to run on the source value. If there is a successful match, a Regex replacement is performed on the value using `Regex Replacement Text`. Only available if `Use Regex Replace` is selected. Supports variable tags. - -Regex Pattern - The replacement value to use in the Regex replacement. Only available if `Use Regex Replace` is selected. Supports variable tags. - -Destination Variable Source - Single item or list variants of the Global, Event, or Session scope. See [Set List Variable](#set-list-variable) for fields that are available if a list variant is chosen. - -Destination Variable Name - The name of the variable to set. Supports variable tags. - -Destination Value Type - Declare that the value to set is Text, JSON (node), HTML (element), or Params (value). - -Destination Value Path - Specify a JSON path for JSON, a CSS selector for HTML, or a param name for Params to get a value from within the original value and then use this value instead. Only available if `Destination Value Type` is JSON, HTML, or Params. Supports variable tags. - -## Common Fields - -### Additional When Fields - -Use OR Condition - By default, all Whens must report as a successful match for any Thens in the Rule to be evaluated. Once one When reports failure, none of the remaining Whens in the Rule are evaluated. However, if this is checked, the current When will be evaluated even if the previous When reported failure. If this When reports success, the failure of the previous When is ignored. - -Negate Result - If checked, a successful match will be reported as a failure, and an unsuccessful match will be reported as a success. - -### Set List Variable - -The following fields are only available if the variable source is a list variant. - -Item Placement - `First`: Set/overwrite the first item in the list; `Last`: Set/overwrite the last item in the list; `Index`: Set/overwrite zero-based Nth item of the list; `Add First`: Insert as the first item in the list; `Add Last`: Insert as the last item in the list; `All`: Reset the list with a new delimited value; - -Index - The zero-based index to place the value in the list. The index must already exist in the list or be +1 beyond the last item in the list. Only available if `Item Placement` is `Index`. Supports variable tags. - -Delimiter - The delimiter used to split the value to create individual items in the list. Note, use special variable tags to specify characters like new lines. Only available if `Item Placement` is `All`. Supports variable tags. - -### Other Fields - -Auto-Run - If checked, the Rule will be evaluated for every event Reshaper is enabled to handle. If unchecked, the Rule will only run if explicitly triggered by a Then Run Rule. - -Enabled - If unchecked, the Rule is marked inactive and will not be evaluated under any condition. - -Save - Any changes to Rules in the UI do not become live and are not persisted until the Save button is clicked. Upon hitting the Save button, all fields are validated to ensure value requirements are met. If validation issues are found, details of the issues are displayed, and the changes will remain unsaved. - -## Debugging - -Rules can be debugged by enabling event diagnostics (_Settings > General > Enable Event Diagnostics_) to debug all Rules or by right-clicking the specific Rules you want to debug in the Rules list and selecting `Toggle Debug Logging` in the context menu. This will log details about the actions the Rule(s) have taken for each event (request, response, or WebSocket message) processed, including the result of When constraint checks, and the values that were used in Whens and Thens. - -Example Diagnostic Output: - -``` -Request: http://example.com/ - Rule: Test - When Event Direction('Request' equals 'Request') - PASS - AND When Matches Text('example.com' contains 'example') - PASS - Then Set Value(destinationMessageValue='Request Header' destinationIdentifier='special' input='Mine') - Then Highlight('orange') - End Rule -End Request - -Response: http://example.com/ - Rule: Test - When Event Direction('Response' equals 'Request') - FAIL - End Rule -End Response -``` diff --git a/docs/ScriptingLibrary.md b/docs/ScriptingLibrary.md deleted file mode 100644 index edeef04..0000000 --- a/docs/ScriptingLibrary.md +++ /dev/null @@ -1,289 +0,0 @@ -# Scripting Library - -Extra Javascript library APIs usable in `ThenRunScript` scripts. - -* auto-gen TOC: -{:toc} - -## Reshaper. - -### event. - -#### getMessageValue(messageValueKey, messageValueIdentifier) - -Get a [Message Value](MessageValues.html) from the current event. - -Parameters: - -messageValueKey - Key of the [Message Value](MessageValues.html). - -messageValueIdentifier - The identifier for the [Message Value](MessageValues.html) if applicable. - -#### setMessageValue(messageValueKey, messageValueIdentifier, value) - -Set a [Message Value](MessageValues.html) of the current event. - -Parameters: - -messageValueKey - Key of the [Message Value](MessageValues.html). - -messageValueIdentifier - The identifier for the [Message Value](MessageValues.html) if applicable. - -value - The new value. - -#### getMessageValueKeys() - -Get all [Message Value](MessageValues.html) keys. - -#### setRuleResponse(ruleResponse) - -Set whether further processing of Thens or Rules should continue after this script finishes executing. This provides the same functionality as Then Break. - -Continue - Continue processing as normal.
-BreakThens - Skip running any further Thens of the current Rule.
-BreakRules - Skip running any further Thens and Rules for this event. - -Parameters: - -ruleResponse - "Continue" | "BreakThens" | "BreakRules" - -#### runThen(thenType, thenData) - -Run a Then action. - -Parameters: - -thenType - BuildHttpMessage, Break, DeleteValue, DeleteVariable, Drop, Highlight, Log, ParseHttpMessage, SendRequest, SendTo, SetEventDirection, SetValue, or SetVariable - -thenData - Object containing the properties for the Then action. See below. - -BuildHttpMessage -``` -{ - dataDirection: "Request" | "Response" - starterHttpMessage: string - messageValueSetters: [{ - destinationMessageValue: string - destinationIdentifier: string - sourceText: string - }] - destinationVariableSource: "Global" | "Event" - destinationVariableName: string -} -``` -Comment -``` -{ - text: string -} -``` -Delete Value -``` -{ - messageValue: MessageValueKey - identifier: string -} -``` -Delete Variable -``` -{ - targetSource: "Global" | "Event" - variableName: string -} -``` -Drop -``` -{ - dropMessage: boolean -} -``` -Highlight -``` -{ - color: "None" | "Red" | "Orange" | "Yellow" | "Green" | "Cyan" | "Blue" | "Pink" | "Magenta" | "Gray" -} -``` -Intercept -``` -{ - interceptResponse: UserDefined | Disable | Intercept -} -``` -Log -``` -{ - text: string -} -``` -ParseHttpMessage -``` -{ - dataDirection: "Request" | "Response" - httpMessage: string - messageValueGetters: [{ - sourceMessageValue: MessageValueKey - sourceIdentifier: string - destinationVariableSource: "Global" | "Event" - destinationVariableName: string - }] -} -``` -SendMessage -``` -{ - dataDirection: "Server" | "Client" - message: string -} -``` -SendRequest -``` -{ - protocol: "http" | "https" - address: string - port: number - request: string - waitForCompletion: boolean - failAfter: number - failOnErrorStatusCode: boolean - breakAfterFailure: boolean - captureOutput: boolean - captureAfterFailure: boolean - captureVariableSource: "Global" | "Event" - captureVariableName: string -} -``` -SendTo -``` -{ - sendTo: "Comparer" | "Intruder" | "Repeater" | "Browser" - overrideDefaults: boolean - host: string - port: number - protocol: "http" | "https" - request: string - value: string - url: string -} -``` -SetEventDirection -``` -{ - dataDirection: "Request" | "Response" -} -``` -SetValue -``` -{ - text: string - useMessageValue: boolean - sourceMessageValue: MessageValueKey - sourceIdentifier: string - sourceMessageValueType: "Text" | "JSON" | "XML" - sourceMessageValuePath: string - useReplace: boolean - regexPattern: string - replacementText: string - destinationMessageValueType: "Text" | "JSON" | "XML" - destinationMessageValuePath: string - destinationMessageValue: MessageValueKey - destinationIdentifier: string -} -``` -SetVariable -``` -{ - text: string - useMessageValue: boolean - sourceMessageValue: MessageValueKey - sourceIdentifier: string - sourceMessageValueType: "Text" | "JSON" | "XML" - sourceMessageValuePath: string - useReplace: boolean - regexPattern: string - replacementText: string - destinationMessageValueType: "Text" | "JSON" | "XML" - destinationMessageValuePath: string - targetSource: "Global" | "Event" - variableName: string -} -``` - -### variables. - -#### deleteEventVariable(name) - -Delete an event variable. - -Parameters: - -name - Variable name. - -#### deleteGlobalVariable(name) - -Delete an global variable. - -Parameters: - -name - Variable name. - -#### deleteSessionVariable(name) - -Delete an session variable. - -Parameters: - -name - Variable name. - -#### getEventVariable(name) - -Get the value of an event variable. - -Parameters: - -name - Variable name. - -#### getGlobalVariable(name) - -Get the value of a global variable. - -Parameters: - -name - Variable name. - -#### getSessionVariable(name) - -Get the value of a session variable. - -Parameters: - -name - Variable name. - -#### setEventVariable(name, value) - -Set the value of an event variable. - -Parameters: - -name - Variable name. - -value - The new value. - -#### setGlobalVariable(name, value) - -Set the value of a global variable. - -Parameters: - -name - Variable name. - -value - The new value. - -#### setSessionVariable(name, value) - -Set the value of a session variable. - -Parameters: - -name - Variable name. - -value - The new value. diff --git a/docs/Variables.md b/docs/Variables.md deleted file mode 100644 index 03bd322..0000000 --- a/docs/Variables.md +++ /dev/null @@ -1,65 +0,0 @@ -# Variables - -## Custom Variables - -Custom variables allow the sharing of values between Rules and are scoped at the Global, Session, or Event level. They can be set by Thens or in the UI (Global variables only). Custom variables are only accessible within Reshaper and are readable by Whens and Thens. - -### List Variables - -List variables are a collection of multiple values. The values can be accessed and modified by first item, last item, index, or as a single concatenated value with each item joined by a delimiter. - -### Types - -Event scoped variables are shared among Rules processing a single HTTP event (either request or response). - -Global scoped variables are shared among Rules across all events for as long as the extension is loaded or until the variables are deleted. - -The Global Variables tab provides a way to manage Global and Global List variables. You can toggle between adding a single or list variable using the Add button's dropdown. When a list variable is selected for edit, a delimiter field is provided which is used to determine how to divide the entered text into multiple items in the list. The variables can also be set to be Persistent which enables them to be saved and reloaded between Reshaper sessions. - -Session scoped variables are shared among Rules processing the same HTTP request and response, or all WebSocket events within the same WebSocket connection. - -## Accessor Variables - -Accessor variables provide access to utility functionality and data that is not strictly created by Reshaper. - -Message variables provide access to event message values (e.g. Request URI). - -Annotation variables process access to HTTP or WebSocket message annotation values (i.e. comments and highlight colors). - -File variables provide access to the contents of a text file. - -Special character variables provide access to special characters which typically require escape character sequences to use. (e.g. new lines, tabs, unicode characters) - -## Variable Tags - -Variables can be read by Whens and Thens when a variable tag is specified in supporting text fields. Variable tags can be typed in manually or inserted via the right-click menu for those text fields. -{% raw %} - -**Event Variable Tag (event, e):** `{{event:MyVariableName}}` - -**Event List Variable Tag (eventlist, el):** `{{eventlist:MyVariableName}}` or `{{eventlist:MyVariableName:all}}`: Full text (All items concatenated), `{{eventlist:MyVariableName:first}}`: First item, `{{eventlist:MyVariableName:last}}`: Last item, `{{eventlist:MyVariableName:3}}`: Item at index 3 (can be index value), `{{eventlist:MyVariableName:size}}`: Count of items - -**Global Variable Tag (global, g):** `{{global:MyVariableName}}` - -**Global List Variable Tag (globallist, el):** `{{globallist:MyVariableName}}` or `{{globallist:MyVariableName:all}}`: Full text (All items concatenated), `{{globallist:MyVariableName:first}}`: First item, `{{globallist:MyVariableName:last}}`: Last item, `{{globallist:MyVariableName:3}}`: Item at index 3 (can be index value), `{{globallist:MyVariableName:size}}`: Count of items - -**Session Variable Tag (session, sn):** `{{session:MyVariableName}}` - -**Session List Variable Tag (sessionlist, el):** `{{sessionlist:MyVariableName}}` or `{{sessionlist:MyVariableName:all}}`: Full text (All items concatenated), `{{sessionlist:MyVariableName:first}}`: First item, `{{sessionlist:MyVariableName:last}}`: Last item, `{{sessionlist:MyVariableName:3}}`: Item at index 3 (can be index value), `{{sessionlist:MyVariableName:size}}`: Count of items - -For example, if Global variable named `firstName` has the value `John` and variable named `lastName` has the value `Smith`. A field with the value `{{global:firstName}}'s full name is {{global:firstName}} {{global:lastName}}` will be read as `John's full name is John Smith`. - -**Message Variable Tag (message, m):** `{{message:messageValueKey}}` or `{{message:messageValueKey:identifier}}` (e.g. `{{message:httprequesturi}}`, `{{message:httprequestheader:Host}}`). See [Message Values](MessageValues.html#) to determine the appropriate values for `messageValueKey` and `identifier`. - -**Annotation Variable Tag (annotation, a):** `{{annotation:comment}}` to get the current comment or `{{annotation:highlightcolor}}` to get the current highlight color of the line item in HTTP or WebSocket history for this event. - -**File Variable Tag (file, f):** `{{file:encoding:filePath}}`. Example: `{{file:utf-8:~/Documents/file.txt}}` - -**Special Character Tag (special, s):** `{{s:specialCharacterSequences}}`. Examples: `{{s:n}}` (new line), `{{s:rn}}` (carriage return + new line), `{{s:u00A9}}` (Copyright symbol) - -**Cookie Jar Tag (cookiejar, cj):** `{{cookiejar:domain:name}}` or `{{cookiejar:domain:name:path}}`. Example: `{{cookiejar:example.com:tracker:/}}` - -**Macro (macro, mc):** `{{macro:macroItemNumber:messageValueKey}}` or `{{macro:macroItemNumber:messageValueKey:identifier}}`. This tag is only applicable when Reshaper is invoked by a session handling rule marco post-run action. See [Message Values](MessageValues.html#) to determine the appropriate values for `messageValueKey` and `identifier`. - - -{% endraw %} diff --git a/docs/_config.yml b/docs/_config.yml deleted file mode 100644 index e5a23d5..0000000 --- a/docs/_config.yml +++ /dev/null @@ -1,5 +0,0 @@ -theme: jekyll-theme-cayman -title: Reshaper for Burp -description: Trigger actions and reshape HTTP request/response and WebSocket traffic using configurable rules -kramdown: - auto_ids: true