<code><!--?php defined('IN_PHPCMS') or exit('Access Denied'); $serverid ? 1 : showmessage($LANG['illegal_operation']); $db--->query("UPDATE ".TABLE_MOVIE_SERVER." SET `num` = (num-1) WHERE serverid = $serverid AND num > 0 ");
2 ?></code>
$serverid没有进行任何过滤也没有用单引号括起来,所以无视gpc。
核心文件include\common.inc.php里大概80左右变量覆盖漏洞。
<code>if($PHP_QUERYSTRING && preg_match("/^(.*)\.(htm|html|shtm|shtml)$/", $PHP_QUERYSTRING, $urlvar))
{
parse_str(str_replace(array('/', '-', ' '), array('&', '=', ''), $urlvar[1]));
}</code>
这个判断太弱了,判断querystring是不是等于静态文件后缀,结尾随便加个参数赋个静态文件的值就过了,经过parse_str就产生了
<pre class="prettyprint linenums"><!--?php defined('IN_PHPCMS') or exit('Access Denied'); $serverid ? 1 : showmessage($LANG['illegal_operation']); $db--->query("UPDATE ".TABLE_MOVIE_SERVER." SET `num` = (num-1) WHERE serverid = $serverid AND num > 0 ");
2 ?></pre>
$serverid没有进行任何过滤也没有用单引号括起来,所以无视gpc。
核心文件include\common.inc.php里大概80左右变量覆盖漏洞。
<pre class="prettyprint linenums">if($PHP_QUERYSTRING && preg_match("/^(.*)\.(htm|html|shtm|shtml)$/", $PHP_QUERYSTRING, $urlvar))
{
parse_str(str_replace(array('/', '-', ' '), array('&', '=', ''), $urlvar[1]));
}</pre>
这个判断太弱了,判断querystring是不是等于静态文件后缀,结尾随便加个参数赋个静态文件的值就过了,经过parse_str就产生了
phpcms 2007
sebug 临时解决方案:
1、过滤变量$serverid
厂商补丁:
PHPCMS
-------
目前厂商暂无提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
http://www.phpcms.cn/
暂无评论