mirror of
https://github.com/sqlmapproject/sqlmap.git
synced 2025-05-29 02:03:08 +03:00
adding support for newer SSL protocols
This commit is contained in:
parent
10b0639a96
commit
7b282b1d6c
|
@ -121,6 +121,7 @@ from lib.request.dns import DNSServer
|
||||||
from lib.request.proxy import ProxyHTTPSHandler
|
from lib.request.proxy import ProxyHTTPSHandler
|
||||||
from lib.request.basicauthhandler import SmartHTTPBasicAuthHandler
|
from lib.request.basicauthhandler import SmartHTTPBasicAuthHandler
|
||||||
from lib.request.certhandler import HTTPSCertAuthHandler
|
from lib.request.certhandler import HTTPSCertAuthHandler
|
||||||
|
from lib.request.httpshandler import HTTPSHandler
|
||||||
from lib.request.rangehandler import HTTPRangeHandler
|
from lib.request.rangehandler import HTTPRangeHandler
|
||||||
from lib.request.redirecthandler import SmartRedirectHandler
|
from lib.request.redirecthandler import SmartRedirectHandler
|
||||||
from lib.request.templates import getPageTemplate
|
from lib.request.templates import getPageTemplate
|
||||||
|
@ -130,6 +131,7 @@ from lib.utils.google import Google
|
||||||
from xml.etree.ElementTree import ElementTree
|
from xml.etree.ElementTree import ElementTree
|
||||||
|
|
||||||
authHandler = urllib2.BaseHandler()
|
authHandler = urllib2.BaseHandler()
|
||||||
|
httpsHandler = HTTPSHandler()
|
||||||
keepAliveHandler = keepalive.HTTPHandler()
|
keepAliveHandler = keepalive.HTTPHandler()
|
||||||
proxyHandler = urllib2.BaseHandler()
|
proxyHandler = urllib2.BaseHandler()
|
||||||
redirectHandler = SmartRedirectHandler()
|
redirectHandler = SmartRedirectHandler()
|
||||||
|
@ -140,16 +142,10 @@ def __urllib2Opener():
|
||||||
This function creates the urllib2 OpenerDirector.
|
This function creates the urllib2 OpenerDirector.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
global authHandler
|
|
||||||
global keepAliveHandler
|
|
||||||
global proxyHandler
|
|
||||||
global rangeHandler
|
|
||||||
global redirectHandler
|
|
||||||
|
|
||||||
debugMsg = "creating HTTP requests opener object"
|
debugMsg = "creating HTTP requests opener object"
|
||||||
logger.debug(debugMsg)
|
logger.debug(debugMsg)
|
||||||
|
|
||||||
handlers = [proxyHandler, authHandler, redirectHandler, rangeHandler]
|
handlers = [proxyHandler, authHandler, redirectHandler, rangeHandler, httpsHandler]
|
||||||
|
|
||||||
if not conf.dropSetCookie:
|
if not conf.dropSetCookie:
|
||||||
if not conf.loC:
|
if not conf.loC:
|
||||||
|
|
65
lib/request/httpshandler.py
Normal file
65
lib/request/httpshandler.py
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
"""
|
||||||
|
$Id$
|
||||||
|
|
||||||
|
Copyright (c) 2006-2012 sqlmap developers (http://www.sqlmap.org/)
|
||||||
|
See the file 'doc/COPYING' for copying permission
|
||||||
|
"""
|
||||||
|
|
||||||
|
import httplib
|
||||||
|
import socket
|
||||||
|
import urllib2
|
||||||
|
|
||||||
|
from lib.core.data import logger
|
||||||
|
from lib.core.exception import sqlmapConnectionException
|
||||||
|
|
||||||
|
ssl = None
|
||||||
|
try:
|
||||||
|
import ssl as _ssl
|
||||||
|
ssl = _ssl
|
||||||
|
except ImportError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
_protocols = [ssl.PROTOCOL_SSLv3, ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_TLSv1]
|
||||||
|
|
||||||
|
class HTTPSConnection(httplib.HTTPSConnection):
|
||||||
|
"""
|
||||||
|
Connection class that enables usage of newer SSL protocols.
|
||||||
|
|
||||||
|
Reference: http://bugs.python.org/msg128686
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
httplib.HTTPSConnection.__init__(self, *args, **kwargs)
|
||||||
|
|
||||||
|
def connect(self):
|
||||||
|
def create_sock():
|
||||||
|
sock = socket.create_connection((self.host, self.port), self.timeout)
|
||||||
|
if getattr(self, "_tunnel_host", None):
|
||||||
|
self.sock = sock
|
||||||
|
self._tunnel()
|
||||||
|
return sock
|
||||||
|
|
||||||
|
success = False
|
||||||
|
for protocol in _protocols:
|
||||||
|
try:
|
||||||
|
sock = create_sock()
|
||||||
|
_ = ssl.wrap_socket(sock, self.key_file, self.cert_file, ssl_version=protocol)
|
||||||
|
if _:
|
||||||
|
success = True
|
||||||
|
self.sock = _
|
||||||
|
_protocols.remove(protocol)
|
||||||
|
_protocols.insert(0, protocol)
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
sock.close()
|
||||||
|
except ssl.SSLError, errMsg:
|
||||||
|
logger.debug("SSL connection error occured ('%s')" % errMsg)
|
||||||
|
|
||||||
|
if not success:
|
||||||
|
raise sqlmapConnectionException, "can't establish SSL connection"
|
||||||
|
|
||||||
|
class HTTPSHandler(urllib2.HTTPSHandler):
|
||||||
|
def https_open(self, req):
|
||||||
|
return self.do_open(HTTPSConnection if ssl else httplib.HTTPSConnection, req)
|
Loading…
Reference in New Issue
Block a user