Path: blob/master/plugins/dbms/virtuoso/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 VIRTUOSO_ALIASES15from lib.request import inject16from plugins.generic.fingerprint import Fingerprint as GenericFingerprint1718class Fingerprint(GenericFingerprint):19def __init__(self):20GenericFingerprint.__init__(self, DBMS.VIRTUOSO)2122def getFingerprint(self):23value = ""24wsOsFp = Format.getOs("web server", kb.headersFp)2526if wsOsFp:27value += "%s\n" % wsOsFp2829if kb.data.banner:30dbmsOsFp = Format.getOs("back-end DBMS", kb.bannerFp)3132if dbmsOsFp:33value += "%s\n" % dbmsOsFp3435value += "back-end DBMS: "3637if not conf.extensiveFp:38value += DBMS.VIRTUOSO39return value4041actVer = Format.getDbms()42blank = " " * 1543value += "active fingerprint: %s" % actVer4445if kb.bannerFp:46banVer = kb.bannerFp.get("dbmsVersion")4748if banVer:49banVer = Format.getDbms([banVer])50value += "\n%sbanner parsing fingerprint: %s" % (blank, banVer)5152htmlErrorFp = Format.getErrorParsedDBMSes()5354if htmlErrorFp:55value += "\n%shtml error message fingerprint: %s" % (blank, htmlErrorFp)5657return value5859def checkDbms(self):60if not conf.extensiveFp and Backend.isDbmsWithin(VIRTUOSO_ALIASES):61setDbms(DBMS.VIRTUOSO)62return True6364infoMsg = "testing %s" % DBMS.VIRTUOSO65logger.info(infoMsg)6667result = inject.checkBooleanExpression("GET_KEYWORD(NULL,NULL) IS NULL")6869if result:70infoMsg = "confirming %s" % DBMS.VIRTUOSO71logger.info(infoMsg)7273result = inject.checkBooleanExpression("RDF_NOW_IMPL() IS NOT NULL")7475if not result:76warnMsg = "the back-end DBMS is not %s" % DBMS.VIRTUOSO77logger.warning(warnMsg)7879return False8081setDbms(DBMS.VIRTUOSO)8283return True84else:85warnMsg = "the back-end DBMS is not %s" % DBMS.VIRTUOSO86logger.warning(warnMsg)8788return False899091