前言:
最近在做毕业设计,一同学问我asp做的站应该注意哪些安全问题,我纳闷了好久,我自己都没考虑这个问题的,哎,这同学也太认真了!想一想大家努力学习了html,javascript,asp后,是不是都想自己做个个人主页挂到网上呢,是不是搞了半天就做了几个页面出来了,最后还是到网上找一有后台的改改,挂网上去了。这下就应该注意一下常见的安全漏洞了,虽然都比较老,可是新手根本不知道有这回事所以老犯这个错误的。于是根据自己以前改别人系统的经验,总结了下,也算是对他的交代,嘿嘿,新手进来,菜鸟飘过,还是那句话。自己不知道,并不表示不存在!下面以我改的主页来说明下!
1爆库
原理:
"%5c"暴库法,它不是网页本身的漏洞,而是利用了iis解码方式中的一个特性,如果iis安全设置不周全,而网页设计者未考虑IIS错误,就会被人利用。 为何要用"%5c"?它实际上是"\"的十六进制代码,也就是"\"的另一种表示法。当我们把"/"换成十六进制写法"%5c"时,ie不会对此进行转换。地址中的"%5c"被原样提交了.当iis收到后解析时,又会将%5c还原成"\",所有调用数据库的连接文件中都有Server.MapPath方法的作用是将网站中的相对路径转变成物理上的绝对路径。为何要这样?因为连接数据库时,须指明它的绝对路径。
也就是说网址目录只表示从根目录起的相对位置。当Server.MapPath方法将相对路径转为真实路径时,它实际是三部分路径加在一起得到真实路径的:网页目前执行时所在的相对路径,也就是从网站物理根目录起的相对路径,设置过iis的人都会知道,每一个网站,都必须指定它在硬盘上的物理目录,Server.MapPath方法正是通过把"网站根目录的物理地址+完整的相对路径",从而得到真实的物理路径。在这里,IIS以"\"表示真实路径的目录关系,而以"/"表示虚拟路径,这可能就是IE会自动把我们地址中的"\"转为"/"的原因,在iis中,"/"和"\"代表着不同的意义,遇到了"\"时,认为它已到了根目录所在的物理路径,不再往上解析,而这个路径是不存在的,数据库连接当然会失败,于是IIS会报错,并给出错误原因。
我们只有在数据库相对地址和它的目录绝对地址之间使用"\"("%5c"),才能达到目的。即是在最右边第一个/处使用%5c成功可能性是最大的.
conn.asp(数据库连接文件)暴库大法,如果说第一种暴库法是利用了绝对路径出错,那么,这种暴库法就是利用了相对路径出错。 一般来说,只要conn.asp不在根目录的系统,而调用文件在根目录,就会出现这种问题。当然这种说法也是经验性的,准确的说就是,conn.asp与调用它的文件,如果相对位置改变了,就会报错,暴出数据库路径。
利用:
下面是我自己的电脑上测试:访问
http://localhost/198816/index.asp,正常访问,
然后将url改成http://localhost/198816%5cindex.asp,出现如下错误:
Microsoft JET Database Engine (0x80004005)
找不到文件 'E:\10\data.mdb'。
/data.asp, 第 11 行
看这里爆库出现了,得到了数据库名字和路径;
我们可以将其下载,
在ie输入http://localhost/198816/data.mdb,出现下载页面。
下载了数据库之后,如果数据库有密码,使用access密码破解器,不要几秒就可以得到密码,下面就可以浏览所有数据库的内容了,一般后台密码都是MD5加密的,可以直接上MD5网站破解出来!如果无法查询到,那就是运气问题了,如果你肉鸡够好够多,那就慢慢暴力破解吧!不过暴力破解好象没有谁会这样做!
Conn爆库也类似!
防范方法:
在数据库连接文件中加入容错语句即可,我在data.asp的开头加入了,
On Error Resume Next
再在结尾加入错误处理语句,
If Err Then
err.Clear
Set Conn = Nothing
Response.Write "fuck!"
Response.End
End If
现在再去爆库,你发现页面只输出了fuck!爆库不成功!
下面我们说说即使存在爆库,在别人知道你数据库路径的情况下,别人也无法下载你的数据库!
[1] [2] [3] [4] [5] 下一页