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