mirror of
https://github.com/sqlmapproject/sqlmap.git
synced 2024-11-22 17:46:37 +03:00
code refactoring regarding standard output suppression and some threading issues
This commit is contained in:
parent
0e68248f60
commit
385e208f38
|
@ -427,7 +427,9 @@ def filePathToString(filePath):
|
|||
return strRepl
|
||||
|
||||
def dataToStdout(data, forceOutput=False):
|
||||
if forceOutput or conf.verbose > 0:
|
||||
if (forceOutput or conf.verbose > 0)\
|
||||
and not ('threadException' in kb and kb.threadException)\
|
||||
and not ('disableStdOut' in kb and kb.disableStdOut):
|
||||
try:
|
||||
sys.stdout.write(data)
|
||||
sys.stdout.flush()
|
||||
|
|
|
@ -1119,7 +1119,6 @@ def __setConfAttributes():
|
|||
conf.sessionFP = None
|
||||
conf.start = True
|
||||
conf.tests = []
|
||||
conf.threadException = False
|
||||
conf.trafficFP = None
|
||||
conf.wFileType = None
|
||||
|
||||
|
@ -1144,6 +1143,7 @@ def __setKnowledgeBaseAttributes(flushAll=True):
|
|||
kb.commonOutputs = None
|
||||
|
||||
kb.data = advancedDict()
|
||||
kb.disableStdOut = False
|
||||
|
||||
# Old style injection flag
|
||||
kb.unionTest = None
|
||||
|
@ -1196,6 +1196,7 @@ def __setKnowledgeBaseAttributes(flushAll=True):
|
|||
kb.testMode = False
|
||||
kb.testQueryCount = 0
|
||||
kb.threadContinue = True
|
||||
kb.threadException = False
|
||||
kb.threadData = {}
|
||||
kb.unionComment = ""
|
||||
kb.unionCount = None
|
||||
|
|
|
@ -288,7 +288,7 @@ class Connect:
|
|||
|
||||
if silent or (ignoreTimeout and "timeout" in tbMsg):
|
||||
return None, None
|
||||
elif kb.retriesCount < conf.retries and not conf.threadException and not conf.scriptKiddie:
|
||||
elif kb.retriesCount < conf.retries and not kb.threadException and not conf.scriptKiddie:
|
||||
kb.retriesCount += 1
|
||||
|
||||
warnMsg += ", sqlmap is going to retry the request"
|
||||
|
|
|
@ -390,8 +390,7 @@ def getValue(expression, blind=True, inband=True, error=True, time=True, fromUse
|
|||
"""
|
||||
|
||||
if suppressOutput:
|
||||
pushValue(conf.verbose)
|
||||
conf.verbose = 0
|
||||
kb.disableStdOut = True
|
||||
|
||||
try:
|
||||
if conf.direct:
|
||||
|
@ -467,7 +466,7 @@ def getValue(expression, blind=True, inband=True, error=True, time=True, fromUse
|
|||
|
||||
finally:
|
||||
if suppressOutput:
|
||||
conf.verbose = popValue()
|
||||
kb.disableStdOut = False
|
||||
|
||||
if value and expected == EXPECTED.BOOL:
|
||||
if isinstance(value, basestring):
|
||||
|
|
|
@ -341,11 +341,11 @@ def bisection(payload, expression, length=None, charsetType=None, firstChar=None
|
|||
|
||||
except (sqlmapConnectionException, sqlmapValueException), errMsg:
|
||||
print
|
||||
conf.threadException = True
|
||||
kb.threadException = True
|
||||
logger.error("thread %d: %s" % (numThread + 1, errMsg))
|
||||
|
||||
except KeyboardInterrupt:
|
||||
conf.threadException = True
|
||||
kb.threadException = True
|
||||
|
||||
print
|
||||
logger.debug("waiting for threads to finish")
|
||||
|
@ -359,7 +359,7 @@ def bisection(payload, expression, length=None, charsetType=None, firstChar=None
|
|||
|
||||
except:
|
||||
print
|
||||
conf.threadException = True
|
||||
kb.threadException = True
|
||||
errMsg = unhandledException()
|
||||
logger.error("thread %d: %s" % (numThread + 1, errMsg))
|
||||
traceback.print_exc()
|
||||
|
@ -505,7 +505,7 @@ def bisection(payload, expression, length=None, charsetType=None, firstChar=None
|
|||
if not partialValue:
|
||||
dataToSessionFile("]\n")
|
||||
|
||||
if conf.threadException:
|
||||
if kb.threadException:
|
||||
raise sqlmapThreadException, "something unexpected happened inside the threads"
|
||||
|
||||
return queriesCount[0], finalValue
|
||||
|
|
|
@ -80,7 +80,17 @@ def tableExists(tableFile):
|
|||
thread.join(5)
|
||||
except KeyboardInterrupt:
|
||||
kb.threadContinue = False
|
||||
raise
|
||||
kb.threadException = True
|
||||
|
||||
print
|
||||
logger.debug("waiting for threads to finish")
|
||||
|
||||
try:
|
||||
while (threading.activeCount() > 1):
|
||||
pass
|
||||
|
||||
except KeyboardInterrupt:
|
||||
raise sqlmapThreadException, "user aborted"
|
||||
finally:
|
||||
kb.locks.seqLock = None
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@ import re
|
|||
import time
|
||||
|
||||
from lib.core.agent import agent
|
||||
from lib.core.common import dataToStdout
|
||||
from lib.core.common import extractRegexResult
|
||||
from lib.core.common import getUnicode
|
||||
from lib.core.common import initTechnique
|
||||
|
@ -60,9 +61,6 @@ def errorUse(expression):
|
|||
|
||||
if output:
|
||||
output = output.replace(kb.misc.space, " ")
|
||||
|
||||
if conf.verbose > 0:
|
||||
infoMsg = "retrieved: %s" % replaceNewlineTabs(output, stdout=True)
|
||||
logger.info(infoMsg)
|
||||
dataToStdout("\r[%s] [INFO] retrieved: %s" % (time.strftime("%X"), replaceNewlineTabs(output, stdout=True)))
|
||||
|
||||
return output
|
||||
|
|
|
@ -299,8 +299,7 @@ class Enumeration:
|
|||
break
|
||||
else:
|
||||
query = rootQuery.blind.query % user
|
||||
pushValue(conf.verbose)
|
||||
conf.verbose = 0
|
||||
kb.disableStdOut = True
|
||||
elif kb.dbms == DBMS.MSSQL:
|
||||
if kb.dbmsVersion[0] in ( "2005", "2008" ):
|
||||
query = rootQuery.blind.query2 % (user, index, user)
|
||||
|
@ -310,7 +309,7 @@ class Enumeration:
|
|||
query = rootQuery.blind.query % (user, index)
|
||||
password = inject.getValue(query, inband=False)
|
||||
if kb.dbms == DBMS.SYBASE:
|
||||
conf.verbose = popValue()
|
||||
kb.disableStdOut = False
|
||||
password = "0x%s" % strToHex(password)
|
||||
infoMsg = "retrieved: %s" % password
|
||||
logger.info(infoMsg)
|
||||
|
|
Loading…
Reference in New Issue
Block a user