implemented feature request from Ole Rasmussen regarding table name retrieval speedup

This commit is contained in:
Miroslav Stampar 2010-04-15 09:36:13 +00:00
parent 1ab78ce60e
commit 17554759b7
3 changed files with 26 additions and 0 deletions

View File

@ -920,6 +920,7 @@ def __setKnowledgeBaseAttributes():
kb.injParameter = None
kb.injPlace = None
kb.injType = None
kb.hintValue = None
# Back-end DBMS underlying operating system fingerprint via banner (-b)
# parsing

View File

@ -114,7 +114,31 @@ def bisection(payload, expression, length=None, charsetType=None, firstChar=None
queriesCount = [0] # As list to deal with nested scoping rules
hintlock = threading.Lock()
def tryHint(idx):
hintlock.acquire()
hintValue = kb.hintValue
hintlock.release()
if hintValue and len(hintValue) >= idx:
if kb.dbms == "SQLite":
posValue = hintValue[idx-1]
else:
posValue = ord(hintValue[idx-1])
forgedPayload = safeStringFormat(payload.replace('%3E', '%3D'), (expressionUnescaped, idx, posValue))
result = Request.queryPage(urlencode(forgedPayload))
if result:
return hintValue[idx-1]
hintlock.acquire()
kb.hintValue = None
hintlock.release()
return None
def getChar(idx, asciiTbl=asciiTbl):
result = tryHint(idx)
if result:
return result
maxValue = asciiTbl[len(asciiTbl)-1]
minValue = 0

View File

@ -783,6 +783,7 @@ class Enumeration:
query = rootQuery["blind"]["query"] % (db, index)
table = inject.getValue(query, inband=False)
tables.append(table)
kb.hintValue = table
if tables:
kb.data.cachedTables[db] = tables