信息来源:邪恶八进制信息安全团队
文章作者:outstand
前言: 最近在做毕业设计,一同学问我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:10data.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!爆库不成功! 下面我们说说即使存在爆库,在别人知道你数据库路径的情况下,别人也无法下载你的数据库!
2数据库安全 asp结合access数据库是最常见的,access数据库最大的缺点就是容易被搜索到,然后被下载,而暴露帐号和密码,防止数据库被下载的常见方法有如下几种,如果你有更好的方法请告诉我。我也是菜鸟·~~~~: 1. 将数据库改成自己都无法记住的BT名字。这种方法对爆库没用,而且使用google也有可能搜到数据库路径。 2. 在数据库名字中加#号或者%24=$等特区字符,利用URL编码特性防止下载。 3. 去掉后缀,不要扩展名,系统有可以解析成路径,从而无法下载,当然XP下测试是可以下载的,我的格式是fat32。其他系统没测试,有人测试了告诉我下,谢谢! 4. 加系统文件的后缀,如后缀改为.db,.temp等。听说系统是不允许下载这些后缀的文件的! 5. 在数据库中建立一个nodown的表,建立一个字段数据类型选择ole对象。 6. 网络上最常见的方法是,把数据库后缀改为asp等系统可以解析的后缀。
第6个是网络上使用的最多的方法,但是也不是完美的,如果别人可以通过留言等其他方法向数据库提交数据,那就危险了,如果别人提交<%execute(request("a"))%>到数据库,那么访问数据库就可以执行了此语句,这样可以执行提交的任意代码。 当然这个也是可以消除的,我们可以通过在ole对象中加入如<%loop <%loop <%1=2<%2=1这样的语句,让asp出错来防止下载。实现这种效果我采用两种方法实现过,一. 建立一个nodown的表,nodown的字段,类型选择ole对象,然后建立一个文本文件。里面的内容为<%loop <%loop <%1=2<%2=1,然后打开nodown表,选择nodown字段,右击选择插入对象,选择由文件创建,浏览对位到刚才建立的文本文件,加入nodown表中,然后把数据库改为asp后缀,在访问,发现出现如下错误: Active Server Pages, ASP 0116 (0x80004005) Script 块缺少脚本关闭标记(% >)。 /198816/dataasp.asp, 第 577 行 说明成功实现。这里nodown表一定要在其他表的前面,注意了!(我也不知道需要不需要)。 二. 使用asp代码,向数据库中增加nodown的表和字段,代码如下: <% db="data.mdb" ‘这里改成数据库的地址 Set conn = Server.CreateObject("ADODB.Connection") constr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&db&"") conn.Open constr conn.execute(“create table nodown(notdown oleobject)”) set rs=server.createobject(“adodb.recordset”) sql=”select * from nodown” rs.open sql,conn,1,3 rs.addnew rs(“nodown”).appendchunk(chrB(asc(“<”))&chrB(asc(“%”))) rs.update rs.close set rs=nothing conn.close set conn=nothing %> 网上的方法还有很多,大体就这两种,我就不重复了。这里还有一点数据库的问题,就是删除掉大量数据后,数据库大小并没有改变,这里只要使用工具-〉数据库实用工具-〉压缩和修复数据库,就可以了! 我的设置如下: 密码设置复杂点,并且MD5加密,使用第一种方法加入nodwon表和字段,数据库后缀改为asp,名字改为%24#$%da#%ta@##%conn#.asp. 我觉得对于个人主页来说,已经比较安全了,但是安全不是绝对的.
3万能密码 这个就是传说中的or=or了,虽然危害很大,可直接饶过后台验证,进入后台,但是确实是到处可见。 原理: 如都输入or=or则如下语句为真, sql="select * from admin where adminname="&request.form("adminname)&" and adminpass="&request.form("adminpass")&""变成了 sql="select * from admin where adminname=”or=or” and adminpass=”or=or” 从而返回真,跳过认证。 利用: 后台帐号和密码都或使用一下一种: 1:"or "a"="a 2: )or(a=a 3:or 1=1-- 4:or 1=1-- 5:aor 1=1-- 6:"or 1=1-- 7:ora=a 8:"or"="a=a 9:or= 10:or=or 11:最短的万能登陆密码 or1 12:or 1 or或or=or 还有其他很多! 防范: 有方法是过滤掉单引号,好象其他数据库里面还要过滤到单引号的其他编码。如: dim name,Pass name=replace(trim(request.Form("name")),"","") Pass=md5(replace(trim(request.form("Pass")),"","")) 我的登陆验证还采用了, ivcode=trim(request.form("ivcode")),ivcode是写在配置asp文件中的变量,这样安全更好了,即使知道密码,存在这个漏洞,不知道定义的ivcode值,一样无法登陆后台!
4上传 上传这个漏洞比较难以理解,也许大家是多抓包,改包,nc上传不太熟悉,多练习几次就可以了。个人主页中有可以会用到上传各种文件,如rar,gif,swf,等这样必须为这些文件分类存放,这样在上传时选择上传类型,传递想对类型的路径给上传页面,大家是不是都很熟悉,呵呵,其实这样就形成了上传漏洞了! 原理: 一、 FilePath.此为变量,为上传页面传递到保存页面的变 |