发信人: 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]
  | 
 
 
 |