很有意思的一片老文章(2009-07-22 16:40),值得学习……
不要空洞的理论和概念,也不要深奥的行话,除了实战经验,还是实战经验。
修改“Gmail账户昵称”的位置如图一所示:
图一
注意红框圈起来的地方,是Gmail默认账户长度的最大值,这里是96。我们可以用工具(例如:FireBug),对其长度进行修改,我在这里是直接把maxlength这个关键字去除掉。这样就可以写入超出96字节长度的账户昵称了,我测试下,写以下长度进去是可以的:
————————————————————————————
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
————————————————————————————
看看写入后的效果,数据显然是存储到数据库了,如图二:
图二
当然,如果你提交超长的数据,那么Gmail服务器将返回500错误,如图三:
图三
好的,现在我们已经知道,Gmail对“账户昵称”长度的限制只是做了本地过滤,远程并没有验证。于是我们沿着这个思路继续走。现在把“Gmail账户昵称"填充为以下内容,admin@gmail.com后面的是特定长度的空格,如图四:
图四
现在我们用这个Gmail账号给QQ邮箱发一封信,会看到发件人地址有所变化,后面真正的发件人地址不见了,如图五:
图五
这里是236个空格,在QQ邮箱系统中这个长度,可以覆盖掉发件人的地址,产生文中的那个效果。当然你可以发更长的空格长度,不过QQ邮箱发件人那里会变成乱码。
另外我们也可以用OUTLOOK,来接受这样的邮件,一旦”账户昵称“超长,就会出现以下问题,如图六:
现在让我来总结下上面说的东西:
1、Gmail用户昵称长度,本地修改后就可以提交,远程服务端没有进行验证。导致我们可以写很长的内容存入后台数据库。这当然并没有什么危害。但google犯这样低级的错误,实属不该。
2、腾讯邮箱系统对超长用户昵称没有做相应的处理。腾讯邮箱四月份的时候出现过一次逻辑错误,当时的情况是,抓包后重新提交,就可以使用腾讯的SMTP服务器进行匿名发信,那个漏洞已经提交腾讯修复。
3、OUTLOOK犯了同样的错误,对超长”用户昵称“没有做相应处理。其他的收信客户端,我没有测试,不知道是否存在这样的问题。
4、其实我们没必要用gmail来发送这样超长昵称的信,可以自己写个程序,把”用户昵称“的地方放入超长数据就可以。具体利用这样的”超长昵称“我们可以做些什么事情,这个问题还是留给你去想吧。
就目前来看,超长昵称的问题,本质上是邮箱系统没有对昵称进行相应处理,导致超长后会“覆盖”后面的数据(比如发件人地址)。暂且定义这种问题为:昵称溢出!