信息来源:邪恶八进制信息安全团队(
www.eviloctal.com)
对于页面安全的一些总结
对于页面安全的一些总结 —— BY 丹丹 [中国网络信息攻击与防护中心]
本文有一小部分代码及技术全部来自网络与学校书本知识总结,如侵犯版权,请通知我,谢谢!
本文包含一些攻击手法,不得用与非法活动,造成后果与本人无关!由于本人为对COOKIES跨站入侵的奥秘不能完全领悟,所以不敢总结。希望各位看完后给予补充,小弟不胜感谢!如有错误或质疑之处望不吝赐教!
本文书写时间为2005年,所以有许多东西可能过时,望见谅
1 注入漏洞
2 数据库安全与防止数据库下载
3 暴库
4 后台的安全
5 连接数据库文件的安全性
6 跨站入侵
7 防止外部提交
8 旁注攻击
玩黑几年了,看惯了站点被黑被入侵,重要信息流失或损毁。在5.1到来之季,我来浅谈页面安全的一些琐碎的
东西
·1 首先是注入,注入在我国流行有一段时间了,虽然国外早就过时,但在发展快速的中国网络里,很多站长还是没有注意到注入漏洞。这里我不讲注入的形成,利用等等。这里我们着重讲关于如何防止注入!
首先最简单实用的方法便是给站点挂上防注入程序(比如:通用放注入程序)我们做个简单的阐述防注入程序的原理,假设站点 sos.asp文件有注入漏洞。那么我们就要在这个sos.asp页面头部添加一句代码: <!--#Include File="sql2.Asp"--> 。当我们访问sos.asp的时候程序自动先连接sql2.asp这个文件,判断我们有没有提交一些非法字符!当没有发现提交非法字符才执行sos.asp。当发现用户提交了非法程序将不再运行sos.asp,转而直接执行sql2.asp内容!以上便是防注入程序大致工作原理!这样我们基本上就可以杜绝SQL注入了!当然我们在选择程序或者编写程序的时候注意过滤掉非法字符。
·2 数据库安全与防止数据库下载,已经是个很老很老的话题了。数据库乃一个站点的核心,如果一个站点的数据库如果被下载并得到里面内容,那么站点被入侵也为期不远了。那么下面我们详细说说数据库防止下载的一些技巧和黑客如何攻破这些技巧!
首先是默认数据库,一定要修改,但是确保数据库存放位置的安全性与不易猜破性。
其后为防下载,这里方法很多,可能我有说漏掉的请大家见谅!网上有很多程序默认的数据库后缀名为.asp或者 .asa!其实这样看似安全其实给黑客更多的利用空间,切先不说黑客如何利用这个.asp的。来看看.asp类型的数据库。首先它的不可@@性,很多情况站点连接数据库出现错误率要比.mdb后缀的数据库大的多。其次要是真正达到防下载只是修改后缀名和连接数据库文件(conn.asp)是远远达不到我们预期的效果的,因为真的要达到防数据库下载还需要进行一些2进制字段添加等设置!要是站点数据库很多,在实际的工作和操作中很是麻烦!这里我不建议大家使用!好了,我们来说所黑客如何利用这个.asp数据库,黑客可以在任何可写入的页面写入一句话木马,那么用一句话木马服务端就可以连接这个.asp的数据库,轻松得到webshell!所以我建议不使用此方法来防止数据库下载!
再次为"#"号的利用,在以前很多人说到在数据库前面加上"#"便可以防止数据的下载。比如:
www.cnsapc.com/data/hack.mdb改为
www.cnsapc.com/data/#hack.mdb,这样我们无论用IE或者下载工具下载数据库都只能下载index.html。但是黑客们是如何破解的呢?其实方法很简单只要把"#"替换为%23便一样可以下载数据库。比如:
www.cnsapc.com/data/%23hack.mdb
再次为加密数据库用ACCESS将你的数据库以独占方式打开后,在工具-安全-设置数据库密码,加密后要修改数据库连接页,如:conn.open driver={microsoft access driver (*.mdb)};uid=admin;pwd=数据库密码;dbq=数据库路径这样修改后,数据库即使被人下载了,别人也无法打开(前提是你的数据库连接页中的密码没有被泄露)但值得注意的是,由于Access数据库的加密机制比较简单,即使设置了密码,解密也很容易。该数据库系统通过将用户输入的密码与某一固定密钥进行“异或”来形成一个加密串,并将其存储在*.mdb文件从地址“&H42”开始的区域内。所以一个好的程序员可以轻松制作一个几十行的小程序就可以轻松地获得任何Access数据库的密码。因此,只要数据库被下载,其信息安全依然是个未知数。
再次为将数据库放在WEB目录外。假设我们网站目录为c:\rootwww。一般情况下的数据库位置为c:\rootwww\data下。那么我们可以数据库存放位置改到c:\data 。然后我们在数据库连接文件里把连接地址修改为../data/数据库名 的形式。这样就不可能被下载到,因为数据库不在网站目录里,同时数据库也可以正常调用。即便是暴库也没办法知道我们数据库位置!当然有条件可以把数据库单独存放在其他服务器里!
再次:使用ODBC数据源在ASP等程序设计中,如果有条件,应尽量使用ODBC数据源,不要把数据库名写在程序中,否则,数据库名将随ASP源代码的失密而一同失密,例如: DBPath = Server.MapPath(“../123/abc/asfadf.mdb ”) conn.open “driver={Microsoft Access Driver (*.mdb)};dbq=”& DBPath可见,即使数据库名字起得再怪异,隐藏的目录再深,ASP源代码失密后,也很容易被下载下来。如果使用ODBC数据源,就不会存在这样的问题了: conn.open “ODBC-DSN名”,不过这样是比较烦的,目录移动的话又要重新设置数据源了!
最次:我们可以我们在 IIS属性---主目录---配置---映射---应用程序扩展那里添加.mdb文件的应用解析。注意这里的选择的是DLL可以任意解析(最好不要和已解析重复)。扩展名写为.mdb。动作到不用去管它,我们随便写几个字就好了!
最后: 利用一些防止下载数据库的软件就可以达到防下载了,但个人感觉不安全!
·3 暴库 暴库为的是什么,能得到是什么?暴库是黑客最常用的技术手段之一。有些管理员把数据库写到很深很深的目录下,但是为什么数据库还是被下载了呢?我分析最有可能就是暴库得到了数据库地址!那么我们首先来分析下黑客的暴库的种类和手段
暴库手段很多,但常用的大致上分为3种:%5c类暴,conn.asp暴,ddos暴!%5c和我们上面所谈到的"#"号变为"%23"一样是通过ie双解码的BUG导致的。那么我们先分析下黑客攻击的方法。
首先是 %5c 比如:
www.cnsapc.com/new/hack/sdew.aspid?=153 这样的地址,我们可以替换为
www.cnsapc.com/new%5chack/sdewid?=153 。要是站点有暴库漏洞将显示如下信息
返回信息如下:
microsoft jet database engine 错误 \'80004005\'
\'d:\\www\\cnsapc.com\\new\\hack\\sdew.asp\'不是一个有效的路径。 确定路径名称拼写是否正确,以及是否连接到文件存放的服务器。
/new/hack/conn.asp,行3
这样黑客就可以得到网站的根目录甚至站点的数据库存放地址 !
coon.asp暴库。简单说下原理吧,coon.asp暴库原理就是我们提交的目录和真实的目录不一定,或者也可以说是不存在才导致的!但是现在这样能暴库的数据库连接文件已经很难见到了!
防范:第一屏蔽掉所有错误,第二加容错语句,在网站属性——主目录——应用程序设置——配置——应用程序配置——调用——错误脚本 “选择向可户端发送文本错误消息”第三:编辑conn.asp文件,在里面加了这么一句:On Error Resume Next,这样就不会爆出数据库路径,而是显示别的错误信息。
当然如果大家在数据库防下载设置中做的很好,基本不用担心数据库的危险!
后台安全: 后台是一个站点安全的根本上面我们所说到的以前都是为了后台的安全,而黑客的努力也是为了这个后台,这样在以后的入侵中,黑客才能更好的利用这个后台做跳板继续他们的入侵!
首先我想强调的是密码的复杂性,数字,字母,符号最好联合在一起。密码长度长点更是好上加好。但是碰到有SOL注入漏洞的站点,切密码为明问的话,破解也只是时间的关系。当然密码是经过加密了,破解复杂的密码就更到的是@@运气了。所以我们这里再次强调密码的复杂性!
说到后台,假如是BBS的话,一般都有个后台密码,但是请将后台密码与前台密码不要设置为一样的!增大黑客的难度。有很多后台程序有修改上传类型的功能,黑客要是修改了上传程序,直接就能通过后台上传后门程序。所以我们建议在代码中定义好上传类型。讲到后台不能不说到备份入侵。大概也就是通过上传一个修改
为.jpg的后门程序,在备份中把原来上传的.jap还原成后门程序可执行的后缀名。所以建议大家设置的强悍点。我们直接删除备份页,当管理员需要备份的时候我们可以再把备份页上传到网站目录里运行,当然你要是嫌麻烦可以给备份路径进行死定义,不允许修改备份路径!尽量不要让后台有添加模版的功能因为黑客完全可以利用这个功能添加一句话木马进行入侵!
·5 连接数据库文件的安全性 前面我们说到连接数据库文件的暴库原理和他在网站里和数据库连接的问题。
连接数据库文件中包含了很多敏感的东西,比如数据库连接密码,数据库地址等等,所以连接数据库文件的安全也很重要。以前在较早的IIS和程序中有诸如暴库,连接密码为明文显示的漏洞!但是现在这些程序漏洞基本没了!这里只是给大家简单提醒下!
·6 跨站入侵 一个让很多人讨厌的攻击方式,一个黑客最喜欢的攻击方式。此方法危害之大,不容忽视,动网7.0SP2下漏洞主要出在guest_register.asp。这里是注册定义头像的地方,定义头像可以选择系统自带头像,也可以自己上传。一个框框填些自己定义头像的地址。相关代码漏洞网上有公布,并且出了利用动画!说到这里很多人对跨站攻击是否感到恐怖或者说喜爱?那么让我们先了解下什么是跨站!
跨站:就是因为CGI程序没有对用户提交的变量中的HTML代码进行过滤或转换。常用挂站攻击利用为Flash 跨站攻击和script跨站攻击,首先可以窃取指定用户的ID以及COOKIES和挂马。第一种利用我们直接可以把一个普通的用户改变为管理员。(要求后台验证为COOKIES型)第二就是通过挂马等等,拥有傀儡机或者等待管理员等等
最终控制服务器(此方法为最高黑客入侵范畴)好了基本上我们了解什么是跨站。那么我们来看下如何去防范跨站攻击入侵。下面是我给所有对于安全意识薄弱的程序员的一段代码和方法思路。首先我们要从第一到门槛做起,就是不允许输入特殊字符。因此我们可在ONSUBMIT方法中加入JAVASCRIPT程序来完成这个功能。在本例中我们限制最多只能输入15个字符。这样可以阻止那些较长的script的输入。代码如下:(非原闯,微软提供)
function checkForm() {
document.forms[0].userName.value = _
RemoveBad(document.forms[0].userName.value);
return true;
}
// MICROSOFT''S CODE
function RemoveBad(strTemp) {
strTemp = strTemp.replace(/\/\"/\''/\%/\;/\(/\)/\&/\+/\-/g,"");
return strTemp;
用这个办法,可以过滤在输入中含有的这些字符:% < > [ ] { } ; & + - " ''( )
尽管使用上面所说的过滤和限制输入的办法是一种非常重要用防御手段,但它对我的这种采用邮件方式的攻击还是无能为力。因为我把URL的参数直接放在邮件中。针对这种情况我们不得不采取一种更有力的安全措施。如果我们用的ASP,解决起来相对说来要容易得多。只要对动态生成的网页总进行HTML和URL编码就行了。针对我们例子中的情况,在第一输入页中我们对redirect URL作了如下改动:
strRedirectUrl = strRedirectUrl & _
server.URLEncode(Response.Cookies("userName"))
在执行页中我们加入:
strUserName =server.HTMLEncode(Request.QueryString("userName"))
和
strUserName =server.HTMLEncode(Request.Form("userName"))
也许有很多朋友只是管理员,并无权修改那些代码。但又想保护好自己的服务器!没关系,我给出一个你能做到。又让你高枕无忧的办法!
我们也可增加一个IIS组件用于过滤所有从动态输入中的特殊字符。对于那些已经做好的网站,采
用这种办法来防止跨站script的攻击来得非常容易。我们的这个控件能拦截来自ASP页面的REQUEST目
标,可对表格,cookie,请求字串和程序的内容进行检测:
我们也可以通过编写log文件的方法把统计数据加入这个组件中。每当一个客户输入一个非法字符
时,这个组件会记下它的IP地址和时间。当然最重要的还是在写程序的时候注意过滤!由于作者对跨站研究不是很深刻。希望大家能和我一起讨论!
7 防止外部提交
一个很无奈的方式,由于你程序编写的很严格,黑客只能通过外部提交跳过你的程序直接提交给服务器和数据库!很可怕的攻击方式。中国很多全站程序,既然很少有防止外部提交函数加入到程序中,不知道是大家不了解,还是不会?最常用的外部提交利用,就是把一个普通的用户提交到数据库里,当然我们要修改COOKIES的值写入数据库,这样就达到目的了。还有一些后台他里面有备份数据库的功能,大部分入侵都是通过这个功能最后拿到webshell。那么很多程序员在写程序的时候就通过限制备份路径来防止这一招。这样想很好,但是这有演变出外部提交攻击方式,一般路径名在后台显示是灰色的,由于HTML语言里的disabled。那么黑客会下把后台代码复制下来,制作个HTML,在修改提交地址,把disabled去掉。那么路径就可以更改,这样不但完成了备份攻击又完成了外部提交攻击!那么我们怎么办?下面我在网上搜集一个有效的代码(作者测试完毕)
{ASP版本}
<%
Function isSelfRefer()
Dim sHttp_Referer, sServer_Name
sHttp_Referer = CStr(Request.ServerVariables("HTTP_REFERER"))
sServer_Name = CStr(Request.ServerVariables("SERVER_NAME"))
If Mid(sHttp_Referer, 8, Len(sServer_Name)) = sServer_Name Then
IsSelfRefer = True
Else
IsSelfRefer = False
End If
End Function
if isSelfRefer() then
response.write "欢迎"
else
response.write "错误"
end if
%>
把以上代码放到admin.asp,如果是直接输入网址或者是从外部网部链接站,
http://127.0.0.1/admin/admin.asp 就会显示错误, 如果系从本站链接到admin.asp,或通过表单提交到aa.asp,将会显示欢迎! 其实细心的人看了给出的解释。这个代码也可以利用到其他地方。比如后台有个上传的页为 up.asp。程序是要登陆到后台才显示up.asp。 但是黑客通过抓包研究代码等。已经事先获取这个UP.ASP的位置。而且当黑客输入
http://127.0.0.1/admin/up/up.asp。在不许要登陆后台就可以到达这个页。是不是很危险。那么在这个up.asp里加入上面的代码测试下效果吧!
·8 旁注攻击 其实很简单,就是一个web服务器里存放多个站点。假设我们要入侵A站点。但是A站点无法突破,那么我们拿到B站的webshell。那么我们可以通过B站点的权限提权服务器!达到入侵A站的目的。或者直接利用站点文件夹权限设置问题来入侵。
旁注攻击方式很多。包括所有攻击方式,所以这样写我也写不完,我这里唯一能告诉大家的是,把磁盘权限设置好!把低层安全设置好。