![]() |
来源:安全中国 |
适合读者:脚本入侵爱好者、脚本程序员、漏洞分析员 前置知识:无 脚本小子:不管是%5c也好,Conn.asp也好,暴库都是入侵者最喜欢的一种省力而有效的入侵手法,但是很多朋友只是知道怎么用,知道如何能得到数据库,但原理究竟是什么?网络上也好,安全公司的朋友们也好,都没有正式的给出原理的分析和解释。本文的作者就试图从原理上去分析这个漏洞的形成和规律,不管对错,至少已经比我们先迈出了一大步! 我看暴库漏洞原理及规律
有关暴库的方法,高手们常在入侵文章中提到,但多是一笔带过,有些就某一个方法谈的,也多是就方法进行探讨。最近有一篇《再谈%5c暴库的利用》的文章,算是对暴库进行了一些总结,因而在网是流传很广。但仍没有谈及原理,而且结论也只是就于经验,似是而非,于是决定来谈谈暴库的原理与规律。不到之处,大家多指教。 “%5c”暴库大法 这种方法被认为是暴库绝招,很是流行了一阵,但是和其它漏洞一样,随着知道的人多了,防备也加强了,没以前那么有效。这种方法简单点说就是在打开网页时,把网址址中的“/”换成“%5c”,然后提交,就可以暴出数据库的路径。 实际上,并不是所有网址都有效,需要“asp?id=”这样的网页地址,或者说表示有调用数据库的行为的地址。如果你确认这个网页有调用数据库的,后面不是这样的也可以,比如Chklogin.asp等也可以(还有其它条件,后面再谈)。先举个黑防第四轮实验室中的例子: 这是黑防实验室的一个系统,暴库是小编们故意开放的,因为它的关口不是注入,而是进入后台后如何获得WebShell。可以看到我们直接获取了数据库地址,可以下载了。 现在很多人都知道这个方法了,我就不多举例了。但清楚暴库原理的人估计是不多的,有人成功,有人不成功,《再谈%5c暴库的利用》一文总结说,须变换第二个“/”为“%5c”才行。很有实用性,但这个结论只是一种经验,其实并不正确,让我们先看看它的原理。 “%5c”暴库法,它不是网页本身的漏洞,而是利用了IIS解码方式中的一个特性,如果IIS安全设置不周全,而网页设计者未考虑IIS错误,就会被人利用。为何要用“%5c”?它实际上是“”的十六进制代码,也就是“”的另一种表示法。在电脑中,它们是同一个东东,但提交“”和“%5c”却会产生不同的结果。在IE中,我们把下面第一个地址中的“/”换成“”提交: 设置过IIS的人都会知道,每一个网站,都必须指定它在硬盘上的物理目录,比如上例中,网站根目录所在的物理目录为:“D:1”,Server.MapPath方法正是通过把“网站根目录的物理地址+完整的相对路径”,从而得到真实的物理路径,数据库在硬盘上的物理路径是:D:1yddownadminrds_dbd32rfd213fg.mdb。IIS以“”表示真实路径的目录关系,而以“/”表示虚拟路径,这可能就是IE会自动把我们地址中的“”转为“/”的原因。 明白这些,我们再来理解暴库就不难了,当我们提交:http://219.237.81.46/yddown%5cview.asp?id=3时,View.asp调用Conn.asp后,得到的网页相对路径是这样的:“/yddown”,再加上“admin/rds_dbd32rfd213fg.mdb”,就得到“/yddown+admin/rds_dbd32rfd213fg.mdb”。在IIS中,“/”和“”代表着不同的意义,遇到了“”时,认为它已到了根目录所在的物理路径,不再往上解析(为何不再往上解析?后面还会分析),于是网站的完整相对路径变成了:“admin/rds_dbd32rfd213fg.mdb”,再加上根目录的物理路径,得到的真实路径变成:“D:1adminrds_dbd32rfd213fg.mdb”,而这个路径是不存在的,数据库连接当然会失败,于是IIS会报错,并给出错误原因: 《再谈%5c暴库的利用》一文中说,必须是网址中的第二级目录才可以成功,第一个不行。我们从理论上来分析一下,看到底有无规律。还以上面网址为例,如果将第一个“/”换成“%5c”,得到的网站相对路径变成“yddows/admin/rds_dbd32rfd213fg.mdb”,解析到“”时,认为已到物理目录,不再往前解析。而事实上,它确实也是根目录,所以得到的物理路径为:“D:1dydowadminrds_dbd32rfd213fg.mdb”,这个路径是正确的,所以不会出错,当然不会暴出数据库路径。 我先举个例子,再说原因: 上面的结果很显然,Channely已位于H:盘的根目录上,上面再没有目录。事实上,很可能网站在D:盘或E:盘,而通过IIS中设置Channely虚拟子目录指向网站根目录以外的“H:channely”。 《再谈%5c暴库的利用》中还说了一种针对只有一级目录的解决方法:“其实一级目录我们也同样可以成功的,我们可以通过构造一个多级目录来达到暴库的目的。如:
这是因为相对路径变了,所以无法正确找到图片路径,但绝对路径解析时被“%5c”舍弃了,没有出错,当然暴不出库了。 |