Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sqlmapproject
GitHub Repository: sqlmapproject/sqlmap
Path: blob/master/plugins/dbms/sybase/fingerprint.py
2992 views
1
#!/usr/bin/env python
2
3
"""
4
Copyright (c) 2006-2025 sqlmap developers (https://sqlmap.org)
5
See the file 'LICENSE' for copying permission
6
"""
7
8
from lib.core.common import Backend
9
from lib.core.common import Format
10
from lib.core.common import unArrayizeValue
11
from lib.core.compat import xrange
12
from lib.core.data import conf
13
from lib.core.data import kb
14
from lib.core.data import logger
15
from lib.core.enums import DBMS
16
from lib.core.enums import OS
17
from lib.core.session import setDbms
18
from lib.core.settings import SYBASE_ALIASES
19
from lib.request import inject
20
from plugins.generic.fingerprint import Fingerprint as GenericFingerprint
21
22
class Fingerprint(GenericFingerprint):
23
def __init__(self):
24
GenericFingerprint.__init__(self, DBMS.SYBASE)
25
26
def getFingerprint(self):
27
value = ""
28
wsOsFp = Format.getOs("web server", kb.headersFp)
29
30
if wsOsFp:
31
value += "%s\n" % wsOsFp
32
33
if kb.data.banner:
34
dbmsOsFp = Format.getOs("back-end DBMS", kb.bannerFp)
35
36
if dbmsOsFp:
37
value += "%s\n" % dbmsOsFp
38
39
value += "back-end DBMS: "
40
41
if not conf.extensiveFp:
42
value += DBMS.SYBASE
43
return value
44
45
actVer = Format.getDbms()
46
blank = " " * 15
47
value += "active fingerprint: %s" % actVer
48
49
if kb.bannerFp:
50
banVer = kb.bannerFp.get("dbmsVersion")
51
52
if banVer:
53
banVer = Format.getDbms([banVer])
54
value += "\n%sbanner parsing fingerprint: %s" % (blank, banVer)
55
56
htmlErrorFp = Format.getErrorParsedDBMSes()
57
58
if htmlErrorFp:
59
value += "\n%shtml error message fingerprint: %s" % (blank, htmlErrorFp)
60
61
return value
62
63
def checkDbms(self):
64
if not conf.extensiveFp and Backend.isDbmsWithin(SYBASE_ALIASES):
65
setDbms("%s %s" % (DBMS.SYBASE, Backend.getVersion()))
66
67
self.getBanner()
68
69
Backend.setOs(OS.WINDOWS)
70
71
return True
72
73
infoMsg = "testing %s" % DBMS.SYBASE
74
logger.info(infoMsg)
75
76
if conf.direct:
77
result = True
78
else:
79
result = inject.checkBooleanExpression("@@transtate=@@transtate")
80
81
if result:
82
infoMsg = "confirming %s" % DBMS.SYBASE
83
logger.info(infoMsg)
84
85
result = inject.checkBooleanExpression("suser_id()=suser_id()")
86
87
if not result:
88
warnMsg = "the back-end DBMS is not %s" % DBMS.SYBASE
89
logger.warning(warnMsg)
90
91
return False
92
93
setDbms(DBMS.SYBASE)
94
95
self.getBanner()
96
97
if not conf.extensiveFp:
98
return True
99
100
infoMsg = "actively fingerprinting %s" % DBMS.SYBASE
101
logger.info(infoMsg)
102
103
result = unArrayizeValue(inject.getValue("SUBSTRING(@@VERSION,1,1)"))
104
105
if result and result.isdigit():
106
Backend.setVersion(str(result))
107
else:
108
for version in xrange(12, 16):
109
result = inject.checkBooleanExpression("PATINDEX('%%/%d[./]%%',@@VERSION)>0" % version)
110
111
if result:
112
Backend.setVersion(str(version))
113
break
114
115
return True
116
else:
117
warnMsg = "the back-end DBMS is not %s" % DBMS.SYBASE
118
logger.warning(warnMsg)
119
120
return False
121
122