From f1254fef4b46832270e2648d41a8f2c59402c0e9 Mon Sep 17 00:00:00 2001 From: Miroslav Stampar Date: Tue, 19 Jun 2018 16:39:10 +0200 Subject: [PATCH] Finalizes implementation for #739 --- lib/core/common.py | 2 +- lib/core/option.py | 42 +++++++++++++++++++++++++++--------------- lib/core/settings.py | 2 +- lib/request/connect.py | 4 ++-- txt/checksum.md5 | 8 ++++---- 5 files changed, 35 insertions(+), 23 deletions(-) diff --git a/lib/core/common.py b/lib/core/common.py index f3af4bee2..afa826484 100644 --- a/lib/core/common.py +++ b/lib/core/common.py @@ -4504,7 +4504,7 @@ def parseRequestFile(reqFile): continue if not(conf.scope and not re.search(conf.scope, url, re.I)): - yield (url, method, None, cookie, None) + yield (url, method, None, cookie, tuple()) def _parseBurpLog(content): """ diff --git a/lib/core/option.py b/lib/core/option.py index bca5974f3..17dd6ab64 100644 --- a/lib/core/option.py +++ b/lib/core/option.py @@ -285,26 +285,37 @@ def _setRequestFromFile(): textual file, parses it and saves the information into the knowledge base. """ - if not conf.requestFile: - return + if conf.requestFile: + conf.requestFile = safeExpandUser(conf.requestFile) + seen = set() - seen = set() + if not os.path.isfile(conf.requestFile): + errMsg = "specified HTTP request file '%s' " % conf.requestFile + errMsg += "does not exist" + raise SqlmapFilePathException(errMsg) - conf.requestFile = safeExpandUser(conf.requestFile) + infoMsg = "parsing HTTP request from '%s'" % conf.requestFile + logger.info(infoMsg) - if not os.path.isfile(conf.requestFile): - errMsg = "specified HTTP request file '%s' " % conf.requestFile - errMsg += "does not exist" - raise SqlmapFilePathException(errMsg) + for target in parseRequestFile(conf.requestFile): + url = target[0] + if url not in seen: + kb.targets.add(target) + seen.add(url) - infoMsg = "parsing HTTP request from '%s'" % conf.requestFile - logger.info(infoMsg) + if conf.secondReq: + conf.secondReq = safeExpandUser(conf.secondReq) - for target in parseRequestFile(conf.requestFile): - url = target[0] - if url not in seen: - kb.targets.add(target) - seen.add(url) + if not os.path.isfile(conf.secondReq): + errMsg = "specified second-order HTTP request file '%s' " % onf.secondReq + errMsg += "does not exist" + raise SqlmapFilePathException(errMsg) + + infoMsg = "parsing second-order HTTP request from '%s'" % conf.secondReq + logger.info(infoMsg) + + target = parseRequestFile(conf.secondReq).next() + kb.secondReq = target def _setCrawler(): if not conf.crawlDepth: @@ -1823,6 +1834,7 @@ def _setKnowledgeBaseAttributes(flushAll=True): kb.rowXmlMode = False kb.safeCharEncode = False kb.safeReq = AttribDict() + kb.secondReq = None kb.singleLogFlags = set() kb.skipSeqMatcher = False kb.reduceTests = None diff --git a/lib/core/settings.py b/lib/core/settings.py index ec1744eac..dfc4e9b4e 100644 --- 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.2.6.25" +VERSION = "1.2.6.26" 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/lib/request/connect.py b/lib/request/connect.py index a4300d0a4..dcfd675a8 100644 --- a/lib/request/connect.py +++ b/lib/request/connect.py @@ -1237,8 +1237,8 @@ class Connect(object): if conf.secondUrl: page, headers, code = Connect.getPage(url=conf.secondUrl, cookie=cookie, ua=ua, silent=silent, auxHeaders=auxHeaders, response=response, raise404=False, ignoreTimeout=timeBasedCompare, refreshing=True) - elif conf.secondReq: - pass + elif kb.secondReq: + page, headers, code = Connect.getPage(url=kb.secondReq[0], post=kb.secondReq[2], method=kb.secondReq[1], cookie=kb.secondReq[3], silent=silent, auxHeaders=dict(auxHeaders, **dict(kb.secondReq[4])), response=response, raise404=False, ignoreTimeout=timeBasedCompare, refreshing=True) threadData.lastQueryDuration = calculateDeltaSeconds(start) threadData.lastPage = page diff --git a/txt/checksum.md5 b/txt/checksum.md5 index 187f76e69..afad8a4f3 100644 --- a/txt/checksum.md5 +++ b/txt/checksum.md5 @@ -28,7 +28,7 @@ c7443613a0a2505b1faec931cee2a6ef lib/controller/handler.py 1e5532ede194ac9c083891c2f02bca93 lib/controller/__init__.py 0adf547455a76dc71e6a599e52da1ed9 lib/core/agent.py fd8f239e259afaf5f24bcf34a0ad187f lib/core/bigarray.py -cfd0b24b7da8dd85cd29360e9c6fb56a lib/core/common.py +eb9e08ba86bfcf7d97454357d9838531 lib/core/common.py 0d082da16c388b3445e656e0760fb582 lib/core/convert.py 9f87391b6a3395f7f50830b391264f27 lib/core/data.py 72016ea5c994a711a262fd64572a0fcd lib/core/datatype.py @@ -41,14 +41,14 @@ cada93357a7321655927fc9625b3bfec lib/core/exception.py 1e5532ede194ac9c083891c2f02bca93 lib/core/__init__.py 458a194764805cd8312c14ecd4be4d1e lib/core/log.py e9e32e5afe49ecd644b3a0ca9c9a36fc lib/core/optiondict.py -90a061be1a0658c2bdb197511b61d6fa lib/core/option.py +ee8a51cb09bbbe50984a4588a4f29043 lib/core/option.py c8c386d644d57c659d74542f5f57f632 lib/core/patch.py 7cfd04e583cca782b843f6f6d973981a lib/core/profiling.py 6f654e1715571eff68a0f8af3d62dcf8 lib/core/readlineng.py 0c3eef46bdbf87e29a3f95f90240d192 lib/core/replication.py a7db43859b61569b601b97f187dd31c5 lib/core/revision.py fcb74fcc9577523524659ec49e2e964b lib/core/session.py -dc0d040df74bdf0d6a08f41d412b76e7 lib/core/settings.py +12db3bd1245ed6e89910c61e736b1f6b lib/core/settings.py 0dfc2ed40adf72e302291f6ecd4406f6 lib/core/shell.py a7edc9250d13af36ac0108f259859c19 lib/core/subprocessng.py 36bd2dc292c0e10e39bd9c43b77fe1bc lib/core/target.py @@ -70,7 +70,7 @@ ec4e56bbb1349176b2a22e0b99ba6a55 lib/parse/payloads.py 30eed3a92a04ed2c29770e1b10d39dc0 lib/request/basicauthhandler.py 2b81435f5a7519298c15c724e3194a0d lib/request/basic.py c0cabedead14b8a23353b606672cff42 lib/request/comparison.py -607419fd07bcabc274782dbc7b238e8b lib/request/connect.py +1b5491cc079384f08cbc6b397786e1af lib/request/connect.py dd4598675027fae99f2e2475b05986da lib/request/direct.py 2044fce3f4ffa268fcfaaf63241b1e64 lib/request/dns.py 98535d0efca5551e712fcc4b34a3f772 lib/request/httpshandler.py