/lib/msf/core/post/linux/system.rb

https://github.com/betoatx/metasploit-framework · Ruby · 153 lines · 120 code · 17 blank · 16 comment · 2 complexity · 5764821092204f62b6ee832c9839e127 MD5 · raw file

  1. require 'msf/core/post/common'
  2. require 'msf/core/post/file'
  3. module Msf
  4. class Post
  5. module Linux
  6. module System
  7. include ::Msf::Post::Common
  8. include ::Msf::Post::File
  9. # Returns a Hash containing Distribution Name, Version and Kernel Information
  10. def get_sysinfo
  11. system_data = {}
  12. etc_files = cmd_exec("ls /etc").split()
  13. # Debian
  14. if etc_files.include?("debian_version")
  15. kernel_version = cmd_exec("uname -a")
  16. if kernel_version =~ /Ubuntu/
  17. version = read_file("/etc/issue").gsub(/\n|\\n|\\l/,'')
  18. system_data[:distro] = "ubuntu"
  19. system_data[:version] = version
  20. system_data[:kernel] = kernel_version
  21. else
  22. version = read_file("/etc/issue").gsub(/\n|\\n|\\l/,'')
  23. system_data[:distro] = "debian"
  24. system_data[:version] = version
  25. system_data[:kernel] = kernel_version
  26. end
  27. # Amazon
  28. elsif etc_files.include?("system-release")
  29. kernel_version = cmd_exec("uname -a")
  30. version = read_file("/etc/system-release").gsub(/\n|\\n|\\l/,'')
  31. system_data[:distro] = "amazon"
  32. system_data[:version] = version
  33. system_data[:kernel] = kernel_version
  34. # Fedora
  35. elsif etc_files.include?("fedora-release")
  36. kernel_version = cmd_exec("uname -a")
  37. version = read_file("/etc/fedora-release").gsub(/\n|\\n|\\l/,'')
  38. system_data[:distro] = "fedora"
  39. system_data[:version] = version
  40. system_data[:kernel] = kernel_version
  41. # Oracle Linux
  42. elsif etc_files.include?("enterprise-release")
  43. kernel_version = cmd_exec("uname -a")
  44. version = read_file("/etc/enterprise-release").gsub(/\n|\\n|\\l/,'')
  45. system_data[:distro] = "oracle"
  46. system_data[:version] = version
  47. system_data[:kernel] = kernel_version
  48. # RedHat
  49. elsif etc_files.include?("redhat-release")
  50. kernel_version = cmd_exec("uname -a")
  51. version = read_file("/etc/redhat-release").gsub(/\n|\\n|\\l/,'')
  52. system_data[:distro] = "redhat"
  53. system_data[:version] = version
  54. system_data[:kernel] = kernel_version
  55. # Arch
  56. elsif etc_files.include?("arch-release")
  57. kernel_version = cmd_exec("uname -a")
  58. version = read_file("/etc/arch-release").gsub(/\n|\\n|\\l/,'')
  59. system_data[:distro] = "arch"
  60. system_data[:version] = version
  61. system_data[:kernel] = kernel_version
  62. # Slackware
  63. elsif etc_files.include?("slackware-version")
  64. kernel_version = cmd_exec("uname -a")
  65. version = read_file("/etc/slackware-version").gsub(/\n|\\n|\\l/,'')
  66. system_data[:distro] = "slackware"
  67. system_data[:version] = version
  68. system_data[:kernel] = kernel_version
  69. # Mandrake
  70. elsif etc_files.include?("mandrake-release")
  71. kernel_version = cmd_exec("uname -a")
  72. version = read_file("/etc/mandrake-release").gsub(/\n|\\n|\\l/,'')
  73. system_data[:distro] = "mandrake"
  74. system_data[:version] = version
  75. system_data[:kernel] = kernel_version
  76. #SuSE
  77. elsif etc_files.include?("SuSE-release")
  78. kernel_version = cmd_exec("uname -a")
  79. version = read_file("/etc/SuSE-release").gsub(/\n|\\n|\\l/,'')
  80. system_data[:distro] = "suse"
  81. system_data[:version] = version
  82. system_data[:kernel] = kernel_version
  83. # Gentoo
  84. elsif etc_files.include?("gentoo-release")
  85. kernel_version = cmd_exec("uname -a")
  86. version = read_file("/etc/gentoo-release").gsub(/\n|\\n|\\l/,'')
  87. system_data[:distro] = "gentoo"
  88. system_data[:version] = version
  89. system_data[:kernel] = kernel_version
  90. else
  91. # Others
  92. kernel_version = cmd_exec("uname -a")
  93. version = read_file("/etc/issue").gsub(/\n|\\n|\\l/,'')
  94. system_data[:distro] = "linux"
  95. system_data[:version] = version
  96. system_data[:kernel] = kernel_version
  97. end
  98. return system_data
  99. end
  100. # Returns an array of hashes each representing a user
  101. # Keys are name, uid, gid, info, dir and shell
  102. def get_users
  103. users = []
  104. cmd_out = cmd_exec("cat /etc/passwd").split("\n")
  105. cmd_out.each do |l|
  106. entry = {}
  107. user_field = l.split(":")
  108. entry[:name] = user_field[0]
  109. entry[:uid] = user_field[2]
  110. entry[:gid] = user_field[3]
  111. entry[:info] = user_field[4]
  112. entry[:dir] = user_field[5]
  113. entry[:shell] = user_field[6]
  114. users << entry
  115. end
  116. return users
  117. end
  118. # Returns an array of hashes each hash representing a user group
  119. # Keys are name, gid and users
  120. def get_groups
  121. groups = []
  122. cmd_out = cmd_exec("cat /etc/group").split("\n")
  123. cmd_out.each do |l|
  124. entry = {}
  125. user_field = l.split(":")
  126. entry[:name] = user_field[0]
  127. entry[:gid] = user_field[2]
  128. entry[:users] = user_field[3]
  129. groups << entry
  130. end
  131. return groups
  132. end
  133. end # System
  134. end #Linux
  135. end # Post
  136. end # Msf