Skip to content

Commit e89a399

Browse files
author
Jonathan Claudius
committed
Merge remote-tracking branch 'upstream/master' into add_cisco_ssl_vpn_priv_esc
2 parents 93d9756 + 2d1bc9b commit e89a399

File tree

125 files changed

+4659
-4842
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

125 files changed

+4659
-4842
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,3 +83,7 @@ data/meterpreter/screenshot.*.dll
8383
# private source. If you're interested in this functionality,
8484
# check out Metasploit Pro: http://metasploit.com/download
8585
data/meterpreter/ext_server_pivot.*.dll
86+
87+
# Avoid checking in metakitty, the source for
88+
# https://rapid7.github.io/metasploit-framework. It's an orphan branch.
89+
/metakitty

.travis.yml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
env:
22
- RAKE_TASK=cucumber
3-
- RAKE_TASK=cucumber:boot
3+
# Commenting out the boot tests due to chronic timeouts.
4+
# - RAKE_TASK=cucumber:boot
45
- RAKE_TASK=spec SPEC_OPTS="--tag content"
56
- RAKE_TASK=spec SPEC_OPTS="--tag ~content"
67

@@ -35,3 +36,9 @@ notifications:
3536

3637
git:
3738
depth: 5
39+
40+
# Blacklist certain branches from triggering travis builds
41+
branches:
42+
except:
43+
- gh-pages
44+
- metakitty

Gemfile.lock

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ PATH
2222
tzinfo
2323
metasploit-framework-db (4.10.1.pre.dev)
2424
activerecord (< 4.0.0)
25-
metasploit-credential (~> 0.13.3)
25+
metasploit-credential (~> 0.13.6)
2626
metasploit-framework (= 4.10.1.pre.dev)
2727
metasploit_data_models (~> 0.21.1)
2828
pg (>= 0.11)
@@ -62,7 +62,7 @@ GEM
6262
i18n (~> 0.6, >= 0.6.4)
6363
multi_json (~> 1.0)
6464
arel (3.0.3)
65-
arel-helpers (2.0.1)
65+
arel-helpers (2.0.2)
6666
activerecord (>= 3.1.0, < 5)
6767
aruba (0.6.1)
6868
childprocess (>= 0.3.6)
@@ -112,7 +112,7 @@ GEM
112112
metasploit-concern (0.3.0)
113113
activesupport (~> 3.0, >= 3.0.0)
114114
railties (< 4.0.0)
115-
metasploit-credential (0.13.3)
115+
metasploit-credential (0.13.6)
116116
metasploit-concern (~> 0.3.0)
117117
metasploit-model (~> 0.28.0)
118118
metasploit_data_models (~> 0.21.0)
@@ -139,7 +139,7 @@ GEM
139139
msgpack (0.5.9)
140140
multi_json (1.0.4)
141141
network_interface (0.0.1)
142-
nokogiri (1.6.4.1)
142+
nokogiri (1.6.5)
143143
mini_portile (~> 0.6.0)
144144
packetfu (1.1.9)
145145
pcaprub (0.11.3)
@@ -171,11 +171,11 @@ GEM
171171
rake (>= 0.8.7)
172172
rdoc (~> 3.4)
173173
thor (>= 0.14.6, < 2.0)
174-
rake (10.3.2)
174+
rake (10.4.2)
175175
rb-readline (0.5.1)
176176
rdoc (3.12.2)
177177
json (~> 1.4)
178-
recog (1.0.5)
178+
recog (1.0.6)
179179
nokogiri
180180
redcarpet (3.1.2)
181181
rkelly-remix (0.0.6)
17.1 KB
Binary file not shown.

data/exploits/powershell/powerdump.ps1

Lines changed: 382 additions & 1 deletion
Large diffs are not rendered by default.

data/meterpreter/ext_server_stdapi.py

Lines changed: 40 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,13 @@
6060
bytes = lambda *args: str(*args[:1])
6161
NULL_BYTE = '\x00'
6262
else:
63-
is_str = lambda obj: issubclass(obj.__class__, __builtins__['str'])
63+
if isinstance(__builtins__, dict):
64+
is_str = lambda obj: issubclass(obj.__class__, __builtins__['str'])
65+
str = lambda x: __builtins__['str'](x, 'UTF-8')
66+
else:
67+
is_str = lambda obj: issubclass(obj.__class__, __builtins__.str)
68+
str = lambda x: __builtins__.str(x, 'UTF-8')
6469
is_bytes = lambda obj: issubclass(obj.__class__, bytes)
65-
str = lambda x: __builtins__['str'](x, 'UTF-8')
6670
NULL_BYTE = bytes('\x00', 'UTF-8')
6771
long = int
6872

