From cbd260e0e9499e1bc34aee0b130e07ac9790278d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20St=C3=A1rek?= Date: Sun, 24 Nov 2019 01:47:43 +0100 Subject: [PATCH] Progress redirected Full text log goes right into log file. --- fuzzer/progress_reporter.py | 2 +- fuzzer/text_logger.py | 12 ++++++++++-- fuzzer/wapifuzz.py | 19 +++++++++++-------- run.ps1 | 3 +-- run.sh | 2 +- 5 files changed, 24 insertions(+), 14 deletions(-) diff --git a/fuzzer/progress_reporter.py b/fuzzer/progress_reporter.py index 454b9bf..080fd1c 100644 --- a/fuzzer/progress_reporter.py +++ b/fuzzer/progress_reporter.py @@ -24,7 +24,7 @@ def report_progress(session, junit_logger): plan_another_report(session, junit_logger, ConfigurationManager.get_reporting_interval()) message = create_report_message(session) - print(message, file=sys.stderr) + print(message) else: plan_another_report(session, junit_logger, DID_FUZZING_STARTED_CHECKS_TIME_INTERVAL_IN_SECONDS) diff --git a/fuzzer/text_logger.py b/fuzzer/text_logger.py index df0104f..3347e83 100644 --- a/fuzzer/text_logger.py +++ b/fuzzer/text_logger.py @@ -3,6 +3,10 @@ from fake_socket import get_response_object class TextLogger(FuzzLoggerText): + def __init__(self, full_log_file_pointer): + super().__init__() + self._log_file = full_log_file_pointer + def open_test_step(self, description): self._print_log_msg(msg=description, msg_type='step') @@ -37,10 +41,14 @@ class TextLogger(FuzzLoggerText): self._print_log_msg(msg=description, msg_type='pass') def close_test_case(self): - print() + print(file=self._log_file) def close_test(self): pass def _print_log_msg(self, msg_type, msg=None, data=None): - print(helpers.format_log_msg(msg_type=msg_type, description=msg, data=data, indent_size=self.INDENT_SIZE)) + print( + helpers.format_log_msg( + msg_type=msg_type, description=msg, data=data, indent_size=self.INDENT_SIZE, format_type="html" + ), file=self._log_file + ) diff --git a/fuzzer/wapifuzz.py b/fuzzer/wapifuzz.py index 9558e09..2219121 100644 --- a/fuzzer/wapifuzz.py +++ b/fuzzer/wapifuzz.py @@ -7,6 +7,8 @@ from payloads.payloads_loader import PayloadsLoader, load_default_payloads from configuration_manager import ConfigurationManager from fuzzer import Fuzzer +FUZZING_LOG_FILE = "fuzzing.log" + def main(): config_file_path = sys.argv[1] @@ -27,16 +29,17 @@ def main(): payloads_loader.load_payloads(custom_payloads_path, FuzzPayloads.CUSTOM_PAYLOADS_KEY) with open(junit_output, 'w', encoding='utf8') as junit_output_file_pointer: - text_logger = TextLogger() - junit_logger = JUnitLogger(junit_output_file_pointer, test_suite_name_delimiter=":", hostname=target["hostname"]) - protocol = 'ssl' if target["ssl"] is True else 'tcp' + with open(FUZZING_LOG_FILE, "w", encoding='utf8') as full_log_file_pointer: + text_logger = TextLogger(full_log_file_pointer) + junit_logger = JUnitLogger(junit_output_file_pointer, test_suite_name_delimiter=":", hostname=target["hostname"]) + protocol = 'ssl' if target["ssl"] is True else 'tcp' - with open(endpoints_description, 'r') as endpoints_description_file_pointer: - endpoints = json.loads(endpoints_description_file_pointer.read()) + with open(endpoints_description, 'r') as endpoints_description_file_pointer: + endpoints = json.loads(endpoints_description_file_pointer.read()) - fuzzer = Fuzzer(endpoints, text_logger, junit_logger, protocol) - fuzzer.fuzz() - return fuzzer.was_there_any_failure() + fuzzer = Fuzzer(endpoints, text_logger, junit_logger, protocol) + fuzzer.fuzz() + return fuzzer.was_there_any_failure() if __name__ == '__main__': diff --git a/run.ps1 b/run.ps1 index a43ce3d..546dbe7 100644 --- a/run.ps1 +++ b/run.ps1 @@ -32,7 +32,6 @@ $DOCKER='docker' # Define paths inside directory $PARSER_FOLDER="./parser/OpenApiParserCLI/" $API_REQUESTS_JSON="./parser/api.json" -$FUZZER_LOG="fuzzing.log" $JUNIT_TEST_REPORT="./reporter/reports.junit.xml" $HTML_TEST_REPORT="./reporter/reports.html" $XUNIT2HTML_XSL="./reporter/xunit_to_html.xsl" @@ -67,7 +66,7 @@ Write-Host "Installing specific dependencies" pip install git+https://github.com/jtpereyda/boofuzz.git pip install junit-xml Write-Host "Starting fuzz testing" -python ./fuzzer/wapifuzz.py ${config} ${API_REQUESTS_JSON} ${JUNIT_TEST_REPORT} ${payloads} > $FUZZER_LOG +python ./fuzzer/wapifuzz.py ${config} ${API_REQUESTS_JSON} ${JUNIT_TEST_REPORT} ${payloads} $FUZZER_ERROR_CODE=$LASTEXITCODE if ($FUZZER_ERROR_CODE -eq 2) { diff --git a/run.sh b/run.sh index 007187c..f5cd66f 100644 --- a/run.sh +++ b/run.sh @@ -77,7 +77,7 @@ ${PYTHON3_BIN} -m virtualenv env echo "Started fuzzing" . ./env/bin/activate ; \ pip install --upgrade pip ; pip install git+https://github.com/jtpereyda/boofuzz.git ; pip install junit-xml ; \ -python fuzzer/wapifuzz.py ${WAPIFUZZ_CONFIG} ${API_REQUESTS_JSON} ${JUNIT_TEST_REPORT} ${CUSTOM_PAYLOADS_FILE} > ${FUZZER_LOG} +python fuzzer/wapifuzz.py ${WAPIFUZZ_CONFIG} ${API_REQUESTS_JSON} ${JUNIT_TEST_REPORT} ${CUSTOM_PAYLOADS_FILE} FUZZER_ERROR_CODE=$? if [ "$FUZZER_ERROR_CODE" -eq "2" ]; then echo "Fuzzing failed. Trying to generate HTML result of procceeded test cases.";