天天看点

catalog_type.asp范例执行外部程序的漏洞(台湾文献)

                   catalog_type.asp范例执行外部程序的漏洞(台湾文献)

皮鲁编译

The only way to stop a hacker is to think like one.

这个「微软catalog_type.asp范例执行外部程序的漏洞」,全世界你能找到的数据,大概只有一篇如下的邮件:

Dear Team,

Exploiting ODBC Features that come with your sample programs is

not a mistery for any of us. So Let me add one more ASP Sample with similar

troubles:

http://server/ASPSamp/AdvWorks/equipment/catalog_type.asp

or yet

http://server/AdvWorks/equipment/catalog_type.asp

It lets you execute shell comands like the other scripts. It is

a Active Server Page so it runs the query as a local user and doesn't need

any type of Remote Data Service to access the DSN. It just require the

default DSN (advworks) set.

The Exploit command line can be for instance :

http://server/AdvWorks/equipment/catalog_type.asp?ProductType=|shell("cmd+/c +dir+c:/")|

Sorry if this SERIOUS security failure was already reported.

Regards,

Wanderley Junior

光从这些内容,你能知道多少东西?知道多少内涵?知道骇客多少的想法?

而我可以告诉你以下这些内容........

catalog_type.asp范例执行外部程序的漏洞

漏洞信息

■ 漏洞名称:「catalog_type.asp范例执行外部程序的漏洞」

■ 漏洞类型:攻击入侵/信息泄漏型

■ 漏洞威胁:极高

■ 公布日期:1999年5月/7月29日/你看到本书的日期

■ 影响平台:

Windows NT 4.0(Option Pack)

+ Internet Information Server 4.0

漏洞内容

这个漏洞其实应该算是一个非常大的系统漏洞,但是讲实话,知道这个漏洞的人其实蛮少的,原因是在这个漏洞公布出来的前几天,另一个更大的「MDAC/RDS」漏洞出现,「MDAC/RDS」很快就吸引住所有骇客及网管安全人员的目光,所以使得知道「catalog_type.asp范例执行外部程序漏洞」的人,可说是少之又少,我自己是真没在国内看到有别人提过这个漏洞的相关消息(抱歉,也许是我孤陋寡闻),不过……这个漏洞其实是后来发现「MDAC/RDS」漏洞的一个基础…….

漏洞发生的起源在于Microsoft Windows NT 4.0 Option Pack里面,安装过IIS 4.0的读者都知道,我们一般在NT 4.0将旧版IIS服务器升级到4.0版时,都是安装微软的Option Pack套件,而在安装Option Pack套件时,内定安装的功能里面,会安装一些ASP的范例程序,来提供网站开发人员一个学习ASP程序设计时的参考,如图1所示。

catalog_type.asp范例执行外部程序的漏洞(台湾文献)

                                           (图1)

在这些众多的ASP范例程序中,微软有示范一个使用「ODBC-Open Database Connectivity:开放式数据库连接界面」API开发的数据库范例,名字叫「AdvWorks」,内定它是安装在磁盘

「C:/Inetpub/ASPSamp/AdvWorks」

目录下,而在IIS服务器内是对应到「AdvWorks」这个「虚拟目录」,如图2所示。

catalog_type.asp范例执行外部程序的漏洞(台湾文献)

                                              (图2)

所以你要检测你服务器是否有安装这个ASP数据库范例最快的方法,就是键入如下网址:

「http://server/AdvWorks/」

如果有看到如图3的网页出现,就代表你服务器有安装它。

catalog_type.asp范例执行外部程序的漏洞(台湾文献)

                                             (图3)

这个范例最主要是示范如何用ASP程序,来建构一套产品目录的网页数据库查询系统,里面有非常多的程序设计技巧,提供你撰写ASP连结数据库的参考,当然,你可以看到我在图3下方标示的地方,它还有提供你浏览ASP原始码的功能,这又造成另一个系统漏洞存在(后面会再提到)。如果你仔细分析这个「AdvWorks」数据库系统,你会发现大部分的数据查询工作都是由这支「catalog_type.asp」程序来负责,如图4所示。

catalog_type.asp范例执行外部程序的漏洞(台湾文献)

                                               (图4)

「catalog_type.asp」程序内定安装的位置会在「C:/Inetpub/ASPSamp/AdvWorks/equipment」这个目录里面,因此你可以用如下的网址来存取到它:

http://server/ASPSamp/AdvWorks/equipment/catalog_type.asp

