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