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

Skip to content

Commit 4c804a3

Browse files
committed
Adding support for Apache Derby
1 parent d7a5601 commit 4c804a3

26 files changed

Lines changed: 404 additions & 48 deletions

data/xml/errors.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,4 +176,11 @@
176176
<error regexp="\[MonetDB\]\[ODBC Driver"/>
177177
<error regexp="nl\.cwi\.monetdb\.jdbc"/>
178178
</dbms>
179+
180+
<!-- Apache Derby -->
181+
<dbms value="Apache Derby">
182+
<error regexp="Syntax error: Encountered"/>
183+
<error regexp="org\.apache\.derby"/>
184+
<error regexp="ERROR 42X01"/>
185+
</dbms>
179186
</root>

data/xml/queries.xml

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -942,4 +942,73 @@
942942
<blind query="SELECT DISTINCT(schemas.name) FROM tables JOIN schemas ON tables.schema_id=schemas.id JOIN columns ON tables.id=columns.table_id WHERE %s" query2="SELECT DISTINCT(tables.name) FROM tables JOIN schemas ON tables.schema_id=schemas.id JOIN columns ON tables.id=columns.table_id WHERE schemas.name='%s'" count="SELECT COUNT(DISTINCT(schemas.name)) FROM tables JOIN schemas ON tables.schema_id=schemas.id JOIN columns ON tables.id=columns.table_id WHERE %s" count2="SELECT COUNT(DISTINCT(tables.name)) FROM tables JOIN schemas ON tables.schema_id=schemas.id JOIN columns ON tables.id=columns.table_id WHERE schemas.name='%s'" condition="columns.name" condition2="schemas.name" condition3="tables.name"/>
943943
</search_column>
944944
</dbms>
945+
946+
<!-- Apache Derby -->
947+
<dbms value="Apache Derby">
948+
<!-- NOTE: CHAR(%s) causes 'A truncation error was encountered trying to shrink CHAR' -->
949+
<cast query="RTRIM(CAST(%s AS CHAR(254)))"/>
950+
<length query="LENGTH(RTRIM(CAST(%s AS CHAR(254))))"/>
951+
<isnull query="COALESCE(%s,' ')"/>
952+
<delimiter query="||"/>
953+
<limit query="{LIMIT %d OFFSET %d}"/>
954+
<limitregexp query="{LIMIT\s+([\d]+)\s+OFFSET\s+([\d]+)}"/>
955+
<limitgroupstart query="2"/>
956+
<limitgroupstop query="1"/>
957+
<limitstring/>
958+
<order query="ORDER BY %s ASC"/>
959+
<count query="COUNT(%s)"/>
960+
<!-- NOTE: comment without alphanumeric char in continuation is invalid -->
961+
<comment query="--x"/>
962+
<substring query="SUBSTR((%s),%d,%d)"/>
963+
<concatenate query="%s||%s"/>
964+
<!-- NOTE: Apache Derby does not support implicit conversion from int to string -->
965+
<case query="SELECT (CASE WHEN (%s) THEN '1' ELSE '0' END) FROM SYSIBM.SYSDUMMY1"/>
966+
<inference query="SUBSTR((%s),%d,1)>'%c'"/>
967+
<banner/>
968+
<current_user query="SELECT USER FROM SYSIBM.SYSDUMMY1"/>
969+
<current_db query="SELECT CURRENT SCHEMA FROM SYSIBM.SYSDUMMY1"/>
970+
<hostname/>
971+
<table_comment/>
972+
<column_comment/>
973+
<!-- NOTE: ERROR 4251D: Only the database owner can perform this operation. -->
974+
<is_dba query="(SELECT COUNT(*) FROM SYS.SYSUSERS)>=0"/>
975+
<dbs>
976+
<inband query="SELECT SCHEMANAME FROM SYS.SYSSCHEMAS"/>
977+
<blind query="SELECT SCHEMANAME FROM SYS.SYSSCHEMAS {LIMIT 1 OFFSET %d}" count="SELECT COUNT(SCHEMANAME) FROM SYS.SYSSCHEMAS"/>
978+
</dbs>
979+
<tables>
980+
<inband query="SELECT SCHEMANAME,TABLENAME FROM SYS.SYSTABLES JOIN SYS.SYSSCHEMAS ON SYS.SYSTABLES.SCHEMAID=SYS.SYSSCHEMAS.SCHEMAID" condition="SCHEMANAME"/>
981+
<blind query="SELECT TABLENAME FROM SYS.SYSTABLES JOIN SYS.SYSSCHEMAS ON SYS.SYSTABLES.SCHEMAID=SYS.SYSSCHEMAS.SCHEMAID WHERE SCHEMANAME='%s' {LIMIT 1 OFFSET %d}" count="SELECT COUNT(TABLENAME) FROM SYS.SYSTABLES JOIN SYS.SYSSCHEMAS ON SYS.SYSTABLES.SCHEMAID=SYS.SYSSCHEMAS.SCHEMAID WHERE SCHEMANAME='%s'"/>
982+
</tables>
983+
<columns>
984+
<!-- NOTE: COLUMNDATATYPE without CAST() causes problems during enumeration -->
985+
<inband query="SELECT COLUMNNAME,RTRIM(CAST(COLUMNDATATYPE AS CHAR(254))) FROM SYS.SYSCOLUMNS JOIN SYS.SYSTABLES ON SYS.SYSCOLUMNS.REFERENCEID=SYS.SYSTABLES.TABLEID JOIN SYS.SYSSCHEMAS ON SYS.SYSTABLES.SCHEMAID=SYS.SYSSCHEMAS.SCHEMAID WHERE TABLENAME='%s' AND SCHEMANAME='%s'" condition="COLUMNNAME"/>
986+
<blind query="SELECT COLUMNNAME FROM SYS.SYSCOLUMNS JOIN SYS.SYSTABLES ON SYS.SYSCOLUMNS.REFERENCEID=SYS.SYSTABLES.TABLEID JOIN SYS.SYSSCHEMAS ON SYS.SYSTABLES.SCHEMAID=SYS.SYSSCHEMAS.SCHEMAID WHERE TABLENAME='%s' AND SCHEMANAME='%s'" query2="SELECT COLUMNDATATYPE FROM SYS.SYSCOLUMNS JOIN SYS.SYSTABLES ON SYS.SYSCOLUMNS.REFERENCEID=SYS.SYSTABLES.TABLEID JOIN SYS.SYSSCHEMAS ON SYS.SYSTABLES.SCHEMAID=SYS.SYSSCHEMAS.SCHEMAID WHERE TABLENAME='%s' AND COLUMNNAME='%s' AND SCHEMANAME='%s'" count="SELECT COUNT(COLUMNNAME) FROM SYS.SYSCOLUMNS JOIN SYS.SYSTABLES ON SYS.SYSCOLUMNS.REFERENCEID=SYS.SYSTABLES.TABLEID JOIN SYS.SYSSCHEMAS ON SYS.SYSTABLES.SCHEMAID=SYS.SYSSCHEMAS.SCHEMAID WHERE TABLENAME='%s' AND SCHEMANAME='%s'" condition="COLUMNNAME"/>
987+
</columns>
988+
<dump_table>
989+
<inband query="SELECT %s FROM %s"/>
990+
<blind query="SELECT %s FROM %s {LIMIT 1 OFFSET %d}" count="SELECT COUNT(*) FROM %s"/>
991+
</dump_table>
992+
<users>
993+
<inband query="SELECT USERNAME FROM SYS.SYSUSERS"/>
994+
<blind query="SELECT USERNAME FROM SYS.SYSUSERS {LIMIT 1 OFFSET %d}" count="SELECT COUNT(USERNAME) FROM SYS.SYSUSERS"/>
995+
</users>
996+
<!-- NOTE: No one can view the 'SYSUSERS'.'PASSWORD' column -->
997+
<passwords/>
998+
<privileges/>
999+
<roles/>
1000+
<statements/>
1001+
<search_db>
1002+
<inband query="SELECT SCHEMANAME FROM SYS.SYSSCHEMAS WHERE %s" condition="SCHEMANAME"/>
1003+
<blind query="SELECT DISTINCT(SCHEMANAME) FROM SYS.SYSSCHEMAS WHERE %s" count="SELECT COUNT(DISTINCT(SCHEMANAME)) FROM SYS.SYSSCHEMAS WHERE %s" condition="SCHEMANAME"/>
1004+
</search_db>
1005+
<search_table>
1006+
<inband query="SELECT SCHEMANAME,TABLENAME FROM SYS.SYSTABLES JOIN SYS.SYSSCHEMAS ON SYS.SYSTABLES.SCHEMAID=SYS.SYSSCHEMAS.SCHEMAID WHERE %s" condition="TABLENAME" condition2="SCHEMANAME"/>
1007+
<blind query="SELECT DISTINCT(SCHEMANAME) FROM SYS.SYSTABLES JOIN SYS.SYSSCHEMAS ON SYS.SYSTABLES.SCHEMAID=SYS.SYSSCHEMAS.SCHEMAID WHERE %s" query2="SELECT DISTINCT(TABLENAME) FROM SYS.SYSTABLES JOIN SYS.SYSSCHEMAS ON SYS.SYSTABLES.SCHEMAID=SYS.SYSSCHEMAS.SCHEMAID WHERE SCHEMANAME='%s'" count="SELECT COUNT(DISTINCT(SCHEMANAME)) FROM SYS.SYSTABLES JOIN SYS.SYSSCHEMAS ON SYS.SYSTABLES.SCHEMAID=SYS.SYSSCHEMAS.SCHEMAID WHERE %s" count2="SELECT COUNT(DISTINCT(TABLENAME)) FROM SYS.SYSTABLES JOIN SYS.SYSSCHEMAS ON SYS.SYSTABLES.SCHEMAID=SYS.SYSSCHEMAS.SCHEMAID WHERE SCHEMANAME='%s'" condition="TABLENAME" condition2="SCHEMANAME"/>
1008+
</search_table>
1009+
<search_column>
1010+
<inband query="SELECT SCHEMANAME,TABLENAME FROM SYS.SYSCOLUMNS JOIN SYS.SYSTABLES ON SYS.SYSCOLUMNS.REFERENCEID=SYS.SYSTABLES.TABLEID JOIN SYS.SYSSCHEMAS ON SYS.SYSTABLES.SCHEMAID=SYS.SYSSCHEMAS.SCHEMAID WHERE %s" condition="COLUMNNAME" condition2="SCHEMANAME" condition3="TABLENAME"/>
1011+
<blind query="SELECT DISTINCT(SCHEMANAME) FROM SYS.SYSCOLUMNS JOIN SYS.SYSTABLES ON SYS.SYSCOLUMNS.REFERENCEID=SYS.SYSTABLES.TABLEID JOIN SYS.SYSSCHEMAS ON SYS.SYSTABLES.SCHEMAID=SYS.SYSSCHEMAS.SCHEMAID WHERE %s" count="SELECT COUNT(DISTINCT(SCHEMANAME)) FROM SYS.SYSCOLUMNS JOIN SYS.SYSTABLES ON SYS.SYSCOLUMNS.REFERENCEID=SYS.SYSTABLES.TABLEID JOIN SYS.SYSSCHEMAS ON SYS.SYSTABLES.SCHEMAID=SYS.SYSSCHEMAS.SCHEMAID WHERE %s" query2="SELECT DISTINCT(TABLENAME) FROM SYS.SYSCOLUMNS JOIN SYS.SYSTABLES ON SYS.SYSCOLUMNS.REFERENCEID=SYS.SYSTABLES.TABLEID JOIN SYS.SYSSCHEMAS ON SYS.SYSTABLES.SCHEMAID=SYS.SYSSCHEMAS.SCHEMAID WHERE %s" count2="SELECT COUNT(DISTINCT(TABLENAME)) FROM SYS.SYSCOLUMNS JOIN SYS.SYSTABLES ON SYS.SYSCOLUMNS.REFERENCEID=SYS.SYSTABLES.TABLEID JOIN SYS.SYSSCHEMAS ON SYS.SYSTABLES.SCHEMAID=SYS.SYSSCHEMAS.SCHEMAID WHERE SCHEMANAME='%s'" condition="COLUMNNAME" condition2="SCHEMANAME" condition3="TABLENAME"/>
1012+
</search_column>
1013+
</dbms>
9451014
</root>

