涨姿势:jQuery 曾经的 XSS 漏洞

最近我管理的一台服务器被怀疑被利用发起 DoS 攻击(详情见长文学习构建之法(2):课程总结),被有关管理单位查了水表。他们附送了一份检测报告,指出我们存在若干安全漏洞。其中一条引起了我的兴趣。

URL:http://SSAST.ORG/static/javascripts/libs/jquery.js。
详情:发现存在漏洞的’jquery’库,版本号:’1.6.2’。
风险:中危。

此外还报告了 jquery-ui-dialog 版本 1.8.11。

科协主页确实很老了,还在用上古时代的 jQuery 的上古版本。令我很感兴趣的是,前端的漏洞,除了 XSS 或者 CSRF 还能是啥?jQuery 这种万众瞩目的库,难道不是经过无数人 review?还能出这种问题?

我选择去找我的好朋友,Google.com。

google-jquery-1-6-2

哈哈,I’m feeling lucky. 点开,果然是 XSS。CVE-2011-4969#9521 jQuery Bug Tracker

我感觉这不能算是 jQuery 的漏洞,而在于程序员对 jQuery 的用法。简言之,很多知名网站和前端库里有 $(location.hash) 这样的写法(然而我无法理解为什么要这样做)。攻击方法是诱导用户点击精心构造的合法 URL,比如 http://example.com/#<script>alert('hello');</script>

jQuery 1.6.3 的 Release Note 指出该漏洞已被修复,方法简单粗暴,$() 用一个正则表达式来过滤,拒绝任何跟在 # 字符后面的 HTML 标签。

清华校园网免流量上网方法综述

“哪些地方的入校流量不计费?”

本文的分类依据是——“哪些地方的入校流量不计费?”

第一类方法:利用 IPv6

目前校园网 IPv6 出入流量是不计费的。这可能是因为基于对 IP 地址进行认证的计费系统尚未升级,也可能是出于政策上对 IPv6 的推广。
这一类方法都要求你有 IPv6 的接入。反正在我宿舍里是可以的,而到了某些教学楼就不行了。

1. 访问 IPv6 站点或 BT 服务

这是唯一不需要在校外做任何部署的方法,缺点是能访问的站点范围十分有限。这也是目前最广为人知的方法。比如大家都知道从北邮人、六度空间下东西不要流量,可以修改 hosts 文件上 YouTube 等。

2. 利用 IPv6 隧道的代理

这也是用的比较多的方法。你需要在校外有代理服务器,然后通过 IPv6 和代理服务器通信。比如我协就有 Shadowsocks 服务开放给大家使用,部署在校外支持 IPv6 的 VPS 上。想自己搞一个的话可移步参考资料[1]。

第二类方法:利用可从校外访问的校内站点

为方便师生,有一些校内常用站点是可以从校外访问的,包括网络学堂、图书馆、清华邮箱等。我相信这些服务器的 IP 是在计费系统的白名单里的。

1. 清华邮箱

这种方法的实时性较差,很难用于在线浏览,可能只能用来下载文件了。当你需要下载一个大文件的时候,第一步,用一个校外的服务器下载指定的文件。第二步,把它作为附件发到自己清华邮箱。第三步,在校内登录邮箱下载这个文件。

由于邮件附件大小有限制,我们需要把文件分段。这个过程是可以自动化的。曾有同学用此法实现了一个 demo,请围观参考资料[2]。

当然,直接支持通过邮箱下载文件的网站也是有的。

2. 网络学堂

网络学堂有个讨论区,讨论区是可以上传自己的文件的。其实和利用清华邮箱差不多,把第二步改成“把它作为附件上传到网络学堂某个课程的讨论区上”就是了。我最近在做这样一个 demo,尚很粗糙,但基本的功能已经可以了。

第三类方法:SSL VPN 系统

SSL VPN 系统允许你在校外访问校内任意 IP,这也是一个流量不计费的地方。可以利用它做代理隧道。

前不久试了一下,在宿舍里开个 FTP 服务器,然后用家里的电脑连上 SSL VPN 往这个 FTP 上传文件。轻松加愉快。

第四类方法:DNS 的 UDP 53 端口

