Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sqlmapproject
GitHub Repository: sqlmapproject/sqlmap
Path: blob/master/plugins/dbms/cache/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 hashDBRetrieve
11
from lib.core.common import hashDBWrite
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 FORK
17
from lib.core.enums import HASHDB_KEYS
18
from lib.core.session import setDbms
19
from lib.core.settings import CACHE_ALIASES
20
from lib.request import inject
21
from plugins.generic.fingerprint import Fingerprint as GenericFingerprint
22
23
class Fingerprint(GenericFingerprint):
24
def __init__(self):
25
GenericFingerprint.__init__(self, DBMS.CACHE)
26
27
def getFingerprint(self):
28
fork = hashDBRetrieve(HASHDB_KEYS.DBMS_FORK)
29
30
if fork is None:
31
if inject.checkBooleanExpression("$ZVERSION LIKE '%IRIS%'"):
32
fork = FORK.IRIS
33
else:
34
fork = ""
35
36
hashDBWrite(HASHDB_KEYS.DBMS_FORK, fork)
37
38
value = ""
39
wsOsFp = Format.getOs("web server", kb.headersFp)
40
41
if wsOsFp:
42
value += "%s\n" % wsOsFp
43
44
if kb.data.banner:
45
dbmsOsFp = Format.getOs("back-end DBMS", kb.bannerFp)
46
47
if dbmsOsFp:
48
value += "%s\n" % dbmsOsFp
49
50
value += "back-end DBMS: "
51
52
if not conf.extensiveFp:
53
value += DBMS.CACHE
54
if fork:
55
value += " (%s fork)" % fork
56
return value
57
58
actVer = Format.getDbms()
59
blank = " " * 15
60
value += "active fingerprint: %s" % actVer
61
62
if kb.bannerFp:
63
banVer = kb.bannerFp.get("dbmsVersion")
64
65
if banVer:
66
banVer = Format.getDbms([banVer])
67
value += "\n%sbanner parsing fingerprint: %s" % (blank, banVer)
68
69
htmlErrorFp = Format.getErrorParsedDBMSes()
70
71
if htmlErrorFp:
72
value += "\n%shtml error message fingerprint: %s" % (blank, htmlErrorFp)
73
74
if fork:
75
value += "\n%sfork fingerprint: %s" % (blank, fork)
76
77
return value
78
79
def checkDbms(self):
80
if not conf.extensiveFp and Backend.isDbmsWithin(CACHE_ALIASES):
81
setDbms(DBMS.CACHE)
82
83
self.getBanner()
84
85
return True
86
87
infoMsg = "testing %s" % DBMS.CACHE
88
logger.info(infoMsg)
89
90
result = inject.checkBooleanExpression("$LISTLENGTH(NULL) IS NULL")
91
92
if result:
93
infoMsg = "confirming %s" % DBMS.CACHE
94
logger.info(infoMsg)
95
96
result = inject.checkBooleanExpression("%EXTERNAL %INTERNAL NULL IS NULL")
97
98
if not result:
99
warnMsg = "the back-end DBMS is not %s" % DBMS.CACHE
100
logger.warning(warnMsg)
101
102
return False
103
104
setDbms(DBMS.CACHE)
105
106
self.getBanner()
107
108
return True
109
else:
110
warnMsg = "the back-end DBMS is not %s" % DBMS.CACHE
111
logger.warning(warnMsg)
112
113
return False
114
115