mirror of
https://github.com/ysoftdevs/wapifuzz.git
synced 2026-01-13 23:23:29 +01:00
81 lines
3.4 KiB
Python
81 lines
3.4 KiB
Python
from typing import List, Dict
|
|
from boofuzz import s_group, s_static
|
|
from encodings_helper import Encoder, EncodingTypes
|
|
from configuration_manager import ConfigurationManager
|
|
|
|
|
|
class FuzzPayloads:
|
|
payloads: Dict[str, List[str]] = {}
|
|
CUSTOM_PAYLOADS_KEY = "custom"
|
|
|
|
@staticmethod
|
|
def add_payload_to_list(line, directory_name):
|
|
if directory_name not in FuzzPayloads.payloads:
|
|
FuzzPayloads.payloads[directory_name] = []
|
|
|
|
if line not in FuzzPayloads.payloads[directory_name]:
|
|
FuzzPayloads.payloads[directory_name].append(line)
|
|
|
|
@staticmethod
|
|
def _get_payloads_using_directory_names(directory_names: List[str]) -> List[str]:
|
|
directory_names.append(FuzzPayloads.CUSTOM_PAYLOADS_KEY) # Always add custom payloads into any payloads set
|
|
payloads: List[str] = []
|
|
for directory_name in directory_names:
|
|
if directory_name in FuzzPayloads.payloads:
|
|
for line in FuzzPayloads.payloads[directory_name]:
|
|
payloads.append(line)
|
|
return list(set(payloads)) # Remove duplicities
|
|
|
|
@staticmethod
|
|
def get_all_payloads():
|
|
return FuzzPayloads._get_payloads_using_directory_names(list(FuzzPayloads.payloads.keys()))
|
|
|
|
@staticmethod
|
|
def _get_specific_type_payloads(payload_folders):
|
|
return FuzzPayloads._get_payloads_using_directory_names(payload_folders) if payload_folders else FuzzPayloads.get_all_payloads()
|
|
|
|
@staticmethod
|
|
def get_string_payloads():
|
|
payload_folders = ConfigurationManager.get_payloads_folders_for_string_json_primitive()
|
|
return FuzzPayloads._get_specific_type_payloads(payload_folders)
|
|
|
|
@staticmethod
|
|
def get_number_payloads():
|
|
payload_folders = ConfigurationManager.get_payloads_folders_for_number_json_primitive()
|
|
return FuzzPayloads._get_specific_type_payloads(payload_folders)
|
|
|
|
@staticmethod
|
|
def get_boolean_payloads():
|
|
payload_folders = ConfigurationManager.get_payloads_folders_for_boolean_json_primitive()
|
|
return FuzzPayloads._get_specific_type_payloads(payload_folders)
|
|
|
|
|
|
def s_http_general(value, payloads, fuzzable=True, encoding: EncodingTypes = EncodingTypes.ascii, name=None, add_quotation_marks=False):
|
|
# Encode all payloads
|
|
encoded_payloads: List[bytes] = []
|
|
for payload in payloads:
|
|
encoded = Encoder.encode_string(payload, encoding)
|
|
if add_quotation_marks:
|
|
encoded = Encoder.get_ascii_encoded_quotation_mark() + encoded + Encoder.get_ascii_encoded_quotation_mark()
|
|
encoded_payloads.append(encoded)
|
|
|
|
# Encode default value
|
|
default_value = Encoder.encode_string(value, encoding)
|
|
if fuzzable:
|
|
# noinspection PyTypeChecker
|
|
s_group(name, encoded_payloads, default_value)
|
|
else:
|
|
s_static(default_value)
|
|
|
|
|
|
def s_http_string(value, fuzzable=True, encoding: EncodingTypes = EncodingTypes.ascii, name=None):
|
|
s_http_general(value, FuzzPayloads.get_string_payloads(), fuzzable, encoding, name)
|
|
|
|
|
|
def s_http_number(value, fuzzable=True, encoding: EncodingTypes = EncodingTypes.ascii, name=None, add_quotation_marks=False):
|
|
s_http_general(value, FuzzPayloads.get_number_payloads(), fuzzable, encoding, name, add_quotation_marks)
|
|
|
|
|
|
def s_http_boolean(value, fuzzable=True, encoding: EncodingTypes = EncodingTypes.ascii, name=None, add_quotation_marks=False):
|
|
s_http_general(value, FuzzPayloads.get_boolean_payloads(), fuzzable, encoding, name, add_quotation_marks)
|