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

Skip to content

Commit 421f187

Browse files
committed
Adding support for MimerSQL
1 parent f21388d commit 421f187

21 files changed

Lines changed: 387 additions & 18 deletions

File tree

data/xml/errors.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,4 +215,10 @@
215215
<dbms value="Altibase">
216216
<error regexp="Altibase\.jdbc\.driver"/>
217217
</dbms>
218+
219+
<!-- MimerSQL -->
220+
<dbms value="MimerSQL">
221+
<error regexp="com\.mimer\.jdbc"/>
222+
<error regexp="Syntax error,[^\n]+assumed to mean"/>
223+
</dbms>
218224
</root>

data/xml/queries.xml

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1264,4 +1264,74 @@
12641264
<blind query="SELECT DISTINCT(USER_NAME) FROM SYSTEM_.SYS_COLUMNS_ JOIN SYSTEM_.SYS_TABLES_ ON SYSTEM_.SYS_COLUMNS_.TABLE_ID=SYSTEM_.SYS_TABLES_.TABLE_ID JOIN SYSTEM_.SYS_USERS_ ON SYSTEM_.SYS_USERS_.USER_ID=SYSTEM_.SYS_TABLES_.USER_ID WHERE %s" query2="SELECT DISTINCT(TABLE_NAME) FROM SYSTEM_.SYS_COLUMNS_ JOIN SYSTEM_.SYS_TABLES_ ON SYSTEM_.SYS_COLUMNS_.TABLE_ID=SYSTEM_.SYS_TABLES_.TABLE_ID JOIN SYSTEM_.SYS_USERS_ ON SYSTEM_.SYS_USERS_.USER_ID=SYSTEM_.SYS_TABLES_.USER_ID WHERE USER_NAME='%s'" count="SELECT COUNT(DISTINCT(USER_NAME)) FROM SYSTEM_.SYS_COLUMNS_ JOIN SYSTEM_.SYS_TABLES_ ON SYSTEM_.SYS_COLUMNS_.TABLE_ID=SYSTEM_.SYS_TABLES_.TABLE_ID JOIN SYSTEM_.SYS_USERS_ ON SYSTEM_.SYS_USERS_.USER_ID=SYSTEM_.SYS_TABLES_.USER_ID WHERE %s" count2="SELECT COUNT(DISTINCT(TABLE_NAME)) FROM SYSTEM_.SYS_COLUMNS_ JOIN SYSTEM_.SYS_TABLES_ ON SYSTEM_.SYS_COLUMNS_.TABLE_ID=SYSTEM_.SYS_TABLES_.TABLE_ID JOIN SYSTEM_.SYS_USERS_ ON SYSTEM_.SYS_USERS_.USER_ID=SYSTEM_.SYS_TABLES_.USER_ID WHERE USER_NAME='%s'" condition="COLUMN_NAME" condition2="USER_NAME" condition3="TABLE_NAME"/>
12651265
</search_column>
12661266
</dbms>
1267+
1268+
<!-- MimerSQL -->
1269+
<!-- NOTE: DBMS with stohastic output of rows (ORDER BY required) -->
1270+
<dbms value="MimerSQL">
1271+
<!-- NOTE: NVARCHAR(4000) causes problems in boolean (e.g. 'Required temporary table row length is 32006, only 32000 is possible') -->
1272+
<cast query="CAST(%s AS NVARCHAR(1000))"/>
1273+
<length query="CHAR_LENGTH(%s)"/>
1274+
<isnull query="COALESCE(%s,' ')"/>
1275+
<delimiter query="||"/>
1276+
<limit query="OFFSET %d FETCH %d"/>
1277+
<limitregexp query="\s+OFFSET\s+([\d]+)\s+FETCH\s+([\d]+)" query2="\s+FETCH\s+([\d]+)"/>
1278+
<limitgroupstart query="1"/>
1279+
<limitgroupstop query="2"/>
1280+
<limitstring query=" OFFSET "/>
1281+
<order query="ORDER BY %s ASC"/>
1282+
<count query="COUNT(%s)"/>
1283+
<comment query="--"/>
1284+
<substring query="SUBSTRING((%s),%d,%d)"/>
1285+
<concatenate query="%s||%s"/>
1286+
<case query="SELECT (CASE WHEN (%s) THEN '1' ELSE '0' END)"/>
1287+
<inference query="UNICODE_CODE(SUBSTRING((%s),%d,1))>%d"/>
1288+
<banner query="SELECT attribute_value FROM SYSTEM.SERVER_INFO WHERE server_attribute='CATALOG_VERSION_CURRENT'"/>
1289+
<current_user query="USER()"/>
1290+
<current_db query="USER()"/>
1291+
<hostname/>
1292+
<table_comment/>
1293+
<column_comment/>
1294+
<is_dba query="(SELECT COUNT(schema_name) FROM INFORMATION_SCHEMA.SCHEMATA WHERE schema_owner=USER())>0"/>
1295+
<check_udf/>
1296+
<!-- Reference: https://download.mimer.com/pub/developer/docs/html_110/Mimer_SQL_Engine_DocSet/App_D_Dic_tables2.html -->
1297+
<users>
1298+
<inband query="SELECT user_name FROM SYSTEM.USERS"/>
1299+
<blind query="SELECT user_name FROM SYSTEM.USERS ORDER BY 1 OFFSET %d FETCH 1" count="SELECT COUNT(user_name) FROM SYSTEM.USERS"/>
1300+
</users>
1301+
<passwords/>
1302+
<privileges>
1303+
<inband query="SELECT DISTINCT user_name,privilege_type FROM SYSTEM.TABLE_PRIVILEGES JOIN SYSTEM.USERS ON SYSTEM.TABLE_PRIVILEGES.GRANTEE_SYSID=SYSTEM.USERS.USER_SYSID" condition="user_name"/>
1304+
<blind query="SELECT DISTINCT(privilege_type) FROM SYSTEM.TABLE_PRIVILEGES JOIN SYSTEM.USERS ON SYSTEM.TABLE_PRIVILEGES.GRANTEE_SYSID=SYSTEM.USERS.USER_SYSID WHERE user_name='%s' ORDER BY 1 OFFSET %d FETCH 1" count="SELECT COUNT(DISTINCT(privilege_type)) FROM SYSTEM.TABLE_PRIVILEGES JOIN SYSTEM.USERS ON SYSTEM.TABLE_PRIVILEGES.GRANTEE_SYSID=SYSTEM.USERS.USER_SYSID WHERE user_name='%s'"/>
1305+
</privileges>
1306+
<roles/>
1307+
<statements/>
1308+
<dbs>
1309+
<inband query="SELECT schema_name FROM INFORMATION_SCHEMA.SCHEMATA"/>
1310+
<blind query="SELECT schema_name FROM INFORMATION_SCHEMA.SCHEMATA ORDER BY 1 OFFSET %d FETCH 1" count="SELECT COUNT(schema_name) FROM INFORMATION_SCHEMA.SCHEMATA"/>
1311+
</dbs>
1312+
<tables>
1313+
<inband query="SELECT table_schema,table_name FROM INFORMATION_SCHEMA.TABLES" condition="table_schema"/>
1314+
<blind query="SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='%s' ORDER BY 1 OFFSET %d FETCH 1" count="SELECT COUNT(table_name) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='%s'"/>
1315+
</tables>
1316+
<columns>
1317+
<inband query="SELECT column_name,data_type FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name='%s' AND table_schema='%s'" condition="column_name"/>
1318+
<blind query="SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name='%s' AND table_schema='%s' ORDER BY 1" query2="SELECT data_type FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name='%s' AND column_name='%s' AND table_schema='%s'" count="SELECT COUNT(column_name) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name='%s' AND table_schema='%s'" condition="column_name"/>
1319+
</columns>
1320+
<dump_table>
1321+
<inband query="SELECT %s FROM %s"/>
1322+
<blind query="SELECT %s FROM %s ORDER BY %s OFFSET %d FETCH 1" count="SELECT COUNT(*) FROM %s"/>
1323+
</dump_table>
1324+
<search_db>
1325+
<inband query="SELECT schema_name FROM INFORMATION_SCHEMA.SCHEMATA WHERE %s" condition="schema_name"/>
1326+
<blind query="SELECT schema_name FROM INFORMATION_SCHEMA.SCHEMATA WHERE %s ORDER BY 1" count="SELECT COUNT(schema_name) FROM INFORMATION_SCHEMA.SCHEMATA WHERE %s" condition="schema_name"/>
1327+
</search_db>
1328+
<search_table>
1329+
<inband query="SELECT table_schema,table_name FROM INFORMATION_SCHEMA.TABLES WHERE %s" condition="table_name" condition2="table_schema"/>
1330+
<blind query="SELECT DISTINCT(table_schema) FROM INFORMATION_SCHEMA.TABLES WHERE %s ORDER BY 1" query2="SELECT DISTINCT(table_name) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='%s' ORDER BY 1" count="SELECT COUNT(DISTINCT(table_schema)) FROM INFORMATION_SCHEMA.TABLES WHERE %s" count2="SELECT COUNT(DISTINCT(table_name)) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='%s'" condition="table_name" condition2="table_schema"/>
1331+
</search_table>
1332+
<search_column>
1333+
<inband query="SELECT table_schema,table_name FROM INFORMATION_SCHEMA.COLUMNS WHERE %s" condition="column_name" condition2="table_schema" condition3="table_name"/>
1334+
<blind query="SELECT DISTINCT(table_schema) FROM INFORMATION_SCHEMA.COLUMNS WHERE %s ORDER BY 1" query2="SELECT DISTINCT(table_name) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema='%s' ORDER BY 1" 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"/>
1335+
</search_column>
1336+
</dbms>
12671337
</root>

