mirror of
https://github.com/sqlmapproject/sqlmap.git
synced 2025-12-06 12:41:30 +00:00
Adding option --safe-req
This commit is contained in:
@@ -1136,21 +1136,63 @@ def _setHTTPProxy():
|
||||
|
||||
proxyHandler.__init__(proxyHandler.proxies)
|
||||
|
||||
def _setSafeUrl():
|
||||
def _setSafeVisit():
|
||||
"""
|
||||
Check and set the safe URL options.
|
||||
Check and set the safe visit options.
|
||||
"""
|
||||
if not conf.safeUrl:
|
||||
if not any ((conf.safeUrl, conf.safeReqFile)):
|
||||
return
|
||||
|
||||
if not re.search("^http[s]*://", conf.safeUrl):
|
||||
if ":443/" in conf.safeUrl:
|
||||
conf.safeUrl = "https://" + conf.safeUrl
|
||||
if conf.safeReqFile:
|
||||
checkFile(conf.safeReqFile)
|
||||
|
||||
raw = readCachedFileContent(conf.safeReqFile)
|
||||
match = re.search(r"\A([A-Z]+) ([^ ]+) HTTP/[0-9.]+\Z", raw[:raw.find('\n')])
|
||||
|
||||
if match:
|
||||
kb.safeReq.method = match.group(1)
|
||||
kb.safeReq.url = match.group(2)
|
||||
kb.safeReq.headers = {}
|
||||
|
||||
for line in raw[raw.find('\n') + 1:].split('\n'):
|
||||
line = line.strip()
|
||||
if line and ':' in line:
|
||||
key, value = line.split(':', 1)
|
||||
value = value.strip()
|
||||
kb.safeReq.headers[key] = value
|
||||
if key == HTTP_HEADER.HOST:
|
||||
if not value.startswith("http"):
|
||||
scheme = "http"
|
||||
if value.endswith(":443"):
|
||||
scheme = "https"
|
||||
value = "%s://%s" % (scheme, value)
|
||||
kb.safeReq.url = urlparse.urljoin(value, kb.safeReq.url)
|
||||
else:
|
||||
break
|
||||
|
||||
post = None
|
||||
|
||||
if '\r\n\r\n' in raw:
|
||||
post = raw[raw.find('\r\n\r\n') + 4:]
|
||||
elif '\n\n' in raw:
|
||||
post = raw[raw.find('\n\n') + 2:]
|
||||
|
||||
if post and post.strip():
|
||||
kb.safeReq.post = post
|
||||
else:
|
||||
kb.safeReq.post = None
|
||||
else:
|
||||
conf.safeUrl = "http://" + conf.safeUrl
|
||||
errMsg = "invalid format of a safe request file"
|
||||
raise SqlmapSyntaxException, errMsg
|
||||
else:
|
||||
if not re.search("^http[s]*://", conf.safeUrl):
|
||||
if ":443/" in conf.safeUrl:
|
||||
conf.safeUrl = "https://" + conf.safeUrl
|
||||
else:
|
||||
conf.safeUrl = "http://" + conf.safeUrl
|
||||
|
||||
if conf.safeFreq <= 0:
|
||||
errMsg = "please provide a valid value (>0) for safe frequency (--safe-freq) while using safe URL feature"
|
||||
errMsg = "please provide a valid value (>0) for safe frequency (--safe-freq) while using safe visit features"
|
||||
raise SqlmapSyntaxException(errMsg)
|
||||
|
||||
def _setPrefixSuffix():
|
||||
@@ -1791,6 +1833,7 @@ def _setKnowledgeBaseAttributes(flushAll=True):
|
||||
kb.responseTimes = []
|
||||
kb.resumeValues = True
|
||||
kb.safeCharEncode = False
|
||||
kb.safeReq = AttribDict()
|
||||
kb.singleLogFlags = set()
|
||||
kb.reduceTests = None
|
||||
kb.stickyDBMS = False
|
||||
@@ -2265,8 +2308,12 @@ def _basicOptionValidation():
|
||||
errMsg = "option '--safe-post' requires usage of option '--safe-url'"
|
||||
raise SqlmapSyntaxException(errMsg)
|
||||
|
||||
if conf.safeFreq and not conf.safeUrl:
|
||||
errMsg = "option '--safe-freq' requires usage of option '--safe-url'"
|
||||
if conf.safeFreq and not any((conf.safeUrl, conf.safeReqFile)):
|
||||
errMsg = "option '--safe-freq' requires usage of option '--safe-url' or '--safe-req'"
|
||||
raise SqlmapSyntaxException(errMsg)
|
||||
|
||||
if conf.safeReqFile and any((conf.safeUrl, conf.safePost)):
|
||||
errMsg = "option '--safe-req' is incompatible with option '--safe-url' and option '--safe-post'"
|
||||
raise SqlmapSyntaxException(errMsg)
|
||||
|
||||
if conf.csrfUrl and not conf.csrfToken:
|
||||
@@ -2416,7 +2463,7 @@ def init():
|
||||
_setHTTPAuthentication()
|
||||
_setHTTPProxy()
|
||||
_setDNSCache()
|
||||
_setSafeUrl()
|
||||
_setSafeVisit()
|
||||
_setGoogleDorking()
|
||||
_setBulkMultipleTargets()
|
||||
_setSitemapTargets()
|
||||
|
||||
Reference in New Issue
Block a user