教你如何暴库(网站入侵)

来源:百度文库 编辑:神马文学网 时间:2024/04/29 23:08:30
整理一些暴库知识
原理:
一、方式
暴库的方式有多种多样,我知道的就有3种以上,常见的暴的方法有:%5c类暴,conn.asp暴,ddos暴等等
二、原理
"%5c"暴库法,它不是网页本身的漏洞,而是利用了IIS解码方式中的一个特性,如果IIS安全设置不周全,而网页设计者未考虑IIS,就会被人利用。
为何要用"%5c"?它实际上是"\"的十六进制代码,也就是"\"的另一种表示法。在电脑中,它们是一个东东。
但提交"\"和"%5c"却会产生不同的结果,在ie中,我们把下面第一个地址中的"/"换成"\"提交:
_blank> http://hxhack.com/soft\view.asp?id=58
_blank> http://hxhack.com/soft%5cview.asp?id=58
二者的访问结果是一样的。ie会自动把"\"转变成"/",从而访问到同一地址。
但是,当我们把"/"换成十六进制写法"%5c"时,ie不会对此进行转换。地址中的"%5c"被原样提交了。
当IIS收到后解析时,又会将%5c还原成"\"。这样,iis中网址的相对路径就变成/Soft/html\13/。这一点很重要。问题正是从这里开始的。
在ASP网页中,凡调用数据库时,都会用到一个连接数据库的网页conn.asp,它会创建一个数据库连接对象,定义要调用的数据库路径
一个典型的conn.asp如下:
<%
dim conn
dim dbpath
set conn=server.createobject("adodb.connection")
DBPath = Server.MapPath("admin/hack58.mdb")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
%>
大家注意第4句:DBPath = Server.MapPath("admin/hack58.mdb"),Server.MapPath方法的作用是将网站中的相对路径转变成物理上的绝对路径。为何要这样?因为连接数据库时,须指明它的绝对路径。
(这里可能有人不明白,什么相对路径、绝对路径?IIS为了不让访问者知道真实的实际路径,并且确保网站不因变换地址而影响使用,它采用了一种相对路径来表示目录与文件之间的关系。也就是网址目录只表示从根目录起的相对位置。)
比如:上面的网站中,网站: http://hxhack.com/的根目录为:"E:\web\",下载目录则在根目录(E:\web\)内的"soft"下,我们网站访问该站时,就是在访问E:\web\soft\目录,而 http://hxhack.com/soft/admin/,它只表明了admin与soft这个目录的相对关系,把这个网站放在D:盘,也一样不改变admin位于soft目录下的关系。
当Server.MapPath方法将相对路径转为真实路径时,它实际是三部分路径加在一起得到真实路径的:网页目前执行时所在的相对路径,也就是从网站物理根目录起的相对路径,比如上面例子中conn.asp处在从根目录起的"/soft/"下;然后调用的数据库的相对路径是admin/hack58.mdb,这样就得到从根目录起的完整相对路径:"/soft/admin/hack58.mdb"。
这些都只是相对的路径,如何变为真实路径呢?
设置过iis的人都会知道,每一个网站,都必须指定它在硬盘上的物理目录,比如上例中,网站根目录所在的物理目录为:"E:\web",Server.MapPath方法正是通过把"网站根目录的物理地址+完整的相对路径",从而得到真实的物理路径。这样,数据库在硬盘上的物理路径是:E:\web\soft\admin\hack58.mdb。
在这里,IIS以"\"表示真实路径的目录关系,而以"/"表示虚拟路径,这可能就是IE会自动把我们地址中的"\"转为"/"的原因吧。
明白这些,我们再来理解暴库就不难了,当我们提交_blank> http://hxhack.com/soft%5cview.asp?id=58时,view.asp调用conn.asp后,得到的网页相对路径是这样的:/soft\ (见上),再加上"admin/hack58.mdb",就得到"/soft\"+admin/hack58.mdb。在iis中,"/"和"\"代表着不同的意义,遇到了"\"时,认为它已到了根目录所在的物理路径,不再往上解析(为何不再往上解析?后面还会分析的),于是网站的完整相对路径变成了
:"admin/hack58.mdb",再加上根目录的物理路径,得到的真实路径变成:"e:\web\admin\hack58.mdb",而这个路径是不存在的,数据库连接当然会失败,于是IIS会报错,并给出原因:
Microsoft JET Database Engine '80004005'
'e:\web\admin\hack58.mdb'不是一个有效的路径。 确定路径名称拼写是否正确,以及是否连接到文件存放的服务器。
/soft/conn.asp,行12
这就是暴库语句的原因
三、条件
个人认为暴库的条件:
1、一般的返回页面是本地IE提供的,所以我们先得关了本地的页面,具体在菜单项的'工具->internet选项->高级->友好信息'
2、对方数据库要是Access型。
3、是数据库连接中没有加入容错代码 所以导致不能跳过而活生生的把数据文件连接暴出来
4、 对方的IIS没有关闭提示 只要关了提示就算你怎么暴也没有用
5、不一定要2级目录 但是肯定的是一级目录是绝对不成功的
6、要成功一定要调用到数据库 不一定是view.asp?id=58 这种类别的 只要是提交或者检测数据的基本都可以
四、注意
1、遇到到ASP或ASA等用迅雷下载后改成MDB后缀照用
2、遇到#改成23%后下载
3、遇到加密的解密后查看相关信息
4、遇到MD5密码去网站解密
5、直接浏览Conn.asp文件遇到空间时查看源文件
方法实践:
一,关于"%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文件中要加上。
它的意思是出错后,恢复执行下面的,也就是不理会出错,当然就不会给出信息了。