本文已经发表在《黑客手册》上。

作者:烟台 王岗(www.5iadmin.com

现在网络上的论坛和社区有很多,论坛绝大多数使用的是一些可以免费下载代码并使用的论坛,研究这些代码的人很多,所以关于这方面的安全文章有很多,这里就不做介绍,本文着重介绍一些虚拟社区的安全Bug的发现和利用方法,因为都是些大网站自己开发的社区,为了避免造成不良影响,这里就不抓图和详细说了,只以A,B表示,请大家不要对号入座,因为我做了一些处理^_^。

下文要用到Achilles,所以先讲一下Achilles的使用方法。Achilles是一个本地的代理服务器,打开后它会占用本地5000端口做代理服务器。在ie设置代理服务器ip为127.0.0.1,端口为5000,然后在Achilles选择上Iintercept mode ON,Intercept Client Data和Ignore .jpg/gif这三项,再点左上角的三角图标(Strat Proxy),就可以跟踪Http会话状态了.

大网站的社区基本都是自己开发的,因此我们是看不到代码的(就算有,对我这样不懂asp,jsp,php,asp.net等开发语言的人也没用^_^),我们只能靠大量的测试来找虚拟社区的安全Bug,我的做法一般是先注册个用户,然后看一下社区都有哪些功能,哪些有可能被破坏者利用。
A社区是由asp代码编写,功能单一,主要以论坛为主。我们先来看一下它的安全性。先注册个用户,用户名只允许由数字,字母,下划线组成,因为这个社区的管理员的用户名为admin,那我们就注册个<A>admin</A>,如果注册成功,那我们进入社区后,你会发现你的id为admin,因为<A></A>不会显示,而且,有可能你的权限会变为管理员(我在另外两个代码为站长自己编写的小型社区测试成功过,在我所测试的大社区里不行),不过注册当然不会成功,页面代码会进行鉴别的,提示注册的用户名中有非法字符,这里我们就可以使用Achilles来帮我们达到目的了,到Achilles里看一下抓到的数据包,找到你注册的用户名:admin,修改成<A>admin</A>(admin<A></A>也可以),然后点Achilles中的send,过一会网站会提示“成功注册”。你可以发个帖子试一下,你的用户名会显示为admin,尽管你的实际用户名是<A>admin</A>,如果有破坏者把头像和昵称改成和admin一样,以admin的身份发帖子,扰乱社区秩序,蒙骗网友,我想对社区的人气肯定会有不良影响。既然我们可以提交带html语言的用户名,我们能不能利用个Bug来做点什么?可不可以把asp木马的代码做为注册名?我想应该不行,原因一是asp木马字节太多(以前看到过有一句话木马,具体没接触过,不知道在什么情况下使用),恐怕超出了用户名字段设置的长度,原因二提交数据时,各部分内容都是以“&”符号连接的,我看了一下asp木马的代码,好象都带“&”符号,所以不行。不过可以发段图片代码,社区会显示我的用户名为一张图片,聪明的读者你应该会想到如何利用这个 Bug了吧。
B社区为jsp开发,子系统很多,有论坛,日记系统,拍卖中心,交友系统等,功能很多,不过功能越强大,存在漏洞的风险就越大。这个社区以前存在id欺骗,我发现后告诉社区管理员了,过了几天答复这个漏洞修补好了,我用iecv按照以前的方法测试了一下,发现确实没问题了,这次再找找有没有Bug。注册个普通用户,发个帖子,然后运行Achilles,点“编辑”,分析一下拦截到的数据,发现鉴别身份不光有用户id号(在这个社区,每个用户不光有用户名,还有一个id号,而且唯一),还有JSESSIONID,那我们把截获的所有数据包中这个id号改成管理员的id号看一下,然后提交修改过的数据,发现编辑帖子的人不是我当前的用户了,而是管理员,那个JSESSIONID简直是形同虚设。既然可以以别人的身份编辑自己的帖子,那我想这个Bug肯定还可以在别的子系统使用,测试发现确实是这样。

总结:感谢大家听我罗嗦了这么多,这篇文章我主要想写给广大web程序开发人员,如果能让大家意识到代码编写不严谨所造成的后果,而且能够纠正大家以前认为别人看不到社区代码就万事大吉的错误思想,那我的目的也就达到了,至于如何解决上面所说的问题,我想大家都能找出解决方法的。我已经把存在的Bug告诉这些社区的管理员了。最后说一句,本文方法仅供研究,请勿用于破坏上,由本文方法造成任何损失,由使用者负责,本人概不负责。测试环境:win2000高级服务器版(sp4).

文章如转载,请注明转载自:http://www.5iadmin.com/post/148.html