Am I an Admin? Railgun Script
Monday, September 13, 2010 at 1:45PM When you first step on a machine, you want to determine quickly if you are just a user or an administrator. Meterpreter doesn’t have a way to quickly check this. You could drop to a shell, check the local users group “Adminitrators”, and check your user, and correlate any groups that are shared between the outputs. You could do ‘getsystem’ and if one works other than Kitrap0d. You could also just do a ‘ps’ and notice that you can see ‘SYSTEM’ processes.
But, I wanted to make a way that check a bunch of sessions all at once. So I wrote “AmIAdmin.rb” which uses meterpreter’s railgun extension to execute “IsUserAdmin”.
Being that Shell32.dll isn’t included in railgun by default we have to add it. After writing it I decided to add some checks. These checks make sure that each piece of the script isn’t already loaded. It’s a good reference for doing this in the future.
(you can remove the print_status lines if you want the script to be quieter)
Here is the script for your consumption:
if client.platform == "x64/win32"
print_status "Railgun is currently not supported for x64 bit systems"
raise Rex::Script::Completed
endif client.railgun.present? == true
print_status "Railgun already loaded.. skipping"
else
print_status "Loading Railgun"
client.core.use("railgun")
endif client.railgun.dll['shell32'] == nil
print_status "Adding Shell32.dll"
client.railgun.add_dll('shell32','shell32')
else
print_status "Shell32 already loaded.. skipping"
endif (client.railgun.shell32.functions['IsUserAnAdmin'] == nil
print_status "Adding the IsUserAnAdmin function"
client.railgun.add_function('shell32', 'IsUserAnAdmin', 'BOOL', [])
else
print_status "IsUserAnAdmin already loaded.. skipping"
endprint_status "Running the IsUserAnAdmin function"
status = client.railgun.shell32.IsUserAnAdmin()if status["return"] == true then
print_status "You are an administrator"
else
print_error "You are not an administrator"
end
metasploit,
meterpreter,
railgun,
script 
