Code refactoring

This commit is contained in:
Miroslav Stampar 2013-03-19 19:24:14 +01:00
parent a3d9a7b1ff
commit 8acf033715
4 changed files with 12 additions and 11 deletions

View File

@ -1069,6 +1069,7 @@ def identifyWaf():
if kwargs.get("get"): if kwargs.get("get"):
kwargs["get"] = urlencode(kwargs["get"]) kwargs["get"] = urlencode(kwargs["get"])
kwargs["raise404"] = False kwargs["raise404"] = False
kwargs["silent"] = True
page, headers, code = Request.getPage(*args, **kwargs) page, headers, code = Request.getPage(*args, **kwargs)
except Exception: except Exception:
pass pass

View File

@ -86,8 +86,8 @@ HTTP_ACCEPT_HEADER_VALUE = "text/html,application/xhtml+xml,application/xml;q=0.
# Default value for HTTP Accept-Encoding header # Default value for HTTP Accept-Encoding header
HTTP_ACCEPT_ENCODING_HEADER_VALUE = "gzip,deflate" HTTP_ACCEPT_ENCODING_HEADER_VALUE = "gzip,deflate"
# HTTP timeout in silent mode # Default timeout for running commands over backdoor
HTTP_SILENT_TIMEOUT = 3 BACKDOOR_RUN_CMD_TIMEOUT = 5
# Maximum number of techniques used in inject.py/getValue() per one value # Maximum number of techniques used in inject.py/getValue() per one value
MAX_TECHNIQUES_PER_VALUE = 2 MAX_TECHNIQUES_PER_VALUE = 2

View File

@ -67,7 +67,6 @@ from lib.core.settings import DEFAULT_CONTENT_TYPE
from lib.core.settings import DEFAULT_GET_POST_DELIMITER from lib.core.settings import DEFAULT_GET_POST_DELIMITER
from lib.core.settings import HTTP_ACCEPT_HEADER_VALUE from lib.core.settings import HTTP_ACCEPT_HEADER_VALUE
from lib.core.settings import HTTP_ACCEPT_ENCODING_HEADER_VALUE from lib.core.settings import HTTP_ACCEPT_ENCODING_HEADER_VALUE
from lib.core.settings import HTTP_SILENT_TIMEOUT
from lib.core.settings import MAX_CONNECTION_CHUNK_SIZE from lib.core.settings import MAX_CONNECTION_CHUNK_SIZE
from lib.core.settings import MAX_CONNECTIONS_REGEX from lib.core.settings import MAX_CONNECTIONS_REGEX
from lib.core.settings import MAX_CONNECTION_TOTAL_SIZE from lib.core.settings import MAX_CONNECTION_TOTAL_SIZE
@ -204,6 +203,7 @@ class Connect(object):
multipart = kwargs.get("multipart", False) multipart = kwargs.get("multipart", False)
silent = kwargs.get("silent", False) silent = kwargs.get("silent", False)
raise404 = kwargs.get("raise404", True) raise404 = kwargs.get("raise404", True)
timeout = kwargs.get("timeout", conf.timeout)
auxHeaders = kwargs.get("auxHeaders", None) auxHeaders = kwargs.get("auxHeaders", None)
response = kwargs.get("response", False) response = kwargs.get("response", False)
ignoreTimeout = kwargs.get("ignoreTimeout", kb.ignoreTimeout) ignoreTimeout = kwargs.get("ignoreTimeout", kb.ignoreTimeout)
@ -248,10 +248,7 @@ class Connect(object):
url = unicodeencode(url) url = unicodeencode(url)
try: try:
if silent: socket.setdefaulttimeout(timeout)
socket.setdefaulttimeout(HTTP_SILENT_TIMEOUT)
else:
socket.setdefaulttimeout(conf.timeout)
if direct_: if direct_:
if "?" in url: if "?" in url:
@ -529,14 +526,16 @@ class Connect(object):
if "BadStatusLine" not in tbMsg: if "BadStatusLine" not in tbMsg:
warnMsg += " or proxy" warnMsg += " or proxy"
if "forcibly closed" in tbMsg: if silent:
return None, None, None
elif "forcibly closed" in tbMsg:
logger.critical(warnMsg) logger.critical(warnMsg)
return None, None, None return None, None, None
elif silent or (ignoreTimeout and any(_ in tbMsg for _ in ("timed out", "IncompleteRead"))): elif ignoreTimeout and any(_ in tbMsg for _ in ("timed out", "IncompleteRead")):
return None, None, None return None, None, None
elif threadData.retriesCount < conf.retries and not kb.threadException: elif threadData.retriesCount < conf.retries and not kb.threadException:
warnMsg += ". sqlmap is going to retry the request" warnMsg += ". sqlmap is going to retry the request"
logger.log(logging.CRITICAL if not conf.identifyWaf else logging.DEBUG, warnMsg) logger.critical(warnMsg)
return Connect._retryProxy(**kwargs) return Connect._retryProxy(**kwargs)
elif kb.testMode: elif kb.testMode:
logger.critical(warnMsg) logger.critical(warnMsg)

View File

@ -41,6 +41,7 @@ from lib.core.enums import DBMS
from lib.core.enums import OS from lib.core.enums import OS
from lib.core.enums import PAYLOAD from lib.core.enums import PAYLOAD
from lib.core.enums import WEB_API from lib.core.enums import WEB_API
from lib.core.settings import BACKDOOR_RUN_CMD_TIMEOUT
from lib.core.settings import EVENTVALIDATION_REGEX from lib.core.settings import EVENTVALIDATION_REGEX
from lib.core.settings import VIEWSTATE_REGEX from lib.core.settings import VIEWSTATE_REGEX
from lib.request.connect import Connect as Request from lib.request.connect import Connect as Request
@ -71,7 +72,7 @@ class Web:
cmd = conf.osCmd cmd = conf.osCmd
cmdUrl = "%s?cmd=%s" % (self.webBackdoorUrl, cmd) cmdUrl = "%s?cmd=%s" % (self.webBackdoorUrl, cmd)
page, _, _ = Request.getPage(url=cmdUrl, direct=True, silent=True) page, _, _ = Request.getPage(url=cmdUrl, direct=True, silent=True, timeout=BACKDOOR_RUN_CMD_TIMEOUT)
if page is not None: if page is not None:
output = re.search("<pre>(.+?)</pre>", page, re.I | re.S) output = re.search("<pre>(.+?)</pre>", page, re.I | re.S)