参考资料[3]是北邮一同学的 demo,还放到乌云上了←_← 据说我校 UDP 53 端口也是开放的,可以 DNS tunnel 绕开计费。

参考资料

[1]如何用20G过完一个月. 岳大禹.
[2][脑洞]关于从校内免流量下载文件的实验. 汪芃.
[3][DNS tunnel实例]北京某大学网关计费系统可被绕过. lxj616.

Wikiwand:优雅地访问维基百科

Wikiwand: Wikipedia Reimagined

本文隆重介绍 Wikiwand 这个网站。它的口号是:

Wikipedia Reimagined: A beautiful new interface to the human knowledge

它能够将维基百科的页面重新排版展现给用户,开起来会非常漂亮。

缺陷是它尚并不支持中文维基百科的繁简、地区词处理机制。

下面是它的主页。您可以从它的主页上直接进入词条,或下载它的 App、浏览器插件。
https://www.wikiwand.com/
http://www.wikiwand.com/

您可以用以下链接体验一下效果:
https://www.wikiwand.com/zh/%E6%95%A3%E5%BA%A6

考虑到它在中文社区的知名度尚低,应该还可以愉快地使用一段时间。当做维基百科专门的 Web 代理。你懂的。(完)

试译 John Gordon 的 Alice and Bob 餐后演讲(未完待续)

首次尝试翻译学术向的文章。这是一篇经典的,风趣的演说稿,现在网上流传的中译本有些谬误,故试译以改正之。


关于 Alice 和 Bob 的餐后演讲
作者 John Gordon
受 James Massey 教授之邀,于 Zurich Seminar 学术研讨会,1984 年 4 月

由 Zhaoyang 译出,参考了 Friendren 的译文
英文原文于 http://downlode.org/Etext/alicebob.html

女士们,先生们,晚上好。

  人们参加这样的学术会议,肯定希望有点更轻松的东西,能让他们换个节奏、换种风格,把专业的事情放在一边,想一些完全不同的东西。

  所以呢,咱们聊聊编码理论。在座的有些同仁不是编码理论的专家,而是不怎么情愿地被差遣来的。于是我想我可以来个五分钟的速成课程,像面对研究生那样给大家扫盲一下编码理论。

  编码理论的专家关心两件事。第一件,即最重要的一件,是两个人的私人生活—— Alice 和 Bob。在本领域的论文中,若一位学者想描述一个涉及双方的业务过程,他不会称双方为A和B,而是遵从一个长期形成的传统,称他们为 Alice 和 Bob。

  现在已经有数百篇关于 Alice 和 Bob 的论文了。数年来,Alice 和 Bob 尝试过欺诈保险公司,通过电子邮件玩高赌注的扑克游戏,还在被窃听的电话线上交换秘密信息。

  如果我们把这些散落在论文里的细节整理一番,我们就可以得到关于这两人生活的一副美妙图画。这可能将是大家首次听到 Alice 和 Bob 的确切传记。

  在美国作者撰写的论文中,Bob 常常在向投机商卖股票。根据 Bob 参与的股票交易的数目,我们推断他很可能是一名股票经纪人。然而他也非常在意自己是否被窃听,所以估计他活跃在什么反政府活动之中。注意到 Alice 曾多少次试图从 Bob 手中购买股票,我们知道 Alice 很可能就是一个投机商。此外,Alice 非常担心她与 Bob 的经济往来被她丈夫发现。所以说 Bob 是一个背地里从事破坏活动的股票经纪人,Alice 是一个脚踩两只船的投机商人。

   Alice 需要面对不少难题。她和 Bob 只通过电话或电子邮件来交流。在他们居住的那个国家的电话费很贵,可偏偏两人都很吝啬。所以 Alice 首先要设法将电话费降到最低。

  另外,电话线上总有很大的噪音。由于干扰之强,Alice 和 Bob 经常难以听清对方。电话线上还有不少非常强大的敌人,比如税收当局,比如秘密警察。这是个坏消息,因为二人感兴趣的话题正是税务欺诈和反政府。

  这些敌人有几乎无限的资源可用。他们总守在电话线旁,监听 Alice 和 Bob 的通话。这些敌人也很狡猾,他们最爱玩的把戏就是装作 Bob 给 Alice 打电话。

  你可能会想,Alice 只要仔细辨别 Bob 的嗓音就可以了。但是不行,事实上 Alice 与 Bob 从未谋面,Alice 根本不知道 Bob 的声音是什么样的。

  于是,你看到,Alice 面对着这么多棘手的问题。对了,忘了说,Alice 并不信任 Bob。我们不知道个中缘故,但肯定是过去发生过什么事情。

  如果在 Alice 的处境下,大多数人都会放弃。但 Alice 没有。她有令人敬畏的勇气。无惧艰险,在嘈杂的电话线上,尽管被税收当局和秘密警察监听着,Alice 还是会愉快地尝试与一个她并不信任,听不清楚,有可能被别人冒充的人通信,来篡改自己的退税信息,来谋划政变,同时,还要将电话费降到最低。

  而编码学家则是一群认为 Alice 没疯的人。

