网站地图    收藏   

主页 > 入门引导 > 黑客攻防 >

oecms 存储型 xss - 网站安全 - 自学php网

来源:未知    时间:2015-04-15 13:40 作者:xxadmin 阅读:

[导读] 没有对文件的访问做验证,并且其中有一个参数在最后转义了,看了一下用oecms的网站挺多的;此xss用起来也比较方便,直接post数据,前台直接触发,后端也没做csrf处理,这也增大了...

没有对文件的访问做验证,并且其中有一个参数在最后转义了,看了一下用oecms的网站挺多的;此xss用起来也比较方便,直接post数据,前台直接触发,后端也没做csrf处理,这也增大了xss的威力。

造成xss的的两个原因:

(1)对admincp下的文件访问验证有问题

(2)有一个参数开始过滤了,最后又用stripslashes还原了

问题出现在admincp/frendlink.php文件的action_saveadd()函数

args从_validAdd()函数传入

public function action_saveadd() {
        $args = $this->_validAdd();
        
        $model = parent::model('friendlink', 'am');
        $result = $model->doAdd($args);
        unset($model); 
        if (true === $result) {
            $this->log('friendlink_add', '', 1);
            XHandle::halt("添加成功", $this->cpfile.'?c=friendlink', 0);
        }
        else {
            $this->log('friendlink_add', '', 0);
            XHandle::halt('添加失败', '', 1);
        }
        }


跟踪_validAdd()函数,传入的参数 'name', 'orders', 'flag', ‘remark’,’catid’在getGpc函数都做了过滤,而url传入了getArgs()函数

getArgs如果isfliter是false的话就会执行XFilter::stripArray(),此函数把转义的都还原了 ,造成了xss漏洞

 

public static function getArgs($value, $default=NULL, $isfliter = true) {
                if (!empty($value)) {
                        if (isset($_GET[$value])) $temp = trim($_GET[$value]);
                        if (isset($_POST[$value])) $temp = trim($_POST[$value]);
                        if ($isfliter == true) {
                                $temp = XFilter::filterStr($temp);
                        }
                        else {
                                $temp = XFilter::stripArray($temp);
                        }
                        if (empty($temp) && !empty($default)) {
                                $temp = $default;
                        }
                        return trim($temp);
                }
                else {
                        return '';
                }
        }
public static function stripArray(&$_data){
                if (is_array($_data)){
                        foreach ($_data as $_key => $_value){
                                $_data[$_key] = trim(self::stripArray($_value));
                        }
                        return $_data;
                }else{
                        return stripslashes(trim($_data));
                }
        }

直接向此文件post数据添加frendlink,前台存储xss。
 

屏幕快照 2015-01-26 下午2.03.42.png

 

解决方案:

后端文件都做好访问限制, 对url参数过滤,在函数之前加入$this->checkAuth(') 函数

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论