Module: Msf::Post::Linux::Packages
- Includes:
- System
- Defined in:
- lib/msf/core/post/linux/packages.rb
Instance Method Summary collapse
-
#installed_package_version(package) ⇒ Rex::Version
Determines the version of an installed package.
Methods included from System
#get_container_type, #get_cpu_info, #get_hostname, #get_mount_path, #get_path, #get_shell_name, #get_shell_pid, #get_suid_files, #get_sysinfo, #glibc_version, #has_clang?, #has_gcc?, #interfaces, #ips, #listen_tcp_ports, #listen_udp_ports, #macs, #noexec?, #nosuid?, #protected_hardlinks?, #protected_symlinks?
Methods included from Auxiliary::Report
#active_db?, #create_cracked_credential, #create_credential, #create_credential_and_login, #create_credential_login, #db, #db_warning_given?, #get_client, #get_host, #inside_workspace_boundary?, #invalidate_login, #mytask, #myworkspace, #myworkspace_id, #report_auth_info, #report_client, #report_exploit, #report_host, #report_loot, #report_note, #report_service, #report_vuln, #report_web_form, #report_web_page, #report_web_site, #report_web_vuln, #store_cred, #store_local, #store_loot
Methods included from Metasploit::Framework::Require
optionally, optionally_active_record_railtie, optionally_include_metasploit_credential_creation, #optionally_include_metasploit_credential_creation, optionally_require_metasploit_db_gem_engines
Methods included from Unix
#enum_user_directories, #get_groups, #get_session_pid, #get_users, #is_root?, #whoami
Methods included from File
#_append_file_powershell, #_append_file_unix_shell, #_can_echo?, #_read_file_meterpreter, #_read_file_powershell, #_read_file_powershell_fragment, #_shell_command_with_success_code, #_shell_process_with_success_code, #_unix_max_line_length, #_win_ansi_append_file, #_win_ansi_write_file, #_win_bin_append_file, #_win_bin_write_file, #_write_file_meterpreter, #_write_file_powershell, #_write_file_powershell_fragment, #_write_file_unix_shell, #append_file, #attributes, #cd, #chmod, #copy_file, #dir, #directory?, #executable?, #exist?, #expand_path, #exploit_data, #exploit_source, #file?, #file_local_write, #file_remote_digestmd5, #file_remote_digestsha1, #file_remote_digestsha2, #immutable?, #initialize, #mkdir, #pwd, #read_file, #readable?, #rename_file, #rm_f, #rm_rf, #setuid?, #stat, #upload_and_chmodx, #upload_file, #writable?, #write_file
Methods included from Common
#clear_screen, #cmd_exec, #cmd_exec_get_pid, #cmd_exec_with_result, #command_exists?, #create_process, #get_env, #get_envs, #initialize, #peer, #report_virtualization, #rhost, #rport
Instance Method Details
#installed_package_version(package) ⇒ Rex::Version
Determines the version of an installed package
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/msf/core/post/linux/packages.rb', line 15 def installed_package_version(package) info = get_sysinfo if ['debian', 'ubuntu'].include?(info[:distro]) package_version = cmd_exec("dpkg-query -f='${Version}' -W #{package}") # The "no package" error is language based, but "dpkg-query:" starting is not return nil if package_version.start_with?('dpkg-query:') package_version = package_version.gsub('+', '.') return Rex::Version.new(package_version) elsif ['redhat', 'fedora', 'centos'].include?(info[:distro]) package_version = cmd_exec("rpm -q #{package}") return nil unless package_version.start_with?(package) # dnf-4.18.0-2.fc39.noarch # remove package name at the beginning package_version = package_version.split("#{package}-")[1] # remove arch at the end package_version = package_version.sub(/\.[^.]*$/, '') return Rex::Version.new(package_version) elsif ['solaris', 'oracle', 'freebsd'].include?(info[:distro]) package_version = cmd_exec("pkg info #{package}") return nil unless package_version.include?('Version') package_version = package_version.match(/Version\s+:\s+(.+)/)[1] return Rex::Version.new(package_version) elsif ['gentoo'].include?(info[:distro]) # https://wiki.gentoo.org/wiki/Equery if command_exists?('equery') package_version = cmd_exec("equery --quiet list #{package}") # https://wiki.gentoo.org/wiki/Q_applets elsif command_exists?('qlist') package_version = cmd_exec("qlist -Iv #{package}") else vprint_error("installed_package_version couldn't find qlist and equery on gentoo") return nil end return nil if package_version.strip.empty? package_version = package_version.split('/')[1] # make gcc-1.1 to 1.1 package_version = package_version.sub(/.*?-/, '') return Rex::Version.new(package_version) elsif ['arch'].include?(info[:distro]) package_version = cmd_exec("pacman -Qi #{package}") return nil unless package_version.include?('Version') package_version = package_version.match(/Version\s+:\s+(.+)/)[1] return Rex::Version.new(package_version) else vprint_error("installed_package_version is being called on an unsupported OS: #{info[:distro]}") end nil end |