diff --git a/extra/esperanto/handler.py b/extra/esperanto/handler.py index 4979e54a8bf..37561fcb583 100644 --- a/extra/esperanto/handler.py +++ b/extra/esperanto/handler.py @@ -31,6 +31,7 @@ def buildHandler(): from lib.core.enums import CHARSET_TYPE from lib.core.enums import EXPECTED from lib.core.exception import SqlmapDataException + from lib.core.exception import SqlmapUnsupportedFeatureException from lib.request.inject import checkBooleanExpression from lib.request.inject import getValue from plugins.generic.enumeration import Enumeration @@ -53,6 +54,15 @@ def __init__(self): # reuses what --columns already enumerated self._scopeCache = {} # table -> resolved schema (see _scopeFor) + def __getattr__(self, name): + # this handler only mixes in Enumeration/Miscellaneous (read-only, boolean-oracle + # extraction); any DBMS-specific capability (--os-*/--file-*/--sql-shell/--udf-*/--reg-*/ + # --cleanup) has no generic equivalent - fail cleanly instead of an AttributeError deep + # in action(). Leading underscore excluded so internal/dunder lookups behave normally. + if name.startswith("_"): + raise AttributeError(name) + raise SqlmapUnsupportedFeatureException("Esperanto does not support '%s' (DBMS-agnostic engine covers enumeration/dump only)" % name) + def _engine(self): if self._esp is None: # esperanto is a PURE boolean-oracle engine: every probe is one true/false diff --git a/lib/controller/checks.py b/lib/controller/checks.py index c94c1529f66..6cc44e4c781 100644 --- a/lib/controller/checks.py +++ b/lib/controller/checks.py @@ -1325,7 +1325,7 @@ def checkJWT(): headers, missing expiry), hinting at '--jwt' for active confirmation and injection. """ - if kb.jwtChecked or conf.jwt: + if kb.get("jwtChecked") or conf.jwt: return kb.jwtChecked = True diff --git a/lib/core/settings.py b/lib/core/settings.py index 657b03a88e4..e3b24cb8da9 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -20,7 +20,7 @@ from thirdparty import six # sqlmap version (...) -VERSION = "1.10.9.6" +VERSION = "1.10.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)