Path: blob/master/plugins/dbms/sybase/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 unArrayizeValue10from lib.core.compat import xrange11from lib.core.data import conf12from lib.core.data import kb13from lib.core.data import logger14from lib.core.enums import DBMS15from lib.core.enums import OS16from lib.core.session import setDbms17from lib.core.settings import SYBASE_ALIASES18from lib.request import inject19from plugins.generic.fingerprint import Fingerprint as GenericFingerprint2021class Fingerprint(GenericFingerprint):22def __init__(self):23GenericFingerprint.__init__(self, DBMS.SYBASE)2425def getFingerprint(self):26value = ""27wsOsFp = Format.getOs("web server", kb.headersFp)2829if wsOsFp:30value += "%s\n" % wsOsFp3132if kb.data.banner:33dbmsOsFp = Format.getOs("back-end DBMS", kb.bannerFp)3435if dbmsOsFp:36value += "%s\n" % dbmsOsFp3738value += "back-end DBMS: "3940if not conf.extensiveFp:41value += DBMS.SYBASE42return value4344actVer = Format.getDbms()45blank = " " * 1546value += "active fingerprint: %s" % actVer4748if kb.bannerFp:49banVer = kb.bannerFp.get("dbmsVersion")5051if banVer:52banVer = Format.getDbms([banVer])53value += "\n%sbanner parsing fingerprint: %s" % (blank, banVer)5455htmlErrorFp = Format.getErrorParsedDBMSes()5657if htmlErrorFp:58value += "\n%shtml error message fingerprint: %s" % (blank, htmlErrorFp)5960return value6162def checkDbms(self):63if not conf.extensiveFp and Backend.isDbmsWithin(SYBASE_ALIASES):64setDbms("%s %s" % (DBMS.SYBASE, Backend.getVersion()))6566self.getBanner()6768Backend.setOs(OS.WINDOWS)6970return True7172infoMsg = "testing %s" % DBMS.SYBASE73logger.info(infoMsg)7475if conf.direct:76result = True77else:78result = inject.checkBooleanExpression("@@transtate=@@transtate")7980if result:81infoMsg = "confirming %s" % DBMS.SYBASE82logger.info(infoMsg)8384result = inject.checkBooleanExpression("suser_id()=suser_id()")8586if not result:87warnMsg = "the back-end DBMS is not %s" % DBMS.SYBASE88logger.warning(warnMsg)8990return False9192setDbms(DBMS.SYBASE)9394self.getBanner()9596if not conf.extensiveFp:97return True9899infoMsg = "actively fingerprinting %s" % DBMS.SYBASE100logger.info(infoMsg)101102result = unArrayizeValue(inject.getValue("SUBSTRING(@@VERSION,1,1)"))103104if result and result.isdigit():105Backend.setVersion(str(result))106else:107for version in xrange(12, 16):108result = inject.checkBooleanExpression("PATINDEX('%%/%d[./]%%',@@VERSION)>0" % version)109110if result:111Backend.setVersion(str(version))112break113114return True115else:116warnMsg = "the back-end DBMS is not %s" % DBMS.SYBASE117logger.warning(warnMsg)118119return False120121122