前言
如上图,在知道创宇看到了几个新出的漏洞,就想去看看漏洞出在什么地方,下载最新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