暴库大法

来源:互联网 发布:ea凝胶骗局知乎 编辑:程序博客网 时间:2024/05/17 06:55

三部分内容,两种利用加防范

一,关于"%5c"暴库大法:

这种方法被认为是暴库绝招,很是流行了一阵(随着知道的人多了,防备也加强了,没以前那么有效了)。这种方法,简单点说就是,打开网页时,把网址址中的"/"换成"%5c",然后提交,就可以暴出数据库的路径。
  实际上,并不是所有网址都有效,需要"asp?id="这样的网页地址(表示有调用数据库的行为),如果你确认这个网页有调用数据库的,后面不是这样的也可以,比如chklogin.asp等也可以。(当然,也还有其它条件,后面再谈。)

先举个例子,
http://localhost/2222/regs.asp?post=log   把第二个"/"换成"%5c"

http://localhost/2222%5cregs.asp?post=log

提交后会得到如下结果:Microsoft JET Database Engine 错误 '80004005' 
'c:\inetpub\wwwroot\db\daidalos.mdb'不是一个有效的路径。 确定路径名称拼写是否正确,以及是否连接到文件存放的服务器。 
/2222/db/user.asp,行 6

"%5c"暴库法,它不是网页本身的漏洞,而是利用了IIS解码方式中的一个特性,如果IIS安全设置不周全,而网页设计者未考虑IIS错误,就会被人利用。
为何要用"%5c"?它实际上是"\"的十六进制代码,也就是"\"的另一种表示法。在电脑中,它们是一个东东。
、、、\\\\\\\\\
但提交"\"和"%5c"却会产生不同的结果,在ie中,我们把下面第一个地址中的"/"换成"\"提交:
http://localhost/2222/regs.asp?post=log

http://localhost/2222\regs.asp?post=log

二者的访问结果是一样的。ie会自动把"\"转变成"/",从而访问到同一地址。
但是,当我们把"/"换成十六进制写法"%5c"时,ie不会对此进行转换。地址中的"%5c"被原样提交了

当IIS收到后解析时,又会将%5c还原成"\"。这样,iis中网址的相对路径就变成
/2222\ regs.asp。这一点很重要。问题正是从这里开始的


在ASP网页中,凡调用数据库时,都会用到一个连接数据库的网页conn.asp(程序员们都喜欢起这个名字。不过今天我们讲课用的整站系统的连接数据库文件的名字是user.asp),它会创建一个数据库连接对象,定义要调用的数据库路径
我们来看一下这个系统的数据库连接文件。User.asp(和conn.asp一个作用只不过名字不一样)的写法
<%
dim udb
udb="db/daidalos.mdb"
  Set Conn = Server.CreateObject("ADODB.Connection")
myconn="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&udb&"")
  Conn.Open MyConn
%>

Server.MapPath方法的作用是将网站中的相对路径转变成物理上的绝对路径。为何要这样?因为连接数据库时,须指明它的绝对路径。

