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

Skip to content

Commit d5fab19

Browse files
committed
Adding support for Presto
1 parent ec4880e commit d5fab19

18 files changed

Lines changed: 496 additions & 51 deletions

File tree

data/xml/errors.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,4 +202,12 @@
202202
<error regexp="com\.mckoi\.JDBCDriver"/>
203203
<error regexp="com\.mckoi\.database\.jdbc"/>
204204
</dbms>
205+
206+
<!-- Presto -->
207+
<dbms value="Presto">
208+
<error regexp="com\.facebook\.presto\.jdbc"/>
209+
<error regexp="io\.prestosql\.jdbc"/>
210+
<error regexp="com\.simba\.presto\.jdbc"/>
211+
<error regexp="UNION query has different number of fields: \d+, \d+"/>
212+
</dbms>
205213
</root>

data/xml/queries.xml

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1130,4 +1130,66 @@
11301130
<search_table/>
11311131
<search_column/>
11321132
</dbms>
1133+
1134+
<!-- Presto -->
1135+
<dbms value="Presto">
1136+
<cast query="CAST(%s AS VARCHAR(4000))"/>
1137+
<length query="LENGTH(%s)"/>
1138+
<isnull query="COALESCE(%s,' ')"/>
1139+
<delimiter query="||"/>
1140+
<limit query="OFFSET %d LIMIT %d"/>
1141+
<limitregexp query="\s+OFFSET\s+([\d]+)\s+LIMIT\s+([\d]+)" query2="\s+LIMIT\s+([\d]+)"/>
1142+
<limitgroupstart query="1"/>
1143+
<limitgroupstop query="2"/>
1144+
<limitstring query=" OFFSET "/>
1145+
<order query="ORDER BY %s ASC"/>
1146+
<count query="COUNT(%s)"/>
1147+
<comment query="--"/>
1148+
<substring query="SUBSTR(%s,%d,%d)"/>
1149+
<concatenate query="%s||%s"/>
1150+
<case query="SELECT (CASE WHEN (%s) THEN '1' ELSE '0' END)"/>
1151+
<hex query="TO_HEX(%s)"/>
1152+
<inference query="CODEPOINT(SUBSTR((%s),%d,1))>%d" dbms_version="&gt;=0.178" query2="SUBSTR((%s),%d,1)>'%c'"/>/>
1153+
<banner/>
1154+
<current_user query="CURRENT_USER"/>
1155+
<current_db/>
1156+
<hostname/>
1157+
<table_comment query="SELECT table_comment FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='%s' AND table_name='%s'"/>
1158+
<column_comment query="SELECT column_comment FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema='%s' AND table_name='%s' AND column_name='%s'"/>
1159+
<is_dba/>
1160+
<check_udf/>
1161+
<users/>
1162+
<passwords/>
1163+
<privileges/>
1164+
<roles/>
1165+
<statements/>
1166+
<dbs>
1167+
<inband query="SELECT schema_name FROM INFORMATION_SCHEMA.SCHEMATA"/>
1168+
<blind query="SELECT DISTINCT(schema_name) FROM INFORMATION_SCHEMA.SCHEMATA ORDER BY 1 OFFSET %d LIMIT 1" count="SELECT COUNT(DISTINCT(schema_name)) FROM INFORMATION_SCHEMA.SCHEMATA"/>
1169+
</dbs>
1170+
<tables>
1171+
<inband query="SELECT table_schema,table_name FROM INFORMATION_SCHEMA.TABLES" condition="table_schema"/>
1172+
<blind query="SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='%s' OFFSET %d LIMIT 1" count="SELECT COUNT(table_name) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='%s'"/>
1173+
</tables>
1174+
<columns>
1175+
<inband query="SELECT column_name,data_type FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name='%s' AND table_schema='%s'" condition="column_name"/>
1176+
<blind query="SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name='%s' AND table_schema='%s'" 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"/>
1177+
</columns>
1178+
<dump_table>
1179+
<inband query="SELECT %s FROM %s.%s ORDER BY %s"/>
1180+
<blind query="SELECT %s FROM %s.%s ORDER BY %s OFFSET %d LIMIT 1" count="SELECT COUNT(*) FROM %s.%s"/>
1181+
</dump_table>
1182+
<search_db>
1183+
<inband query="SELECT schema_name FROM INFORMATION_SCHEMA.SCHEMATA WHERE %s" condition="schema_name"/>
1184+
<blind query="SELECT DISTINCT(schema_name) FROM INFORMATION_SCHEMA.SCHEMATA WHERE %s" count="SELECT COUNT(DISTINCT(schema_name)) FROM INFORMATION_SCHEMA.SCHEMATA WHERE %s" condition="schema_name"/>
1185+
</search_db>
1186+
<search_table>
1187+
<inband query="SELECT table_schema,table_name FROM INFORMATION_SCHEMA.TABLES WHERE %s" condition="table_name" condition2="table_schema"/>
1188+
<blind query="SELECT DISTINCT(table_schema) FROM INFORMATION_SCHEMA.TABLES WHERE %s" query2="SELECT DISTINCT(table_name) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='%s'" 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"/>
1189+
</search_table>
1190+
<search_column>
1191+
<inband query="SELECT table_schema,table_name FROM INFORMATION_SCHEMA.COLUMNS WHERE %s" condition="column_name" condition2="table_schema" condition3="table_name"/>
1192+
<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"/>
1193+
</search_column>
1194+
</dbms>
11331195
</root>

