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

Skip to content

Commit e2cc956

Browse files
committed
Implementation for an Issue #2891
1 parent 365fa5a commit e2cc956

12 files changed

Lines changed: 74 additions & 38 deletions

File tree

lib/core/option.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1785,8 +1785,8 @@ def _cleanupOptions():
17851785
if conf.col:
17861786
conf.col = re.sub(r"\s*,\s*", ',', conf.col)
17871787

1788-
if conf.excludeCol:
1789-
conf.excludeCol = re.sub(r"\s*,\s*", ',', conf.excludeCol)
1788+
if conf.exclude:
1789+
conf.exclude = re.sub(r"\s*,\s*", ',', conf.exclude)
17901790

17911791
if conf.binaryFields:
17921792
conf.binaryFields = re.sub(r"\s*,\s*", ',', conf.binaryFields)

lib/core/optiondict.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@
139139
"db": "string",
140140
"tbl": "string",
141141
"col": "string",
142-
"excludeCol": "string",
142+
"exclude": "string",
143143
"pivotColumn": "string",
144144
"dumpWhere": "string",
145145
"user": "string",

lib/core/settings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from lib.core.enums import OS
2020

2121
# sqlmap version (<major>.<minor>.<month>.<monthly commit>)
22-
VERSION = "1.2.2.10"
22+
VERSION = "1.2.2.11"
2323
TYPE = "dev" if VERSION.count('.') > 2 and VERSION.split('.')[-1] != '0' else "stable"
2424
TYPE_COLORS = {"dev": 33, "stable": 90, "pip": 34}
2525
VERSION_STRING = "sqlmap/%s#%s" % ('.'.join(VERSION.split('.')[:-1]) if VERSION.count('.') > 2 and VERSION.split('.')[-1] == '0' else VERSION, TYPE)

lib/parse/cmdline.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -464,8 +464,8 @@ def cmdLineParser(argv=None):
464464
enumeration.add_option("-C", dest="col",
465465
help="DBMS database table column(s) to enumerate")
466466

467-
enumeration.add_option("-X", dest="excludeCol",
468-
help="DBMS database table column(s) to not enumerate")
467+
enumeration.add_option("-X", dest="exclude",
468+
help="DBMS database identifier(s) to not enumerate")
469469

470470
enumeration.add_option("-U", dest="user",
471471
help="DBMS user to enumerate")

