Path: blob/master/plugins/dbms/raima/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.data import conf10from lib.core.data import kb11from lib.core.data import logger12from lib.core.enums import DBMS13from lib.core.session import setDbms14from lib.core.settings import METADB_SUFFIX15from lib.core.settings import RAIMA_ALIASES16from lib.request import inject17from plugins.generic.fingerprint import Fingerprint as GenericFingerprint1819class Fingerprint(GenericFingerprint):20def __init__(self):21GenericFingerprint.__init__(self, DBMS.RAIMA)2223def getFingerprint(self):24value = ""25wsOsFp = Format.getOs("web server", kb.headersFp)2627if wsOsFp:28value += "%s\n" % wsOsFp2930if kb.data.banner:31dbmsOsFp = Format.getOs("back-end DBMS", kb.bannerFp)3233if dbmsOsFp:34value += "%s\n" % dbmsOsFp3536value += "back-end DBMS: "3738if not conf.extensiveFp:39value += DBMS.RAIMA40return value4142actVer = Format.getDbms()43blank = " " * 1544value += "active fingerprint: %s" % actVer4546if kb.bannerFp:47banVer = kb.bannerFp.get("dbmsVersion")4849if banVer:50banVer = Format.getDbms([banVer])51value += "\n%sbanner parsing fingerprint: %s" % (blank, banVer)5253htmlErrorFp = Format.getErrorParsedDBMSes()5455if htmlErrorFp:56value += "\n%shtml error message fingerprint: %s" % (blank, htmlErrorFp)5758return value5960def checkDbms(self):61if not conf.extensiveFp and Backend.isDbmsWithin(RAIMA_ALIASES):62setDbms(DBMS.RAIMA)63return True6465infoMsg = "testing %s" % DBMS.RAIMA66logger.info(infoMsg)6768result = inject.checkBooleanExpression("ROWNUMBER()=ROWNUMBER()")6970if result:71infoMsg = "confirming %s" % DBMS.RAIMA72logger.info(infoMsg)7374result = inject.checkBooleanExpression("INSSTR('[RANDSTR1]',0,0,'[RANDSTR2]') IS NOT NULL")7576if not result:77warnMsg = "the back-end DBMS is not %s" % DBMS.RAIMA78logger.warning(warnMsg)7980return False8182setDbms(DBMS.RAIMA)8384return True85else:86warnMsg = "the back-end DBMS is not %s" % DBMS.RAIMA87logger.warning(warnMsg)8889return False9091def forceDbmsEnum(self):92conf.db = ("%s%s" % (DBMS.RAIMA, METADB_SUFFIX)).replace(' ', '_')939495