lib/controller/handler.py

Lines changed: 39 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -11,59 +11,62 @@
1111
from lib.core.dicts import DBMS_DICT
1212
from lib.core.enums import DBMS
1313
from lib.core.exception import SqlmapConnectionException
14+
from lib.core.settings import ACCESS_ALIASES
15+
from lib.core.settings import DB2_ALIASES
16+
from lib.core.settings import DERBY_ALIASES
17+
from lib.core.settings import FIREBIRD_ALIASES
18+
from lib.core.settings import H2_ALIASES
19+
from lib.core.settings import HSQLDB_ALIASES
20+
from lib.core.settings import INFORMIX_ALIASES
21+
from lib.core.settings import MAXDB_ALIASES
1422
from lib.core.settings import MCKOI_ALIASES
23+
from lib.core.settings import MONETDB_ALIASES
1524
from lib.core.settings import MSSQL_ALIASES
1625
from lib.core.settings import MYSQL_ALIASES
1726
from lib.core.settings import ORACLE_ALIASES
1827
from lib.core.settings import PGSQL_ALIASES
28+
from lib.core.settings import PRESTO_ALIASES
1929
from lib.core.settings import SQLITE_ALIASES
20-
from lib.core.settings import ACCESS_ALIASES
21-
from lib.core.settings import FIREBIRD_ALIASES
22-
from lib.core.settings import MAXDB_ALIASES
2330
from lib.core.settings import SYBASE_ALIASES
24-
from lib.core.settings import DB2_ALIASES
25-
from lib.core.settings import HSQLDB_ALIASES
26-
from lib.core.settings import H2_ALIASES
27-
from lib.core.settings import INFORMIX_ALIASES
28-
from lib.core.settings import MONETDB_ALIASES
29-
from lib.core.settings import DERBY_ALIASES
3031
from lib.core.settings import VERTICA_ALIASES
3132
from lib.utils.sqlalchemy import SQLAlchemy
3233

