专题:网站安全漏洞的产生分析、处理总结
1.Web网站程序编写中漏洞的形成分析、处理总结
目前国内的网络安全行业非常多,从金山、瑞星、江民等杀毒软件公司提供的面向个人电脑的杀毒软件及软件防火墙到面对服务器提供的硬件防火墙,技术都越来越成熟。可以说现在要突破硬件防火墙并不是一件容易的事情,当然事无绝对。因为世界上没有绝对安全的个人电脑、服务器或者网络。就像黑客教父——凯文.米克尼克说的:“人为因素才是安全的软肋!
没错!不管你的硬件防护措施如何的强大和严密,软件程序的算法和结构如何的规范严谨、网页程序编写时过滤的如何的严格,人为因素带来的漏洞才是最可怕的,因为它是永远都防不胜防的。
例如动网论坛,你说他的技术人员水平差吗?动网经历了这么多年,被人不断的发掘出这么多的漏洞,其中有很多漏洞都是一些很低级的错误。难道他们真的不懂得吃一堑长一智的道理吗?
一个纯静态的网页,不知道后台,也不知道FTP帐号密码等信息,但是它还是被人拿下了,这
又是为什么呢?今天就让我来替大家进行一次不完全归纳及简要分析。
一个站点存在的基本安全问题大概如下:
首先我们一起来看一下由于程序员在软件编写过程中的疏漏导致的漏洞
一:网站程序存在的漏洞
1. 注入漏洞
2. 上传文件格式验证不完善
3. 参数可写入文件——构造一句话
4. mdb数据库改用ASP\ASA等名字作为数据库扩展名(添加防下载代码)
5. 后台显示数据库路径
6. 数据库可备份修改扩展
7. 文件管理部分传递参数过滤问题及外部提交
8. XSS漏洞骗取cookies得到后台权限
9. 任意文件下载漏洞
10. 远程包含漏洞
11. 使用未加密的cookies进行用户权限等级及权限验证
12. session被构造欺骗
下面就让我们来简要分析下这些漏洞的形成和解决办法
1) 注入漏洞
注入漏洞的产生原理:
我们来手工构造一段存在注入漏洞的查询程序,这里就使用asp比较简单明了
<%
Id=request("id")
if id<>"" then
Set rs=Server.CreateObject("ADODB.RecordSet")
前端大文件上传解决方案
sql="select * from news where id="&id
rs.Open sql,conn,1,1
response.write "标题:"&rs("title")&"<br>"
response.write "内容:"&rs("content")
set rs=nothing
rs.colse
else
response.write "缺少参数"
end if
%>
这段代码直接从浏览器接收了id的值,然后不进行任何过滤就提交进数据库查询
首先我们来判断下是否存在注入,通常使用的办法是
and 1=1返回正常
and 1=2返回错误或无返回内容则认为存在注入漏洞,我个人经常偷懒直接在地址栏后面加上一个“’”,返回错误或无返回内容则认为有注入。
构造注入语句:
and exists (select count(*) from admin)
将这段代码加到地址后面就是
localhost/index.asp/id=1 and exists (select count(*) from admin)
那么在程序中接收到的参数就变成了后面的联合查询语句
那么我们带入数据库查询部分。看看结果如何
sql="select * from news where id="&1 and exists (select count (*) from admin)
结果显而易见,原来的单句查询变成了联合查询,将admin表的内容进行了查询操作,这个语句是用来判断字段是否存在的。如果字段存在则查询成功,返回正常,字段不存在就返回错误提示,表示不存在表。详细的注入方法这里就不说明了。
另外有有一个技巧,有一些站点不是对整站进行过滤的,所以导致出现一些隐藏的注入点。
比如有一个文件他对提交的id参数的值进行了过滤无法注入,但是你会留意到地址栏里的参数有很多个的,加入有一个没有进行过滤,同样可以产生注入漏洞。
例如:
localhost/index.asp?class=1&id=1
在程序中有时候只对id这个参数进行过滤而没有对class进行过滤,所以就导致了一个隐藏注入点。我们将地址改为
localhost/index.asp?class=1然后再进行注入
如果这个时候程序中没有对id这个参数的非空条件进行处理的话,我们就可能顺利的进行注入了。
另外一种情况是,有的程序员虽然处心积虑的写好了防注入的自定义函数,但是在程序编写过程中并没有进行调用,所以依然导致注入漏洞的产生。
另外现特别需要注意的就是对cookies注入进行过滤,因为现在有特别多的网站程序员都习惯了依赖通用防注入系统,但是旧版本的通用防注入系统都存在一个问题,就是没有对cookies注入进行过滤。
也就是说当我们发现一个网站使用了通用防注入的话,就证明网站本身程序并没有对注入进行过滤,当这个网站恰好使用的是一个旧版本的通用防注入程序的话,那么相当于告诉我们“此地无银三百两”了。下面要做的事情就是构造简单的cookies注入语句就可以轻松拿下后台的帐号密码了。
所以程序员要特别注意对程序后台地址的验证或者隐藏,这里对程序员的后台提出以下几点意见:
1. 后台编写使用类似动易的管理验证码
2. 后台地址路径手工输入正确地址后转向正确管理后台
3. 用户可自定义后台文件夹名称和路径
4. 对于不开源的程序,数据库的表名和字段名使用非常规名称
2) 上传功能导致的漏洞
1. 验证扩展名不严密导致上传任意或特殊文件
处理建议:
(1) 验证时使用放行符合格式的文件,而不对不匹配格式进行验证
也就是说当你的网站只需要用户上传jpg bmp gif rar zip 等格式的文件的时候,验证模块则只允许这几个格式的文件上传,而不是对不可上传的文件格式进行过滤和错误提示。这样可以最大程度的避免非法文件的上传。
(2)对上传文件的文件头标识进行验证,例如:动网等程序对图片的标识验证,从而避免如下图中的一句话木马的构造
   
