From 9a7343e9f7acb066a0beb07ae071f7ed3f3d6863 Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Wed, 7 Jun 2017 16:07:27 +0200 Subject: [PATCH] Fixes #2566 --- lib/core/settings.py | 2 +- plugins/generic/entries.py | 62 +++++++++++++++++++++++--------------- txt/checksum.md5 | 4 +-- 3 files changed, 41 insertions(+), 27 deletions(-) diff --git a/lib/core/settings.py b/lib/core/settings.py index 1ff8b883a..01c48330e 100755 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -19,7 +19,7 @@ from lib.core.enums import DBMS_DIRECTORY_NAME from lib.core.enums import OS # sqlmap version (...) -VERSION = "1.1.6.6" +VERSION = "1.1.6.7" TYPE = "dev" if VERSION.count('.') > 2 and VERSION.split('.')[-1] != '0' else "stable" TYPE_COLORS = {"dev": 33, "stable": 90, "pip": 34} VERSION_STRING = "sqlmap/%s#%s" % ('.'.join(VERSION.split('.')[:-1]) if VERSION.count('.') > 2 and VERSION.split('.')[-1] == '0' else VERSION, TYPE) diff --git a/plugins/generic/entries.py b/plugins/generic/entries.py index 40dcf8382..5e1ad3321 100644 --- a/plugins/generic/entries.py +++ b/plugins/generic/entries.py @@ -176,20 +176,26 @@ class Entries: count = inject.getValue(query, blind=False, time=False, expected=EXPECTED.INT, charsetType=CHARSET_TYPE.DIGITS) if isNumPosStrValue(count): - indexRange = getLimitRange(count, plusOne=True) + try: + indexRange = getLimitRange(count, plusOne=True) - for index in indexRange: - row = [] + for index in indexRange: + row = [] + for column in colList: + query = rootQuery.blind.query3 % (column, column, table, index) + query = agent.whereQuery(query) + value = inject.getValue(query, blind=False, time=False, dump=True) or "" + row.append(value) - for column in colList: - query = rootQuery.blind.query3 % (column, column, table, index) - query = agent.whereQuery(query) - value = inject.getValue(query, blind=False, time=False, dump=True) or "" - row.append(value) + entries.append(row) - entries.append(row) + except KeyboardInterrupt: + kb.dumpKeyboardInterrupt = True + clearConsoleLine() + warnMsg = "Ctrl+C detected in dumping phase" + logger.warn(warnMsg) - if not entries: + if not entries and not kb.dumpKeyboardInterrupt: try: retVal = pivotDumpTable(table, colList, blind=False) except KeyboardInterrupt: @@ -211,7 +217,7 @@ class Entries: query = agent.whereQuery(query) - if not entries and query: + if not entries and query and not kb.dumpKeyboardInterrupt: try: entries = inject.getValue(query, blind=False, time=False, dump=True) except KeyboardInterrupt: @@ -306,24 +312,32 @@ class Entries: table = "%s.%s" % (conf.db, tbl) if Backend.isDbms(DBMS.MSSQL): - indexRange = getLimitRange(count, plusOne=True) - for index in indexRange: - for column in colList: - query = rootQuery.blind.query3 % (column, column, table, index) - query = agent.whereQuery(query) + try: + indexRange = getLimitRange(count, plusOne=True) - value = inject.getValue(query, union=False, error=False, dump=True) or "" + for index in indexRange: + for column in colList: + query = rootQuery.blind.query3 % (column, column, table, index) + query = agent.whereQuery(query) - if column not in lengths: - lengths[column] = 0 + value = inject.getValue(query, union=False, error=False, dump=True) or "" - if column not in entries: - entries[column] = BigArray() + if column not in lengths: + lengths[column] = 0 - lengths[column] = max(lengths[column], len(DUMP_REPLACEMENTS.get(getUnicode(value), getUnicode(value)))) - entries[column].append(value) + if column not in entries: + entries[column] = BigArray() - if not entries: + lengths[column] = max(lengths[column], len(DUMP_REPLACEMENTS.get(getUnicode(value), getUnicode(value)))) + entries[column].append(value) + + except KeyboardInterrupt: + kb.dumpKeyboardInterrupt = True + clearConsoleLine() + warnMsg = "Ctrl+C detected in dumping phase" + logger.warn(warnMsg) + + if not entries and not kb.dumpKeyboardInterrupt: try: retVal = pivotDumpTable(table, colList, count, blind=True) except KeyboardInterrupt: diff --git a/txt/checksum.md5 b/txt/checksum.md5 index 2e011f854..6b150d1e9 100644 --- a/txt/checksum.md5 +++ b/txt/checksum.md5 @@ -46,7 +46,7 @@ edcfce0850771e6454acef244d5c5760 lib/core/optiondict.py d8e9250f3775119df07e9070eddccd16 lib/core/replication.py 785f86e3f963fa3798f84286a4e83ff2 lib/core/revision.py 40c80b28b3a5819b737a5a17d4565ae9 lib/core/session.py -b1151afaf0f49ea541ff914956438100 lib/core/settings.py +fff32e00b8133f3d85019c6e0d768ee5 lib/core/settings.py d91291997d2bd2f6028aaf371bf1d3b6 lib/core/shell.py 2ad85c130cc5f2b3701ea85c2f6bbf20 lib/core/subprocessng.py 8136241fdbdb99a5dc0e51ba72918f6e lib/core/target.py @@ -203,7 +203,7 @@ deed74334b637767fc9de8f74b37647a plugins/dbms/sybase/fingerprint.py be7481a96214220bcd8f51ca00239bed plugins/generic/connector.py 5390591ca955036d492de11355b52e8f plugins/generic/custom.py 4ad4bccc03256b8f3d21ba4f8f759404 plugins/generic/databases.py -12b0420d9588828e4a83fe8e89bef162 plugins/generic/entries.py +106f19c1d895963e2efa8ee193a537ec plugins/generic/entries.py 55802d1d5d65938414c77ccc27731cab plugins/generic/enumeration.py 0d10a0410c416fece51c26a935e68568 plugins/generic/filesystem.py 2e397afd83939889d1a7a07893b19ae7 plugins/generic/fingerprint.py