mirror of
				https://github.com/sqlmapproject/sqlmap.git
				synced 2025-11-04 09:57:38 +03:00 
			
		
		
		
	
							parent
							
								
									3663fa936b
								
							
						
					
					
						commit
						87ad11dffb
					
				| 
						 | 
				
			
			@ -413,14 +413,14 @@ def _doSearch():
 | 
			
		|||
            else:
 | 
			
		||||
                conf.googlePage += 1
 | 
			
		||||
 | 
			
		||||
def _setBulkMultipleTargets():
 | 
			
		||||
    if not conf.bulkFile:
 | 
			
		||||
        return
 | 
			
		||||
def _setStdinPipeTargets():
 | 
			
		||||
    if isinstance(conf.stdinPipe, collections.Iterable):
 | 
			
		||||
        infoMsg = "using 'STDIN' for parsing targets list"
 | 
			
		||||
        logger.info(infoMsg)
 | 
			
		||||
 | 
			
		||||
    if isinstance(conf.bulkFile, collections.Iterable):
 | 
			
		||||
        class _(object):
 | 
			
		||||
            def __init__(self):
 | 
			
		||||
                self.__rest = set()
 | 
			
		||||
                self.__rest = OrderedSet()
 | 
			
		||||
 | 
			
		||||
            def __iter__(self):
 | 
			
		||||
                return self
 | 
			
		||||
| 
						 | 
				
			
			@ -429,43 +429,47 @@ def _setBulkMultipleTargets():
 | 
			
		|||
                return self.next()
 | 
			
		||||
 | 
			
		||||
            def next(self):
 | 
			
		||||
                line = next(conf.bulkFile)
 | 
			
		||||
                line = next(conf.stdinPipe)
 | 
			
		||||
                if line:
 | 
			
		||||
                    match = re.search(r"\bhttps?://[^\s'\"]+", line, re.I)
 | 
			
		||||
                    match = re.search(r"\b(https?://[^\s'\"]+|[\w.]+\.\w{2,3}[/\w+]*\?[^\s'\"]+)", line, re.I)
 | 
			
		||||
                    if match:
 | 
			
		||||
                        return (match.group(0), conf.method, conf.data, conf.cookie, None)
 | 
			
		||||
                elif self.__rest:
 | 
			
		||||
                    return self.__rest.pop()
 | 
			
		||||
                else:
 | 
			
		||||
                    raise StopIteration()
 | 
			
		||||
 | 
			
		||||
                raise StopIteration()
 | 
			
		||||
 | 
			
		||||
            def add(self, elem):
 | 
			
		||||
                self.__rest.add(elem)
 | 
			
		||||
 | 
			
		||||
        kb.targets = _()
 | 
			
		||||
    else:
 | 
			
		||||
        conf.bulkFile = safeExpandUser(conf.bulkFile)
 | 
			
		||||
 | 
			
		||||
        infoMsg = "parsing multiple targets list from '%s'" % conf.bulkFile
 | 
			
		||||
        logger.info(infoMsg)
 | 
			
		||||
def _setBulkMultipleTargets():
 | 
			
		||||
    if not conf.bulkFile:
 | 
			
		||||
        return
 | 
			
		||||
 | 
			
		||||
        if not checkFile(conf.bulkFile, False):
 | 
			
		||||
            errMsg = "the specified bulk file "
 | 
			
		||||
            errMsg += "does not exist"
 | 
			
		||||
            raise SqlmapFilePathException(errMsg)
 | 
			
		||||
    conf.bulkFile = safeExpandUser(conf.bulkFile)
 | 
			
		||||
 | 
			
		||||
        found = False
 | 
			
		||||
        for line in getFileItems(conf.bulkFile):
 | 
			
		||||
            if conf.scope and not re.search(conf.scope, line, re.I):
 | 
			
		||||
                continue
 | 
			
		||||
    infoMsg = "parsing multiple targets list from '%s'" % conf.bulkFile
 | 
			
		||||
    logger.info(infoMsg)
 | 
			
		||||
 | 
			
		||||
            if re.match(r"[^ ]+\?(.+)", line, re.I) or kb.customInjectionMark in line:
 | 
			
		||||
                found = True
 | 
			
		||||
                kb.targets.add((line.strip(), conf.method, conf.data, conf.cookie, None))
 | 
			
		||||
    if not checkFile(conf.bulkFile, False):
 | 
			
		||||
        errMsg = "the specified bulk file "
 | 
			
		||||
        errMsg += "does not exist"
 | 
			
		||||
        raise SqlmapFilePathException(errMsg)
 | 
			
		||||
 | 
			
		||||
        if not found and not conf.forms and not conf.crawlDepth:
 | 
			
		||||
            warnMsg = "no usable links found (with GET parameters)"
 | 
			
		||||
            logger.warn(warnMsg)
 | 
			
		||||
    found = False
 | 
			
		||||
    for line in getFileItems(conf.bulkFile):
 | 
			
		||||
        if conf.scope and not re.search(conf.scope, line, re.I):
 | 
			
		||||
            continue
 | 
			
		||||
 | 
			
		||||
        if re.match(r"[^ ]+\?(.+)", line, re.I) or kb.customInjectionMark in line:
 | 
			
		||||
            found = True
 | 
			
		||||
            kb.targets.add((line.strip(), conf.method, conf.data, conf.cookie, None))
 | 
			
		||||
 | 
			
		||||
    if not found and not conf.forms and not conf.crawlDepth:
 | 
			
		||||
        warnMsg = "no usable links found (with GET parameters)"
 | 
			
		||||
        logger.warn(warnMsg)
 | 
			
		||||
 | 
			
		||||