33-
from plugins.dbms.mckoi import MckoiMap
34+
from plugins.dbms.access.connector import Connector as AccessConn
35+
from plugins.dbms.access import AccessMap
36+
from plugins.dbms.db2.connector import Connector as DB2Conn
37+
from plugins.dbms.db2 import DB2Map
38+
from plugins.dbms.derby.connector import Connector as DerbyConn
39+
from plugins.dbms.derby import DerbyMap
40+
from plugins.dbms.firebird.connector import Connector as FirebirdConn
41+
from plugins.dbms.firebird import FirebirdMap
42+
from plugins.dbms.h2.connector import Connector as H2Conn
43+
from plugins.dbms.h2 import H2Map
44+
from plugins.dbms.hsqldb.connector import Connector as HSQLDBConn
45+
from plugins.dbms.hsqldb import HSQLDBMap
46+
from plugins.dbms.informix.connector import Connector as InformixConn
47+
from plugins.dbms.informix import InformixMap
48+
from plugins.dbms.maxdb.connector import Connector as MaxDBConn
49+
from plugins.dbms.maxdb import MaxDBMap
3450
from plugins.dbms.mckoi.connector import Connector as MckoiConn
35-
from plugins.dbms.mssqlserver import MSSQLServerMap
51+
from plugins.dbms.mckoi import MckoiMap
52+
from plugins.dbms.monetdb.connector import Connector as MonetDBConn
53+
from plugins.dbms.monetdb import MonetDBMap
3654
from plugins.dbms.mssqlserver.connector import Connector as MSSQLServerConn
37-
from plugins.dbms.mysql import MySQLMap
55+
from plugins.dbms.mssqlserver import MSSQLServerMap
3856
from plugins.dbms.mysql.connector import Connector as MySQLConn
39-
from plugins.dbms.oracle import OracleMap
57+
from plugins.dbms.mysql import MySQLMap
4058
from plugins.dbms.oracle.connector import Connector as OracleConn
41-
from plugins.dbms.postgresql import PostgreSQLMap
59+
from plugins.dbms.oracle import OracleMap
4260
from plugins.dbms.postgresql.connector import Connector as PostgreSQLConn
43-
from plugins.dbms.sqlite import SQLiteMap
61+
from plugins.dbms.postgresql import PostgreSQLMap
62+
from plugins.dbms.presto.connector import Connector as PrestoConn
63+
from plugins.dbms.presto import PrestoMap
4464
from plugins.dbms.sqlite.connector import Connector as SQLiteConn
45-
from plugins.dbms.access import AccessMap
46-
from plugins.dbms.access.connector import Connector as AccessConn
47-
from plugins.dbms.firebird import FirebirdMap
48-
from plugins.dbms.firebird.connector import Connector as FirebirdConn
49-
from plugins.dbms.maxdb import MaxDBMap
50-
from plugins.dbms.maxdb.connector import Connector as MaxDBConn
51-
from plugins.dbms.sybase import SybaseMap
65+
from plugins.dbms.sqlite import SQLiteMap
5266
from plugins.dbms.sybase.connector import Connector as SybaseConn
53-
from plugins.dbms.db2 import DB2Map
54-
from plugins.dbms.db2.connector import Connector as DB2Conn
55-
from plugins.dbms.hsqldb import HSQLDBMap
56-
from plugins.dbms.hsqldb.connector import Connector as HSQLDBConn
57-
from plugins.dbms.h2 import H2Map
58-
from plugins.dbms.h2.connector import Connector as H2Conn
59-
from plugins.dbms.informix import InformixMap
60-
from plugins.dbms.informix.connector import Connector as InformixConn
61-
from plugins.dbms.monetdb import MonetDBMap
62-
from plugins.dbms.monetdb.connector import Connector as MonetDBConn
63-
from plugins.dbms.derby import DerbyMap
64-
from plugins.dbms.derby.connector import Connector as DerbyConn
65-
from plugins.dbms.vertica import VerticaMap
67+
from plugins.dbms.sybase import SybaseMap
6668
from plugins.dbms.vertica.connector import Connector as VerticaConn
69+
from plugins.dbms.vertica import VerticaMap
6770

