Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit f94b91a

Browse files
committed
added helper function for HashDB data storing/retrieval
1 parent b481c03 commit f94b91a

8 files changed

Lines changed: 46 additions & 18 deletions

File tree

lib/controller/controller.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
from lib.core.common import getFilteredPageContent
2727
from lib.core.common import getPublicTypeMembers
2828
from lib.core.common import getUnicode
29+
from lib.core.common import hashDBRetrieve
30+
from lib.core.common import hashDBWrite
2931
from lib.core.common import intersect
3032
from lib.core.common import parseTargetUrl
3133
from lib.core.common import randomStr
@@ -179,12 +181,12 @@ def __saveToSessionFile():
179181
setInjection(inj)
180182

181183
def __saveToHashDB():
182-
_ = conf.hashDB.retrieve(HASHDB_KEYS.KB_ABS_FILE_PATHS, True) or set()
184+
_ = hashDBRetrieve(HASHDB_KEYS.KB_ABS_FILE_PATHS, True) or set()
183185
_.update(kb.absFilePaths)
184-
conf.hashDB.write(HASHDB_KEYS.KB_ABS_FILE_PATHS, _, True)
186+
hashDBWrite(HASHDB_KEYS.KB_ABS_FILE_PATHS, _, True)
185187

186-
if not conf.hashDB.retrieve(HASHDB_KEYS.KB_CHARS):
187-
conf.hashDB.write(HASHDB_KEYS.KB_CHARS, kb.chars, True)
188+
if not hashDBRetrieve(HASHDB_KEYS.KB_CHARS):
189+
hashDBWrite(HASHDB_KEYS.KB_CHARS, kb.chars, True)
188190

189191
def __saveToResultsFile():
190192
if not conf.resultsFP:

