mirror of
				https://github.com/sqlmapproject/sqlmap.git
				synced 2025-11-04 01:47:37 +03:00 
			
		
		
		
	minor improvement (resuming of already cracked values)
This commit is contained in:
		
							parent
							
								
									c0cd29f01c
								
							
						
					
					
						commit
						f9bb762d1d
					
				| 
						 | 
				
			
			@ -50,6 +50,7 @@ from lib.core.common import Wordlist
 | 
			
		|||
from lib.core.convert import hexdecode
 | 
			
		||||
from lib.core.convert import hexencode
 | 
			
		||||
from lib.core.convert import utf8encode
 | 
			
		||||
from lib.core.data import conf
 | 
			
		||||
from lib.core.data import kb
 | 
			
		||||
from lib.core.data import logger
 | 
			
		||||
from lib.core.enums import DBMS
 | 
			
		||||
| 
						 | 
				
			
			@ -500,7 +501,15 @@ def dictionaryAttack(attack_dict):
 | 
			
		|||
 | 
			
		||||
                    key = hash(repr(item))
 | 
			
		||||
                    if item and key not in keys:
 | 
			
		||||
                        attack_info.append(item)
 | 
			
		||||
                        resumed = conf.hashDB.retrieve(hash_)
 | 
			
		||||
                        if not resumed:
 | 
			
		||||
                            attack_info.append(item)
 | 
			
		||||
                        else:
 | 
			
		||||
                            infoMsg = "resuming found '%s' ('%s')" % (resumed, hash_)
 | 
			
		||||
                            if user and not user.startswith(DUMMY_USER_PREFIX):
 | 
			
		||||
                                infoMsg += " for user '%s'" % user
 | 
			
		||||
                            logger.info(infoMsg)
 | 
			
		||||
                            results.append((user, hash_, resumed))
 | 
			
		||||
                        keys.add(key)
 | 
			
		||||
 | 
			
		||||
        if not attack_info:
 | 
			
		||||
| 
						 | 
				
			
			@ -615,7 +624,9 @@ def dictionaryAttack(attack_dict):
 | 
			
		|||
                        process.join()
 | 
			
		||||
 | 
			
		||||
                while not retVal.empty():
 | 
			
		||||
                    results.append(retVal.get(block=False))
 | 
			
		||||
                    _, hash_, word = item = retVal.get(block=False)
 | 
			
		||||
                    conf.hashDB.write(hash_, word)
 | 
			
		||||
                    results.append(item)
 | 
			
		||||
 | 
			
		||||
            clearConsoleLine()
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -689,7 +700,9 @@ def dictionaryAttack(attack_dict):
 | 
			
		|||
                            process.join()
 | 
			
		||||
 | 
			
		||||
                    while not retVal.empty():
 | 
			
		||||
                        results.append(retVal.get(block=False))
 | 
			
		||||
                        _, hash_, word = item = retVal.get(block=False)
 | 
			
		||||
                        conf.hashDB.write(hash_, word)
 | 
			
		||||
                        results.append(item)
 | 
			
		||||
 | 
			
		||||
                clearConsoleLine()
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -40,7 +40,8 @@ class HashDB(object):
 | 
			
		|||
        except:
 | 
			
		||||
            pass
 | 
			
		||||
 | 
			
		||||
    def hashKey(self, key):
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def hashKey(key):
 | 
			
		||||
        key = key.encode(UNICODE_ENCODING) if isinstance(key, unicode) else repr(key)
 | 
			
		||||
        retVal = int(hashlib.md5(key).hexdigest()[:8], 16)
 | 
			
		||||
        return retVal
 | 
			
		||||
| 
						 | 
				
			
			@ -48,7 +49,7 @@ class HashDB(object):
 | 
			
		|||
    def retrieve(self, key):
 | 
			
		||||
        retVal = None
 | 
			
		||||
        if key:
 | 
			
		||||
            hash_ = self.hashKey(key)
 | 
			
		||||
            hash_ = HashDB.hashKey(key)
 | 
			
		||||
            while True:
 | 
			
		||||
                try:
 | 
			
		||||
                    for row in self.cursor.execute("SELECT value FROM storage WHERE id=?", (hash_,)):
 | 
			
		||||
| 
						 | 
				
			
			@ -62,7 +63,7 @@ class HashDB(object):
 | 
			
		|||
 | 
			
		||||
    def write(self, key, value):
 | 
			
		||||
        if key:
 | 
			
		||||
            hash_ = self.hashKey(key)
 | 
			
		||||
            hash_ = HashDB.hashKey(key)
 | 
			
		||||
            while True:
 | 
			
		||||
                try:
 | 
			
		||||
                    try:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user