ASP基础入门:堵住ASP漏洞


  无论你相不相信,通过 asp,可能 可以很容易地入侵 web server、窃取服务器上的文件、 拿获 web 数据库等系统的消费者口令,甚至 歹意删除服务器上的的文件,直至造成系统 败坏,这些都决非 骇人听闻,并且都确 确切实 产生过,本文将向你逐个揭示这些 asp 存在的 漏洞,并提出一些 提防意见 。

  上一篇中给大家着重谈了“ADO 存取数据库时如何分页显示”的问题,有位朋友来信给我指出我在计算页面总数时 忽略了 Recordset 对象的一个主要参数“PageCount”,它能在给 Pagesize 赋值后自动得出页面的总数,而 毋庸用“INT(RS.recordcount/PgSz*-1)*-1”这样繁琐的公式 。我要 感激这位朋友热心地给我指出程序中的缺乏,由于这个程序是我在很久以往写的,由于在分页显示的时候记录的总数不 定然能整除页面显示记录的数目,而当时我又不能 确定 PageCount 是不是能正确得出页面的数目,所以偷懒写了这个公式:),说 真话我到现在还都没试过用 pagecount,感兴趣的朋友千万要试一下哦,可别学我的 懈怠呀 。

  近期我在 chinaasp 的 bbs 上 探讨问题时发现众多朋友关于 asp 的一些安全性问题不甚了解,甚至不晓得如何解决最常见的 asp::$DATA 显示源代码的问题, 因此我感觉十分有必要在这里给 辽阔朋友们重点谈一谈这个问题,在征得 chinaasp 飞鸟的允许下,我将他曾经写过的丝毫关于 asp 漏洞的介绍外加我自己的一些 实际 教训拿出来给大家 详尽 综合一下这个关于 webmaster 来说至关主要的 asp 的安全性问题 。

  当上一年 ::$DATA 的 漏洞被发现并发布的第二天,我曾经检测了当时国内大 部分 使用 asp 的站点,其中百分之九十九都存在以上 可以看见源代码的问题,当日我甚至在微软的站点上抓下了 search.asp 这个文件的源代码 。可能你会感觉看到源代码并没有什么大碍,假如作为 webmaster 的你这么想就大错特错了 。譬如,假如 asp 程序员将站点的登陆密码直接写在 asp 里,那么一旦源码被发现,他人就 可以很容易的进入本不该被看到的页面,我就曾经利用这个 步骤免费成为了一个收费网站的成员(大家可别 抖落我哦!),并且众多数据库的衔接消费者名和密码也都是直接写在 asp 里,一旦被发现,假如你的数据库允许远程 拜访并且没有 撤防的话就相当惊险了 。在一些用 asp 开发的 bbs 程序中,一般 使用的是 access mdb 库,假如 mdb 库 存放的路径被获知,数据库就极有可能被他人下载,加之假如数据库里含有的密码不加密,那就十分惊险了,猎取密码的人假如故意进行 歹意 毁坏,他 惟独求以 admin 身份登陆删除全部 bbs 里的帖子,就够你呛的了 。下面列出了当前已经发现的一些 漏洞, 盼望大家 普及 警觉一、 通过 试验我们发现, win95+pws 上运行 ASP 程序,只须 容易地在阅读器地址栏的 asp 文件名后多加一个小数点 ASP 程序就会被下载下来 。 IIS3 也存在同样的问题,假如你当前还在 使用 IIS3 定然要测试一下 。

  二、 iis2、 iis3、 iis4 的一个广为人知的 漏洞便是 ::$DATA,通过它 使用 ie 的 view source 或 netscape 直接 拜访该 asp 文件就能轻而易举地看到 asp 代码 。 win98+pws4 不存在这个 漏洞 。

   毕竟是什么缘由造成了这种可怕的 漏洞呢?究其 起源其实是 Windows NT 特有的文件系统在做怪 。有丝毫常识的人都晓得在 NT 提供了一种 彻底不同于 FAT 的文件系统: NTFS,这种被称之为新技术文件系统的技术使得 NT 存在了较高的安全机制,但也正是由于它而产生了不少令人头痛的隐患 。大家可能不晓得, NTFS 支撑包括在一个文件中的多数据流,而这个包括了全部内容的主数据流被称之为“DATA”, 因此使得在阅读器里直接 拜访 NTFS 系统的这个 特点而轻易的 拿获在文件中的脚本程序成为了可能 。然而直接招致 ::$DATA 的缘由是由于 IIS 在解析文件名的时候出了问题,它没有很好地 标准文件名 。

  我们该如何解决这个问题呢? 步骤有几种:

  a、是将 .asp 文件 存放的目录设置为不可读(ASP 仍能执行),这样 html、 css 等文件就不能放在这个目录下,不然它们将不能被阅读 。

  b、是安装微软提供的补丁程序,下载的地址如下( 留神针对不同的系统有不同的补丁):

  该补丁是针对 IIS3, Intel 平台

  ftp.microsoft.com/bussys/iis/iis-public/fixes/cht/security/iis3-datafix/iis3fixi.exe

  该补丁是针对 IIS3, Intel 平台

  ftp.microsoft.com/bussys/iis/iis-public/fixes/cht/security/iis3-datafix/iis3fixa.exe

  该补丁是针对 IIS4, Alpha 平台

  ftp.microsoft.com/bussys/iis/iis-public/fixes/cht/security/iis4-datafix/iis4fixi.exe

  该补丁是针对 IIS4, Alpha 平台

  ftp.microsoft.com/bussys/iis/iis-public/fixes/cht/security/iis4-datafix/iis4fixa.exe

  c、是在服务器上安装 ie4.01sp1,这个是不是有效,作者本人没具体试过 。

  d、存粹作者的个人意见,尽量安装英文版的 NT,而不要 使用中文版,究其缘由作者也说不清,只不过依据 实际 教训英文版的 NT 较中文版 bug 少,假如哪位朋友晓得缘由千万要告诉我 。

  三 . 支撑 ASP 的免费主页空间以及 虚构主机服务的服务器面临的问题

  1、服务器上的 ASP 代码很可能被人 其余 占有 asp 权限的人非法猎取 。

  举个很 容易的例子,在微软提供的 ASP1.0 的例程里有一个 .asp 文件专门用来查看其它 .asp 文件的源代码,该文件为 ASPSamp/Samples/code.asp 。假如有人把这个程序上传的服务器,而服务器端没有任何 提防措施的话,他就 可以很容易地查看他人的程序 。

  例如 :

  code.asp?source=/directory/file.asp