信息(Information)

  编码学家关心的另一件事是信息。没有别的东西像信息一样独特:它可以被凭空创造,也可以被彻底销毁。你可以窃取它,而且是在不使其离开原位的前提下。有时候你仅凭猜测就可以得到它的一部分(比如,即使我不知道你的手机号,我也知道它的第一位是1——译者注)。然而它可以具有很大的价值,可以被买卖。

  有一种信息被称作金钱。

  有一群人不承认金钱可以创造或销毁,他们花费毕生精力维护精确的记录,只为确保:只要一点点钱离开某处,一定有等量的钱出现在另一处。我们称这些人为会计。

信源编码、信道编码和加密编码

  编码理论,就像高卢(地名——译者注)一样,被分为三个部分:信源编码、信道编码和加密编码。

信源编码(Source coding)

  首先聊聊信源编码。这是 Alice 用来省电话费的办法。它经常被用于做数据压缩,即缩短信息的长度。

  有个故事,关于一位信息论的学生在大学的第一天。那一天他进入了一个古怪的世界。他唯一能听到的,就是时不时地,一位教授说出一个数字,和随之而来的笑声。比如一位教授说出“52”,然后是短暂的安静,然后就是响亮的笑声了。又有人说出“713”,结果大家都快笑趴下了。
  “这是什么鬼?”这位学生满脸狐疑地问他的导师。
  “我们在讲笑话,”他的导师说。
  “讲笑话?”
  “对的。你看,我们都在这里工作很久了,每个人有什么笑话,我们互相都知道。一共有一千个。作为信息论的专家,我们对笑话们实施了数据压缩。我们为它们赋予了从0到999的编号,这样讲起笑话来非常省时省力。你可以试一试,说一个0到999之间的数字……”

  这学生将信将疑,不过还是试了一下。他轻轻地说出了“477”。
  只有几乎听不见的低语声。
  他看着他的导师,“我做错了什么?”他说。“再试一次,”导师说。
  他照做了。“318”——和刚才一样,几乎鸦雀无声。
  “不对吧,”他说。
  “好吧,”导师说,“一定是你讲的不好笑!”

  然后就是这个故事精彩的结局了。这位学生最终意外取得了戏剧性的成功。他说了一个范围之外的数——“负105”。
  话音落下,起初众人惊诧地说不出话,然后一位教授笑了起来,继而一个接着一个,直到所有人都笑得摇摇晃晃站不稳。

  这是因为他们从来没有听过这个笑话。

