细说暴库的原理与方法
作者: 越南邻国宰衡 http://www.study100.org/
这是我发表在黑客防线2005年第二期上的一文。本日在黑基上看到有人谈暴库,就找出来帖了上去。 本身也把它帖上来。
SQL注入盛行很久了,我们找毛病注入目标无非是想失掉数据库内的工具,比如用户名密码等。(当然mssql数据库还可以借此获得权限)。如果我们不用注入就可以失掉整个数据库,不是更好吗?于是暴库成了一个比注入更简略的的入侵本领。
有关暴库的方法,高手们常在入侵文章中进步,但多是一笔带过,有些就某一个方法谈的,也多是就方法进行探讨。近来有一篇《再谈%5c暴库的利用》文章,算是对暴库进行了一些总结,因而在网是流传很广。但仍没有谈及原理,并且结论也只是就于履历,貌同实异,于是决议来谈谈暴库的原理与纪律。
一,关于"%5c"暴库大法:
这种方法被认为是暴库绝招,非常盛行了一阵(随着晓得的人多了,戒备也增强了,没曩昔那么有用了)。这种方法,简略点说便是,翻开网页时,把网址址中的"/"换成"%5c",然后提交,就可以暴出数据库的路径。
现实上,并不是全部网址都有用,需要"asp?id="这样的网页地址(表示有调用数据库的行为),如果你确认这个网页有调用数据库的,后面不是这样的也可以,比如chklogin.asp等也可以。(当然,也还有别的条件,后面再谈。)
先举个例子,
http://219.237.81.46/yddown%5cview.asp?id=3
把第二个"/"换成"%5c"
http://219.237.81.46/yddown%5cview.asp?id=3
提交后会失掉如下效果:(图1)
Microsoft JET Database Engine 错误 '80004005'
'D:\111\admin\rds_dbd32rfd213fg.mdb'不是一个有用的路径。 确定路径称号拼写是否正确,以及是否毗连到文件存放的办事器。
/yddown/conn.asp,行12
(阐明:这是黑防实验室的一个网站,暴库是他们故意开放的,因为它的关隘不是注入,而是进入背景后如何获得shell)。
如今许多人都晓得这个方法了,我就不多举例了。但明白暴库原理的人预计是不多的。有人成功,有人不成功,《再谈%5c暴库的利用》一文总结说,须变换第二个"/"为"%5c"才行。很有实用性,但这个结论只是一种履历,实在并不正确。让我们先看看它的原理
"%5c"暴库法,它不是网页本身的毛病,而是利用了IIS解码方式中的一个特性,如果IIS安全设置不全面,而网页计划者未考虑IIS错误,就会被人利用。
为何要用"%5c"?它现实上是"\"的十六进制代码,也便是"\"的另一种表示法。在电脑中,它们是一个东东。(图2)(十六进制转换图)
但提交"\"和"%5c"却会孕育发生不同的效果,在ie中,我们把下面第一个地址中的"/"换成"\"提交:
http://219.237.81.46/yddown/view.asp?id=3
http://219.237.81.46/yddown\view.asp?id=3
二者的拜访效果是一样的。ie会自动把"\"转变成"/",从而拜访到同一地址。
但是,当我们把"/"换成十六进制写法"%5c"时,ie不会对此进行转换。地址中的"%5c"被原样提交了。这是抓包效果:(图3)
GET /yddown%5cview.asp?id=3 HTTP/1.1
当IIS收到后解析时,又会将%5c复原成"\"。这样,iis中网址的绝对路径就变成/yddown\view.asp。这一点很重要。问题正是从这里开始的。
在ASP网页中,凡调用数据库时,都市用到一个毗连数据库的网页conn.asp,它会创立一个数据库毗连工具,界说要调用的数据库路径
一个典范的conn.asp如下:
<%
dim conn
dim dbpath
set conn=server.createobject("adodb.connection")
DBPath = Server.MapPath("admin/rds_dbd32rfd213fg.mdb")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
%>
各人注意第4句:DBPath = Server.MapPath("admin/rds_dbd32rfd213fg.mdb"),Server.MapPath方法的作用是将网站中的绝对路径转变成物理上的绝对路径。为何要这样?因为毗连数据库时,须指明它的绝对路径。
(这里大概有人不明白,什么绝对路径、绝对路径?IIS为了不让拜访者晓得真实的现实路径,并且确保网站不因变换地址而影响利用,它接纳了一种绝对路径来表示目次与文件之间的干系。也便是网址目次只表示从根目次起的绝对位置。
比如:下面的网站中,网站:http://219.237.81.46的根目次为:"D:\111\"雨点下载目次则在根目次(D:\111)内的"yddown"下,我们网站拜访该站时,便是在拜访D:\111\yddown\目次,而http://219.237.81.46/yddown/admin/,它只评释了admin与yddown这个目次的绝对干系,把这个网站放在e:盘,也一样不转变admin位于yddown目次下的干系。
当Server.MapPath方法将绝对路径转为真实路径时,它现实是三部分路径加在一同失掉真实路径的:网页如今实行时所在的绝对路径,也便是从网站物理根目次起的绝对路径,比如下面例子中conn.asp处在从根目次起的"/yddown/"下;然后调用的数据库的绝对路径是admin/rds_dbd32rfd213fg.mdb,这样就失掉从根目次起的完整绝对路径:"/yddown/admin/rds_dbd32rfd213fg.mdb"。
这些都只是绝对的路径,如何变为真实路径呢?
设置过iis的人都市晓得,每一个网站,都必须指定它在硬盘上的物理目次,比如上例中,网站根目次所在的物理目次为:"D:\111",Server.MapPath方法正是经过把"网站根目次的物理地址+完整的绝对路径",从而失掉真实的物理路径。这样,数据库在硬盘上的物理路径是:d:\111\yddown\admin\rds_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:\111\admin\rds_dbd32rfd213fg.mdb",而这个路径是不存在的,数据库毗连当然会失败,于是IIS会报错,并给出错误原因:
Microsoft JET Database Engine 错误 '80004005'
'D:\111\admin\rds_dbd32rfd213fg.mdb'不是一个有用的路径。 确定路径称号拼写是否正确,以及是否毗连到文件存放的办事器。
/yddown/conn.asp,行12
这便是暴库语句的来历。
《再谈%5c暴库的利用》一文中说,必须是网址中的第二个才可以成功,第一个不行。我们从实际上来分析一下,看究竟有无纪律:
还以下面网址为例,如果将第一个"/"换成"%5c",失掉的网站绝对路径变成\yddows/admin/rds_dbd32rfd213fg.mdb,解析到"\"时,认为已到物理目次,不再往前解析。而究竟上,它的确也是根目次,以是失掉的物理路径为:"D:\111\dydow\admin\rds_dbd32rfd213fg.mdb"
这个路径是正确的,以是不会出错,当然不会暴出数据库路径。
第二个个"/"换成"%5c"的情况,我们下面已作分析,那是不是真的就第二个可以暴出呢,究竟上,它只是因为二级网站较为常见,并不是真理。如果这个下载体系是某一个网站中的三级目次,变第三个也是可以的。有时,变第三个成功的大概性更大。也便是说,最右边第一个成功大概性大。
不信?我先举个例子,再说原因:
http://nice.xmu.edu.cn/channely%5cblog/showlog.asp?cat_id=31&log_id=246
这个网址,变第二个"/"为"%5c"时,网站翻开很慢,但没有出错。(图4)
当我们把第三个"/"变成"%5c"后,提交:
http://nice.xmu.edu.cn/channely/blog%5cshowlog.asp?cat_id=31&log_id=246
可以看到,数据库暴出来了!:(图5)
Microsoft JET Database Engine 错误 '80004005'
'H:\channely\log_mdb\%29dlog_mdb%29.asp'不是一个有用的路径。 确定路径称号拼写是否正确,以及是否毗连到文件存放的办事器。
/channely/blog/conn.asp,行18
为何这样?
这是因为网站内用了假造目次,也便是说这个网站的子目次channely并不在网站根目次内,设置过IIS的人会晓得,可以将网站目次外的一个真实物理目次设置为网站的假造目次。也便是说,网站的绝对对径并不总是从根目次算起,很大概在某个子目次就指向了物理目次。
下面的效果很显然:channely已位于H:盘的根目次上,下面再没有目次。究竟上,很大概网站在d:盘或e:盘,而经过IIS中设置channely假造子目次指向网站根目次以外的"H:\channely\",这里,我们可以更明白的看到,微软iis为何没有到根目次,只要遇上"\"就认为已到物理绝对路径,不再往上解析的原因,便是为了处置惩罚这种网站假造目次与根目次不在一同的情况。它优先查询每个目次是否指向了物理路径,如果指向了,则把它换成绝对路径,而它下面的绝对地址不再解析转换。
从以上分析可知,我们只要在数据库绝对地址和它的目次绝对地址之间利用"\"("%5c"),才能到达目标。上例中,如果在第二处利用,它只会影响到IIS寻找假造的channely目次地址,而conn.asp中解析出的数据库地H:\channely\blog、log_mdb\%29dlog_mdb%29.asp还是对的,当然不会暴库。
《再谈%5c暴库的利用》中还说了一种针对只要一级目次的解决方法:
"实在一级目次我们也同样可以成功的,我们可以经过结构一个多级目次来到达暴库的目标。
如下:
http://www.target.com/noexists/..%5clist.asp?id=1
这样各人就会有新的惊喜了,呵呵。"
真的吗?从实际上分析,这种方法是不会成功的。因为遇到"%5c"时,不再解析,以是中间结构的目次,岂论是真是假,都是不起作用的,被舍弃了,绝对路径照旧到了根目次,路径不会出错。为了证明,我特地找了一个例子:
http://www.om88.com/Article_Show.asp?ArticleID=481
这个网站我们先用conn.asp方法暴出数据库(后面将讲的),阐明办事器和网站设置是可以暴库的。
http://www.om88.com/inc/conn.asp
失掉如下效果(图6)
http://www.om88.com/abc/..%5cArticle_Show.asp?ArticleID=481
却暴不出库,仍失掉正常页面(换成存在的路径效果也一样),但图片无法显示。这是因为绝对路径变了,以是无法正确找到图片路径,但绝对路径解析时被"%5c"舍弃了,没有出错,当然暴不出库。(图7)
二,conn.asp暴库大法
这里,conn.asp只是表示数据库调用文件,因为少数都是这个名字(有些网站更名,我们也视同conn.asp)。实在,这种暴库法是开始呈现的,曩昔许多牛人都对此进行过探讨。只是在"%5c"暴库大法呈现后,倒较少有人提及。实在个人认为,"%5c"暴大法随着办事器设置安全性的增强,用武之地会越来越少。而conn.asp暴库大法发扬的余地更大,可以人为结构,臭要饭确当年著名的动网大挪移完成暴库,实在也属于此类。
下面http://www.om88.com/
一例中,用"%5c"暴不出数据库路径,因为没有二级目次,但用第二种却可以暴出。它是动力体系的。
我们再来看另外一个ASP系同一个盗帅的例子:http://www.51see.org/
提交
http://www.51see.org/db/user.asp
失掉如下效果:(图8)
"Microsoft JET Database Engine 错误 '80004005'
'd:\Hosting\wwwroot\uilady_com\htdocs\db\db\downloadwoaini12345.asp'不是一个有用的路径。 确定路径称号拼写是否正确,以及是否毗连到文件存放的办事器。
/db/user.asp,行6 "
有人大概会说,这么简略就暴库,好爽!是不是全部网站都可以这样啊?当然不是,已作了防护的一定不行,没作防护的,要暴库也是有条件的。
如果说第一种暴库法是利用了绝对路径出错,那么,这种暴库法便是利用了绝对路径出错。
一般来说,只要conn.asp不在根目次的体系,而调用文件在根目次,就会呈现这种问题。当然这种说法也是履历性的,准确的说便是,conn.asp与调用它的文件,如果绝对位置转变了,就会报错,暴出数据库路径。这样说大概有人不明白,没干系,接着看你就会明白的。
我们从动力文章体系提及:
动力文章体系的conn.asp位于体系的inc目次下,而许多调用它的文件在体系根目次下,比如User_ChkLogin.asp等,这样当conn.asp实行时,它是在体系根目次D:\wwwroot\zyx688\wwwroot\下实行的,因此,conn.asp文件中,调用数据库时,它考虑到实行时的目次路径,因而数据库的绝对地址写成如下:
dim db
db="database/fp360609.asp"
这样,当它在体系根目次下实行时,数据库的绝对路径为根目次下的"database"目次内。但当我们直接恳求它时,它事情确当前目次是在根目次下的INC目次内,这时,数据库的绝对路径就变成了"inc/database/fp360609.asp",这样它当然出错。失掉的绝对路径中多出了"inc。为了让各人看得更明白,我们举一个可以用两种方法暴库的网站,比较一下看有何不同:
提交:http://www.pofen.com/sc/down%5cshow.asp?id=437
失掉:
"Microsoft JET Database Engine 错误 '80004005'
'D:\Webdata\pofen.com\sc\db\download.mdb'不是一个有用的路径。 确定路径称号拼写是否正确,以及是否毗连到文件存放的办事器。
/sc/down/db/user.asp,行6 "(图9)
再提交:http://www.pofen.com/sc/down/db/user.asp
失掉:
"Microsoft JET Database Engine 错误 '80004005'
'D:\Webdata\pofen.com\sc\down\db\db\download.mdb'不是一个有用的路径。 确定路径称号拼写是否正确,以及是否毗连到文件存放的办事器。
/sc/down/db/user.asp,行6 "(图10)
两种方法失掉的绝对路径,一个比现实路径少了,一个则多了,以是路径错误而报错暴出数据库。
这两个体系都是因为conn.asp不在体系根目次下,而引起的。(实在这样的体系不止两个)。
那是不是conn.asp放在根目次,与调用的文件在一个目次下就无事呢?如果在一同,当然没事,但牛人自有牛办法,可以经过结构方法来形成绝对路径变化,一样能到达暴库的目标。比如,动网的大挪移伎俩,将conn.asp移位,从而暴库。当然,现实操作中,因为conn.asp移走后,网站无法事情,以是没有成功。但这种思路照旧给许多人启发。如果有一种方法可以复制而不是挪动,或者说,挪动的不是conn.asp,而是调用conn.asp的别的文件比如chklogin之类的,实际上就可以成功。(当然,如果办事器和网页对暴库进行了安全处置惩罚,便是另一回事)。这种方法,当也便是一些牛人把网页存到本地改路径而搞出来的。本日刚看到一个暴动易数据库的最新方法,其原理也是结构错误而到达获得真实路径的目标。
三,暴库的防范
说白了,暴库是因为IIS办事器会对每个实行错误给出细致阐明,并停止实行,而IIS的默认设置又是将错误信息前往给用户。因此,要制止暴库,就应转变IIS的默认设置,选取错误时只给一个出错的页面,不给细致信息。如图
"处置惩罚 URL 时办事器出错。请与体系管理员接洽。"
实在,作为网站管理者,无法对假造主机设置时,只能在网页中增强防范。便是在大概出错的页面加上这一句:
"On Error Resume Next",特别是在conn.asp文件中要加上。
它的意思是出错后,规复实行下面的,也便是不睬会出错,当然就不会给出错误信息了。
动易体系3.62版的加上后,如今就暴不出路径了。而天意商务网,conn.asp也不在根目次,但因为加了这句,也暴不出数据库。
- 文章作者: 福州军威计算机技术有限公司
军威网络是福州最专业的电脑维修公司,专业承接福州电脑维修、上门维修、IT外包、企业电脑包年维护、局域网网络布线、网吧承包等相关维修服务。
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和声明。否则将追究法律责任。
TAG:
评论加载中...
|