From 569e060aabfc99503f93e639398d6a4c26dce247 Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Sun, 26 Dec 2010 13:20:52 +0000 Subject: [PATCH] important improvement --- lib/controller/checks.py | 3 ++- lib/core/common.py | 8 ++++++++ lib/core/threads.py | 1 + lib/request/comparison.py | 3 ++- lib/request/connect.py | 2 ++ 5 files changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/controller/checks.py b/lib/controller/checks.py index bc11e6587..10da87470 100644 --- a/lib/controller/checks.py +++ b/lib/controller/checks.py @@ -28,6 +28,7 @@ from lib.core.common import removeDynamicContent from lib.core.common import showStaticWords from lib.core.common import trimAlphaNum from lib.core.common import wasLastRequestDBMSError +from lib.core.common import wasLastRequestHTTPError from lib.core.common import DynamicContentItem from lib.core.data import conf from lib.core.data import kb @@ -762,7 +763,7 @@ def checkConnection(suppressOutput=False): try: page, _ = Request.queryPage(content=True) kb.originalPage = kb.pageTemplate = page - kb.errorIsNone = not wasLastRequestDBMSError() + kb.errorIsNone = not wasLastRequestDBMSError() and not wasLastRequestHTTPError() except sqlmapConnectionException, errMsg: errMsg = getUnicode(errMsg) raise sqlmapConnectionException, errMsg diff --git a/lib/core/common.py b/lib/core/common.py index 2c537585a..3715883de 100644 --- a/lib/core/common.py +++ b/lib/core/common.py @@ -1560,6 +1560,14 @@ def wasLastRequestDBMSError(): threadData = getCurrentThreadData() return threadData.lastErrorPage and threadData.lastErrorPage[0] == threadData.lastRequestUID +def wasLastRequestHTTPError(): + """ + Returns True if the last web request resulted in an errornous HTTP code (like 500) + """ + + threadData = getCurrentThreadData() + return threadData.lastHTTPError and threadData.lastHTTPError[0] == threadData.lastRequestUID + def wasLastRequestDelayed(): """ Returns True if the last web request resulted in a time-delay diff --git a/lib/core/threads.py b/lib/core/threads.py index 697a1d18f..b3352171c 100644 --- a/lib/core/threads.py +++ b/lib/core/threads.py @@ -18,6 +18,7 @@ class ThreadData(): def __init__(self): self.lastErrorPage = None + self.lastHTTPError = None self.lastQueryDuration = 0 self.lastRequestUID = 0 self.valueStack = [] diff --git a/lib/request/comparison.py b/lib/request/comparison.py index 054a8de6a..86f59259b 100644 --- a/lib/request/comparison.py +++ b/lib/request/comparison.py @@ -13,6 +13,7 @@ from difflib import SequenceMatcher from lib.core.common import removeDynamicContent from lib.core.common import wasLastRequestDBMSError +from lib.core.common import wasLastRequestHTTPError from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger @@ -58,7 +59,7 @@ def comparison(page, headers=None, getSeqMatcher=False, pageLength=None): return re.search(conf.regexp, page, re.I | re.M) is not None # In case of an DBMS error page return None - if kb.errorIsNone and wasLastRequestDBMSError(): + if kb.errorIsNone and (wasLastRequestDBMSError() or wasLastRequestHTTPError()): return None # Dynamic content lines to be excluded before comparison diff --git a/lib/request/connect.py b/lib/request/connect.py index 4c7c1e82b..7d83fce0d 100644 --- a/lib/request/connect.py +++ b/lib/request/connect.py @@ -235,6 +235,8 @@ class Connect: code = e.code status = e.msg + threadData.lastHTTPError = (threadData.lastRequestUID, code) + try: page = e.read() responseHeaders = e.info()