Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rapid7
GitHub Repository: rapid7/metasploit-framework
Path: blob/master/modules/post/multi/manage/screensaver.rb
19851 views
1
##
2
# This module requires Metasploit: https://metasploit.com/download
3
# Current source: https://github.com/rapid7/metasploit-framework
4
##
5
6
class MetasploitModule < Msf::Post
7
Rank = ExcellentRanking
8
9
def initialize(info = {})
10
super(
11
update_info(
12
info,
13
'Name' => 'Multi Manage the screensaver of the target computer',
14
'Description' => %q{
15
This module allows you to turn on or off the screensaver of the target computer and also
16
lock the current session.
17
},
18
'License' => MSF_LICENSE,
19
'Author' => [
20
'Eliott Teissonniere', # Metasploit module
21
'Julien Voisin' # Linux improvements
22
],
23
'Platform' => [ 'linux', 'osx', 'win', 'unix', 'solaris' ],
24
'SessionTypes' => [ 'shell', 'meterpreter' ],
25
'DefaultAction' => 'LOCK',
26
'Actions' => [
27
[ 'LOCK', { 'Description' => 'Lock the current session' } ],
28
[ 'UNLOCK', { 'Description' => 'Unlock the current session' } ],
29
[ 'START', { 'Description' => 'Start the screensaver, may lock the current session' } ],
30
[ 'STOP', { 'Description' => 'Stop the screensaver, user may be prompted for its password' }],
31
],
32
'References' => [
33
['URL', 'https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7530']
34
],
35
'Notes' => {
36
'Reliability' => [ ],
37
'Stability' => [CRASH_SAFE],
38
'SideEffects' => [SCREEN_EFFECTS]
39
}
40
)
41
)
42
end
43
44
#
45
# cmd_exec but returning a boolean
46
#
47
def cmd_vexec(cmd)
48
vprint_status("Executing '#{cmd}'")
49
50
begin
51
cmd_exec(cmd)
52
rescue StandardError
53
return false
54
end
55
56
true
57
end
58
59
def lock_session
60
case session.platform
61
when 'linux', 'solaris'
62
ret = false
63
if command_exists?('xdg-screensaver-lock')
64
ret |= cmd_vexec('xdg-screensaver lock')
65
end
66
if command_exists?('qdbus')
67
ret |= cmd_vexec('qdbus org.freedesktop.ScreenSaver /ScreenSaver Lock')
68
end
69
if command_exists?('dbus-send')
70
ret |= cmd_exec('dbus-send --type=method_call --print-reply --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.SetActive boolean:true')
71
end
72
if command_exists?('loginctl')
73
self.class.include Msf::Post::Linux::Priv
74
if is_root?
75
ret |= cmd_vexec('loginctl lock-sessions')
76
else
77
ret |= cmd_vexec('loginctl lock-session')
78
end
79
end
80
print_error('Unable to lock session.') unless ret
81
return ret
82
when 'osx'
83
cmd_vexec('pmset displaysleepnow')
84
when 'windows'
85
cmd_vexec('rundll32 user32.dll,LockWorkStation')
86
end
87
88
true
89
end
90
91
def unlock_session
92
case session.platform
93
when 'linux', 'solaris'
94
ret = false
95
if command_exists?('xdg-screensaver')
96
ret |= cmd_vexec('xdg-screensaver reset')
97
end
98
if command_exists?('qdbus')
99
ret |= cmd_vexec('qdbus org.freedesktop.ScreenSaver /ScreenSaver Unlock')
100
end
101
if command_exists?('dbus-send')
102
ret |= cmd_exec('dbus-send --type=method_call --print-reply --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.SetActive boolean:false')
103
end
104
if command_exists?('loginctl')
105
self.class.include Msf::Post::Linux::Priv
106
if is_root?
107
ret |= cmd_vexec('loginctl unlock-sessions')
108
else
109
ret |= cmd_vexec('loginctl unlock-session')
110
end
111
end
112
print_error('Unable to unlock session.') unless ret
113
return ret
114
when 'osx'
115
fail_with(Msf::Exploit::Failure::NoTarget, 'Not supported on Mac OSX, you can still lock the screen or start the screensaver')
116
when 'windows'
117
fail_with(Msf::Exploit::Failure::NoTarget, 'Not supported on Windows, you can still lock the screen or start the screensaver')
118
end
119
120
true
121
end
122
123
def start_screensaver
124
case session.platform
125
when 'linux', 'solaris'
126
cmd_vexec('xdg-screensaver activate')
127
when 'osx'
128
cmd_vexec('open -a ScreenSaverEngine')
129
when 'windows'
130
cmd_vexec('powershell -w hidden -nop -c "Start-Process C:\\Windows\\System32\\scrnsave.scr"')
131
end
132
133
true
134
end
135
136
def stop_screensaver
137
case session.platform
138
when 'linux', 'solaris'
139
cmd_vexec('xdg-screensaver reset') if command_exists?('xdg-screensaver')
140
when 'osx'
141
fail_with(Msf::Exploit::Failure::NoTarget, 'Not supported on Mac OSX, you can still lock the screen or start the screensaver')
142
when 'windows'
143
fail_with(Msf::Exploit::Failure::NoTarget, 'Not supported on Windows, you can still lock the screen or start the screensaver')
144
end
145
146
true
147
end
148
149
def run
150
print_error('Please specify an action') if action.nil?
151
152
case action.name
153
when 'LOCK'
154
return lock_session
155
when 'UNLOCK'
156
return unlock_session
157
when 'START'
158
return start_screensaver
159
when 'STOP'
160
return stop_screensaver
161
end
162
end
163
end
164
165