实验环境:海洋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,而且只需传过去就能用菜刀连上。
放入菜刀,那密码是什么呢,是9[],不是9。
于是乎,连接成功。