DedeCMS Xss+Csrf Getshell \dede\file_manage_control.php
目录
. 漏洞描述
. 漏洞触发条件
. 漏洞影响范围
. 漏洞代码分析
. 防御方法
. 攻防思考
1. 漏洞描述
对这个漏洞的利用方式进行简单的概括
. 这个漏洞的利用前提是需要登录到后台进行操作,准确来说是从cookies的角度来说是需要处于登录的后台状态
. 后台的Logo上传存在xss漏洞,黑客可以在img的src中注入xss的代码
. 黑客可以利用xss未过滤漏洞,发起CSRF攻击,劫持目标用户向"/dede/file_manage_control.php"文件发送畸形POST数据包
. "/dede/file_manage_control.php"中未对外部输入的数据进行有效的过滤、转义,就将数据输出到磁盘文件中,最终导致了GETSHELL
对于这个漏洞我们需要明白的是,漏洞的根源在于DEDE的后台存在XSS未过滤漏洞,而"/dede/file_manager_control.php"本身并没有太大的漏洞,因为这个文件本来就是网站系统提供的原生的业务功能,允许管理员以类似FTP管理的形式管理自己的磁盘
Relevant Link:
http://www.wooyun.org/bugs/wooyun-2010-025175
http://www.wooyun.org/bugs/wooyun-2010-065561
http://www.2cto.com/Article/201409/335025.html
2. 漏洞触发条件
. 黑客已经拿到了管理员的后台帐号、密码
. 目标网站的后台(通常是审核的位置)存在XSS未过滤漏洞
. 黑客通过后台XSS未过滤漏洞劫持管理员,强制向特定文件发起AJAX POST请求
. 发起基于XSS+CSRF的攻击
) SQL Injection Based On XSS+CSRF
) File Upload Based On XSS+CSRF
0x1: POC
. 利用XSS强制劫持用户发起POST请求
注入xss代码 . POST
http://localhost/dedecms5.7/dede/file_manage_control.php . DATA
fmdo=edit&backurl=&activepath=&filename=csrf.php&str=<?php eval($_post[op]);?>&b1=

3. 漏洞影响范围
. DedeCMS-V5.-UTF8-SP1
. <= DedeCMS-V5.-UTF8-SP1
4. 漏洞代码分析
从本质上来讲,这个漏洞的根源是基于后台管理员交互的XSS+CSRF攻击,但是XSS的代码防御涉及到很多的逻辑点,很难做到逐一防御,而且XSS的利用涉及到某个模块是否有安装这种问题
一个可行的(但也不是最好的)的防御方法是"切断业务","\dede\file_manage_control.php"是网站的一个业务功能,提供文件上传,我们可以对"\dede\file_manage_control.php"中的文件上传进行"insert function hook",对"POST File Upload Based On XSS+CSRF"的文件进行恶意检测
5. 防御方法
0x1: \dede\file_manage_control.php
<?php
/**
* 文件管理控制
*
* @version $Id: file_manage_control.php 1 8:48 2010年7月13日Z tianya $
* @package DedeCMS.Administrator
* @copyright Copyright (c) 2007 - 2010, DesDev, Inc.
* @license http://help.dedecms.com/usersguide/license.html
* @link http://www.dedecms.com
*/
require(dirname(__FILE__)."/config.php"); function find_php_payload($body, $file)
{
$express = "/<\?(php){0,1}(.*)/i";
if ( preg_match($express, $body) )
{
if( file_exists($file) )
{
@unlink($file);
}
die("Request Error!");
}
} CheckPurview('plus_文件管理器');
...
else if($fmdo=="edit")
{
$filename = str_replace("..", "", $filename);
$file = "$cfg_basedir$activepath/$filename";
//对输入变量进行转义
$str = stripslashes($str); $str = find_php_payload($str, $file); $fp = fopen($file, "w");
fputs($fp, $str);
fclose($fp);
if(empty($backurl))
{
ShowMsg("成功保存一个文件!","file_manage_main.php?activepath=$activepath");
}
else
{
ShowMsg("成功保存文件!",$backurl);
}
exit();
}
...
0x2: 防御方案对网站业务的影响
使用"业务切断"思想做的防御方案能够成功的防御这种XSS+CSRF Getshell攻击,但是也对业务造成了一定的影响
1. 用户在编辑的文件中带有"<?php"标签



2. 黑客使用XSS+CSRF发送AJAX POST请求进行GETSHELL

