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

Skip to content

Commit 5eb2263

Browse files
committed
Adding support for eXtremeDB
1 parent 7ff77ef commit 5eb2263

18 files changed

Lines changed: 373 additions & 33 deletions

File tree

data/txt/common-tables.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,7 @@ exchange
442442
Status
443443
WORKS_ON
444444
lines
445+
testusers
445446
booleantests
446447
QRTZ_SIMPLE_TRIGGERS
447448
mobile_menu

data/xml/queries.xml

Lines changed: 47 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -756,7 +756,7 @@
756756
<count query="COUNT(%s)"/>
757757
<comment query="--" query2="//"/>
758758
<substring query="SUBSTR((%s),%d,%d)"/>
759-
<concatenate query="CONCAT(%s,%s)"/>
759+
<concatenate query="%s||%s"/>
760760
<case query="SELECT (CASE WHEN (%s) THEN 1 ELSE 0 END)"/>
761761
<hex query="RAWTOHEX(%s)"/>
762762
<inference query="ASCII(SUBSTR((%s),%d,1))>%d"/>
@@ -882,7 +882,7 @@
882882
<count query="COUNT(%s)"/>
883883
<comment query="--" query2="#"/>
884884
<substring query="SUBSTRING((%s),%d,%d)"/>
885-
<concatenate query="CONCAT(%s,%s)"/>
885+
<concatenate query="%s||%s"/>
886886
<case query="SELECT (CASE WHEN (%s) THEN 1 ELSE 0 END)"/>
887887
<inference query="ASCII(SUBSTRING((%s),%d,1))>%d"/>
888888
<banner query="SELECT value FROM environment WHERE name='monet_version'"/>
@@ -1505,8 +1505,8 @@
15051505
<blind query="SELECT TOP 1 %s FROM (SELECT TOP ALL * FROM %s.%s ORDER BY %s) WHERE %%VID=%d" count="SELECT COUNT(*) FROM %s.%s"/>
15061506
</dump_table>
15071507
<search_db>
1508-
<inband query="SELECT schema_name FROM INFORMATION_SCHEMA.SCHEMATA WHERE %s" query2="SELECT db FROM mysql.db WHERE %s" condition="schema_name" condition2="db"/>
1509-
<blind query="SELECT DISTINCT(schema_name) FROM INFORMATION_SCHEMA.SCHEMATA WHERE %s" query2="SELECT DISTINCT(db) FROM mysql.db WHERE %s" count="SELECT COUNT(DISTINCT(schema_name)) FROM INFORMATION_SCHEMA.SCHEMATA WHERE %s" count2="SELECT COUNT(DISTINCT(db)) FROM mysql.db WHERE %s" condition="schema_name" condition2="db"/>
1508+
<inband query="SELECT schema_name FROM INFORMATION_SCHEMA.SCHEMATA WHERE %s" condition="schema_name"/>
1509+
<blind query="SELECT schema_name FROM INFORMATION_SCHEMA.SCHEMATA WHERE %s" count="SELECT COUNT(schema_name) FROM INFORMATION_SCHEMA.SCHEMATA WHERE %s" condition="schema_name"/>
15101510
</search_db>
15111511
<search_table>
15121512
<inband query="SELECT table_schema,table_name FROM INFORMATION_SCHEMA.TABLES WHERE %s" condition="table_name" condition2="table_schema"/>
@@ -1517,4 +1517,47 @@
15171517
<blind query="SELECT DISTINCT(table_schema) FROM INFORMATION_SCHEMA.COLUMNS WHERE %s" query2="SELECT DISTINCT(table_name) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema='%s'" count="SELECT COUNT(DISTINCT(table_schema)) FROM INFORMATION_SCHEMA.COLUMNS WHERE %s" count2="SELECT COUNT(DISTINCT(table_name)) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema='%s'" condition="column_name" condition2="table_schema" condition3="table_name"/>
15181518
</search_column>
15191519
</dbms>
1520+
1521+
<dbms value="eXtremeDB">
1522+
<cast query="CAST(%s AS VARCHAR(4000))"/>
1523+
<length query="LENGTH(%s)"/>
1524+
<isnull query="IFNULL(%s,' ')"/>
1525+
<delimiter query="||"/>
1526+
<limit query="LIMIT %d,%d"/>
1527+
<limitregexp query="\s+LIMIT\s+([\d]+)\s*\,\s*([\d]+)" query2="\s+LIMIT\s+([\d]+)"/>
1528+
<limitgroupstart query="1"/>
1529+
<limitgroupstop query="2"/>
1530+
<limitstring query=" LIMIT "/>
1531+
<order query="ORDER BY %s ASC"/>
1532+
<count query="COUNT(%s)"/>
1533+
<comment query="--"/>
1534+
<substring query="SUBSTR((%s),%d,%d)"/>
1535+
<concatenate query="%s||%s"/>
1536+
<case query="SELECT (CASE WHEN (%s) THEN 1 ELSE 0 END)"/>
1537+
<hex/>
1538+
<inference query="SUBSTR((%s),%d,1)>'%c'"/>
1539+
<banner/>
1540+
<current_user/>
1541+
<current_db/>
1542+
<hostname/>
1543+
<table_comment/>
1544+
<column_comment/>
1545+
<is_dba/>
1546+
<check_udf/>
1547+
<users/>
1548+
<passwords/>
1549+
<privileges/>
1550+
<roles/>
1551+
<statements/>
1552+
<dbs/>
1553+
<tables/>
1554+
<columns/>
1555+
<dump_table>
1556+
<inband query="SELECT %s FROM %s"/>
1557+
<blind query="SELECT %s FROM %s LIMIT %d,1" count="SELECT COUNT(*) FROM %s"/>
1558+
</dump_table>
1559+
<search_db/>
1560+
<search_table/>
1561+
<search_column/>
1562+
</dbms>
15201563
</root>

