mirror of
https://github.com/sqlmapproject/sqlmap.git
synced 2025-12-07 05:01:30 +00:00
Compare commits
21 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
eb26dd8984 | ||
|
|
b9b5d07336 | ||
|
|
5f3235ef57 | ||
|
|
dfe42612be | ||
|
|
a0202f7bfd | ||
|
|
6dd9d5b2dd | ||
|
|
0864387885 | ||
|
|
359bfb2704 | ||
|
|
644ea2e3aa | ||
|
|
071132cd56 | ||
|
|
7a18dde2e0 | ||
|
|
e146763399 | ||
|
|
4ce08dcfa3 | ||
|
|
2ca5ddce5f | ||
|
|
addb2445b7 | ||
|
|
4736a525b8 | ||
|
|
d3a08a2d22 | ||
|
|
ee5b5cdcbc | ||
|
|
f3f2c81cec | ||
|
|
1e8df40981 | ||
|
|
389133654e |
@@ -35,7 +35,7 @@ Untuk mendapatkan daftar opsi lanjut gunakan:
|
|||||||
python sqlmap.py -hh
|
python sqlmap.py -hh
|
||||||
|
|
||||||
Anda dapat mendapatkan contoh penggunaan [di sini](https://asciinema.org/a/46601).
|
Anda dapat mendapatkan contoh penggunaan [di sini](https://asciinema.org/a/46601).
|
||||||
Untuk mendapatkan gambaran singkat kemampuan sqlmap, daftar fitur yang didukung, deskripsi dari semua opsi, berikut dengan contohnya, Anda disarankan untuk membaca [manual pengguna](https://github.com/sqlmapproject/sqlmap/wiki/Usage).
|
Untuk mendapatkan gambaran singkat kemampuan sqlmap, daftar fitur yang didukung, deskripsi dari semua opsi, berikut dengan contohnya, Anda disarankan untuk membaca [Panduan Pengguna](https://github.com/sqlmapproject/sqlmap/wiki/Usage).
|
||||||
|
|
||||||
Tautan
|
Tautan
|
||||||
----
|
----
|
||||||
|
|||||||
@@ -65,6 +65,8 @@ from lib.core.exception import SqlmapNoneDataException
|
|||||||
from lib.core.exception import SqlmapSilentQuitException
|
from lib.core.exception import SqlmapSilentQuitException
|
||||||
from lib.core.exception import SqlmapUserQuitException
|
from lib.core.exception import SqlmapUserQuitException
|
||||||
from lib.core.settings import CANDIDATE_SENTENCE_MIN_LENGTH
|
from lib.core.settings import CANDIDATE_SENTENCE_MIN_LENGTH
|
||||||
|
from lib.core.settings import CHECK_INTERNET_ADDRESS
|
||||||
|
from lib.core.settings import CHECK_INTERNET_VALUE
|
||||||
from lib.core.settings import DEFAULT_GET_POST_DELIMITER
|
from lib.core.settings import DEFAULT_GET_POST_DELIMITER
|
||||||
from lib.core.settings import DUMMY_NON_SQLI_CHECK_APPENDIX
|
from lib.core.settings import DUMMY_NON_SQLI_CHECK_APPENDIX
|
||||||
from lib.core.settings import FI_ERROR_REGEX
|
from lib.core.settings import FI_ERROR_REGEX
|
||||||
@@ -126,7 +128,7 @@ def checkSqlInjection(place, parameter, value):
|
|||||||
# then attempt to identify with a simple DBMS specific boolean-based
|
# then attempt to identify with a simple DBMS specific boolean-based
|
||||||
# test what the DBMS may be
|
# test what the DBMS may be
|
||||||
if not injection.dbms and PAYLOAD.TECHNIQUE.BOOLEAN in injection.data:
|
if not injection.dbms and PAYLOAD.TECHNIQUE.BOOLEAN in injection.data:
|
||||||
if not Backend.getIdentifiedDbms() and kb.heuristicDbms is None:
|
if not Backend.getIdentifiedDbms() and kb.heuristicDbms is None and not kb.droppingRequests:
|
||||||
kb.heuristicDbms = heuristicCheckDbms(injection)
|
kb.heuristicDbms = heuristicCheckDbms(injection)
|
||||||
|
|
||||||
# If the DBMS has already been fingerprinted (via DBMS-specific
|
# If the DBMS has already been fingerprinted (via DBMS-specific
|
||||||
@@ -491,7 +493,7 @@ def checkSqlInjection(place, parameter, value):
|
|||||||
if candidates:
|
if candidates:
|
||||||
candidates = sorted(candidates, key=lambda _: len(_))
|
candidates = sorted(candidates, key=lambda _: len(_))
|
||||||
for candidate in candidates:
|
for candidate in candidates:
|
||||||
if re.match(r"\A[\w.,! ]+\Z", candidate) and ' ' in candidate and len(candidate) > CANDIDATE_SENTENCE_MIN_LENGTH:
|
if re.match(r"\A[\w.,! ]+\Z", candidate) and ' ' in candidate and candidate.strip() and len(candidate) > CANDIDATE_SENTENCE_MIN_LENGTH:
|
||||||
conf.string = candidate
|
conf.string = candidate
|
||||||
injectable = True
|
injectable = True
|
||||||
|
|
||||||
@@ -552,12 +554,9 @@ def checkSqlInjection(place, parameter, value):
|
|||||||
try:
|
try:
|
||||||
page, headers = Request.queryPage(reqPayload, place, content=True, raise404=False)
|
page, headers = Request.queryPage(reqPayload, place, content=True, raise404=False)
|
||||||
output = extractRegexResult(check, page, re.DOTALL | re.IGNORECASE) \
|
output = extractRegexResult(check, page, re.DOTALL | re.IGNORECASE) \
|
||||||
or extractRegexResult(check, listToStrValue( \
|
or extractRegexResult(check, threadData.lastHTTPError[2] if wasLastResponseHTTPError() else None, re.DOTALL | re.IGNORECASE) \
|
||||||
[headers[key] for key in headers.keys() if key.lower() != URI_HTTP_HEADER.lower()] \
|
or extractRegexResult(check, listToStrValue([headers[key] for key in headers.keys() if key.lower() != URI_HTTP_HEADER.lower()] if headers else None), re.DOTALL | re.IGNORECASE) \
|
||||||
if headers else None), re.DOTALL | re.IGNORECASE) \
|
or extractRegexResult(check, threadData.lastRedirectMsg[1] if threadData.lastRedirectMsg and threadData.lastRedirectMsg[0] == threadData.lastRequestUID else None, re.DOTALL | re.IGNORECASE)
|
||||||
or extractRegexResult(check, threadData.lastRedirectMsg[1] \
|
|
||||||
if threadData.lastRedirectMsg and threadData.lastRedirectMsg[0] == \
|
|
||||||
threadData.lastRequestUID else None, re.DOTALL | re.IGNORECASE)
|
|
||||||
|
|
||||||
if output:
|
if output:
|
||||||
result = output == "1"
|
result = output == "1"
|
||||||
@@ -1501,6 +1500,10 @@ def checkConnection(suppressOutput=False):
|
|||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def checkInternet():
|
||||||
|
content = Request.getPage(url=CHECK_INTERNET_ADDRESS, checking=True)[0]
|
||||||
|
return CHECK_INTERNET_VALUE in (content or "")
|
||||||
|
|
||||||
def setVerbosity(): # Cross-linked function
|
def setVerbosity(): # Cross-linked function
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ See the file 'doc/COPYING' for copying permission
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
import time
|
||||||
|
|
||||||
from lib.controller.action import action
|
from lib.controller.action import action
|
||||||
from lib.controller.checks import checkSqlInjection
|
from lib.controller.checks import checkSqlInjection
|
||||||
@@ -15,6 +16,7 @@ from lib.controller.checks import checkStability
|
|||||||
from lib.controller.checks import checkString
|
from lib.controller.checks import checkString
|
||||||
from lib.controller.checks import checkRegexp
|
from lib.controller.checks import checkRegexp
|
||||||
from lib.controller.checks import checkConnection
|
from lib.controller.checks import checkConnection
|
||||||
|
from lib.controller.checks import checkInternet
|
||||||
from lib.controller.checks import checkNullConnection
|
from lib.controller.checks import checkNullConnection
|
||||||
from lib.controller.checks import checkWaf
|
from lib.controller.checks import checkWaf
|
||||||
from lib.controller.checks import heuristicCheckSqlInjection
|
from lib.controller.checks import heuristicCheckSqlInjection
|
||||||
@@ -276,6 +278,21 @@ def start():
|
|||||||
|
|
||||||
for targetUrl, targetMethod, targetData, targetCookie, targetHeaders in kb.targets:
|
for targetUrl, targetMethod, targetData, targetCookie, targetHeaders in kb.targets:
|
||||||
try:
|
try:
|
||||||
|
|
||||||
|
if conf.checkInternet:
|
||||||
|
infoMsg = "[INFO] checking for Internet connection"
|
||||||
|
logger.info(infoMsg)
|
||||||
|
|
||||||
|
if not checkInternet():
|
||||||
|
warnMsg = "[%s] [WARNING] no connection detected" % time.strftime("%X")
|
||||||
|
dataToStdout(warnMsg)
|
||||||
|
|
||||||
|
while not checkInternet():
|
||||||
|
dataToStdout('.')
|
||||||
|
time.sleep(5)
|
||||||
|
|
||||||
|
dataToStdout("\n")
|
||||||
|
|
||||||
conf.url = targetUrl
|
conf.url = targetUrl
|
||||||
conf.method = targetMethod.upper() if targetMethod else targetMethod
|
conf.method = targetMethod.upper() if targetMethod else targetMethod
|
||||||
conf.data = targetData
|
conf.data = targetData
|
||||||
|
|||||||
@@ -858,7 +858,7 @@ class Agent(object):
|
|||||||
if expression.find(queries[Backend.getIdentifiedDbms()].limitstring.query) > 0:
|
if expression.find(queries[Backend.getIdentifiedDbms()].limitstring.query) > 0:
|
||||||
_ = expression.index(queries[Backend.getIdentifiedDbms()].limitstring.query)
|
_ = expression.index(queries[Backend.getIdentifiedDbms()].limitstring.query)
|
||||||
else:
|
else:
|
||||||
_ = expression.index("LIMIT ")
|
_ = re.search(r"\bLIMIT\b", expression, re.I).start()
|
||||||
expression = expression[:_]
|
expression = expression[:_]
|
||||||
|
|
||||||
elif Backend.getIdentifiedDbms() in (DBMS.MSSQL, DBMS.SYBASE):
|
elif Backend.getIdentifiedDbms() in (DBMS.MSSQL, DBMS.SYBASE):
|
||||||
|
|||||||
@@ -1196,8 +1196,7 @@ def cleanQuery(query):
|
|||||||
|
|
||||||
for sqlStatements in SQL_STATEMENTS.values():
|
for sqlStatements in SQL_STATEMENTS.values():
|
||||||
for sqlStatement in sqlStatements:
|
for sqlStatement in sqlStatements:
|
||||||
sqlStatementEsc = sqlStatement.replace("(", "\\(")
|
queryMatch = re.search("(?i)\b(%s)\b" % sqlStatement.replace("(", "").replace(")", "").strip(), query)
|
||||||
queryMatch = re.search("(%s)" % sqlStatementEsc, query, re.I)
|
|
||||||
|
|
||||||
if queryMatch and "sys_exec" not in query:
|
if queryMatch and "sys_exec" not in query:
|
||||||
retVal = retVal.replace(queryMatch.group(1), sqlStatement.upper())
|
retVal = retVal.replace(queryMatch.group(1), sqlStatement.upper())
|
||||||
|
|||||||
@@ -232,7 +232,7 @@ def _feedTargetsDict(reqFile, addedTargetUrls):
|
|||||||
reqResList = re.finditer(BURP_REQUEST_REGEX, content, re.I | re.S)
|
reqResList = re.finditer(BURP_REQUEST_REGEX, content, re.I | re.S)
|
||||||
|
|
||||||
for match in reqResList:
|
for match in reqResList:
|
||||||
request = match if isinstance(match, basestring) else match.group(1)
|
request = match if isinstance(match, basestring) else match.group(0)
|
||||||
request = re.sub(r"\A[^\w]+", "", request)
|
request = re.sub(r"\A[^\w]+", "", request)
|
||||||
|
|
||||||
schemePort = re.search(r"(http[\w]*)\:\/\/.*?\:([\d]+).+?={10,}", request, re.I | re.S)
|
schemePort = re.search(r"(http[\w]*)\:\/\/.*?\:([\d]+).+?={10,}", request, re.I | re.S)
|
||||||
@@ -240,6 +240,7 @@ def _feedTargetsDict(reqFile, addedTargetUrls):
|
|||||||
if schemePort:
|
if schemePort:
|
||||||
scheme = schemePort.group(1)
|
scheme = schemePort.group(1)
|
||||||
port = schemePort.group(2)
|
port = schemePort.group(2)
|
||||||
|
request = re.sub(r"\n=+\Z", "", request.split(schemePort.group(0))[-1].lstrip())
|
||||||
else:
|
else:
|
||||||
scheme, port = None, None
|
scheme, port = None, None
|
||||||
|
|
||||||
@@ -484,7 +485,7 @@ def _setRequestFromFile():
|
|||||||
conf.requestFile = safeExpandUser(conf.requestFile)
|
conf.requestFile = safeExpandUser(conf.requestFile)
|
||||||
|
|
||||||
if not os.path.isfile(conf.requestFile):
|
if not os.path.isfile(conf.requestFile):
|
||||||
errMsg = "the specified HTTP request file "
|
errMsg = "specified HTTP request file '%s' " % conf.requestFile
|
||||||
errMsg += "does not exist"
|
errMsg += "does not exist"
|
||||||
raise SqlmapFilePathException(errMsg)
|
raise SqlmapFilePathException(errMsg)
|
||||||
|
|
||||||
@@ -1901,6 +1902,7 @@ def _setKnowledgeBaseAttributes(flushAll=True):
|
|||||||
kb.dnsMode = False
|
kb.dnsMode = False
|
||||||
kb.dnsTest = None
|
kb.dnsTest = None
|
||||||
kb.docRoot = None
|
kb.docRoot = None
|
||||||
|
kb.droppingRequests = False
|
||||||
kb.dumpColumns = None
|
kb.dumpColumns = None
|
||||||
kb.dumpTable = None
|
kb.dumpTable = None
|
||||||
kb.dumpKeyboardInterrupt = False
|
kb.dumpKeyboardInterrupt = False
|
||||||
|
|||||||
@@ -196,6 +196,7 @@ optDict = {
|
|||||||
"batch": "boolean",
|
"batch": "boolean",
|
||||||
"binaryFields": "string",
|
"binaryFields": "string",
|
||||||
"charset": "string",
|
"charset": "string",
|
||||||
|
"checkInternet": "boolean",
|
||||||
"crawlDepth": "integer",
|
"crawlDepth": "integer",
|
||||||
"crawlExclude": "string",
|
"crawlExclude": "string",
|
||||||
"csvDel": "string",
|
"csvDel": "string",
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ from lib.core.enums import DBMS_DIRECTORY_NAME
|
|||||||
from lib.core.enums import OS
|
from lib.core.enums import OS
|
||||||
|
|
||||||
# sqlmap version (<major>.<minor>.<month>.<monthly commit>)
|
# sqlmap version (<major>.<minor>.<month>.<monthly commit>)
|
||||||
VERSION = "1.1.5.0"
|
VERSION = "1.1.6.0"
|
||||||
TYPE = "dev" if VERSION.count('.') > 2 and VERSION.split('.')[-1] != '0' else "stable"
|
TYPE = "dev" if VERSION.count('.') > 2 and VERSION.split('.')[-1] != '0' else "stable"
|
||||||
TYPE_COLORS = {"dev": 33, "stable": 90, "pip": 34}
|
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)
|
VERSION_STRING = "sqlmap/%s#%s" % ('.'.join(VERSION.split('.')[:-1]) if VERSION.count('.') > 2 and VERSION.split('.')[-1] == '0' else VERSION, TYPE)
|
||||||
@@ -490,6 +490,12 @@ IDS_WAF_CHECK_PAYLOAD = "AND 1=1 UNION ALL SELECT 1,NULL,'<script>alert(\"XSS\")
|
|||||||
# Data inside shellcodeexec to be filled with random string
|
# Data inside shellcodeexec to be filled with random string
|
||||||
SHELLCODEEXEC_RANDOM_STRING_MARKER = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
|
SHELLCODEEXEC_RANDOM_STRING_MARKER = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
|
||||||
|
|
||||||
|
# Generic address for checking the Internet connection while using switch --check-internet
|
||||||
|
CHECK_INTERNET_ADDRESS = "http://ipinfo.io/"
|
||||||
|
|
||||||
|
# Value to look for in response to CHECK_INTERNET_ADDRESS
|
||||||
|
CHECK_INTERNET_VALUE = "IP Address Details"
|
||||||
|
|
||||||
# Vectors used for provoking specific WAF/IPS/IDS behavior(s)
|
# Vectors used for provoking specific WAF/IPS/IDS behavior(s)
|
||||||
WAF_ATTACK_VECTORS = (
|
WAF_ATTACK_VECTORS = (
|
||||||
"", # NIL
|
"", # NIL
|
||||||
|
|||||||
@@ -136,7 +136,7 @@ def _setRequestParams():
|
|||||||
|
|
||||||
if choice == 'Q':
|
if choice == 'Q':
|
||||||
raise SqlmapUserQuitException
|
raise SqlmapUserQuitException
|
||||||
elif choice == 'N':
|
elif choice == 'Y':
|
||||||
conf.data = getattr(conf.data, UNENCODED_ORIGINAL_VALUE, conf.data)
|
conf.data = getattr(conf.data, UNENCODED_ORIGINAL_VALUE, conf.data)
|
||||||
conf.data = conf.data.replace(CUSTOM_INJECTION_MARK_CHAR, ASTERISK_MARKER)
|
conf.data = conf.data.replace(CUSTOM_INJECTION_MARK_CHAR, ASTERISK_MARKER)
|
||||||
conf.data = re.sub(r'("(?P<name>[^"]+)"\s*:\s*"[^"]+)"', functools.partial(process, repl=r'\g<1>%s"' % CUSTOM_INJECTION_MARK_CHAR), conf.data)
|
conf.data = re.sub(r'("(?P<name>[^"]+)"\s*:\s*"[^"]+)"', functools.partial(process, repl=r'\g<1>%s"' % CUSTOM_INJECTION_MARK_CHAR), conf.data)
|
||||||
@@ -156,7 +156,7 @@ def _setRequestParams():
|
|||||||
|
|
||||||
if choice == 'Q':
|
if choice == 'Q':
|
||||||
raise SqlmapUserQuitException
|
raise SqlmapUserQuitException
|
||||||
elif choice == 'N':
|
elif choice == 'Y':
|
||||||
conf.data = getattr(conf.data, UNENCODED_ORIGINAL_VALUE, conf.data)
|
conf.data = getattr(conf.data, UNENCODED_ORIGINAL_VALUE, conf.data)
|
||||||
conf.data = conf.data.replace(CUSTOM_INJECTION_MARK_CHAR, ASTERISK_MARKER)
|
conf.data = conf.data.replace(CUSTOM_INJECTION_MARK_CHAR, ASTERISK_MARKER)
|
||||||
conf.data = re.sub(r"('(?P<name>[^']+)'\s*:\s*'[^']+)'", functools.partial(process, repl=r"\g<1>%s'" % CUSTOM_INJECTION_MARK_CHAR), conf.data)
|
conf.data = re.sub(r"('(?P<name>[^']+)'\s*:\s*'[^']+)'", functools.partial(process, repl=r"\g<1>%s'" % CUSTOM_INJECTION_MARK_CHAR), conf.data)
|
||||||
@@ -170,7 +170,7 @@ def _setRequestParams():
|
|||||||
|
|
||||||
if choice == 'Q':
|
if choice == 'Q':
|
||||||
raise SqlmapUserQuitException
|
raise SqlmapUserQuitException
|
||||||
elif choice == 'N':
|
elif choice == 'Y':
|
||||||
conf.data = conf.data.replace(CUSTOM_INJECTION_MARK_CHAR, ASTERISK_MARKER)
|
conf.data = conf.data.replace(CUSTOM_INJECTION_MARK_CHAR, ASTERISK_MARKER)
|
||||||
conf.data = re.sub(r"(=[^%s]+)" % DEFAULT_GET_POST_DELIMITER, r"\g<1>%s" % CUSTOM_INJECTION_MARK_CHAR, conf.data)
|
conf.data = re.sub(r"(=[^%s]+)" % DEFAULT_GET_POST_DELIMITER, r"\g<1>%s" % CUSTOM_INJECTION_MARK_CHAR, conf.data)
|
||||||
kb.postHint = POST_HINT.ARRAY_LIKE
|
kb.postHint = POST_HINT.ARRAY_LIKE
|
||||||
@@ -182,7 +182,7 @@ def _setRequestParams():
|
|||||||
|
|
||||||
if choice == 'Q':
|
if choice == 'Q':
|
||||||
raise SqlmapUserQuitException
|
raise SqlmapUserQuitException
|
||||||
elif choice == 'N':
|
elif choice == 'Y':
|
||||||
conf.data = getattr(conf.data, UNENCODED_ORIGINAL_VALUE, conf.data)
|
conf.data = getattr(conf.data, UNENCODED_ORIGINAL_VALUE, conf.data)
|
||||||
conf.data = conf.data.replace(CUSTOM_INJECTION_MARK_CHAR, ASTERISK_MARKER)
|
conf.data = conf.data.replace(CUSTOM_INJECTION_MARK_CHAR, ASTERISK_MARKER)
|
||||||
conf.data = re.sub(r"(<(?P<name>[^>]+)( [^<]*)?>)([^<]+)(</\2)", functools.partial(process, repl=r"\g<1>\g<4>%s\g<5>" % CUSTOM_INJECTION_MARK_CHAR), conf.data)
|
conf.data = re.sub(r"(<(?P<name>[^>]+)( [^<]*)?>)([^<]+)(</\2)", functools.partial(process, repl=r"\g<1>\g<4>%s\g<5>" % CUSTOM_INJECTION_MARK_CHAR), conf.data)
|
||||||
@@ -195,7 +195,7 @@ def _setRequestParams():
|
|||||||
|
|
||||||
if choice == 'Q':
|
if choice == 'Q':
|
||||||
raise SqlmapUserQuitException
|
raise SqlmapUserQuitException
|
||||||
elif choice == 'N':
|
elif choice == 'Y':
|
||||||
conf.data = getattr(conf.data, UNENCODED_ORIGINAL_VALUE, conf.data)
|
conf.data = getattr(conf.data, UNENCODED_ORIGINAL_VALUE, conf.data)
|
||||||
conf.data = conf.data.replace(CUSTOM_INJECTION_MARK_CHAR, ASTERISK_MARKER)
|
conf.data = conf.data.replace(CUSTOM_INJECTION_MARK_CHAR, ASTERISK_MARKER)
|
||||||
conf.data = re.sub(r"(?si)((Content-Disposition[^\n]+?name\s*=\s*[\"'](?P<name>[^\n]+?)[\"']).+?)(((\r)?\n)+--)", functools.partial(process, repl=r"\g<1>%s\g<4>" % CUSTOM_INJECTION_MARK_CHAR), conf.data)
|
conf.data = re.sub(r"(?si)((Content-Disposition[^\n]+?name\s*=\s*[\"'](?P<name>[^\n]+?)[\"']).+?)(((\r)?\n)+--)", functools.partial(process, repl=r"\g<1>%s\g<4>" % CUSTOM_INJECTION_MARK_CHAR), conf.data)
|
||||||
|
|||||||
@@ -637,6 +637,10 @@ def cmdLineParser(argv=None):
|
|||||||
general.add_option("--charset", dest="charset",
|
general.add_option("--charset", dest="charset",
|
||||||
help="Force character encoding used for data retrieval")
|
help="Force character encoding used for data retrieval")
|
||||||
|
|
||||||
|
general.add_option("--check-internet", dest="checkInternet",
|
||||||
|
action="store_true",
|
||||||
|
help="Check Internet connection before assessing the target")
|
||||||
|
|
||||||
general.add_option("--crawl", dest="crawlDepth", type="int",
|
general.add_option("--crawl", dest="crawlDepth", type="int",
|
||||||
help="Crawl the website starting from the target URL")
|
help="Crawl the website starting from the target URL")
|
||||||
|
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ def forgeHeaders(items=None):
|
|||||||
if cookie.domain_specified and not conf.hostname.endswith(cookie.domain):
|
if cookie.domain_specified and not conf.hostname.endswith(cookie.domain):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if ("%s=" % getUnicode(cookie.name)) in headers[HTTP_HEADER.COOKIE]:
|
if ("%s=" % getUnicode(cookie.name)) in getUnicode(headers[HTTP_HEADER.COOKIE]):
|
||||||
if conf.loadCookies:
|
if conf.loadCookies:
|
||||||
conf.httpHeaders = filter(None, ((item if item[0] != HTTP_HEADER.COOKIE else None) for item in conf.httpHeaders))
|
conf.httpHeaders = filter(None, ((item if item[0] != HTTP_HEADER.COOKIE else None) for item in conf.httpHeaders))
|
||||||
elif kb.mergeCookies is None:
|
elif kb.mergeCookies is None:
|
||||||
@@ -123,7 +123,7 @@ def forgeHeaders(items=None):
|
|||||||
|
|
||||||
return headers
|
return headers
|
||||||
|
|
||||||
def parseResponse(page, headers):
|
def parseResponse(page, headers, status=None):
|
||||||
"""
|
"""
|
||||||
@param page: the page to parse to feed the knowledge base htmlFp
|
@param page: the page to parse to feed the knowledge base htmlFp
|
||||||
(back-end DBMS fingerprint based upon DBMS error messages return
|
(back-end DBMS fingerprint based upon DBMS error messages return
|
||||||
@@ -135,7 +135,7 @@ def parseResponse(page, headers):
|
|||||||
headersParser(headers)
|
headersParser(headers)
|
||||||
|
|
||||||
if page:
|
if page:
|
||||||
htmlParser(page)
|
htmlParser(page if not status else "%s\n\n%s" % (status, page))
|
||||||
|
|
||||||
@cachedmethod
|
@cachedmethod
|
||||||
def checkCharEncoding(encoding, warn=True):
|
def checkCharEncoding(encoding, warn=True):
|
||||||
@@ -204,7 +204,7 @@ def checkCharEncoding(encoding, warn=True):
|
|||||||
# Reference: http://philip.html5.org/data/charsets-2.html
|
# Reference: http://philip.html5.org/data/charsets-2.html
|
||||||
if encoding in translate:
|
if encoding in translate:
|
||||||
encoding = translate[encoding]
|
encoding = translate[encoding]
|
||||||
elif encoding in ("null", "{charset}", "*") or not re.search(r"\w", encoding):
|
elif encoding in ("null", "{charset}", "charset", "*") or not re.search(r"\w", encoding):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# Reference: http://www.iana.org/assignments/character-sets
|
# Reference: http://www.iana.org/assignments/character-sets
|
||||||
@@ -340,12 +340,12 @@ def decodePage(page, contentEncoding, contentType):
|
|||||||
|
|
||||||
return page
|
return page
|
||||||
|
|
||||||
def processResponse(page, responseHeaders):
|
def processResponse(page, responseHeaders, status=None):
|
||||||
kb.processResponseCounter += 1
|
kb.processResponseCounter += 1
|
||||||
|
|
||||||
page = page or ""
|
page = page or ""
|
||||||
|
|
||||||
parseResponse(page, responseHeaders if kb.processResponseCounter < PARSE_HEADERS_LIMIT else None)
|
parseResponse(page, responseHeaders if kb.processResponseCounter < PARSE_HEADERS_LIMIT else None, status)
|
||||||
|
|
||||||
if not kb.tableFrom and Backend.getIdentifiedDbms() in (DBMS.ACCESS,):
|
if not kb.tableFrom and Backend.getIdentifiedDbms() in (DBMS.ACCESS,):
|
||||||
kb.tableFrom = extractRegexResult(SELECT_FROM_TABLE_REGEX, page)
|
kb.tableFrom = extractRegexResult(SELECT_FROM_TABLE_REGEX, page)
|
||||||
|
|||||||
@@ -105,6 +105,7 @@ from lib.core.settings import RANDOM_STRING_MARKER
|
|||||||
from lib.core.settings import REPLACEMENT_MARKER
|
from lib.core.settings import REPLACEMENT_MARKER
|
||||||
from lib.core.settings import TEXT_CONTENT_TYPE_REGEX
|
from lib.core.settings import TEXT_CONTENT_TYPE_REGEX
|
||||||
from lib.core.settings import UNENCODED_ORIGINAL_VALUE
|
from lib.core.settings import UNENCODED_ORIGINAL_VALUE
|
||||||
|
from lib.core.settings import UNICODE_ENCODING
|
||||||
from lib.core.settings import URI_HTTP_HEADER
|
from lib.core.settings import URI_HTTP_HEADER
|
||||||
from lib.core.settings import WARN_TIME_STDEV
|
from lib.core.settings import WARN_TIME_STDEV
|
||||||
from lib.request.basic import decodePage
|
from lib.request.basic import decodePage
|
||||||
@@ -256,6 +257,7 @@ class Connect(object):
|
|||||||
refreshing = kwargs.get("refreshing", False)
|
refreshing = kwargs.get("refreshing", False)
|
||||||
retrying = kwargs.get("retrying", False)
|
retrying = kwargs.get("retrying", False)
|
||||||
crawling = kwargs.get("crawling", False)
|
crawling = kwargs.get("crawling", False)
|
||||||
|
checking = kwargs.get("checking", False)
|
||||||
skipRead = kwargs.get("skipRead", False)
|
skipRead = kwargs.get("skipRead", False)
|
||||||
|
|
||||||
if multipart:
|
if multipart:
|
||||||
@@ -277,13 +279,17 @@ class Connect(object):
|
|||||||
# url splitted with space char while urlencoding it in the later phase
|
# url splitted with space char while urlencoding it in the later phase
|
||||||
url = url.replace(" ", "%20")
|
url = url.replace(" ", "%20")
|
||||||
|
|
||||||
|
if "://" not in url:
|
||||||
|
url = "http://%s" % url
|
||||||
|
|
||||||
conn = None
|
conn = None
|
||||||
code = None
|
|
||||||
page = None
|
page = None
|
||||||
|
code = None
|
||||||
|
status = None
|
||||||
|
|
||||||
_ = urlparse.urlsplit(url)
|
_ = urlparse.urlsplit(url)
|
||||||
requestMsg = u"HTTP request [#%d]:\n%s " % (threadData.lastRequestUID, method or (HTTPMETHOD.POST if post is not None else HTTPMETHOD.GET))
|
requestMsg = u"HTTP request [#%d]:\n%s " % (threadData.lastRequestUID, method or (HTTPMETHOD.POST if post is not None else HTTPMETHOD.GET))
|
||||||
requestMsg += ("%s%s" % (_.path or "/", ("?%s" % _.query) if _.query else "")) if not any((refreshing, crawling)) else url
|
requestMsg += ("%s%s" % (_.path or "/", ("?%s" % _.query) if _.query else "")) if not any((refreshing, crawling, checking)) else url
|
||||||
responseMsg = u"HTTP response "
|
responseMsg = u"HTTP response "
|
||||||
requestHeaders = u""
|
requestHeaders = u""
|
||||||
responseHeaders = None
|
responseHeaders = None
|
||||||
@@ -305,7 +311,7 @@ class Connect(object):
|
|||||||
params = urlencode(params)
|
params = urlencode(params)
|
||||||
url = "%s?%s" % (url, params)
|
url = "%s?%s" % (url, params)
|
||||||
|
|
||||||
elif any((refreshing, crawling)):
|
elif any((refreshing, crawling, checking)):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
elif target:
|
elif target:
|
||||||
@@ -543,6 +549,9 @@ class Connect(object):
|
|||||||
page = None
|
page = None
|
||||||
responseHeaders = None
|
responseHeaders = None
|
||||||
|
|
||||||
|
if checking:
|
||||||
|
return None, None, None
|
||||||
|
|
||||||
try:
|
try:
|
||||||
page = ex.read() if not skipRead else None
|
page = ex.read() if not skipRead else None
|
||||||
responseHeaders = ex.info()
|
responseHeaders = ex.info()
|
||||||
@@ -561,12 +570,12 @@ class Connect(object):
|
|||||||
page = page if isinstance(page, unicode) else getUnicode(page)
|
page = page if isinstance(page, unicode) else getUnicode(page)
|
||||||
|
|
||||||
code = ex.code
|
code = ex.code
|
||||||
|
status = getUnicode(ex.msg)
|
||||||
|
|
||||||
kb.originalCode = kb.originalCode or code
|
kb.originalCode = kb.originalCode or code
|
||||||
threadData.lastHTTPError = (threadData.lastRequestUID, code)
|
threadData.lastHTTPError = (threadData.lastRequestUID, code, status)
|
||||||
kb.httpErrorCodes[code] = kb.httpErrorCodes.get(code, 0) + 1
|
kb.httpErrorCodes[code] = kb.httpErrorCodes.get(code, 0) + 1
|
||||||
|
|
||||||
status = getUnicode(ex.msg)
|
|
||||||
responseMsg += "[#%d] (%d %s):\n" % (threadData.lastRequestUID, code, status)
|
responseMsg += "[#%d] (%d %s):\n" % (threadData.lastRequestUID, code, status)
|
||||||
|
|
||||||
if responseHeaders:
|
if responseHeaders:
|
||||||
@@ -595,7 +604,6 @@ class Connect(object):
|
|||||||
else:
|
else:
|
||||||
debugMsg = "page not found (%d)" % code
|
debugMsg = "page not found (%d)" % code
|
||||||
singleTimeLogMessage(debugMsg, logging.DEBUG)
|
singleTimeLogMessage(debugMsg, logging.DEBUG)
|
||||||
processResponse(page, responseHeaders)
|
|
||||||
elif ex.code == httplib.GATEWAY_TIMEOUT:
|
elif ex.code == httplib.GATEWAY_TIMEOUT:
|
||||||
if ignoreTimeout:
|
if ignoreTimeout:
|
||||||
return None if not conf.ignoreTimeouts else "", None, None
|
return None if not conf.ignoreTimeouts else "", None, None
|
||||||
@@ -617,7 +625,9 @@ class Connect(object):
|
|||||||
except (urllib2.URLError, socket.error, socket.timeout, httplib.HTTPException, struct.error, binascii.Error, ProxyError, SqlmapCompressionException, WebSocketException, TypeError):
|
except (urllib2.URLError, socket.error, socket.timeout, httplib.HTTPException, struct.error, binascii.Error, ProxyError, SqlmapCompressionException, WebSocketException, TypeError):
|
||||||
tbMsg = traceback.format_exc()
|
tbMsg = traceback.format_exc()
|
||||||
|
|
||||||
if "no host given" in tbMsg:
|
if checking:
|
||||||
|
return None, None, None
|
||||||
|
elif "no host given" in tbMsg:
|
||||||
warnMsg = "invalid URL address used (%s)" % repr(url)
|
warnMsg = "invalid URL address used (%s)" % repr(url)
|
||||||
raise SqlmapSyntaxException(warnMsg)
|
raise SqlmapSyntaxException(warnMsg)
|
||||||
elif "forcibly closed" in tbMsg or "Connection is already closed" in tbMsg:
|
elif "forcibly closed" in tbMsg or "Connection is already closed" in tbMsg:
|
||||||
@@ -632,6 +642,7 @@ class Connect(object):
|
|||||||
|
|
||||||
if kb.testMode and kb.testType not in (None, PAYLOAD.TECHNIQUE.TIME, PAYLOAD.TECHNIQUE.STACKED):
|
if kb.testMode and kb.testType not in (None, PAYLOAD.TECHNIQUE.TIME, PAYLOAD.TECHNIQUE.STACKED):
|
||||||
singleTimeWarnMessage("there is a possibility that the target (or WAF/IPS/IDS) is dropping 'suspicious' requests")
|
singleTimeWarnMessage("there is a possibility that the target (or WAF/IPS/IDS) is dropping 'suspicious' requests")
|
||||||
|
kb.droppingRequests = True
|
||||||
warnMsg = "connection timed out to the target URL"
|
warnMsg = "connection timed out to the target URL"
|
||||||
elif "Connection reset" in tbMsg:
|
elif "Connection reset" in tbMsg:
|
||||||
if not conf.disablePrecon:
|
if not conf.disablePrecon:
|
||||||
@@ -640,6 +651,7 @@ class Connect(object):
|
|||||||
|
|
||||||
if kb.testMode:
|
if kb.testMode:
|
||||||
singleTimeWarnMessage("there is a possibility that the target (or WAF/IPS/IDS) is resetting 'suspicious' requests")
|
singleTimeWarnMessage("there is a possibility that the target (or WAF/IPS/IDS) is resetting 'suspicious' requests")
|
||||||
|
kb.droppingRequests = True
|
||||||
warnMsg = "connection reset to the target URL"
|
warnMsg = "connection reset to the target URL"
|
||||||
elif "URLError" in tbMsg or "error" in tbMsg:
|
elif "URLError" in tbMsg or "error" in tbMsg:
|
||||||
warnMsg = "unable to connect to the target URL"
|
warnMsg = "unable to connect to the target URL"
|
||||||
@@ -709,7 +721,7 @@ class Connect(object):
|
|||||||
page = getUnicode(page)
|
page = getUnicode(page)
|
||||||
socket.setdefaulttimeout(conf.timeout)
|
socket.setdefaulttimeout(conf.timeout)
|
||||||
|
|
||||||
processResponse(page, responseHeaders)
|
processResponse(page, responseHeaders, status)
|
||||||
|
|
||||||
if conn and getattr(conn, "redurl", None):
|
if conn and getattr(conn, "redurl", None):
|
||||||
_ = urlparse.urlsplit(conn.redurl)
|
_ = urlparse.urlsplit(conn.redurl)
|
||||||
@@ -1032,7 +1044,7 @@ class Connect(object):
|
|||||||
conf.evalCode = conf.evalCode.replace(EVALCODE_KEYWORD_SUFFIX, "")
|
conf.evalCode = conf.evalCode.replace(EVALCODE_KEYWORD_SUFFIX, "")
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
conf.evalCode = conf.evalCode.replace(ex.text.strip(), replacement)
|
conf.evalCode = conf.evalCode.replace(getUnicode(ex.text.strip(), UNICODE_ENCODING), replacement)
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
|
|
||||||
@@ -1051,7 +1063,7 @@ class Connect(object):
|
|||||||
if name != "__builtins__" and originals.get(name, "") != value:
|
if name != "__builtins__" and originals.get(name, "") != value:
|
||||||
if isinstance(value, (basestring, int)):
|
if isinstance(value, (basestring, int)):
|
||||||
found = False
|
found = False
|
||||||
value = getUnicode(value)
|
value = getUnicode(value, UNICODE_ENCODING)
|
||||||
|
|
||||||
if kb.postHint and re.search(r"\b%s\b" % re.escape(name), post or ""):
|
if kb.postHint and re.search(r"\b%s\b" % re.escape(name), post or ""):
|
||||||
if kb.postHint in (POST_HINT.XML, POST_HINT.SOAP):
|
if kb.postHint in (POST_HINT.XML, POST_HINT.SOAP):
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ from lib.core.common import isNumPosStrValue
|
|||||||
from lib.core.common import listToStrValue
|
from lib.core.common import listToStrValue
|
||||||
from lib.core.common import readInput
|
from lib.core.common import readInput
|
||||||
from lib.core.common import unArrayizeValue
|
from lib.core.common import unArrayizeValue
|
||||||
|
from lib.core.common import wasLastResponseHTTPError
|
||||||
from lib.core.convert import hexdecode
|
from lib.core.convert import hexdecode
|
||||||
from lib.core.convert import htmlunescape
|
from lib.core.convert import htmlunescape
|
||||||
from lib.core.data import conf
|
from lib.core.data import conf
|
||||||
@@ -97,8 +98,8 @@ def _oneShotErrorUse(expression, field=None, chunkTest=False):
|
|||||||
if retVal is None or partialValue:
|
if retVal is None or partialValue:
|
||||||
try:
|
try:
|
||||||
while True:
|
while True:
|
||||||
check = r"%s(?P<result>.*?)%s" % (kb.chars.start, kb.chars.stop)
|
check = r"(?si)%s(?P<result>.*?)%s" % (kb.chars.start, kb.chars.stop)
|
||||||
trimcheck = r"%s(?P<result>[^<\n]*)" % (kb.chars.start)
|
trimcheck = r"(?si)%s(?P<result>[^<\n]*)" % kb.chars.start
|
||||||
|
|
||||||
if field:
|
if field:
|
||||||
nulledCastedField = agent.nullAndCastField(field)
|
nulledCastedField = agent.nullAndCastField(field)
|
||||||
@@ -130,23 +131,19 @@ def _oneShotErrorUse(expression, field=None, chunkTest=False):
|
|||||||
# Parse the returned page to get the exact error-based
|
# Parse the returned page to get the exact error-based
|
||||||
# SQL injection output
|
# SQL injection output
|
||||||
output = reduce(lambda x, y: x if x is not None else y, (\
|
output = reduce(lambda x, y: x if x is not None else y, (\
|
||||||
extractRegexResult(check, page, re.DOTALL | re.IGNORECASE), \
|
extractRegexResult(check, page), \
|
||||||
extractRegexResult(check, listToStrValue([headers[header] for header in headers if header.lower() != HTTP_HEADER.URI.lower()] \
|
extractRegexResult(check, threadData.lastHTTPError[2] if wasLastResponseHTTPError() else None), \
|
||||||
if headers else None), re.DOTALL | re.IGNORECASE), \
|
extractRegexResult(check, listToStrValue([headers[header] for header in headers if header.lower() != HTTP_HEADER.URI.lower()] if headers else None)), \
|
||||||
extractRegexResult(check, threadData.lastRedirectMsg[1] \
|
extractRegexResult(check, threadData.lastRedirectMsg[1] if threadData.lastRedirectMsg and threadData.lastRedirectMsg[0] == threadData.lastRequestUID else None)), \
|
||||||
if threadData.lastRedirectMsg and threadData.lastRedirectMsg[0] == \
|
|
||||||
threadData.lastRequestUID else None, re.DOTALL | re.IGNORECASE)), \
|
|
||||||
None)
|
None)
|
||||||
|
|
||||||
if output is not None:
|
if output is not None:
|
||||||
output = getUnicode(output)
|
output = getUnicode(output)
|
||||||
else:
|
else:
|
||||||
trimmed = extractRegexResult(trimcheck, page, re.DOTALL | re.IGNORECASE) \
|
trimmed = extractRegexResult(trimcheck, page) \
|
||||||
or extractRegexResult(trimcheck, listToStrValue([headers[header] for header in headers if header.lower() != HTTP_HEADER.URI.lower()] \
|
or extractRegexResult(trimcheck, threadData.lastHTTPError[2] if wasLastResponseHTTPError() else None) \
|
||||||
if headers else None), re.DOTALL | re.IGNORECASE) \
|
or extractRegexResult(trimcheck, listToStrValue([headers[header] for header in headers if header.lower() != HTTP_HEADER.URI.lower()] if headers else None)) \
|
||||||
or extractRegexResult(trimcheck, threadData.lastRedirectMsg[1] \
|
or extractRegexResult(trimcheck, threadData.lastRedirectMsg[1] if threadData.lastRedirectMsg and threadData.lastRedirectMsg[0] == threadData.lastRequestUID else None)
|
||||||
if threadData.lastRedirectMsg and threadData.lastRedirectMsg[0] == \
|
|
||||||
threadData.lastRequestUID else None, re.DOTALL | re.IGNORECASE)
|
|
||||||
|
|
||||||
if trimmed:
|
if trimmed:
|
||||||
if not chunkTest:
|
if not chunkTest:
|
||||||
@@ -205,8 +202,8 @@ def _oneShotErrorUse(expression, field=None, chunkTest=False):
|
|||||||
hashDBWrite(expression, retVal)
|
hashDBWrite(expression, retVal)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
_ = "%s(?P<result>.*?)%s" % (kb.chars.start, kb.chars.stop)
|
_ = "(?si)%s(?P<result>.*?)%s" % (kb.chars.start, kb.chars.stop)
|
||||||
retVal = extractRegexResult(_, retVal, re.DOTALL | re.IGNORECASE) or retVal
|
retVal = extractRegexResult(_, retVal) or retVal
|
||||||
|
|
||||||
return safecharencode(retVal) if kb.safeCharEncode else retVal
|
return safecharencode(retVal) if kb.safeCharEncode else retVal
|
||||||
|
|
||||||
|
|||||||
@@ -37,8 +37,10 @@ class Connector(GenericConnector):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
self.connector = pymysql.connect(host=self.hostname, user=self.user, passwd=self.password, db=self.db, port=self.port, connect_timeout=conf.timeout, use_unicode=True)
|
self.connector = pymysql.connect(host=self.hostname, user=self.user, passwd=self.password, db=self.db, port=self.port, connect_timeout=conf.timeout, use_unicode=True)
|
||||||
except (pymysql.OperationalError, pymysql.InternalError, struct.error), msg:
|
except (pymysql.OperationalError, pymysql.InternalError), msg:
|
||||||
raise SqlmapConnectionException(msg[1])
|
raise SqlmapConnectionException(msg[1])
|
||||||
|
except struct.error, msg:
|
||||||
|
raise SqlmapConnectionException(msg)
|
||||||
|
|
||||||
self.initCursor()
|
self.initCursor()
|
||||||
self.printConnected()
|
self.printConnected()
|
||||||
|
|||||||
@@ -424,7 +424,8 @@ class Users:
|
|||||||
|
|
||||||
# In Firebird we get one letter for each privilege
|
# In Firebird we get one letter for each privilege
|
||||||
elif Backend.isDbms(DBMS.FIREBIRD):
|
elif Backend.isDbms(DBMS.FIREBIRD):
|
||||||
privileges.add(FIREBIRD_PRIVS[privilege.strip()])
|
if privilege.strip() in FIREBIRD_PRIVS:
|
||||||
|
privileges.add(FIREBIRD_PRIVS[privilege.strip()])
|
||||||
|
|
||||||
# In DB2 we get Y or G if the privilege is
|
# In DB2 we get Y or G if the privilege is
|
||||||
# True, N otherwise
|
# True, N otherwise
|
||||||
|
|||||||
@@ -674,6 +674,9 @@ binaryFields =
|
|||||||
# Force character encoding used for data retrieval.
|
# Force character encoding used for data retrieval.
|
||||||
charset =
|
charset =
|
||||||
|
|
||||||
|
# Check Internet connection before assessing the target.
|
||||||
|
checkInternet = False
|
||||||
|
|
||||||
# Crawl the website starting from the target URL.
|
# Crawl the website starting from the target URL.
|
||||||
# Valid: integer
|
# Valid: integer
|
||||||
# Default: 0
|
# Default: 0
|
||||||
|
|||||||
@@ -260,6 +260,13 @@ def main():
|
|||||||
logger.error(errMsg)
|
logger.error(errMsg)
|
||||||
raise SystemExit
|
raise SystemExit
|
||||||
|
|
||||||
|
elif "'DictObject' object has no attribute '" in excMsg and all(_ in errMsg for _ in ("(fingerprinted)", "(identified)")):
|
||||||
|
errMsg = "there has been a problem in enumeration. "
|
||||||
|
errMsg += "Because of a considerable chance of false-positive case "
|
||||||
|
errMsg += "you are advised to rerun with switch '--flush-session'"
|
||||||
|
logger.error(errMsg)
|
||||||
|
raise SystemExit
|
||||||
|
|
||||||
elif all(_ in excMsg for _ in ("pymysql", "configparser")):
|
elif all(_ in excMsg for _ in ("pymysql", "configparser")):
|
||||||
errMsg = "wrong initialization of pymsql detected (using Python3 dependencies)"
|
errMsg = "wrong initialization of pymsql detected (using Python3 dependencies)"
|
||||||
logger.error(errMsg)
|
logger.error(errMsg)
|
||||||
|
|||||||
@@ -21,13 +21,13 @@ c55b400b72acc43e0e59c87dd8bb8d75 extra/shellcodeexec/windows/shellcodeexec.x32.
|
|||||||
310efc965c862cfbd7b0da5150a5ad36 extra/sqlharvest/__init__.py
|
310efc965c862cfbd7b0da5150a5ad36 extra/sqlharvest/__init__.py
|
||||||
7713aa366c983cdf1f3dbaa7383ea9e1 extra/sqlharvest/sqlharvest.py
|
7713aa366c983cdf1f3dbaa7383ea9e1 extra/sqlharvest/sqlharvest.py
|
||||||
7afe836fd97271ccba67b4c0da2482ff lib/controller/action.py
|
7afe836fd97271ccba67b4c0da2482ff lib/controller/action.py
|
||||||
95fda7f284e0a882634cf5e94cbb73e1 lib/controller/checks.py
|
fec857280fd553ee7e9b49fdfe104402 lib/controller/checks.py
|
||||||
df647d57cf02cc0e4bda6b8ccc9d8138 lib/controller/controller.py
|
130d1c16708668b8d89605b6b5b38bf5 lib/controller/controller.py
|
||||||
52a3969f57170e935e3fc0156335bf2c lib/controller/handler.py
|
52a3969f57170e935e3fc0156335bf2c lib/controller/handler.py
|
||||||
310efc965c862cfbd7b0da5150a5ad36 lib/controller/__init__.py
|
310efc965c862cfbd7b0da5150a5ad36 lib/controller/__init__.py
|
||||||
60599fbb43b7d5e658b84371d3ad0b42 lib/core/agent.py
|
d58e85ffeac2471ef3af729076b3b5f7 lib/core/agent.py
|
||||||
6cc95a117fbd34ef31b9aa25520f0e31 lib/core/bigarray.py
|
6cc95a117fbd34ef31b9aa25520f0e31 lib/core/bigarray.py
|
||||||
6c8507976da31524e7afa3886d13bf4f lib/core/common.py
|
8390c2963730e65ad853f677793b8c1c lib/core/common.py
|
||||||
5065a4242a8cccf72f91e22e1007ae63 lib/core/convert.py
|
5065a4242a8cccf72f91e22e1007ae63 lib/core/convert.py
|
||||||
a8143dab9d3a27490f7d49b6b29ea530 lib/core/data.py
|
a8143dab9d3a27490f7d49b6b29ea530 lib/core/data.py
|
||||||
7936d78b1a7f1f008ff92bf2f88574ba lib/core/datatype.py
|
7936d78b1a7f1f008ff92bf2f88574ba lib/core/datatype.py
|
||||||
@@ -39,17 +39,17 @@ b9ff4e622c416116bee6024c0f050349 lib/core/enums.py
|
|||||||
9381a0c7e8bc19986299e84f4edda1a0 lib/core/exception.py
|
9381a0c7e8bc19986299e84f4edda1a0 lib/core/exception.py
|
||||||
310efc965c862cfbd7b0da5150a5ad36 lib/core/__init__.py
|
310efc965c862cfbd7b0da5150a5ad36 lib/core/__init__.py
|
||||||
9ba39bf66e9ecd469446bdbbeda906c3 lib/core/log.py
|
9ba39bf66e9ecd469446bdbbeda906c3 lib/core/log.py
|
||||||
ebb778c2d26eba8b34d7d8658e4105a6 lib/core/optiondict.py
|
edcfce0850771e6454acef244d5c5760 lib/core/optiondict.py
|
||||||
97231fc3987ffce83f59a7aa545ef4c9 lib/core/option.py
|
d85f2f63ffcb6135400339f9a7595a7b lib/core/option.py
|
||||||
5f2f56e6c5f274408df61943f1e080c0 lib/core/profiling.py
|
5f2f56e6c5f274408df61943f1e080c0 lib/core/profiling.py
|
||||||
40be71cd774662a7b420caeb7051e7d5 lib/core/readlineng.py
|
40be71cd774662a7b420caeb7051e7d5 lib/core/readlineng.py
|
||||||
d8e9250f3775119df07e9070eddccd16 lib/core/replication.py
|
d8e9250f3775119df07e9070eddccd16 lib/core/replication.py
|
||||||
785f86e3f963fa3798f84286a4e83ff2 lib/core/revision.py
|
785f86e3f963fa3798f84286a4e83ff2 lib/core/revision.py
|
||||||
40c80b28b3a5819b737a5a17d4565ae9 lib/core/session.py
|
40c80b28b3a5819b737a5a17d4565ae9 lib/core/session.py
|
||||||
6a82bb3548afc52b7cecfcc81273c52e lib/core/settings.py
|
652da168dac6476e7b997537c935cf17 lib/core/settings.py
|
||||||
d91291997d2bd2f6028aaf371bf1d3b6 lib/core/shell.py
|
d91291997d2bd2f6028aaf371bf1d3b6 lib/core/shell.py
|
||||||
2ad85c130cc5f2b3701ea85c2f6bbf20 lib/core/subprocessng.py
|
2ad85c130cc5f2b3701ea85c2f6bbf20 lib/core/subprocessng.py
|
||||||
155e2d3fda87b2e3ffa4f7a770513946 lib/core/target.py
|
8136241fdbdb99a5dc0e51ba72918f6e lib/core/target.py
|
||||||
8970b88627902239d695280b1160e16c lib/core/testing.py
|
8970b88627902239d695280b1160e16c lib/core/testing.py
|
||||||
40881e63d516d8304fc19971049cded0 lib/core/threads.py
|
40881e63d516d8304fc19971049cded0 lib/core/threads.py
|
||||||
ad74fc58fc7214802fd27067bce18dd2 lib/core/unescaper.py
|
ad74fc58fc7214802fd27067bce18dd2 lib/core/unescaper.py
|
||||||
@@ -57,7 +57,7 @@ ad74fc58fc7214802fd27067bce18dd2 lib/core/unescaper.py
|
|||||||
4d13ed693401a498b6d073a2a494bd83 lib/core/wordlist.py
|
4d13ed693401a498b6d073a2a494bd83 lib/core/wordlist.py
|
||||||
310efc965c862cfbd7b0da5150a5ad36 lib/__init__.py
|
310efc965c862cfbd7b0da5150a5ad36 lib/__init__.py
|
||||||
8c4b04062db2245d9e190b413985202a lib/parse/banner.py
|
8c4b04062db2245d9e190b413985202a lib/parse/banner.py
|
||||||
aa89ea0c7c44eb74eaaeeccaddc94d39 lib/parse/cmdline.py
|
4185a1ed8fbec400dd297474ac89c357 lib/parse/cmdline.py
|
||||||
3a31657bc38f277d0016ff6d50bde61f lib/parse/configfile.py
|
3a31657bc38f277d0016ff6d50bde61f lib/parse/configfile.py
|
||||||
14539f1be714d4f1ed042067d63bc50a lib/parse/handler.py
|
14539f1be714d4f1ed042067d63bc50a lib/parse/handler.py
|
||||||
64e5bb3ecbdd75144500588b437ba8da lib/parse/headers.py
|
64e5bb3ecbdd75144500588b437ba8da lib/parse/headers.py
|
||||||
@@ -66,9 +66,9 @@ aa89ea0c7c44eb74eaaeeccaddc94d39 lib/parse/cmdline.py
|
|||||||
0b010b7cdb2e42b5aa0caa59607279ad lib/parse/payloads.py
|
0b010b7cdb2e42b5aa0caa59607279ad lib/parse/payloads.py
|
||||||
997d0452e6fc22411f81a334511bcb3d lib/parse/sitemap.py
|
997d0452e6fc22411f81a334511bcb3d lib/parse/sitemap.py
|
||||||
403d873f1d2fd0c7f73d83f104e41850 lib/request/basicauthhandler.py
|
403d873f1d2fd0c7f73d83f104e41850 lib/request/basicauthhandler.py
|
||||||
aa8abda6eab79646b1759c0653925328 lib/request/basic.py
|
86cb5ce3fa5530c255f4599bfc0cc4e2 lib/request/basic.py
|
||||||
ef48de622b0a6b4a71df64b0d2785ef8 lib/request/comparison.py
|
ef48de622b0a6b4a71df64b0d2785ef8 lib/request/comparison.py
|
||||||
95363c8973208dd95295a23acc9674bc lib/request/connect.py
|
aa43e66ab7e6afb6d276327287a5f168 lib/request/connect.py
|
||||||
fb6b788d0016ab4ec5e5f661f0f702ad lib/request/direct.py
|
fb6b788d0016ab4ec5e5f661f0f702ad lib/request/direct.py
|
||||||
cc1163d38e9b7ee5db2adac6784c02bb lib/request/dns.py
|
cc1163d38e9b7ee5db2adac6784c02bb lib/request/dns.py
|
||||||
5dcdb37823a0b5eff65cd1018bcf09e4 lib/request/httpshandler.py
|
5dcdb37823a0b5eff65cd1018bcf09e4 lib/request/httpshandler.py
|
||||||
@@ -93,7 +93,7 @@ e7f3012f4f9e822d39eabd934d050b0e lib/takeover/web.py
|
|||||||
ab1601a7f429b47637c4fb8af703d0f1 lib/techniques/dns/test.py
|
ab1601a7f429b47637c4fb8af703d0f1 lib/techniques/dns/test.py
|
||||||
d3da4c7ceaf57c4687a052d58722f6bb lib/techniques/dns/use.py
|
d3da4c7ceaf57c4687a052d58722f6bb lib/techniques/dns/use.py
|
||||||
310efc965c862cfbd7b0da5150a5ad36 lib/techniques/error/__init__.py
|
310efc965c862cfbd7b0da5150a5ad36 lib/techniques/error/__init__.py
|
||||||
8e918c27b796dada3f87ed2fafeb9d8c lib/techniques/error/use.py
|
628f1fe86603512ae122f868cdabbfb9 lib/techniques/error/use.py
|
||||||
310efc965c862cfbd7b0da5150a5ad36 lib/techniques/__init__.py
|
310efc965c862cfbd7b0da5150a5ad36 lib/techniques/__init__.py
|
||||||
310efc965c862cfbd7b0da5150a5ad36 lib/techniques/union/__init__.py
|
310efc965c862cfbd7b0da5150a5ad36 lib/techniques/union/__init__.py
|
||||||
211e6dc49af6ad6bd3590d16d41e86db lib/techniques/union/test.py
|
211e6dc49af6ad6bd3590d16d41e86db lib/techniques/union/test.py
|
||||||
@@ -165,7 +165,7 @@ b8de437eaa3e05c3db666968b7d142e4 plugins/dbms/mssqlserver/enumeration.py
|
|||||||
40bd890988f9acd3942255d687445371 plugins/dbms/mssqlserver/__init__.py
|
40bd890988f9acd3942255d687445371 plugins/dbms/mssqlserver/__init__.py
|
||||||
400ce654ff6bc57a40fb291322a18282 plugins/dbms/mssqlserver/syntax.py
|
400ce654ff6bc57a40fb291322a18282 plugins/dbms/mssqlserver/syntax.py
|
||||||
20c669e084ea4d6b968a5834f7fec66c plugins/dbms/mssqlserver/takeover.py
|
20c669e084ea4d6b968a5834f7fec66c plugins/dbms/mssqlserver/takeover.py
|
||||||
48fb283a0dbf980495ca054f7b55783f plugins/dbms/mysql/connector.py
|
ad5bf4677e8e5c9cadf26cb4c8190543 plugins/dbms/mysql/connector.py
|
||||||
7fe94b803fa273baf479b76ce7a3fb51 plugins/dbms/mysql/enumeration.py
|
7fe94b803fa273baf479b76ce7a3fb51 plugins/dbms/mysql/enumeration.py
|
||||||
1bd5e659962e814b66a451b807de9110 plugins/dbms/mysql/filesystem.py
|
1bd5e659962e814b66a451b807de9110 plugins/dbms/mysql/filesystem.py
|
||||||
e43fda42decf2a70bad470b884674fbe plugins/dbms/mysql/fingerprint.py
|
e43fda42decf2a70bad470b884674fbe plugins/dbms/mysql/fingerprint.py
|
||||||
@@ -212,7 +212,7 @@ be7481a96214220bcd8f51ca00239bed plugins/generic/connector.py
|
|||||||
070f58c52e2a04e7a9896b42b2d17dc2 plugins/generic/search.py
|
070f58c52e2a04e7a9896b42b2d17dc2 plugins/generic/search.py
|
||||||
562cfa80a15d5f7f1d52e10c5736d7e2 plugins/generic/syntax.py
|
562cfa80a15d5f7f1d52e10c5736d7e2 plugins/generic/syntax.py
|
||||||
fca9946e960942cc9b22ef26e12b8b3a plugins/generic/takeover.py
|
fca9946e960942cc9b22ef26e12b8b3a plugins/generic/takeover.py
|
||||||
156ea264f3f1c7fc18faa251cc1f1a4b plugins/generic/users.py
|
bc0b47ced3db9f6746966d8dfc423b56 plugins/generic/users.py
|
||||||
310efc965c862cfbd7b0da5150a5ad36 plugins/__init__.py
|
310efc965c862cfbd7b0da5150a5ad36 plugins/__init__.py
|
||||||
b04db3e861edde1f9dd0a3850d5b96c8 shell/backdoor.asp_
|
b04db3e861edde1f9dd0a3850d5b96c8 shell/backdoor.asp_
|
||||||
158bfa168128393dde8d6ed11fe9a1b8 shell/backdoor.aspx_
|
158bfa168128393dde8d6ed11fe9a1b8 shell/backdoor.aspx_
|
||||||
@@ -223,7 +223,7 @@ c3cc8b7727161e64ab59f312c33b541a shell/stager.aspx_
|
|||||||
1f7f125f30e0e800beb21e2ebbab18e1 shell/stager.jsp_
|
1f7f125f30e0e800beb21e2ebbab18e1 shell/stager.jsp_
|
||||||
01e3505e796edf19aad6a996101c81c9 shell/stager.php_
|
01e3505e796edf19aad6a996101c81c9 shell/stager.php_
|
||||||
0751a45ac4c130131f2cdb74d866b664 sqlmapapi.py
|
0751a45ac4c130131f2cdb74d866b664 sqlmapapi.py
|
||||||
d715e78922d1b6bee7c9c03fdfa7ccfd sqlmap.py
|
c056277de4394bed29f35b74ffc4d209 sqlmap.py
|
||||||
08c711a470d7e0bf705320ba3c48b886 tamper/apostrophemask.py
|
08c711a470d7e0bf705320ba3c48b886 tamper/apostrophemask.py
|
||||||
e8509df10d3f1c28014d7825562d32dd tamper/apostrophenullencode.py
|
e8509df10d3f1c28014d7825562d32dd tamper/apostrophenullencode.py
|
||||||
bb27f7dc980ea07fcfedbd7da5e5e029 tamper/appendnullbyte.py
|
bb27f7dc980ea07fcfedbd7da5e5e029 tamper/appendnullbyte.py
|
||||||
|
|||||||
Reference in New Issue
Block a user