diff --git a/lib/core/common.py b/lib/core/common.py index a05a6154d..c501acd24 100644 --- a/lib/core/common.py +++ b/lib/core/common.py @@ -732,6 +732,7 @@ def dataToStdout(data, forceOutput=False): sys.stdout.write(data.encode(UNICODE_ENCODING)) finally: sys.stdout.flush() + setFormatterPrependFlag(len(data) == 1) if kb.get("multiThreadMode"): logging._releaseLock() diff --git a/lib/core/option.py b/lib/core/option.py index f483d9bf4..7c5f3e570 100644 --- a/lib/core/option.py +++ b/lib/core/option.py @@ -394,18 +394,22 @@ def __setMultipleTargets(): infoMsg += "testable requests from the targets list" logger.info(infoMsg) -def __adjustFormatter(): +def __adjustLoggingFormatter(): """ Solves problem of line deletition caused by overlapping logging messages and retrieved data info in inference mode """ + if hasattr(FORMATTER, '_format'): + return + def format(record): _ = FORMATTER._format(record) if FORMATTER._prepend_flag: _ = "\n%s" % _ FORMATTER._prepend_flag = False return _ + FORMATTER._format = FORMATTER.format FORMATTER._prepend_flag = False FORMATTER.format = format @@ -1902,7 +1906,7 @@ def init(inputOptions=AttribDict(), overrideOptions=False): __checkDependencies() __basicOptionValidation() __setTorProxySettings() - __adjustFormatter() + __adjustLoggingFormatter() __setMultipleTargets() __setTamperingFunctions() __setTrafficOutputFP() diff --git a/lib/techniques/blind/inference.py b/lib/techniques/blind/inference.py index 003c51f74..eadb602ca 100644 --- a/lib/techniques/blind/inference.py +++ b/lib/techniques/blind/inference.py @@ -23,7 +23,6 @@ from lib.core.common import goGoodSamaritan from lib.core.common import getPartRun from lib.core.common import incrementCounter from lib.core.common import safeStringFormat -from lib.core.common import setFormatterPrependFlag from lib.core.common import singleTimeWarnMessage from lib.core.data import conf from lib.core.data import kb @@ -450,7 +449,6 @@ def bisection(payload, expression, length=None, charsetType=None, firstChar=None etaProgressUpdate(time.time() - charStart, len(commonValue)) elif conf.verbose in (1, 2): dataToStdout(commonValue[index-1:]) - setFormatterPrependFlag(True) finalValue = commonValue @@ -499,7 +497,6 @@ def bisection(payload, expression, length=None, charsetType=None, firstChar=None etaProgressUpdate(time.time() - charStart, index) elif conf.verbose in (1, 2): dataToStdout(val) - setFormatterPrependFlag(True) if len(partialValue) > INFERENCE_BLANK_BREAK and partialValue[-INFERENCE_BLANK_BREAK:].isspace(): finalValue = partialValue @@ -507,8 +504,6 @@ def bisection(payload, expression, length=None, charsetType=None, firstChar=None except KeyboardInterrupt: abortedFlag = True - finally: - setFormatterPrependFlag(False) if conf.verbose in (1, 2) or showEta: dataToStdout("\n")