lib/controller/handler.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from lib.core.settings import CUBRID_ALIASES
1919
from lib.core.settings import DB2_ALIASES
2020
from lib.core.settings import DERBY_ALIASES
21+
from lib.core.settings import EXTREMEDB_ALIASES
2122
from lib.core.settings import FIREBIRD_ALIASES
2223
from lib.core.settings import H2_ALIASES
2324
from lib.core.settings import HSQLDB_ALIASES
@@ -50,6 +51,8 @@
5051
from plugins.dbms.db2 import DB2Map
5152
from plugins.dbms.derby.connector import Connector as DerbyConn
5253
from plugins.dbms.derby import DerbyMap
54+
from plugins.dbms.extremedb.connector import Connector as ExtremeDBConn
55+
from plugins.dbms.extremedb import ExtremeDBMap
5356
from plugins.dbms.firebird.connector import Connector as FirebirdConn
5457
from plugins.dbms.firebird import FirebirdMap
5558
from plugins.dbms.h2.connector import Connector as H2Conn
@@ -113,6 +116,7 @@ def setHandler():
113116
(DBMS.CRATEDB, CRATEDB_ALIASES, CrateDBMap, CrateDBConn),
114117
(DBMS.CUBRID, CUBRID_ALIASES, CubridMap, CubridConn),
115118
(DBMS.CACHE, CACHE_ALIASES, CacheMap, CacheConn),
119+
(DBMS.EXTREMEDB, EXTREMEDB_ALIASES, ExtremeDBMap, ExtremeDBConn),
116120
]
117121

118122
_ = 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: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -660,7 +660,7 @@ def concatQuery(self, query, unpack=True):
660660
elif fieldsNoSelect:
661661
concatenatedQuery = "CONCAT('%s',%s,'%s')" % (kb.chars.start, concatenatedQuery, kb.chars.stop)
662662

663-
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.ORACLE, DBMS.SQLITE, DBMS.DB2, DBMS.FIREBIRD, DBMS.HSQLDB, DBMS.H2, DBMS.MONETDB, DBMS.DERBY, DBMS.VERTICA, DBMS.MCKOI, DBMS.PRESTO, DBMS.ALTIBASE, DBMS.MIMERSQL, DBMS.CRATEDB, DBMS.CUBRID, DBMS.CACHE):
663+
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.ORACLE, DBMS.SQLITE, DBMS.DB2, DBMS.FIREBIRD, DBMS.HSQLDB, DBMS.H2, DBMS.MONETDB, DBMS.DERBY, DBMS.VERTICA, DBMS.MCKOI, DBMS.PRESTO, DBMS.ALTIBASE, DBMS.MIMERSQL, DBMS.CRATEDB, DBMS.CUBRID, DBMS.CACHE, DBMS.EXTREMEDB):
664664
if fieldsExists:
665665
concatenatedQuery = concatenatedQuery.replace("SELECT ", "'%s'||" % kb.chars.start, 1)
666666
concatenatedQuery += "||'%s'" % kb.chars.stop
@@ -971,7 +971,7 @@ def limitQuery(self, num, query, field=None, uniqueField=None):
971971
fromFrom = limitedQuery[fromIndex + 1:]
972972
orderBy = None
973973

974-
if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.PGSQL, DBMS.SQLITE, DBMS.H2, DBMS.VERTICA, DBMS.PRESTO, DBMS.MIMERSQL, DBMS.CUBRID):
974+
if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.PGSQL, DBMS.SQLITE, DBMS.H2, DBMS.VERTICA, DBMS.PRESTO, DBMS.MIMERSQL, DBMS.CUBRID, DBMS.EXTREMEDB):
975975
limitStr = queries[Backend.getIdentifiedDbms()].limit.query % (num, 1)
976976
limitedQuery += " %s" % limitStr
977977

