2007/05/28

从源头解决 Serv-U 权限提升漏洞

Serv-U 如今已成为主流 FTP Server. 和 Windows 一样,因为用的人多,所以研究并试图破解它的人也多,于是就爆出比 G6 FTP Server 多得多的漏洞。我经常听说某人服务器上的 Serv-U 无端地多出了用户或域,或被远程连接。

一旦 Serv-U 被攻破,接下来黑客可以很容易在服务器上创建管理员帐号,开启远程桌面,或者进行其他操作。基本上这台服务器就“沦陷”了。

为什么黑客能做到这些?究其原因,在于 Serv-U 的进程标识权限太高——Serv-U作为系统服务启动,并且使用本地系统帐号登录,这个帐号可以在系统中进行做任何操作!一旦 Serv-U 被攻破,黑客程序就可以同样以本地系统作为标识运行,如此则可几乎没有阻拦地进行任何操作。

一款功能强大的软件,要做到没有漏洞几乎是不可能的。保持软件更新是一个基本手段;另外,还可以从源头——进程标识——解决 Serv-U 权限提升的问题。默认情况下,Serv-U 创建的系统服务是以本地系统帐号登录的,只要我们把它改为权限较低的帐号,则可以避免一旦它被攻破时带来的安全风险。

设置方法也比较简单,首先确认已经将 Serv-U 作为系统服务运行(在 Serv-U Administrator 中可以设置),然后进入管理工具 (Administrative Tools) > 服务 (Services),找到名为 "Serv-U FTP Server" 的服务,双击以打开服务属性 (Properties) 对话框,然后切换到"登录 (Log on)" 标签。这时会发现默认是以本地系统帐号运行,修改为网络服务帐号 (NT AUTHORITY\NetworkService), 并保持密码框为空(注意:网络服务帐号是系统内置的安全体,密码是随机生成且无需人工干预,不要尝试修改网络服务的密码,只需简单地在密码框留空即可)。然后点击“应用 (Apply)”按钮,切换到一个标签,重启服务。

服务重启后,打开任务管理器 (Task Manager), 会发现此时运行 ServUDaemon.exe 的用户名是 Network Service.

还没有完。默认情况下,网络服务帐号对 Serv-U 安装目录没有权限,需要为此目录手动添加网络服务的读写权限。同时,所有 Serv-U 用户读写的目录也需要添加读写权限。That's all!

2007/05/22

跳过维真台球 (Virtual Pool) 3 的插入光盘提示

经典的 3D 台球游戏维真台球 (Virtual Pool) 3,在安装后立即运行,可能会不停地要求你插入游戏光盘。此处使用 71.4M 的安装版本 (v3.0.7.7).

经过跟踪,发现 vp3.exe 在运行后,会查询安装目录 (通常是 C:\Virtual Pool 3\) 的 .\0\movie\gameopen.mpg.\0\movie\dm_logo.mpg 两个文件,如果没找到,就会提示用户插入光盘。而这两个文件就在安装目录的 .\movie\ 目录下。

尝试在安装目录下创建新文件夹,名称为 "0", 然后将 .\movie\ 目录移到 .\0\ 目录中去,再次运行,将不再出现插入光盘的提示。

2007/04/24

用 Ad Muncher 清除 Google 点进跟踪

导语

Click-trough, 即“点进”,表示用户根据显示的链接点击进去。点进次数和显示次数之比,就是通常所说的“点进率”。显然,“点进率”是衡量广告投放效果和搜索结果命中率的一个重要指标,因此被广告商和搜索引擎广泛使用。

本文要说的不是如何提高点进率,而是如何“降低” Google 点进率。呵呵,为什么这么说呢?

起因

如果你在 Google 上搜索我的名字, janlay, 搜索结果第一条就是我的这个 blog, 它的链接是:

<a href="http://janlay.com/" target=_blank class=l onmousedown="return clk(this.href,'','','res','1','&amp;sig2=FYQtPTX40i0boVYycei_cw')">janlay&#39;s blog</a>

从上面可以看到,Google 记录“点进”动作不是通过常规的方式——先到服务器上去记录,然后转向到目标地址——而是让浏览器直接访问目标地址,同时通过 javascript 记录。这样做的好处至少有两点:

  1. 记录“点进”的动作不易被觉察。点击搜索结果时不会发生异常现象,所以用户不会意识到这次点击已被记录;有些用户会有通过查看地址栏链接地址来检查 URL 可靠性的习惯,这里同样不会有什么不对的地方,因为 mousedown handler 是不会显示在地址栏上的。
  2. 访问目标地址和记录动作异步进行,用户无需等待即可立即开始访问目标地址。

你是否已经发现问题了呢?Google 会在用户不知情的情况下记录你曾经搜索过的关键词,点击了哪一条搜索结果(目前无法验证 Google 是否将此记录与特定用户相关联)。用户隐私无法得到保障——人们不会相信这些统计信息不会用于商业目的。

解决之道