lib/core/common.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3176,3 +3176,17 @@ def setFormatterPrependFlag(value=True):
31763176
"""
31773177

31783178
FORMATTER._prepend_flag = value
3179+
3180+
def hashDBWrite(key, value, serialize=False):
3181+
"""
3182+
Helper function for writing session data to HashDB
3183+
"""
3184+
3185+
conf.hashDB.write(key, value, serialize)
3186+
3187+
def hashDBRetrieve(key, unserialize=False):
3188+
"""
3189+
Helper function for restoring session data from HashDB
3190+
"""
3191+
3192+
return conf.hashDB.retrieve(key, unserialize) if not any([conf.flushSession, conf.freshQueries, not kb.resumeValues]) else None

lib/request/inject.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
from lib.core.common import expandAsteriskForColumns
2020
from lib.core.common import extractExpectedValue
2121
from lib.core.common import getPublicTypeMembers
22+
from lib.core.common import hashDBRetrieve
23+
from lib.core.common import hashDBWrite
2224
from lib.core.common import initTechnique
2325
from lib.core.common import isNumPosStrValue
2426
from lib.core.common import isTechniqueAvailable
@@ -315,13 +317,13 @@ def __goBooleanProxy(expression):
315317
payload = agent.payload(newValue=query)
316318
timeBasedCompare = kb.technique in (PAYLOAD.TECHNIQUE.TIME, PAYLOAD.TECHNIQUE.STACKED)
317319

318-
output = conf.hashDB.retrieve(expression) if not any([conf.flushSession, conf.freshQueries, not kb.resumeValues]) else None
320+
output = hashDBRetrieve(expression)
319321

320322
if not output:
321323
output = Request.queryPage(payload, timeBasedCompare=timeBasedCompare, raise404=False)
322324

323325
if output is not None:
324-
conf.hashDB.write(expression, output)
326+
hashDBWrite(expression, output)
325327

326328
return output
327329

lib/techniques/blind/inference.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
from lib.core.common import getCounter
2222
from lib.core.common import goGoodSamaritan
2323
from lib.core.common import getPartRun
24+
from lib.core.common import hashDBRetrieve
25+
from lib.core.common import hashDBWrite
2426
from lib.core.common import incrementCounter
2527
from lib.core.common import safeStringFormat
2628
from lib.core.common import setFormatterPrependFlag
@@ -57,7 +59,7 @@ def bisection(payload, expression, length=None, charsetType=None, firstChar=None
5759
abortedFlag = False
5860
asciiTbl = getCharset(charsetType)
5961
timeBasedCompare = (kb.technique in (PAYLOAD.TECHNIQUE.TIME, PAYLOAD.TECHNIQUE.STACKED))
60-
retVal = conf.hashDB.retrieve(expression) if not any([conf.flushSession, conf.freshQueries, not kb.resumeValues]) else None
62+
retVal = hashDBRetrieve(expression)
6163

6264
if retVal:
6365
if PARTIAL_VALUE_MARKER in retVal:
@@ -517,9 +519,9 @@ def blindThread():
517519

518520
if finalValue is not None:
519521
finalValue = decodeHexValue(finalValue) if conf.hexConvert else finalValue
520-
conf.hashDB.write(expression, finalValue)
522+
hashDBWrite(expression, finalValue)
521523
else:
522-
conf.hashDB.write(expression, "%s%s" % (PARTIAL_VALUE_MARKER, partialValue))
524+
hashDBWrite(expression, "%s%s" % (PARTIAL_VALUE_MARKER, partialValue))
523525

524526
if kb.threadException:
525527
raise sqlmapThreadException, "something unexpected happened inside the threads"

lib/techniques/brute/use.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
from lib.core.common import getFileItems
1616
from lib.core.common import Backend
1717
from lib.core.common import getPageWordSet
18+
from lib.core.common import hashDBRetrieve
19+
from lib.core.common import hashDBWrite
1820
from lib.core.common import randomInt
1921
from lib.core.common import randomStr
2022
from lib.core.common import safeStringFormat
@@ -132,7 +134,7 @@ def tableExistsThread():
132134
if _ not in kb.brute.tables:
133135
kb.brute.tables.append(_)
134136

135-
conf.hashDB.write(HASHDB_KEYS.KB_BRUTE_TABLES, kb.brute.tables, True)
137+
hashDBWrite(HASHDB_KEYS.KB_BRUTE_TABLES, kb.brute.tables, True)
136138

137139
return kb.data.cachedTables
138140

@@ -231,6 +233,6 @@ def columnExistsThread():
231233
if _ not in kb.brute.columns:
232234
kb.brute.columns.append(_)
233235

234-
conf.hashDB.write(HASHDB_KEYS.KB_BRUTE_COLUMNS, kb.brute.columns, True)
236+
hashDBWrite(HASHDB_KEYS.KB_BRUTE_COLUMNS, kb.brute.columns, True)
235237

236238
return kb.data.cachedColumns

lib/techniques/error/use.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
from lib.core.common import decodeHexValue
2020
from lib.core.common import extractRegexResult
2121
from lib.core.common import getUnicode
22+
from lib.core.common import hashDBRetrieve
23+
from lib.core.common import hashDBWrite
2224
from lib.core.common import incrementCounter
2325
from lib.core.common import initTechnique
2426
from lib.core.common import isNumPosStrValue
@@ -43,7 +45,7 @@
4345
from lib.request.connect import Connect as Request
4446

4547
def __oneShotErrorUse(expression, field):
46-
retVal = conf.hashDB.retrieve(expression) if not any([conf.flushSession, conf.freshQueries, not kb.resumeValues]) else None
48+
retVal = hashDBRetrieve(expression)
4749

4850
threadData = getCurrentThreadData()
4951
threadData.resumed = retVal is not None
@@ -126,7 +128,7 @@ def __oneShotErrorUse(expression, field):
126128

127129
retVal = __errorReplaceChars(retVal)
128130

129-
conf.hashDB.write(expression, retVal)
131+
hashDBWrite(expression, retVal)
130132

131133
else:
132134
_ = "%s(?P<result>.*?)%s" % (kb.chars.start, kb.chars.stop)

lib/techniques/union/use.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
from lib.core.common import extractRegexResult
2121
from lib.core.common import getConsoleWidth
2222
from lib.core.common import getUnicode
23+
from lib.core.common import hashDBRetrieve
24+
from lib.core.common import hashDBWrite
2325
from lib.core.common import incrementCounter
2426
from lib.core.common import initTechnique
2527
from lib.core.common import isNumPosStrValue
@@ -43,7 +45,7 @@
4345
from lib.request.connect import Connect as Request
4446

4547
def __oneShotUnionUse(expression, unpack=True, limited=False):
46-
retVal = conf.hashDB.retrieve(expression) if not any([conf.flushSession, conf.freshQueries, not kb.resumeValues]) else None
48+
retVal = hashDBRetrieve(expression)
4749

4850
threadData = getCurrentThreadData()
4951
threadData.resumed = retVal is not None
@@ -92,7 +94,7 @@ def __oneShotUnionUse(expression, unpack=True, limited=False):
9294
warnMsg += "issues) or switch '--hex'"
9395
singleTimeWarnMessage(warnMsg)
9496

95-
conf.hashDB.write(expression, retVal)
97+
hashDBWrite(expression, retVal)
9698

9799
return retVal
98100

lib/utils/hash.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@
3838
from lib.core.common import getCompiledRegex
3939
from lib.core.common import getFileItems
4040
from lib.core.common import getPublicTypeMembers
41+
from lib.core.common import hashDBRetrieve
42+
from lib.core.common import hashDBWrite
4143
from lib.core.common import normalizeUnicode
4244
from lib.core.common import paths
4345
from lib.core.common import readInput
@@ -592,7 +594,7 @@ def dictionaryAttack(attack_dict):
592594
item = [(user, hash_), {'salt': hash_[4:12], 'count': 1<<ITOA64.index(hash_[3]), 'prefix': hash_[:12]}]
593595

594596
if item and hash_ not in keys:
595-
resumed = conf.hashDB.retrieve(hash_)
597+
resumed = hashDBRetrieve(hash_)
596598
if not resumed:
597599
attack_info.append(item)
598600
else:
@@ -723,7 +725,7 @@ def dictionaryAttack(attack_dict):
723725

724726
while not retVal.empty():
725727
_, hash_, word = item = retVal.get(block=False)
726-
conf.hashDB.write(hash_, word)
728+
hashDBWrite(hash_, word)
727729
results.append(item)
728730

729731
conf.hashDB.endTransaction()
@@ -806,7 +808,7 @@ class Value():
806808

807809
while not retVal.empty():
808810
_, hash_, word = item = retVal.get(block=False)
809-
conf.hashDB.write(hash_, word)
811+
hashDBWrite(hash_, word)
810812
results.append(item)
811813

812814
conf.hashDB.endTransaction()

0 commit comments

Comments
 (0)