网站地图    收藏   

主页 > 后端 > 网站安全 >

phpcms v9 SQL注入漏洞(第二弹) - 网站安全 - 自学

来源:自学PHP网    时间:2015-04-16 23:15 作者: 阅读:

[导读] 漏洞文件发生在phpcms modules member index php中392行public function account_manage_info() { account_manage_info方法,就是更新个人资料if(isset($_POST[ 39;dosubmit 39;])) { 更新用户昵称$...

漏洞文件发生在phpcms\modules\member\index.php中392行
 
public function account_manage_info() { // account_manage_info方法,就是更新个人资料

if(isset($_POST['dosubmit'])) {

//更新用户昵称

$nickname = isset($_POST['nickname']) && trim($_POST['nickname']) ? trim($_POST['nickname']) : ''; //存在真名名字就去掉2边空格

if($nickname) {

$this->db->update(array('nickname'=>$nickname), array('userid'=>$this->memberinfo['userid'])); //存在$nickname这个变量就更新真实名字,漏洞发生在此处

if(!isset($cookietime)) {

$get_cookietime = param::get_cookie('cookietime');

}  // 取出cookietime

$_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0);

$cookietime = $_cookietime ? TIME + $_cookietime : 0;

param::set_cookie('_nickname', $nickname, $cookietime);//这里设置cookie

}


 

 
………………….//省略若干无关代码
 
 
我们注册用户,然后修改个人信息
 
http://127.0.0.1/index.php?m=member&c=index&a=account_manage_info&t=1
 
我们更新测试下,将带有’ (单引号的名字)带入数据库试试
 
 
然后我们看看数据库中对应表的更新
然后发现已经成功进入了数据库
 
接下来我们要做的就是重新登录(必须重新注销登录,因为要用到这里重新登录的cookie)
 
当我们重新登录的时候
 
在phpcms\modules\member\index.php中543行
 
public function login() {

$this->_session_start();

//…..省略若干代码

param::set_cookie('auth', $phpcms_auth, $cookietime);

param::set_cookie('_userid', $userid, $cookietime);

param::set_cookie('_username', $username, $cookietime);

param::set_cookie('_groupid', $groupid, $cookietime);

param::set_cookie('_nickname', $nickname, $cookietime);

 

 
//…..省略若干代码
 
这里我们发现已经重新设置nickname的cookie了,而这里的$nickname也是从数据库里面取出来的。
 
我们看phpcms\modules\comment\index.php中的post方法
 
这里的$username变量是通过cookie过来的
 
然后这个$username变量又做了些什么呢?
 
在phpcms\modules\comment\index.php 100行处
 
发现这个它赋给了一个$data数组,然后进入了数据库,一个insert语句
 
$comment->add()这样一个过程
 
上面是一个提交评论的操作,我们的攻击思路是这样的
 
当我们提交评论的时候,截取我们的数据包,将其中的username这个cookie值用我们nickname这个cookie值来代替,这样就起到了注入的效果了,我们测试下
 
 
 
具体攻击过程就不演示了。。。
 
贴一下官网测试的结果
 

修复方案:
这个....在入数据库前做过滤吧,记得若干年前80vul的那句。。。一切变量都是有害的

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论