前言

如上图,在知道创宇看到了几个新出的漏洞,就想去看看漏洞出在什么地方,下载最新V2.3版本,发现了一个很有趣的问题,原来这个漏洞是V2.1版本就有的,至今未修复。下面就给大家简单的分析分析,其实漏洞也很简单。

Web_Mail注入

1
2
3
4
5
6
7
8
9
if ($Type=="fintpassword"){
if (@htmlspecialchars($_POST['Email']) !==""){
// 判断是否输入邮箱
$sql="select * from sc_user where user_email='".$_POST['Email']."'";
$result=mysql_query($sql);
$row = mysql_fetch_array($result,MYSQL_ASSOC);
if (mysql_num_rows($result)>0)
}
}

我们看代码,你是不是发现了问题?虽然if语句里面有htmlspecialchars这个用来过滤单双引号,但是后面sql执行的时候,过滤的东西跑哪去啦?这就产生了注入。

后台绕过

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function checkuser(){ 
//判断账号
$cookieuser=@htmlspecialchars($_COOKIE["scuser"]);
$cookieuserqx=@htmlspecialchars($_COOKIE["scuserqx"]);
$sql="select * from sc_user where user_ps='$cookieuser' and user_qx='$cookieuserqx'";
$result=mysql_query($sql);
$row = mysql_fetch_array($result,MYSQL_ASSOC);
if (!mysql_num_rows($result)){
echo "<script language='javascript'>alert('账号密码不正确重新登陆!');
top.location.href='index.html';</script>";
}
else {
echo '';
}
}
}

这是在function.php里面的代码,虽然有简单的过滤,但是依旧可以绕过。

$cookieuser=\;$cookieuserqx=or 1=1#的时候,sql语句等于select * from sc_user where user_ps='\' and user_qx='or 1=1#',后面的单引号跟前面的闭合了。产生了我们可控的参数。就可以后台登陆了。

还有其他几个漏洞不多说。给大家个V2.1版本漏洞的地址,反正跟V2.3的一样,也没修复,想看的自己看看吧。

Reference