Adding integrity checks in case of unhandled exceptions

This commit is contained in:
Miroslav Stampar 2016-07-17 00:04:30 +02:00
parent 7427b554e3
commit e485531b71
5 changed files with 33 additions and 11 deletions

3
.gitattributes vendored
View File

@ -1,5 +1,6 @@
*.py text eol=lf
*.conf text eol=lf *.conf text eol=lf
*.md5 text eol=lf
*.py text eol=lf
*_ binary *_ binary
*.dll binary *.dll binary

View File

@ -1207,6 +1207,7 @@ def setPaths():
paths.SQL_SHELL_HISTORY = os.path.join(_, "sql.hst") paths.SQL_SHELL_HISTORY = os.path.join(_, "sql.hst")
paths.SQLMAP_SHELL_HISTORY = os.path.join(_, "sqlmap.hst") paths.SQLMAP_SHELL_HISTORY = os.path.join(_, "sqlmap.hst")
paths.GITHUB_HISTORY = os.path.join(_, "github.hst") paths.GITHUB_HISTORY = os.path.join(_, "github.hst")
paths.CHECKSUM_MD5 = os.path.join(paths.SQLMAP_TXT_PATH, "checksum.md5")
paths.COMMON_COLUMNS = os.path.join(paths.SQLMAP_TXT_PATH, "common-columns.txt") paths.COMMON_COLUMNS = os.path.join(paths.SQLMAP_TXT_PATH, "common-columns.txt")
paths.COMMON_TABLES = os.path.join(paths.SQLMAP_TXT_PATH, "common-tables.txt") paths.COMMON_TABLES = os.path.join(paths.SQLMAP_TXT_PATH, "common-tables.txt")
paths.COMMON_OUTPUTS = os.path.join(paths.SQLMAP_TXT_PATH, 'common-outputs.txt') paths.COMMON_OUTPUTS = os.path.join(paths.SQLMAP_TXT_PATH, 'common-outputs.txt')
@ -3077,6 +3078,22 @@ def decodeIntToUnicode(value):
return retVal return retVal
def checkIntegrity():
"""
Checks integrity of code files during the unhandled exceptions
"""
retVal = True
for checksum, _ in (re.split(r'\s+', _) for _ in getFileItems(paths.CHECKSUM_MD5)):
path = os.path.normpath(os.path.join(paths.SQLMAP_ROOT_PATH, _))
if not os.path.isfile(path):
logger.error("missing file detected '%s'" % path)
retVal = False
elif hashlib.md5(open(path, 'rb').read()).hexdigest() != checksum:
logger.error("wrong checksum of file '%s' detected" % path)
retVal = False
return retVal
def unhandledExceptionMessage(): def unhandledExceptionMessage():
""" """
Returns detailed message about occurred unhandled exception Returns detailed message about occurred unhandled exception

View File

@ -19,7 +19,7 @@ from lib.core.enums import OS
from lib.core.revision import getRevisionNumber from lib.core.revision import getRevisionNumber
# sqlmap version (<major>.<minor>.<month>.<monthly commit>) # sqlmap version (<major>.<minor>.<month>.<monthly commit>)
VERSION = "1.0.7.29" VERSION = "1.0.7.30"
REVISION = getRevisionNumber() REVISION = getRevisionNumber()
STABLE = VERSION.count('.') <= 2 STABLE = VERSION.count('.') <= 2
VERSION_STRING = "sqlmap/%s#%s" % (VERSION, "stable" if STABLE else "dev") VERSION_STRING = "sqlmap/%s#%s" % (VERSION, "stable" if STABLE else "dev")

View File

@ -34,6 +34,7 @@ from lib.core.data import logger
try: try:
from lib.controller.controller import start from lib.controller.controller import start
from lib.core.common import banner from lib.core.common import banner
from lib.core.common import checkIntegrity
from lib.core.common import createGithubIssue from lib.core.common import createGithubIssue
from lib.core.common import dataToStdout from lib.core.common import dataToStdout
from lib.core.common import getSafeExString from lib.core.common import getSafeExString
@ -196,7 +197,15 @@ def main():
excMsg = traceback.format_exc() excMsg = traceback.format_exc()
try: try:
if any(_ in excMsg for _ in ("No space left", "Disk quota exceeded")): if not checkIntegrity():
errMsg = "code integrity check failed. "
errMsg += "You should retrieve the latest development version from official GitHub "
errMsg += "repository at '%s'" % GIT_PAGE
logger.critical(errMsg)
print
print excMsg.strip()
raise SystemExit
elif any(_ in excMsg for _ in ("No space left", "Disk quota exceeded")):
errMsg = "no space left on output device" errMsg = "no space left on output device"
logger.error(errMsg) logger.error(errMsg)
raise SystemExit raise SystemExit
@ -213,11 +222,6 @@ def main():
logger.error(errMsg) logger.error(errMsg)
raise SystemExit raise SystemExit
elif "in _loadQueries" in excMsg:
errMsg = "invalid structure of 'xml/queries.xml' file"
logger.error(errMsg)
raise SystemExit
elif "_mkstemp_inner" in excMsg: elif "_mkstemp_inner" in excMsg:
errMsg = "there has been a problem while accessing temporary files" errMsg = "there has been a problem while accessing temporary files"
logger.error(errMsg) logger.error(errMsg)

