Minor bug fix and layout adjustment regarding --threading and standard output

This commit is contained in:
Bernardo Damele 2010-03-22 17:38:19 +00:00
parent 9e8a108768
commit f9a135e232
4 changed files with 19 additions and 7 deletions

View File

@ -501,8 +501,12 @@ def checkFile(filename):
if not os.path.exists(filename): if not os.path.exists(filename):
raise sqlmapFilePathException, "unable to read file '%s'" % filename raise sqlmapFilePathException, "unable to read file '%s'" % filename
def replaceNewlineTabs(inpStr): def replaceNewlineTabs(inpStr, stdout=False):
if stdout:
replacedString = inpStr.replace("\n", " ").replace("\t", " ")
else:
replacedString = inpStr.replace("\n", "__NEWLINE__").replace("\t", "__TAB__") replacedString = inpStr.replace("\n", "__NEWLINE__").replace("\t", "__TAB__")
replacedString = replacedString.replace(temp.delimiter, "__DEL__") replacedString = replacedString.replace(temp.delimiter, "__DEL__")
return replacedString return replacedString

View File

@ -70,7 +70,7 @@ class Dump:
data = data.replace("__DEL__", ", ") data = data.replace("__DEL__", ", ")
if "\n" in data: if "\n" in data:
self.__write("%s:\n---\n%s---\n" % (header, data)) self.__write("%s:\n---\n%s\n---\n" % (header, data))
else: else:
self.__write("%s: '%s'\n" % (header, data)) self.__write("%s: '%s'\n" % (header, data))
else: else:

View File

@ -204,17 +204,22 @@ def bisection(payload, expression, length=None, charsetType=None, firstChar=None
count = 0 count = 0
for i in xrange(startCharIndex, endCharIndex): for i in xrange(startCharIndex, endCharIndex):
output += '_' if value[i] is None else value[i] output += '_' if value[i] is None else value[i]
for i in xrange(length): for i in xrange(length):
count += 1 if value[i] is not None else 0 count += 1 if value[i] is not None else 0
if startCharIndex > 0: if startCharIndex > 0:
output = '..' + output[2:] output = '..' + output[2:]
if endCharIndex - startCharIndex == conf.progressWidth: if endCharIndex - startCharIndex == conf.progressWidth:
output = output[:-2] + '..' output = output[:-2] + '..'
output += '_' * (min(length, conf.progressWidth) - len(output)) output += '_' * (min(length, conf.progressWidth) - len(output))
status = ' %d/%d (%d%s)' % (count, length, round(100.0*count/length), '%') status = ' %d/%d (%d%s)' % (count, length, round(100.0*count/length), '%')
output += status if count != length else " "*len(status) output += status if count != length else " "*len(status)
iolock.acquire() iolock.acquire()
dataToStdout("\r[%s] [INFO] retrieved: %s" % (time.strftime("%X"), output)) dataToStdout("\r[%s] [INFO] retrieved: %s" % (time.strftime("%X"), replaceNewlineTabs(output, stdout=True)))
iolock.release() iolock.release()
except (sqlmapConnectionException, sqlmapValueException), errMsg: except (sqlmapConnectionException, sqlmapValueException), errMsg:

View File

@ -27,6 +27,7 @@ import re
from lib.core.common import dataToSessionFile from lib.core.common import dataToSessionFile
from lib.core.common import safeStringFormat from lib.core.common import safeStringFormat
from lib.core.common import randomStr from lib.core.common import randomStr
from lib.core.common import replaceNewlineTabs
from lib.core.data import conf from lib.core.data import conf
from lib.core.data import kb from lib.core.data import kb
from lib.core.data import logger from lib.core.data import logger
@ -113,6 +114,8 @@ def resume(expression, payload):
if not resumedValue: if not resumedValue:
return None return None
resumedValue = resumedValue.replace("__NEWLINE__", "\n").replace("__TAB__", "\t")
if resumedValue[-1] == "]": if resumedValue[-1] == "]":
resumedValue = resumedValue[:-1] resumedValue = resumedValue[:-1]
@ -154,7 +157,7 @@ def resume(expression, payload):
infoMsg += "%s" % resumedValue.split("\n")[0] infoMsg += "%s" % resumedValue.split("\n")[0]
logger.info(infoMsg) logger.info(infoMsg)
dataToSessionFile("[%s][%s][%s][%s][%s]\n" % (conf.url, kb.injPlace, conf.parameters[kb.injPlace], expression, resumedValue)) dataToSessionFile("[%s][%s][%s][%s][%s]\n" % (conf.url, kb.injPlace, conf.parameters[kb.injPlace], expression, replaceNewlineTabs(resumedValue)))
return resumedValue return resumedValue
elif len(resumedValue) < int(length): elif len(resumedValue) < int(length):
@ -162,7 +165,7 @@ def resume(expression, payload):
infoMsg += "%s..." % resumedValue.split("\n")[0] infoMsg += "%s..." % resumedValue.split("\n")[0]
logger.info(infoMsg) logger.info(infoMsg)
dataToSessionFile("[%s][%s][%s][%s][%s" % (conf.url, kb.injPlace, conf.parameters[kb.injPlace], expression, resumedValue)) dataToSessionFile("[%s][%s][%s][%s][%s" % (conf.url, kb.injPlace, conf.parameters[kb.injPlace], expression, replaceNewlineTabs(resumedValue)))
if select: if select:
newExpr = expression.replace(regExpr, safeStringFormat(substringQuery, (regExpr, len(resumedValue) + 1, int(length))), 1) newExpr = expression.replace(regExpr, safeStringFormat(substringQuery, (regExpr, len(resumedValue) + 1, int(length))), 1)