mirror of
				https://github.com/sqlmapproject/sqlmap.git
				synced 2025-11-04 01:47:37 +03:00 
			
		
		
		
	Major improvement in Base64 handling (late-binding)
This commit is contained in:
		
							parent
							
								
									a7f20c1d67
								
							
						
					
					
						commit
						b42b62ae38
					
				| 
						 | 
				
			
			@ -42,6 +42,7 @@ from lib.core.enums import PAYLOAD
 | 
			
		|||
from lib.core.enums import PLACE
 | 
			
		||||
from lib.core.enums import POST_HINT
 | 
			
		||||
from lib.core.exception import SqlmapNoneDataException
 | 
			
		||||
from lib.core.settings import BOUNDED_BASE64_MARKER
 | 
			
		||||
from lib.core.settings import BOUNDARY_BACKSLASH_MARKER
 | 
			
		||||
from lib.core.settings import BOUNDED_INJECTION_MARKER
 | 
			
		||||
from lib.core.settings import DEFAULT_COOKIE_DELIMITER
 | 
			
		||||
| 
						 | 
				
			
			@ -183,7 +184,7 @@ class Agent(object):
 | 
			
		|||
                newValue = self.adjustLateValues(newValue)
 | 
			
		||||
 | 
			
		||||
            # TODO: support for POST_HINT
 | 
			
		||||
            newValue = encodeBase64(newValue, binary=False, encoding=conf.encoding or UNICODE_ENCODING, safe=conf.base64Safe)
 | 
			
		||||
            newValue = "%s%s%s" % (BOUNDED_BASE64_MARKER, newValue, BOUNDED_BASE64_MARKER)
 | 
			
		||||
 | 
			
		||||
            if parameter in kb.base64Originals:
 | 
			
		||||
                origValue = kb.base64Originals[parameter]
 | 
			
		||||
| 
						 | 
				
			
			@ -397,6 +398,10 @@ class Agent(object):
 | 
			
		|||
        """
 | 
			
		||||
 | 
			
		||||
        if payload:
 | 
			
		||||
            for match in re.finditer(r"%s(.*?)%s" % (BOUNDED_BASE64_MARKER, BOUNDED_BASE64_MARKER), payload):
 | 
			
		||||
                _ = encodeBase64(match.group(1), binary=False, encoding=conf.encoding or UNICODE_ENCODING, safe=conf.base64Safe)
 | 
			
		||||
                payload = payload.replace(match.group(0), _)
 | 
			
		||||
 | 
			
		||||
            payload = payload.replace(SLEEP_TIME_MARKER, str(conf.timeSec))
 | 
			
		||||
            payload = payload.replace(SINGLE_QUOTE_MARKER, "'")
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,7 +18,7 @@ from lib.core.enums import OS
 | 
			
		|||
from thirdparty.six import unichr as _unichr
 | 
			
		||||
 | 
			
		||||
# sqlmap version (<major>.<minor>.<month>.<monthly commit>)
 | 
			
		||||
VERSION = "1.4.9.2"
 | 
			
		||||
VERSION = "1.4.9.3"
 | 
			
		||||
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)
 | 
			
		||||
| 
						 | 
				
			
			@ -66,6 +66,7 @@ PARTIAL_HEX_VALUE_MARKER = "__PARTIAL_HEX_VALUE__"
 | 
			
		|||
URI_QUESTION_MARKER = "__QUESTION_MARK__"
 | 
			
		||||
ASTERISK_MARKER = "__ASTERISK_MARK__"
 | 
			
		||||
REPLACEMENT_MARKER = "__REPLACEMENT_MARK__"
 | 
			
		||||
BOUNDED_BASE64_MARKER = "__BOUNDED_BASE64_MARK__"
 | 
			
		||||
BOUNDED_INJECTION_MARKER = "__BOUNDED_INJECTION_MARK__"
 | 
			
		||||
SAFE_VARIABLE_MARKER = "__SAFE__"
 | 
			
		||||
SAFE_HEX_MARKER = "__SAFE_HEX__"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -39,7 +39,6 @@ def vulnTest():
 | 
			
		|||
 | 
			
		||||
    TESTS = (
 | 
			
		||||
        ("-h", ("to see full list of options run with '-hh'",)),
 | 
			
		||||
        ("-u <base64> -p id --base64=id -v 6 --data='base64=true' --flush-session --banner --technique=BEU", ("banner: '3.",)),
 | 
			
		||||
        ("--dependencies", ("sqlmap requires", "third-party library")),
 | 
			
		||||
        ("-u <url> --flush-session --wizard", ("Please choose:", "back-end DBMS: SQLite", "current user is DBA: True", "banner: '3.")),
 | 
			
		||||
        (u"-c <config> --flush-session --roles --statements --hostname --privileges --sql-query=\"SELECT '\u0161u\u0107uraj'\" --technique=U", (u": '\u0161u\u0107uraj'", "on SQLite it is not possible")),
 | 
			
		||||
| 
						 | 
				
			
			@ -49,6 +48,8 @@ def vulnTest():
 | 
			
		|||
        ("-r <request> --flush-session -v 5 --test-skip='heavy' --save=<tmp>", ("CloudFlare", "possible DBMS: 'SQLite'", "User-agent: foobar", "~Type: time-based blind")),
 | 
			
		||||
        ("-l <log> --flush-session --keep-alive --skip-waf -v 5 --technique=U --union-from=users --banner --parse-errors", ("banner: '3.", "ORDER BY term out of range", "~xp_cmdshell", "Connection: keep-alive")),
 | 
			
		||||
        ("-l <log> --offline --banner -v 5", ("banner: '3.", "~[TRAFFIC OUT]")),
 | 
			
		||||
        ("-u <base64> -p id --base64=id --data='base64=true' --flush-session --banner --technique=B", ("banner: '3.",)),
 | 
			
		||||
        ("-u <base64> -p id --base64=id --data='base64=true' --flush-session --tables --technique=U", (" users ",)),
 | 
			
		||||
        ("-u <url> --flush-session --banner --technique=B --not-string 'no results'", ("banner: '3.",)),
 | 
			
		||||
        ("-u <url> --flush-session --banner --technique=B --first=1 --last=2", ("banner: '3.'",)),
 | 
			
		||||
        ("-u <url> --flush-session --encoding=ascii --forms --crawl=2 --threads=2 --banner", ("total of 2 targets", "might be injectable", "Type: UNION query", "banner: '3.")),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user