plugins/dbms/maxdb/enumeration.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,8 @@ def getColumns(self, onlyColNames=False, colTuple=None, bruteForce=None, dumpMod
120120
else:
121121
colList = []
122122

123-
if conf.excludeCol:
124-
colList = [_ for _ in colList if _ not in conf.excludeCol.split(',')]
123+
if conf.exclude:
124+
colList = [_ for _ in colList if _ not in conf.exclude.split(',')]
125125

126126
for col in colList:
127127
colList[colList.index(col)] = safeSQLIdentificatorNaming(col)

plugins/dbms/mssqlserver/enumeration.py

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from lib.core.common import isTechniqueAvailable
1515
from lib.core.common import safeSQLIdentificatorNaming
1616
from lib.core.common import safeStringFormat
17+
from lib.core.common import singleTimeLogMessage
1718
from lib.core.common import unArrayizeValue
1819
from lib.core.common import unsafeSQLIdentificatorNaming
1920
from lib.core.data import conf
@@ -94,8 +95,12 @@ def getTables(self):
9495
for db in dbs:
9596
if conf.excludeSysDbs and db in self.excludeDbsList:
9697
infoMsg = "skipping system database '%s'" % db
97-
logger.info(infoMsg)
98+
singleTimeLogMessage(infoMsg)
99+
continue
98100

101+
if conf.exclude and db in conf.exclude.split(','):
102+
infoMsg = "skipping database '%s'" % db
103+
singleTimeLogMessage(infoMsg)
99104
continue
100105

101106
for query in (rootQuery.inband.query, rootQuery.inband.query2, rootQuery.inband.query3):
@@ -113,8 +118,12 @@ def getTables(self):
113118
for db in dbs:
114119
if conf.excludeSysDbs and db in self.excludeDbsList:
115120
infoMsg = "skipping system database '%s'" % db
116-
logger.info(infoMsg)
121+
singleTimeLogMessage(infoMsg)
122+
continue
117123

124+
if conf.exclude and db in conf.exclude.split(','):
125+
infoMsg = "skipping database '%s'" % db
126+
singleTimeLogMessage(infoMsg)
118127
continue
119128

120129
infoMsg = "fetching number of tables for "
@@ -199,8 +208,12 @@ def searchTable(self):
199208

200209
if conf.excludeSysDbs and db in self.excludeDbsList:
201210
infoMsg = "skipping system database '%s'" % db
202-
logger.info(infoMsg)
211+
singleTimeLogMessage(infoMsg)
212+
continue
203213

214+
if conf.exclude and db in conf.exclude.split(','):
215+
infoMsg = "skipping database '%s'" % db
216+
singleTimeLogMessage(infoMsg)
204217
continue
205218

206219
if any(isTechniqueAvailable(_) for _ in (PAYLOAD.TECHNIQUE.UNION, PAYLOAD.TECHNIQUE.ERROR, PAYLOAD.TECHNIQUE.QUERY)) or conf.direct:
@@ -271,8 +284,8 @@ def searchColumn(self):
271284
infoMsgDb = ""
272285
colList = conf.col.split(',')
273286

274-
if conf.excludeCol:
275-
colList = [_ for _ in colList if _ not in conf.excludeCol.split(',')]
287+
if conf.exclude:
288+
colList = [_ for _ in colList if _ not in conf.exclude.split(',')]
276289

277290
origTbl = conf.tbl
278291
origDb = conf.db
@@ -318,8 +331,7 @@ def searchColumn(self):
318331
_ = conf.db.split(',')
319332
infoMsgDb = " in database%s '%s'" % ("s" if len(_) > 1 else "", ", ".join(db for db in _))
320333
elif conf.excludeSysDbs:
321-
msg = "skipping system database%s '%s'" % ("s" if len(self.excludeDbsList) > 1 else "", ", ".join(db for db in self.excludeDbsList))
322-
logger.info(msg)
334+
infoMsgDb = " not in system database%s '%s'" % ("s" if len(self.excludeDbsList) > 1 else "", ", ".join(db for db in self.excludeDbsList))
323335
else:
324336
infoMsgDb = " across all databases"
325337

@@ -334,6 +346,9 @@ def searchColumn(self):
334346
if conf.excludeSysDbs and db in self.excludeDbsList:
335347
continue
336348

349+
if conf.exclude and db in conf.exclude.split(','):
350+
continue
351+
337352
if any(isTechniqueAvailable(_) for _ in (PAYLOAD.TECHNIQUE.UNION, PAYLOAD.TECHNIQUE.ERROR, PAYLOAD.TECHNIQUE.QUERY)) or conf.direct:
338353
query = rootQuery.inband.query % (db, db, db, db, db, db)
339354
query += " AND %s" % colQuery.replace("[DB]", db)

plugins/dbms/sybase/enumeration.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -188,8 +188,8 @@ def getColumns(self, onlyColNames=False, colTuple=None, bruteForce=None, dumpMod
188188
else:
189189
colList = []
190190

191-
if conf.excludeCol:
192-
colList = [_ for _ in colList if _ not in conf.excludeCol.split(',')]
191+
if conf.exclude:
192+
colList = [_ for _ in colList if _ not in conf.exclude.split(',')]
193193

194194
for col in colList:
195195
colList[colList.index(col)] = safeSQLIdentificatorNaming(col)

plugins/generic/databases.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
from lib.core.common import randomStr
2424
from lib.core.common import readInput
2525
from lib.core.common import safeSQLIdentificatorNaming
26+
from lib.core.common import singleTimeLogMessage
2627
from lib.core.common import singleTimeWarnMessage
2728
from lib.core.common import unArrayizeValue
2829
from lib.core.common import unsafeSQLIdentificatorNaming
@@ -298,7 +299,11 @@ def getTables(self, bruteForce=None):
298299
if conf.excludeSysDbs and db in self.excludeDbsList:
299300
infoMsg = "skipping system database '%s'" % unsafeSQLIdentificatorNaming(db)
300301
logger.info(infoMsg)
302+
continue
301303

304+
if conf.exclude and db in conf.exclude.split(','):
305+
infoMsg = "skipping database '%s'" % unsafeSQLIdentificatorNaming(db)
306+
singleTimeLogMessage(infoMsg)
302307
continue
303308

304309
infoMsg = "fetching number of tables for "
@@ -410,8 +415,8 @@ def getColumns(self, onlyColNames=False, colTuple=None, bruteForce=None, dumpMod
410415
else:
411416
colList = []
412417

413-
if conf.excludeCol:
414-
colList = [_ for _ in colList if _ not in conf.excludeCol.split(',')]
418+
if conf.exclude:
419+
colList = [_ for _ in colList if _ not in conf.exclude.split(',')]
415420

416421
for col in colList:
417422
colList[colList.index(col)] = safeSQLIdentificatorNaming(col)

plugins/generic/entries.py

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
from lib.core.common import prioritySortColumns
2323
from lib.core.common import readInput
2424
from lib.core.common import safeSQLIdentificatorNaming
25+
from lib.core.common import singleTimeLogMessage
2526
from lib.core.common import unArrayizeValue
2627
from lib.core.common import unsafeSQLIdentificatorNaming
2728
from lib.core.data import conf
@@ -68,11 +69,16 @@ def dumpTable(self, foundData=None):
6869
if Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2, DBMS.HSQLDB):
6970
conf.db = conf.db.upper()
7071

71-
if ',' in conf.db:
72+
if ',' in conf.db:
7273
errMsg = "only one database name is allowed when enumerating "
7374
errMsg += "the tables' columns"
7475
raise SqlmapMissingMandatoryOptionException(errMsg)
7576

77+
if conf.exclude and conf.db in conf.exclude.split(','):
78+
infoMsg = "skipping database '%s'" % unsafeSQLIdentificatorNaming(conf.db)
79+
singleTimeLogMessage(infoMsg)
80+
return
81+
7682
conf.db = safeSQLIdentificatorNaming(conf.db)
7783

7884
if conf.tbl:
@@ -99,6 +105,11 @@ def dumpTable(self, foundData=None):
99105
tblList[tblList.index(tbl)] = safeSQLIdentificatorNaming(tbl, True)
100106

101107
for tbl in tblList:
108+
if conf.exclude and tbl in conf.exclude.split(','):
109+
infoMsg = "skipping table '%s'" % unsafeSQLIdentificatorNaming(tbl)
110+
singleTimeLogMessage(infoMsg)
111+
continue
112+
102113
conf.tbl = tbl
103114
kb.data.dumpedTable = {}
104115

@@ -129,8 +140,8 @@ def dumpTable(self, foundData=None):
129140
columns = kb.data.cachedColumns[safeSQLIdentificatorNaming(conf.db)][safeSQLIdentificatorNaming(tbl, True)]
130141
colList = sorted(filter(None, columns.keys()))
131142

132-
if conf.excludeCol:
133-
colList = [_ for _ in colList if _ not in conf.excludeCol.split(',')]
143+
if conf.exclude:
144+
colList = [_ for _ in colList if _ not in conf.exclude.split(',')]
134145

135146
if not colList:
136147
warnMsg = "skipping table '%s'" % unsafeSQLIdentificatorNaming(tbl)
@@ -465,6 +476,11 @@ def dumpAll(self):
465476
conf.db = db
466477

467478
for table in tables:
479+
if conf.exclude and table in conf.exclude.split(','):
480+
infoMsg = "skipping table '%s'" % unsafeSQLIdentificatorNaming(table)
481+
logger.info(infoMsg)
482+
continue
483+
468484
try:
469485
conf.tbl = table
470486
kb.data.cachedColumns = {}
@@ -530,8 +546,8 @@ def dumpFoundColumn(self, dbs, foundCols, colConsider):
530546
conf.tbl = table
531547
colList = filter(None, sorted(columns))
532548

533-
if conf.excludeCol:
534-
colList = [_ for _ in colList if _ not in conf.excludeCol.split(',')]
549+
if conf.exclude:
550+
colList = [_ for _ in colList if _ not in conf.exclude.split(',')]
535551

536552
conf.col = ','.join(colList)
537553
kb.data.cachedColumns = {}

plugins/generic/search.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -371,8 +371,8 @@ def searchColumn(self):
371371
infoMsgDb = ""
372372
colList = conf.col.split(',')
373373

374-
if conf.excludeCol:
375-
colList = [_ for _ in colList if _ not in conf.excludeCol.split(',')]
374+
if conf.exclude:
375+
colList = [_ for _ in colList if _ not in conf.exclude.split(',')]
376376

377377
origTbl = conf.tbl
378378
origDb = conf.db

0 commit comments

Comments
 (0)