当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2015-0121708

漏洞标题:ThinkPHP设计缺陷导致逻辑漏洞造成密码找回绕过等问题

相关厂商:ThinkPHP

漏洞作者: Ricter

提交时间:2015-06-20 10:06

修复时间:2015-09-23 10:09

公开时间:2015-09-23 10:09

漏洞类型:设计缺陷/逻辑错误

危害等级:中

自评Rank:10

漏洞状态:漏洞已经通知厂商但是厂商忽略漏洞

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-06-20: 细节已通知厂商并且等待厂商处理中
2015-06-25: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放
2015-08-19: 细节向核心白帽子及相关领域专家公开
2015-08-29: 细节向普通白帽子公开
2015-09-08: 细节向实习白帽子公开
2015-09-23: 细节向公众公开

简要描述:

在不正确使用 ThinkPHP 时,可能会造成参数处理流程导致的逻辑漏洞。

详细说明:

ThinkPHP 处理传入的参数的时候,如果直接带入一个数组,接着数组带入 SQL 语句,会产生之前 phithon 大牛爆的 0day: WooYun: ThinkPHP框架架构上存在SQL注入
利用方式很简单:

data[0]=exp&data[1]=SQLI


然而,thinkphp 支持的不仅仅是 exp,像 like、in,都会支持。
也就是说,我们可以在很多地方精心构造一个参数,导致造成逻辑漏洞。比如找回密码、权限验证等。
我们传入:

data[0]=like&data[1]=x%25


这样就会编译成如下 mysql 语句:

select xx from xx where data like 'x%'


举个例子:
找回密码的地方,总会有一个 token,这个token如果储存在数据库,又从 url 接受的话,就会有如下情况。
假如 token 为 202cb962ac59075b964b07152d234b70,找回密码的 url 为:

http://localhost/reset?token=202cb962ac59075b964b07152d234b70


那么我们传入:

http://localhost/reset?token[0]=like&token[1]=2%25


不用知道全部的 token 即可重置管理员的密码,因为 2% 在 mysql 中匹配正好会匹配到 202cb962ac59075b964b07152d234b70。
比如在 ThinkOX 登录的地方:
POST 内容:

username[0]=like&username[1]=tes%25&password=bb


执行的 SQL 语句为:

0A498C98-CD9F-4816-906C-E6B0B38DBEC3.png


POST 内容:

username[0]=in&username[1][0]=test&username[1][1]=test2&password=bb


执行的 SQL 语句为:

4800EFDA-8ABA-45CC-A8CB-3F1298DAA1DB.png

漏洞证明:

手头没有源码可以测试,但是有一个线上业务,就此测试一下。
1. https://i.hostker.com/member/forgot_password
发送找回密码邮件:

F640AFC8-6299-4D8C-8F83-5A24C6E6CCDD.png


2.猜测收到的 token,成功发送密码到邮箱
(实际上我没有猜测,因为收到的token开头为 if,所以我直接用 if%来访问)
https://i.hostker.com/member/reset_password?session[0]=like&session[1]=if%25

3E0D3830-9E76-4AD9-A2DF-961291EEDF66.png


这个案例实际上不算利用很成功的案例,因为密码不是在线重设的而是发送到自己的邮箱。<del>给 Hostker 的安全赞一个</del>。

修复方案:

在利用 ThinkPHP 写东西时,最好避免直接讲传入的参数带入 SQL 语句。因为构造数组的话很容易出问题。

版权声明:转载请注明来源 Ricter@乌云


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2015-09-23 10:09

厂商回复:

漏洞Rank:8 (WooYun评价)

最新状态:

暂无


漏洞评价:

评论

  1. 2015-06-20 10:11 | 玉林嘎 ( 普通白帽子 | Rank:758 漏洞数:96 )

    前排!

  2. 2015-06-20 10:11 | Ricter ( 实习白帽子 | Rank:59 漏洞数:15 | 渣渣一个)

    有个图片传错了_(:з」∠)_嘛倒是不影响..

  3. 2015-06-20 10:31 | 牛肉包子 ( 普通白帽子 | Rank:254 漏洞数:64 )

    thinkphp的新闻

  4. 2015-06-20 14:34 | phith0n 认证白帽子 ( 核心白帽子 | Rank:656 漏洞数:107 | 一个想当文人的黑客~)

    thinkphp的新闻

  5. 2015-06-22 11:48 | ThinkPHP(乌云厂商)

    ThinkPHP的I函数已经统一解决了此类问题的

  6. 2015-09-23 13:17 | roker ( 普通白帽子 | Rank:357 漏洞数:108 )

    。。。