频道栏目
首页 > 资讯 > 系统安全 > 正文

真实遭遇逻辑错误造成的漏洞

05-03-30        来源:[db:作者]  
收藏   我要投稿

作者:老k 来源:http://www.cha8.com/

前一阶段,我个人网站的聊天室系统出现了问题,聊天室出现了很多异常大小和样式的头像。。让我很困惑,按照常理,用户可以选择的头像都是我所放入用户头像商店的。。但是其他的头像是怎么来的呢?

因为聊天室系统是租用的,不是我开发的,很容易想到的就是程序可能存在漏洞,而且十有八九是SQL注入。。

于是和管理员索取了整套的管理系统的源代码,发现的确有注入点,感觉问题找到了。。但是修补之后,发现问题没有缓解的意思。。我又在考虑,如果真的是注入的方式,这些网友应该会增加一批管理员。。随后又重新审计了几次代码。。终于发现了逻辑错误。。

由于这个系统是多用户版本的。。用户头像商店这个表有一个roomid表示哪个聊天室的用户具有这个头像。平时添加对应用户的头像的命令是正确的,把头像update给这个房间的这个用户,但是呢,购买头像超过1个之后,逻辑上把原来的4号记录给3号,3号记录给2号,2号给1号,1号空出来,把新的提交给他,是这样写的:

sql="update usericon set usericonm="&rs2("usericon4")&" , usericon4="&rs2("usericon3")&" , usericon3="&rs2("usericon2")&" , usericon2="&rs2("usericon1")&" , usericon1="&rs("usericon")&"where username="&session("username")&""

尽管之前调出图片地址的时候是:

rs2.Open "Select * From usericon where roomid="&session("roomid")&" and username="&session("username")&"",conn,1,3

他认为一个用户只能从这个数据集里边获得新的头像的url是当前用户必须符合当前的session("roomid")。。可他没有考虑到当前用户可能在两个聊天室注册同样的名字,这样就可以获得两房间的头像的。。

当然了。。这些仅仅是外因。。。这仅仅是一个作案的条件。。毕竟不是所有的新用户都可以直接购买非常大的头像。。后期也有一些竞争等等的原因,别人的聊天室给我们的用户“定做”了一批。。这些东西就不在讨论了。。大家写程序的时候,一定要注意类似的逻辑错误。。不要出现能让一个分公司的会计,可以修改所有分公司的人的帐目类似漏洞。。

 

 

相关TAG标签
上一篇:打击僵尸网络
下一篇:如何读懂路由表
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站