lib/controller/handler.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
from lib.core.settings import INFORMIX_ALIASES
2222
from lib.core.settings import MAXDB_ALIASES
2323
from lib.core.settings import MCKOI_ALIASES
24+
from lib.core.settings import MIMERSQL_ALIASES
2425
from lib.core.settings import MONETDB_ALIASES
2526
from lib.core.settings import MSSQL_ALIASES
2627
from lib.core.settings import MYSQL_ALIASES
@@ -52,6 +53,8 @@
5253
from plugins.dbms.maxdb import MaxDBMap
5354
from plugins.dbms.mckoi.connector import Connector as MckoiConn
5455
from plugins.dbms.mckoi import MckoiMap
56+
from plugins.dbms.mimersql.connector import Connector as MimerSQLConn
57+
from plugins.dbms.mimersql import MimerSQLMap
5558
from plugins.dbms.monetdb.connector import Connector as MonetDBConn
5659
from plugins.dbms.monetdb import MonetDBMap
5760
from plugins.dbms.mssqlserver.connector import Connector as MSSQLServerConn
@@ -97,6 +100,7 @@ def setHandler():
97100
(DBMS.MCKOI, MCKOI_ALIASES, MckoiMap, MckoiConn),
98101
(DBMS.PRESTO, PRESTO_ALIASES, PrestoMap, PrestoConn),
99102
(DBMS.ALTIBASE, ALTIBASE_ALIASES, AltibaseMap, AltibaseConn),
103+
(DBMS.MIMERSQL, MIMERSQL_ALIASES, MimerSQLMap, MimerSQLConn),
100104
]
101105

