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

Skip to content

Commit 6e392b6

Browse files
committed
applying contributed patch for DB2
1 parent 2d8408c commit 6e392b6

17 files changed

Lines changed: 505 additions & 30 deletions

File tree

lib/controller/handler.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
from lib.core.settings import FIREBIRD_ALIASES
2424
from lib.core.settings import MAXDB_ALIASES
2525
from lib.core.settings import SYBASE_ALIASES
26+
from lib.core.settings import DB2_ALIASES
2627

2728
from plugins.dbms.mssqlserver import MSSQLServerMap
2829
from plugins.dbms.mssqlserver.connector import Connector as MSSQLServerConn
@@ -42,6 +43,8 @@
4243
from plugins.dbms.maxdb.connector import Connector as MaxDBConn
4344
from plugins.dbms.sybase import SybaseMap
4445
from plugins.dbms.sybase.connector import Connector as SybaseConn
46+
from plugins.dbms.db2 import DB2Map
47+
from plugins.dbms.db2.connector import Connector as DB2Conn
4548

4649
def setHandler():
4750
"""
@@ -50,7 +53,7 @@ def setHandler():
5053
"""
5154

5255
count = 0
53-
dbmsNames = ( "MySQL", "Oracle", "PostgreSQL", "Microsoft SQL Server", "SQLite", "Microsoft Access", "Firebird", "SAP MaxDB", "Sybase" )
56+
dbmsNames = ( "MySQL", "Oracle", "PostgreSQL", "Microsoft SQL Server", "SQLite", "Microsoft Access", "Firebird", "SAP MaxDB", "Sybase", "DB2" )
5457
dbmsObj = [
5558
( MYSQL_ALIASES, MySQLMap, MySQLConn ),
5659
( ORACLE_ALIASES, OracleMap, OracleConn ),
@@ -61,6 +64,7 @@ def setHandler():
6164
( FIREBIRD_ALIASES, FirebirdMap, FirebirdConn ),
6265
( MAXDB_ALIASES, MaxDBMap, MaxDBConn ),
6366
( SYBASE_ALIASES, SybaseMap, SybaseConn ),
67+
( DB2_ALIASES, DB2Map, DB2Conn )
6468
]
6569

6670
if Backend.getIdentifiedDbms() is not None:

lib/core/agent.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,7 @@ def simpleConcatQuery(self, query1, query2):
407407
if Backend.isDbms(DBMS.MYSQL):
408408
concatenatedQuery = "CONCAT(%s,%s)" % (query1, query2)
409409

410-
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.ORACLE, DBMS.SQLITE):
410+
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.ORACLE, DBMS.SQLITE, DBMS.DB2):
411411
concatenatedQuery = "%s||%s" % (query1, query2)
412412

413413
elif Backend.getIdentifiedDbms() in (DBMS.MSSQL, DBMS.SYBASE):
@@ -466,7 +466,7 @@ def concatQuery(self, query, unpack=True):
466466
elif fieldsNoSelect:
467467
concatenatedQuery = "CONCAT('%s',%s,'%s')" % (kb.misc.start, concatenatedQuery, kb.misc.stop)
468468

469-
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.ORACLE, DBMS.SQLITE):
469+
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.ORACLE, DBMS.SQLITE, DBMS.DB2):
470470
if fieldsExists:
471471
concatenatedQuery = concatenatedQuery.replace("SELECT ", "'%s'||" % kb.misc.start, 1)
472472
concatenatedQuery += "||'%s'" % kb.misc.stop
@@ -643,7 +643,7 @@ def limitQuery(self, num, query, field=None, uniqueField=None):
643643
limitStr = queries[Backend.getIdentifiedDbms()].limit.query % (num+1, num+1)
644644
limitedQuery += " %s" % limitStr
645645

646-
elif Backend.isDbms(DBMS.ORACLE):
646+
elif Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.DB2):
647647
if " ORDER BY " in limitedQuery and "(SELECT " in limitedQuery:
648648
orderBy = limitedQuery[limitedQuery.index(" ORDER BY "):]
649649
limitedQuery = limitedQuery[:limitedQuery.index(" ORDER BY ")]

lib/core/common.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2546,7 +2546,7 @@ def safeSQLIdentificatorNaming(name, isTable=False):
25462546
if not re.match(r"\A[A-Za-z0-9_]+\Z", parts[i]):
25472547
if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.ACCESS):
25482548
parts[i] = "`%s`" % parts[i].strip("`")
2549-
elif Backend.getIdentifiedDbms() in (DBMS.MSSQL, DBMS.ORACLE, DBMS.PGSQL):
2549+
elif Backend.getIdentifiedDbms() in (DBMS.MSSQL, DBMS.ORACLE, DBMS.PGSQL, DBMS.DB2):
25502550
parts[i] = "\"%s\"" % parts[i].strip("\"")
25512551

