Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sqlmapproject
GitHub Repository: sqlmapproject/sqlmap
Path: blob/master/plugins/dbms/h2/fingerprint.py
3554 views
1
#!/usr/bin/env python
2
3
"""
4
Copyright (c) 2006-2026 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 H2_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.H2)
26
27
def getFingerprint(self):
28
fork = hashDBRetrieve(HASHDB_KEYS.DBMS_FORK)
29
30
if fork is None:
31
if inject.checkBooleanExpression("EXISTS(SELECT * FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='IGNITE')"):
32
fork = FORK.IGNITE
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.H2
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(H2_ALIASES):
81
setDbms("%s %s" % (DBMS.H2, Backend.getVersion()))
82
83
self.getBanner()
84
85
return True
86
87
infoMsg = "testing %s" % DBMS.H2
88
logger.info(infoMsg)
89
90
result = inject.checkBooleanExpression("ZERO()=0")
91
92
if result:
93
infoMsg = "confirming %s" % DBMS.H2
94
logger.info(infoMsg)
95
96
result = inject.checkBooleanExpression("LEAST(ROUNDMAGIC(PI()),3)=3")
97
98
if not result:
99
warnMsg = "the back-end DBMS is not %s" % DBMS.H2
100
logger.warning(warnMsg)
101
102
return False
103
else:
104
setDbms(DBMS.H2)
105
106
result = inject.checkBooleanExpression("JSON_OBJECT() IS NOT NULL")
107
version = '2' if result else '1'
108
Backend.setVersion(version)
109
110
self.getBanner()
111
112
return True
113
else:
114
warnMsg = "the back-end DBMS is not %s" % DBMS.H2
115
logger.warning(warnMsg)
116
117
return False
118
119
def getHostname(self):
120
warnMsg = "on H2 it is not possible to enumerate the hostname"
121
logger.warning(warnMsg)
122
123