Skip to content

Commit d261c4e

Browse files
committed
Improved Request for better support to TLS protocols. Now using urllib3 instead of requests
1 parent 30f198d commit d261c4e

File tree

3 files changed

+28
-18
lines changed

3 files changed

+28
-18
lines changed

SharPyShell.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ def create_generate_parser(subparsers):
7171
def create_interact_parser(subparsers):
7272
interact_parser = subparsers.add_parser(
7373
'interact', formatter_class=argparse.RawTextHelpFormatter,
74-
usage='SharPyShell.py interact -u URL -p password -e encryption [--default-shell] [--user-agent] [--cookies] [--custom-header] [--proxy]',
74+
usage='SharPyShell.py interact -u URL -p password -e encryption [--default-shell] [--user-agent] [--cookies] [--custom-header] [--insecure] [--proxy]',
7575
help='Run terminal and interact with the remote agent'
7676
)
7777
interact_parser._action_groups.pop()

core/Request.py

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from utils.Singleton import Singleton
2-
import requests
2+
import ssl
3+
import urllib3
4+
from urllib3.contrib.socks import SOCKSProxyManager
35

46

57
class Request(Singleton):
@@ -22,25 +24,32 @@ def __init__(self, url, user_agent, cookies_string=False, custom_header=False, i
2224
self.__headers['Cookie'] = cookies_string
2325
if custom_header:
2426
self.__parse_custom_header(custom_header)
25-
self.__verify = True if insecure_ssl == 'false' else False
27+
self.__verify = 'CERT_REQUIRED' if insecure_ssl == 'false' else 'CERT_NONE'
2628
if proxy:
27-
self.__proxies = dict()
28-
self.__proxies['http'] = proxy
29-
self.__proxies['https'] = proxy
29+
self.__proxy = proxy
30+
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
31+
if proxy:
32+
proxy_type = proxy.split('://')[0]
33+
if proxy_type == 'http' or proxy_type == 'https':
34+
self.__request_obj = urllib3.ProxyManager(self.__proxy, ssl_version=ssl.PROTOCOL_TLSv1,
35+
timeout=self.__request_timeout, cert_reqs=self.__verify)
36+
else:
37+
self.__request_obj = SOCKSProxyManager(self.__proxy, ssl_version=ssl.PROTOCOL_TLSv1,
38+
timeout=self.__request_timeout, cert_reqs=self.__verify)
3039
else:
31-
self.__proxies = False
40+
self.__request_obj = urllib3.PoolManager(ssl_version=ssl.PROTOCOL_TLSv1, timeout=self.__request_timeout,
41+
cert_reqs=self.__verify)
3242
# print (vars(self))
3343

3444
def send_request(self, request):
3545
try:
36-
response_object = requests.post(self.__url,
37-
data={'data': request},
38-
timeout=self.__request_timeout,
39-
allow_redirects=self.__allow_redirects,
40-
headers=self.__headers,
41-
verify=self.__verify,
42-
proxies=self.__proxies
43-
)
46+
response_object = self.__request_obj.request('POST',
47+
self.__url,
48+
fields={'data': request},
49+
redirect=self.__allow_redirects,
50+
headers=self.__headers,
51+
retries=False
52+
)
4453
except KeyboardInterrupt:
4554
raise Exception('Keyboard interrupt issued')
46-
return response_object.status_code, response_object.headers, response_object.text
55+
return response_object.status, response_object.headers, response_object.data

requirements.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1+
urllib3
2+
urllib3[socks]
13
prettytable
24
Crypto
3-
requests
4-
requests[socks]
5+
pyopenssl

0 commit comments

Comments
 (0)