25522552
retVal = ".".join(parts)
@@ -2563,7 +2563,7 @@ def unsafeSQLIdentificatorNaming(name):
25632563
if isinstance(name, basestring):
25642564
if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.ACCESS):
25652565
retVal = name.replace("`", "")
2566-
elif Backend.getIdentifiedDbms() in (DBMS.MSSQL, DBMS.ORACLE, DBMS.PGSQL):
2566+
elif Backend.getIdentifiedDbms() in (DBMS.MSSQL, DBMS.ORACLE, DBMS.PGSQL, DBMS.DB2):
25672567
retVal = name.replace("\"", "")
25682568
if Backend.getIdentifiedDbms() in (DBMS.MSSQL, DBMS.SYBASE):
25692569
prefix = "%s." % DEFAULT_MSSQL_SCHEMA

lib/core/data.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from lib.core.settings import FIREBIRD_ALIASES
2020
from lib.core.settings import MAXDB_ALIASES
2121
from lib.core.settings import SYBASE_ALIASES
22+
from lib.core.settings import DB2_ALIASES
2223

2324
# sqlmap paths
2425
paths = advancedDict()

lib/core/dicts.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,3 +98,14 @@
9898
"R": "REFERENCES",
9999
"E": "EXECUTE"
100100
}
101+
102+
db2Privs = {
103+
1:"CONTROLAUTH",
104+
2:"ALTERAUTH",
105+
3:"DELETEAUTH",
106+
4:"INDEXAUTH",
107+
5:"INSERTAUTH",
108+
6:"REFAUTH",
109+
7:"SELECTAUTH",
110+
8:"UPDATEAUTH"
111+
}

lib/core/enums.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class DBMS:
3434
PGSQL = "PostgreSQL"
3535
SQLITE = "SQLite"
3636
SYBASE = "Sybase"
37+
DB2 = "IBM DB2"
3738

3839
class OS:
3940
LINUX = "Linux"

lib/core/option.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@
8989
from lib.core.settings import FIREBIRD_ALIASES
9090
from lib.core.settings import MAXDB_ALIASES
9191
from lib.core.settings import SYBASE_ALIASES
92+
from lib.core.settings import DB2_ALIASES
9293
from lib.core.settings import BURP_SPLITTER
9394
from lib.core.settings import MAX_NUMBER_OF_THREADS
9495
from lib.core.settings import TIME_DEFAULT_DELAY
@@ -682,7 +683,7 @@ def __setDBMS():
682683

683684
for aliases in (MSSQL_ALIASES, MYSQL_ALIASES, PGSQL_ALIASES, \
684685
ORACLE_ALIASES, SQLITE_ALIASES, ACCESS_ALIASES, \
685-
FIREBIRD_ALIASES, MAXDB_ALIASES, SYBASE_ALIASES):
686+
FIREBIRD_ALIASES, MAXDB_ALIASES, SYBASE_ALIASES, DB2_ALIASES):
686687
if conf.dbms in aliases:
687688
conf.dbms = aliases[0]
688689

lib/core/settings.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,8 @@
147147
"RDB$TRIGGER_MESSAGES", "RDB$TYPES", "RDB$USER_PRIVILEGES", "RDB$VIEW_RELATIONS" )
148148
MAXDB_SYSTEM_DBS = ( "SYSINFO", "DOMAIN" )
149149
SYBASE_SYSTEM_DBS = ( "master", "model", "sybsystemdb", "sybsystemprocs" )
150+
DB2_SYSTEM_DBS = ( "NULLID", "SQLJ", "SYSCAT", "SYSFUN", "SYSIBM", "SYSIBMADM", "SYSIBMINTERNAL", "SYSIBMTS", "SYSPROC", "SYSPUBLIC",\
151+
"SYSSTAT", "SYSTOOLS" )
150152

151153
MSSQL_ALIASES = [ "microsoft sql server", "mssqlserver", "mssql", "ms" ]
152154
MYSQL_ALIASES = [ "mysql", "my" ]
@@ -157,8 +159,9 @@
157159
FIREBIRD_ALIASES = [ "firebird", "mozilla firebird", "interbase", "ibase", "fb" ]
158160
MAXDB_ALIASES = [ "maxdb", "sap maxdb", "sap db" ]
159161
SYBASE_ALIASES = [ "sybase", "sybase sql server" ]
162+
DB2_ALIASES = [ "ibm db2", "db2" ]
160163