@@ -501,6 +505,8 @@ class RTATTR(ctypes.Structure):
501505
IFA_ADDRESS = 1
502506
IFA_LABEL = 3
503507

508+
meterpreter.register_extension('stdapi')
509+
504510
def calculate_32bit_netmask(bits):
505511
if bits == 32:
506512
return 0xffffffff
@@ -669,8 +675,10 @@ def channel_open_stdapi_net_tcp_server(request, response):
669675
@meterpreter.register_function
670676
def stdapi_sys_config_getenv(request, response):
671677
for env_var in packet_enum_tlvs(request, TLV_TYPE_ENV_VARIABLE):
672-
pgroup = ''
673-
env_var = env_var['value'].translate(None, '%$')
678+
pgroup = bytes()
679+
env_var = env_var['value']
680+
env_var = env_var.replace('%', '')
681+
env_var = env_var.replace('$', '')
674682
env_val = os.environ.get(env_var)
675683
if env_val:
676684
pgroup += tlv_pack(TLV_TYPE_ENV_VARIABLE, env_var)
@@ -682,23 +690,25 @@ def stdapi_sys_config_getenv(request, response):
682690
def stdapi_sys_config_getsid(request, response):
683691
token = get_token_user(ctypes.windll.kernel32.GetCurrentProcess())
684692
if not token:
685-
return ERROR_FAILURE, response
693+
return error_result_windows(), response
686694
sid_str = ctypes.c_char_p()
687695
if not ctypes.windll.advapi32.ConvertSidToStringSidA(token.User.Sid, ctypes.byref(sid_str)):
688-
return ERROR_FAILURE, response
696+
return error_result_windows(), response
689697
sid_str = str(ctypes.string_at(sid_str))
690698
response += tlv_pack(TLV_TYPE_SID, sid_str)
691699
return ERROR_SUCCESS, response
692700

693701
@meterpreter.register_function
694702
def stdapi_sys_config_getuid(request, response):
695-
if has_windll:
703+
if has_pwd:
704+
username = pwd.getpwuid(os.getuid()).pw_name
705+
elif has_windll:
696706
token = get_token_user(ctypes.windll.kernel32.GetCurrentProcess())
697707
if not token:
698-
return ERROR_FAILURE, response
708+
return error_result_windows(), response
699709
username = get_username_from_token(token)
700710
if not username:
701-
return ERROR_FAILURE, response
711+
return error_result_windows(), response
702712
else:
703713
username = getpass.getuser()
704714
response += tlv_pack(TLV_TYPE_USER_NAME, username)
@@ -786,9 +796,9 @@ def stdapi_sys_process_kill(request, response):
786796
k32 = ctypes.windll.kernel32
787797
proc_h = k32.OpenProcess(PROCESS_TERMINATE, False, pid)
788798
if not proc_h:
789-
return ERROR_FAILURE, response
799+
return error_result_windows(), response
790800
if not k32.TerminateProcess(proc_h, 0):
791-
return ERROR_FAILURE, response
801+
return error_result_windows(), response
792802
elif hasattr(os, 'kill'):
793803
os.kill(pid, 9)
794804
else:
@@ -855,7 +865,7 @@ def stdapi_sys_process_get_processes_via_windll(request, response):
855865
proc_snap = k32.CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
856866
result = k32.Process32First(proc_snap, ctypes.byref(pe32))
857867
if not result:
858-
return ERROR_FAILURE, response
868+
return error_result_windows(), response
859869
while result:
860870
proc_h = k32.OpenProcess((PROCESS_QUERY_INFORMATION | PROCESS_VM_READ), False, pe32.th32ProcessID)
861871
if not proc_h:
@@ -935,8 +945,7 @@ def stdapi_fs_delete_dir(request, response):
935945
@meterpreter.register_function
936946
def stdapi_fs_delete_file(request, response):
937947
file_path = packet_get_tlv(request, TLV_TYPE_FILE_PATH)['value']
938-
if os.path.exists(file_path):
939-
os.unlink(file_path)
948+
os.unlink(file_path)
940949
return ERROR_SUCCESS, response
941950

942951
@meterpreter.register_function
@@ -1338,10 +1347,10 @@ def stdapi_registry_create_key(request, response):
13381347
base_key = ctypes.create_string_buffer(bytes(base_key, 'UTF-8'))
13391348
permission = packet_get_tlv(request, TLV_TYPE_PERMISSION).get('value', winreg.KEY_ALL_ACCESS)
13401349
res_key = ctypes.c_void_p()
1341-
if ctypes.windll.advapi32.RegCreateKeyExA(root_key, ctypes.byref(base_key), 0, None, 0, permission, None, ctypes.byref(res_key), None) == ERROR_SUCCESS:
1342-
response += tlv_pack(TLV_TYPE_HKEY, res_key.value)
1343-
return ERROR_SUCCESS, response
1344-
return ERROR_FAILURE, response
1350+
if ctypes.windll.advapi32.RegCreateKeyExA(root_key, ctypes.byref(base_key), 0, None, 0, permission, None, ctypes.byref(res_key), None) != ERROR_SUCCESS:
1351+
return error_result_windows(), response
1352+
response += tlv_pack(TLV_TYPE_HKEY, res_key.value)
1353+
return ERROR_SUCCESS, response
13451354