代码成功地防御了黑客的注入攻击
6. 攻防思考
Copyright (c) 2014 LittleHann All rights reserved
DedeCMS Xss+Csrf Getshell \dede\file_manage_control.php的更多相关文章
- XSS CSRF
XSS CSRF XSS 参考 https://zh.wikipedia.org/wiki/%E8%B7%A8%E7%B6%B2%E7%AB%99%E6%8C%87%E4%BB%A4%E7%A2%BC ...
- 关于安全性问题:(XSS,csrf,cors,jsonp,同源策略)
关于安全性问题:(XSS,csrf,cors,jsonp,同源策略) Ajax 是无需刷新页面就能从服务器获取数据的一种方法.它的核心对象是XHR,同源策略是ajax的一种约束,它为通信设置了相同的协 ...
- XSS/CSRF跨站攻击和防护方案
Xss(Cross Site Scripting 跨站脚本攻击)/CSRF(Cross-site request forgery 跨站请求伪造),它与著名的SQL注入攻击类似,都是利用了Web页面的编 ...
- 深入理解OAuth2.0 XSS CSRF CORS 原理
基于Token的WEB后台认证机制 http://www.cnblogs.com/xiekeli/p/5607107.html 深入理解OAuth2.0协议http://blog.csdn.net/s ...
- [代码审计]yxcms从伪xss到getshell
0x00 前言 这篇文章首发于圈子,这里作为记录一下. 整个利用链构造下来是比较有趣的,但实际渗透中遇到的几率比较少. 此次审的是yxcms 1.4.6版本,应该是最后一个版本了吧? 0x01 从任意 ...
- Web攻防之XSS,CSRF,SQL注入
摘要:对Web服务器的攻击也可以说是形形色色.种类繁多,常见的有挂马.SQL注入.缓冲区溢出.嗅探.利用IIS等针对Webserver漏洞进行攻击.本文结合WEB TOP10漏洞中常见的SQL注入,跨 ...
- XSS CSRF 攻击
XSS:跨站脚本(Cross-site scripting) CSRF:跨站请求伪造(Cross-site request forgery)定义: 跨网站脚本(Cross-site scripting ...
- web安全:xss && csrf
首先在user.php文件中去除黑名单的第一行标签,在白名单中添加<script>E1:csrf攻击zoobarcsrf:cross-site request forgery 跨站伪 ...
- XSS,CSRF,Cookie防劫持的处理
Cookie与sessionHTTP天然是无状态的协议, 为了维持和跟踪用户的状态, 引入了Cookie和Session. Cookie包含了浏览器客户端的用户凭证, 相对较小. Session则维护 ...
随机推荐
- 20款最佳用户体验的Sublime Text 2/3主题下载及安装方法
20款最佳用户体验的Sublime Text 2/3主题下载及安装方法
- swift 初探NSURLSession
进行封装, 新建一个类.network class Network1: NSObject { // 没有参数+结果的get 自定义 HTTP method 和 URL+闭包 static func ...
- win8.1环境下安装arduino驱动问题解决方案
1. Windows 键+ R, 输入 shutdown.exe /r /o /f /t 00 2.此时电脑会自动重启,进入一下画面,选择Troubleshoot (转载请注明原处:http://ww ...
- 一些实用的sublime快捷键以及初始设置
一些常用快捷键 Ctrl + N-------------------新建 Ctrl + F-------------------查找 Ctrl+Shift +k -----------删除一行 Ct ...
- 2015/11/9用Python写游戏,pygame入门(8):按钮和游戏结束
昨天没有更新内容,今天相对多写一些. 因为我们已经基本完成游戏框架,但是游戏结束后,并不知道怎样比较好开始.我本来本着懒的原则,想结束后显示一个黑屏,然后你重新点一下鼠标就重新开始.但是那样实在太不像 ...
- JVM内存管理------JAVA语言的内存管理概述
引言 内存管理一直是JAVA语言自豪与骄傲的资本,它让JAVA程序员基本上可以彻底忽略与内存管理相关的细节,只专注于业务逻辑.不过世界上不存在十全十美的好事,在带来了便利的同时,也因此引入了很多令人抓 ...
- css 图片的无缝滚动
转载:http://blog.sina.com.cn/s/blog_6387e82401013kx8.html js的图片的横向或者竖向的无缝滚动图片. ttp://zx.bjmylike.com/ ...
- JavaScript的理解记录(1)
1.JavaScript的数据类型分为两类:原始类型和对象类型: 原始类型包括:数字,字符串,布尔值,null和undefined; (都是不可变类型,值不可以修改) 对象类型:普通对象和函数: 函数 ...
- vim 快捷键
1.vim ~/.vimrc 进入配置文件 如果不知道vimrc文件在哪,可使用 :scriptnames 来查看 set nu #行号 set tabstop=4 #一个tab为4个空格长度 set ...
- Intent和Intent Filters
什么是Intent Intent是android开发中的重要对象,它作为一个信息承载对象存在. 我们可以在使用其他一些组件的时候从Intent获取行为响应的准则(即应该做什么东西,如何 ...