diff --git a/lib/controller/action.py b/lib/controller/action.py index 9788b670d..f385a0103 100644 --- a/lib/controller/action.py +++ b/lib/controller/action.py @@ -118,6 +118,9 @@ def action(): if conf.sqlShell: conf.dbmsHandler.sqlShell() + if conf.sqlFile: + conf.dbmsHandler.sqlFile() + # User-defined function options if conf.udfInject: conf.dbmsHandler.udfInjectCustom() diff --git a/lib/core/optiondict.py b/lib/core/optiondict.py index 68a3fdad7..854c22336 100644 --- a/lib/core/optiondict.py +++ b/lib/core/optiondict.py @@ -119,7 +119,8 @@ optDict = { "firstChar": "integer", "lastChar": "integer", "query": "string", - "sqlShell": "boolean" + "sqlShell": "boolean", + "sqlFile": "string" }, "Brute": { diff --git a/lib/parse/cmdline.py b/lib/parse/cmdline.py index cec3f6ffa..4d5d7fc33 100644 --- a/lib/parse/cmdline.py +++ b/lib/parse/cmdline.py @@ -383,6 +383,9 @@ def cmdLineParser(): action="store_true", help="Prompt for an interactive SQL shell") + enumeration.add_option("--sql-file", dest="sqlFile", + help="Execute SQL statements from given file(s)") + # User-defined function options brute = OptionGroup(parser, "Brute force", "These " "options can be used to run brute force " diff --git a/plugins/generic/enumeration.py b/plugins/generic/enumeration.py index c1cd0a766..ff3409787 100644 --- a/plugins/generic/enumeration.py +++ b/plugins/generic/enumeration.py @@ -16,6 +16,7 @@ from lib.core.common import clearConsoleLine from lib.core.common import dataToStdout from lib.core.common import filterPairValues from lib.core.common import getLimitRange +from lib.core.common import getSQLSnippet from lib.core.common import getUnicode from lib.core.common import isInferenceAvailable from lib.core.common import isListLike @@ -2463,3 +2464,16 @@ class Enumeration: elif output != "Quit": dataToStdout("No output\n") + + def sqlFile(self): + infoMsg = "executing SQL statements from given file(s)" + logger.info(infoMsg) + + for sfile in re.split(PARAMETER_SPLITTING_REGEX, conf.sqlFile): + found = False + sfile = sfile.strip() + + if not sfile: + continue + + self.sqlQuery(getSQLSnippet(Backend.getDbms(), sfile)) diff --git a/sqlmap.conf b/sqlmap.conf index 768a349d8..c3d89311a 100644 --- a/sqlmap.conf +++ b/sqlmap.conf @@ -432,6 +432,9 @@ query = # Valid: True or False sqlShell = False +# Execute SQL statements from given file(s). +sqlFile = + # These options can be used to run brute force checks. [Brute force]