13461355
@meterpreter.register_function_windll
13471356
def stdapi_registry_delete_key(request, response):
@@ -1432,33 +1441,31 @@ def stdapi_registry_open_key(request, response):
14321441
base_key = ctypes.create_string_buffer(bytes(base_key, 'UTF-8'))
14331442
permission = packet_get_tlv(request, TLV_TYPE_PERMISSION).get('value', winreg.KEY_ALL_ACCESS)
14341443
handle_id = ctypes.c_void_p()
1435-
if ctypes.windll.advapi32.RegOpenKeyExA(root_key, ctypes.byref(base_key), 0, permission, ctypes.byref(handle_id)) == ERROR_SUCCESS:
1436-
response += tlv_pack(TLV_TYPE_HKEY, handle_id.value)
1437-
return ERROR_SUCCESS, response
1438-
return ERROR_FAILURE, response
1444+
if ctypes.windll.advapi32.RegOpenKeyExA(root_key, ctypes.byref(base_key), 0, permission, ctypes.byref(handle_id)) != ERROR_SUCCESS:
1445+
return error_result_windows(), response
1446+
response += tlv_pack(TLV_TYPE_HKEY, handle_id.value)
1447+
return ERROR_SUCCESS, response
14391448

14401449
@meterpreter.register_function_windll
14411450
def stdapi_registry_open_remote_key(request, response):
14421451
target_host = packet_get_tlv(request, TLV_TYPE_TARGET_HOST)['value']
14431452
root_key = packet_get_tlv(request, TLV_TYPE_ROOT_KEY)['value']
14441453
result_key = ctypes.c_void_p()
1445-
result = ctypes.windll.advapi32.RegConnectRegistry(target_host, root_key, ctypes.byref(result_key))
1446-
if (result == ERROR_SUCCESS):
1447-
response += tlv_pack(TLV_TYPE_HKEY, result_key.value)
1448-
return ERROR_SUCCESS, response
1449-
return ERROR_FAILURE, response
1454+
if ctypes.windll.advapi32.RegConnectRegistry(target_host, root_key, ctypes.byref(result_key)) != ERROR_SUCCESS:
1455+
return error_result_windows(), response
1456+
response += tlv_pack(TLV_TYPE_HKEY, result_key.value)
1457+
return ERROR_SUCCESS, response
14501458

14511459
@meterpreter.register_function_windll
14521460
def stdapi_registry_query_class(request, response):
14531461
hkey = packet_get_tlv(request, TLV_TYPE_HKEY)['value']
14541462
value_data = (ctypes.c_char * 4096)()
14551463
value_data_sz = ctypes.c_uint32()
14561464
value_data_sz.value = ctypes.sizeof(value_data)
1457-
result = ctypes.windll.advapi32.RegQueryInfoKeyA(hkey, value_data, ctypes.byref(value_data_sz), None, None, None, None, None, None, None, None, None)
1458-
if result == ERROR_SUCCESS:
1459-
response += tlv_pack(TLV_TYPE_VALUE_DATA, ctypes.string_at(value_data))
1460-
return ERROR_SUCCESS, response
1461-
return ERROR_FAILURE, response
1465+
if ctypes.windll.advapi32.RegQueryInfoKeyA(hkey, value_data, ctypes.byref(value_data_sz), None, None, None, None, None, None, None, None, None) != ERROR_SUCCESS:
1466+
return error_result_windows(), response
1467+
response += tlv_pack(TLV_TYPE_VALUE_DATA, ctypes.string_at(value_data))
1468+
return ERROR_SUCCESS, response
14621469

14631470
@meterpreter.register_function_windll
14641471
def stdapi_registry_query_value(request, response):
@@ -1486,7 +1493,7 @@ def stdapi_registry_query_value(request, response):
14861493
else:
14871494
response += tlv_pack(TLV_TYPE_VALUE_DATA, ctypes.string_at(value_data, value_data_sz.value))
14881495
return ERROR_SUCCESS, response
1489-
return ERROR_FAILURE, response
1496+
return error_result_windows(), response
14901497

14911498
@meterpreter.register_function_windll
14921499
def stdapi_registry_set_value(request, response):

0 commit comments

Comments
 (0)