From 3ca23364a3f6ab6daa9c78cdd83b5820d051b1fd Mon Sep 17 00:00:00 2001 From: bkbilly Date: Tue, 25 Jul 2023 13:09:04 +0300 Subject: [PATCH] Add support for json file output --- lib/controller/controller.py | 9 +++++++++ lib/core/common.py | 7 +++++++ lib/core/dump.py | 4 ++++ lib/core/optiondict.py | 1 + lib/parse/cmdline.py | 3 +++ sqlmap.conf | 3 +++ 6 files changed, 27 insertions(+) diff --git a/lib/controller/controller.py b/lib/controller/controller.py index 8441279a9..27398d3b3 100644 --- a/lib/controller/controller.py +++ b/lib/controller/controller.py @@ -177,6 +177,15 @@ def _showInjections(): else: header = "sqlmap resumed the following injection point(s) from stored session" + if conf.jsonFile: + data = { + "url": conf.url, + "query": conf.parameters.get(PLACE.GET), + "data": conf.parameters.get(PLACE.POST), + "injections": kb.injections, + } + conf.dumper.json(conf.jsonFile, data) + if conf.api: conf.dumper.string("", {"url": conf.url, "query": conf.parameters.get(PLACE.GET), "data": conf.parameters.get(PLACE.POST)}, content_type=CONTENT_TYPE.TARGET) conf.dumper.string("", kb.injections, content_type=CONTENT_TYPE.TECHNIQUES) diff --git a/lib/core/common.py b/lib/core/common.py index d235b838a..75bba1b0b 100644 --- a/lib/core/common.py +++ b/lib/core/common.py @@ -1071,6 +1071,13 @@ def dataToDumpFile(dumpFile, data): errMsg = "error occurred when writing dump data to file ('%s')" % getUnicode(ex) logger.error(errMsg) +def dataToJsonFile(jsonFile, data): + print("***************") + print(jsonFile, data) + print("***************") + with open(jsonFile, 'w') as f: + f.write(json.dumps(data)) + def dataToOutFile(filename, data): """ Saves data to filename diff --git a/lib/core/dump.py b/lib/core/dump.py index 2e3cdfde6..c8a058fa5 100644 --- a/lib/core/dump.py +++ b/lib/core/dump.py @@ -15,6 +15,7 @@ import threading from lib.core.common import Backend from lib.core.common import checkFile from lib.core.common import dataToDumpFile +from lib.core.common import dataToJsonFile from lib.core.common import dataToStdout from lib.core.common import filterNone from lib.core.common import getSafeExString @@ -143,6 +144,9 @@ class Dump(object): else: self._write("%s: %s" % (header, ("'%s'" % _) if isinstance(data, six.string_types) else _)) + def json(self, jsonFile, data): + dataToJsonFile(jsonFile, data) + def lister(self, header, elements, content_type=None, sort=True): if elements and sort: try: diff --git a/lib/core/optiondict.py b/lib/core/optiondict.py index 761ee9955..71abe3e50 100644 --- a/lib/core/optiondict.py +++ b/lib/core/optiondict.py @@ -218,6 +218,7 @@ optDict = { "crawlExclude": "string", "csvDel": "string", "dumpFile": "string", + "jsonFile": "string", "dumpFormat": "string", "encoding": "string", "eta": "boolean", diff --git a/lib/parse/cmdline.py b/lib/parse/cmdline.py index b1074166c..c121c8fd3 100644 --- a/lib/parse/cmdline.py +++ b/lib/parse/cmdline.py @@ -670,6 +670,9 @@ def cmdLineParser(argv=None): general.add_argument("--dump-file", dest="dumpFile", help="Store dumped data to a custom file") + general.add_argument("--json-file", dest="jsonFile", + help="Store json data to a custom file") + general.add_argument("--dump-format", dest="dumpFormat", help="Format of dumped data (CSV (default), HTML or SQLITE)") diff --git a/sqlmap.conf b/sqlmap.conf index 895b60115..3e4cbd6e8 100644 --- a/sqlmap.conf +++ b/sqlmap.conf @@ -748,6 +748,9 @@ csvDel = , # Store dumped data to a custom file. dumpFile = +# Store json data to a custom file. +jsonFile = + # Format of dumped data # Valid: CSV, HTML or SQLITE dumpFormat = CSV