6871
def setHandler():
6972
"""
@@ -89,6 +92,7 @@ def setHandler():
8992
(DBMS.DERBY, DERBY_ALIASES, DerbyMap, DerbyConn),
9093
(DBMS.VERTICA, VERTICA_ALIASES, VerticaMap, VerticaConn),
9194
(DBMS.MCKOI, MCKOI_ALIASES, MckoiMap, MckoiConn),
95+
(DBMS.PRESTO, PRESTO_ALIASES, PrestoMap, PrestoConn),
9296
]
9397

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

660-
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):
660+
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):
661661
if fieldsExists:
662662
concatenatedQuery = concatenatedQuery.replace("SELECT ", "'%s'||" % kb.chars.start, 1)
663663
concatenatedQuery += "||'%s'" % kb.chars.stop
@@ -946,7 +946,7 @@ def limitQuery(self, num, query, field=None, uniqueField=None):
946946
fromFrom = limitedQuery[fromIndex + 1:]
947947
orderBy = None
948948

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

lib/core/common.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1461,7 +1461,7 @@ def parseTargetDirect():
14611461
remote = False
14621462

14631463
for dbms in SUPPORTED_DBMS:
1464-
details = re.search(r"^(?P<dbms>%s)://(?P<credentials>(?P<user>.+?)\:(?P<pass>.*)\@)?(?P<remote>(?P<hostname>[\w.-]+?)\:(?P<port>[\d]+)\/)?(?P<db>[\w\d\ \:\.\_\-\/\\]+?)$" % dbms, conf.direct, re.I)
1464+
details = re.search(r"^(?P<dbms>%s)://(?P<credentials>(?P<user>.*?)\:(?P<pass>.*)\@)?(?P<remote>(?P<hostname>[\w.-]+?)\:(?P<port>[\d]+)\/)?(?P<db>[\w\d\ \:\.\_\-\/\\]+?)$" % dbms, conf.direct, re.I)
14651465

14661466
if details:
14671467
conf.dbms = details.group("dbms")
@@ -4069,7 +4069,7 @@ def safeSQLIdentificatorNaming(name, isTable=False):
40694069

40704070
if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.ACCESS, DBMS.SQLITE): # Note: in SQLite double-quotes are treated as string if column/identifier is non-existent (e.g. SELECT "foobar" FROM users)
40714071
retVal = "`%s`" % retVal
4072-
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.DB2, DBMS.HSQLDB, DBMS.H2, DBMS.INFORMIX, DBMS.MONETDB, DBMS.VERTICA, DBMS.MCKOI):
4072+
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.DB2, DBMS.HSQLDB, DBMS.H2, DBMS.INFORMIX, DBMS.MONETDB, DBMS.VERTICA, DBMS.MCKOI, DBMS.PRESTO):
40734073
retVal = "\"%s\"" % retVal
40744074
elif Backend.getIdentifiedDbms() in (DBMS.ORACLE,):
40754075
retVal = "\"%s\"" % retVal.upper()
@@ -4107,7 +4107,7 @@ def unsafeSQLIdentificatorNaming(name):
41074107
if isinstance(name, six.string_types):
41084108
if Backend.getIdentifiedDbms() in (DBMS.MYSQL, DBMS.ACCESS, DBMS.SQLITE):
41094109
retVal = name.replace("`", "")
4110-
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.DB2, DBMS.INFORMIX, DBMS.HSQLDB, DBMS.MONETDB, DBMS.VERTICA, DBMS.MCKOI):
4110+
elif Backend.getIdentifiedDbms() in (DBMS.PGSQL, DBMS.DB2, DBMS.INFORMIX, DBMS.HSQLDB, DBMS.MONETDB, DBMS.VERTICA, DBMS.MCKOI, DBMS.PRESTO):
41114111
retVal = name.replace("\"", "")
41124112
elif Backend.getIdentifiedDbms() in (DBMS.ORACLE,):
41134113
retVal = name.replace("\"", "").upper()

lib/core/dicts.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
from lib.core.settings import NULL
2626
from lib.core.settings import ORACLE_ALIASES
2727
from lib.core.settings import PGSQL_ALIASES
28+
from lib.core.settings import PRESTO_ALIASES
2829
from lib.core.settings import SQLITE_ALIASES
2930
from lib.core.settings import SYBASE_ALIASES
3031
from lib.core.settings import VERTICA_ALIASES
@@ -206,6 +207,7 @@
206207
DBMS.DERBY: (DERBY_ALIASES, "pydrda", "https://github.com/nakagami/pydrda/", None),
207208
DBMS.VERTICA: (VERTICA_ALIASES, "vertica-python", "https://github.com/vertica/vertica-python", "vertica+vertica_python"),
208209
DBMS.MCKOI: (MCKOI_ALIASES, None, None, None),
210+
DBMS.PRESTO: (PRESTO_ALIASES, "presto-python-client", "https://github.com/prestodb/presto-python-client", None),
209211
}
210212

211213
# Reference: https://blog.jooq.org/tag/sysibm-sysdummy1/

lib/core/enums.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ class DBMS(object):
4949
DERBY = "Apache Derby"
5050
VERTICA = "Vertica"
5151
MCKOI = "Mckoi"
52+
PRESTO = "Presto"
5253

5354
class DBMS_DIRECTORY_NAME(object):
5455
ACCESS = "access"
@@ -68,6 +69,7 @@ class DBMS_DIRECTORY_NAME(object):
6869
DERBY = "derby"
6970
VERTICA = "vertica"
7071
MCKOI = "mckoi"
72+
PRESTO = "presto"
7173

7274
class FORK(object):
7375
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.1.42"
21+
VERSION = "1.4.1.43"
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)
@@ -263,6 +263,7 @@
263263
DERBY_SYSTEM_DBS = ("NULLID", "SQLJ", "SYS", "SYSCAT", "SYSCS_DIAG", "SYSCS_UTIL", "SYSFUN", "SYSIBM", "SYSPROC", "SYSSTAT")
264264
VERTICA_SYSTEM_DBS = ("v_catalog", "v_internal", "v_monitor",)
265265
MCKOI_SYSTEM_DBS = ("",)
266+
PRESTO_SYSTEM_DBS = ("information_schema",)
266267

267268
MSSQL_ALIASES = ("microsoft sql server", "mssqlserver", "mssql", "ms")
268269
MYSQL_ALIASES = ("mysql", "my") + ("mariadb", "maria", "memsql")
@@ -281,15 +282,16 @@
281282
DERBY_ALIASES = ("derby", "apache derby",)
282283
VERTICA_ALIASES = ("vertica",)
283284
MCKOI_ALIASES = ("mckoi",)
285+
PRESTO_ALIASES = ("presto",)
284286

285287
UPPER_CASE_IDENTIFIERS = set((DBMS.ORACLE, DBMS.DB2, DBMS.FIREBIRD, DBMS.HSQLDB, DBMS.MAXDB, DBMS.H2, DBMS.DERBY))
286288

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

289-
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
291+
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
290292
SUPPORTED_OS = ("linux", "windows")
291293

292-
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))
294+
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))
293295

294296
USER_AGENT_ALIASES = ("ua", "useragent", "user-agent")
295297
REFERER_ALIASES = ("ref", "referer", "referrer")

lib/utils/deps.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ def checkDependencies():
5252
__import__("drda")
5353
elif dbmsName == DBMS.VERTICA:
5454
__import__("vertica_python")
55+
elif dbmsName == DBMS.PRESTO:
56+
__import__("prestodb")
5557
except:
5658
warnMsg = "sqlmap requires '%s' third-party library " % data[1]
5759
warnMsg += "in order to directly connect to the DBMS "

plugins/dbms/presto/__init__.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
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 PRESTO_SYSTEM_DBS
10+
from lib.core.unescaper import unescaper
11+
12+
from plugins.dbms.presto.enumeration import Enumeration
13+
from plugins.dbms.presto.filesystem import Filesystem
14+
from plugins.dbms.presto.fingerprint import Fingerprint
15+
from plugins.dbms.presto.syntax import Syntax
16+
from plugins.dbms.presto.takeover import Takeover
17+
from plugins.generic.misc import Miscellaneous
18+
19+
class PrestoMap(Syntax, Fingerprint, Enumeration, Filesystem, Miscellaneous, Takeover):
20+
"""
21+
This class defines Presto methods
22+
"""
23+
24+
def __init__(self):
25+
self.excludeDbsList = PRESTO_SYSTEM_DBS
26+
27+
for cls in self.__class__.__bases__:
28+
cls.__init__(self)
29+
30+
unescaper[DBMS.PRESTO] = Syntax.escape

0 commit comments

Comments
 (0)