360提交的 漏洞 ,官方修复不严谨
http://bbs.webscan.360.cn/forum.php?mod=viewthread&tid=8613&extra=page%3D1
修复前:
修复后(\core\api\shop_api.php):
if ( isset($_REQUEST['appname']) ) { $appName = preg_replace('/[^a-z0-1_~]/i', '', $_REQUEST['appname']); } elseif ( strpos($apiAct, ':') > 0 ) {// request plugin api list($appName, $apiAct) = explode(':', $apiAct); } elseif ( 0 === strpos($apiAct,'shopex_') ) { // 照顾"商品助理" $appName = 'goodsassistant'; } if ( $appName && file_exists(PLUGIN_DIR."/app/{$appName}/api/api_link.php") ) { $APIs = include PLUGIN_DIR."/app/{$appName}/api/api_link.php"; } else {// request traditional api $APIs = include CORE_DIR.'/api/include/api_link.php'; }
看起来$appName = preg_replace('/[^a-z0-1_~]/i', '', $_REQUEST['appname']);已经过滤掉了,但是再往下看:list($appName, $apiAct) = explode(':', $apiAct);
可以通过变量$apiAct去给$appName赋值
die($appName);测试看
http://127.0.0.1/api.php?act=可控路径:cc
后面还有file_exists函数做检查,所以只对多域名的 虚拟机 危害较大
修复方案: 过滤代码往下移几行
查看更多关于shopex绕过补丁本地包含漏洞#4 - 网站安全 - 自学的详细内容...