lib/core/common.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4091,7 +4091,7 @@ def safeSQLIdentificatorNaming(name, isTable=False):
40914091

40924092
if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.ACCESS, DBMS.CUBRID, DBMS.SQLITE): # Note: in SQLite double-quotes are treated as string if column/identifier is non-existent (e.g. SELECT "foobar" FROM users)
40934093
retVal = "`%s`" % retVal
4094-
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.DB2, DBMS.HSQLDB, DBMS.H2, DBMS.INFORMIX, DBMS.MONETDB, DBMS.VERTICA, DBMS.MCKOI, DBMS.PRESTO, DBMS.CRATEDB, DBMS.CACHE):
4094+
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.DB2, DBMS.HSQLDB, DBMS.H2, DBMS.INFORMIX, DBMS.MONETDB, DBMS.VERTICA, DBMS.MCKOI, DBMS.PRESTO, DBMS.CRATEDB, DBMS.CACHE, DBMS.EXTREMEDB):
40954095
retVal = "\"%s\"" % retVal
40964096
elif Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.ALTIBASE, DBMS.MIMERSQL):
40974097
retVal = "\"%s\"" % retVal.upper()
@@ -4129,7 +4129,7 @@ def unsafeSQLIdentificatorNaming(name):
41294129
if isinstance(name, six.string_types):
41304130
if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.ACCESS, DBMS.CUBRID, DBMS.SQLITE):
41314131
retVal = name.replace("`", "")
4132-
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.DB2, DBMS.HSQLDB, DBMS.H2, DBMS.INFORMIX, DBMS.MONETDB, DBMS.VERTICA, DBMS.MCKOI, DBMS.PRESTO, DBMS.CRATEDB, DBMS.CACHE):
4132+
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.DB2, DBMS.HSQLDB, DBMS.H2, DBMS.INFORMIX, DBMS.MONETDB, DBMS.VERTICA, DBMS.MCKOI, DBMS.PRESTO, DBMS.CRATEDB, DBMS.CACHE, DBMS.EXTREMEDB):
41334133
retVal = name.replace("\"", "")
41344134
elif Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.ALTIBASE, DBMS.MIMERSQL):
41354135
retVal = name.replace("\"", "").upper()

lib/core/dicts.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from lib.core.settings import CUBRID_ALIASES
1818
from lib.core.settings import DB2_ALIASES
1919
from lib.core.settings import DERBY_ALIASES
20+
from lib.core.settings import EXTREMEDB_ALIASES
2021
from lib.core.settings import FIREBIRD_ALIASES
2122
from lib.core.settings import H2_ALIASES
2223
from lib.core.settings import HSQLDB_ALIASES
@@ -240,6 +241,7 @@
240241
DBMS.CRATEDB: (CRATEDB_ALIASES, "python-psycopg2", "http://initd.org/psycopg/", "postgresql"),
241242
DBMS.CUBRID: (CUBRID_ALIASES, "CUBRID-Python", "https://github.com/CUBRID/cubrid-python", None),
242243
DBMS.CACHE: (CACHE_ALIASES, "python jaydebeapi & python-jpype", "https://pypi.python.org/pypi/JayDeBeApi/ & http://jpype.sourceforge.net/", None),
244+
DBMS.EXTREMEDB: (EXTREMEDB_ALIASES, None, None, None),
243245
}
244246

245247
# Reference: https://blog.jooq.org/tag/sysibm-sysdummy1/
@@ -274,6 +276,7 @@
274276
DBMS.CRATEDB: "MD5(NULL~NULL)", # Note: NULL~NULL also being evaluated on H2 and Ignite
275277
DBMS.CUBRID: "(NULL SETEQ NULL)",
276278
DBMS.CACHE: "%SQLUPPER NULL",
279+
DBMS.EXTREMEDB: "NULLIFZERO(hashcode(NULL))",
277280
}
278281

279282
SQL_STATEMENTS = {

lib/core/enums.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ class DBMS(object):
5555
CRATEDB = "CrateDB"
5656
CUBRID = "Cubrid"
5757
CACHE = "InterSystems Cache"
58+
EXTREMEDB = "eXtremeDB"
5859

5960
class DBMS_DIRECTORY_NAME(object):
6061
ACCESS = "access"
@@ -80,6 +81,7 @@ class DBMS_DIRECTORY_NAME(object):
8081
CRATEDB = "cratedb"
8182
CUBRID = "cubrid"
8283
CACHE = "cache"
84+
EXTREMEDB = "extremedb"
8385

8486
class FORK(object):
8587
MARIADB = "MariaDB"

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.2.39"
21+
VERSION = "1.4.2.40"
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)
@@ -269,6 +269,7 @@
269269
CRATEDB_SYSTEM_DBS = ("information_schema", "pg_catalog", "sys")
270270
CUBRID_SYSTEM_DBS = ("DBA",)
271271
CACHE_SYSTEM_DBS = ("%Dictionary", "INFORMATION_SCHEMA", "%SYS")
272+
EXTREMEDB_SYSTEM_DBS = ("",)
272273

