diff --git a/lib/core/dump.py b/lib/core/dump.py index 42f713efd..52cc8fdbe 100644 --- a/lib/core/dump.py +++ b/lib/core/dump.py @@ -47,6 +47,8 @@ from lib.core.exception import SqlmapValueException from lib.core.replication import Replication from lib.core.settings import DUMP_FILE_BUFFER_SIZE from lib.core.settings import HTML_DUMP_CSS_STYLE +from lib.core.settings import HTML_DUMP_CSS_SORTABLE_STYLE +from lib.core.settings import HTML_DUMP_SORTABLE_JAVASCRIPT from lib.core.settings import IS_WIN from lib.core.settings import METADB_SUFFIX from lib.core.settings import MIN_BINARY_DISK_DUMP_SIZE @@ -541,6 +543,9 @@ class Dump(object): dataToDumpFile(dumpFP, "\n" % VERSION_STRING) dataToDumpFile(dumpFP, "%s\n" % ("%s%s" % ("%s." % db if METADB_SUFFIX not in db else "", table))) dataToDumpFile(dumpFP, HTML_DUMP_CSS_STYLE) + if conf.dumpSortable: + dataToDumpFile(dumpFP, HTML_DUMP_CSS_SORTABLE_STYLE) + dataToDumpFile(dumpFP, HTML_DUMP_SORTABLE_JAVASCRIPT) dataToDumpFile(dumpFP, "\n\n\n\n\n\n") if count == 1: diff --git a/lib/core/enums.py b/lib/core/enums.py index 54d4177b7..fda48009f 100644 --- a/lib/core/enums.py +++ b/lib/core/enums.py @@ -229,6 +229,7 @@ class REGISTRY_OPERATION(object): class DUMP_FORMAT(object): CSV = "CSV" HTML = "HTML" + SORTABLE_HTML = "SORTABLE_HTML" SQLITE = "SQLITE" class HTTP_HEADER(object): diff --git a/lib/core/settings.py b/lib/core/settings.py index c37a158f6..5e7b35e4b 100644 --- a/lib/core/settings.py +++ b/lib/core/settings.py @@ -918,29 +918,163 @@ HTTP_CHUNKED_SPLIT_KEYWORDS = ("SELECT", "UPDATE", "INSERT", "FROM", "LOAD_FILE" # CSS style used in HTML dump format HTML_DUMP_CSS_STYLE = """""" +HTML_DUMP_CSS_SORTABLE_STYLE = """ + +""" +HTML_DUMP_SORTABLE_JAVASCRIPT = """""" # Leaving (dirty) possibility to change values from here (e.g. `export SQLMAP__MAX_NUMBER_OF_THREADS=20`) for key, value in os.environ.items(): if key.upper().startswith("%s_" % SQLMAP_ENVIRONMENT_PREFIX): diff --git a/lib/parse/cmdline.py b/lib/parse/cmdline.py index 104bc36e6..1ac83264e 100644 --- a/lib/parse/cmdline.py +++ b/lib/parse/cmdline.py @@ -674,7 +674,7 @@ def cmdLineParser(argv=None): help="Store dumped data to a custom file") general.add_argument("--dump-format", dest="dumpFormat", - help="Format of dumped data (CSV (default), HTML or SQLITE)") + help="Format of dumped data (CSV (default), HTML, SORTABLE_HTML or SQLITE)") general.add_argument("--encoding", dest="encoding", help="Character encoding used for data retrieval (e.g. GBK)") diff --git a/sqlmap.conf b/sqlmap.conf index 5b1a10271..19a0924ff 100644 --- a/sqlmap.conf +++ b/sqlmap.conf @@ -754,8 +754,10 @@ csvDel = , dumpFile = # Format of dumped data -# Valid: CSV, HTML or SQLITE -dumpFormat = CSV +# Valid: CSV, HTML, SORTABLE_HTML or SQLITE +dumpFormat = SORTABLE_HTML + +dumpSortable = False # Force character encoding used for data retrieval. encoding = diff --git a/sqlmap.py b/sqlmap.py index 70fb9727a..261ca96f5 100755 --- a/sqlmap.py +++ b/sqlmap.py @@ -158,6 +158,12 @@ def main(): if checkPipedInput(): conf.batch = True + if conf.get("dumpFormat") == "SORTABLE_HTML": + conf.dumpFormat = "HTML" + conf.dumpSortable = True + else: + conf.dumpSortable = False + if conf.get("api"): # heavy imports from lib.utils.api import StdDbOut