mirror of
https://github.com/sqlmapproject/sqlmap.git
synced 2025-03-23 19:34:13 +03:00
Merge branch 'master' of github.com:sqlmapproject/sqlmap
This commit is contained in:
commit
f25d7ffc14
|
@ -19,6 +19,9 @@ from optparse import OptionParser
|
||||||
# Regex used for recognition of hex encoded characters
|
# Regex used for recognition of hex encoded characters
|
||||||
HEX_ENCODED_CHAR_REGEX = r"(?P<result>\\x[0-9A-Fa-f]{2})"
|
HEX_ENCODED_CHAR_REGEX = r"(?P<result>\\x[0-9A-Fa-f]{2})"
|
||||||
|
|
||||||
|
# Regex used for recognition of representation for hex encoded invalid unicode characters
|
||||||
|
INVALID_UNICODE_CHAR_REGEX = r"(?P<result>\\\?[0-9A-Fa-f]{2})"
|
||||||
|
|
||||||
# Raw chars that will be safe encoded to their slash (\) representations (e.g. newline to \n)
|
# Raw chars that will be safe encoded to their slash (\) representations (e.g. newline to \n)
|
||||||
SAFE_ENCODE_SLASH_REPLACEMENTS = "\t\n\r\x0b\x0c"
|
SAFE_ENCODE_SLASH_REPLACEMENTS = "\t\n\r\x0b\x0c"
|
||||||
|
|
||||||
|
@ -49,14 +52,14 @@ def safecharencode(value):
|
||||||
|
|
||||||
retVal = reduce(lambda x, y: x + (y if (y in string.printable or ord(y) > 255) else '\\x%02x' % ord(y)), retVal, (unicode if isinstance(value, unicode) else str)())
|
retVal = reduce(lambda x, y: x + (y if (y in string.printable or ord(y) > 255) else '\\x%02x' % ord(y)), retVal, (unicode if isinstance(value, unicode) else str)())
|
||||||
|
|
||||||
retVal = retVal.replace(SLASH_MARKER, '\\\\')
|
retVal = retVal.replace(SLASH_MARKER, "\\\\")
|
||||||
elif isinstance(value, list):
|
elif isinstance(value, list):
|
||||||
for i in xrange(len(value)):
|
for i in xrange(len(value)):
|
||||||
retVal[i] = safecharencode(value[i])
|
retVal[i] = safecharencode(value[i])
|
||||||
|
|
||||||
return retVal
|
return retVal
|
||||||
|
|
||||||
def safechardecode(value):
|
def safechardecode(value, binary=False):
|
||||||
"""
|
"""
|
||||||
Reverse function to safecharencode
|
Reverse function to safecharencode
|
||||||
"""
|
"""
|
||||||
|
@ -68,7 +71,7 @@ def safechardecode(value):
|
||||||
while True:
|
while True:
|
||||||
match = re.search(HEX_ENCODED_CHAR_REGEX, retVal)
|
match = re.search(HEX_ENCODED_CHAR_REGEX, retVal)
|
||||||
if match:
|
if match:
|
||||||
retVal = retVal.replace(match.group("result"), (unichr if isinstance(value, unicode) else chr)(ord(binascii.unhexlify(match.group("result").lstrip('\\x')))))
|
retVal = retVal.replace(match.group("result"), (unichr if isinstance(value, unicode) else chr)(ord(binascii.unhexlify(match.group("result").lstrip("\\x")))))
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
|
|
||||||
|
@ -77,6 +80,16 @@ def safechardecode(value):
|
||||||
|
|
||||||
retVal = retVal.replace(SLASH_MARKER, '\\')
|
retVal = retVal.replace(SLASH_MARKER, '\\')
|
||||||
|
|
||||||
|
if binary:
|
||||||
|
if isinstance(retVal, unicode):
|
||||||
|
retVal = retVal.encode("utf8")
|
||||||
|
while True:
|
||||||
|
match = re.search(INVALID_UNICODE_CHAR_REGEX, retVal)
|
||||||
|
if match:
|
||||||
|
retVal = retVal.replace(match.group("result"), chr(ord(binascii.unhexlify(match.group("result").lstrip("\\?")))))
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
|
||||||
elif isinstance(value, (list, tuple)):
|
elif isinstance(value, (list, tuple)):
|
||||||
for i in xrange(len(value)):
|
for i in xrange(len(value)):
|
||||||
retVal[i] = safechardecode(value[i])
|
retVal[i] = safechardecode(value[i])
|
||||||
|
|
|
@ -479,12 +479,16 @@ class Dump(object):
|
||||||
blank = " " * (maxlength - len(value))
|
blank = " " * (maxlength - len(value))
|
||||||
self._write("| %s%s" % (value, blank), newline=False, console=console)
|
self._write("| %s%s" % (value, blank), newline=False, console=console)
|
||||||
|
|
||||||
#if len(value) > 10 and r'\x' in value:
|
if len(value) > 10 and r'\x' in value:
|
||||||
# mimetype = magic.from_buffer(value, mime=True)
|
mimetype = magic.from_buffer(value, mime=True)
|
||||||
# if mimetype.startswith("application") or mimetype.startswith("image"):
|
if any(mimetype.startswith(_) for _ in ("application", "image")):
|
||||||
# with codecs.open("%s%s%s" % (dumpDbPath, os.sep, "%s-%d.bin" % (column, randomInt(8))), "wb", UNICODE_ENCODING) as f:
|
filepath = os.path.join(dumpDbPath, "%s-%d.bin" % (column, randomInt(8)))
|
||||||
# _ = safechardecode(value)
|
warnMsg = "writing binary ('%s') content to file '%s' " % (mimetype, filepath)
|
||||||
# f.write(_)
|
logger.warn(warnMsg)
|
||||||
|
|
||||||
|
with open(filepath, "wb") as f:
|
||||||
|
_ = safechardecode(value, True)
|
||||||
|
f.write(_)
|
||||||
|
|
||||||
if conf.dumpFormat == DUMP_FORMAT.CSV:
|
if conf.dumpFormat == DUMP_FORMAT.CSV:
|
||||||
if field == fields:
|
if field == fields:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user