随笔 - 569  文章 - 3  评论 - 12616 

 

2010年11月8日,在勿勿发布完 支持多语言、多用户、多数据库、完美URL之路过秋天版博客发布[绝对有杀伤力的博客] 之后

 

不少网友纷纷给力,对演示网站 http://www.cyqdata.com/ 进行了一次大测试,除了发表评论脚本未编码之外,还有一重大发现:

 

有个“犀利哥”入侵我的演示用户账号,修改了我的文章,还清空了评论。

 

于是,我很给力的发挥想象对方可能的入侵手段,并给予总结了一下

 

1:伪造Cookie实现欺骗登陆

我们先看一下如何才能实现这种方式:

1:下载我提供的版本发网站应用程序

2:在演示网站注册用户,并研究登陆后生成的Cookie

2:反编绎,并能很好的定位发现,在哪里对Cookie进行加密码

3:在本地新建网站并用IIS绑定主机头,用host域名欺骗方式输出Cookie,输出指定用户

4:删除网站和host欺骗

 

如果很好的完成了以上步骤,我猜测是一种入侵方式。

但是我明显把对方的入侵手段想的太高明,因为如果要实现这种方式,不是刷刷刷就可以做到的,需要花很长的时间和对程序的了解。

难点是?

一是要对系统有很好的把握,虽然我提供的应用程序没对DLL进行加密或混淆,不过要反编绎研究起来,不是高手估计不是一会半时能理解的清的。

二是第一时间研究加密的Cookie?一般人第一时间都不会有这个念头,至于我会想到这种方式,原因在于我发布的应用程序的加密方式和我演示的是一致的。

三是新建网站做host欺骗,输出等操作,很烦锁,除非思路一开始便很清晰,不然动起手来没这么快。

 

 

于是为了验证是不是这种方式实现的入侵,我第一时间是修改了演示代码的加密方式,并把所有的示例用户密码重置为******

可是不一会,“犀利哥”的再次留言,很明显证实了不是采用这种方式。

 

有想象也好,至少能引发改进,接下来发布的版本,将对密码加密方式采用密钥形式,保证每个应用程序的加密不一致。

 

2:Post 入侵

 

我们先看一下如何才能实现这种方式:

前提:代码中缺少用户是否在线判断 或者 缺少当前用户的提交文章的用户是否同一用户

1:研究后台Post的html,简单的或者直接copy出来

2:提交Post,指定别人的文章ID,和自己的内容,以此将自己的内容写入到别的用户去。

 

第二猜想原因:

 

之所以这么想:是以为自己对登陆用户ID取自Url路径中的用户名,

如此用户在Post中的action路径指定到另一用户的路径时,造成用户取值错误,从而可产生入侵点。

后来审了下代码,发现取值还是OK的,再看代码中对删除添加等操作都有是判断的,

因此文章内容被修改,有可能是这种方式,不过评论被删,便明显确定不是这种方式入侵。

 

 

不过还是修改了代码,并更新到演示项目中,接着发现“犀利哥”的再二次留言。

 

有想象也好,至少能引发改进,把代码重新调整了下,保证后台的每个调用都对用户进行验证。

 

3:SQL注入

 

虽然这是最基本的方式,却被我放在最后想象,大概代码写的太多了。

实现方式,自然是构造组合sql了

我们来看一下默认没有对输入进行合法过滤,只靠底层过滤了“--”和“;”号,看下如何构造入侵语句:

比如登录时:select * from Users where username='{0}' and password='{1}'。

正常的第一手法都会构造username='cyq1162' or 1=1--,不过默认--被低层过滤了。

用户名输入为:cyq1162' or 1=1--

于是尝试第二手法构造:username='cyq1162' update Users set username='x' where '1'='1 

用户名输入为:cyq1162' update Users set username='x' where '1'='1 

 

于是成功入侵,当然构造SQL注入的方式多种多样,不仅限于上面的两手。

 

除了登录,在URL参数参数里,对一些ID也漏了点网,好心的网友也提醒了。

 

另:在我的界面中,限制了用户名15个字符的输入,如何输入更多字符,用firefox编辑下html即可提交

 

如果没猜错,“犀利哥”应该就是此种方式入侵的,在我封掉注入之后,再不见其留言了~~

 

最后,欢迎大伙继续使劲的测试:http://www.cyqdata.com/

 

新版本估计会在近一两天随使用帮助一起发布。

posted on 2010-11-10 00:05 路过秋天 阅读(...) 评论(...) 编辑 收藏
路过秋天