Path: blob/master/plugins/dbms/cache/fingerprint.py
2992 views
#!/usr/bin/env python12"""3Copyright (c) 2006-2025 sqlmap developers (https://sqlmap.org)4See the file 'LICENSE' for copying permission5"""67from lib.core.common import Backend8from lib.core.common import Format9from lib.core.common import hashDBRetrieve10from lib.core.common import hashDBWrite11from lib.core.data import conf12from lib.core.data import kb13from lib.core.data import logger14from lib.core.enums import DBMS15from lib.core.enums import FORK16from lib.core.enums import HASHDB_KEYS17from lib.core.session import setDbms18from lib.core.settings import CACHE_ALIASES19from lib.request import inject20from plugins.generic.fingerprint import Fingerprint as GenericFingerprint2122class Fingerprint(GenericFingerprint):23def __init__(self):24GenericFingerprint.__init__(self, DBMS.CACHE)2526def getFingerprint(self):27fork = hashDBRetrieve(HASHDB_KEYS.DBMS_FORK)2829if fork is None:30if inject.checkBooleanExpression("$ZVERSION LIKE '%IRIS%'"):31fork = FORK.IRIS32else:33fork = ""3435hashDBWrite(HASHDB_KEYS.DBMS_FORK, fork)3637value = ""38wsOsFp = Format.getOs("web server", kb.headersFp)3940if wsOsFp:41value += "%s\n" % wsOsFp4243if kb.data.banner:44dbmsOsFp = Format.getOs("back-end DBMS", kb.bannerFp)4546if dbmsOsFp:47value += "%s\n" % dbmsOsFp4849value += "back-end DBMS: "5051if not conf.extensiveFp:52value += DBMS.CACHE53if fork:54value += " (%s fork)" % fork55return value5657actVer = Format.getDbms()58blank = " " * 1559value += "active fingerprint: %s" % actVer6061if kb.bannerFp:62banVer = kb.bannerFp.get("dbmsVersion")6364if banVer:65banVer = Format.getDbms([banVer])66value += "\n%sbanner parsing fingerprint: %s" % (blank, banVer)6768htmlErrorFp = Format.getErrorParsedDBMSes()6970if htmlErrorFp:71value += "\n%shtml error message fingerprint: %s" % (blank, htmlErrorFp)7273if fork:74value += "\n%sfork fingerprint: %s" % (blank, fork)7576return value7778def checkDbms(self):79if not conf.extensiveFp and Backend.isDbmsWithin(CACHE_ALIASES):80setDbms(DBMS.CACHE)8182self.getBanner()8384return True8586infoMsg = "testing %s" % DBMS.CACHE87logger.info(infoMsg)8889result = inject.checkBooleanExpression("$LISTLENGTH(NULL) IS NULL")9091if result:92infoMsg = "confirming %s" % DBMS.CACHE93logger.info(infoMsg)9495result = inject.checkBooleanExpression("%EXTERNAL %INTERNAL NULL IS NULL")9697if not result:98warnMsg = "the back-end DBMS is not %s" % DBMS.CACHE99logger.warning(warnMsg)100101return False102103setDbms(DBMS.CACHE)104105self.getBanner()106107return True108else:109warnMsg = "the back-end DBMS is not %s" % DBMS.CACHE110logger.warning(warnMsg)111112return False113114115