信道编码(Channel coding)

  接下来我们谈谈信道编码。这是 Alice 用来克服电话线上的噪声和干扰的办法。其实大部分人已经不自觉地在用信道编码了,他们会在说话的时候把重要的单词拼读出来。这样做增加了冗余性,并且使得收听者可以进行核实。即使有一部分信息在传输途中丢失,缺少的那一点儿也可以根据剩余的部分经推断得以重建。

  在例如军队,航空,警察这样的组织中,有一套专门为此设计的标准的语音字母表。它是“Alpha,Bravo,Charlie,Delta,Echo,Foxtrot,……”于是他们说“Mike”和“November”,比起发音容易混淆的“M”和“N”显然要清楚得多。(我国军队中以“幺、两、拐、勾、洞”等代替“一、二、七、九、零”同理。——译者注)

   Alice 正在向 Bob 说明,她的丈夫 Bob 已经开始怀疑她的股票交易。
  “我必须跟你说说迈克(Mike),”她说的是。然而 Bob 听到的是“我-嘶嘶-和你讲讲-嘶嘶—嘶-克”。
  “你说什么?” Bob 问。“我必须得和你讲讲Mike”,Alice 说。
  “最后一个词我没听见,Alice,” Bob 说,“你能拼一下么?”
  “Mike India Kilo Echo”。
  “我只听见了India Kilo Echo,你说的第一个词是什么?”
  “Mike。”
  “你能拼一下么?”
  “Mike India Kilo Echo”……

  (这个故事的中文版本应该是这样的:
  ——我说的是‘清’,‘清华’的‘清’。
  ——你说什么?什么‘华的清’?前一个字没听见。
  ——‘清华’的‘清’。
  ——我只听见了‘华的清’,第一个字是什么?
  ——‘清’,‘清华’的‘清’……
  由此进入死循环。——译者注)

  事实上我们有很多套这样的语音字母表。比如在此之前的国际标准是“Able,Baker,Charlie……”

  也有基于地名的:Africa,Brazil,Chile,Denmark,England,France,Greenland,Holland,India,Japan,Khazakistan,Lithuania,Morocco,Niger,Oman,Papua,Qatar,Russia,Spain,Tanzania,Uruguay,Venezuela,Westphalia,Yemen,Xanadu,Zambia。

  我个人最喜欢是这个:

  * A for ‘Orses(音同hay for horses,干草喂给马儿——译者注,下同)
  * B for Mutton(beef or mutton,牛肉羊肉)
  * C for Yourself(see for yourself,亲自看)
  * D for Mation(deformation,变形)
  * E for Brick(heave a brick,举起一块砖头)
  * F for Vescence(effervescence,冒泡)
  * G for Police(chief of police,警长)
  * H for Consent(age of consent,承诺年龄)
  * I for Lutin(highfalutin,自大)
  * J for Orange(Jaffa orange,一种水果)
  * K for Teria(cafeteria,自助餐厅)
  * L for Leather(hell for leather,飞快地)
  * M for Sis(emphasis,强调)
  * N for Mation(information,信息)
  * O for A Muse of Fire(莎翁《亨利五世》的开场白)
  * P for Ate(perforate,打孔)
  * Q for A Song(cue for a song,提示歌词)
  * S for Something Else(as for,至于别的事情)
  * T for Two(tea for two,两人份的茶水)
  * U for Mism(euphemism,婉辞)
  * V for La France(Vive La France,法兰西万岁)
  * W for Mism(double euphemism,两个婉辞)
  * X for Breakfast(eggs for breakfast,早餐吃鸡蛋)
  * Y for Lover
  * Z (zee) for yourself

加密编码(Secrecy coding)

  终于到重头戏——加密编码了。加密编码也被称作密码学(Cryptography)。这是 Alice 用来防止税收当局和秘密警察理解她电话的内容的办法。

  密码学家是真正古怪的人,他们脑袋里的想法是“迂回”的。有时候他们把笑话加密。安全机关称这种笑话为“隐秘笑话”,称编写他们的人为“笑话炮制家”。
  一个使常人可以理解、能引人发笑的笑话,在以其原始形式呈现时,被称为“明笑话”(Plainjoke,变自plaintext,指明文——译者注),被加密后则成为了“密笑话”(Cipherjoke or Cryptojoke,变自ciphertext,指密文——译者注)。显而易见,密笑话只有在被解密(Decryption)后才能被常人所理解,这一过程也被一些人称作解释

  面对一个无法理解的密笑话,有三种攻击方法,这是按照笑话分析师(Jokeanalyst,指攻击者——译者注)所掌握的资源进行分类的。首先我们有“唯密笑话攻击”,这种情况下笑话分析师拥有无限多的“据说很好笑”的材料。

  第二种更强,是“已知明笑话攻击”,这种情况下他可以拥有若干组相互对应的“明笑话——密笑话”样本。

  然而最强的攻击情形是“选择密笑话攻击”,这种情况下他有机会要求笑话炮制家解释他们炮制出的密笑话究竟为什么好笑。或者反过来,是“选择明笑话攻击”,要求笑话炮制家根据已知的笑点炮制出密笑话来。(原文此处可能有误,已修改——译者注)

  那些比较弱智的笑话,通常只用很简单的密码加密,比如只把真正引发笑点、抖包袱的那几个字改掉。这种加密方法被称作“结尾跑偏系统”(Deflected Ending System),简称DES。(事实上DES是一种正经的加密标准 Data Encryption Standard,已因易被破解而停用——译者注)

  那些质量很高、很重要的笑话,比如若被外人理解,就会对国家安全构成威胁的,需要加密得更加安全。通常是把情节、场景、结局全都改掉。这种加密方法被称作“特别聪明掩护”(Particularly Klever Coverup),简称 PKC。其中有一种最著名,可以“抵抗严重攻击”(Resists Serious Attack),故被称作 RSA。(事实上 PKC 是 Public Key Cryptosystem,即公钥密码系统,RSA 是一种 PKC 算法,以发明者 Ron Rivest, Adi Shamir 和 Leonard Adleman 命名。比 DES 强。——译者注)

  当然,这里有一个必然的推论:只有极具天赋、聪明非凡的人才能真正理解一个幽默演讲的美妙之处。