View File

@ -109,7 +109,7 @@ b04db3e861edde1f9dd0a3850d5b96c8 ./shell/backdoor.asp_
ff90cb0366f7cefbdd6e573e27e6238c ./shell/runcmd.exe_ ff90cb0366f7cefbdd6e573e27e6238c ./shell/runcmd.exe_
01e3505e796edf19aad6a996101c81c9 ./shell/stager.php_ 01e3505e796edf19aad6a996101c81c9 ./shell/stager.php_
1f7f125f30e0e800beb21e2ebbab18e1 ./shell/stager.jsp_ 1f7f125f30e0e800beb21e2ebbab18e1 ./shell/stager.jsp_
28bdeba99aa04e10f00530eb88fef301 ./sqlmap.py af69c5e3d20bd472ba386056e9cf2fd6 ./sqlmap.py
07eb9ee33a3e31bfc74763bea8026a2b ./waf/knownsec.py 07eb9ee33a3e31bfc74763bea8026a2b ./waf/knownsec.py
d50415b49d9df72cb9d193d05630ab8a ./waf/fortiweb.py d50415b49d9df72cb9d193d05630ab8a ./waf/fortiweb.py
8d5609a37127782fb35af4f67b5787ee ./waf/proventia.py 8d5609a37127782fb35af4f67b5787ee ./waf/proventia.py
@ -311,7 +311,7 @@ e77cca1cb063016f71f6e6bdebf4ec73 ./lib/core/data.py
2689f320908964b2c88a3eb8265fd2dd ./lib/core/agent.py 2689f320908964b2c88a3eb8265fd2dd ./lib/core/agent.py
8485a3cd94c0a5af2718bad60c5f1ae5 ./lib/core/wordlist.py 8485a3cd94c0a5af2718bad60c5f1ae5 ./lib/core/wordlist.py
eb0bd28b0bd9fbf67dcc3119116df377 ./lib/core/bigarray.py eb0bd28b0bd9fbf67dcc3119116df377 ./lib/core/bigarray.py
86f543debcb2011d983fac4482f1e544 ./lib/core/settings.py 662c04d988a5308b98ea74df68f50392 ./lib/core/settings.py
34a45b9bc68a6381247a620ddf30de1c ./lib/core/enums.py 34a45b9bc68a6381247a620ddf30de1c ./lib/core/enums.py
99a2b496b9d5b546b335653ca801153f ./lib/core/revision.py 99a2b496b9d5b546b335653ca801153f ./lib/core/revision.py
4a16002c5d9cd047c2e89ddc5db63737 ./lib/core/dicts.py 4a16002c5d9cd047c2e89ddc5db63737 ./lib/core/dicts.py
@ -333,7 +333,7 @@ cc9c82cfffd8ee9b25ba3af6284f057e ./lib/core/__init__.py
67f206cf2658145992cc1d7020138325 ./lib/core/defaults.py 67f206cf2658145992cc1d7020138325 ./lib/core/defaults.py
7af83e4f18cab6dff5e67840eb65be80 ./lib/core/shell.py 7af83e4f18cab6dff5e67840eb65be80 ./lib/core/shell.py
1d042f0bc0557d3fd564ea5a46deb77e ./lib/core/datatype.py 1d042f0bc0557d3fd564ea5a46deb77e ./lib/core/datatype.py
b1e8297aa42eec379936b4ce7f2934b2 ./lib/core/common.py 25fcb4a9fd187cb587847852df4ac784 ./lib/core/common.py
1d064463302b85b2241263ea48a83837 ./lib/takeover/metasploit.py 1d064463302b85b2241263ea48a83837 ./lib/takeover/metasploit.py
7083825564c051a7265cfdd1a5e6629c ./lib/takeover/registry.py 7083825564c051a7265cfdd1a5e6629c ./lib/takeover/registry.py
7d6cd7bdfc8f4bc4e8aed60c84cdf87f ./lib/takeover/udf.py 7d6cd7bdfc8f4bc4e8aed60c84cdf87f ./lib/takeover/udf.py