今天特别发现SiteServe CMS( 3.4.4 )网站根目录多了一个asp文件,我就意识网站可以被挂马了!马上排查,终于在后台发现多了一个blue用户名的超级管理员。我猜想可能是SiteServe CMS系统有漏洞,上网一查,果然把到一堆“SiteServer 3.4.4 逻辑漏洞导致SQL注入”的文章。
---------------------------------------------------------------------------------------------------------------------------------------
SiteServer 3.4.4 逻辑漏洞导致SQL注入具体如下:
问题出在UserCenter.Pages.DLL中的Register,注册流程逻辑有问题,具体如下:
1.程序先把用户名带入数据库中查询,如果用户名没有重复,进入第二步;
2.再在远程检测用户名中是否含有非法字符,如果没有,则进入第三步;
3.将新注册的用户插入数据库。
由于在进行第一步的时候,程序没有进行任何处理就带入数据库中查询,那么就可以xxoo了。Orz。。。。
用户名填入以下语句,其他地方正常填写。
123');insert into bairong_Administrator([UserName],[Password],[PasswordFormat],[PasswordSalt]) values('blue','VffSUZcBPo4=','Encrypted','i7jq4LwC25wKDoqHErBWaw==');insert into bairong_AdministratorsInRoles values('Administrator','blue');insert into bairong_AdministratorsInRoles values('RegisteredUser','blue');insert into bairong_AdministratorsInRoles values('ConsoleAdministrator','blue');--
提交注册之后就往库里面插入了一个用户名为:blue 密码为:lanhai 的超级用户。
-------------------------------------------------------------------------------------------------------------------------------------
估计我后台的blue管理员就是这样来的。
我想主要是Js验证太简单了,改一下验证的Js文件就好了。
具体修复方法如下:
打开根目录下的UserCenter\js\signup_check2_data.js文件,把checkUserName函数改成:
checkUserName = function(value)
{
var r1= new RegExp('[^A-Za-z0-9_-]','');
$("username_msg").style.display = "none";
$("usernamevalid_msg_succ").style.display = "none";
$("usernamevalid_msg_error").style.display = "none";
value = $('UserName').value;
if ( !value || value.length == 0 )
{
$("username_msg").innerHTML = "用户名不能为空";
$("username_msg").style.display = "";
return false;
}
if ( value.length < 2 )
{
$("username_msg").innerHTML = '用户名长度不能小于2个字符';
$("username_msg").style.display = "";
return false;
}
else if( value.length > 18 )
{
$("username_msg").innerHTML = '用户名长度不大于18个字符';
$("username_msg").style.display = "";
return false;
}
else if( value.search(r1) >= 0)
{
$("username_msg").innerHTML = '用户名中含有非法字!';
$("username_msg").style.display = "";
return false;
}
return true;
}
这样就可以限制用户名的长度,还有非法的字符!
就这样,这个漏洞就可以修复了。
当然果然你有更好的方法,可以拿出来分享一下!