(3)对附加文件进行检测
有一种技术叫“文件隐藏技术”,其实就是利用windows的命令行下的一条命令 copy 1.gif /a + 1.asp /b 1.gif
将2个文件进行合并,这个办法可以用来合并木马进mdb数据库,然后通过备份将文件保存为一个指定的木马文件,所以程序员在程序编写过程中也要特别注意这点,动网论坛的程序可以作为一个参考。
        (4)上传目录不能动态生成
              前端时间由于IIS6 的一个解析漏洞,导致动易等一系列的大型网站被黑。问题就出在他们的程序允许以注册用户的用户名生成一个目录,当用户注册一个1.php的用户名,然后上传一个改名为1.jpg后的php木马 就得到一个访问路径
/user/1.php/1.jpg
当我们访问这个jpg文件的时候IIS6的漏洞就提供了我们便利。因为这个jpg将以一个php程序的身份被运行。结果显而易见,我们顺利得到一个webshell
所以不只是对用户上传目录不允许动态生成,也建议不要提供设置上传目录的功能。因为windows有一个严重的Bug,就是目录不存在的时候则自动生成。
        (5)上传验证格式不要在后台提供设置
很多网站允许在后台设置允许上传或者禁止上传的文件格式,这个功能是我完全不必要的,虽然提供了更完善更强大的功能,交互性加强了。但是带来的安全问题远超过他的使用性。所以建议程序员在开发网站程序的时候不要提供这个不必要的功能
3 ) 程序参数允许写入文件
在对“蓝木企业管理系统”进行分析的时候发现现在有很多程序在后台允许设置的参数是允许写入文件的。这个做的问题就是允许我们构造特殊的语句,将一个参数保存文件改造为一个木马,当提交的表单对文本域的长度进行限制的时候我们可以构造一个一句话木马,没有过滤的话,我们就可以直接写入一个大马了。所以建议程序员养成良好的习惯,将参数数据都保存到数据库中,不要保存到文件里,避免类似情况的发生。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。