MCPcopy Index your code
hub / github.com/sqlmapproject/sqlmap / getTables

Method getTables

plugins/dbms/mssqlserver/enumeration.py:69–171  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

67 return (kb.data.cachedUsersPrivileges, areAdmins)
68
69 def getTables(self):
70 if len(kb.data.cachedTables) > 0:
71 return kb.data.cachedTables
72
73 self.forceDbmsEnum()
74
75 if conf.db == CURRENT_DB:
76 conf.db = self.getCurrentDb()
77
78 if conf.db:
79 dbs = conf.db.split(',')
80 else:
81 dbs = self.getDbs()
82
83 for db in dbs:
84 dbs[dbs.index(db)] = safeSQLIdentificatorNaming(db)
85
86 dbs = [_ for _ in dbs if _]
87
88 infoMsg = "fetching tables for database"
89 infoMsg += "%s: %s" % ("s" if len(dbs) > 1 else "", ", ".join(db if isinstance(db, six.string_types) else db[0] for db in sorted(dbs)))
90 logger.info(infoMsg)
91
92 rootQuery = queries[DBMS.MSSQL].tables
93
94 if any(isTechniqueAvailable(_) for _ in (PAYLOAD.TECHNIQUE.UNION, PAYLOAD.TECHNIQUE.ERROR, PAYLOAD.TECHNIQUE.QUERY)) or conf.direct:
95 for db in dbs:
96 if conf.excludeSysDbs and db in self.excludeDbsList:
97 infoMsg = "skipping system database '%s'" % db
98 singleTimeLogMessage(infoMsg)
99 continue
100
101 if conf.exclude and re.search(conf.exclude, db, re.I) is not None:
102 infoMsg = "skipping database '%s'" % db
103 singleTimeLogMessage(infoMsg)
104 continue
105
106 for query in (rootQuery.inband.query, rootQuery.inband.query2, rootQuery.inband.query3):
107 query = query.replace("%s", db)
108 value = inject.getValue(query, blind=False, time=False)
109 if not isNoneValue(value):
110 break
111
112 if not isNoneValue(value):
113 value = [_ for _ in arrayizeValue(value) if _]
114 value = [safeSQLIdentificatorNaming(unArrayizeValue(_), True) for _ in value]
115 kb.data.cachedTables[db] = value
116
117 if not kb.data.cachedTables and isInferenceAvailable() and not conf.direct:
118 for db in dbs:
119 if conf.excludeSysDbs and db in self.excludeDbsList:
120 infoMsg = "skipping system database '%s'" % db
121 singleTimeLogMessage(infoMsg)
122 continue
123
124 if conf.exclude and re.search(conf.exclude, db, re.I) is not None:
125 infoMsg = "skipping database '%s'" % db
126 singleTimeLogMessage(infoMsg)

Callers

nothing calls this directly

Calls 15

getCurrentDbMethod · 0.95
getDbsMethod · 0.95
isTechniqueAvailableFunction · 0.90
singleTimeLogMessageFunction · 0.90
isNoneValueFunction · 0.90
arrayizeValueFunction · 0.90
unArrayizeValueFunction · 0.90
isInferenceAvailableFunction · 0.90
isNumPosStrValueFunction · 0.90
safeStringFormatFunction · 0.90

Tested by

no test coverage detected