def _findPageForms():
 | 
			
		||||
    if not conf.forms or conf.crawlDepth:
 | 
			
		||||
| 
						 | 
				
			
			@ -2802,7 +2806,7 @@ def init():
 | 
			
		|||
 | 
			
		||||
    parseTargetDirect()
 | 
			
		||||
 | 
			
		||||
    if any((conf.url, conf.logFile, conf.bulkFile, conf.requestFile, conf.googleDork)):
 | 
			
		||||
    if any((conf.url, conf.logFile, conf.bulkFile, conf.requestFile, conf.googleDork, conf.stdinPipe)):
 | 
			
		||||
        _setHostname()
 | 
			
		||||
        _setHTTPTimeout()
 | 
			
		||||
        _setHTTPExtraHeaders()
 | 
			
		||||
| 
						 | 
				
			
			@ -2816,6 +2820,7 @@ def init():
 | 
			
		|||
        _setSocketPreConnect()
 | 
			
		||||
        _setSafeVisit()
 | 
			
		||||
        _doSearch()
 | 
			
		||||
        _setStdinPipeTargets()
 | 
			
		||||
        _setBulkMultipleTargets()
 | 
			
		||||
        _checkTor()
 | 
			
		||||
        _setCrawler()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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.10.9"
 | 
			
		||||
VERSION = "1.4.10.10"
 | 
			
		||||
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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -803,6 +803,9 @@ def cmdLineParser(argv=None):
 | 
			
		|||
        parser.add_argument("--smoke-test", dest="smokeTest", action="store_true",
 | 
			
		||||
            help=SUPPRESS)
 | 
			
		||||
 | 
			
		||||
        parser.add_argument("--stdin-pipe", dest="stdinPipe",
 | 
			
		||||
            help=SUPPRESS)
 | 
			
		||||
 | 
			
		||||
        parser.add_argument("--vuln-test", dest="vulnTest", action="store_true",
 | 
			
		||||
            help=SUPPRESS)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1036,9 +1039,9 @@ def cmdLineParser(argv=None):
 | 
			
		|||
            args.url = args.url or DUMMY_URL
 | 
			
		||||
 | 
			
		||||
        if hasattr(sys.stdin, "fileno") and not os.isatty(sys.stdin.fileno()) and '-' not in sys.argv:
 | 
			
		||||
            args.bulkFile = iter(sys.stdin.readline, None)
 | 
			
		||||
            args.stdinPipe = iter(sys.stdin.readline, None)
 | 
			
		||||
 | 
			
		||||
        if not any((args.direct, args.url, args.logFile, args.bulkFile, args.googleDork, args.configFile, args.requestFile, args.updateAll, args.smokeTest, args.vulnTest, args.bedTest, args.fuzzTest, args.wizard, args.dependencies, args.purge, args.listTampers, args.hashFile)):
 | 
			
		||||
        if not any((args.direct, args.url, args.logFile, args.bulkFile, args.googleDork, args.configFile, args.requestFile, args.updateAll, args.smokeTest, args.vulnTest, args.bedTest, args.fuzzTest, args.wizard, args.dependencies, args.purge, args.listTampers, args.hashFile, args.stdinPipe)):
 | 
			
		||||
            errMsg = "missing a mandatory option (-d, -u, -l, -m, -r, -g, -c, --list-tampers, --wizard, --update, --purge or --dependencies). "
 | 
			
		||||
            errMsg += "Use -h for basic and -hh for advanced help\n"
 | 
			
		||||
            parser.error(errMsg)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user