Skip to content

Commit 6e197ce

Browse files
committed
Post get_envs library methods
1 parent 66cb973 commit 6e197ce

File tree

2 files changed

+111
-0
lines changed

2 files changed

+111
-0
lines changed

lib/msf/core/post/common.rb

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,4 +136,54 @@ def report_vm(vm)
136136
report_host(vm_data)
137137
end
138138

139+
#
140+
# Returns the value of the environment variable +env+
141+
#
142+
def get_env(env)
143+
case session.type
144+
when /meterpreter/
145+
return session.sys.config.getenv(env)
146+
when /shell/
147+
if session.platform =~ /win/
148+
if env[0,1] == '%'
149+
unless env[-1,1] == '%'
150+
env << '%'
151+
end
152+
else
153+
env = "%#{env}%"
154+
end
155+
156+
return cmd_exec("echo #{env}")
157+
else
158+
unless env[0,1] == '$'
159+
env = "$#{env}"
160+
end
161+
162+
return cmd_exec("echo \"#{env}\"")
163+
end
164+
end
165+
166+
nil
167+
end
168+
169+
#
170+
# Returns a hash of environment variables +envs+
171+
#
172+
def get_envs(*envs)
173+
case session.type
174+
when /meterpreter/
175+
return session.sys.config.getenvs(*envs)
176+
when /shell/
177+
result = {}
178+
envs.each do |env|
179+
result[env] = get_env(env)
180+
end
181+
182+
return result
183+
end
184+
185+
nil
186+
end
187+
139188
end
189+

test/modules/post/test/get_env.rb

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
2+
$:.push "test/lib" unless $:.include? "test/lib"
3+
require 'module_test'
4+
5+
#load 'test/lib/module_test.rb'
6+
#load 'lib/rex/text.rb'
7+
#load 'lib/msf/core/post/common.rb'
8+
9+
class Metasploit4 < Msf::Post
10+
11+
include Msf::ModuleTest::PostTest
12+
include Msf::Post::Common
13+
14+
def initialize(info={})
15+
super( update_info( info,
16+
'Name' => 'Testing Get Envs',
17+
'Description' => %q{ This module will test Post::Common get envs API methods },
18+
'License' => MSF_LICENSE,
19+
'Author' => [ 'Ben Campbell'],
20+
'Platform' => [ 'windows', 'linux', 'java', 'python' ],
21+
'SessionTypes' => [ 'meterpreter', 'shell' ]
22+
))
23+
end
24+
25+
def test_get_env_windows
26+
if session.platform =~ /win/i
27+
it "should return windows path" do
28+
path = get_env('WINDIR')
29+
path =~ /windows/i
30+
end
31+
32+
it "should handle % signs" do
33+
path = get_env('%WINDIR%')
34+
path =~ /windows/i
35+
end
36+
end
37+
end
38+
39+
def test_get_env_nix
40+
unless session.platform =~ /win/i
41+
it "should return user" do
42+
user = get_env('USER')
43+
!user.blank?
44+
end
45+
46+
it "should handle $ sign" do
47+
user = get_env('$USER')
48+
!user.blank?
49+
end
50+
end
51+
end
52+
53+
def test_get_envs
54+
it "should return multiple envs" do
55+
res = get_envs('PATH','USERNAME')
56+
!res['PATH'].blank? && !res['USERNAME'].blank?
57+
end
58+
end
59+
60+
end
61+

0 commit comments

Comments
 (0)