在“用 Ad Muncher 访问 Google 网页快照”被研究出来之后,基本同样的替换方法,可以很容易地清除 Google 点进跟踪:

简单地说,就是将 class=l onmousedown="return clk(*)" 替换为 class=l. 应用规则之后,Google 所有搜索结果链接中的 onmousedown handler 将被删除。

2007/03/19

Skype 导致 IIS 发生 0x8ffe2740 错误

今天为了调试一个 ASP 应用程序,启动了 IIS 服务(平时为节省资源,此服务没有自动启动)。不料在 Internet Information Services 的 MMC 控制台,发现唯一的站点被打了个红叉。手动启动站点,IIS 立即报告错误:

Unexpected error 0x8ffe2740 occurred.

怎么回事?提示信息并未给出详细错误原因。打开 Event Viewer, System 目录有个 Source 为 W3SVC 的 115 错误事件,事件描述中提到:

The service could not bind instance 1.

看来是站点端口被其他进程占用了。运行 netstat -an, 果然 0.0.0.0:80 被占用,通过 SysinternalsTCPView 小工具,发现 80 端口居然被 Skype 占用!真是晕,Skype 来凑这个热闹干嘛?

进入 Skype 的 Options 查看,果然在 Connection 中有关于使用 80 和 443 端口的选项:

use port 80 and 443 as alternatives for incoming connections

呵呵,想必 Skype 默认这么做是为了更容易穿透防火墙。So, 简单地清除这个复选框,然后 restart Skype 就行了。

2007/03/14

如何在英文系统中打开中文CHM文档

如果你使用英文版 Windows 操作系统,经常会遇到的一个问题是,系统在打开某些中文 .chm 文档时会弹出错误对话框:

cannot open chm file

通常建议的解决办法是:将 Regional and Language Options 中的 Standards and formats 设置为 Chinese (PRC). 即通过将当前的区域环境设为简体中文。

但是这样做会影响是全局性的——其他程序也将在简体中文的上下文环境中工作——这可能并不是你所希望的。现在,有另一个办法可以解决此问题(无需修改区域设置):简单地把 .chm 文档的文件名改成英文,而不是包含汉字的文件名。

2007/03/10

解决 MSN 登录失败问题 (错误代码 80048820)

症状 (SYMPTOMS)

最近已经多次看到有人问为什么他的 Windows Live Messenger 无法登录(已经确保网络没有问题,系统时间也正确),返回错误代码为 0x80048820.

原因 (CAUSE)

大多数情况下,出现这个问题的原因是在 MSN 使用 SSL 登录 Live Passport 时,某个站点的证书状态不正常,导致连接被阻塞 (blocked), 因而出现类似超时的错误。

解决办法 (SOLUTION)

打开 “Internet 选项” (Internet Properties) 对话框,切换到“高级” (Advanced) 选项卡,在“安全” (Security) 分类中,取消“检查服务器证书吊销”复选框 (Uncheck Check for server certificate revocation).

更多 (MORE)

取消这个选项可能带来潜在的安全风险,目前只能等待 Microsoft 发现并自行解决这个问题。

2007/02/13

Blogcn 没有用户体验可言

作为网站开发者,我一般不会轻易评价同行做出来的网站很烂。但对于 blogcn, 我只能说,它带给我的体验很不爽。

前两个月,我在上面打开某一篇日志(地址已经不记得了)时,发现无论怎么刷新,页面总是一片空白,浏览器状态栏也显示出 Done, 怎么回事呢?打开 source 一看,晕倒,连初学者都知道的 <html> 标签居然都看不到,有这么考验浏览器容错性的么?

另一次网页空白事件,是因为指定简体中文编码的 <meta> 放在了 <title> 之后,而网站标题又有中文字符。这时,浏览器在读取数据流时,读到 <title> 处仍然不能判断出页面编码(Response header 中也未包含 charset 声明),于是,浏览器可能因不能正确识别页面编码而无法 parse HTML document. 这是一个很微小但可能引发严重后果(页面无法阅读)的问题,因此很多人都没注意到。解决办法很简单,把 <meta> 紧接着放在 <head> 之后 (确保指定编码的标签写在 <title> 前面 )即可。同样的问题在网球博客网站也出现过,他们根据我的办法立即排除了问题。我把这个问题及解决办法通过一个 blogcn 的朋友反馈给他们公司技术部,却未被采信……

今天,我进 blogcn 的情侣博客,准备发一篇日志上去,结果提交后足足等一分半钟,结果返回说我没登录。再登录进去,却无法切换到情侣博客了——总是要我登录。汗,吸引了大笔风投的公司,程序员待遇应该不错吧,面对那么庞大的用户群(号称第一中文 BSP),连个会话超时问题也解决不了么?

2007/01/13

IT News Today (01/13): Total Commander 7.0 public beta 3

ps: 今日连接国外速度有较大提升:)

2007/01/12

IE外壳浏览器横向比较(二):正确获取收藏夹图标(favicon)

第二篇:正确获取收藏夹图标(favicon)

