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

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

缺陷编号:wooyun-2014-085666

漏洞标题:PHPOK结合CSRF(GET型) - GETSHELL

相关厂商:phpok.com

漏洞作者: pandas

提交时间:2014-12-03 11:43

修复时间:2015-03-03 11:44

公开时间:2015-03-03 11:44

漏洞类型:文件包含

危害等级:中

自评Rank:10

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-12-03: 细节已通知厂商并且等待厂商处理中
2014-12-03: 厂商已经确认,细节仅向厂商公开
2014-12-06: 细节向第三方安全合作伙伴开放
2015-01-27: 细节向核心白帽子及相关领域专家公开
2015-02-06: 细节向普通白帽子公开
2015-02-16: 细节向实习白帽子公开
2015-03-03: 细节向公众公开

简要描述:

PHPOK 输入过滤做的还是不错的,输入参数都做了 addslashes 转义; addslashes 在某些场景起不到安全防护作用,这里借PHPOK举个栗子。

详细说明:

getshell利用的是include方法过滤不严的缺陷,代码如下:
文件 framework/www/payment_control.php :submit方法

function submit_f()
{
$rs = $this->auth_check();
...
$payment = $this->get('payment','int');
...
// 取数据库表 qinggan_payment 的数据
$payment_rs = $this->model('payment')->get_one($payment);
// $payment_rs['code']即上述表 qinggan_payment 的code字段数据
$file = $this->dir_root.'payment/'.$payment_rs['code'].'/submit.php';
if(!is_file($file))
{
error(P_Lang('支付接口异常,请检查'),$error_url,'error');
}
// 包含$file文件
include_once($file);


include参数$file参数是可控的,来自于数据库表qinggan_payment的code字段,我们继续跟这个字段是否可控。
文件 framework/admin/payment_control.php : save方法

function save_f()
{
$gid = $this->get('gid','int');
// ($_GET或$_POST)外部传code值,会对敏感字符做addslashes
$code = $this->get('code');
$id = $this->get('id','int');
...
$data = array('title'=>$title,'code'=>$code,'gid'=>$gid);
...
// 数据存入db,上面的get方法传入的code值存入数据库表 qinggan_payment的code字段
$this->model('payment')->save($data,$id);
...
}


总结一下:get方法存入的code参数值存入DB,include方法从DB中取到code参数值;从而可以任意控制include的参数造成getshell。include文件名是 'payment/'.$payment_rs['code'].'/submit.php',我们需要截断掉submit.php,因为数据库code的长度是100,分隔符的方法是不行了,可以用%00截断。
这里说明一下%00字符不受addslashes影响的原因。%00会被转义为\0,不过在存入DB又变成%00,这种二次使用的场景无视GPC。

漏洞证明:

一、利用CSRF开启支付功能,并设置code为根目录的LICENSE文件:
http://127.0.0.1/phpok/admin.php?c=payment&f=save&code=../LICENSE%00&gid=1&title=1&status=1
二、到首页的“产品展示”下个单,然后到 个人中心 => 订单中心 => 支付,选择上面CSRF添加的支付方式触发可getshell

phpok.PNG

修复方案:

过滤输入或防范CSRF,触发点有好几个

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:10

确认时间:2014-12-03 12:53

厂商回复:

每次看到过滤漏洞我就头大~~我们很想出一个比较完善的版本呢
伤心一下,又是一个新的漏洞!
另我们这边简单分析了下这个漏洞的前台是必须在数据库里有相应的code码才会出现这个问题。而这个code必须在后台写入才行(用户如果连自己后台的密码都不设安全一些,那么基本上也是不设防的)
最后还是感谢您提出的%00这个东东,说实话,你们脑瓜咋想的~哎~~~

最新状态:

暂无


漏洞评价:

评论

  1. 2014-12-03 12:02 | menmen519 ( 普通白帽子 | Rank:762 漏洞数:146 | http://menmen519.blog.sohu.com/)

    你也玩开csrf了

  2. 2014-12-03 12:02 | 紫衣大侠 ( 普通白帽子 | Rank:201 漏洞数:21 | 愿结天下有识之士)

  3. 2014-12-07 18:10 | ToySweet ( 实习白帽子 | Rank:36 漏洞数:8 | 做有道德的安全研究员。)

    带我飞啊

  4. 2015-03-30 19:01 | qhwlpg ( 普通白帽子 | Rank:226 漏洞数:54 | 潜心代码审计。)

    厂商都无奈了==