专栏首页FreeBuf客户支持聊天系统中的IDOR漏洞($5,000)

客户支持聊天系统中的IDOR漏洞($5,000)

大家好,今天分享的writeup是一个关于客户支持系统(Customer Support)的IDOR漏洞(不安全的直接对象引用),该漏洞可以导致目标系统的访问控制功能失效,实现客户支持平台内的任意消息读取和发送,还能下载任意用户的相关文件。

最终,该漏洞被厂商评定为严重级别(Critical),给予了$5000美金的奖励,我们一起来看看。

漏洞发现端倪

在目标系统的客户支持聊天窗口中,用户发送消息后,聊天窗口后台会产生如下请求:

如上图所示,用户在聊天窗口中发送了包含有字段——“testing by john wick2!”的消息,该字段赋值给了“text”参数。另外,还可以看到一个“userid”、“email” 、userhash、“anonymous_id” 和blocks。

请求发送出去之后,目标系统服务端会及时做出以下响应:

可以看到,响应中也包含有用户的发送消息,以及另外一个由服务端分配的参数“id”。

有了这些测试样例,我们自然会想到——不安全的直接对象引用漏洞(Insecure Direct Object Reference Vulnerability,IDOR),那就动手测试吧!

测试IDOR漏洞

测试1——替换请求中的user_id

非常直接的了,我们在请求消息中的“user_id”参数,把它替换成其他用户对应的数值,会是什么情况呢?一换,服务端解析错误:

测试2——删除请求中与用户对应的user_hash 参数串值

这里,我们不动“userid”参数,只是简单地把与用户对应的“userhash”参数值删除,在聊天窗口中发送消息之后,得到了以下服务端响应:

其中提示:基于用户身份验证机制,必须对用户进行哈希值验证。也就是说,哈希验证是强制的,且与user_id值是映射关系。那我们再看看其它参数。

测试3——删除请求中的userid和userhash参数值

把请求中的userid和userhash参数值同时删除后,在聊天窗口中发送消息之后,服务端响应:User hash is invalid,与上一个测试响应相同。

测试4——删除请求中的userid 、userhash和anonymous_id参数值

现在,只剩下“email”和“anonymousid”参数了,那就在上一测试步骤的基础上,我们再把anonymousid参数值也删除看看。在聊天窗口中发送消息后(hello this jaya222),这一删,惊喜就来了:

IDOR,这绝对是一个IDOR!从这里可以看出,目标系统的Web后端出现了配置错误,未对“email”参数做出有效的过滤检查措施,也就是说,服务端只需要“email”参数值就能验证用户身份,并做出有效响应!

PoC测试

如下,在聊天窗口消息发送的对应请求中,我们把其中的userid 、userhash和anonymous_id参数值都删除了,如下:

聊天窗口消息发送之后,在缺失这么多与用户相关的重要参数请求中,我们竟然能收到目标系统客户支持平台的有效响应,如下:

漏洞隐患

基于此,如果我把其中的“email”参数值更改为其他用户对应的注册邮箱地址,就能读取该用户所有的发送消息,也能以该用户身份进行消息发送和文件上传,而且还能下载与该用户对应的文件资料。

在上述PoC那步,我只要把POST请求中的URL缩短为/messenger/web/conversations,只发送带有其他用户email地址的参数,就能在服务器响应中轻松获取Web后端为该用户分配的用户id。之后,我就可以把该id号添加到POST请求URL末尾,形成/messenger/web/conversations/[conversation-id],实现对该用户的完全会话内容获取。

测试总结

在测试1阶段中,修改user_id不成功后,可能我们大多数人都会认为目标系统不存在IDOR漏洞,然后选择放弃测试。但是,IDOR漏洞不仅限于参数数值更改,它还包括参数数值删除,以及其他与个人信息相关的字段替换等。就像在该例中,email参数值导致了IDOR漏洞,只要把其更改为与其他用户对应的注册邮箱,就能轻松获取到该用户的对话消息内容和相关个人文件。所以,IDOR漏洞不只是参数数值的替换或增加,它还可以有其它形式的测试实现,我们在具体测试过程中要多动手多思考。

*参考来源:medium,clouds编译,转载请注明来自FreeBuf.CO

本文分享自微信公众号 - FreeBuf(freebuf),作者:clouds

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Malcom:一款功能强大的图形化恶意软件通信分析工具

    Malcom这款工具可分析系统内的网络通信流量,并以图形化的形式将流量分析情况提供给用户,分析结果中将包含已知的恶意软件源,而这些信息将有助于安全研究专家对特定...

    FB客服
  • 企业安全建设之路:端口扫描(下)

    0x00、前言 在企业安全建设过程当中,我们也不断在思考,做一个什么样的端口扫描才能企业业务需求。同时,伴随着企业私有云、混合云以及公有云业务部署环境的不断变...

    FB客服
  • 世界5大顶级PC厂商为什么会屡曝安全问题?

    像微软这类知名的开发商通常会付诸大量精力在操作系统和应用的安全问题上,一旦发现问题,立马修复并及时通知用户,以确保漏洞不会被黑客恶意利用。但是这样就安全了嘛? ...

    FB客服
  • 如何捕获一只彩色卓别林?黑白照片AI上色教程很友好 | 哈佛大触

    量子位
  • python---时间和时间戳的关系转换

    经常用的有time.time()、time.strftime()、time.strptime()、time.localtime()、time.mktime()

    py3study
  • 硬货来了!轻松掌握 MongDB 流式聚合操作

    信息科学中的聚合是指对相关数据进行内容筛选、处理和归类并输出结果的过程。MongoDB 中的聚合是指同时对多个文档中的数据进行处理、筛选和归类并输出结果的过程。...

    崔庆才
  • 实践:《从头到脚撸一个多人视频聊天 — 前端 WebRTC 实战)》

    请先阅读原文,链接:从头到脚撸一个多人视频聊天 — 前端 WebRTC 实战(一),本文只涉及实践过程中的问题

    申君健
  • 大数据告诉你追剧狂人为谁痴狂

    数据来源:斑马传媒与运营商合作后台数据 监测样本:8,801,800人 监测时间:10.15-11.15日 越靠近沿海地区,越习惯在网上追剧! 第1名:浙江,这...

    小莹莹
  • 如何读open jdk native 源码

    JVM_ENTRY本身是一个宏定义,位于interfaceSupport.hpp中

    爬蜥
  • 聊聊dubbo的StatusChecker

    dubbo-2.7.2/dubbo-common/src/main/java/org/apache/dubbo/common/status/Status.jav...

    codecraft

扫码关注云+社区

领取腾讯云代金券