标准化(Standardisation)

  考虑到设计一套好的加密机制的难度之大,和相应仪器设备的成本之高,人们正在努力将加密机制标准化。就在我说话的当下,国际标准化组织 ISO 就正在开会讨论这一点。关于加密机制的标准化,现存不少误解,我应要求来详细阐述一下。语言存在的意义在于传达信息,只有在信息发送和接收的双方采用相同的系统时(比如都说英语、或上海话——译者注)这一目的才能达成。换句话说,语言能够精确地完成其任务,正是因为它是标准化的。

   然而,密码学的意义,恰恰相反,是让信息对除特定人以外的所有人都不可理解,换言之,密码学能够精确地完成其任务,正因为它不是标准化的。所以,他们做的事情实际上是,将加密机制的大部分标准化,然后把非标准化的部分集中到一起,即密钥(key)。

  目前为止一切顺利。但是密钥,这非标准化的部分,必须按照标准化的方法“非标准”。并且密钥的管理必须要遵循一定的标准。换言之,密钥应被阐述为这样的部分,它们本身是非标准的,遵循一定的非标准化的标准,必须以标准化的非标准方法来处理,以在非标准化的基础上实现标准化。

  但愿我解释清楚了标准化的问题。(作者绕了半天“标准化”“非标准化”,看起来是在黑 ISO 对加密机制标准化的尝试——译者注)

弱密钥(Weak keys)

  很多加密机制都存在“坏”的密钥。如果你使用了它们,你的加密就会很容易被破解。比如,全零密钥是 DES 的弱密钥。有很多寻找弱密钥的深入研究。数年来越来越多的弱密钥已被发现,所以你必须非常小心地避免使用它们。

  也许更好的想法是去寻找强密钥。恩,为什么不找一个宇宙中最强的密钥呢?(事实上这是显然不可行的——编者注)

  然后我们就可以把所有的标准化都建立在这个最强密钥上了。

处理延迟(Processing delay)

  编码理论并非完美,它有它自己的问题。在介绍信源编码、信道编码和加密编码的同时,通常也要说一说“处理延迟”。这指由于编码、解码的一切过程造成的延迟——这种延迟有时巨大惊人。

(本段落还在翻译中)

当下图景

(本段落还在翻译中)

(未完待续)

密码在空中飘扬

时至今日,用户登录居然还有 HTTP 明文 POST 密码的,这就发生在……

最近一不小心发现清华校园网认证登录机制有个明显的漏洞,做了点实验,还写了篇文章,投稿至年级的微信公众号发表了。此博文作为警示:

对用户的密码不要直接 HTTP POST !简单取一下散列并不行,直接 POST 明文更不行!要让服务器下发一个 nonse,要用 HTTPS,要不然太不安全,太不负责任了。。!

不过这真是自我打脸。本博客采用的 WordPress 在登录的时候就是 HTTP POST 明文的。。等我期中考试完闲下来,把它整个改掉。。

(待更新)