http://server/AdvWorks/equipment/catalog_type.asp

我将这支程序部份的程序代码节录如图5,你可以看到它由使用者传来的「ProductType」查询字符串对应到SQL查询语法的关系,以图4下方的「catalog_type.asp?ProductType=crampon」字符串为例,它对应到SQL语法时,会变成如下指令:

SELECT * FROM Products WHERE ProductType = ' crampon'

catalog_type.asp范例执行外部程序的漏洞(台湾文献)

                                          (图5)

好了,接下来是我们这篇文章的重点。在这个漏洞公布的前后,有另一篇有关Windows NT数据库系统的安全研究报告出来,标题为「NT ODBC Remote Compromise」(http://www.wiretrip.net/rfp/p/doc.asp?id=3&ishell("指令")|」语法:

Select * from Table where Filed=' |shell("指令")| '

你学过「Visual Basic for Application」的话,就知道「|shell("指令")|」是用来执行外部程序档案的,这下可好,透过一般数据库的查询功能,竟然可以加入执行服务器程序的动作,这岂不是太危险了?

所以在这篇「NT ODBC Remote Compromise」的研究报告出炉后没多久,另一篇「MDAC/RDS」的安全漏洞就被发现,造成1999年到现在,许多服务器都因这个SQL查询语法+「|shell("指令")|」的问题而被入侵,真是祸害不轻。(有关「MDAC/RDS」的安全漏洞请参考本书另一篇「MDAC/RDS漏洞」里面的说明)

现在拉回到「catalog_type.asp」范例程序里面,究竟它跟「NT ODBC Remote Compromise」这篇研究报告提到的问题有何关连。请先看图6,你可以知道微软「AdvWorks」范例使用的数据库档案是扩展名「.mdb」的Microsoft Access数据库,这下好了,Microsoft Access数据库使用的引擎核心正好是微软「JET database engine」,那不就代表「AdvWorks」范例存有「NT ODBC Remote Compromise」文章中提到的SQL查询字符串+「|shell("指令")|」的问题,而在前头我又跟你讲了有关「catalog_type.asp」程序查询字符串与SQL语法的对应关系,所以…….你还不懂吗……..嘿!嘿!嘿!…………..

catalog_type.asp范例执行外部程序的漏洞(台湾文献)

                                              (图6)

既然「catalog_type.asp」程序的查询字符串可以用「?ProductType=查询字符串」方式来传入,而它又会自己把查询字符串变成SQL语法的内容,所以我们用这样的查询字符串试试:

「|shell("cmd+/c+dir+c:/ > c:/hahaha.txt")|」

如图7,输入这样的网址:

「http://192.168.0.1/AdvWorks/equipment/catalog_type.asp?ProductType=|shell("cmd+/c+dir+c:/ > c:/hahaha.txt")|」

看看它是否真的会在IIS服务器上执行。

catalog_type.asp范例执行外部程序的漏洞(台湾文献)

                                                 (图7)

这行「cmd+/c+dir+c:/ > c:/hahaha.txt」指令的意义就是将「C:/」根目录的档案信息写到「c:/hahaha.txt」档案内,所以如果真被IIS执行的话,你会看到如图8的画面,真的在服务器内多了一个「hahaha.txt」档案。

catalog_type.asp范例执行外部程序的漏洞(台湾文献)

                                            (图8)

我们打开「hahaha.txt」档案的内容看看,如图9,里面果然是执行「cmd+/c+dir+c:/」后所显示的档案信息,证明查询字符串「|shell("cmd+/c+dir+c:/ > c:/hahaha.txt")|」确实是被加入到SQL语法内而被执行。

catalog_type.asp范例执行外部程序的漏洞(台湾文献)

                                                (图9)

这下可好,透过「catalog_type.asp」范例可以让你任意执行外部的程序,你说这难道不严重吗?不是「catalog_type.asp范例执行外部程序的漏洞」吗?

入侵分析

骇客会如何利用「catalog_type.asp」范例程序的漏洞来换掉你网站网页呢?其实方法很简单,只要骇客自己将它做的网页内容覆盖掉原本网站的网页,就可以了。这方面置换网页的工作,一个最简单的方法是可以利用「cmd.exe」里面的「echo」指令,当你使用

「echo "字符串" > 1.txt」

指令时,它会把echo后面的「字符串」内容写入到1.txt这个档案内,如图10所示。

catalog_type.asp范例执行外部程序的漏洞(台湾文献)

                                              (图10)

所以骇客可能利用类似如下的查询字符串

「|shell("cmd+/c+echo+Hacked by catalog_type.asp! > c:/Inetpub/wwwroot/default.htm")|」

代表利用「echo」指令将「Hacked by catalog_type.asp!」内容写入到「C:/InetPub/wwwroot/default.htm」这个档案内(IIS服务器预设的首页档案),在浏览器键入如下网址:

「http://192.168.0.1/AdvWorks/equipment/catalog_type.asp?ProductType=|shell("cmd+/c+echo+Hacked by catalog_type.asp! > c:/Inetpub/wwwroot/default.htm")|」

如图11所示。

catalog_type.asp范例执行外部程序的漏洞(台湾文献)

                                                   (图11)

如果档案写入成功,OK,到此骇客已经成功入侵你的IIS服务器,网站首页已经被骇客骇掉变成了:「Hacked by catalog_type.asp!」的字眼,如图12所示。

catalog_type.asp范例执行外部程序的漏洞(台湾文献)

                                              (图12)

上面就是我分析骇客可能利用「catalog_type.asp范例执行外部程序漏洞」的入侵过程,是不是很可怕,全部步骤透过IE浏览器就可以完成…….所以你能说设计ASP程序时可以不慎重?范例程序的漏洞都不严重吗?

code.asp泄漏ASP原始码的漏洞

除了「catalog_type.asp」程序之外,我发现在「AdvWorks」数据库范例内还有一个范例程序有问题,它就是「code.asp」程序,也是前面图3我标示浏览ASP原始码漏洞时没有提到的地方。

如图13,这是「code.asp」程序的部份原始码内容,从程序一开头NOTICE的标示,这个浏览程序本来设计应该是只让使用者浏览「AdvWorks」或「ASPSamp」目录下范例档案的内容才对。

catalog_type.asp范例执行外部程序的漏洞(台湾文献)

                                                  (图13)

可是让我们看一下它的目录检查程序代码是如何判断的,如下:

If InStr(1, strPath, "/AdvWorks/", 1) Or InStr(1, strPath, "/ASPSamp/", 1)

它只判断目录开头的字符串是不是「/AdvWorks/」或「/ASPSamp/」,对于切换上层目录的「..」字符串,它却没有检查,所以你可以用类似「/AdvWorks/../../../winnt/win.ini」的方法,来浏览到其它目录下的档案内容,如图14,输入类似网址:

「http://192.168.0.1/AdvWorks/code.asp?source=/AdvWorks/../../../winnt/win.ini」

就可以看到不该看到的「win.ini」档案的内容。

catalog_type.asp范例执行外部程序的漏洞(台湾文献)

                                                (图14)

有关没有判断「..」字符串的问题,在微软许多的漏洞里面都发现类似的错误,这个「..」字符串真可说是安全问题上的一大麻烦。

漏洞防堵

如果你的服务器发现有此漏洞,你可以参照下面的说明将它防堵。

一、这个漏洞防堵的方法没有第二句话,将「AdvWorks」范例从你服务器内删除就对了(删除「/Inetpub/ASPSamp/AdvWorks」目录下整个内容)。其实除了「AdvWorks」之外,应该所有安装在服务器内的ASP范例你都应该删除,包括这些目录下的所有东西:

/InetPub/ASPSamp

/InetPub/iissamples

/InetPub/scripts/Samples

/InetPub/wwwroot/Samples

二、将所有ASP范例从IIS服务器内的「虚拟目录」移除。

以移除「AdvWorks」虚拟目录为例,启动Internet服务管理员,如图15,在「ADVWORKS」字符串上按下鼠标右键,然后选「删除」菜单,然后在询问窗口中按下「是(Y)」确定删除就可以了。

catalog_type.asp范例执行外部程序的漏洞(台湾文献)

                                               (图15)

三、这个漏洞其实跟另一个「MDAC/RDS」漏洞的基础原理是一样,因此强烈建议各位网管去参考本书另一节有关「MDAC/RDS」漏洞的说明。

不管你是执行那种方法防堵此漏洞,记住在你执行这些步骤之后,千万记得再次参照前面的说明,检测漏洞一次,务必确保此漏洞是真正彻底被防堵。

参考数据

□ NT ODBC Remote Compromise

http://www.wiretrip.net/rfp/p/doc.asp?id=3&iface=2(撰写by鲍友仲)

catalog_type.asp范例执行外部程序的漏洞(台湾文献)
上一篇: 二三层转发