161-
SUPPORTED_DBMS = MSSQL_ALIASES + MYSQL_ALIASES + PGSQL_ALIASES + ORACLE_ALIASES + SQLITE_ALIASES + ACCESS_ALIASES + FIREBIRD_ALIASES + MAXDB_ALIASES + SYBASE_ALIASES
164+
SUPPORTED_DBMS = MSSQL_ALIASES + MYSQL_ALIASES + PGSQL_ALIASES + ORACLE_ALIASES + SQLITE_ALIASES + ACCESS_ALIASES + FIREBIRD_ALIASES + MAXDB_ALIASES + SYBASE_ALIASES + DB2_ALIASES
162165
SUPPORTED_OS = ( "linux", "windows" )
163166

164167
DBMS_DICT = { DBMS.MSSQL: [MSSQL_ALIASES, "python-pymssql", "http://pymssql.sourceforge.net/"],
@@ -169,7 +172,8 @@
169172
DBMS.ACCESS: [ACCESS_ALIASES, "python-pyodbc", "http://pyodbc.googlecode.com/"],
170173
DBMS.FIREBIRD: [FIREBIRD_ALIASES, "python-kinterbasdb", "http://kinterbasdb.sourceforge.net/"],
171174
DBMS.MAXDB: [MAXDB_ALIASES, None, None],
172-
DBMS.SYBASE: [SYBASE_ALIASES, "python-pymssql", "http://pymssql.sourceforge.net/"]
175+
DBMS.SYBASE: [SYBASE_ALIASES, "python-pymssql", "http://pymssql.sourceforge.net/"],
176+
DBMS.DB2: [DB2_ALIASES, None, None]
173177
}
174178

175179
REFERER_ALIASES = ( "ref", "referer", "referrer" )

plugins/dbms/db2/__init__.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#!/usr/bin/env python
2+
3+
"""
4+
$Id: __init__.py 3678 2011-04-15 12:33:18Z stamparm $
5+
6+
Copyright (c) 2006-2011 sqlmap developers (http://sqlmap.sourceforge.net/)
7+
See the file 'doc/COPYING' for copying permission
8+
"""
9+
10+
from lib.core.enums import DBMS
11+
from lib.core.settings import DB2_SYSTEM_DBS
12+
from lib.core.unescaper import unescaper
13+
14+
from plugins.dbms.db2.enumeration import Enumeration
15+
from plugins.dbms.db2.filesystem import Filesystem
16+
from plugins.dbms.db2.fingerprint import Fingerprint
17+
from plugins.dbms.db2.syntax import Syntax
18+
from plugins.dbms.db2.takeover import Takeover
19+
from plugins.generic.misc import Miscellaneous
20+
21+
class DB2Map(Syntax, Fingerprint, Enumeration, Filesystem, Miscellaneous, Takeover):
22+
"""
23+
This class defines DB2 methods
24+
"""
25+
26+
def __init__(self):
27+
self.excludeDbsList = DB2_SYSTEM_DBS
28+
29+
Syntax.__init__(self)
30+
Fingerprint.__init__(self)
31+
Enumeration.__init__(self)
32+
Filesystem.__init__(self)
33+
Miscellaneous.__init__(self)
34+
Takeover.__init__(self)
35+
36+
unescaper[DBMS.DB2] = Syntax.unescape

plugins/dbms/db2/connector.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#!/usr/bin/env python
2+
3+
"""
4+
$Id: connector.py 3678 2011-04-15 12:33:18Z stamparm $
5+
6+
Copyright (c) 2006-2011 sqlmap developers (http://sqlmap.sourceforge.net/)
7+
See the file 'doc/COPYING' for copying permission
8+
"""
9+
10+
try:
11+
import pyodbc
12+
except ImportError, _:
13+
pass
14+
15+
from lib.core.data import logger
16+
from lib.core.exception import sqlmapConnectionException
17+
from lib.core.exception import sqlmapUnsupportedFeatureException
18+
19+
from plugins.generic.connector import Connector as GenericConnector
20+
21+
class Connector(GenericConnector):
22+
"""
23+
Homepage: http://pyodbc.googlecode.com/
24+
User guide: http://code.google.com/p/pyodbc/wiki/GettingStarted
25+
API: http://code.google.com/p/pyodbc/w/list
26+
Debian package: python-pyodbc
27+
License: MIT
28+
"""
29+
30+
def __init__(self):
31+
GenericConnector.__init__(self)

0 commit comments

Comments
 (0)