1
mirror of https://github.com/rapid7/metasploit-payloads synced 2024-11-20 14:39:22 +01:00

Fix symlink and junction detection on Python windows

This commit is contained in:
Ashley Donaldson 2024-10-11 21:19:47 +11:00
parent 80f92edc26
commit 38e11ae3aa

View File

@ -1147,6 +1147,12 @@ def enable_privilege(name, enable=True):
tokenPrivileges.get_array()[0].Attributes = SE_PRIVILEGE_ENABLED if enable else 0
return AdjustTokenPrivileges(token, False, tokenPrivileges, 0, None, None)
def islink_windows(dir_path):
if os.path.isdir(dir_path):
FILE_ATTRIBUTE_REPARSE_POINT = 0x0400
attributes = ctypes.windll.kernel32.GetFileAttributesW(unicode(dir_path))
return (attributes & FILE_ATTRIBUTE_REPARSE_POINT) > 0
@register_function
def channel_open_stdapi_fs_file(request, response):
fpath = packet_get_tlv(request, TLV_TYPE_FILE_PATH)['value']
@ -1933,7 +1939,9 @@ def stdapi_fs_chdir(request, response):
def stdapi_fs_delete_dir(request, response):
dir_path = packet_get_tlv(request, TLV_TYPE_DIRECTORY_PATH)['value']
dir_path = unicode(dir_path)
if os.path.islink(dir_path):
if has_windll and islink_windows(dir_path):
del_func = os.rmdir
elif not has_windll and os.path.islink(dir_path):
del_func = os.unlink
else:
del_func = shutil.rmtree