This commit is contained in:
Miroslav Stampar 2010-12-10 10:54:17 +00:00
parent b6dcbcef5b
commit d5e7a8d305
4 changed files with 59 additions and 48 deletions

View File

@ -1684,10 +1684,12 @@ def isNumPosStrValue(value):
def aliasToDbmsEnum(value): def aliasToDbmsEnum(value):
retVal = None retVal = None
for key, item in dbmsDict.items(): for key, item in dbmsDict.items():
if value in item[0]: if value in item[0]:
retVal = key retVal = key
break break
return retVal return retVal
def removeDynamicContent(page): def removeDynamicContent(page):
@ -1702,3 +1704,15 @@ def removeDynamicContent(page):
page = getCompiledRegex('(?s)%s.+%s' % (prefix, suffix)).sub('%s%s' % (prefix, suffix), page) page = getCompiledRegex('(?s)%s.+%s' % (prefix, suffix)).sub('%s%s' % (prefix, suffix), page)
return page return page
def isDBMSVersionAtLeast(version):
retVal = None
if version:
if not isinstance(version, basestring):
version = str(version)
if kb.dbmsVersion and kb.dbmsVersion[0] != "Unknown" and kb.dbmsVersion[0] != None:
retVal = kb.dbmsVersion[0] >= version
return retVal

View File

@ -130,13 +130,10 @@ class Fingerprint(GenericFingerprint):
setDbms(DBMS.FIREBIRD) setDbms(DBMS.FIREBIRD)
self.getBanner()
if not conf.extensiveFp:
return True
kb.dbmsVersion = [self.__sysTablesCheck()] kb.dbmsVersion = [self.__sysTablesCheck()]
self.getBanner()
return True return True
else: else:
warnMsg = "the back-end DBMS is not Firebird" warnMsg = "the back-end DBMS is not Firebird"

View File

@ -7,6 +7,8 @@ Copyright (c) 2006-2010 sqlmap developers (http://sqlmap.sourceforge.net/)
See the file 'doc/COPYING' for copying permission See the file 'doc/COPYING' for copying permission
""" """
from lib.core.data import kb
from lib.core.common import isDBMSVersionAtLeast
from lib.core.exception import sqlmapSyntaxException from lib.core.exception import sqlmapSyntaxException
from plugins.generic.syntax import Syntax as GenericSyntax from plugins.generic.syntax import Syntax as GenericSyntax
@ -21,57 +23,58 @@ class Syntax(GenericSyntax):
@staticmethod @staticmethod
def unescape(expression, quote=True): def unescape(expression, quote=True):
#if quote: if isDBMSVersionAtLeast('2.1'):
#while True: if quote:
#index = expression.find("'") while True:
#if index == -1: index = expression.find("'")
#break if index == -1:
break
#firstIndex = index + 1 firstIndex = index + 1
#index = expression[firstIndex:].find("'") index = expression[firstIndex:].find("'")
#if index == -1: if index == -1:
#raise sqlmapSyntaxException, "Unenclosed ' in '%s'" % expression raise sqlmapSyntaxException, "Unenclosed ' in '%s'" % expression
#lastIndex = firstIndex + index lastIndex = firstIndex + index
#old = "'%s'" % expression[firstIndex:lastIndex] old = "'%s'" % expression[firstIndex:lastIndex]
#unescaped = "" unescaped = ""
#for i in range(firstIndex, lastIndex): for i in range(firstIndex, lastIndex):
#unescaped += "ASCII_CHAR(%d)" % (ord(expression[i])) unescaped += "ASCII_CHAR(%d)" % (ord(expression[i]))
#if i < lastIndex - 1: if i < lastIndex - 1:
#unescaped += "||" unescaped += "||"
#expression = expression.replace(old, unescaped) expression = expression.replace(old, unescaped)
#else: else:
#unescaped = "".join("ASCII_CHAR(%d)||" % ord(c) for c in expression) unescaped = "".join("ASCII_CHAR(%d)||" % ord(c) for c in expression)
#if unescaped[-1] == "||": if unescaped[-1] == "||":
#unescaped = unescaped[:-1] unescaped = unescaped[:-1]
#expression = unescaped expression = unescaped
return expression return expression
@staticmethod @staticmethod
def escape(expression): def escape(expression):
#while True: while True:
#index = expression.find("ASCII_CHAR(") index = expression.find("ASCII_CHAR(")
#if index == -1: if index == -1:
#break break
#firstIndex = index firstIndex = index
#index = expression[firstIndex:].find(")") index = expression[firstIndex:].find(")")
#if index == -1: if index == -1:
#raise sqlmapSyntaxException, "Unenclosed ) in '%s'" % expression raise sqlmapSyntaxException, "Unenclosed ) in '%s'" % expression
#lastIndex = firstIndex + index + 1 lastIndex = firstIndex + index + 1
#old = expression[firstIndex:lastIndex] old = expression[firstIndex:lastIndex]
#oldUpper = old.upper() oldUpper = old.upper()
#oldUpper = oldUpper.lstrip("ASCII_CHAR(").rstrip(")") oldUpper = oldUpper.lstrip("ASCII_CHAR(").rstrip(")")
#oldUpper = oldUpper.split("||") oldUpper = oldUpper.split("||")
#escaped = "'%s'" % "".join([chr(int(char)) for char in oldUpper]) escaped = "'%s'" % "".join([chr(int(char)) for char in oldUpper])
#expression = expression.replace(old, escaped).replace("'||'", "") expression = expression.replace(old, escaped).replace("'||'", "")
return expression return expression

View File

@ -93,17 +93,14 @@ class Fingerprint(GenericFingerprint):
logger.warn(warnMsg) logger.warn(warnMsg)
return False return False
else:
result = inject.checkBooleanExpression("RANDOMBLOB(-1)>0")
kb.dbmsVersion = [ '3' if result else '2' ]
setDbms(DBMS.SQLITE) setDbms(DBMS.SQLITE)
self.getBanner() self.getBanner()
if not conf.extensiveFp:
return True
version = inject.getValue("SELECT SUBSTR((SQLITE_VERSION()), 1, 1)", unpack=False, charsetType=2, suppressOutput=True)
kb.dbmsVersion = [ version ]
return True return True
else: else:
warnMsg = "the back-end DBMS is not SQLite" warnMsg = "the back-end DBMS is not SQLite"