102106
_ = 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
@@ -659,7 +659,7 @@ def concatQuery(self, query, unpack=True):
659659
elif fieldsNoSelect:
660660
concatenatedQuery = "CONCAT('%s',%s,'%s')" % (kb.chars.start, concatenatedQuery, kb.chars.stop)
661661

662-
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):
662+
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):
663663
if fieldsExists:
664664
concatenatedQuery = concatenatedQuery.replace("SELECT ", "'%s'||" % kb.chars.start, 1)
665665
concatenatedQuery += "||'%s'" % kb.chars.stop
@@ -948,7 +948,7 @@ def limitQuery(self, num, query, field=None, uniqueField=None):
948948
fromFrom = limitedQuery[fromIndex + 1:]
949949
orderBy = None
950950

951-
if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.PGSQL, DBMS.SQLITE, DBMS.H2, DBMS.VERTICA, DBMS.PRESTO,):
951+
if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.PGSQL, DBMS.SQLITE, DBMS.H2, DBMS.VERTICA, DBMS.PRESTO, DBMS.MIMERSQL):
952952
limitStr = queries[Backend.getIdentifiedDbms()].limit.query % (num, 1)
953953
limitedQuery += " %s" % limitStr
954954

lib/core/common.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4074,7 +4074,7 @@ def safeSQLIdentificatorNaming(name, isTable=False):
40744074
retVal = "`%s`" % retVal
40754075
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.DB2, DBMS.HSQLDB, DBMS.H2, DBMS.INFORMIX, DBMS.MONETDB, DBMS.VERTICA, DBMS.MCKOI, DBMS.PRESTO):
40764076
retVal = "\"%s\"" % retVal
4077-
elif Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.ALTIBASE):
4077+
elif Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.ALTIBASE, DBMS.MIMERSQL):
40784078
retVal = "\"%s\"" % retVal.upper()
40794079
elif Backend.getIdentifiedDbms() in (DBMS.MSSQL, DBMS.SYBASE):
40804080
if isTable:
@@ -4112,7 +4112,7 @@ def unsafeSQLIdentificatorNaming(name):
41124112
retVal = name.replace("`", "")
41134113
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.DB2, DBMS.HSQLDB, DBMS.H2, DBMS.INFORMIX, DBMS.MONETDB, DBMS.VERTICA, DBMS.MCKOI, DBMS.PRESTO):
41144114
retVal = name.replace("\"", "")
4115-
elif Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.ALTIBASE):
4115+
elif Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.ALTIBASE, DBMS.MIMERSQL):
41164116
retVal = name.replace("\"", "").upper()
41174117
elif Backend.getIdentifiedDbms() in (DBMS.MSSQL, DBMS.SYBASE):
41184118
retVal = name.replace("[", "").replace("]", "")

