精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>电脑技术>>● 计算机安全>>◆系统漏洞◆>>转载——新浪网的漏洞

主题:转载——新浪网的漏洞
发信人: leezhou()
整理人: williamlong(2000-07-21 16:40:03), 站内信件
转载——新浪网的漏洞  共1篇    讨论区: Html[ 网站建设] 

[首] [尾]  返回  

----------------------------------------------------------------------
----------
  作 者: cvchen (water) 2000.07.20 转贴 打包 回复  
主题:新浪新闻评论程序的(小?)问题 所属组别:  
  上个月,我在写公司的新闻评论网络程序的时候想到自己的程序有个问题,
 
将其改掉后突发奇想别的站点的新闻评论是否也有我犯的同样问题?于是,我到
 
新浪的新闻站点上去看了看。结果,发现新浪也有我犯过的毛病。如果新浪不修
 
改这个错误,我们就可以利用新浪这个漏洞开很多个自己的讨论区,虽然是平面
 
的,没有答复的层次,但如果你要和朋友在网上共享一个留言板,而且是由国内
 
知名的网络服务商来帮助您免费维护,是不是感觉很爽啊?! 

  首先,让我们来看看新浪评论的URL语法,以一个评论为例: 
http://comment.sina.com.cn/cgi-bin/news/release6/news_face1?%C8%BA%D6%
 
DA%B7%B4%D3%A6%C9%EA%B3%C7%B2%BF%B7%D6%B5%BC%D3%CE%CB%D8%D6%CA%B2%EE+h
 
ttp://dailynews.sina.com.cn/society/2000-07-20/109615.html+109615+6 很
 
难看懂?我们将其分成几部分看看 

第一部分:访问CGI 
  http://comment.sina.com.cn/cgi-bin/news/release6/news_face1 
这个可以忽略不管,其实好象还有release2 news_face2等,也许做的映射,我们
 
就不知道了。 

以后的为CGI的参数 
  参数1:%C8%BA%D6%DA%B7%B4%D3%A6%C9%EA%B3%C7%B2%BF%B7%D6%B5%BC%D3%
 
CE%CB%D8%D6%CA%B2%EE  @#$%&* 这是什么?这段是汉字“群众反应申城部分导
 
游素质差”的Ascii码,其实你直接将这段改为汉字也可以,改掉后,评论显示的
 
标题就变掉了。实际上,新浪的人有时就偷懒直接将这个链接用汉字做的。我们
 
先将它改为“很好奇的留言版”或 "%BA%DC%BA%C3%C6%E6%B5%C4%C1%F4%D1%D4%B
 
0%E5" 

  参数2:http://dailynews.sina.com.cn/society/2000-07-20/109615.htm
 
l 这是你评论的链接,如果你点评论标题将访问这个地址。我们将其改为"mailt
 
o:[email protected]

  大家也许发现,前面两个参数实际上没有什么用,新浪的程序直接将其返回
 
了。关键的在后两个参数: 
  109615 和 6。 109615是新闻id,新浪按什么方式来编码新闻id的,我不
 
知道,不过大多数和文件名有关,如109515.html的id往往是109615或9615。 然
 
后是6其实这个6就是新闻分类的代码,大家在新闻首页看到的那些新闻栏目(
 
国内,国际,社会....)分别从1排到7,新浪的程序采用这个数来构造关系数据
 
库查询表的名字。 

  现在,我们将这两个数字改为200000和20(不能超过20,原因等会说明)。让
 
我们现在来访问这个地址: 
http://comment.sina.com.cn/cgi-bin/news/release6/news_face1?%BA%DC%BA%
 
C3%C6%E6%B5%C4%C1%F4%D1%D4%B0%E5+mailto:[email protected]+200000+20
 

这就是一个留言版了。(?表示参数的开始,+在URL上代表空格). 

  现在说明一下为什么最后一个参数不能超过20,现在将最后两个参数分别改
 
变一下,把200000改为abcd,会出错误信息: 
Exexute: select count(*) from news20 where news_id=abcd and flag=0 出错
 
 Unknown column 'abcd' in 'where clause' 29-------2000-07-20 13:34:20
 
------61.130.130.64 
很明显,上面是一个sql语句出错,说明新浪用关系数据库作的(我对关系数据库
 
不在行,不能得知61.130.130.64这个服务器上运行的是什么数据库)。请注意其
 
中的news20。 然后我们将参数abcd改回,将20该成21,又会出错: 
Exexute: select count(*) from news21 where news_id=200000 and flag=0 出
 
错 Table 'news.news21' doesn't exist 29-------2000-07-20 13:41:55----
 
--61.130.130.64 
说明系统无法找到news数据库中的表news21。  新浪在这个数据库中共创建了
 
20个表news1到news20,分别对应各个栏目。 

  新浪程序的修改建议: 
  1、应当为每个新闻建立一个唯一的ID,当用户评论时先检测是否有这条新
 
闻,然后才保存; 

  2、仔细检查各个程序的错误输出信息,以免使系统内部信息不经意地被泄
 
露出来,就象前面的61.130.130.64这个似乎不公开的服务器。 

这些事情的直接后果是会造成数据库中出现很多无根数据(也许新浪不在乎);
 


  注意:本文已发给新浪管理员,提醒新浪注意! 
 

--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 61.130.7.138]

[关闭][返回]