2、 使用的 ACCESS mdb 数据库可能被人下载一般来说在提供 asp 权限的免费主页服务器上不可能提供代为设定 DSN 的服务, 因此 asp 程序 使用的数据库通常都局限在 使用 mdb 库,而 mdb 远端数据库所在的位置是 使用我们在第十四期中讲到过的 DSN-less 步骤直接在 asp 中指定的, 步骤如下 :

  < %connstr = "DBQ="+server.mappath("database/source.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;ImplicitCommitSync=Yes;MaxBufferSize=512;MaxScanRows=8;PageTimeout=5; SafeTransactions=0;Threads=3;UserCommitSync=Yes;"%>

  正如前文所言,在这种状况下 mdb 库很可能被他人下载,从而造成诸如密码等的泄露 。

  所以,作为 webmaster 应该采取 定然的措施,严禁 code.asp 之类的程序( 仿佛很难办到 , 但 可以定期检索 特色代码), 制约 mdb 的下载 。

  3、来自 壮大的 filesystemobject 组件的 挟制

  IIS3、 IIS4 的 ASP 的文件操作都 可以通过 filesystemobject 实现,包括文本文件的读写目录操作、文件的拷贝改名删除等,然而这个 壮大的 性能也留下了十分惊险的“后门” 。利用 filesystemobjet 可以窜改下载 fat 分区上的任何文件 。 即便是 ntfs 分区,假如权限没有设定好的话,同样也能 毁坏,一不小心你就可能 蒙受“灭顶之灾” 。遗憾的是众多 webmaster 只晓得让 web 服务器运行起来,很少对 ntfs 进行权限设置,而 NT 目录权限的默许设置偏偏安全性又低得可怕 。 因此,假如你是 Webmaster,作者强烈 提议你紧密关注服务器的设置,尽量将 web 目录建在 ntfs 分区上,目录不要设定 everyone full control, 即便是是治理员组的成员一般也没什么必要 full control, 惟独有读取、更改权限就足够了 。

  四、 ASP 利用程序可能面临的 突击过去许多 Internet 上 CGI 写的留言本或 BBS 是把客户输入的留言变为一个变量, 而后再把这个变量插入到显示留言的 HTML 文件里, 因此客户输入的文本如要在 HTML 文件里显示就得 相符 HTML 标准,而 CGI 程序里一般都加入了特定的 HTML 语言 。当客户输入内容,插入 HTML 文件时,即同时插入到了头尾 HTML 语句中,如:

  < font>客户输入的变量 < /font>但假如把前后的 HTML 标记给敝屏了,就 可以做众多 事件了 。

  如输入时打上:

  < /font> 相符 HTML 标准的语句 < font>前后的 < font>是用来敝屏 CGI 中的 HTML 语句用的 。插入到 HTML 文件里的就变成了:
  < font>< /font> 相符 HTML 标准的语句 < font>< /font>由于这样一个 特点,使得写个 javascript 的死循环变得十分容易, 惟独在输入框中输入:
  < a href="URL" onMouseover="while(1){window.close(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\')}">或 < a herf="URL" onMousever="while(ture){window.close(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\')}">

  那么就能让 其余查看该留言的客户的阅读器因死循环而死掉 。 ASP 开发的程序同样可能存在这个问题, 因此当你用 asp 编写 类似程序时应该做好对此类操作的 提防,譬如 可以写一段程序推断客户端的输入,并屏蔽掉全部的 HTML、 Javascript 语句 。

  看完本期后,假如你十分的震惊,那么你必须彻底对你现有的网站或 asp 程序进行一翻检测,看看是不是存在上述 漏洞 。假如你对文中所谈到的 漏洞都有所了解并已有足够的对策,那么在 恭喜你的同时,还是要 揭示你 时常查看你的网站和 asp 程序,假如你有数据库也应该 时常查看,以防他人利用一些我们未知的 漏洞进行 突击 。最终,假如你对本文所 念叨的 asp 安全性问题有什么独特的见解,或对 漏洞有新的发现, 盼望能来信同我探讨 。