diff --git a/lib/core/settings.py b/lib/core/settings.py index 8f0817cac..5568126eb 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -48,8 +48,13 @@ DUMP_STOP_MARKER = "__STOP__" PAYLOAD_DELIMITER = "\x00" CHAR_INFERENCE_MARK = "%c" + +# minimum time response set needed for time-comparison based on standard deviation MIN_TIME_RESPONSES = 10 +# after these number of blanks at the end inference should stop (just in case) +INFERENCE_BLANK_BREAK = 20 + # System variables IS_WIN = subprocess.mswindows # The name of the operating system dependent module imported. The following diff --git a/lib/techniques/blind/inference.py b/lib/techniques/blind/inference.py index ea048d17d..8edc42c55 100644 --- a/lib/techniques/blind/inference.py +++ b/lib/techniques/blind/inference.py @@ -34,6 +34,7 @@ from lib.core.exception import sqlmapThreadException from lib.core.exception import unhandledException from lib.core.progress import ProgressBar from lib.core.settings import CHAR_INFERENCE_MARK +from lib.core.settings import INFERENCE_BLANK_BREAK from lib.core.unescaper import unescaper from lib.request.connect import Connect as Request @@ -506,6 +507,9 @@ def bisection(payload, expression, length=None, charsetType=None, firstChar=None elif conf.verbose in (1, 2): dataToStdout(val) + if len(finalValue) > INFERENCE_BLANK_BREAK and finalValue[-INFERENCE_BLANK_BREAK:].isspace(): + break + if conf.verbose in (1, 2) or showEta: dataToStdout("\n")