CMS从CSRF到Getshell的示例分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
写在前:
最近准备看一下代码执行相关漏洞,日常逛cnvd时发现一个和代码执行有关的漏洞如下图所示。
看了一眼这个漏洞的简介这个是一个比较小众的CMS,加之这个马赛克,这明显是疯狂暗示去分析一下这个漏洞。
环境搭建:
我使用的是该cms1.0 +ache2.4.39+PHP Version 5.6.9,该cms只能使用php5.x,不支持最新版的PHP。
傻瓜式安装,安装成功之后入下图所示。
在CNVD的漏洞详情里明确说是后台的漏洞,所以我们直接查看后台的代码。根据神打码的提示,定位到相关的文件
该文件内容很少,漏洞也相当明显。
一开始注意到了这里插入了php代码,没有过滤。
然后去查了一下php echo函数后怎么执行代码
不过好像并没有找到echo函数执行代码的方式。返回去上面重新看一下代码,发现这里将用户的输入写入了一个文件中。
前台输入之后
找到Ping.php文件,发现直接写入了一个没有任何权限校验的文件中。不过漏洞有些鸡肋就是输入点在后台。
可以尝试结合一下其他的漏洞使得这个漏洞的可用性提高。翻了一下整个源码,发现这个系统并没有防止CSRF漏洞的措施,我们可以CSRF来组合利用。
构造一个CSRF界面
<html>
<!– CSRF PoC – generated by Burp Suite Professional –>
<body>
<script>history.pushState('', '', '/')</script>
<formaction="http://www.test.com/sea/72vlt3/admin_ping.php?action=set"method="POST">
<input type="hidden" name="weburl"value="&#63;&gt;&#59;1" />
<input type="hidden" name="token"value="123456789" />
<input type="submit" value="Submit request" />
</form>
</body>
</html>
可以成功触发
插入payload,可以在未授权的情况下直接命令执行。
延伸一下,其实这个问题属于全局性的。另两个点
这里同样直接将用户的输入直接保存到了没有任何权限校验的文件中。
修复建议:
1,在数据包中添加随机token,防止CSRF漏洞的发生,这样在一定程度上可以降低风险。
2,前端用户的输入内容不要输入到文件中,使用数据库进行保存。
3,其实这一种方法比较“偷懒”,将生成的文件以随机字符串的方式命名,并且以txt后缀名结尾。
关于CMS从CSRF到Getshell的示例分析问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
原创文章,作者:1402239773,如若转载,请注明出处:https://blog.ytso.com/222606.html