mirror of
https://github.com/sqlmapproject/sqlmap.git
synced 2025-01-24 08:14:24 +03:00
refactoring for issue #51
This commit is contained in:
parent
25eca9d671
commit
d3da3f5c52
|
@ -11,7 +11,7 @@ from xml.etree import ElementTree as ET
|
||||||
|
|
||||||
from lib.core.common import Backend
|
from lib.core.common import Backend
|
||||||
from lib.core.common import extractRegexResult
|
from lib.core.common import extractRegexResult
|
||||||
from lib.core.common import getSPQLSnippet
|
from lib.core.common import getSQLSnippet
|
||||||
from lib.core.common import isDBMSVersionAtLeast
|
from lib.core.common import isDBMSVersionAtLeast
|
||||||
from lib.core.common import isTechniqueAvailable
|
from lib.core.common import isTechniqueAvailable
|
||||||
from lib.core.common import randomInt
|
from lib.core.common import randomInt
|
||||||
|
@ -820,7 +820,7 @@ class Agent:
|
||||||
|
|
||||||
def runAsDBMSUser(self, query):
|
def runAsDBMSUser(self, query):
|
||||||
if conf.dCred and "Ad Hoc Distributed Queries" not in query:
|
if conf.dCred and "Ad Hoc Distributed Queries" not in query:
|
||||||
query = getSPQLSnippet(DBMS.MSSQL, "run_statement_as_user", USER=conf.dbmsUsername, PASSWORD=conf.dbmsPassword, STATEMENT=query.replace("'", "''"))
|
query = getSQLSnippet(DBMS.MSSQL, "run_statement_as_user", USER=conf.dbmsUsername, PASSWORD=conf.dbmsPassword, STATEMENT=query.replace("'", "''"))
|
||||||
|
|
||||||
return query
|
return query
|
||||||
|
|
||||||
|
|
|
@ -1543,15 +1543,15 @@ def parseXmlFile(xmlFile, handler):
|
||||||
with contextlib.closing(StringIO(readCachedFileContent(xmlFile))) as stream:
|
with contextlib.closing(StringIO(readCachedFileContent(xmlFile))) as stream:
|
||||||
parse(stream, handler)
|
parse(stream, handler)
|
||||||
|
|
||||||
def getSPQLSnippet(dbms, name, **variables):
|
def getSQLSnippet(dbms, sfile, **variables):
|
||||||
"""
|
"""
|
||||||
Returns content of SP(Q)L snippet located inside "procs" directory
|
Returns content of SQL snippet located inside 'procs/' directory
|
||||||
"""
|
"""
|
||||||
|
|
||||||
filename = os.path.join(paths.SQLMAP_PROCS_PATH, DBMS_DIRECTORY_DICT[dbms], "%s.txt" % name)
|
filename = os.path.join(paths.SQLMAP_PROCS_PATH, DBMS_DIRECTORY_DICT[dbms], sfile if sfile.endswith('.sql') else "%s.sql" % sfile)
|
||||||
checkFile(filename)
|
checkFile(filename)
|
||||||
retVal = readCachedFileContent(filename)
|
|
||||||
|
|
||||||
|
retVal = readCachedFileContent(filename)
|
||||||
retVal = re.sub(r"#.+", "", retVal)
|
retVal = re.sub(r"#.+", "", retVal)
|
||||||
retVal = re.sub(r"(?s);\s+", "; ", retVal).strip()
|
retVal = re.sub(r"(?s);\s+", "; ", retVal).strip()
|
||||||
|
|
||||||
|
@ -1565,8 +1565,9 @@ def getSPQLSnippet(dbms, name, **variables):
|
||||||
retVal = retVal.replace(_, randomInt())
|
retVal = retVal.replace(_, randomInt())
|
||||||
|
|
||||||
_ = re.search(r"%(\w+)%", retVal, re.I)
|
_ = re.search(r"%(\w+)%", retVal, re.I)
|
||||||
|
|
||||||
if _:
|
if _:
|
||||||
errMsg = "unresolved variable '%s' in SPL snippet '%s'" % (_.group(1), name)
|
errMsg = "unresolved variable '%s' in SQL file '%s'" % (_.group(1), sfile)
|
||||||
raise sqlmapGenericException, errMsg
|
raise sqlmapGenericException, errMsg
|
||||||
|
|
||||||
return retVal
|
return retVal
|
||||||
|
|
|
@ -8,7 +8,7 @@ See the file 'doc/COPYING' for copying permission
|
||||||
from extra.safe2bin.safe2bin import safechardecode
|
from extra.safe2bin.safe2bin import safechardecode
|
||||||
from lib.core.common import dataToStdout
|
from lib.core.common import dataToStdout
|
||||||
from lib.core.common import Backend
|
from lib.core.common import Backend
|
||||||
from lib.core.common import getSPQLSnippet
|
from lib.core.common import getSQLSnippet
|
||||||
from lib.core.common import isTechniqueAvailable
|
from lib.core.common import isTechniqueAvailable
|
||||||
from lib.core.common import readInput
|
from lib.core.common import readInput
|
||||||
from lib.core.data import conf
|
from lib.core.data import conf
|
||||||
|
@ -163,12 +163,12 @@ class Abstraction(Web, UDF, xp_cmdshell):
|
||||||
choice = readInput(msg, default="Y")
|
choice = readInput(msg, default="Y")
|
||||||
|
|
||||||
if not choice or choice in ("y", "Y"):
|
if not choice or choice in ("y", "Y"):
|
||||||
expression = getSPQLSnippet(DBMS.MSSQL, "configure_openrowset", ENABLE="1")
|
expression = getSQLSnippet(DBMS.MSSQL, "configure_openrowset", ENABLE="1")
|
||||||
inject.goStacked(expression)
|
inject.goStacked(expression)
|
||||||
|
|
||||||
# TODO: add support for PostgreSQL
|
# TODO: add support for PostgreSQL
|
||||||
#elif Backend.isDbms(DBMS.PGSQL):
|
#elif Backend.isDbms(DBMS.PGSQL):
|
||||||
# expression = getSPQLSnippet(DBMS.PGSQL, "configure_dblink", ENABLE="1")
|
# expression = getSQLSnippet(DBMS.PGSQL, "configure_dblink", ENABLE="1")
|
||||||
# inject.goStacked(expression)
|
# inject.goStacked(expression)
|
||||||
|
|
||||||
def initEnv(self, mandatory=True, detailed=False, web=False):
|
def initEnv(self, mandatory=True, detailed=False, web=False):
|
||||||
|
|
|
@ -8,7 +8,7 @@ See the file 'doc/COPYING' for copying permission
|
||||||
from lib.core.agent import agent
|
from lib.core.agent import agent
|
||||||
from lib.core.common import Backend
|
from lib.core.common import Backend
|
||||||
from lib.core.common import getLimitRange
|
from lib.core.common import getLimitRange
|
||||||
from lib.core.common import getSPQLSnippet
|
from lib.core.common import getSQLSnippet
|
||||||
from lib.core.common import hashDBWrite
|
from lib.core.common import hashDBWrite
|
||||||
from lib.core.common import isListLike
|
from lib.core.common import isListLike
|
||||||
from lib.core.common import isNoneValue
|
from lib.core.common import isNoneValue
|
||||||
|
@ -48,14 +48,14 @@ class xp_cmdshell:
|
||||||
if Backend.isVersionWithin(("2005", "2008")):
|
if Backend.isVersionWithin(("2005", "2008")):
|
||||||
logger.debug("activating sp_OACreate")
|
logger.debug("activating sp_OACreate")
|
||||||
|
|
||||||
cmd = getSPQLSnippet(DBMS.MSSQL, "activate_sp_oacreate")
|
cmd = getSQLSnippet(DBMS.MSSQL, "activate_sp_oacreate")
|
||||||
inject.goStacked(agent.runAsDBMSUser(cmd))
|
inject.goStacked(agent.runAsDBMSUser(cmd))
|
||||||
|
|
||||||
self.__randStr = randomStr(lowercase=True)
|
self.__randStr = randomStr(lowercase=True)
|
||||||
self.__xpCmdshellNew = "xp_%s" % randomStr(lowercase=True)
|
self.__xpCmdshellNew = "xp_%s" % randomStr(lowercase=True)
|
||||||
self.xpCmdshellStr = "master..%s" % self.__xpCmdshellNew
|
self.xpCmdshellStr = "master..%s" % self.__xpCmdshellNew
|
||||||
|
|
||||||
cmd = getSPQLSnippet(DBMS.MSSQL, "create_new_xp_cmdshell", RANDSTR=self.__randStr, XP_CMDSHELL_NEW=self.__xpCmdshellNew)
|
cmd = getSQLSnippet(DBMS.MSSQL, "create_new_xp_cmdshell", RANDSTR=self.__randStr, XP_CMDSHELL_NEW=self.__xpCmdshellNew)
|
||||||
|
|
||||||
if Backend.isVersionWithin(("2005", "2008")):
|
if Backend.isVersionWithin(("2005", "2008")):
|
||||||
cmd += ";RECONFIGURE WITH OVERRIDE"
|
cmd += ";RECONFIGURE WITH OVERRIDE"
|
||||||
|
@ -67,7 +67,7 @@ class xp_cmdshell:
|
||||||
debugMsg += "stored procedure"
|
debugMsg += "stored procedure"
|
||||||
logger.debug(debugMsg)
|
logger.debug(debugMsg)
|
||||||
|
|
||||||
cmd = getSPQLSnippet(DBMS.MSSQL, "configure_xp_cmdshell", ENABLE=str(mode))
|
cmd = getSQLSnippet(DBMS.MSSQL, "configure_xp_cmdshell", ENABLE=str(mode))
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
|
|
||||||
|
@ -77,9 +77,9 @@ class xp_cmdshell:
|
||||||
logger.debug(debugMsg)
|
logger.debug(debugMsg)
|
||||||
|
|
||||||
if mode == 1:
|
if mode == 1:
|
||||||
cmd = getSPQLSnippet(DBMS.MSSQL, "enable_xp_cmdshell_2000", ENABLE=str(mode))
|
cmd = getSQLSnippet(DBMS.MSSQL, "enable_xp_cmdshell_2000", ENABLE=str(mode))
|
||||||
else:
|
else:
|
||||||
cmd = getSPQLSnippet(DBMS.MSSQL, "disable_xp_cmdshell_2000", ENABLE=str(mode))
|
cmd = getSQLSnippet(DBMS.MSSQL, "disable_xp_cmdshell_2000", ENABLE=str(mode))
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ from lib.core.common import calculateDeltaSeconds
|
||||||
from lib.core.common import dataToStdout
|
from lib.core.common import dataToStdout
|
||||||
from lib.core.common import decodeHexValue
|
from lib.core.common import decodeHexValue
|
||||||
from lib.core.common import extractRegexResult
|
from lib.core.common import extractRegexResult
|
||||||
from lib.core.common import getSPQLSnippet
|
from lib.core.common import getSQLSnippet
|
||||||
from lib.core.common import hashDBRetrieve
|
from lib.core.common import hashDBRetrieve
|
||||||
from lib.core.common import hashDBWrite
|
from lib.core.common import hashDBWrite
|
||||||
from lib.core.common import randomInt
|
from lib.core.common import randomInt
|
||||||
|
@ -67,7 +67,7 @@ def dnsUse(payload, expression):
|
||||||
nulledCastedField = agent.hexConvertField(nulledCastedField)
|
nulledCastedField = agent.hexConvertField(nulledCastedField)
|
||||||
expressionReplaced = expression.replace(fieldToCastStr, nulledCastedField, 1)
|
expressionReplaced = expression.replace(fieldToCastStr, nulledCastedField, 1)
|
||||||
|
|
||||||
expressionRequest = getSPQLSnippet(Backend.getIdentifiedDbms(), "dns_request", PREFIX=prefix, QUERY=expressionReplaced, SUFFIX=suffix, DOMAIN=conf.dName)
|
expressionRequest = getSQLSnippet(Backend.getIdentifiedDbms(), "dns_request", PREFIX=prefix, QUERY=expressionReplaced, SUFFIX=suffix, DOMAIN=conf.dName)
|
||||||
expressionUnescaped = unescaper.unescape(expressionRequest)
|
expressionUnescaped = unescaper.unescape(expressionRequest)
|
||||||
|
|
||||||
if Backend.getIdentifiedDbms() in (DBMS.MSSQL, DBMS.PGSQL):
|
if Backend.getIdentifiedDbms() in (DBMS.MSSQL, DBMS.PGSQL):
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
Files in this folder represent SPL/SQL snippets used by sqlmap on the target
|
Files in this folder represent SQL snippets used by sqlmap on the target
|
||||||
system. They are licensed under the terms of the GNU Lesser General Public
|
system.
|
||||||
License.
|
They are licensed under the terms of the GNU Lesser General Public License
|
||||||
|
where not specified otherwise.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user