zoukankan      html  css  js  c++  java
  • 审计篇丨PHPcms9.6.3后台XSS审计

    引言

    今天与大家分享的文章是关于审计思路的知识点,用到的是PHPcms的最新版本,因为常规扫描无法进入后台,所以我们修改了代码让扫描器爬虫爬到后台。

     

     

     

    漏洞复现环境

    安装PHPstudy

    安装PHPcms9.6.3版本20170515

    安装PHPCMS程序版本:PHPcms V9.6.3 Release 20170515

    操作系统:WINNT

    服务器软件:Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45

    MySQL 版本:5.5.53

    上传文件:2M

    安装上PHPcms9.6.3,删除管理后台的验证码的代码,主要涉及以下代码:

    第一步

    找到文件PHPcmsmodulesadminindex.php

    删除以下代码(第33行)

    $code = isset($_POST['code']) && trim($_POST['code']) ?trim($_POST['code']) : showmessage(L('input_code'), HTTP_REFERER);
     if ($_SESSION['code'] != strtolower($code)) {
     $_SESSION['code'] = '';
     showmessage(L('code_error'), HTTP_REFERER);
     }
    $_SESSION['code'] = '';
    

    第二步

    找到文件:

    PHPcmsmodulesadmin emplateslogin.tpl.php

    删除以下代码(第38行)

    <label>
    <?php 
     echo L('security_code')
    ?>:
    </label>
    <inputname="code" type="text" class="ipt ipt_reg"onfocus="document.getElementByIdx_x('yzm').style.display='block'"/>
    

    删除以下代码(第39行)

    <div id="yzm" class="yzm">
     <?php echo form::checkcode('code_img')?><br />
     <a href="javascript:document.getElementById('code_img').src='<?php echo SITE_PROTOCOL.SITE_URL.WEB_PATH;?>api.php?op=checkcode&m=admin&c=index&a=checkcode&time='+Math.random();void(0);">
     <?php echo L('click_change_validate')?></a>
    </div>
    

     

     

    使用avws登陆扫描让爬虫进后台

     

     

     

     

    用户名为PHPcms PHPcms

     

     

     

    跑了一段时间,发现有结果了。

    pc_hash如果失效,就替换掉。

    Poc

    http://localhost//index.php?m=admin&c=index&a=login&pc_hash=K4KuIk&a=public_set_model&c=index&m=admin&site_model=%3Cscript%3Ealert(1)%3C/script%3E&time=0.10436825733631849
    

    主要漏洞参数site_model

     

    分析

    WWWphpcmsmodulesadminindex.php

    313-314行

     public function public_set_model() {
     $model = $_GET['site_model'];
     if (!$model) {
     param::set_cookie('site_model','');
     } else {
     $models = pc_base::load_config('model_config');
     if (in_array($model, array_keys($models))) {
     param::set_cookie('site_model', $model);
     } else {
     param::set_cookie('site_model','');
     }
     }
     $menudb = pc_base::load_model('menu_model');
     $where = array('parentid'=>0,'display'=>1);
    

    site_model没做任何过滤。

    以上是今天要分享的全部内容,大家学会了吗?

  • 相关阅读:
    使用SO_REVTIMEO套接字选项为recvfrom设置超时
    使用select为描述符设置超时
    套接字超时设置方法
    使用SIGALARM为recvfrom设置超时
    使用SIGALARM为connect设置超时
    20200410 阿里巴巴Java开发手册
    20200409 Vue 视频学习【归档】
    20200319 Spring MVC 官方文档【归档】
    20200319 Spring Web MVC 2-5
    20200319 Spring Web MVC 1
  • 原文地址:https://www.cnblogs.com/ichunqiu/p/10768949.html
Copyright © 2011-2022 走看看