1. 漏洞描述
Relevant Link:
http://www.wooyun.org/bugs/wooyun-2016-0190216
2. 漏洞触发条件
0x1: POC
http://demo.weiphp.cn/index.php?s=/Admin/Public/login.html post:username[0]=admin'&username[1]=xxx*&password=123
3. 漏洞代码分析
/Application/Admin/Controller/PublicController.class.php
public functionlogin($username= null,$password= null,$verify= null){ /*读取数据库中的配置*/$config=S('DB_CONFIG_DATA'); if(!$config){$config=D('Config')->lists();S('DB_CONFIG_DATA',$config); }C($config); //添加配置 //这里进行了验证码验证,但是如果黑客通过HTTP抓取动态获取验证码,则可突破这层防御 if(IS_POST){ /*检测验证码 TODO:*/ if(C('WEB_SITE_VERIFY') && !check_verify($verify)){$this->error('验证码输入错误!'); } /*登录用户*/$User=D('Common/User'); //未对$username, $password进行任何输入过滤,导致SQL注入 if($User->login($username,$password, 'admin_login')){ //登录用户 ..
4. 防御方法
/Application/Admin/Controller/PublicController.class.php
public functionlogin($username= null,$password= null,$verify= null){ /*读取数据库中的配置*/$config=S('DB_CONFIG_DATA'); if(!$config){$config=D('Config')->lists();S('DB_CONFIG_DATA',$config); }C($config); //添加配置 if(IS_POST){ /*检测验证码 TODO:*/ if(C('WEB_SITE_VERIFY') && !check_verify($verify)){ //$this->error('验证码输入错误!'); } /*登录用户*/$User=D('Common/User'); /* sql inject protect */$username=mysql_real_escape_string($username);$password=mysql_real_escape_string($password); /**/ if($User->login($username,$password, 'admin_login')){ //登录用户
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论