lib/core/dicts.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from lib.core.settings import INFORMIX_ALIASES
2121
from lib.core.settings import MAXDB_ALIASES
2222
from lib.core.settings import MCKOI_ALIASES
23+
from lib.core.settings import MIMERSQL_ALIASES
2324
from lib.core.settings import MONETDB_ALIASES
2425
from lib.core.settings import MSSQL_ALIASES
2526
from lib.core.settings import MYSQL_ALIASES
@@ -210,6 +211,7 @@
210211
DBMS.MCKOI: (MCKOI_ALIASES, None, None, None),
211212
DBMS.PRESTO: (PRESTO_ALIASES, "presto-python-client", "https://github.com/prestodb/presto-python-client", None),
212213
DBMS.ALTIBASE: (ALTIBASE_ALIASES, None, None, None),
214+
DBMS.MIMERSQL: (MIMERSQL_ALIASES, "mimerpy", "https://github.com/mimersql/MimerPy", None),
213215
}
214216

215217
# Reference: https://blog.jooq.org/tag/sysibm-sysdummy1/
@@ -222,6 +224,7 @@
222224
DBMS.HSQLDB: " FROM INFORMATION_SCHEMA.SYSTEM_USERS",
223225
DBMS.INFORMIX: " FROM SYSMASTER:SYSDUAL",
224226
DBMS.DERBY: " FROM SYSIBM.SYSDUMMY1",
227+
DBMS.MIMERSQL: " FROM SYSTEM.ONEROW",
225228
}
226229

227230
HEURISTIC_NULL_EVAL = {
@@ -238,6 +241,7 @@
238241
DBMS.MCKOI: "TONUMBER(NULL)",
239242
DBMS.PRESTO: "FROM_HEX(NULL)",
240243
DBMS.ALTIBASE: "TDESENCRYPT(NULL,NULL)",
244+
DBMS.MIMERSQL: "ASCII_CHAR(256) IS NULL",
241245
}
242246

