Module: Msf::Post::Unix

Included in:
Linux::System, Solaris::System
Defined in:
lib/msf/core/post/unix.rb

Instance Method Summary collapse

Instance Method Details

#enum_user_directoriesObject

Enumerates the user directories in /Users or /home


58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/msf/core/post/unix.rb', line 58

def enum_user_directories
  user_dirs = []

  # get all user directories from /etc/passwd
  read_file("/etc/passwd").each_line do |passwd_line|
    user_dirs << passwd_line.split(/:/)[5]
  end

  # also list other common places for home directories in the event that
  # the users aren't in /etc/passwd (LDAP, for example)
  case session.platform
  when 'osx'
    user_dirs << cmd_exec('ls /Users').each_line.map { |l| "/Users/#{l}" }
  else
    user_dirs << cmd_exec('ls /home').each_line.map { |l| "/home/#{l}" }
  end

  user_dirs.flatten!
  user_dirs.compact!
  user_dirs.sort!
  user_dirs.uniq!

  user_dirs
end

#get_groupsObject

Returns an array of hashes each hash representing a user group Keys are name, gid and users


41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/msf/core/post/unix.rb', line 41

def get_groups
  groups = []
  cmd_out = read_file("/etc/group").split("\n")
  cmd_out.each do |l|
    entry = {}
    user_field = l.split(":")
    entry[:name] = user_field[0]
    entry[:gid] = user_field[2]
    entry[:users] = user_field[3]
    groups << entry
  end
  return groups
end

#get_usersObject

Returns an array of hashes each representing a user Keys are name, uid, gid, info, dir and shell


9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/msf/core/post/unix.rb', line 9

def get_users
  users = []
  etc_passwd = nil
  [
    "/etc/passwd",
    "/etc/security/passwd",
    "/etc/master.passwd",
  ].each { |f|
    if file_exist?(f)
      etc_passwd = f
      break
    end
  }
  cmd_out = read_file(etc_passwd).split("\n")
  cmd_out.each do |l|
    entry = {}
    user_field = l.split(":")
    entry[:name] = user_field[0]
    entry[:uid] = user_field[2]
    entry[:gid] = user_field[3]
    entry[:info] = user_field[4]
    entry[:dir] = user_field[5]
    entry[:shell] = user_field[6]
    users << entry
  end
  return users
end