Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sqlmapproject
GitHub Repository: sqlmapproject/sqlmap
Path: blob/master/plugins/dbms/informix/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.data import conf
11
from lib.core.data import kb
12
from lib.core.data import logger
13
from lib.core.enums import DBMS
14
from lib.core.session import setDbms
15
from lib.core.settings import INFORMIX_ALIASES
16
from lib.request import inject
17
from plugins.generic.fingerprint import Fingerprint as GenericFingerprint
18
19
class Fingerprint(GenericFingerprint):
20
def __init__(self):
21
GenericFingerprint.__init__(self, DBMS.INFORMIX)
22
23
def getFingerprint(self):
24
value = ""
25
wsOsFp = Format.getOs("web server", kb.headersFp)
26
27
if wsOsFp:
28
value += "%s\n" % wsOsFp
29
30
if kb.data.banner:
31
dbmsOsFp = Format.getOs("back-end DBMS", kb.bannerFp)
32
33
if dbmsOsFp:
34
value += "%s\n" % dbmsOsFp
35
36
value += "back-end DBMS: "
37
38
if not conf.extensiveFp:
39
value += DBMS.INFORMIX
40
return value
41
42
actVer = Format.getDbms()
43
blank = " " * 15
44
value += "active fingerprint: %s" % actVer
45
46
if kb.bannerFp:
47
banVer = kb.bannerFp.get("dbmsVersion")
48
49
if banVer:
50
banVer = Format.getDbms([banVer])
51
value += "\n%sbanner parsing fingerprint: %s" % (blank, banVer)
52
53
htmlErrorFp = Format.getErrorParsedDBMSes()
54
55
if htmlErrorFp:
56
value += "\n%shtml error message fingerprint: %s" % (blank, htmlErrorFp)
57
58
return value
59
60
def checkDbms(self):
61
if not conf.extensiveFp and Backend.isDbmsWithin(INFORMIX_ALIASES):
62
setDbms(DBMS.INFORMIX)
63
64
self.getBanner()
65
66
return True
67
68
infoMsg = "testing %s" % DBMS.INFORMIX
69
logger.info(infoMsg)
70
71
result = inject.checkBooleanExpression("[RANDNUM]=(SELECT [RANDNUM] FROM SYSMASTER:SYSDUAL)")
72
73
if result:
74
infoMsg = "confirming %s" % DBMS.INFORMIX
75
logger.info(infoMsg)
76
77
result = inject.checkBooleanExpression("(SELECT DBINFO('DBNAME') FROM SYSMASTER:SYSDUAL) IS NOT NULL")
78
79
if not result:
80
warnMsg = "the back-end DBMS is not %s" % DBMS.INFORMIX
81
logger.warning(warnMsg)
82
83
return False
84
85
# Determine if it is Informix >= 11.70
86
if inject.checkBooleanExpression("CHR(32)=' '"):
87
Backend.setVersion(">= 11.70")
88
89
setDbms(DBMS.INFORMIX)
90
91
self.getBanner()
92
93
if not conf.extensiveFp:
94
return True
95
96
infoMsg = "actively fingerprinting %s" % DBMS.INFORMIX
97
logger.info(infoMsg)
98
99
for version in ("14.1", "12.1", "11.7", "11.5", "10.0"):
100
output = inject.checkBooleanExpression("EXISTS(SELECT 1 FROM SYSMASTER:SYSDUAL WHERE DBINFO('VERSION,'FULL') LIKE '%%%s%%')" % version)
101
102
if output:
103
Backend.setVersion(version)
104
break
105
106
return True
107
else:
108
warnMsg = "the back-end DBMS is not %s" % DBMS.INFORMIX
109
logger.warning(warnMsg)
110
111
return False
112
113