243247
SQL_STATEMENTS = {

lib/core/dump.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ def currentDb(self, data):
168168
self.string("current database (no practical usage on %s)" % Backend.getIdentifiedDbms(), data, content_type=CONTENT_TYPE.CURRENT_DB)
169169
elif Backend.getIdentifiedDbms() in (DBMS.ORACLE, DBMS.PGSQL, DBMS.HSQLDB, DBMS.H2, DBMS.MONETDB, DBMS.VERTICA):
170170
self.string("current schema (equivalent to database on %s)" % Backend.getIdentifiedDbms(), data, content_type=CONTENT_TYPE.CURRENT_DB)
171-
elif Backend.getIdentifiedDbms() in (DBMS.ALTIBASE,):
171+
elif Backend.getIdentifiedDbms() in (DBMS.ALTIBASE, DBMS.MIMERSQL):
172172
self.string("current user (equivalent to database on %s)" % Backend.getIdentifiedDbms(), data, content_type=CONTENT_TYPE.CURRENT_DB)
173173
else:
174174
self.string("current database", data, content_type=CONTENT_TYPE.CURRENT_DB)

lib/core/enums.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ class DBMS(object):
5151
MCKOI = "Mckoi"
5252
PRESTO = "Presto"
5353
ALTIBASE = "Altibase"
54+
MIMERSQL = "MimerSQL"
5455

5556
class DBMS_DIRECTORY_NAME(object):
5657
ACCESS = "access"
@@ -72,6 +73,7 @@ class DBMS_DIRECTORY_NAME(object):
7273
MCKOI = "mckoi"
7374
PRESTO = "presto"
7475
ALTIBASE = "altibase"
76+
MIMERSQL = "mimersql"
7577

7678
class FORK(object):
7779
MARIADB = "MariaDB"

lib/core/settings.py

Lines changed: 3 additions & 1 deletion
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.61"
21+
VERSION = "1.4.1.62"
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)
@@ -265,6 +265,7 @@
265265
MCKOI_SYSTEM_DBS = ("",)
266266
PRESTO_SYSTEM_DBS = ("information_schema",)
267267
ALTIBASE_SYSTEM_DBS = ("SYSTEM_",)
268+
MIMERSQL_SYSTEM_DBS = ("information_schema", "SYSTEM",)
268269

269270
# Note: (<regular>) + (<forks>)
270271
MSSQL_ALIASES = ("microsoft sql server", "mssqlserver", "mssql", "ms")
@@ -286,6 +287,7 @@
286287
MCKOI_ALIASES = ("mckoi",)
287288
PRESTO_ALIASES = ("presto",)
288289
ALTIBASE_ALIASES = ("altibase",)
290+
MIMERSQL_ALIASES = ("mimersql", "mimer")
289291

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

lib/request/inject.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -496,7 +496,7 @@ def getValue(expression, blind=True, union=True, error=True, time=True, fromUser
496496
if not any((kb.testMode, conf.dummy, conf.offline)) and value is None and Backend.getDbms() and conf.dbmsHandler and not conf.noCast and not conf.hexConvert:
497497
warnMsg = "in case of continuous data retrieval problems you are advised to try "
498498
warnMsg += "a switch '--no-cast' "
499-
warnMsg += "or switch '--hex'" if Backend.getIdentifiedDbms() not in (DBMS.ACCESS, DBMS.FIREBIRD, DBMS.MONETDB, DBMS.MCKOI) else ""
499+
warnMsg += "or switch '--hex'" if Backend.getIdentifiedDbms() not in (DBMS.ACCESS, DBMS.FIREBIRD, DBMS.MONETDB, DBMS.MCKOI, DBMS.MIMERSQL) else ""
500500
singleTimeWarnMessage(warnMsg)
501501

502502
# Dirty patch (safe-encoded unicode characters)

0 commit comments

Comments
 (0)