(这里可能有人不明白,什么相对路径、绝对路径?IIS为了不让访问者知道真实的实际路径,并且确保网站不因变换地址而影响使用,它采用了一种相对路径来表示目录与文件之间的关系。也就是网址目录只表示从根目录起的相对位置。

 Server.MapPath实际是通过 网页目前执行时所在的相对路径,比如上面例子中user.asp调用的数据库的相对路径是db/daidalos.md,这样就IIS就确定了数据库的相对路径:"/db/daidalos.mdb"。到这里。还没有出现错误。

数据库的调用需要绝对路径。。这些都只是相对的路径,如何变为真实路径呢?

Server.MapPath方法正是通过把"网站根目录的物理地址+完整的相对路径",从而得到真实的物理路径。

我们今天的跟目录地址就是。I:\盗帅下载程序 V2.0 正式版

IIS会把这两个地址相加。得到数据库地址 I:\盗帅下载程序 V2.0 正式版   +\db\daidalos.md 来正常调用。 。到这里。还是没有出错。
  明白这些,我们再来理解暴库就不难了,当我们提交http:// http://localhost/2222%5cregs.asp?post=log时,regs.asp调用user.asp后,得到的网页相对路径是这样的:/db/user.asp  "/db/daidalos.mdb。为数据库相对路径 在iis中,"/"和"\"代表着不同的意义,遇到了"\"时,认为它已到了根目录所在的物理路径,不考虑是否前面还有任何硬盘目录。。所以本该数据库的绝对路径是 I:\盗帅下载程序 V2.0 正式版\db\daidalos.mdb。却因为IIS在调用reg.asp 的时候。前面有个\ 于是呼。。。。。。。呼呼呼呼湖。。。就认为前面已经是跟目录的物理路径了。只需要+上目录就可以完成任务了。于是+继续向更原始的地方去找绝对路径。于是呼。找到了他的爷爷。爷爷???爷爷就是网站目录属性里对应的东西。我们看下属性。(本来是该找爸爸的)C:\Inetpub\wwwroot构成了。调用数据库的地址。就是这里了。C:\Inetpub\wwwroot\   db\daidalos.md 但是这个地址不存在啊。数据库连接当然会失败,于是IIS会报错,并给出错误原因
(注意这里的数据库路径和网站根目录不在同一个和盘内)

Microsoft JET Database Engine 错误 '80004005'

'c:\inetpub\wwwroot\db\daidalos.mdb'不是一个有效的路径。 确定路径名称拼写是否正确,以及是否连接到文件存放的服务器。

/2222/db/user.asp,行 6 
这就是暴库语句的来历。

二,conn.asp暴库大法
这里,conn.asp只是表示数据库调用文件,因为多数都是这个名字(有些网站改名,我们也视同conn.asp)。其实,这种暴库法是最先出现的,以前很多牛人都对此进行过探讨。只是在"%5c"暴库大法出现后,倒较少有人提及。
我们再来ASP系统一个盗帅的例子
提交
_ http://localhost/2222/db/user.asp
得到如下结果:Microsoft JET Database Engine 错误 '80004005' 
'I:\盗帅下载程序 V2.0 正式版\db\db\daidalos.mdb'不是一个有效的路径。 确定路径名称拼写是否正确,以及是否连接到文件存放的服务器。 
/2222/db/user.asp,行 6

有人可能会说,这么简单就暴库,好爽!是不是所有网站都可以这样啊?当然不是,已作了防护的肯定不行,没作防护的,要暴库也是有条件的。

如果说第一种暴库法是利用了绝对路径出错,那么,这种暴库法就是利用了相对路径出错。
一般来说,只要conn.asp不在根目录的系统,而调用文件在根目录,就会出现这种问题。当然这种说法也是经验性的,准确的说就是,conn.asp与调用它的文件,如果相对位置改变了,就会报错,暴出数据库路径。这样说可能有人不明白,不要紧,接着看你就会明白的

文章系统的 user.asp位于db目录下,而很多调用它的文件在系统根目录下,比如regs.asp等,这样当conn.asp执行时,它是在系统根目录I:\盗帅下载程序 V2.0 正式版\下执行的,因此,conn.asp文件中,调用数据库时,它考虑到执行时的目录路径,因而数据库的相对地址写成如下:

dim udb
udb=" db/daidalos.mdb"

这样,当它在系统根目录下执行时,数据库的相对路径为根目录下的"db"目录内。这是很正常的情况。。但是当我们直接请求它时,它工作的当前目录是在根目录下的db目录内,这时,数据库的相对路径就变成了" db/db/daidalos.mdb ",这样它当然出错。得到的绝对路径中多出了"inc。

三,暴库的防范
说白了,暴库是因为IIS服务器会对每个执行错误给出详细说明,并停止执行,而IIS的默认设置又是将错误信息返回给用户。因此,要避免暴库,就应改变IIS的默认设置,选取错误时只给一个出错的页面,不给详细信息。如

"处理 URL 时服务器出错。请与系统管理员联系。"
其实,作为网站管理者,无法对虚拟主机设置时,只能在网页中加强防范。就是在可能出错的页面加上这一句:
"On Error Resume Next",特别是在conn.asp文件中要加上。
它的意思是出错后,恢复执行下面的,也就是不理会出错,当然就不会给出错误信息了。