diff --git a/lib/takeover/abstraction.py b/lib/takeover/abstraction.py index ba1491019..fd8c7b6aa 100644 --- a/lib/takeover/abstraction.py +++ b/lib/takeover/abstraction.py @@ -46,18 +46,6 @@ class Abstraction(Web, UDF, xp_cmdshell): Web.__init__(self) xp_cmdshell.__init__(self) - def __cmdShellCleanup(self): - if not conf.cleanup: - if kb.dbms in ( "MySQL", "PostgreSQL" ): - self.cleanup() - - elif kb.dbms == "Microsoft SQL Server": - self.cleanup(onlyFileTbl=True) - - else: - errMsg = "Feature not yet implemented for the back-end DBMS" - raise sqlmapUnsupportedFeatureException, errMsg - def execCmd(self, cmd, silent=False, forgeCmd=False): if self.webBackdoorUrl and not kb.stackedTest: self.webBackdoorRunCmd(cmd) @@ -103,9 +91,6 @@ class Abstraction(Web, UDF, xp_cmdshell): else: self.execCmd(cmd, forgeCmd=True) - if not conf.osShell and not conf.osPwn and not conf.cleanup: - self.__cmdShellCleanup() - def shell(self): if self.webBackdoorUrl and not kb.stackedTest: infoMsg = "calling OS shell. To quit type " @@ -157,8 +142,6 @@ class Abstraction(Web, UDF, xp_cmdshell): self.runCmd(command) - self.__cmdShellCleanup() - def initEnv(self, mandatory=True, detailed=False, web=False): if self.envInitialized: return diff --git a/lib/takeover/udf.py b/lib/takeover/udf.py index 2bf76e521..b4ea8d62f 100644 --- a/lib/takeover/udf.py +++ b/lib/takeover/udf.py @@ -116,6 +116,13 @@ class UDF: return output + def checkNeededUdfs(self): + if not conf.osPwn: + self.sysUdfs.pop("sys_bineval") + + if not conf.osCmd and not conf.osShell and not conf.regRead: + self.sysUdfs.pop("sys_eval") + def udfCreateFromSharedLib(self): errMsg = "udfSetRemotePath() method must be defined within the plugin" raise sqlmapUnsupportedFeatureException(errMsg) diff --git a/plugins/dbms/mysql.py b/plugins/dbms/mysql.py index b5e76a880..5a9153423 100644 --- a/plugins/dbms/mysql.py +++ b/plugins/dbms/mysql.py @@ -560,6 +560,7 @@ class MySQLMap(Fingerprint, Enumeration, Filesystem, Miscellaneous, Takeover): self.udfLocalFile += "/mysql/linux/lib_mysqludf_sys.so" self.udfSharedLibExt = "so" + self.checkNeededUdfs() self.udfInjectCore(self.sysUdfs) def uncPathRequest(self): diff --git a/plugins/dbms/postgresql.py b/plugins/dbms/postgresql.py index c5166902f..3f54a4943 100644 --- a/plugins/dbms/postgresql.py +++ b/plugins/dbms/postgresql.py @@ -469,6 +469,7 @@ class PostgreSQLMap(Fingerprint, Enumeration, Filesystem, Miscellaneous, Takeove self.udfLocalFile += "/postgresql/linux/%s/lib_postgresqludf_sys.so" % majorVer self.udfSharedLibExt = "so" + self.checkNeededUdfs() self.udfInjectCore(self.sysUdfs) def uncPathRequest(self): diff --git a/plugins/generic/takeover.py b/plugins/generic/takeover.py index bb9647b63..ff3365ce7 100644 --- a/plugins/generic/takeover.py +++ b/plugins/generic/takeover.py @@ -100,6 +100,9 @@ class Takeover(Abstraction, Metasploit, Registry): if not web or (web and self.webBackdoorUrl is not None): self.runCmd(conf.osCmd) + if not conf.osShell and not conf.osPwn and not conf.cleanup: + self.cleanup() + def osShell(self): stackedTest() @@ -120,6 +123,9 @@ class Takeover(Abstraction, Metasploit, Registry): if not web or (web and self.webBackdoorUrl is not None): self.shell() + if not conf.osPwn and not conf.cleanup: + self.cleanup() + def osPwn(self): goUdf = False @@ -228,6 +234,9 @@ class Takeover(Abstraction, Metasploit, Registry): if not web or (web and self.webBackdoorUrl is not None): self.pwn(goUdf) + if not conf.cleanup: + self.cleanup() + def osSmb(self): stackedTest()