273274
# Note: (<regular>) + (<forks>)
274275
MSSQL_ALIASES = ("microsoft sql server", "mssqlserver", "mssql", "ms")
@@ -294,13 +295,14 @@
294295
CRATEDB_ALIASES = ("cratedb", "crate")
295296
CUBRID_ALIASES = ("cubrid",)
296297
CACHE_ALIASES = ("cachedb", "cache")
298+
EXTREMEDB_ALIASES = ("extremedb", "extreme")
297299

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

300-
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 + VERTICA_ALIASES + MCKOI_ALIASES + PRESTO_ALIASES + ALTIBASE_ALIASES + MIMERSQL_ALIASES + CRATEDB_ALIASES + CUBRID_ALIASES + CACHE_ALIASES
302+
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 + VERTICA_ALIASES + MCKOI_ALIASES + PRESTO_ALIASES + ALTIBASE_ALIASES + MIMERSQL_ALIASES + CRATEDB_ALIASES + CUBRID_ALIASES + CACHE_ALIASES + EXTREMEDB_ALIASES
301303
SUPPORTED_OS = ("linux", "windows")
302304

303-
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), (DBMS.VERTICA, VERTICA_ALIASES), (DBMS.MCKOI, MCKOI_ALIASES), (DBMS.PRESTO, PRESTO_ALIASES), (DBMS.ALTIBASE, ALTIBASE_ALIASES), (DBMS.MIMERSQL, MIMERSQL_ALIASES), (DBMS.CRATEDB, CRATEDB_ALIASES), (DBMS.CUBRID, CUBRID_ALIASES), (DBMS.CACHE, CACHE_ALIASES))
305+
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), (DBMS.VERTICA, VERTICA_ALIASES), (DBMS.MCKOI, MCKOI_ALIASES), (DBMS.PRESTO, PRESTO_ALIASES), (DBMS.ALTIBASE, ALTIBASE_ALIASES), (DBMS.MIMERSQL, MIMERSQL_ALIASES), (DBMS.CRATEDB, CRATEDB_ALIASES), (DBMS.CUBRID, CUBRID_ALIASES), (DBMS.CACHE, CACHE_ALIASES), (DBMS.EXTREMEDB, EXTREMEDB_ALIASES))
304306

305307
USER_AGENT_ALIASES = ("ua", "useragent", "user-agent")
306308
REFERER_ALIASES = ("ref", "referer", "referrer")

plugins/dbms/extremedb/__init__.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#!/usr/bin/env python
2+
3+
"""
4+
Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
5+
See the file 'LICENSE' for copying permission
6+
"""
7+
8+
from lib.core.enums import DBMS
9+
from lib.core.settings import EXTREMEDB_SYSTEM_DBS
10+
from lib.core.unescaper import unescaper
11+
from plugins.dbms.extremedb.enumeration import Enumeration
12+
from plugins.dbms.extremedb.filesystem import Filesystem
13+
from plugins.dbms.extremedb.fingerprint import Fingerprint
14+
from plugins.dbms.extremedb.syntax import Syntax
15+
from plugins.dbms.extremedb.takeover import Takeover
16+
from plugins.generic.misc import Miscellaneous
17+
18+
class ExtremeDBMap(Syntax, Fingerprint, Enumeration, Filesystem, Miscellaneous, Takeover):
19+
"""
20+
This class defines eXtremeDB methods
21+
"""
22+
23+
def __init__(self):
24+
self.excludeDbsList = EXTREMEDB_SYSTEM_DBS
25+
26+
for cls in self.__class__.__bases__:
27+
cls.__init__(self)
28+
29+
unescaper[DBMS.EXTREMEDB] = Syntax.escape
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#!/usr/bin/env python
2+
3+
"""
4+
Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/)
5+
See the file 'LICENSE' for copying permission
6+
"""
7+
8+
from lib.core.exception import SqlmapUnsupportedFeatureException
9+
from plugins.generic.connector import Connector as GenericConnector
10+
11+
class Connector(GenericConnector):
12+
def connect(self):
13+
errMsg = "on eXtremeDB it is not (currently) possible to establish a "
14+
errMsg += "direct connection"
15+
raise SqlmapUnsupportedFeatureException(errMsg)

0 commit comments

Comments
 (0)