From 9b3d2292942501ddcaf83191a34438af23ef439e Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Mon, 10 Apr 2017 19:21:22 +0200 Subject: [PATCH] Fixes #2471 --- doc/CONTRIBUTING.md | 76 +++++++++++++++--------------- lib/controller/controller.py | 2 +- lib/core/common.py | 8 ++-- lib/core/dump.py | 18 +++---- lib/core/option.py | 2 +- lib/core/settings.py | 2 +- lib/techniques/blind/inference.py | 16 +++---- lib/techniques/brute/use.py | 4 +- lib/techniques/error/use.py | 2 +- lib/techniques/union/use.py | 2 +- lib/utils/api.py | 2 +- lib/utils/hash.py | 4 +- plugins/dbms/hsqldb/fingerprint.py | 4 +- plugins/dbms/mysql/fingerprint.py | 4 +- sqlmap.py | 6 +-- txt/checksum.md5 | 28 +++++------ 16 files changed, 90 insertions(+), 90 deletions(-) diff --git a/doc/CONTRIBUTING.md b/doc/CONTRIBUTING.md index 1de4a195d..59bffa40b 100644 --- a/doc/CONTRIBUTING.md +++ b/doc/CONTRIBUTING.md @@ -1,38 +1,38 @@ -# Contributing to sqlmap - -## Reporting bugs - -**Bug reports are welcome**! -Please report all bugs on the [issue tracker](https://github.com/sqlmapproject/sqlmap/issues). - -### Guidelines - -* Before you submit a bug report, search both [open](https://github.com/sqlmapproject/sqlmap/issues?q=is%3Aopen+is%3Aissue) and [closed](https://github.com/sqlmapproject/sqlmap/issues?q=is%3Aissue+is%3Aclosed) issues to make sure the issue has not come up before. Also, check the [user's manual](https://github.com/sqlmapproject/sqlmap/wiki) for anything relevant. -* Make sure you can reproduce the bug with the latest development version of sqlmap. -* Your report should give detailed instructions on how to reproduce the problem. If sqlmap raises an unhandled exception, the entire traceback is needed. Details of the unexpected behaviour are welcome too. A small test case (just a few lines) is ideal. -* If you are making an enhancement request, lay out the rationale for the feature you are requesting. *Why would this feature be useful?* -* If you are not sure whether something is a bug, or want to discuss a potential new feature before putting in an enhancement request, the [mailing list](https://lists.sourceforge.net/lists/listinfo/sqlmap-users) is a good place to bring it up. - -## Submitting code changes - -All code contributions are greatly appreciated. First off, clone the [Git repository](https://github.com/sqlmapproject/sqlmap), read the [user's manual](https://github.com/sqlmapproject/sqlmap/wiki) carefully, go through the code yourself and [drop us an email](mailto:dev@sqlmap.org) if you are having a hard time grasping its structure and meaning. We apologize for not commenting the code enough - you could take a chance to read it through and [improve it](https://github.com/sqlmapproject/sqlmap/issues/37). - -Our preferred method of patch submission is via a Git [pull request](https://help.github.com/articles/using-pull-requests). -Many [people](https://raw.github.com/sqlmapproject/sqlmap/master/doc/THANKS.md) have contributed in different ways to the sqlmap development. **You** can be the next! - -### Guidelines - -In order to maintain consistency and readability throughout the code, we ask that you adhere to the following instructions: - -* Each patch should make one logical change. -* Wrap code to 76 columns when possible. -* Avoid tabbing, use four blank spaces instead. -* Before you put time into a non-trivial patch, it is worth discussing it on the [mailing list](https://lists.sourceforge.net/lists/listinfo/sqlmap-users) or privately by [email](mailto:dev@sqlmap.org). -* Do not change style on numerous files in one single pull request, we can [discuss](mailto:dev@sqlmap.org) about those before doing any major restyling, but be sure that personal preferences not having a strong support in [PEP 8](http://www.python.org/dev/peps/pep-0008/) will likely to be rejected. -* Make changes on less than five files per single pull request - there is rarely a good reason to have more than five files changed on one pull request, as this dramatically increases the review time required to land (commit) any of those pull requests. -* Style that is too different from main branch will be ''adapted'' by the developers side. -* Do not touch anything inside `thirdparty/` and `extra/` folders. - -### Licensing - -By submitting code contributions to the sqlmap developers, to the mailing list, or via Git pull request, checking them into the sqlmap source code repository, it is understood (unless you specify otherwise) that you are offering the sqlmap copyright holders the unlimited, non-exclusive right to reuse, modify, and relicense the code. This is important because the inability to relicense code has caused devastating problems for other software projects (such as KDE and NASM). If you wish to specify special license conditions of your contributions, just say so when you send them. +# Contributing to sqlmap + +## Reporting bugs + +**Bug reports are welcome**! +Please report all bugs on the [issue tracker](https://github.com/sqlmapproject/sqlmap/issues). + +### Guidelines + +* Before you submit a bug report, search both [open](https://github.com/sqlmapproject/sqlmap/issues?q=is%3Aopen+is%3Aissue) and [closed](https://github.com/sqlmapproject/sqlmap/issues?q=is%3Aissue+is%3Aclosed) issues to make sure the issue has not come up before. Also, check the [user's manual](https://github.com/sqlmapproject/sqlmap/wiki) for anything relevant. +* Make sure you can reproduce the bug with the latest development version of sqlmap. +* Your report should give detailed instructions on how to reproduce the problem. If sqlmap raises an unhandled exception, the entire traceback is needed. Details of the unexpected behaviour are welcome too. A small test case (just a few lines) is ideal. +* If you are making an enhancement request, lay out the rationale for the feature you are requesting. *Why would this feature be useful?* +* If you are not sure whether something is a bug, or want to discuss a potential new feature before putting in an enhancement request, the [mailing list](https://lists.sourceforge.net/lists/listinfo/sqlmap-users) is a good place to bring it up. + +## Submitting code changes + +All code contributions are greatly appreciated. First off, clone the [Git repository](https://github.com/sqlmapproject/sqlmap), read the [user's manual](https://github.com/sqlmapproject/sqlmap/wiki) carefully, go through the code yourself and [drop us an email](mailto:dev@sqlmap.org) if you are having a hard time grasping its structure and meaning. We apologize for not commenting the code enough - you could take a chance to read it through and [improve it](https://github.com/sqlmapproject/sqlmap/issues/37). + +Our preferred method of patch submission is via a Git [pull request](https://help.github.com/articles/using-pull-requests). +Many [people](https://raw.github.com/sqlmapproject/sqlmap/master/doc/THANKS.md) have contributed in different ways to the sqlmap development. **You** can be the next! + +### Guidelines + +In order to maintain consistency and readability throughout the code, we ask that you adhere to the following instructions: + +* Each patch should make one logical change. +* Wrap code to 76 columns when possible. +* Avoid tabbing, use four blank spaces instead. +* Before you put time into a non-trivial patch, it is worth discussing it on the [mailing list](https://lists.sourceforge.net/lists/listinfo/sqlmap-users) or privately by [email](mailto:dev@sqlmap.org). +* Do not change style on numerous files in one single pull request, we can [discuss](mailto:dev@sqlmap.org) about those before doing any major restyling, but be sure that personal preferences not having a strong support in [PEP 8](http://www.python.org/dev/peps/pep-0008/) will likely to be rejected. +* Make changes on less than five files per single pull request - there is rarely a good reason to have more than five files changed on one pull request, as this dramatically increases the review time required to land (commit) any of those pull requests. +* Style that is too different from main branch will be ''adapted'' by the developers side. +* Do not touch anything inside `thirdparty/` and `extra/` folders. + +### Licensing + +By submitting code contributions to the sqlmap developers, to the mailing list, or via Git pull request, checking them into the sqlmap source code repository, it is understood (unless you specify otherwise) that you are offering the sqlmap copyright holders the unlimited, non-exclusive right to reuse, modify, and relicense the code. This is important because the inability to relicense code has caused devastating problems for other software projects (such as KDE and NASM). If you wish to specify special license conditions of your contributions, just say so when you send them. diff --git a/lib/controller/controller.py b/lib/controller/controller.py index c8b090ed2..cf5dd8974 100644 --- a/lib/controller/controller.py +++ b/lib/controller/controller.py @@ -161,7 +161,7 @@ def _showInjections(): else: header = "sqlmap resumed the following injection point(s) from stored session" - if hasattr(conf, "api"): + if conf.api: conf.dumper.string("", {"url": conf.url, "query": conf.parameters.get(PLACE.GET), "data": conf.parameters.get(PLACE.POST)}, content_type=CONTENT_TYPE.TARGET) conf.dumper.string("", kb.injections, content_type=CONTENT_TYPE.TECHNIQUES) else: diff --git a/lib/core/common.py b/lib/core/common.py index 2805ec9bc..d37f021cc 100644 --- a/lib/core/common.py +++ b/lib/core/common.py @@ -270,7 +270,7 @@ class Format(object): infoApi = {} if info and "type" in info: - if hasattr(conf, "api"): + if conf.api: infoApi["%s operating system" % target] = info else: infoStr += "%s operating system: %s" % (target, Format.humanize(info["type"])) @@ -288,12 +288,12 @@ class Format(object): infoStr += " (%s)" % Format.humanize(info["codename"]) if "technology" in info: - if hasattr(conf, "api"): + if conf.api: infoApi["web application technology"] = Format.humanize(info["technology"], ", ") else: infoStr += "\nweb application technology: %s" % Format.humanize(info["technology"], ", ") - if hasattr(conf, "api"): + if conf.api: return infoApi else: return infoStr.lstrip() @@ -896,7 +896,7 @@ def dataToStdout(data, forceOutput=False, bold=False, content_type=None, status= message = data try: - if hasattr(conf, "api"): + if conf.get("api"): sys.stdout.write(message, status, content_type) else: sys.stdout.write(setColor(message, bold)) diff --git a/lib/core/dump.py b/lib/core/dump.py index cd4a93be9..108f806b2 100644 --- a/lib/core/dump.py +++ b/lib/core/dump.py @@ -63,7 +63,7 @@ class Dump(object): self._lock = threading.Lock() def _write(self, data, newline=True, console=True, content_type=None): - if hasattr(conf, "api"): + if conf.api: dataToStdout(data, content_type=content_type, status=CONTENT_STATUS.COMPLETE) return @@ -110,7 +110,7 @@ class Dump(object): def string(self, header, data, content_type=None, sort=True): kb.stickyLevel = None - if hasattr(conf, "api"): + if conf.api: self._write(data, content_type=content_type) return @@ -144,7 +144,7 @@ class Dump(object): except: pass - if hasattr(conf, "api"): + if conf.api: self._write(elements, content_type=content_type) return @@ -193,7 +193,7 @@ class Dump(object): users = userSettings.keys() users.sort(key=lambda x: x.lower() if isinstance(x, basestring) else x) - if hasattr(conf, "api"): + if conf.api: self._write(userSettings, content_type=content_type) return @@ -227,7 +227,7 @@ class Dump(object): def dbTables(self, dbTables): if isinstance(dbTables, dict) and len(dbTables) > 0: - if hasattr(conf, "api"): + if conf.api: self._write(dbTables, content_type=CONTENT_TYPE.TABLES) return @@ -270,7 +270,7 @@ class Dump(object): def dbTableColumns(self, tableColumns, content_type=None): if isinstance(tableColumns, dict) and len(tableColumns) > 0: - if hasattr(conf, "api"): + if conf.api: self._write(tableColumns, content_type=content_type) return @@ -344,7 +344,7 @@ class Dump(object): def dbTablesCount(self, dbTables): if isinstance(dbTables, dict) and len(dbTables) > 0: - if hasattr(conf, "api"): + if conf.api: self._write(dbTables, content_type=CONTENT_TYPE.COUNT) return @@ -403,7 +403,7 @@ class Dump(object): db = "All" table = tableValues["__infos__"]["table"] - if hasattr(conf, "api"): + if conf.api: self._write(tableValues, content_type=CONTENT_TYPE.DUMP_TABLE) return @@ -666,7 +666,7 @@ class Dump(object): logger.warn(msg) def dbColumns(self, dbColumnsDict, colConsider, dbs): - if hasattr(conf, "api"): + if conf.api: self._write(dbColumnsDict, content_type=CONTENT_TYPE.COLUMNS) return diff --git a/lib/core/option.py b/lib/core/option.py index 0bc5c2be4..f460388b5 100755 --- a/lib/core/option.py +++ b/lib/core/option.py @@ -2192,7 +2192,7 @@ def _mergeOptions(inputOptions, overrideOptions): if key not in conf or value not in (None, False) or overrideOptions: conf[key] = value - if not hasattr(conf, "api"): + if not conf.api: for key, value in conf.items(): if value is not None: kb.explicitSettings.add(key) diff --git a/lib/core/settings.py b/lib/core/settings.py index 2492a0b25..5defb6e44 100755 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -19,7 +19,7 @@ from lib.core.enums import DBMS_DIRECTORY_NAME from lib.core.enums import OS # sqlmap version (...) -VERSION = "1.1.4.13" +VERSION = "1.1.4.14" TYPE = "dev" if VERSION.count('.') > 2 and VERSION.split('.')[-1] != '0' else "stable" TYPE_COLORS = {"dev": 33, "stable": 90, "pip": 34} VERSION_STRING = "sqlmap/%s#%s" % ('.'.join(VERSION.split('.')[:-1]) if VERSION.count('.') > 2 and VERSION.split('.')[-1] == '0' else VERSION, TYPE) diff --git a/lib/techniques/blind/inference.py b/lib/techniques/blind/inference.py index f2ea35d1f..75a7fb2e4 100644 --- a/lib/techniques/blind/inference.py +++ b/lib/techniques/blind/inference.py @@ -97,7 +97,7 @@ def bisection(payload, expression, length=None, charsetType=None, firstChar=None # Set kb.partRun in case "common prediction" feature (a.k.a. "good samaritan") is used or the engine is called from the API if conf.predictOutput: kb.partRun = getPartRun() - elif hasattr(conf, "api"): + elif conf.api: kb.partRun = getPartRun(alias=False) else: kb.partRun = None @@ -168,7 +168,7 @@ def bisection(payload, expression, length=None, charsetType=None, firstChar=None warnMsg += "usage of option '--threads' for faster data retrieval" singleTimeWarnMessage(warnMsg) - if conf.verbose in (1, 2) and not showEta and not hasattr(conf, "api"): + if conf.verbose in (1, 2) and not showEta and not conf.api: if isinstance(length, int) and conf.threads > 1: dataToStdout("[%s] [INFO] retrieved: %s" % (time.strftime("%X"), "_" * min(length, conf.progressWidth))) dataToStdout("\r[%s] [INFO] retrieved: " % time.strftime("%X")) @@ -492,7 +492,7 @@ def bisection(payload, expression, length=None, charsetType=None, firstChar=None if (endCharIndex - startCharIndex == conf.progressWidth) and (endCharIndex < length - 1): output = output[:-2] + '..' - if conf.verbose in (1, 2) and not showEta and not hasattr(conf, "api"): + if conf.verbose in (1, 2) and not showEta and not conf.api: _ = count - firstChar output += '_' * (min(length, conf.progressWidth) - len(output)) status = ' %d/%d (%d%%)' % (_, length, round(100.0 * _ / length)) @@ -522,7 +522,7 @@ def bisection(payload, expression, length=None, charsetType=None, firstChar=None finalValue = "".join(value) infoMsg = "\r[%s] [INFO] retrieved: %s" % (time.strftime("%X"), filterControlChars(finalValue)) - if conf.verbose in (1, 2) and not showEta and infoMsg and not hasattr(conf, "api"): + if conf.verbose in (1, 2) and not showEta and infoMsg and not conf.api: dataToStdout(infoMsg) # No multi-threading (--threads = 1) @@ -558,7 +558,7 @@ def bisection(payload, expression, length=None, charsetType=None, firstChar=None if result: if showEta: progress.progress(time.time() - charStart, len(commonValue)) - elif conf.verbose in (1, 2) or hasattr(conf, "api"): + elif conf.verbose in (1, 2) or conf.api: dataToStdout(filterControlChars(commonValue[index - 1:])) finalValue = commonValue @@ -608,7 +608,7 @@ def bisection(payload, expression, length=None, charsetType=None, firstChar=None if showEta: progress.progress(time.time() - charStart, index) - elif conf.verbose in (1, 2) or hasattr(conf, "api"): + elif conf.verbose in (1, 2) or conf.api: dataToStdout(filterControlChars(val)) # some DBMSes (e.g. Firebird, DB2, etc.) have issues with trailing spaces @@ -635,11 +635,11 @@ def bisection(payload, expression, length=None, charsetType=None, firstChar=None elif partialValue: hashDBWrite(expression, "%s%s" % (PARTIAL_VALUE_MARKER if not conf.hexConvert else PARTIAL_HEX_VALUE_MARKER, partialValue)) - if conf.hexConvert and not abortedFlag and not hasattr(conf, "api"): + if conf.hexConvert and not abortedFlag and not conf.api: infoMsg = "\r[%s] [INFO] retrieved: %s %s\n" % (time.strftime("%X"), filterControlChars(finalValue), " " * retrievedLength) dataToStdout(infoMsg) else: - if conf.verbose in (1, 2) and not showEta and not hasattr(conf, "api"): + if conf.verbose in (1, 2) and not showEta and not conf.api: dataToStdout("\n") if (conf.verbose in (1, 2) and showEta) or conf.verbose >= 3: diff --git a/lib/techniques/brute/use.py b/lib/techniques/brute/use.py index 97130ee30..30766786a 100644 --- a/lib/techniques/brute/use.py +++ b/lib/techniques/brute/use.py @@ -114,7 +114,7 @@ def tableExists(tableFile, regex=None): threadData.shared.value.append(table) threadData.shared.unique.add(table.lower()) - if conf.verbose in (1, 2) and not hasattr(conf, "api"): + if conf.verbose in (1, 2) and not conf.api: clearConsoleLine(True) infoMsg = "[%s] [INFO] retrieved: %s\n" % (time.strftime("%X"), unsafeSQLIdentificatorNaming(table)) dataToStdout(infoMsg, True) @@ -222,7 +222,7 @@ def columnExists(columnFile, regex=None): if result: threadData.shared.value.append(column) - if conf.verbose in (1, 2) and not hasattr(conf, "api"): + if conf.verbose in (1, 2) and not conf.api: clearConsoleLine(True) infoMsg = "[%s] [INFO] retrieved: %s\n" % (time.strftime("%X"), unsafeSQLIdentificatorNaming(column)) dataToStdout(infoMsg, True) diff --git a/lib/techniques/error/use.py b/lib/techniques/error/use.py index e7c047165..a4ef3cd90 100644 --- a/lib/techniques/error/use.py +++ b/lib/techniques/error/use.py @@ -301,7 +301,7 @@ def errorUse(expression, dump=False): _, _, _, _, _, expressionFieldsList, expressionFields, _ = agent.getFields(expression) # Set kb.partRun in case the engine is called from the API - kb.partRun = getPartRun(alias=False) if hasattr(conf, "api") else None + kb.partRun = getPartRun(alias=False) if conf.api else None # We have to check if the SQL query might return multiple entries # and in such case forge the SQL limiting the query output one diff --git a/lib/techniques/union/use.py b/lib/techniques/union/use.py index a90cf791f..9ff1559f9 100644 --- a/lib/techniques/union/use.py +++ b/lib/techniques/union/use.py @@ -215,7 +215,7 @@ def unionUse(expression, unpack=True, dump=False): _, _, _, _, _, expressionFieldsList, expressionFields, _ = agent.getFields(origExpr) # Set kb.partRun in case the engine is called from the API - kb.partRun = getPartRun(alias=False) if hasattr(conf, "api") else None + kb.partRun = getPartRun(alias=False) if conf.api else None if Backend.isDbms(DBMS.MSSQL) and kb.dumpColumns: kb.rowXmlMode = True diff --git a/lib/utils/api.py b/lib/utils/api.py index ade1a03fd..1ccbfd10a 100644 --- a/lib/utils/api.py +++ b/lib/utils/api.py @@ -282,7 +282,7 @@ class LogRecorder(logging.StreamHandler): def setRestAPILog(): - if hasattr(conf, "api"): + if conf.api: try: conf.databaseCursor = Database(conf.database) conf.databaseCursor.connect("client") diff --git a/lib/utils/hash.py b/lib/utils/hash.py index c6c8c4b4c..06396223d 100644 --- a/lib/utils/hash.py +++ b/lib/utils/hash.py @@ -583,7 +583,7 @@ def _bruteProcessVariantA(attack_info, hash_regex, suffix, retVal, proc_id, proc status = 'current status: %s... %s' % (word.ljust(5)[:5], ROTATING_CHARS[rotator]) - if not hasattr(conf, "api"): + if not conf.api: dataToStdout("\r[%s] [INFO] %s" % (time.strftime("%X"), status)) except KeyboardInterrupt: @@ -657,7 +657,7 @@ def _bruteProcessVariantB(user, hash_, kwargs, hash_regex, suffix, retVal, found if user and not user.startswith(DUMMY_USER_PREFIX): status += ' (user: %s)' % user - if not hasattr(conf, "api"): + if not conf.api: dataToStdout("\r[%s] [INFO] %s" % (time.strftime("%X"), status)) except KeyboardInterrupt: diff --git a/plugins/dbms/hsqldb/fingerprint.py b/plugins/dbms/hsqldb/fingerprint.py index 3c657ee87..e2ad5ce90 100644 --- a/plugins/dbms/hsqldb/fingerprint.py +++ b/plugins/dbms/hsqldb/fingerprint.py @@ -28,13 +28,13 @@ class Fingerprint(GenericFingerprint): value = "" wsOsFp = Format.getOs("web server", kb.headersFp) - if wsOsFp and not hasattr(conf, "api"): + if wsOsFp and not conf.api: value += "%s\n" % wsOsFp if kb.data.banner: dbmsOsFp = Format.getOs("back-end DBMS", kb.bannerFp) - if dbmsOsFp and not hasattr(conf, "api"): + if dbmsOsFp and not conf.api: value += "%s\n" % dbmsOsFp value += "back-end DBMS: " diff --git a/plugins/dbms/mysql/fingerprint.py b/plugins/dbms/mysql/fingerprint.py index c4a131cbb..4b7d5fcbe 100644 --- a/plugins/dbms/mysql/fingerprint.py +++ b/plugins/dbms/mysql/fingerprint.py @@ -95,13 +95,13 @@ class Fingerprint(GenericFingerprint): value = "" wsOsFp = Format.getOs("web server", kb.headersFp) - if wsOsFp and not hasattr(conf, "api"): + if wsOsFp and not conf.api: value += "%s\n" % wsOsFp if kb.data.banner: dbmsOsFp = Format.getOs("back-end DBMS", kb.bannerFp) - if dbmsOsFp and not hasattr(conf, "api"): + if dbmsOsFp and not conf.api: value += "%s\n" % dbmsOsFp value += "back-end DBMS: " diff --git a/sqlmap.py b/sqlmap.py index 73075d490..bfc20cb80 100755 --- a/sqlmap.py +++ b/sqlmap.py @@ -123,7 +123,7 @@ def main(): cmdLineOptions.update(cmdLineParser().__dict__) initOptions(cmdLineOptions) - if hasattr(conf, "api"): + if conf.get("api"): # heavy imports from lib.utils.api import StdDbOut from lib.utils.api import setRestAPILog @@ -285,7 +285,7 @@ def main(): errMsg = maskSensitiveData(errMsg) excMsg = maskSensitiveData(excMsg) - if hasattr(conf, "api"): + if conf.get("api"): logger.critical("%s\n%s" % (errMsg, excMsg)) else: logger.critical(errMsg) @@ -326,7 +326,7 @@ def main(): kb.clear() main() - if hasattr(conf, "api"): + if conf.get("api"): try: conf.databaseCursor.disconnect() except KeyboardInterrupt: diff --git a/txt/checksum.md5 b/txt/checksum.md5 index 68e6a186a..d0765e5c3 100644 --- a/txt/checksum.md5 +++ b/txt/checksum.md5 @@ -21,31 +21,31 @@ c55b400b72acc43e0e59c87dd8bb8d75 extra/shellcodeexec/windows/shellcodeexec.x32. 7713aa366c983cdf1f3dbaa7383ea9e1 extra/sqlharvest/sqlharvest.py 5df358defc488bee9b40084892e3d1cb lib/controller/action.py 9cb94acd4c59822a5e1a258c4d1a4860 lib/controller/checks.py -dc386321e8813788f155dc557a78be8d lib/controller/controller.py +20fbacfdcef41214dc2e9ad31fbc28ad lib/controller/controller.py d79481ab99acd739615e747d4a79d9d0 lib/controller/handler.py 310efc965c862cfbd7b0da5150a5ad36 lib/controller/__init__.py 19905ecb4437b94512cf21d5f1720091 lib/core/agent.py 6cc95a117fbd34ef31b9aa25520f0e31 lib/core/bigarray.py -652266ff49168dd88a9d5649003a3951 lib/core/common.py +95e165749bdb830e51be2159bc2c021e lib/core/common.py 5065a4242a8cccf72f91e22e1007ae63 lib/core/convert.py a8143dab9d3a27490f7d49b6b29ea530 lib/core/data.py 7936d78b1a7f1f008ff92bf2f88574ba lib/core/datatype.py 36c85e9ef109c5b4af3ca9bb1065ef1f lib/core/decorators.py 47eecd5499eaa15e931793e1d1ac3566 lib/core/defaults.py 7309cf449b009723d1a4655fcf1a96d7 lib/core/dicts.py -77edcfd3d7c5522bb64baf59ac23a047 lib/core/dump.py +65b9187de3d8c9c28ddab53ef2b399bc lib/core/dump.py b9ff4e622c416116bee6024c0f050349 lib/core/enums.py 9381a0c7e8bc19986299e84f4edda1a0 lib/core/exception.py 310efc965c862cfbd7b0da5150a5ad36 lib/core/__init__.py 9ba39bf66e9ecd469446bdbbeda906c3 lib/core/log.py ebb778c2d26eba8b34d7d8658e4105a6 lib/core/optiondict.py -bffd3f1bffa71a3c0ffc14768631f8ed lib/core/option.py +69e879487399f3028fe0291817f2f998 lib/core/option.py 5f2f56e6c5f274408df61943f1e080c0 lib/core/profiling.py 40be71cd774662a7b420caeb7051e7d5 lib/core/readlineng.py d8e9250f3775119df07e9070eddccd16 lib/core/replication.py 785f86e3f963fa3798f84286a4e83ff2 lib/core/revision.py 40c80b28b3a5819b737a5a17d4565ae9 lib/core/session.py -89f327b249b0c1267c92889ceca475a9 lib/core/settings.py +eb44bcdbc0438b1ac1772b05f0e89b08 lib/core/settings.py d91291997d2bd2f6028aaf371bf1d3b6 lib/core/shell.py 2ad85c130cc5f2b3701ea85c2f6bbf20 lib/core/subprocessng.py afd0636d2e93c23f4f0a5c9b6023ea17 lib/core/target.py @@ -86,25 +86,25 @@ ac541a0d38e4ecb4e41e97799a7235f4 lib/takeover/registry.py 4cd0322f22fbc26284cffa9f8f7545ef lib/takeover/udf.py c131528696edb96695aa1b58803bd6ae lib/takeover/web.py e5a82481947e798d0c11f3acf3e9db60 lib/takeover/xp_cmdshell.py -cae752650755c706272a45ae84519a4b lib/techniques/blind/inference.py +9f03972ea5ce2df74d43be5f30f068eb lib/techniques/blind/inference.py 310efc965c862cfbd7b0da5150a5ad36 lib/techniques/blind/__init__.py 310efc965c862cfbd7b0da5150a5ad36 lib/techniques/brute/__init__.py -a693c023a9fed1eebb9ca9ef51e0aeb8 lib/techniques/brute/use.py +ac3a32b7a84517730fa2885f4e8721ba lib/techniques/brute/use.py 310efc965c862cfbd7b0da5150a5ad36 lib/techniques/dns/__init__.py ab1601a7f429b47637c4fb8af703d0f1 lib/techniques/dns/test.py d3da4c7ceaf57c4687a052d58722f6bb lib/techniques/dns/use.py 310efc965c862cfbd7b0da5150a5ad36 lib/techniques/error/__init__.py -2fb0eb698fc9d6e19960d2136bce787d lib/techniques/error/use.py +be752c8075641bc390368c9955f34c91 lib/techniques/error/use.py 310efc965c862cfbd7b0da5150a5ad36 lib/techniques/__init__.py 310efc965c862cfbd7b0da5150a5ad36 lib/techniques/union/__init__.py 19fd73af7a278fd72b46a5a60f5bdd09 lib/techniques/union/test.py -8cd5655c60a638caa30ca1220896aeda lib/techniques/union/use.py -9fca8077f1ee6f701ce7b7972e05ee53 lib/utils/api.py +09b23d3ecb6c0e6e276822a3f2f3bf7b lib/techniques/union/use.py +981318873e2df1cc55173e8b8a4a7637 lib/utils/api.py 29e32d59fcdd63c5a13498af1f367c8c lib/utils/crawler.py ba12c69a90061aa14d848b8396e79191 lib/utils/deps.py 3b9fd519164e0bf275d5fd361c3f11ff lib/utils/getch.py ccfdad414ce2ec0c394c3deaa39a82bf lib/utils/hashdb.py -aff7355d582fc6c00a675eeee2a5217a lib/utils/hash.py +712ef6a703c9101690b9177b09a31b4c lib/utils/hash.py e76a08237ee6a4cd6855af79610ea8a5 lib/utils/htmlentities.py 310efc965c862cfbd7b0da5150a5ad36 lib/utils/__init__.py 9d8c858417d356e49e1959ba253aede4 lib/utils/pivotdumptable.py @@ -139,7 +139,7 @@ f86ace7fcaea5ff3f9e86ab2dce052c5 plugins/dbms/firebird/__init__.py 3a97bd07cce66bc812309341e7b54697 plugins/dbms/hsqldb/connector.py 015281fb8f96dbade0d2e30fc8da9c4c plugins/dbms/hsqldb/enumeration.py c0b14e62e1ecbb679569a1abb9cf1913 plugins/dbms/hsqldb/filesystem.py -82304c5d7b06bb564dcdd8cda84dbeae plugins/dbms/hsqldb/fingerprint.py +ad3090f3212a007274e016c3af90dddf plugins/dbms/hsqldb/fingerprint.py 0b18e3cf582b128cf9f16ee34ef85727 plugins/dbms/hsqldb/__init__.py 65e8f8edc9d18fe482deb474a29f83ff plugins/dbms/hsqldb/syntax.py 0a1584e2b01f33abe3ef91d99bafbd3f plugins/dbms/hsqldb/takeover.py @@ -168,7 +168,7 @@ a7ed0510e47384eaf93164d53e2b6b36 plugins/dbms/mssqlserver/enumeration.py 48fb283a0dbf980495ca054f7b55783f plugins/dbms/mysql/connector.py 7fe94b803fa273baf479b76ce7a3fb51 plugins/dbms/mysql/enumeration.py 1bd5e659962e814b66a451b807de9110 plugins/dbms/mysql/filesystem.py -1a17c2dea2cd7554cf9082fdf96f8360 plugins/dbms/mysql/fingerprint.py +5947eb45c33e183c61efc3e41a232c00 plugins/dbms/mysql/fingerprint.py 42568a66a13a43ed46748290c503a652 plugins/dbms/mysql/__init__.py 96dfafcc4aecc1c574148ac05dbdb6da plugins/dbms/mysql/syntax.py 33b2dc28075ab560fd8a4dc898682a0d plugins/dbms/mysql/takeover.py @@ -224,7 +224,7 @@ c3cc8b7727161e64ab59f312c33b541a shell/stager.aspx_ 1f7f125f30e0e800beb21e2ebbab18e1 shell/stager.jsp_ 01e3505e796edf19aad6a996101c81c9 shell/stager.php_ 0751a45ac4c130131f2cdb74d866b664 sqlmapapi.py -dee6a537359c049dabe4ffe3de881359 sqlmap.py +e6e6fbed25e09f29ce62a2d55932e331 sqlmap.py 08c711a470d7e0bf705320ba3c48b886 tamper/apostrophemask.py e8509df10d3f1c28014d7825562d32dd tamper/apostrophenullencode.py bb27f7dc980ea07fcfedbd7da5e5e029 tamper/appendnullbyte.py