Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 54f9828

Browse files
committed
implemented active fingerprinting for MaxDB
1 parent 48cc87f commit 54f9828

2 files changed

Lines changed: 43 additions & 1 deletion

File tree

plugins/dbms/maxdb/enumeration.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
2323
"""
2424

25+
from lib.core.data import logger
26+
2527
from plugins.generic.enumeration import Enumeration as GenericEnumeration
2628

2729
class Enumeration(GenericEnumeration):

plugins/dbms/maxdb/fingerprint.py

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,46 @@ class Fingerprint(GenericFingerprint):
4444
def __init__(self):
4545
GenericFingerprint.__init__(self)
4646

47+
def __versionCheck(self):
48+
infoMsg = "executing SAP MaxDB SYSINFO version check"
49+
logger.info(infoMsg)
50+
51+
query = agent.prefixQuery(" /* NoValue */")
52+
query = agent.postfixQuery(query)
53+
payload = agent.payload(newValue=query)
54+
result = Request.queryPage(payload)
55+
56+
if not result:
57+
warnMsg = "unable to perform SAP MaxDB version check"
58+
logger.warn(warnMsg)
59+
60+
return None
61+
62+
minor, major = None, None
63+
64+
for version in [6, 7]:
65+
query = agent.prefixQuery(" AND (SELECT MAJORVERSION FROM SYSINFO.VERSION)=%d" % version)
66+
query = agent.postfixQuery(query)
67+
payload = agent.payload(newValue=query)
68+
result = Request.queryPage(payload)
69+
70+
if result:
71+
major = version
72+
73+
for version in xrange(0, 10):
74+
query = agent.prefixQuery(" AND (SELECT MINORVERSION FROM SYSINFO.VERSION)=%d" % version)
75+
query = agent.postfixQuery(query)
76+
payload = agent.payload(newValue=query)
77+
result = Request.queryPage(payload)
78+
79+
if result:
80+
minor = version
81+
82+
if major and minor:
83+
return "%s.%s" % (major, minor)
84+
else:
85+
return None
86+
4787
def getFingerprint(self):
4888
value = ""
4989
wsOsFp = formatFingerprint("web server", kb.headersFp)
@@ -64,7 +104,7 @@ def getFingerprint(self):
64104
value += "SAP MaxDB"
65105
return value
66106

67-
actVer = formatDBMSfp() + " (%s)" % None
107+
actVer = formatDBMSfp() + " (%s)" % self.__versionCheck()
68108
blank = " " * 15
69109
value += "active fingerprint: %s" % actVer
70110

0 commit comments

Comments
 (0)