在本专题的上一篇中,我谈到了四款 IE 外壳浏览器关于中键点击与引用页的比较。这次,我要说的是,浏览器如何正确地获取收藏夹图标 (favicon)。

favicon 是用于显示在浏览器地址栏和收藏夹中的图标,相信大家都不会陌生。印象中,国内网站较早启用 favicon 的是闪客帝国,那个时候,一道金黄色的闪电让人耳目一新(现在换成了蓝色闪电favicon of flashempire.com)。那个时候,它的制作“技巧”在网站设计和开发人员之间流传着:制作 DIY 一个 16 x 16 大小的 icon, 并确保它只有 16 色,然后把这个 .ico 图标文件放在网站根目录。

毫无疑问,favicon 是一个用于展示网站形象的不错载体。但是,随着网站的发展,仅仅在网站根目录放一个图标文件已经不能满足需求——一个大型网站可能会有多个不同的频道,比如 blogcn,它们之间表达的主题也不尽相同。都用同一个 favicon 难以表达各自的主题。于是,一种 link 标签应运而生。它的写法是: <link rel="shortcut icon" href="ICON_URL"> 这样, 可以使同一网站不同页面呈现不同的 favicon.

说到这里,就要进入今天的正题了。如果浏览器能同时查找根目录下的 favicon.ico 文件和上面 <link> 指定的 icon URL, 且 <link> 具有更高优先级,则该浏览器能正确地获取 favicon.

这里做一个简单的测试:将专题中提及的四款浏览器打开两个 tab, 分别访问如下两个网址: Microsoft Corporation Homepage: www.microsoft.com/en/us/default.aspx Microsoft Expression Homepage: www.microsoft.com/products/expression/en/default.mspx

由于各浏览器加载 favicon 策略不同,我们等页面全部加载完成后,再观察它们在 tab 上显示的图标。如果分别显示成 favicon of microsoft corporationfavicon of microsoft expression, 则说明该浏览器能正确获取 favicon, 如果都显示成 favicon of microsoft corporation, 则表明它没能正确获取。

测试结果

在参与比较的 4 款浏览器软件中,能正确获取 favicon 的只有 IE, 其它 3 款浏览器只是“傻傻”地尝试获取 /favicon.ico.

ps: 此问题我曾经在 Maxthon 官方论坛反映过,但他们并未在 2.x 版本中做出改进。

附注:本文所说的收藏夹图标严格来说,是“地址栏图标”,有一个 <link> 标签专门用来指定收藏夹图标<link rel="Bookmark" href="favicon.ico"> 事实上它并未引起重视,本文不考虑对它的正确处理问题。

2007/01/10

IT News Today (01/10): Apple iPhone

2007/01/08

域名知识普及:关于 Blogger 开始支持自定义域名

Blogger Buzz 博客网站发布了这个消息,并发布了一篇详细的帮助文档 (English),月光博客翻译了这篇文章并介绍了相关注意事项。我来补充一下相关内容。

  1. Blogger 要求你将自己域名的某个主机的 CNAME 指向到 ghs.google.com. 有些域名服务商可能对其写法有固定的格式,要写成 ghs.google.com. (结尾有一个点号) , 事实上,这是该域名的完整路径。
  2. 域名解析设置好了后,如果你可以立即访问,并不代表别人也可以继续访问——各地的解析时间不一样。一般来说, 3 天内各地都可以正常访问。
  3. 大家可能比较关心这个会不会被 GFW block? 月光博客在翻译 (地址在上文) 中说,ghs.google.com 目前是个固定 IP, 只要这个 IP 被“墙了”,所有使用自定义域名服务的 blog 网站都会被“墙了”。这个说法是不确切的。Google之所以让用户指用 CNAME, 而不是 A 记录,显然它深知其中的奥妙——CNAME相当于转发,Google 可以自由控制 ghs.google.com 的指向,而 A 记录则限定了指向。这也是 CNAME 和 A 记录的本质区别。如果未来有一天,ghs.google.com 的 IP 被“墙了”,Google 会迅速更换到其他 IP 上去。呵呵,狡免三窟,Google 搜索网站有多个 IP 就是最好的例子。那么,这是不是就意味着没有后顾之忧呢?非也。万能的 GFW 可以直接从访问最开始的地方—— DNS 解析处—— block 对 ghs.google.com 的解析请求,甚至直接阻止对 IP 的访问 (出现一个, block 一个). 如此,则和谐矣!

鉴于光缆事件造成的影响尚未结束,建议暂时不要使用自定义域名服务,除非你希望以龟速访问你的 blog. 本次科普到此结束。

2007/01/04

每月捐赠1元钱,支持李连杰壹基金计划

这个计划随着《满城尽是D罩杯》首映仪式而广为传播。从现在起,每月用手机发 1 至 999309,就可为李连杰壹基金计划添砖加瓦。发送 2 即可捐赠两元,发送 5 可捐赠 5 元。

这是一个慈善活动,你的捐助会被送到需要关怀的人那里去;信任它,不要让无良 SP 泯灭你的爱心。