lib/controller/handler.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
from lib.core.settings import H2_ALIASES
2626
from lib.core.settings import INFORMIX_ALIASES
2727
from lib.core.settings import MONETDB_ALIASES
28+
from lib.core.settings import DERBY_ALIASES
2829
from lib.utils.sqlalchemy import SQLAlchemy
2930

3031
from plugins.dbms.mssqlserver import MSSQLServerMap
@@ -55,6 +56,8 @@
5556
from plugins.dbms.informix.connector import Connector as InformixConn
5657
from plugins.dbms.monetdb import MonetDBMap
5758
from plugins.dbms.monetdb.connector import Connector as MonetDBConn
59+
from plugins.dbms.derby import DerbyMap
60+
from plugins.dbms.derby.connector import Connector as DerbyConn
5861

5962
def setHandler():
6063
"""
@@ -77,6 +80,7 @@ def setHandler():
7780
(DBMS.H2, H2_ALIASES, H2Map, H2Conn),
7881
(DBMS.INFORMIX, INFORMIX_ALIASES, InformixMap, InformixConn),
7982
(DBMS.MONETDB, MONETDB_ALIASES, MonetDBMap, MonetDBConn),
83+
(DBMS.DERBY, DERBY_ALIASES, DerbyMap, DerbyConn),
8084
]
8185

8286
_ = max(_ if (conf.get("dbms") or Backend.getIdentifiedDbms() or kb.heuristicExtendedDbms or "").lower() in _[1] else () for _ in items)

lib/core/agent.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -648,7 +648,7 @@ def concatQuery(self, query, unpack=True):
648648
elif fieldsNoSelect:
649649
concatenatedQuery = "CONCAT('%s',%s,'%s')" % (kb.chars.start, concatenatedQuery, kb.chars.stop)
650650

651-
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.ORACLE, DBMS.SQLITE, DBMS.DB2, DBMS.FIREBIRD, DBMS.HSQLDB, DBMS.H2, DBMS.MONETDB):
651+
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.ORACLE, DBMS.SQLITE, DBMS.DB2, DBMS.FIREBIRD, DBMS.HSQLDB, DBMS.H2, DBMS.MONETDB, DBMS.DERBY):
652652
if fieldsExists:
653653
concatenatedQuery = concatenatedQuery.replace("SELECT ", "'%s'||" % kb.chars.start, 1)
654654
concatenatedQuery += "||'%s'" % kb.chars.stop
@@ -941,6 +941,10 @@ def limitQuery(self, num, query, field=None, uniqueField=None):
941941
limitStr = queries[Backend.getIdentifiedDbms()].limit.query % (num, 1)
942942
limitedQuery += " %s" % limitStr
943943

944+
elif Backend.getIdentifiedDbms() in (DBMS.DERBY,):
945+
limitStr = queries[Backend.getIdentifiedDbms()].limit.query % (1, num)
946+
limitedQuery += " %s" % limitStr
947+
944948
elif Backend.getIdentifiedDbms() in (DBMS.MONETDB,):
945949
if query.startswith("SELECT ") and field is not None and field in query:
946950
original = query.split("SELECT ", 1)[1].split(" FROM", 1)[0]

lib/core/common.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
from difflib import SequenceMatcher
4141
from math import sqrt
4242
from optparse import OptionValueError
43-
from xml.dom import minidom
4443
from xml.sax import parse
4544
from xml.sax import SAXParseException
4645

lib/core/dicts.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from lib.core.settings import ACCESS_ALIASES
1313
from lib.core.settings import BLANK
1414
from lib.core.settings import DB2_ALIASES
15+
from lib.core.settings import DERBY_ALIASES
1516
from lib.core.settings import FIREBIRD_ALIASES
1617
from lib.core.settings import H2_ALIASES
1718
from lib.core.settings import HSQLDB_ALIASES
@@ -200,6 +201,7 @@
200201
DBMS.H2: (H2_ALIASES, None, None, None),
201202
DBMS.INFORMIX: (INFORMIX_ALIASES, "python ibm-db", "https://github.com/ibmdb/python-ibmdb", "ibm_db_sa"),
202203
DBMS.MONETDB: (MONETDB_ALIASES, "pymonetdb", "https://github.com/gijzelaerr/pymonetdb", "monetdb"),
204+
DBMS.DERBY: (DERBY_ALIASES, "pydrda", "https://github.com/nakagami/pydrda/", None),
203205
}
204206

205207
FROM_DUMMY_TABLE = {
@@ -209,7 +211,8 @@
209211
DBMS.MAXDB: " FROM VERSIONS",
210212
DBMS.DB2: " FROM SYSIBM.SYSDUMMY1",
211213
DBMS.HSQLDB: " FROM INFORMATION_SCHEMA.SYSTEM_USERS",
212-
DBMS.INFORMIX: " FROM SYSMASTER:SYSDUAL"
214+
DBMS.INFORMIX: " FROM SYSMASTER:SYSDUAL",
215+
DBMS.DERBY: " FROM SYSIBM.SYSDUMMY1"
213216
}
214217

215218
SQL_STATEMENTS = {

lib/core/enums.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ class DBMS(object):
4646
H2 = "H2"
4747
INFORMIX = "Informix"
4848
MONETDB = "MonetDB"
49+
DERBY = "Apache Derby"
4950

5051
class DBMS_DIRECTORY_NAME(object):
5152
ACCESS = "access"
@@ -62,6 +63,7 @@ class DBMS_DIRECTORY_NAME(object):
6263
H2 = "h2"
6364
INFORMIX = "informix"
6465
MONETDB = "monetdb"
66+
DERBY = "derby"
6567

6668
class CUSTOM_LOGGING(object):
6769
PAYLOAD = 9

lib/core/settings.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
from thirdparty.six import unichr as _unichr
1919

2020
# sqlmap version (<major>.<minor>.<month>.<monthly commit>)
21-
VERSION = "1.4.1.28"
21+
VERSION = "1.4.1.29"
2222
TYPE = "dev" if VERSION.count('.') > 2 and VERSION.split('.')[-1] != '0' else "stable"
2323
TYPE_COLORS = {"dev": 33, "stable": 90, "pip": 34}
2424
VERSION_STRING = "sqlmap/%s#%s" % ('.'.join(VERSION.split('.')[:-1]) if VERSION.count('.') > 2 and VERSION.split('.')[-1] == '0' else VERSION, TYPE)
@@ -259,6 +259,7 @@
259259
H2_SYSTEM_DBS = ("INFORMATION_SCHEMA",)
260260
INFORMIX_SYSTEM_DBS = ("sysmaster", "sysutils", "sysuser", "sysadmin")
261261
MONETDB_SYSTEM_DBS = ("tmp", "json", "profiler")
262+
DERBY_SYSTEM_DBS = ("NULLID", "SQLJ", "SYS", "SYSCAT", "SYSCS_DIAG", "SYSCS_UTIL", "SYSFUN", "SYSIBM", "SYSPROC", "SYSSTAT")
262263

263264
MSSQL_ALIASES = ("microsoft sql server", "mssqlserver", "mssql", "ms")
264265
MYSQL_ALIASES = ("mysql", "my", "mariadb", "maria")
@@ -274,13 +275,14 @@
274275
H2_ALIASES = ("h2",)
275276
INFORMIX_ALIASES = ("informix", "ibm informix", "ibminformix")
276277
MONETDB_ALIASES = ("monet", "monetdb",)
278+
DERBY_ALIASES = ("derby", "apache derby",)
277279

278280
DBMS_DIRECTORY_DICT = dict((getattr(DBMS, _), getattr(DBMS_DIRECTORY_NAME, _)) for _ in dir(DBMS) if not _.startswith("_"))
279281

280-
SUPPORTED_DBMS = MSSQL_ALIASES + MYSQL_ALIASES + PGSQL_ALIASES + ORACLE_ALIASES + SQLITE_ALIASES + ACCESS_ALIASES + FIREBIRD_ALIASES + MAXDB_ALIASES + SYBASE_ALIASES + DB2_ALIASES + HSQLDB_ALIASES + H2_ALIASES + INFORMIX_ALIASES + MONETDB_ALIASES
282+
SUPPORTED_DBMS = MSSQL_ALIASES + MYSQL_ALIASES + PGSQL_ALIASES + ORACLE_ALIASES + SQLITE_ALIASES + ACCESS_ALIASES + FIREBIRD_ALIASES + MAXDB_ALIASES + SYBASE_ALIASES + DB2_ALIASES + HSQLDB_ALIASES + H2_ALIASES + INFORMIX_ALIASES + MONETDB_ALIASES + DERBY_ALIASES
281283
SUPPORTED_OS = ("linux", "windows")
282284

283-
DBMS_ALIASES = ((DBMS.MSSQL, MSSQL_ALIASES), (DBMS.MYSQL, MYSQL_ALIASES), (DBMS.PGSQL, PGSQL_ALIASES), (DBMS.ORACLE, ORACLE_ALIASES), (DBMS.SQLITE, SQLITE_ALIASES), (DBMS.ACCESS, ACCESS_ALIASES), (DBMS.FIREBIRD, FIREBIRD_ALIASES), (DBMS.MAXDB, MAXDB_ALIASES), (DBMS.SYBASE, SYBASE_ALIASES), (DBMS.DB2, DB2_ALIASES), (DBMS.HSQLDB, HSQLDB_ALIASES), (DBMS.H2, H2_ALIASES), (DBMS.INFORMIX, INFORMIX_ALIASES), (DBMS.MONETDB, MONETDB_ALIASES))
285+
DBMS_ALIASES = ((DBMS.MSSQL, MSSQL_ALIASES), (DBMS.MYSQL, MYSQL_ALIASES), (DBMS.PGSQL, PGSQL_ALIASES), (DBMS.ORACLE, ORACLE_ALIASES), (DBMS.SQLITE, SQLITE_ALIASES), (DBMS.ACCESS, ACCESS_ALIASES), (DBMS.FIREBIRD, FIREBIRD_ALIASES), (DBMS.MAXDB, MAXDB_ALIASES), (DBMS.SYBASE, SYBASE_ALIASES), (DBMS.DB2, DB2_ALIASES), (DBMS.HSQLDB, HSQLDB_ALIASES), (DBMS.H2, H2_ALIASES), (DBMS.INFORMIX, INFORMIX_ALIASES), (DBMS.MONETDB, MONETDB_ALIASES), (DBMS.DERBY, DERBY_ALIASES))
284286

285287
USER_AGENT_ALIASES = ("ua", "useragent", "user-agent")
286288
REFERER_ALIASES = ("ref", "referer", "referrer")

lib/techniques/blind/inference.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -642,7 +642,7 @@ def blindThread():
642642
dataToStdout(filterControlChars(val))
643643

644644
# some DBMSes (e.g. Firebird, DB2, etc.) have issues with trailing spaces
645-
if Backend.getIdentifiedDbms() in (DBMS.FIREBIRD, DBMS.DB2, DBMS.MAXDB) and len(partialValue) > INFERENCE_BLANK_BREAK and partialValue[-INFERENCE_BLANK_BREAK:].isspace():
645+
if Backend.getIdentifiedDbms() in (DBMS.FIREBIRD, DBMS.DB2, DBMS.MAXDB, DBMS.DERBY) and len(partialValue) > INFERENCE_BLANK_BREAK and partialValue[-INFERENCE_BLANK_BREAK:].isspace():
646646
finalValue = partialValue[:-INFERENCE_BLANK_BREAK]
647647
break
648648
elif charsetType and partialValue[-1:].isspace():

lib/utils/deps.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ def checkDependencies():
4848
__import__("ibm_db_dbi")
4949
elif dbmsName == DBMS.MONETDB:
5050
__import__("pymonetdb")
51+
elif dbmsName == DBMS.DERBY:
52+
__import__("drda")
5153
except:
5254
warnMsg = "sqlmap requires '%s' third-party library " % data[1]
5355
warnMsg += "in order to directly connect to the DBMS "

0 commit comments

Comments
 (0)